diff --git a/dist/assemblyscript.js b/dist/assemblyscript.js index 3d02f43a..5f37c130 100644 --- a/dist/assemblyscript.js +++ b/dist/assemblyscript.js @@ -1,3 +1,3 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("binaryen")):"function"==typeof define&&define.amd?define(["binaryen"],t):"object"==typeof exports?exports.assemblyscript=t(require("binaryen")):e.assemblyscript=t(e.binaryen)}("undefined"!=typeof self?self:this,function(e){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=12)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.NONE=0]="NONE",e[e.IMPORT=1]="IMPORT",e[e.EXPORT=2]="EXPORT",e[e.DECLARE=4]="DECLARE",e[e.CONST=8]="CONST",e[e.LET=16]="LET",e[e.STATIC=32]="STATIC",e[e.READONLY=64]="READONLY",e[e.ABSTRACT=128]="ABSTRACT",e[e.PUBLIC=256]="PUBLIC",e[e.PRIVATE=512]="PRIVATE",e[e.PROTECTED=1024]="PROTECTED",e[e.GET=2048]="GET",e[e.SET=4096]="SET",e[e.DEFINITE_ASSIGNMENT=8192]="DEFINITE_ASSIGNMENT",e[e.AMBIENT=16384]="AMBIENT",e[e.GENERIC=32768]="GENERIC",e[e.GENERIC_CONTEXT=65536]="GENERIC_CONTEXT",e[e.INSTANCE=131072]="INSTANCE",e[e.CONSTRUCTOR=262144]="CONSTRUCTOR",e[e.ARROW=524288]="ARROW",e[e.MODULE_EXPORT=1048576]="MODULE_EXPORT",e[e.MODULE_IMPORT=2097152]="MODULE_IMPORT",e[e.COMPILED=4194304]="COMPILED",e[e.INLINED=8388608]="INLINED",e[e.SCOPED=16777216]="SCOPED",e[e.TRAMPOLINE=33554432]="TRAMPOLINE",e[e.VIRTUAL=67108864]="VIRTUAL",e[e.MAIN=134217728]="MAIN",e[e.QUOTED=268435456]="QUOTED"}(t.CommonFlags||(t.CommonFlags={})),t.PATH_DELIMITER="/",t.PARENT_SUBST="..",t.GETTER_PREFIX="get:",t.SETTER_PREFIX="set:",t.INSTANCE_DELIMITER="#",t.STATIC_DELIMITER=".",t.INNER_DELIMITER="~",t.LIBRARY_SUBST="~lib",t.LIBRARY_PREFIX=t.LIBRARY_SUBST+t.PATH_DELIMITER,t.FILESPACE_PREFIX="file:"},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,i=r(10),a=r(2),s=r(10);function o(e){switch(e){case n.INFO:return"INFO";case n.WARNING:return"WARNING";case n.ERROR:return"ERROR";default:return assert(!1),""}}function c(e){switch(e){case n.INFO:return t.COLOR_BLUE;case n.WARNING:return t.COLOR_YELLOW;case n.ERROR:return t.COLOR_RED;default:return assert(!1),""}}t.DiagnosticCode=s.DiagnosticCode,t.diagnosticCodeToString=s.diagnosticCodeToString,function(e){e[e.INFO=0]="INFO",e[e.WARNING=1]="WARNING",e[e.ERROR=2]="ERROR"}(n=t.DiagnosticCategory||(t.DiagnosticCategory={})),t.diagnosticCategoryToString=o,t.COLOR_BLUE="",t.COLOR_YELLOW="",t.COLOR_RED="",t.COLOR_RESET="",t.diagnosticCategoryToColor=c;var l=function(){function e(e,t,r){this.range=null,this.code=e,this.category=t,this.message=r}return e.create=function(t,r,n,a,s){void 0===n&&(n=null),void 0===a&&(a=null),void 0===s&&(s=null);var o=i.diagnosticCodeToString(t);return null!=n&&(o=o.replace("{0}",n)),null!=a&&(o=o.replace("{1}",a)),null!=s&&(o=o.replace("{2}",s)),new e(t,r,o)},e.createInfo=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.INFO,r,i)},e.createWarning=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.WARNING,r,i)},e.createError=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.ERROR,r,i)},e.prototype.withRange=function(e){return this.range=e,this},e.prototype.toString=function(){return this.range?o(this.category)+" "+this.code.toString(10)+': "'+this.message+'" in '+this.range.source.normalizedPath+":"+this.range.line.toString(10)+":"+this.range.column.toString(10):o(this.category)+" "+this.code.toString(10)+": "+this.message},e}();function p(e,r){void 0===r&&(r=!1);for(var n=e.source.text,i=n.length,s=e.start,o=e.end;s>0&&!a.isLineBreak(n.charCodeAt(s-1));)s--;for(;o=0?c.substring(l+1):c,o.statements=new Array,o.range=new a.Range(o,0,r.length),o.text=r,o}return n(t,e),Object.defineProperty(t.prototype,"isEntry",{get:function(){return this.sourceKind==q.ENTRY},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isLibrary",{get:function(){return this.sourceKind==q.LIBRARY},enumerable:!0,configurable:!0}),t}(c);t.Source=Z;var J=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.decorators=null,t.cachedProgramLevelInternalName=null,t.cachedFileLevelInternalName=null,t}return n(t,e),Object.defineProperty(t.prototype,"programLevelInternalName",{get:function(){return this.cachedProgramLevelInternalName||(this.cachedProgramLevelInternalName=Re(this,!0)),this.cachedProgramLevelInternalName},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"fileLevelInternalName",{get:function(){return this.cachedFileLevelInternalName||(this.cachedFileLevelInternalName=Re(this,!1)),this.cachedFileLevelInternalName},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isTopLevel",{get:function(){var e=this.parent;return!!e&&(!(e.kind==s.VARIABLE&&!(e=e.parent))&&e.kind==s.SOURCE)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isTopLevelExport",{get:function(){var e=this.parent;return!(!e||e.kind==s.VARIABLE&&!(e=e.parent))&&(e.kind==s.NAMESPACEDECLARATION?this.is(i.CommonFlags.EXPORT)&&e.isTopLevelExport:e.kind==s.CLASSDECLARATION?this.is(i.CommonFlags.STATIC)&&e.isTopLevelExport:e.kind==s.SOURCE&&this.is(i.CommonFlags.EXPORT))},enumerable:!0,configurable:!0}),t.prototype.needsExplicitExport=function(e){return e.name.text!=e.externalName.text||this.range.source!=e.range.source||!this.isTopLevelExport},t}(j);t.DeclarationStatement=J;var $=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t}(J);t.VariableLikeDeclarationStatement=$;var ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.BLOCK,t}return n(t,e),t}(j);t.BlockStatement=ee;var te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.BREAK,t}return n(t,e),t}(j);t.BreakStatement=te;var re=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.CLASSDECLARATION,t}return n(t,e),Object.defineProperty(t.prototype,"isGeneric",{get:function(){var e=this.typeParameters;return null!=e&&e.length>0},enumerable:!0,configurable:!0}),t}(J);t.ClassDeclaration=re;var ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.CONTINUE,t}return n(t,e),t}(j);t.ContinueStatement=ne;var ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.DO,t}return n(t,e),t}(j);t.DoStatement=ie;var ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EMPTY,t}return n(t,e),t}(j);t.EmptyStatement=ae;var se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMDECLARATION,t}return n(t,e),t}(J);t.EnumDeclaration=se;var oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMVALUEDECLARATION,t}return n(t,e),t}(J);t.EnumValueDeclaration=oe;var ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORTIMPORT,t}return n(t,e),t}(c);t.ExportImportStatement=ce;var le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORTMEMBER,t}return n(t,e),t}(c);t.ExportMember=le;var pe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORT,t}return n(t,e),t}(j);t.ExportStatement=pe;var ue=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPRESSION,t}return n(t,e),t}(j);t.ExpressionStatement=ue;var he=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FIELDDECLARATION,t.parameterIndex=-1,t}return n(t,e),t}($);t.FieldDeclaration=he;var de=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FOR,t}return n(t,e),t}(j);t.ForStatement=de;var _e=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FUNCTIONDECLARATION,t}return n(t,e),Object.defineProperty(t.prototype,"isGeneric",{get:function(){var e=this.typeParameters;return null!=e&&e.length>0},enumerable:!0,configurable:!0}),t}(J);t.FunctionDeclaration=_e;var me=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IF,t}return n(t,e),t}(j);t.IfStatement=me;var ge=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORTDECLARATION,t}return n(t,e),t}(J);t.ImportDeclaration=ge;var ye=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORT,t}return n(t,e),t}(j);t.ImportStatement=ye;var Ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.INTERFACEDECLARATION,t}return n(t,e),t}(re);t.InterfaceDeclaration=Ee;var fe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.METHODDECLARATION,t}return n(t,e),t}(_e);t.MethodDeclaration=fe;var Te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.NAMESPACEDECLARATION,t}return n(t,e),t}(J);t.NamespaceDeclaration=Te;var Ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.RETURN,t}return n(t,e),t}(j);t.ReturnStatement=Ie;var ve=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCHCASE,t}return n(t,e),t}(c);t.SwitchCase=ve;var Ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCH,t}return n(t,e),t}(j);t.SwitchStatement=Ae;var Ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.THROW,t}return n(t,e),t}(j);t.ThrowStatement=Ce;var Ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TRY,t}return n(t,e),t}(j);t.TryStatement=Ne;var Oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TYPEDECLARATION,t}return n(t,e),t}(J);t.TypeDeclaration=Oe;var Se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLEDECLARATION,t}return n(t,e),t}($);t.VariableDeclaration=Se;var Le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLE,t}return n(t,e),t}(j);t.VariableStatement=Le;var be=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VOID,t}return n(t,e),t}(j);t.VoidStatement=be;var ke=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.WHILE,t}return n(t,e),t}(j);function Re(e,t){void 0===t&&(t=!1);var r=e.name.text,n=e.parent;return n&&(e.kind!=s.VARIABLEDECLARATION||n.kind!=s.VARIABLE||(n=n.parent))?n.kind==s.CLASSDECLARATION?Re(n,t)+(e.is(i.CommonFlags.STATIC)?i.STATIC_DELIMITER:i.INSTANCE_DELIMITER)+r:n.kind==s.NAMESPACEDECLARATION||n.kind==s.ENUMDECLARATION?Re(n,t)+i.STATIC_DELIMITER+r:t?r:e.range.source.internalPath+i.PATH_DELIMITER+r:r}function xe(e){return e.endsWith(".ts")&&(e=e.substring(0,e.length-3)),e}function Fe(e,t){for(var r=0,n=e.length;r=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)s.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return s};Object.defineProperty(t,"__esModule",{value:!0});var s,o=r(0),c=r(1),l=r(7),p=r(3),u=r(5),h=r(11),d=function(){return function(){}}(),_=function(){return function(){}}(),m=function(){return function(){}}();function g(e,t){switch(assert(t.length),e){case p.DecoratorKind.OPERATOR:case p.DecoratorKind.OPERATOR_BINARY:switch(t.charCodeAt(0)){case 91:if("[]"==t)return s.INDEXED_GET;if("[]="==t)return s.INDEXED_SET;break;case 123:if("{}"==t)return s.UNCHECKED_INDEXED_GET;if("{}="==t)return s.UNCHECKED_INDEXED_SET;break;case 43:if("+"==t)return s.ADD;break;case 45:if("-"==t)return s.SUB;break;case 42:if("*"==t)return s.MUL;if("**"==t)return s.POW;break;case 47:if("/"==t)return s.DIV;break;case 37:if("%"==t)return s.REM;break;case 38:if("&"==t)return s.BITWISE_AND;break;case 124:if("|"==t)return s.BITWISE_OR;break;case 94:if("^"==t)return s.BITWISE_XOR;break;case 61:if("=="==t)return s.EQ;break;case 33:if("!="==t)return s.NE;break;case 62:if(">"==t)return s.GT;if(">="==t)return s.GE;if(">>"==t)return s.BITWISE_SHR;if(">>>"==t)return s.BITWISE_SHR_U;break;case 60:if("<"==t)return s.LT;if("<="==t)return s.LE;if("<<"==t)return s.BITWISE_SHL}break;case p.DecoratorKind.OPERATOR_PREFIX:switch(t.charCodeAt(0)){case 43:if("+"==t)return s.PLUS;if("++"==t)return s.PREFIX_INC;break;case 45:if("-"==t)return s.MINUS;if("--"==t)return s.PREFIX_DEC;break;case 33:if("!"==t)return s.NOT;break;case 126:if("~"==t)return s.BITWISE_NOT}break;case p.DecoratorKind.OPERATOR_POSTFIX:switch(t.charCodeAt(0)){case 43:if("++"==t)return s.POSTFIX_INC;break;case 45:if("--"==t)return s.POSTFIX_DEC}}return s.INVALID}!function(e){e[e.INVALID=0]="INVALID",e[e.INDEXED_GET=1]="INDEXED_GET",e[e.INDEXED_SET=2]="INDEXED_SET",e[e.UNCHECKED_INDEXED_GET=3]="UNCHECKED_INDEXED_GET",e[e.UNCHECKED_INDEXED_SET=4]="UNCHECKED_INDEXED_SET",e[e.ADD=5]="ADD",e[e.SUB=6]="SUB",e[e.MUL=7]="MUL",e[e.DIV=8]="DIV",e[e.REM=9]="REM",e[e.POW=10]="POW",e[e.BITWISE_AND=11]="BITWISE_AND",e[e.BITWISE_OR=12]="BITWISE_OR",e[e.BITWISE_XOR=13]="BITWISE_XOR",e[e.BITWISE_SHL=14]="BITWISE_SHL",e[e.BITWISE_SHR=15]="BITWISE_SHR",e[e.BITWISE_SHR_U=16]="BITWISE_SHR_U",e[e.EQ=17]="EQ",e[e.NE=18]="NE",e[e.GT=19]="GT",e[e.GE=20]="GE",e[e.LT=21]="LT",e[e.LE=22]="LE",e[e.PLUS=23]="PLUS",e[e.MINUS=24]="MINUS",e[e.NOT=25]="NOT",e[e.BITWISE_NOT=26]="BITWISE_NOT",e[e.PREFIX_INC=27]="PREFIX_INC",e[e.PREFIX_DEC=28]="PREFIX_DEC",e[e.POSTFIX_INC=29]="POSTFIX_INC",e[e.POSTFIX_DEC=30]="POSTFIX_DEC"}(s=t.OperatorKind||(t.OperatorKind={}));var y,E,f=new Map,T=function(e){function t(t){void 0===t&&(t=null);var r=e.call(this,t)||this;return r.diagnosticsOffset=0,r.elementsLookup=new Map,r.instancesLookup=new Map,r.typesLookup=f,r.typeAliases=new Map,r.fileLevelExports=new Map,r.moduleLevelExports=new Map,r.arrayBufferInstance=null,r.arrayPrototype=null,r.stringInstance=null,r.mainFunction=null,r.abortInstance=null,r.memoryAllocateInstance=null,r.hasGC=!1,r.gcAllocateInstance=null,r.gcLinkInstance=null,r.gcMarkInstance=null,r.gcHeaderSize=0,r.gcHookOffset=0,r.resolver=new h.Resolver(r),r.sources=[],r}return n(t,e),t.prototype.getSource=function(e){for(var t=this.sources,r=0,n=t.length;r=0),assert(null!=e.type),e.type.toNativeType()){case 1:t=this.tempI32s||(this.tempI32s=[]);break;case 2:t=this.tempI64s||(this.tempI64s=[]);break;case 3:t=this.tempF32s||(this.tempF32s=[]);break;case 4:t=this.tempF64s||(this.tempF64s=[]);break;default:throw new Error("concrete type expected")}assert(e.index>=0),t.push(e)}},t.prototype.getAndFreeTempLocal=function(e,t){var r,n;switch(e.toNativeType()){case 1:r=this.tempI32s||(this.tempI32s=[]);break;case 2:r=this.tempI64s||(this.tempI64s=[]);break;case 3:r=this.tempF32s||(this.tempF32s=[]);break;case 4:r=this.tempF64s||(this.tempF64s=[]);break;default:throw new Error("concrete type expected")}return r.length?(n=r[r.length-1]).type=e:(n=this.addLocal(e),r.push(n)),e.is(36)&&this.flow.setLocalWrapped(n.index,t),n},t.prototype.enterBreakContext=function(){var e=this.nextBreakId++;return this.breakStack?this.breakStack.push(e):this.breakStack=[e],this.breakContext=e.toString(10)},t.prototype.leaveBreakContext=function(){assert(null!=this.breakStack);var e=this.breakStack.length;assert(e>0),this.breakStack.pop(),e>1?this.breakContext=this.breakStack[e-2].toString(10):(this.breakContext=null,this.breakStack=null)},t.prototype.finalize=function(e,t){if(this.ref=t,assert(!this.breakStack||!this.breakStack.length),this.breakStack=null,this.breakContext=null,this.tempI32s=this.tempI64s=this.tempF32s=this.tempF64s=null,this.program.options.sourceMap)for(var r=this.debugLocations,n=0,i=r.length;n=r.length)return!1;t=r[n],e-=64*(n+1)}return i64_ne(i64_and(t,i64_shl(i64_one,i64_new(e))),i64_zero)},e.prototype.setLocalWrapped=function(e,t){var r,n=-1;if(e<64){if(e<0)return;r=this.wrappedLocals}else{var i=this.wrappedLocalsExt;for(n=(e-64)/64|0,i||(this.wrappedLocalsExt=i=new Array(n+1),i.length=0);i.length<=n;)i.push(i64_new(0));r=i[n],e-=64*(n+1)}r=t?i64_or(r,i64_shl(i64_one,i64_new(e))):i64_and(r,i64_not(i64_shl(i64_one,i64_new(e)))),n>=0?this.wrappedLocalsExt[n]=r:this.wrappedLocals=r},e.prototype.inherit=function(e){this.flags|=2047&e.flags,this.wrappedLocals=e.wrappedLocals,this.wrappedLocalsExt=e.wrappedLocalsExt},e.prototype.inheritConditional=function(e){e.is(1)&&this.set(64),e.is(4)&&this.set(128),e.is(8)&&e.breakLabel==this.breakLabel&&this.set(256),e.is(16)&&e.continueLabel==this.continueLabel&&this.set(512),e.is(32)&&this.set(1024)},e.prototype.inheritMutual=function(e,t){this.flags|=e.flags&t.flags&63,this.flags|=1984&e.flags,this.flags|=1984&t.flags,this.wrappedLocals=i64_and(e.wrappedLocals,t.wrappedLocals);var r=e.wrappedLocalsExt,n=t.wrappedLocalsExt;if(null!=r&&null!=n){var i=this.wrappedLocalsExt,a=min(r.length,n.length);if(a){if(i)for(;i.lengtha):this.canOverflow(u.getBinaryLeft(e),t)&&!(u.getExpressionId(r=u.getBinaryRight(e))==u.ExpressionId.Const&&u.getConstValueI32(r)>=a);case u.BinaryOp.DivU32:case u.BinaryOp.RemI32:case u.BinaryOp.RemU32:return this.canOverflow(u.getBinaryLeft(e),t)||this.canOverflow(u.getBinaryRight(e),t)}break;case u.ExpressionId.Unary:switch(u.getUnaryOp(e)){case u.UnaryOp.EqzI32:case u.UnaryOp.EqzI64:return!1;case u.UnaryOp.ClzI32:case u.UnaryOp.CtzI32:case u.UnaryOp.PopcntI32:return t.size<7}break;case u.ExpressionId.Const:var s=0;switch(u.getExpressionType(e)){case 1:s=u.getConstValueI32(e);break;case 2:s=u.getConstValueI64Low(e);break;case 3:s=i32(u.getConstValueF32(e));break;case 4:s=i32(u.getConstValueF64(e));break;default:assert(!1)}switch(t.kind){case 0:return si8.MAX_VALUE;case 1:return si16.MAX_VALUE;case 5:return s<0||s>u8.MAX_VALUE;case 6:return s<0||s>u16.MAX_VALUE;case 10:return 0!=(-2&s)}break;case u.ExpressionId.Load:var o=void 0;switch(u.getLoadBytes(e)){case 1:o=u.isLoadSigned(e)?l.Type.i8:l.Type.u8;break;case 2:o=u.isLoadSigned(e)?l.Type.i16:l.Type.u16;break;default:o=u.isLoadSigned(e)?l.Type.i32:l.Type.u32}return z(o,t);case u.ExpressionId.Block:if(!u.getBlockName(e)){var c=assert(u.getBlockChildCount(e)),p=u.getBlockChild(e,c-1);return this.canOverflow(p,t)}break;case u.ExpressionId.If:return this.canOverflow(u.getIfTrue(e),t)||this.canOverflow(assert(u.getIfFalse(e)),t);case u.ExpressionId.Select:return this.canOverflow(u.getSelectThen(e),t)||this.canOverflow(u.getSelectElse(e),t);case u.ExpressionId.Call:var h=this.currentFunction.program,d=assert(h.instancesLookup.get(assert(u.getCallTarget(e))));assert(d.kind==y.FUNCTION);var _=d.signature.returnType;return!d.flow.is(2)||z(_,t);case u.ExpressionId.Unreachable:return!1}return!0},e.prototype.finalize=function(){assert(null==this.parent),this.continueLabel=null,this.breakLabel=null,this.returnLabel=null,this.contextualTypeArguments=null},e}();function z(e,t){var r=e.byteSize,n=t.byteSize;return!e.is(4)||r>n||e.is(1)!=t.is(1)}t.Flow=K},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,i=r(9);!function(e){e[e.None=0]="None",e[e.I32=1]="I32",e[e.I64=2]="I64",e[e.F32=3]="F32",e[e.F64=4]="F64",e[e.Unreachable=5]="Unreachable",e[e.Auto=-1]="Auto"}(t.NativeType||(t.NativeType={})),function(e){e[e.Invalid=_BinaryenInvalidId()]="Invalid",e[e.Block=_BinaryenBlockId()]="Block",e[e.If=_BinaryenIfId()]="If",e[e.Loop=_BinaryenLoopId()]="Loop",e[e.Break=_BinaryenBreakId()]="Break",e[e.Switch=_BinaryenSwitchId()]="Switch",e[e.Call=_BinaryenCallId()]="Call",e[e.CallIndirect=_BinaryenCallIndirectId()]="CallIndirect",e[e.GetLocal=_BinaryenGetLocalId()]="GetLocal",e[e.SetLocal=_BinaryenSetLocalId()]="SetLocal",e[e.GetGlobal=_BinaryenGetGlobalId()]="GetGlobal",e[e.SetGlobal=_BinaryenSetGlobalId()]="SetGlobal",e[e.Load=_BinaryenLoadId()]="Load",e[e.Store=_BinaryenStoreId()]="Store",e[e.Const=_BinaryenConstId()]="Const",e[e.Unary=_BinaryenUnaryId()]="Unary",e[e.Binary=_BinaryenBinaryId()]="Binary",e[e.Select=_BinaryenSelectId()]="Select",e[e.Drop=_BinaryenDropId()]="Drop",e[e.Return=_BinaryenReturnId()]="Return",e[e.Host=_BinaryenHostId()]="Host",e[e.Nop=_BinaryenNopId()]="Nop",e[e.Unreachable=_BinaryenUnreachableId()]="Unreachable",e[e.AtomicCmpxchg=_BinaryenAtomicCmpxchgId()]="AtomicCmpxchg",e[e.AtomicRMW=_BinaryenAtomicRMWId()]="AtomicRMW",e[e.AtomicWait=_BinaryenAtomicWaitId()]="AtomicWait",e[e.AtomicWake=_BinaryenAtomicWakeId()]="AtomicWake"}(n=t.ExpressionId||(t.ExpressionId={})),function(e){e[e.ClzI32=_BinaryenClzInt32()]="ClzI32",e[e.CtzI32=_BinaryenCtzInt32()]="CtzI32",e[e.PopcntI32=_BinaryenPopcntInt32()]="PopcntI32",e[e.NegF32=_BinaryenNegFloat32()]="NegF32",e[e.AbsF32=_BinaryenAbsFloat32()]="AbsF32",e[e.CeilF32=_BinaryenCeilFloat32()]="CeilF32",e[e.FloorF32=_BinaryenFloorFloat32()]="FloorF32",e[e.TruncF32=_BinaryenTruncFloat32()]="TruncF32",e[e.NearestF32=_BinaryenNearestFloat32()]="NearestF32",e[e.SqrtF32=_BinaryenSqrtFloat32()]="SqrtF32",e[e.EqzI32=_BinaryenEqZInt32()]="EqzI32",e[e.ClzI64=_BinaryenClzInt64()]="ClzI64",e[e.CtzI64=_BinaryenCtzInt64()]="CtzI64",e[e.PopcntI64=_BinaryenPopcntInt64()]="PopcntI64",e[e.NegF64=_BinaryenNegFloat64()]="NegF64",e[e.AbsF64=_BinaryenAbsFloat64()]="AbsF64",e[e.CeilF64=_BinaryenCeilFloat64()]="CeilF64",e[e.FloorF64=_BinaryenFloorFloat64()]="FloorF64",e[e.TruncF64=_BinaryenTruncFloat64()]="TruncF64",e[e.NearestF64=_BinaryenNearestFloat64()]="NearestF64",e[e.SqrtF64=_BinaryenSqrtFloat64()]="SqrtF64",e[e.EqzI64=_BinaryenEqZInt64()]="EqzI64",e[e.ExtendI32=_BinaryenExtendSInt32()]="ExtendI32",e[e.ExtendU32=_BinaryenExtendUInt32()]="ExtendU32",e[e.WrapI64=_BinaryenWrapInt64()]="WrapI64",e[e.TruncF32ToI32=_BinaryenTruncSFloat32ToInt32()]="TruncF32ToI32",e[e.TruncF32ToI64=_BinaryenTruncSFloat32ToInt64()]="TruncF32ToI64",e[e.TruncF32ToU32=_BinaryenTruncUFloat32ToInt32()]="TruncF32ToU32",e[e.TruncF32ToU64=_BinaryenTruncUFloat32ToInt64()]="TruncF32ToU64",e[e.TruncF64ToI32=_BinaryenTruncSFloat64ToInt32()]="TruncF64ToI32",e[e.TruncF64ToI64=_BinaryenTruncSFloat64ToInt64()]="TruncF64ToI64",e[e.TruncF64ToU32=_BinaryenTruncUFloat64ToInt32()]="TruncF64ToU32",e[e.TruncF64ToU64=_BinaryenTruncUFloat64ToInt64()]="TruncF64ToU64",e[e.ReinterpretF32=_BinaryenReinterpretFloat32()]="ReinterpretF32",e[e.ReinterpretF64=_BinaryenReinterpretFloat64()]="ReinterpretF64",e[e.ConvertI32ToF32=_BinaryenConvertSInt32ToFloat32()]="ConvertI32ToF32",e[e.ConvertI32ToF64=_BinaryenConvertSInt32ToFloat64()]="ConvertI32ToF64",e[e.ConvertU32ToF32=_BinaryenConvertUInt32ToFloat32()]="ConvertU32ToF32",e[e.ConvertU32ToF64=_BinaryenConvertUInt32ToFloat64()]="ConvertU32ToF64",e[e.ConvertI64ToF32=_BinaryenConvertSInt64ToFloat32()]="ConvertI64ToF32",e[e.ConvertI64ToF64=_BinaryenConvertSInt64ToFloat64()]="ConvertI64ToF64",e[e.ConvertU64ToF32=_BinaryenConvertUInt64ToFloat32()]="ConvertU64ToF32",e[e.ConvertU64ToF64=_BinaryenConvertUInt64ToFloat64()]="ConvertU64ToF64",e[e.PromoteF32=_BinaryenPromoteFloat32()]="PromoteF32",e[e.DemoteF64=_BinaryenDemoteFloat64()]="DemoteF64",e[e.ReinterpretI32=_BinaryenReinterpretInt32()]="ReinterpretI32",e[e.ReinterpretI64=_BinaryenReinterpretInt64()]="ReinterpretI64",e[e.ExtendI8ToI32=_BinaryenExtendS8Int32()]="ExtendI8ToI32",e[e.ExtendI16ToI32=_BinaryenExtendS16Int32()]="ExtendI16ToI32",e[e.ExtendI8ToI64=_BinaryenExtendS8Int64()]="ExtendI8ToI64",e[e.ExtendI16ToI64=_BinaryenExtendS16Int64()]="ExtendI16ToI64",e[e.ExtendI32ToI64=_BinaryenExtendS32Int64()]="ExtendI32ToI64"}(t.UnaryOp||(t.UnaryOp={})),function(e){e[e.AddI32=_BinaryenAddInt32()]="AddI32",e[e.SubI32=_BinaryenSubInt32()]="SubI32",e[e.MulI32=_BinaryenMulInt32()]="MulI32",e[e.DivI32=_BinaryenDivSInt32()]="DivI32",e[e.DivU32=_BinaryenDivUInt32()]="DivU32",e[e.RemI32=_BinaryenRemSInt32()]="RemI32",e[e.RemU32=_BinaryenRemUInt32()]="RemU32",e[e.AndI32=_BinaryenAndInt32()]="AndI32",e[e.OrI32=_BinaryenOrInt32()]="OrI32",e[e.XorI32=_BinaryenXorInt32()]="XorI32",e[e.ShlI32=_BinaryenShlInt32()]="ShlI32",e[e.ShrU32=_BinaryenShrUInt32()]="ShrU32",e[e.ShrI32=_BinaryenShrSInt32()]="ShrI32",e[e.RotlI32=_BinaryenRotLInt32()]="RotlI32",e[e.RotrI32=_BinaryenRotRInt32()]="RotrI32",e[e.EqI32=_BinaryenEqInt32()]="EqI32",e[e.NeI32=_BinaryenNeInt32()]="NeI32",e[e.LtI32=_BinaryenLtSInt32()]="LtI32",e[e.LtU32=_BinaryenLtUInt32()]="LtU32",e[e.LeI32=_BinaryenLeSInt32()]="LeI32",e[e.LeU32=_BinaryenLeUInt32()]="LeU32",e[e.GtI32=_BinaryenGtSInt32()]="GtI32",e[e.GtU32=_BinaryenGtUInt32()]="GtU32",e[e.GeI32=_BinaryenGeSInt32()]="GeI32",e[e.GeU32=_BinaryenGeUInt32()]="GeU32",e[e.AddI64=_BinaryenAddInt64()]="AddI64",e[e.SubI64=_BinaryenSubInt64()]="SubI64",e[e.MulI64=_BinaryenMulInt64()]="MulI64",e[e.DivI64=_BinaryenDivSInt64()]="DivI64",e[e.DivU64=_BinaryenDivUInt64()]="DivU64",e[e.RemI64=_BinaryenRemSInt64()]="RemI64",e[e.RemU64=_BinaryenRemUInt64()]="RemU64",e[e.AndI64=_BinaryenAndInt64()]="AndI64",e[e.OrI64=_BinaryenOrInt64()]="OrI64",e[e.XorI64=_BinaryenXorInt64()]="XorI64",e[e.ShlI64=_BinaryenShlInt64()]="ShlI64",e[e.ShrU64=_BinaryenShrUInt64()]="ShrU64",e[e.ShrI64=_BinaryenShrSInt64()]="ShrI64",e[e.RotlI64=_BinaryenRotLInt64()]="RotlI64",e[e.RotrI64=_BinaryenRotRInt64()]="RotrI64",e[e.EqI64=_BinaryenEqInt64()]="EqI64",e[e.NeI64=_BinaryenNeInt64()]="NeI64",e[e.LtI64=_BinaryenLtSInt64()]="LtI64",e[e.LtU64=_BinaryenLtUInt64()]="LtU64",e[e.LeI64=_BinaryenLeSInt64()]="LeI64",e[e.LeU64=_BinaryenLeUInt64()]="LeU64",e[e.GtI64=_BinaryenGtSInt64()]="GtI64",e[e.GtU64=_BinaryenGtUInt64()]="GtU64",e[e.GeI64=_BinaryenGeSInt64()]="GeI64",e[e.GeU64=_BinaryenGeUInt64()]="GeU64",e[e.AddF32=_BinaryenAddFloat32()]="AddF32",e[e.SubF32=_BinaryenSubFloat32()]="SubF32",e[e.MulF32=_BinaryenMulFloat32()]="MulF32",e[e.DivF32=_BinaryenDivFloat32()]="DivF32",e[e.CopysignF32=_BinaryenCopySignFloat32()]="CopysignF32",e[e.MinF32=_BinaryenMinFloat32()]="MinF32",e[e.MaxF32=_BinaryenMaxFloat32()]="MaxF32",e[e.EqF32=_BinaryenEqFloat32()]="EqF32",e[e.NeF32=_BinaryenNeFloat32()]="NeF32",e[e.LtF32=_BinaryenLtFloat32()]="LtF32",e[e.LeF32=_BinaryenLeFloat32()]="LeF32",e[e.GtF32=_BinaryenGtFloat32()]="GtF32",e[e.GeF32=_BinaryenGeFloat32()]="GeF32",e[e.AddF64=_BinaryenAddFloat64()]="AddF64",e[e.SubF64=_BinaryenSubFloat64()]="SubF64",e[e.MulF64=_BinaryenMulFloat64()]="MulF64",e[e.DivF64=_BinaryenDivFloat64()]="DivF64",e[e.CopysignF64=_BinaryenCopySignFloat64()]="CopysignF64",e[e.MinF64=_BinaryenMinFloat64()]="MinF64",e[e.MaxF64=_BinaryenMaxFloat64()]="MaxF64",e[e.EqF64=_BinaryenEqFloat64()]="EqF64",e[e.NeF64=_BinaryenNeFloat64()]="NeF64",e[e.LtF64=_BinaryenLtFloat64()]="LtF64",e[e.LeF64=_BinaryenLeFloat64()]="LeF64",e[e.GtF64=_BinaryenGtFloat64()]="GtF64",e[e.GeF64=_BinaryenGeFloat64()]="GeF64"}(t.BinaryOp||(t.BinaryOp={})),function(e){e[e.CurrentMemory=_BinaryenCurrentMemory()]="CurrentMemory",e[e.GrowMemory=_BinaryenGrowMemory()]="GrowMemory"}(t.HostOp||(t.HostOp={})),function(e){e[e.Add=_BinaryenAtomicRMWAdd()]="Add",e[e.Sub=_BinaryenAtomicRMWSub()]="Sub",e[e.And=_BinaryenAtomicRMWAnd()]="And",e[e.Or=_BinaryenAtomicRMWOr()]="Or",e[e.Xor=_BinaryenAtomicRMWXor()]="Xor",e[e.Xchg=_BinaryenAtomicRMWXchg()]="Xchg"}(t.AtomicRMWOp||(t.AtomicRMWOp={}));var a=function(){function e(){}return e.create=function(t,r){var n=new e;return n.buffer=t,n.offset=r,n},e}();t.MemorySegment=a;var s=function(){function e(){this.cachedTemporaryName=0,this.hasTemporaryFunction=!1,this.cachedPrecomputeName=0,this.cachedPrecomputeNames=0}return e.create=function(){var t=new e;return t.ref=_BinaryenModuleCreate(),t.cachedByValue=memory.allocate(16),t},e.createFrom=function(t){var r=c(t);try{var n=new e;return n.ref=_BinaryenModuleRead(r,t.length),n.cachedByValue=memory.allocate(24),n}finally{memory.free(changetype(r))}},e.prototype.addFunctionType=function(e,t,r){var n=u(e),i=l(r);try{return _BinaryenAddFunctionType(this.ref,n,t,i,r?r.length:0)}finally{memory.free(i),memory.free(n)}},e.prototype.getFunctionTypeBySignature=function(e,t){var r=l(t);try{return _BinaryenGetFunctionTypeBySignature(this.ref,e,r,t?t.length:0)}finally{memory.free(r)}},e.prototype.removeFunctionType=function(e){var t=u(e);try{_BinaryenRemoveFunctionType(this.ref,t)}finally{memory.free(t)}},e.prototype.createI32=function(e){var t=this.cachedByValue;return _BinaryenLiteralInt32(t,e),_BinaryenConst(this.ref,t)},e.prototype.createI64=function(e,t){void 0===t&&(t=0);var r=this.cachedByValue;return _BinaryenLiteralInt64(r,e,t),_BinaryenConst(this.ref,r)},e.prototype.createF32=function(e){var t=this.cachedByValue;return _BinaryenLiteralFloat32(t,e),_BinaryenConst(this.ref,t)},e.prototype.createF64=function(e){var t=this.cachedByValue;return _BinaryenLiteralFloat64(t,e),_BinaryenConst(this.ref,t)},e.prototype.createUnary=function(e,t){return _BinaryenUnary(this.ref,e,t)},e.prototype.createBinary=function(e,t,r){return _BinaryenBinary(this.ref,e,t,r)},e.prototype.createHost=function(e,t,r){void 0===t&&(t=null),void 0===r&&(r=null);var n=u(t),i=p(r);try{return _BinaryenHost(this.ref,e,n,i,r?r.length:0)}finally{memory.free(i),memory.free(n)}},e.prototype.createGetLocal=function(e,t){return _BinaryenGetLocal(this.ref,e,t)},e.prototype.createTeeLocal=function(e,t){return _BinaryenTeeLocal(this.ref,e,t)},e.prototype.createGetGlobal=function(e,t){var r=u(e);try{return _BinaryenGetGlobal(this.ref,r,t)}finally{memory.free(r)}},e.prototype.createLoad=function(e,t,r,n,i){return void 0===i&&(i=0),_BinaryenLoad(this.ref,e,t?1:0,i,e,n,r)},e.prototype.createStore=function(e,t,r,n,i){return void 0===i&&(i=0),_BinaryenStore(this.ref,e,i,e,t,r,n)},e.prototype.createAtomicLoad=function(e,t,r,n){return void 0===n&&(n=0),_BinaryenAtomicLoad(this.ref,e,n,r,t)},e.prototype.createAtomicStore=function(e,t,r,n,i){return void 0===i&&(i=0),_BinaryenAtomicStore(this.ref,e,i,t,r,n)},e.prototype.createAtomicRMW=function(e,t,r,n,i,a){return _BinaryenAtomicRMW(this.ref,e,t,r,n,i,a)},e.prototype.createAtomicCmpxchg=function(e,t,r,n,i,a){return _BinaryenAtomicCmpxchg(this.ref,e,t,r,n,i,a)},e.prototype.createAtomicWait=function(e,t,r,n){return _BinaryenAtomicWait(this.ref,e,t,r,n)},e.prototype.createAtomicWake=function(e,t){return _BinaryenAtomicWake(this.ref,e,t)},e.prototype.createSetLocal=function(e,t){return _BinaryenSetLocal(this.ref,e,t)},e.prototype.createSetGlobal=function(e,t){var r=u(e);try{return _BinaryenSetGlobal(this.ref,r,t)}finally{memory.free(r)}},e.prototype.createBlock=function(e,t,r){void 0===r&&(r=0);var n=u(e),i=p(t);try{return _BinaryenBlock(this.ref,n,i,t.length,r)}finally{memory.free(i),memory.free(n)}},e.prototype.createBreak=function(e,t,r){void 0===t&&(t=0),void 0===r&&(r=0);var n=u(e);try{return _BinaryenBreak(this.ref,n,t,r)}finally{memory.free(n)}},e.prototype.createDrop=function(e){return _BinaryenDrop(this.ref,e)},e.prototype.createLoop=function(e,t){var r=u(e);try{return _BinaryenLoop(this.ref,r,t)}finally{memory.free(r)}},e.prototype.createIf=function(e,t,r){return void 0===r&&(r=0),_BinaryenIf(this.ref,e,t,r)},e.prototype.createNop=function(){return _BinaryenNop(this.ref)},e.prototype.createReturn=function(e){return void 0===e&&(e=0),_BinaryenReturn(this.ref,e)},e.prototype.createSelect=function(e,t,r){return _BinaryenSelect(this.ref,r,e,t)},e.prototype.createSwitch=function(e,t,r,n){void 0===n&&(n=0);for(var i=e.length,a=new Array(i),s=0;s=0;--s)memory.free(a[s])}},e.prototype.createCall=function(e,t,r){var n=u(e),i=p(t);try{return _BinaryenCall(this.ref,n,i,t&&t.length||0,r)}finally{memory.free(i),memory.free(n)}},e.prototype.createCallIndirect=function(e,t,r){var n=p(t),i=u(r);try{return _BinaryenCallIndirect(this.ref,e,n,t&&t.length||0,i)}finally{memory.free(i),memory.free(n)}},e.prototype.createUnreachable=function(){return _BinaryenUnreachable(this.ref)},e.prototype.addGlobal=function(e,t,r,n){var i=u(e);try{return _BinaryenAddGlobal(this.ref,i,t,r?1:0,n)}finally{memory.free(i)}},e.prototype.removeGlobal=function(e){var t=u(e);try{_BinaryenRemoveGlobal(this.ref,t)}finally{memory.free(t)}},e.prototype.addFunction=function(e,t,r,n){var i=u(e),a=l(r);try{return _BinaryenAddFunction(this.ref,i,t,a,r?r.length:0,n)}finally{memory.free(a),memory.free(i)}},e.prototype.removeFunction=function(e){var t=u(e);try{_BinaryenRemoveFunction(this.ref,t)}finally{memory.free(t)}},e.prototype.addTemporaryFunction=function(e,t,r){this.hasTemporaryFunction=assert(!this.hasTemporaryFunction);var n=this.cachedTemporaryName;n||(this.cachedTemporaryName=n=u(""));var i=l(t);try{var a=_BinaryenAddFunctionType(this.ref,n,e,i,t?t.length:0);return _BinaryenAddFunction(this.ref,n,a,0,0,r)}finally{memory.free(i)}},e.prototype.removeTemporaryFunction=function(){this.hasTemporaryFunction=!assert(this.hasTemporaryFunction);var e=assert(this.cachedTemporaryName);_BinaryenRemoveFunction(this.ref,e),_BinaryenRemoveFunctionType(this.ref,e)},e.prototype.addFunctionExport=function(e,t){var r=u(e),n=u(t);try{return _BinaryenAddFunctionExport(this.ref,r,n)}finally{memory.free(n),memory.free(r)}},e.prototype.addTableExport=function(e,t){var r=u(e),n=u(t);try{return _BinaryenAddTableExport(this.ref,r,n)}finally{memory.free(n),memory.free(r)}},e.prototype.addMemoryExport=function(e,t){var r=u(e),n=u(t);try{return _BinaryenAddMemoryExport(this.ref,r,n)}finally{memory.free(n),memory.free(r)}},e.prototype.addGlobalExport=function(e,t){var r=u(e),n=u(t);try{return _BinaryenAddGlobalExport(this.ref,r,n)}finally{memory.free(n),memory.free(r)}},e.prototype.removeExport=function(e){var t=u(e);try{_BinaryenRemoveExport(this.ref,t)}finally{memory.free(t)}},e.prototype.addFunctionImport=function(e,t,r,n){var i=u(e),a=u(t),s=u(r);try{return _BinaryenAddFunctionImport(this.ref,i,a,s,n)}finally{memory.free(s),memory.free(a),memory.free(i)}},e.prototype.addTableImport=function(e,t,r){var n=u(e),i=u(t),a=u(r);try{return _BinaryenAddTableImport(this.ref,n,i,a)}finally{memory.free(a),memory.free(i),memory.free(n)}},e.prototype.addMemoryImport=function(e,t,r){var n=u(e),i=u(t),a=u(r);try{return _BinaryenAddMemoryImport(this.ref,n,i,a)}finally{memory.free(a),memory.free(i),memory.free(n)}},e.prototype.addGlobalImport=function(e,t,r,n){var i=u(e),a=u(t),s=u(r);try{return _BinaryenAddGlobalImport(this.ref,i,a,s,n)}finally{memory.free(s),memory.free(a),memory.free(i)}},e.prototype.setMemory=function(e,t,r,n,a){void 0===a&&(a=null);for(var s=u(a),o=r.length,p=new Array(o),h=new Array(o),d=new Array(o),_=0;_=0;--_)memory.free(p[_]);memory.free(s)}},e.prototype.setFunctionTable=function(e,t,r){for(var n=r.length,i=new Array(n),a=0;a=0;--a)memory.free(i[a])}},e.prototype.setStart=function(e){_BinaryenSetStart(this.ref,e)},e.prototype.getOptimizeLevel=function(){return _BinaryenGetOptimizeLevel()},e.prototype.setOptimizeLevel=function(e){void 0===e&&(e=2),_BinaryenSetOptimizeLevel(e)},e.prototype.getShrinkLevel=function(){return _BinaryenGetShrinkLevel()},e.prototype.setShrinkLevel=function(e){void 0===e&&(e=1),_BinaryenSetShrinkLevel(e)},e.prototype.setDebugInfo=function(e){void 0===e&&(e=!1),_BinaryenSetDebugInfo(e)},e.prototype.optimize=function(e){void 0===e&&(e=0),e?_BinaryenFunctionOptimize(e,this.ref):_BinaryenModuleOptimize(this.ref)},e.prototype.runPasses=function(e,t){void 0===t&&(t=0);for(var r=e.length,n=new Array(r),i=0;i=0;--i)memory.free(n[i])}},e.prototype.precomputeExpression=function(e){var t=_BinaryenGetOptimizeLevel(),r=_BinaryenGetShrinkLevel(),n=_BinaryenGetDebugInfo();_BinaryenSetOptimizeLevel(4),_BinaryenSetShrinkLevel(0),_BinaryenSetDebugInfo(!1);var i=_BinaryenExpressionGetType(e),a=this.addTemporaryFunction(i,null,e),s=this.cachedPrecomputeNames;if(!s){var o=u("precompute");this.cachedPrecomputeName=o,this.cachedPrecomputeNames=s=l([o])}return _BinaryenFunctionRunPasses(a,this.ref,s,1),e=_BinaryenFunctionGetBody(a),this.removeTemporaryFunction(),_BinaryenSetOptimizeLevel(t),_BinaryenSetShrinkLevel(r),_BinaryenSetDebugInfo(n),e},e.prototype.validate=function(){return 1==_BinaryenModuleValidate(this.ref)},e.prototype.interpret=function(){_BinaryenModuleInterpret(this.ref)},e.prototype.toBinary=function(e){var t=this.cachedByValue,r=u(e),n=0,i=0;try{_BinaryenModuleAllocateAndWrite(t,this.ref,r),n=h(t);var a=h(t+4);i=h(t+8);var s=new _;return s.output=function(e,t){for(var r=new Uint8Array(t),n=0;n>8&255),store(r+2,a>>16&255),store(r+3,a>>>24),r+=4}return t}function p(e){return l(e)}function u(e){if(null==e)return 0;for(var t=memory.allocate(function(e){for(var t=0,r=0,n=e.length;r=55296&&i<=57343&&r+1=55296&&a<=57343&&n+1>>6),store(r++,128|63&a)):a<=65535?(store(r++,224|a>>>12),store(r++,128|a>>>6&63),store(r++,128|63&a)):a<=2097151?(store(r++,240|a>>>18),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a)):a<=67108863?(store(r++,248|a>>>24),store(r++,128|a>>>18&63),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a)):(store(r++,252|a>>>30),store(r++,128|a>>>24&63),store(r++,128|a>>>18&63),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a))}return store(r,0),t}function h(e){return load(e)|load(e+1)<<8|load(e+2)<<16|load(e+3)<<24}function d(e){if(!e)return null;for(var t,r,n,i,a,s=new Array;t=load(e++);)128&t?(r=63&load(e++),192!=(224&t)?(n=63&load(e++),224==(240&t)?t=(15&t)<<12|r<<6|n:(i=63&load(e++),240==(248&t)?t=(7&t)<<18|r<<12|n<<6|i:(a=63&load(e++),t=248==(252&t)?(3&t)<<24|r<<18|n<<12|i<<6|a:(1&t)<<30|r<<24|n<<18|i<<12|a<<6|63&load(e++))),s.push(t)):s.push((31&t)<<6|r)):s.push(t);return String.fromCodePoints(s)}t.Relooper=o,t.readString=d;var _=function(){return function(){}}();t.BinaryModule=_,t.needsExplicitUnreachable=function e(t){switch(_BinaryenExpressionGetType(t)){case 1:case 2:case 3:case 4:return!1}switch(_BinaryenExpressionGetId(t)){case n.Unreachable:case n.Return:return!1;case n.Break:return 0!=_BinaryenBreakGetCondition(t);case n.Block:if(!_BinaryenBlockGetName(t)){var r=_BinaryenBlockGetNumChildren(t);return r>0&&e(_BinaryenBlockGetChild(t,r-1))}}return!0}},function(e,t){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(4);!function(e){e[e.I8=0]="I8",e[e.I16=1]="I16",e[e.I32=2]="I32",e[e.I64=3]="I64",e[e.ISIZE=4]="ISIZE",e[e.U8=5]="U8",e[e.U16=6]="U16",e[e.U32=7]="U32",e[e.U64=8]="U64",e[e.USIZE=9]="USIZE",e[e.BOOL=10]="BOOL",e[e.F32=11]="F32",e[e.F64=12]="F64",e[e.VOID=13]="VOID"}(t.TypeKind||(t.TypeKind={})),function(e){e[e.NONE=0]="NONE",e[e.SIGNED=1]="SIGNED",e[e.UNSIGNED=2]="UNSIGNED",e[e.INTEGER=4]="INTEGER",e[e.FLOAT=8]="FLOAT",e[e.POINTER=16]="POINTER",e[e.SHORT=32]="SHORT",e[e.LONG=64]="LONG",e[e.VALUE=128]="VALUE",e[e.REFERENCE=256]="REFERENCE",e[e.NULLABLE=512]="NULLABLE"}(t.TypeFlags||(t.TypeFlags={}));var i=function(){function e(e,t,r){this.cachedNullableType=null,this.kind=e,this.flags=t,this.size=r,this.byteSize=ceil(r/8),this.classReference=null,this.signatureReference=null,this.nonNullableType=this}return Object.defineProperty(e.prototype,"intType",{get:function(){switch(this.kind){case 0:return e.i8;case 1:return e.i16;case 11:case 2:return e.i32;case 12:case 3:return e.i64;case 4:return 64==this.size?e.isize64:e.isize32;case 5:return e.u8;case 6:return e.u16;case 7:return e.u32;case 8:return e.u64;case 9:return 64==this.size?e.usize64:e.usize32;case 10:default:return e.i32}},enumerable:!0,configurable:!0}),e.prototype.isManaged=function(e){if(e.hasGC){var t=this.classReference;return null!==t&&!t.hasDecorator(n.DecoratorFlags.UNMANAGED)}return!1},e.prototype.computeSmallIntegerShift=function(e){return e.size-this.size},e.prototype.computeSmallIntegerMask=function(e){var t=this.is(2)?this.size:this.size-1;return-1>>>e.size-t},e.prototype.is=function(e){return(this.flags&e)==e},e.prototype.isAny=function(e){return 0!=(this.flags&e)},e.prototype.asClass=function(t){assert(9==this.kind&&!this.classReference);var r=new e(this.kind,-129&this.flags|256,this.size);return r.classReference=t,r},e.prototype.asFunction=function(t){assert(7==this.kind&&!this.signatureReference);var r=new e(this.kind,-129&this.flags|256,this.size);return r.signatureReference=t,r},e.prototype.asNullable=function(){return assert(this.is(256)),this.cachedNullableType||(assert(!this.is(512)),this.cachedNullableType=new e(this.kind,512|this.flags,this.size),this.cachedNullableType.nonNullableType=this,this.cachedNullableType.classReference=this.classReference,this.cachedNullableType.signatureReference=this.signatureReference),this.cachedNullableType},e.prototype.isAssignableTo=function(t,r){var n,i,a,s;if(void 0===r&&(r=!1),this.is(256)){if(t.is(256)&&(!this.is(512)||t.is(512)))if(n=this.classReference){if(i=t.classReference)return n.isAssignableTo(i)}else if((a=this.signatureReference)&&(s=t.signatureReference))return a.isAssignableTo(s)}else if(!t.is(256))if(this.is(4))if(t.is(4)){if(!r||this==e.bool||this.is(1)==t.is(1))return this.size<=t.size}else{if(11==t.kind)return this.size<=23;if(12==t.kind)return this.size<=52}else if(this.is(8)&&t.is(8))return this.size<=t.size;return!1},e.commonCompatible=function(e,t,r){return t.isAssignableTo(e,r)?e:e.isAssignableTo(t,r)?t:null},e.prototype.toString=function(e){if(void 0===e&&(e=!1),!e&&this.is(256)){var t=this.classReference;if(t)return this.is(512)?t.toString()+" | null":t.toString();var r=this.signatureReference;if(r)return this.is(512)?"("+r.toString(!0)+") | null":r.toString(!0);assert(!1)}switch(this.kind){case 0:return"i8";case 1:return"i16";case 2:return"i32";case 3:return"i64";case 4:return"isize";case 5:return"u8";case 6:return"u16";case 7:return"u32";case 8:return"u64";case 9:return"usize";case 10:return"bool";case 11:return"f32";case 12:return"f64";default:assert(!1);case 13:return"void"}},e.prototype.toNativeType=function(){switch(this.kind){default:return 1;case 3:case 8:return 2;case 4:case 9:return 64==this.size?2:1;case 11:return 3;case 12:return 4;case 13:return 0}},e.prototype.toNativeZero=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(0);case 4:case 9:if(64!=this.size)return e.createI32(0);case 3:case 8:return e.createI64(0);case 11:return e.createF32(0);case 12:return e.createF64(0)}},e.prototype.toNativeOne=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(1);case 4:case 9:if(64!=this.size)return e.createI32(1);case 3:case 8:return e.createI64(1);case 11:return e.createF32(1);case 12:return e.createF64(1)}},e.prototype.toNativeNegOne=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(-1);case 4:case 9:if(64!=this.size)return e.createI32(-1);case 3:case 8:return e.createI64(-1,-1);case 11:return e.createF32(-1);case 12:return e.createF64(-1)}},e.prototype.toSignatureString=function(){switch(this.kind){default:return"i";case 3:case 8:return"I";case 4:case 9:return 64==this.size?"I":"i";case 11:return"f";case 12:return"F";case 13:return"v"}},e.i8=new e(0,165,8),e.i16=new e(1,165,16),e.i32=new e(2,133,32),e.i64=new e(3,197,64),e.isize32=new e(4,149,32),e.isize64=new e(4,213,64),e.u8=new e(5,166,8),e.u16=new e(6,166,16),e.u32=new e(7,134,32),e.u64=new e(8,198,64),e.usize32=new e(9,150,32),e.usize64=new e(9,214,64),e.bool=new e(10,166,1),e.f32=new e(11,137,32),e.f64=new e(12,201,64),e.void=new e(13,0,0),e}();t.Type=i,t.typesToNativeTypes=function(e){for(var t=e.length,r=new Array(t),n=0;ne?t[e]:o(e)},e.prototype.isAssignableTo=function(e){var t=this.thisType,r=e.thisType;if(t){if(!r||!t.isAssignableTo(r))return!1}else if(r)return!1;if(this.hasRest!=e.hasRest)return!1;var n=this.parameterTypes,i=e.parameterTypes,a=n.length;if(a!=i.length)return!1;for(var s=0;s=l&&u!=p?t.push("?: "):t.push(": "),t.push(i[u].toString());return t.push(") => "),t.push(this.returnType.toString()),t.join("")},e}();t.Signature=a;var s=null;function o(e){s||(s=[]);for(var t=s.length;t<=e;++t)s.push("arg$"+t.toString(10));return s[e-1]}t.getDefaultParameterName=o},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(t,r)};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var i,a,s=r(1),o=r(3),c=r(2);function l(e){switch(assert(e.length),e.charCodeAt(0)){case 97:switch(e){case"abstract":return i.ABSTRACT;case"as":return i.AS;case"async":return i.ASYNC;case"await":return i.AWAIT}break;case 98:switch(e){case"break":return i.BREAK}break;case 99:switch(e){case"case":return i.CASE;case"catch":return i.CATCH;case"class":return i.CLASS;case"continue":return i.CONTINUE;case"const":return i.CONST;case"constructor":return i.CONSTRUCTOR}break;case 100:switch(e){case"debugger":return i.DEBUGGER;case"declare":return i.DECLARE;case"default":return i.DEFAULT;case"delete":return i.DELETE;case"do":return i.DO}break;case 101:switch(e){case"else":return i.ELSE;case"enum":return i.ENUM;case"export":return i.EXPORT;case"extends":return i.EXTENDS}break;case 102:switch(e){case"false":return i.FALSE;case"finally":return i.FINALLY;case"for":return i.FOR;case"from":return i.FROM;case"function":return i.FUNCTION}break;case 103:switch(e){case"get":return i.GET}break;case 105:switch(e){case"if":return i.IF;case"implements":return i.IMPLEMENTS;case"import":return i.IMPORT;case"in":return i.IN;case"instanceof":return i.INSTANCEOF;case"interface":return i.INTERFACE;case"is":return i.IS}break;case 107:switch(e){case"keyof":return i.KEYOF}break;case 108:switch(e){case"let":return i.LET}break;case 109:switch(e){case"module":return i.MODULE}break;case 110:switch(e){case"namespace":return i.NAMESPACE;case"new":return i.NEW;case"null":return i.NULL}break;case 111:switch(e){case"of":return i.OF}break;case 112:switch(e){case"package":return i.PACKAGE;case"private":return i.PRIVATE;case"protected":return i.PROTECTED;case"public":return i.PUBLIC}break;case 114:switch(e){case"readonly":return i.READONLY;case"return":return i.RETURN}break;case 115:switch(e){case"set":return i.SET;case"static":return i.STATIC;case"super":return i.SUPER;case"switch":return i.SWITCH}break;case 116:switch(e){case"this":return i.THIS;case"throw":return i.THROW;case"true":return i.TRUE;case"try":return i.TRY;case"type":return i.TYPE;case"typeof":return i.TYPEOF}break;case 118:switch(e){case"var":return i.VAR;case"void":return i.VOID}break;case 119:switch(e){case"while":return i.WHILE;case"with":return i.WITH}break;case 121:switch(e){case"yield":return i.YIELD}}return i.INVALID}function p(e){switch(e){case i.ABSTRACT:case i.AS:case i.CONSTRUCTOR:case i.DECLARE:case i.DELETE:case i.FROM:case i.FOR:case i.GET:case i.IS:case i.KEYOF:case i.MODULE:case i.NAMESPACE:case i.READONLY:case i.SET:case i.TYPE:case i.VOID:return!0;default:return!1}}!function(e){e[e.ABSTRACT=0]="ABSTRACT",e[e.AS=1]="AS",e[e.ASYNC=2]="ASYNC",e[e.AWAIT=3]="AWAIT",e[e.BREAK=4]="BREAK",e[e.CASE=5]="CASE",e[e.CATCH=6]="CATCH",e[e.CLASS=7]="CLASS",e[e.CONST=8]="CONST",e[e.CONTINUE=9]="CONTINUE",e[e.CONSTRUCTOR=10]="CONSTRUCTOR",e[e.DEBUGGER=11]="DEBUGGER",e[e.DECLARE=12]="DECLARE",e[e.DEFAULT=13]="DEFAULT",e[e.DELETE=14]="DELETE",e[e.DO=15]="DO",e[e.ELSE=16]="ELSE",e[e.ENUM=17]="ENUM",e[e.EXPORT=18]="EXPORT",e[e.EXTENDS=19]="EXTENDS",e[e.FALSE=20]="FALSE",e[e.FINALLY=21]="FINALLY",e[e.FOR=22]="FOR",e[e.FROM=23]="FROM",e[e.FUNCTION=24]="FUNCTION",e[e.GET=25]="GET",e[e.IF=26]="IF",e[e.IMPLEMENTS=27]="IMPLEMENTS",e[e.IMPORT=28]="IMPORT",e[e.IN=29]="IN",e[e.INSTANCEOF=30]="INSTANCEOF",e[e.INTERFACE=31]="INTERFACE",e[e.IS=32]="IS",e[e.KEYOF=33]="KEYOF",e[e.LET=34]="LET",e[e.MODULE=35]="MODULE",e[e.NAMESPACE=36]="NAMESPACE",e[e.NEW=37]="NEW",e[e.NULL=38]="NULL",e[e.OF=39]="OF",e[e.PACKAGE=40]="PACKAGE",e[e.PRIVATE=41]="PRIVATE",e[e.PROTECTED=42]="PROTECTED",e[e.PUBLIC=43]="PUBLIC",e[e.READONLY=44]="READONLY",e[e.RETURN=45]="RETURN",e[e.SET=46]="SET",e[e.STATIC=47]="STATIC",e[e.SUPER=48]="SUPER",e[e.SWITCH=49]="SWITCH",e[e.THIS=50]="THIS",e[e.THROW=51]="THROW",e[e.TRUE=52]="TRUE",e[e.TRY=53]="TRY",e[e.TYPE=54]="TYPE",e[e.TYPEOF=55]="TYPEOF",e[e.VAR=56]="VAR",e[e.VOID=57]="VOID",e[e.WHILE=58]="WHILE",e[e.WITH=59]="WITH",e[e.YIELD=60]="YIELD",e[e.OPENBRACE=61]="OPENBRACE",e[e.CLOSEBRACE=62]="CLOSEBRACE",e[e.OPENPAREN=63]="OPENPAREN",e[e.CLOSEPAREN=64]="CLOSEPAREN",e[e.OPENBRACKET=65]="OPENBRACKET",e[e.CLOSEBRACKET=66]="CLOSEBRACKET",e[e.DOT=67]="DOT",e[e.DOT_DOT_DOT=68]="DOT_DOT_DOT",e[e.SEMICOLON=69]="SEMICOLON",e[e.COMMA=70]="COMMA",e[e.LESSTHAN=71]="LESSTHAN",e[e.GREATERTHAN=72]="GREATERTHAN",e[e.LESSTHAN_EQUALS=73]="LESSTHAN_EQUALS",e[e.GREATERTHAN_EQUALS=74]="GREATERTHAN_EQUALS",e[e.EQUALS_EQUALS=75]="EQUALS_EQUALS",e[e.EXCLAMATION_EQUALS=76]="EXCLAMATION_EQUALS",e[e.EQUALS_EQUALS_EQUALS=77]="EQUALS_EQUALS_EQUALS",e[e.EXCLAMATION_EQUALS_EQUALS=78]="EXCLAMATION_EQUALS_EQUALS",e[e.EQUALS_GREATERTHAN=79]="EQUALS_GREATERTHAN",e[e.PLUS=80]="PLUS",e[e.MINUS=81]="MINUS",e[e.ASTERISK_ASTERISK=82]="ASTERISK_ASTERISK",e[e.ASTERISK=83]="ASTERISK",e[e.SLASH=84]="SLASH",e[e.PERCENT=85]="PERCENT",e[e.PLUS_PLUS=86]="PLUS_PLUS",e[e.MINUS_MINUS=87]="MINUS_MINUS",e[e.LESSTHAN_LESSTHAN=88]="LESSTHAN_LESSTHAN",e[e.GREATERTHAN_GREATERTHAN=89]="GREATERTHAN_GREATERTHAN",e[e.GREATERTHAN_GREATERTHAN_GREATERTHAN=90]="GREATERTHAN_GREATERTHAN_GREATERTHAN",e[e.AMPERSAND=91]="AMPERSAND",e[e.BAR=92]="BAR",e[e.CARET=93]="CARET",e[e.EXCLAMATION=94]="EXCLAMATION",e[e.TILDE=95]="TILDE",e[e.AMPERSAND_AMPERSAND=96]="AMPERSAND_AMPERSAND",e[e.BAR_BAR=97]="BAR_BAR",e[e.QUESTION=98]="QUESTION",e[e.COLON=99]="COLON",e[e.EQUALS=100]="EQUALS",e[e.PLUS_EQUALS=101]="PLUS_EQUALS",e[e.MINUS_EQUALS=102]="MINUS_EQUALS",e[e.ASTERISK_EQUALS=103]="ASTERISK_EQUALS",e[e.ASTERISK_ASTERISK_EQUALS=104]="ASTERISK_ASTERISK_EQUALS",e[e.SLASH_EQUALS=105]="SLASH_EQUALS",e[e.PERCENT_EQUALS=106]="PERCENT_EQUALS",e[e.LESSTHAN_LESSTHAN_EQUALS=107]="LESSTHAN_LESSTHAN_EQUALS",e[e.GREATERTHAN_GREATERTHAN_EQUALS=108]="GREATERTHAN_GREATERTHAN_EQUALS",e[e.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS=109]="GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS",e[e.AMPERSAND_EQUALS=110]="AMPERSAND_EQUALS",e[e.BAR_EQUALS=111]="BAR_EQUALS",e[e.CARET_EQUALS=112]="CARET_EQUALS",e[e.AT=113]="AT",e[e.IDENTIFIER=114]="IDENTIFIER",e[e.STRINGLITERAL=115]="STRINGLITERAL",e[e.INTEGERLITERAL=116]="INTEGERLITERAL",e[e.FLOATLITERAL=117]="FLOATLITERAL",e[e.INVALID=118]="INVALID",e[e.ENDOFFILE=119]="ENDOFFILE"}(i=t.Token||(t.Token={})),function(e){e[e.DEFAULT=0]="DEFAULT",e[e.PREFER=1]="PREFER",e[e.ALWAYS=2]="ALWAYS"}(a=t.IdentifierHandling||(t.IdentifierHandling={})),t.tokenFromKeyword=l,t.tokenIsAlsoIdentifier=p,t.operatorTokenToString=function(e){switch(e){case i.DELETE:return"delete";case i.IN:return"in";case i.INSTANCEOF:return"instanceof";case i.NEW:return"new";case i.TYPEOF:return"typeof";case i.VOID:return"void";case i.YIELD:return"yield";case i.DOT_DOT_DOT:return"...";case i.COMMA:return",";case i.LESSTHAN:return"<";case i.GREATERTHAN:return">";case i.LESSTHAN_EQUALS:return"<=";case i.GREATERTHAN_EQUALS:return">=";case i.EQUALS_EQUALS:return"==";case i.EXCLAMATION_EQUALS:return"!=";case i.EQUALS_EQUALS_EQUALS:return"===";case i.EXCLAMATION_EQUALS_EQUALS:return"!==";case i.PLUS:return"+";case i.MINUS:return"-";case i.ASTERISK_ASTERISK:return"**";case i.ASTERISK:return"*";case i.SLASH:return"/";case i.PERCENT:return"%";case i.PLUS_PLUS:return"++";case i.MINUS_MINUS:return"--";case i.LESSTHAN_LESSTHAN:return"<<";case i.GREATERTHAN_GREATERTHAN:return">>";case i.GREATERTHAN_GREATERTHAN_GREATERTHAN:return">>>";case i.AMPERSAND:return"&";case i.BAR:return"|";case i.CARET:return"^";case i.EXCLAMATION:return"!";case i.TILDE:return"~";case i.AMPERSAND_AMPERSAND:return"&&";case i.BAR_BAR:return"||";case i.EQUALS:return"=";case i.PLUS_EQUALS:return"+=";case i.MINUS_EQUALS:return"-=";case i.ASTERISK_EQUALS:return"*=";case i.ASTERISK_ASTERISK_EQUALS:return"**=";case i.SLASH_EQUALS:return"/=";case i.PERCENT_EQUALS:return"%=";case i.LESSTHAN_LESSTHAN_EQUALS:return"<<=";case i.GREATERTHAN_GREATERTHAN_EQUALS:return">>=";case i.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:return">>>=";case i.AMPERSAND_EQUALS:return"&=";case i.BAR_EQUALS:return"|=";case i.CARET_EQUALS:return"^=";default:return assert(!1),""}};var u=function(){function e(e,t,r){this.debugInfoRef=0,this.source=e,this.start=t,this.end=r}return e.join=function(t,r){if(t.source!=r.source)throw new Error("source mismatch");return new e(t.source,t.startr.end?t.end:r.end)},Object.defineProperty(e.prototype,"atStart",{get:function(){return new e(this.source,this.start,this.start)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"atEnd",{get:function(){return new e(this.source,this.end,this.end)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"line",{get:function(){for(var e=this.source.text,t=1,r=this.start;r>=0;--r)10==e.charCodeAt(r)&&t++;return t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"column",{get:function(){for(var e=this.source.text,t=0,r=this.start-1;r>=0&&10!=e.charCodeAt(r);--r)++t;return t},enumerable:!0,configurable:!0}),e.prototype.toString=function(){return this.source.text.substring(this.start,this.end)},e}();t.Range=u;var h=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,r)||this;n.end=0,n.pos=0,n.token=-1,n.tokenPos=0,n.nextToken=-1,n.nextTokenPos=0,n.nextTokenOnNewLine=!1,n.onComment=null,n.source=t,n.pos=0,n.end=t.text.length,n.diagnostics=r||new Array;var i=t.text;if(n.pos1&&this.pos2&&this.pos1&&this.pos1&&this.pos1&&this.pos2&&this.pos1&&this.pos1&&this.pos1&&this.pos2&&this.pos+11&&this.pos1&&this.pos2&&this.pos1&&this.pos2&&this.pos1&&this.pos2&&this.pos3&&this.pos1&&this.pos1&&this.pos=this.end){n+=e.substring(r,this.pos),this.error(s.DiagnosticCode.Unterminated_string_literal,this.range(r-1,this.end));break}var i=e.charCodeAt(this.pos);if(i==t){n+=e.substring(r,this.pos++);break}if(92!=i){if(c.isLineBreak(i)){n+=e.substring(r,this.pos),this.error(s.DiagnosticCode.Unterminated_string_literal,this.range(r-1,this.pos));break}++this.pos}else n+=e.substring(r,this.pos),n+=this.readEscapeSequence(),r=this.pos}return n},t.prototype.readEscapeSequence=function(){if(++this.pos>=this.end)return this.error(s.DiagnosticCode.Unexpected_end_of_text,this.range(this.end)),"";var e=this.source.text,t=e.charCodeAt(this.pos++);switch(t){case 48:return"\0";case 98:return"\b";case 116:return"\t";case 110:return"\n";case 118:return"\v";case 102:return"\f";case 114:return"\r";case 39:return"'";case 34:return'"';case 117:return this.pos=this.end){this.error(s.DiagnosticCode.Unterminated_regular_expression_literal,this.range(t,this.end));break}if(92!=e.charCodeAt(this.pos)){var n=e.charCodeAt(this.pos);if(47==n&&!r)break;if(c.isLineBreak(n)){this.error(s.DiagnosticCode.Unterminated_regular_expression_literal,this.range(t,this.pos));break}++this.pos,r=!1}else++this.pos,r=!0}return e.substring(t,this.pos)},t.prototype.readRegexpFlags=function(){for(var e=this.source.text,t=this.pos,r=0;this.pos57)&&95!=r)break;t++}return!0},t.prototype.readInteger=function(){var e=this.source.text;if(48==e.charCodeAt(this.pos)&&this.pos+2=48&&o<=57)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else if(o>=65&&o<=70)r=i64_add(i64_mul(r,n),i64_new(10+o-65,0));else if(o>=97&&o<=102)r=i64_add(i64_mul(r,n),i64_new(10+o-97,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}this.pos=a+1}return this.pos==t?this.error(s.DiagnosticCode.Hexadecimal_digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readDecimalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(10,0),i=t;this.pos=48&&o<=57)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}this.pos=a+1}return this.pos==t?this.error(s.DiagnosticCode.Digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readOctalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(8,0),i=t;this.pos=48&&o<=55)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}++this.pos}return this.pos==t?this.error(s.DiagnosticCode.Octal_digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readBinaryInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(2,0),i=i64_new(1,0),a=t;this.pos=48&&n<=57)t=16*t+n-48;else if(n>=65&&n<=70)t=16*t+10+n-65;else{if(!(n>=97&&n<=102))return this.error(s.DiagnosticCode.Hexadecimal_digit_expected,this.range(this.pos-1,this.pos)),"";t=16*t+10+n-97}if(0==--e)break}return e?(this.error(s.DiagnosticCode.Unexpected_end_of_text,this.range(this.pos)),""):String.fromCharCode(t)},t.prototype.readExtendedUnicodeEscape=function(){var e=this.pos,t=this.readHexInteger(),r=i64_low(t),n=!1;assert(!i64_high(t)),r>1114111&&(this.error(s.DiagnosticCode.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive,this.range(e,this.pos)),n=!0);var i=this.source.text;return this.pos>=this.end?(this.error(s.DiagnosticCode.Unexpected_end_of_text,this.range(e,this.end)),n=!0):125==i.charCodeAt(this.pos)?++this.pos:(this.error(s.DiagnosticCode.Unterminated_Unicode_escape_sequence,this.range(e,this.pos)),n=!0),n?"":r<65536?String.fromCharCode(r):String.fromCharCode(55296+((r-65536)/1024|0),(r-65536)%1024+56320)},t.prototype.finish=function(){},t}(s.DiagnosticEmitter);t.Tokenizer=h;var d=function(){return function(){}}();t.State=d;var _=null},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(t,r)};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),i=this&&this.__values||function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],r=0;return t?t.call(e):{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)s.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return s};Object.defineProperty(t,"__esModule",{value:!0});var s,o=r(20),c=r(1),l=r(5),p=r(0),u=r(4),h=r(8),d=r(3),_=r(7),m=r(2);!function(e){e[e.WASM32=0]="WASM32",e[e.WASM64=1]="WASM64"}(s=t.Target||(t.Target={}));var g=function(){function e(){this.target=s.WASM32,this.noTreeShaking=!1,this.noAssert=!1,this.importMemory=!1,this.importTable=!1,this.sourceMap=!1,this.memoryBase=0,this.globalAliases=null,this.features=0,this.optimizeLevelHint=0,this.shrinkLevelHint=0}return Object.defineProperty(e.prototype,"isWasm64",{get:function(){return this.target==s.WASM64},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"usizeType",{get:function(){return this.target==s.WASM64?_.Type.usize64:_.Type.usize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isizeType",{get:function(){return this.target==s.WASM64?_.Type.isize64:_.Type.isize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"nativeSizeType",{get:function(){return this.target==s.WASM64?2:1},enumerable:!0,configurable:!0}),e.prototype.hasFeature=function(e){return 0!=(this.features&e)},e}();t.Options=g,function(e){e[e.NONE=0]="NONE",e[e.SIGN_EXTENSION=1]="SIGN_EXTENSION",e[e.MUTABLE_GLOBAL=2]="MUTABLE_GLOBAL"}(t.Feature||(t.Feature={})),function(e){e[e.NONE=0]="NONE",e[e.IMPLICIT=1]="IMPLICIT",e[e.EXPLICIT=2]="EXPLICIT"}(t.ConversionKind||(t.ConversionKind={})),function(e){e[e.NONE=0]="NONE",e[e.WRAP=1]="WRAP"}(t.WrapMode||(t.WrapMode={}));var y,E,f=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,t.diagnostics)||this;return n.currentOuterFunction=null,n.currentInlineFunctions=[],n.currentEnum=null,n.currentType=_.Type.void,n.memorySegments=[],n.stringSegments=new Map,n.functionTable=["null"],n.argcVar=0,n.argcSet=0,n.needsIterateRoots=!1,n.f32ModInstance=null,n.f64ModInstance=null,n.f32PowInstance=null,n.f64PowInstance=null,n.program=t,n.resolver=t.resolver,r||(r=new g),n.options=r,n.memoryOffset=i64_new(max(r.memoryBase,8)),n.module=l.Module.create(),n}return n(t,e),t.compile=function(e,r){return void 0===r&&(r=null),new t(e,r).compile()},t.prototype.compile=function(){var e,t,r=this.options,n=this.module,s=this.program;s.initialize(r);var c=new u.Function(s.startFunction,"start",new _.Signature([],_.Type.void));this.startFunctionInstance=c;var p=new Array;this.startFunctionBody=p,this.currentFunction=c,r.isWasm64?n.addGlobal("HEAP_BASE",2,!0,n.createI64(0,0)):n.addGlobal("HEAP_BASE",1,!1,n.createI32(0));for(var h=s.sources,d=0,m=h.length;d"),!1;e.type=this.currentType}else assert(!1);if(e.is(p.CommonFlags.AMBIENT)&&e.hasDecorator(u.DecoratorFlags.BUILTIN))return!0;var a=e.type.toNativeType(),s=e.is(p.CommonFlags.CONST)||e.is(p.CommonFlags.STATIC|p.CommonFlags.READONLY);if(e.is(p.CommonFlags.AMBIENT))return s||this.options.hasFeature(2)?(e.set(p.CommonFlags.MODULE_IMPORT),r?T(e,r):(y="env",E=e.simpleName),t.addGlobalImport(e.internalName,y,E,a),e.set(p.CommonFlags.COMPILED),!0):(this.error(c.DiagnosticCode.Operation_not_supported,assert(r).range),!1);var o=!1;if(null!==r&&null!==r.initializer){if(n||(n=this.compileExpression(r.initializer,e.type,1,1)),l.getExpressionId(n)!=l.ExpressionId.Const&&(s?(n=t.precomputeExpression(n),l.getExpressionId(n)!=l.ExpressionId.Const&&(this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,r.range),o=!0)):o=!0),e.hasDecorator(u.DecoratorFlags.INLINE)&&!o){switch(assert(l.getExpressionId(n)==l.ExpressionId.Const),l.getExpressionType(n)){case 1:e.constantValueKind=1,e.constantIntegerValue=i64_new(l.getConstValueI32(n),0);break;case 2:e.constantValueKind=1,e.constantIntegerValue=i64_new(l.getConstValueI64Low(n),l.getConstValueI64High(n));break;case 3:e.constantValueKind=2,e.constantFloatValue=l.getConstValueF32(n);break;case 4:e.constantValueKind=2,e.constantFloatValue=l.getConstValueF64(n);break;default:return assert(!1),!1}e.set(p.CommonFlags.INLINED)}}else n=e.type.toNativeZero(t);var h=e.internalName;return o?(t.addGlobal(h,a,!0,e.type.toNativeZero(t)),this.startFunctionBody.push(t.createSetGlobal(h,n))):t.addGlobal(h,a,!s,n),!0},t.prototype.compileEnumDeclaration=function(e){var t=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(t.kind==u.ElementKind.ENUM),this.compileEnum(t)?t:null},t.prototype.compileEnum=function(e){var t,r;if(e.is(p.CommonFlags.COMPILED))return!0;e.set(p.CommonFlags.COMPILED);var n=this.module;this.currentEnum=e;var a=null,s=!1;if(e.members)try{for(var o=i(e.members.values()),h=o.next();!h.done;h=o.next()){var d=h.value;if(d.kind==u.ElementKind.ENUMVALUE){var m=!1,g=d,y=g.declaration;g.set(p.CommonFlags.COMPILED);var E=void 0;y.value?(E=this.compileExpression(y.value,_.Type.i32,1,0),l.getExpressionId(E)!=l.ExpressionId.Const&&(e.is(p.CommonFlags.CONST)?(E=n.precomputeExpression(E),l.getExpressionId(E)!=l.ExpressionId.Const&&(this.error(c.DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,y.value.range),m=!0)):m=!0)):null==a?E=n.createI32(0):(s&&this.error(c.DiagnosticCode.Enum_member_must_have_initializer,y.range),E=n.createBinary(l.BinaryOp.AddI32,n.createGetGlobal(a.internalName,1),n.createI32(1)),E=n.precomputeExpression(E),l.getExpressionId(E)!=l.ExpressionId.Const&&(e.is(p.CommonFlags.CONST)&&this.error(c.DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,y.range),m=!0)),m?(n.addGlobal(g.internalName,1,!0,n.createI32(0)),this.startFunctionBody.push(n.createSetGlobal(g.internalName,E)),s=!0):(n.addGlobal(g.internalName,1,!e.is(p.CommonFlags.CONST),E),s=!1),a=g}}}catch(e){t={error:e}}finally{try{h&&!h.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return this.currentEnum=null,!0},t.prototype.compileFunctionDeclaration=function(e,t,r){void 0===r&&(r=null);var n=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(n.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.compileFunctionUsingTypeArguments(n,t,r,null,n.declaration.name)},t.prototype.compileFunctionUsingTypeArguments=function(e,t,r,n,i){var a=this.resolver.resolveFunctionInclTypeArguments(e,t,r,i);return a?(a.outerScope=n,this.compileFunction(a)?a:null):null},t.prototype.ensureFunctionType=function(e,t,r){void 0===r&&(r=null);var n,i=e?e.length:0,a=0;if(r?((n=new Array(1+i))[0]=r.toNativeType(),a=1):n=new Array(i),e)for(var s=0;s=0)return e.functionTableIndex;var t=this.functionTable,r=t.length;return!e.is(p.CommonFlags.TRAMPOLINE)&&e.signature.requiredParameters=0?"case"+h.toString(10):"break")+"|"+a);var g=t.createBlock("case0|"+a,p,0),y=!0,E=!0,f=!0,T=!0;for(d=0;d=0&&(y&&s.set(1),E&&s.set(2),f&&s.set(4),T&&s.set(32)),g},t.prototype.compileThrowStatement=function(e){var t=this.currentFunction.flow;return t.set(4),t.set(1),o.compileAbort(this,null,e)},t.prototype.compileTryStatement=function(e){return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileVariableStatement=function(e,t){void 0===t&&(t=!1);var r=this.program,n=this.currentFunction,i=e.declarations,a=i.length;if(t||n==this.startFunctionInstance&&e.parent&&e.parent.kind==d.NodeKind.SOURCE){for(var s=0;s");continue}E=this.currentType}var T=!1;if(g.is(p.CommonFlags.CONST))if(f)if(f=this.module.precomputeExpression(f),l.getExpressionId(f)==l.ExpressionId.Const){var I=new u.Local(r,y,-1,E);switch(l.getExpressionType(f)){case 1:I=I.withConstantIntegerValue(i64_new(l.getConstValueI32(f),0));break;case 2:I=I.withConstantIntegerValue(i64_new(l.getConstValueI64Low(f),l.getConstValueI64High(f)));break;case 3:I=I.withConstantFloatValue(l.getConstValueF32(f));break;case 4:I=I.withConstantFloatValue(l.getConstValueF64(f));break;default:return assert(!1),this.module.createUnreachable()}var v=n.flow.scopedLocals;if(v){if(v.has(y))return this.error(c.DiagnosticCode.Duplicate_identifier_0,g.name.range,y),this.module.createUnreachable()}else n.flow.scopedLocals=v=new Map;v.set(y,I),T=!0}else this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,g.range);else this.error(c.DiagnosticCode._const_declarations_must_be_initialized,g.range);if(!T){I=void 0;I=g.isAny(p.CommonFlags.LET|p.CommonFlags.CONST)||h.is(2048)?h.addScopedLocal(E,y,!1,g):n.addLocal(E,y,g),f?(o.push(this.compileAssignmentWithValue(g.name,f)),I.type.is(36)&&h.setLocalWrapped(I.index,!h.canOverflow(f,E))):I.type.is(36)&&h.setLocalWrapped(I.index,!0)}}return o.length?1==o.length?o[0]:this.module.createBlock(null,o,0):0},t.prototype.compileVoidStatement=function(e){return this.compileExpression(e.expression,_.Type.void,2,0)},t.prototype.compileWhileStatement=function(e){var t=this.module,r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,_.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(p.CommonFlags.GENERIC|p.CommonFlags.GENERIC_CONTEXT)){var n=t.precomputeExpression(r);if(l.getExpressionId(n)==l.ExpressionId.Const&&1==l.getExpressionType(n)){if(!l.getConstValueI32(n))return t.createNop()}else r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,_.Type.bool,0),this.currentType)}var i=this.currentFunction,a=i.enterBreakContext(),s=i.flow,o=s.fork();i.flow=o;var c="break|"+a;o.breakLabel=c;var u="continue|"+a;o.continueLabel=u;var h=this.compileStatement(e.statement),d=o.isAny(29);return i.flow=o.free(),i.leaveBreakContext(),o.unset(792),s.inheritConditional(o),t.createBlock(c,[t.createLoop(u,t.createIf(r,d?h:t.createBlock(null,[h,t.createBreak(u)],0)))])},t.prototype.compileInlineConstant=function(e,t,r){assert(e.is(p.CommonFlags.INLINED));var n=e.type;switch(!r&&n.is(4)&&t.is(4)&&n.size>i:0);case 5:case 6:case 10:var a=e.type.computeSmallIntegerMask(_.Type.i32);return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue)&a:0);case 2:case 7:return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 4:case 9:if(!e.program.options.isWasm64)return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 3:case 8:return 1==e.constantValueKind?this.module.createI64(i64_low(e.constantIntegerValue),i64_high(e.constantIntegerValue)):this.module.createI64(0);case 12:if(!e.hasDecorator(u.DecoratorFlags.BUILTIN)||t!=_.Type.f32)return this.module.createF64(e.constantFloatValue);this.currentType=_.Type.f32;case 11:return this.module.createF32(e.constantFloatValue);default:return assert(!1),this.module.createUnreachable()}},t.prototype.compileExpression=function(e,t,r,n){var i;switch(this.currentType=t,e.kind){case d.NodeKind.ASSERTION:i=this.compileAssertionExpression(e,t);break;case d.NodeKind.BINARY:i=this.compileBinaryExpression(e,t);break;case d.NodeKind.CALL:i=this.compileCallExpression(e,t);break;case d.NodeKind.COMMA:i=this.compileCommaExpression(e,t);break;case d.NodeKind.ELEMENTACCESS:i=this.compileElementAccessExpression(e,t);break;case d.NodeKind.FUNCTION:i=this.compileFunctionExpression(e,t);break;case d.NodeKind.IDENTIFIER:case d.NodeKind.FALSE:case d.NodeKind.NULL:case d.NodeKind.THIS:case d.NodeKind.SUPER:case d.NodeKind.TRUE:i=this.compileIdentifierExpression(e,t,0==r);break;case d.NodeKind.INSTANCEOF:i=this.compileInstanceOfExpression(e,t);break;case d.NodeKind.LITERAL:i=this.compileLiteralExpression(e,t);break;case d.NodeKind.NEW:i=this.compileNewExpression(e,t);break;case d.NodeKind.PARENTHESIZED:i=this.compileParenthesizedExpression(e,t);break;case d.NodeKind.PROPERTYACCESS:i=this.compilePropertyAccessExpression(e,t,0==r);break;case d.NodeKind.TERNARY:i=this.compileTernaryExpression(e,t);break;case d.NodeKind.UNARYPOSTFIX:i=this.compileUnaryPostfixExpression(e,t);break;case d.NodeKind.UNARYPREFIX:i=this.compileUnaryPrefixExpression(e,t);break;default:this.error(c.DiagnosticCode.Operation_not_supported,e.range),i=this.module.createUnreachable()}var a=this.currentType;return 0!=r&&a!=t?(i=this.convertExpression(i,a,t,r,n,e),this.currentType=t):1==n&&(i=this.ensureSmallIntegerWrap(i,a)),this.options.sourceMap&&this.addDebugLocation(i,e.range),i},t.prototype.compileExpressionRetainType=function(e,t,r){return this.compileExpression(e,t==_.Type.void?_.Type.i32:t,0,r)},t.prototype.precomputeExpression=function(e,t,r,n){return this.module.precomputeExpression(this.compileExpression(e,t,r,n))},t.prototype.convertExpression=function(e,t,r,n,i,a){assert(0!=n);var s=this.module;return 13==t.kind?(assert(13!=r.kind),this.error(c.DiagnosticCode.Type_0_is_not_assignable_to_type_1,a.range,t.toString(),r.toString()),s.createUnreachable()):13==r.kind?s.createDrop(e):(t.isAssignableTo(r)||1==n&&this.error(c.DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast,a.range,t.toString(),r.toString()),t.is(8)?r.is(8)?11==t.kind?12==r.kind&&(e=s.createUnary(l.UnaryOp.PromoteF32,e)):11==r.kind&&(e=s.createUnary(l.UnaryOp.DemoteF64,e)):r.is(4)?e=11==t.kind?r.is(1)?r.is(64)?s.createUnary(l.UnaryOp.TruncF32ToI64,e):s.createUnary(l.UnaryOp.TruncF32ToI32,e):r.is(64)?s.createUnary(l.UnaryOp.TruncF32ToU64,e):s.createUnary(l.UnaryOp.TruncF32ToU32,e):r.is(1)?r.is(64)?s.createUnary(l.UnaryOp.TruncF64ToI64,e):s.createUnary(l.UnaryOp.TruncF64ToI32,e):r.is(64)?s.createUnary(l.UnaryOp.TruncF64ToU64,e):s.createUnary(l.UnaryOp.TruncF64ToU32,e):(assert(0==r.flags,"void type expected"),e=s.createDrop(e)):t.is(4)&&r.is(8)?e=11==r.kind?t.is(64)?s.createUnary(t.is(1)?l.UnaryOp.ConvertI64ToF32:l.UnaryOp.ConvertU64ToF32,e):s.createUnary(t.is(1)?l.UnaryOp.ConvertI32ToF32:l.UnaryOp.ConvertU32ToF32,e):t.is(64)?s.createUnary(t.is(1)?l.UnaryOp.ConvertI64ToF64:l.UnaryOp.ConvertU64ToF64,e):s.createUnary(t.is(1)?l.UnaryOp.ConvertI32ToF64:l.UnaryOp.ConvertU32ToF64,e):t.is(64)?r.is(64)||(e=s.createUnary(l.UnaryOp.WrapI64,e)):r.is(64)?(e=s.createUnary(t.is(1)?l.UnaryOp.ExtendI32:l.UnaryOp.ExtendU32,this.ensureSmallIntegerWrap(e,t)),i=0):t.is(32)&&t.size",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.GtI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GtI64:l.BinaryOp.GtI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.GtI64,r,i);break;case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.GtU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GtU64:l.BinaryOp.GtU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.GtU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.GtF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.GtF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.LESSTHAN_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.LE)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!0)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"<=",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.LeI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.LeI64:l.BinaryOp.LeI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.LeI64,r,i);break;case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.LeU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.LeU64:l.BinaryOp.LeU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.LeU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.LeF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.LeF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.GREATERTHAN_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.GE)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!0)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,">=",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.GeI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GeI64:l.BinaryOp.GeI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.GeI64,r,i);break;case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.GeU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GeU64:l.BinaryOp.GeU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.GeU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.GeF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.GeF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.EQUALS_EQUALS_EQUALS:case h.Token.EQUALS_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,y==h.Token.EQUALS_EQUALS&&this.currentType.is(256))if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.EQ)){o=this.compileBinaryOverload(v,d,r,m,e);break}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,h.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.EqI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.EqI64:l.BinaryOp.EqI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.EqI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.EqF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.EqF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.EXCLAMATION_EQUALS_EQUALS:case h.Token.EXCLAMATION_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,y==h.Token.EXCLAMATION_EQUALS&&this.currentType.is(256))if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.NE)){o=this.compileBinaryOverload(v,d,r,m,e);break}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,h.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.NeI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.NeI64:l.BinaryOp.NeI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.NeI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.NeF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.NeF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.EQUALS:return this.compileAssignment(d,m,t);case h.Token.PLUS_EQUALS:g=!0;case h.Token.PLUS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.ADD)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)i=this.compileExpression(m,n,1,0);else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"+",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=p.createBinary(l.BinaryOp.AddI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.AddI64:l.BinaryOp.AddI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.AddI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.AddF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.AddF64,r,i);break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.MINUS_EQUALS:g=!0;case h.Token.MINUS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.SUB)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"-",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=p.createBinary(l.BinaryOp.SubI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.SubI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.SubF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.SubF64,r,i);break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.ASTERISK_EQUALS:g=!0;case h.Token.ASTERISK:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.MUL)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1);else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"*",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=p.createBinary(l.BinaryOp.MulI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.MulI64:l.BinaryOp.MulI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.MulI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.MulF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.MulF64,r,i);break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.ASTERISK_ASTERISK_EQUALS:g=!0;case h.Token.ASTERISK_ASTERISK:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.POW)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}var E=void 0;if(11==this.currentType.kind){if(i=this.compileExpression(m,_.Type.f32,1,0),a=this.currentType,!(E=this.f32PowInstance)){if(!(f=this.program.elementsLookup.get("Mathf"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),o=p.createUnreachable();break}if(!(T=f.members?f.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.pow"),o=p.createUnreachable();break}assert(T.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f32PowInstance=E=this.resolver.resolveFunction(T,null)}}else if(r=this.convertExpression(r,this.currentType,_.Type.f64,1,0,d),n=this.currentType,i=this.compileExpression(m,_.Type.f64,1,0),a=this.currentType,!(E=this.f64PowInstance)){if(!(f=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),o=p.createUnreachable();break}if(!(T=f.members?f.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.pow"),o=p.createUnreachable();break}assert(T.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f64PowInstance=E=this.resolver.resolveFunction(T,null)}o=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):p.createUnreachable();break;case h.Token.SLASH_EQUALS:g=!0;case h.Token.SLASH:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.DIV)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"/",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m)}switch(this.currentType.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.DivI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.DivI64:l.BinaryOp.DivI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.DivI64,r,i);break;case 5:case 6:case 10:case 7:o=p.createBinary(l.BinaryOp.DivU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.DivU64:l.BinaryOp.DivU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.DivU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.DivF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.DivF64,r,i);break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.PERCENT_EQUALS:g=!0;case h.Token.PERCENT:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.REM)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"%",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m)}switch(this.currentType.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.RemI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.RemI64:l.BinaryOp.RemI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.RemI64,r,i);break;case 5:case 6:case 10:case 7:o=p.createBinary(l.BinaryOp.RemU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.RemU64:l.BinaryOp.RemU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.RemU64,r,i);break;case 11:if(!(E=this.f32ModInstance)){if(!(f=this.program.elementsLookup.get("Mathf"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),o=p.createUnreachable();break}if(!(T=f.members?f.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.mod"),o=p.createUnreachable();break}assert(T.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f32ModInstance=E=this.resolver.resolveFunction(T,null)}o=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):p.createUnreachable();break;case 12:if(!(E=this.f64ModInstance)){var f,T;if(!(f=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),o=p.createUnreachable();break}if(!(T=f.members?f.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.mod"),o=p.createUnreachable();break}assert(T.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f64ModInstance=E=this.resolver.resolveFunction(T,null)}o=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):p.createUnreachable();break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.LESSTHAN_LESSTHAN_EQUALS:g=!0;case h.Token.LESSTHAN_LESSTHAN:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_SHL)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(i=this.compileExpression(m,n,1,0),a=this.currentType,this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=p.createBinary(l.BinaryOp.ShlI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.ShlI64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.ShlI64:l.BinaryOp.ShlI32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.GREATERTHAN_GREATERTHAN_EQUALS:g=!0;case h.Token.GREATERTHAN_GREATERTHAN:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_SHR)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1),a=this.currentType,this.currentType.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.ShrI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.ShrI64,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.ShrI64:l.BinaryOp.ShrI32,r,i);break;case 5:case 6:case 10:case 7:o=p.createBinary(l.BinaryOp.ShrU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.ShrU64,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.ShrU64:l.BinaryOp.ShrU32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:g=!0;case h.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_SHR_U)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,0),a=this.currentType,this.currentType.kind){case 5:case 6:case 10:o=p.createBinary(l.BinaryOp.ShrU32,r,i);case 0:case 1:case 2:case 7:o=p.createBinary(l.BinaryOp.ShrU32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.ShrU64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.ShrU64:l.BinaryOp.ShrU32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.AMPERSAND_EQUALS:g=!0;case h.Token.AMPERSAND:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_AND)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"&",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 10:case 7:o=p.createBinary(l.BinaryOp.AndI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.AndI64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.AndI64:l.BinaryOp.AndI32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.BAR_EQUALS:g=!0;case h.Token.BAR:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_OR)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"|",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:o=p.createBinary(l.BinaryOp.OrI32,r,i);break;case 2:case 7:o=p.createBinary(l.BinaryOp.OrI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.OrI64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.OrI64:l.BinaryOp.OrI32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.CARET_EQUALS:g=!0;case h.Token.CARET:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){var I,v;if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_XOR)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"^",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:o=p.createBinary(l.BinaryOp.XorI32,r,i);break;case 2:case 7:o=p.createBinary(l.BinaryOp.XorI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.XorI64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.XorI64:l.BinaryOp.XorI32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.AMPERSAND_AMPERSAND:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,i=this.compileExpression(m,n,1,0),a=this.currentType,o=p.cloneExpression(r,!0,0))this.makeIsTrueish(r,this.currentType),o=p.createIf(this.makeIsTrueish(r,this.currentType),i,o);else{var A=this.currentFunction.flow,C=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));o=p.createIf(this.makeIsTrueish(p.createTeeLocal(C.index,r),this.currentType),i,p.createGetLocal(assert(C).index,this.currentType.toNativeType()))}break;case h.Token.BAR_BAR:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,i=this.compileExpression(m,n,1,0),a=this.currentType,o=this.module.cloneExpression(r,!0,0))o=this.module.createIf(this.makeIsTrueish(r,this.currentType),o,i);else{A=this.currentFunction.flow,C=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));o=p.createIf(this.makeIsTrueish(p.createTeeLocal(C.index,r),this.currentType),p.createGetLocal(assert(C).index,this.currentType.toNativeType()),i)}break;default:assert(!1),o=this.module.createUnreachable()}return g?this.compileAssignmentWithValue(d,o,t!=_.Type.void):o},t.prototype.compileUnaryOverload=function(e,t,r,n){var i,a=0;return e.is(p.CommonFlags.INSTANCE)?(a=r,i=[]):i=[t],this.compileCallDirect(e,i,n,a,e.hasDecorator(u.DecoratorFlags.INLINE))},t.prototype.compileBinaryOverload=function(e,t,r,n,i){var a,s=0;if(e.is(p.CommonFlags.INSTANCE)){var o=assert(e.parent);assert(o.kind==u.ElementKind.CLASS),s=r,a=[n]}else a=[t,n];return this.compileCallDirect(e,a,i,s,e.hasDecorator(u.DecoratorFlags.INLINE))},t.prototype.compileAssignment=function(e,t,r){var n,i=this.program.resolver,a=this.currentFunction,s=i.resolveExpression(e,a);if(!s)return this.module.createUnreachable();switch(s.kind){case u.ElementKind.GLOBAL:if(!this.compileGlobal(s))return this.module.createUnreachable();assert(s.type!=_.Type.void);case u.ElementKind.LOCAL:case u.ElementKind.FIELD:n=s.type;break;case u.ElementKind.PROPERTY:var o=s.setterPrototype;if(o){var l=this.resolver.resolveFunction(o,null);if(!l)return this.module.createUnreachable();assert(1==l.signature.parameterTypes.length),n=l.signature.parameterTypes[0];break}return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,s.internalName),this.module.createUnreachable();case u.ElementKind.CLASS:if(i.currentElementExpression){var p=a.flow.is(4096),h=s.lookupOverload(u.OperatorKind.INDEXED_SET,p);if(!h)return s.lookupOverload(u.OperatorKind.INDEXED_GET,p)?this.error(c.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,s.internalName):this.error(c.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,s.internalName),this.module.createUnreachable();assert(2==h.signature.parameterTypes.length),n=h.signature.parameterTypes[1];break}default:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}assert(n!=_.Type.void);var d=this.compileExpression(t,n,1,0);return this.compileAssignmentWithValue(e,d,r!=_.Type.void)},t.prototype.compileAssignmentWithValue=function(e,t,r){void 0===r&&(r=!1);var n=this.module,i=this.resolver.resolveExpression(e,this.currentFunction);if(!i)return n.createUnreachable();switch(i.kind){case u.ElementKind.LOCAL:var a=i.type;if(assert(a!=_.Type.void),this.currentType=r?a:_.Type.void,i.is(p.CommonFlags.CONST))return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();var s=this.currentFunction.flow;return a.is(36)&&s.setLocalWrapped(i.index,!s.canOverflow(t,a)),r?n.createTeeLocal(i.index,t):n.createSetLocal(i.index,t);case u.ElementKind.GLOBAL:if(!this.compileGlobal(i))return n.createUnreachable();a=i.type;if(assert(a!=_.Type.void),this.currentType=r?a:_.Type.void,i.is(p.CommonFlags.CONST))return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();if(t=this.ensureSmallIntegerWrap(t,a),r){var o=a.toNativeType(),l=i.internalName;return n.createBlock(null,[n.createSetGlobal(l,t),n.createGetGlobal(l,o)],o)}return n.createSetGlobal(i.internalName,t);case u.ElementKind.FIELD:var h=i.declaration;if(i.is(p.CommonFlags.READONLY)&&!this.currentFunction.is(p.CommonFlags.CONSTRUCTOR)&&null!=h&&null==h.initializer)return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();var d=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(d,this.options.usizeType,0);a=i.type;this.currentType=r?a:_.Type.void;o=a.toNativeType();if(10==a.kind&&(t=this.ensureSmallIntegerWrap(t,a)),r){s=(L=this.currentFunction).flow;var g=L.getAndFreeTempLocal(a,!s.canOverflow(t,a)).index;return n.createBlock(null,[n.createSetLocal(g,t),n.createStore(a.byteSize,m,n.createGetLocal(g,o),o,i.memoryOffset),n.createGetLocal(g,o)],o)}return n.createStore(a.byteSize,m,t,o,i.memoryOffset);case u.ElementKind.PROPERTY:var y=i.setterPrototype;if(y){var E=this.resolver.resolveFunction(y,null);if(!E)return n.createUnreachable();if(!r){if(E.is(p.CommonFlags.INSTANCE)){d=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(d,this.options.usizeType,0);return this.makeCallDirect(E,[m,t])}return this.makeCallDirect(E,[t])}var f=i.getterPrototype;assert(null!=f);var T=this.resolver.resolveFunction(f,null);if(!T)return n.createUnreachable();var I=(R=T.signature.returnType).toNativeType();if(E.is(p.CommonFlags.INSTANCE)){d=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(d,this.options.usizeType,0),g=this.currentFunction.getAndFreeTempLocal(R,!1).index;return n.createBlock(null,[this.makeCallDirect(E,[n.createTeeLocal(g,m),t]),this.makeCallDirect(T,[n.createGetLocal(g,I)])],I)}return n.createBlock(null,[this.makeCallDirect(E,[t]),this.makeCallDirect(T)],I)}return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();case u.ElementKind.CLASS:var v=this.resolver.currentElementExpression;if(v){var A=this.currentFunction.flow.is(4096),C=i.lookupOverload(u.OperatorKind.INDEXED_GET,A);if(!C)return this.error(c.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,i.internalName),n.createUnreachable();var N=i.lookupOverload(u.OperatorKind.INDEXED_SET,A);if(!N)return this.error(c.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,i.internalName),this.currentType=r?C.signature.returnType:_.Type.void,n.createUnreachable();var O=i.type,S=(d=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(d,this.options.usizeType,0),this.compileExpression(v,_.Type.i32,1,0));if(r){var L,b=(L=this.currentFunction).getTempLocal(O,!1),k=L.getAndFreeTempLocal(this.currentType,!1),R=C.signature.returnType;return this.currentFunction.freeTempLocal(b),n.createBlock(null,[this.makeCallDirect(N,[n.createTeeLocal(b.index,m),n.createTeeLocal(k.index,S),t]),this.makeCallDirect(C,[n.createGetLocal(b.index,b.type.toNativeType()),n.createGetLocal(k.index,k.type.toNativeType())])],R.toNativeType())}return this.makeCallDirect(N,[m,S,t])}}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()},t.prototype.compileCallExpression=function(e,t){var r,n,i=this.module,a=this.currentFunction,s=this.resolver.resolveExpression(e.expression,a);if(!s)return i.createUnreachable();switch(s.kind){case u.ElementKind.FUNCTION_PROTOTYPE:var o=s,l=e.typeArguments;if(o.hasDecorator(u.DecoratorFlags.BUILTIN))return this.compileCallExpressionBuiltin(o,e,t);var h=null;if(l){if(!o.is(p.CommonFlags.GENERIC))return this.error(c.DiagnosticCode.Type_0_is_not_generic,e.expression.range,o.internalName),i.createUnreachable();h=this.resolver.resolveFunctionInclTypeArguments(o,l,this.currentFunction.flow.contextualTypeArguments,e)}else{if(o.is(p.CommonFlags.GENERIC)){for(var m=new Map,g=assert(o.declaration.typeParameters),y=g.length,E=0;Es&&!i)||(this.error(c.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,s.toString(),t.toString()),!1)},t.prototype.compileCallDirect=function(e,t,r,n,i){void 0===n&&(n=0),void 0===i&&(i=!1);var a=t.length,s=e.signature;if(!this.checkCallSignature(s,a,0!=n,r))return this.module.createUnreachable();if(i){if(assert(!e.is(p.CommonFlags.TRAMPOLINE)),!this.currentInlineFunctions.includes(e)){this.currentInlineFunctions.push(e);var o=this.compileCallInlineUnchecked(e,t,r,n);return this.currentInlineFunctions.pop(),o}this.warning(c.DiagnosticCode.Function_0_cannot_be_inlined_into_itself,r.range,e.internalName)}var l=n?a+1:a,u=new Array(l),h=0;n&&(u[0]=n,h=1);for(var d=s.parameterTypes,_=0;_1?g.createBlock(null,v,T.toNativeType()):v.length?v[0]:g.createNop():(this.error(c.DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,y.signature.returnType.range),g.createUnreachable())},t.prototype.ensureTrampoline=function(e){var t=e.trampoline;if(t)return t;var r=e.signature,n=e.internalName,i=r.parameterTypes,a=e.prototype.declaration.signature.parameters,s=r.returnType,o=r.thisType,h=e.is(p.CommonFlags.INSTANCE),d=r.requiredParameters,m=d,g=i.length,y=g;h&&(++m,++y);var E=assert(y-m),f=new Array(m),T=0,I=this.module;h&&(f[0]=I.createGetLocal(0,this.options.nativeSizeType),T=1);for(var v=0;v=i);var o=this.module;if(!this.compileFunction(e))return o.createUnreachable();var c=e.signature.returnType,l=e.is(p.CommonFlags.MODULE_IMPORT);if(r=a),this.ensureFunctionType(e.parameterTypes,e.returnType,e.thisType);var c=this.module;if(n=0),this.currentType=E,this.module.createGetLocal(f,E.toNativeType());case u.ElementKind.GLOBAL:if(!this.compileGlobal(y))return this.module.createUnreachable();var T=y.type;return assert(T!=_.Type.void),y.is(p.CommonFlags.INLINED)?this.compileInlineConstant(y,t,r):(this.currentType=T,this.module.createGetGlobal(y.internalName,T.toNativeType()));case u.ElementKind.ENUMVALUE:return y.is(p.CommonFlags.COMPILED)?(this.currentType=_.Type.i32,y.is(p.CommonFlags.INLINED)?this.module.createI32(y.constantValue):this.module.createGetGlobal(y.internalName,1)):(this.error(c.DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,e.range),this.currentType=_.Type.i32,this.module.createUnreachable());case u.ElementKind.FUNCTION_PROTOTYPE:var I=this.resolver.resolveFunction(y,null,i.flow.contextualTypeArguments);if(!I||!this.compileFunction(I))return n.createUnreachable();var v=this.ensureFunctionTableEntry(I);return this.currentType=I.signature.type,this.module.createI32(v)}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileInstanceOfExpression=function(e,t){var r=this.module,n=this.compileExpressionRetainType(e.expression,this.options.usizeType,0),i=this.currentType,a=this.resolver.resolveType(e.isType);return this.currentType=_.Type.bool,a?i.is(512)&&!a.is(512)?i.nonNullableType.isAssignableTo(a)?r.createBinary(i.is(64)?l.BinaryOp.NeI64:l.BinaryOp.NeI32,n,i.toNativeZero(r)):r.createI32(0):r.createI32(i.isAssignableTo(a,!0)?1:0):r.createUnreachable()},t.prototype.compileLiteralExpression=function(e,t,r){void 0===r&&(r=!1);var n=this.module;switch(e.literalKind){case d.LiteralKind.ARRAY:assert(!r);var i=t.classReference;return i&&i.prototype==this.program.arrayPrototype?this.compileArrayLiteral(assert(i.typeArguments)[0],e.elementExpressions,!1,e):(this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable());case d.LiteralKind.FLOAT:var a=e.value;return r&&(a=-a),t==_.Type.f32?n.createF32(a):(this.currentType=_.Type.f64,n.createF64(a));case d.LiteralKind.INTEGER:var s=e.value;switch(r&&(s=i64_sub(i64_new(0),s)),t.kind){case 0:if(i64_is_i8(s))return n.createI32(i64_low(s));break;case 5:if(i64_is_u8(s))return n.createI32(i64_low(s));break;case 1:if(i64_is_i16(s))return n.createI32(i64_low(s));break;case 6:if(i64_is_u16(s))return n.createI32(i64_low(s));break;case 2:if(i64_is_i32(s))return n.createI32(i64_low(s));break;case 7:if(i64_is_u32(s))return n.createI32(i64_low(s));break;case 10:if(i64_is_bool(s))return n.createI32(i64_low(s));break;case 4:if(!this.options.isWasm64){if(i64_is_i32(s))return n.createI32(i64_low(s));break}return n.createI64(i64_low(s),i64_high(s));case 9:if(!this.options.isWasm64){if(i64_is_u32(s))return n.createI32(i64_low(s));break}return n.createI64(i64_low(s),i64_high(s));case 3:case 8:return n.createI64(i64_low(s),i64_high(s));case 11:if(i64_is_f32(s))return n.createF32(i64_to_f32(s));break;case 12:if(i64_is_f64(s))return n.createF64(i64_to_f64(s));break;case 13:break;default:return assert(!1),n.createUnreachable()}return i64_is_i32(s)?(this.currentType=_.Type.i32,n.createI32(i64_low(s))):i64_is_u32(s)?(this.currentType=_.Type.u32,n.createI32(i64_low(s))):(this.currentType=_.Type.i64,n.createI64(i64_low(s),i64_high(s)));case d.LiteralKind.STRING:return assert(!r),this.compileStringLiteral(e);case d.LiteralKind.OBJECT:return assert(!r),this.compileObjectLiteral(e,t)}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.currentType=t,n.createUnreachable()},t.prototype.ensureStaticString=function(e){var t,r=this.program,n=r.hasGC,i=r.gcHeaderSize,a=assert(r.stringInstance),s=this.stringSegments;if(s.has(e))t=s.get(e);else{var c=e.length,l=a.currentMemoryOffset+1&-2,p=l+2*c,u=void 0,h=void 0;n?(u=new Uint8Array(i+p),h=i,m.writeI32(o.ensureGCHook(this,a),u,r.gcHookOffset)):(u=new Uint8Array(p),h=0),m.writeI32(c,u,h+a.offsetof("length")),h+=l;for(var d=0;d",t.toString()),r.createUnreachable();var i=n.constructorInstance;if(i){if(i.signature.requiredParameters)return this.error(c.DiagnosticCode.Constructor_of_class_0_must_not_require_any_arguments,e.range,n.toString()),r.createUnreachable();if(i.is(p.CommonFlags.PRIVATE))return this.error(c.DiagnosticCode.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration,e.range,n.toString()),r.createUnreachable();if(i.is(p.CommonFlags.PROTECTED))return this.error(c.DiagnosticCode.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration,e.range,n.toString()),r.createUnreachable()}var a=e.names,s=a.length,l=e.values,h=n.members,d=!1,_=new Array(s+2),m=this.currentFunction.getTempLocal(this.options.usizeType);assert(s==l.length);for(var g=0,y=s;g=0);var l=this.compileExpressionRetainType(o,this.options.usizeType,0);return this.currentType=i.type,n.createLoad(i.type.byteSize,i.type.is(5),l,i.type.toNativeType(),i.memoryOffset);case u.ElementKind.PROPERTY:return this.compileGetter(i,e);case u.ElementKind.FUNCTION_PROTOTYPE:return this.error(c.DiagnosticCode.Cannot_access_method_0_without_calling_it_as_it_requires_this_to_be_set,e.range,i.simpleName),n.createUnreachable()}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()},t.prototype.compileGetter=function(e,t){var r=e.getterPrototype;if(r){var n=this.resolver.resolveFunction(r,null);if(!n)return this.module.createUnreachable();var i=n.signature;if(!this.checkCallSignature(i,0,n.is(p.CommonFlags.INSTANCE),t))return this.module.createUnreachable();var a=0!=(n.decoratorFlags&u.DecoratorFlags.INLINE);if(n.is(p.CommonFlags.INSTANCE)){var s=assert(n.parent);assert(s.kind==u.ElementKind.CLASS);var o=assert(this.resolver.currentThisExpression),l=this.compileExpressionRetainType(o,this.options.usizeType,0);//!!! -return this.currentType=i.returnType,this.compileCallDirect(n,[],t,l,a)}return this.currentType=i.returnType,this.compileCallDirect(n,[],t,0,a)}return this.error(c.DiagnosticCode.Property_0_does_not_exist_on_type_1,t.range,e.simpleName,e.parent.toString()),this.module.createUnreachable()},t.prototype.compileTernaryExpression=function(e,t){var r=e.ifThen,n=e.ifElse,i=this.currentFunction,a=i.flow,s=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,_.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(p.CommonFlags.GENERIC|p.CommonFlags.GENERIC_CONTEXT)){var o=this.module.precomputeExpression(s);if(l.getExpressionId(o)==l.ExpressionId.Const&&1==l.getExpressionType(o))return l.getConstValueI32(o)?this.compileExpressionRetainType(r,t,0):this.compileExpressionRetainType(n,t,0);s=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,_.Type.bool,0),this.currentType)}var u=a.fork();i.flow=u;var h=this.compileExpressionRetainType(r,t,0),d=this.currentType;u.free();var m=a.fork();i.flow=m;var g=this.compileExpressionRetainType(n,t,0),y=this.currentType;i.flow=m.free(),a.inheritMutual(u,m);var E=_.Type.commonCompatible(d,y,!1);return E?(h=this.convertExpression(h,d,E,1,0,r),g=this.convertExpression(g,y,E,1,0,n),this.currentType=E,this.module.createIf(s,h,g)):(this.error(c.DiagnosticCode.Type_0_is_not_assignable_to_type_1,e.range,d.toString(),y.toString()),this.currentType=t,this.module.createUnreachable())},t.prototype.compileUnaryPostfixExpression=function(e,t){var r=this.module,n=this.currentFunction,i=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0);if(l.getExpressionId(i)==l.ExpressionId.Unreachable)return i;var a,s=this.currentType,o=null;switch(t!=_.Type.void&&(o=n.getTempLocal(s,!1),i=r.createTeeLocal(o.index,i)),e.operator){case h.Token.PLUS_PLUS:switch(s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=r.createBinary(l.BinaryOp.AddI32,i,r.createI32(1));break;case 9:if(this.currentType.is(256)){if(d=this.currentType.classReference)if(m=d.lookupOverload(u.OperatorKind.POSTFIX_INC)){a=this.compileUnaryOverload(m,e.operand,i,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),r.createUnreachable()}case 4:var p=this.options;a=r.createBinary(p.isWasm64?l.BinaryOp.AddI64:l.BinaryOp.AddI32,i,s.toNativeOne(r));break;case 3:case 8:a=r.createBinary(l.BinaryOp.AddI64,i,r.createI64(1));break;case 11:a=r.createBinary(l.BinaryOp.AddF32,i,r.createF32(1));break;case 12:a=r.createBinary(l.BinaryOp.AddF64,i,r.createF64(1));break;default:return assert(!1),r.createUnreachable()}break;case h.Token.MINUS_MINUS:switch(s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=r.createBinary(l.BinaryOp.SubI32,i,r.createI32(1));break;case 9:if(this.currentType.is(256)){var d,m;if(d=this.currentType.classReference)if(m=d.lookupOverload(u.OperatorKind.POSTFIX_DEC)){a=this.compileUnaryOverload(m,e.operand,i,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),r.createUnreachable()}case 4:p=this.options;a=r.createBinary(p.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,i,s.toNativeOne(r));break;case 3:case 8:a=r.createBinary(l.BinaryOp.SubI64,i,r.createI64(1));break;case 11:a=r.createBinary(l.BinaryOp.SubF32,i,r.createF32(1));break;case 12:a=r.createBinary(l.BinaryOp.SubF64,i,r.createF64(1));break;default:return assert(!1),r.createUnreachable()}break;default:return assert(!1),r.createUnreachable()}if(!o)return this.currentType=_.Type.void,this.compileAssignmentWithValue(e.operand,a,!1);var g=this.compileAssignmentWithValue(e.operand,a,!1);this.currentType=o.type,n.freeTempLocal(o);var y=o.type.toNativeType();return r.createBlock(null,[g,r.createGetLocal(o.index,y)],y)},t.prototype.compileUnaryPrefixExpression=function(e,t){var r,n=this.module,i=!1;switch(e.operator){case h.Token.PLUS:if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.PLUS)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}break;case h.Token.MINUS:if(e.operand.kind==d.NodeKind.LITERAL&&(e.operand.literalKind==d.LiteralKind.INTEGER||e.operand.literalKind==d.LiteralKind.FLOAT)){r=this.compileLiteralExpression(e.operand,t,!0),this.options.sourceMap&&this.addDebugLocation(r,e.range);break}if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.MINUS)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.SubI32,n.createI32(0),r);break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,this.currentType.toNativeZero(n),r);break;case 3:case 8:r=n.createBinary(l.BinaryOp.SubI64,n.createI64(0),r);break;case 11:r=n.createUnary(l.UnaryOp.NegF32,r);break;case 12:r=n.createUnary(l.UnaryOp.NegF64,r);break;default:assert(!1),r=n.createUnreachable()}break;case h.Token.PLUS_PLUS:if(i=!0,r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.PREFIX_INC)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.AddI32,r,this.module.createI32(1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.AddI64:l.BinaryOp.AddI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(l.BinaryOp.AddI64,r,n.createI64(1));break;case 11:r=n.createBinary(l.BinaryOp.AddF32,r,n.createF32(1));break;case 12:r=n.createBinary(l.BinaryOp.AddF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case h.Token.MINUS_MINUS:if(i=!0,r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.PREFIX_DEC)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.SubI32,r,n.createI32(1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(l.BinaryOp.SubI64,r,n.createI64(1));break;case 11:r=n.createBinary(l.BinaryOp.SubF32,r,n.createF32(1));break;case 12:r=n.createBinary(l.BinaryOp.SubF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case h.Token.EXCLAMATION:if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256))if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.NOT)){r=this.compileUnaryOverload(s,e.operand,r,e);break}r=this.makeIsFalseish(r,this.currentType),this.currentType=_.Type.bool;break;case h.Token.TILDE:if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t.is(8)?_.Type.i64:t,0,0),this.currentType.is(256)){var a,s;if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.BITWISE_NOT)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(r=this.convertExpression(r,this.currentType,this.currentType.intType,1,0,e.operand),this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.XorI32,r,n.createI32(-1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.XorI64:l.BinaryOp.XorI32,r,this.currentType.toNativeNegOne(n));break;case 3:case 8:r=n.createBinary(l.BinaryOp.XorI64,r,n.createI64(-1,-1));break;default:assert(!1),r=n.createUnreachable()}break;case h.Token.TYPEOF:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();default:return assert(!1),n.createUnreachable()}return i?this.compileAssignmentWithValue(e.operand,r,t!=_.Type.void):r},t.prototype.ensureSmallIntegerWrap=function(e,t){var r=this.module,n=this.currentFunction.flow;switch(t.kind){case 0:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(l.UnaryOp.ExtendI8ToI32,e):r.createBinary(l.BinaryOp.ShrI32,r.createBinary(l.BinaryOp.ShlI32,e,r.createI32(24)),r.createI32(24)));break;case 1:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(l.UnaryOp.ExtendI16ToI32,e):r.createBinary(l.BinaryOp.ShrI32,r.createBinary(l.BinaryOp.ShlI32,e,r.createI32(16)),r.createI32(16)));break;case 5:n.canOverflow(e,t)&&(e=r.createBinary(l.BinaryOp.AndI32,e,r.createI32(255)));break;case 6:n.canOverflow(e,t)&&(e=r.createBinary(l.BinaryOp.AndI32,e,r.createI32(65535)));break;case 10:n.canOverflow(e,t)&&(e=r.createBinary(l.BinaryOp.AndI32,e,r.createI32(1)))}return e},t.prototype.makeIsFalseish=function(e,t){var r=this.module;switch(t.kind){case 0:case 1:case 5:case 6:case 10:e=this.ensureSmallIntegerWrap(e,t);case 2:case 7:return r.createUnary(l.UnaryOp.EqzI32,e);case 3:case 8:return r.createUnary(l.UnaryOp.EqzI64,e);case 9:case 4:return r.createUnary(64==t.size?l.UnaryOp.EqzI64:l.UnaryOp.EqzI32,e);case 11:return r.createBinary(l.BinaryOp.EqF32,e,r.createF32(0));case 12:return r.createBinary(l.BinaryOp.EqF64,e,r.createF64(0));default:return assert(!1),r.createI32(1)}},t.prototype.makeIsTrueish=function(e,t){var r=this.module;switch(t.kind){case 0:case 1:case 5:case 6:case 10:e=this.ensureSmallIntegerWrap(e,t);case 2:case 7:return e;case 3:case 8:return r.createBinary(l.BinaryOp.NeI64,e,r.createI64(0));case 9:case 4:return 64==t.size?r.createBinary(l.BinaryOp.NeI64,e,r.createI64(0)):e;case 11:return r.createBinary(l.BinaryOp.NeF32,e,r.createF32(0));case 12:return r.createBinary(l.BinaryOp.NeF64,e,r.createF64(0));default:return assert(!1),r.createI32(0)}},t.prototype.makeAllocate=function(e,t){var r,n,a=this.module,s=this.currentFunction,c=this.options.nativeSizeType,l=s.getTempLocal(e.type,!1),h=new Array;if(h.push(a.createSetLocal(l.index,o.compileAllocate(this,e,t))),e.members)try{for(var d=i(e.members.values()),_=d.next();!_.done;_=d.next()){var m=_.value;if(m.kind==u.ElementKind.FIELD){var g=m,y=g.type,E=y.toNativeType(),f=g.prototype.declaration;if(assert(!g.isAny(p.CommonFlags.CONST)),f.initializer)h.push(a.createStore(y.byteSize,a.createGetLocal(l.index,c),this.compileExpression(f.initializer,y,1,0),E,g.memoryOffset));else{var T=g.prototype.declaration.parameterIndex;h.push(a.createStore(y.byteSize,a.createGetLocal(l.index,c),T>=0?a.createGetLocal(1+T,E):y.toNativeZero(a),E,g.memoryOffset))}}}}catch(e){r={error:e}}finally{try{_&&!_.done&&(n=d.return)&&n.call(d)}finally{if(r)throw r.error}}return h.push(a.createGetLocal(l.index,c)),s.freeTempLocal(l),this.currentType=e.type,a.createBlock(null,h,c)},t.prototype.makeConditionalAllocate=function(e,t){var r=this.module,n=this.options.nativeSizeType;return this.currentType=e.type,r.createIf(2==n?r.createBinary(l.BinaryOp.NeI64,r.createGetLocal(0,2),r.createI64(0)):r.createGetLocal(0,1),r.createGetLocal(0,n),r.createTeeLocal(0,this.makeAllocate(e,t)))},t.prototype.addDebugLocation=function(e,t){var r=this.currentFunction,n=t.source;n.debugInfoIndex<0&&(n.debugInfoIndex=this.module.addDebugInfoFile(n.normalizedPath)),t.debugInfoRef=e,r.debugLocations.push(t)},t}(c.DiagnosticEmitter);function T(e,t){if(y=t.range.source.simplePath,E=t.programLevelInternalName,e.hasDecorator(u.DecoratorFlags.EXTERNAL)){var r=e.program,n=assert(d.findDecorator(d.DecoratorKind.EXTERNAL,t.decorators)),i=n.arguments;if(i&&i.length){var a=i[0];a.kind==d.NodeKind.LITERAL&&a.literalKind==d.LiteralKind.STRING?(E=a.value,i.length>=2&&((a=i[1]).kind==d.NodeKind.LITERAL&&a.literalKind==d.LiteralKind.STRING?(y=E,E=a.value,i.length>2&&r.error(c.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,"2",i.length.toString())):r.error(c.DiagnosticCode.String_literal_expected,a.range))):r.error(c.DiagnosticCode.String_literal_expected,a.range)}else r.error(c.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,n.range,"1","0")}}t.Compiler=f},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.Operation_not_supported=100]="Operation_not_supported",e[e.Operation_is_unsafe=101]="Operation_is_unsafe",e[e.User_defined_0=102]="User_defined_0",e[e.Conversion_from_type_0_to_1_requires_an_explicit_cast=200]="Conversion_from_type_0_to_1_requires_an_explicit_cast",e[e.Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit=201]="Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit",e[e.Type_0_cannot_be_changed_to_type_1=202]="Type_0_cannot_be_changed_to_type_1",e[e.Type_0_cannot_be_reinterpreted_as_type_1=203]="Type_0_cannot_be_reinterpreted_as_type_1",e[e.Basic_type_0_cannot_be_nullable=204]="Basic_type_0_cannot_be_nullable",e[e.Cannot_export_a_mutable_global=205]="Cannot_export_a_mutable_global",e[e.Compiling_constant_with_non_constant_initializer_as_mutable=206]="Compiling_constant_with_non_constant_initializer_as_mutable",e[e.Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa=207]="Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa",e[e.Unmanaged_classes_cannot_implement_interfaces=208]="Unmanaged_classes_cannot_implement_interfaces",e[e.Invalid_regular_expression_flags=209]="Invalid_regular_expression_flags",e[e.Implementation_0_must_match_the_signature_1=210]="Implementation_0_must_match_the_signature_1",e[e.Class_0_is_sealed_and_cannot_be_extended=211]="Class_0_is_sealed_and_cannot_be_extended",e[e.Decorator_0_is_not_valid_here=212]="Decorator_0_is_not_valid_here",e[e.Duplicate_decorator=213]="Duplicate_decorator",e[e.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf=214]="An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf",e[e.Optional_parameter_must_have_an_initializer=215]="Optional_parameter_must_have_an_initializer",e[e.Constructor_of_class_0_must_not_require_any_arguments=216]="Constructor_of_class_0_must_not_require_any_arguments",e[e.Function_0_cannot_be_inlined_into_itself=217]="Function_0_cannot_be_inlined_into_itself",e[e.Cannot_access_method_0_without_calling_it_as_it_requires_this_to_be_set=218]="Cannot_access_method_0_without_calling_it_as_it_requires_this_to_be_set",e[e.Optional_properties_are_not_supported=219]="Optional_properties_are_not_supported",e[e.Unterminated_string_literal=1002]="Unterminated_string_literal",e[e.Identifier_expected=1003]="Identifier_expected",e[e._0_expected=1005]="_0_expected",e[e.A_file_cannot_have_a_reference_to_itself=1006]="A_file_cannot_have_a_reference_to_itself",e[e.Trailing_comma_not_allowed=1009]="Trailing_comma_not_allowed",e[e.Unexpected_token=1012]="Unexpected_token",e[e.A_rest_parameter_must_be_last_in_a_parameter_list=1014]="A_rest_parameter_must_be_last_in_a_parameter_list",e[e.Parameter_cannot_have_question_mark_and_initializer=1015]="Parameter_cannot_have_question_mark_and_initializer",e[e.A_required_parameter_cannot_follow_an_optional_parameter=1016]="A_required_parameter_cannot_follow_an_optional_parameter",e[e.Statements_are_not_allowed_in_ambient_contexts=1036]="Statements_are_not_allowed_in_ambient_contexts",e[e.Initializers_are_not_allowed_in_ambient_contexts=1039]="Initializers_are_not_allowed_in_ambient_contexts",e[e._0_modifier_cannot_be_used_here=1042]="_0_modifier_cannot_be_used_here",e[e.A_rest_parameter_cannot_be_optional=1047]="A_rest_parameter_cannot_be_optional",e[e.A_rest_parameter_cannot_have_an_initializer=1048]="A_rest_parameter_cannot_have_an_initializer",e[e.A_set_accessor_must_have_exactly_one_parameter=1049]="A_set_accessor_must_have_exactly_one_parameter",e[e.A_set_accessor_parameter_cannot_have_an_initializer=1052]="A_set_accessor_parameter_cannot_have_an_initializer",e[e.A_get_accessor_cannot_have_parameters=1054]="A_get_accessor_cannot_have_parameters",e[e.Enum_member_must_have_initializer=1061]="Enum_member_must_have_initializer",e[e.Type_parameters_cannot_appear_on_a_constructor_declaration=1092]="Type_parameters_cannot_appear_on_a_constructor_declaration",e[e.Type_annotation_cannot_appear_on_a_constructor_declaration=1093]="Type_annotation_cannot_appear_on_a_constructor_declaration",e[e.An_accessor_cannot_have_type_parameters=1094]="An_accessor_cannot_have_type_parameters",e[e.A_set_accessor_cannot_have_a_return_type_annotation=1095]="A_set_accessor_cannot_have_a_return_type_annotation",e[e.Type_parameter_list_cannot_be_empty=1098]="Type_parameter_list_cannot_be_empty",e[e.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement=1104]="A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement",e[e.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement=1105]="A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement",e[e.A_return_statement_can_only_be_used_within_a_function_body=1108]="A_return_statement_can_only_be_used_within_a_function_body",e[e.Expression_expected=1109]="Expression_expected",e[e.Type_expected=1110]="Type_expected",e[e.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement=1113]="A_default_clause_cannot_appear_more_than_once_in_a_switch_statement",e[e.Duplicate_label_0=1114]="Duplicate_label_0",e[e.Octal_literals_are_not_allowed_in_strict_mode=1121]="Octal_literals_are_not_allowed_in_strict_mode",e[e.Digit_expected=1124]="Digit_expected",e[e.Hexadecimal_digit_expected=1125]="Hexadecimal_digit_expected",e[e.Unexpected_end_of_text=1126]="Unexpected_end_of_text",e[e.Invalid_character=1127]="Invalid_character",e[e._case_or_default_expected=1130]="_case_or_default_expected",e[e.A_declare_modifier_cannot_be_used_in_an_already_ambient_context=1038]="A_declare_modifier_cannot_be_used_in_an_already_ambient_context",e[e.Type_argument_expected=1140]="Type_argument_expected",e[e.String_literal_expected=1141]="String_literal_expected",e[e.Line_break_not_permitted_here=1142]="Line_break_not_permitted_here",e[e.Declaration_expected=1146]="Declaration_expected",e[e._const_declarations_must_be_initialized=1155]="_const_declarations_must_be_initialized",e[e.Unterminated_regular_expression_literal=1161]="Unterminated_regular_expression_literal",e[e.Interface_declaration_cannot_have_implements_clause=1176]="Interface_declaration_cannot_have_implements_clause",e[e.Binary_digit_expected=1177]="Binary_digit_expected",e[e.Octal_digit_expected=1178]="Octal_digit_expected",e[e.An_implementation_cannot_be_declared_in_ambient_contexts=1183]="An_implementation_cannot_be_declared_in_ambient_contexts",e[e.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive=1198]="An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive",e[e.Unterminated_Unicode_escape_sequence=1199]="Unterminated_Unicode_escape_sequence",e[e.Decorators_are_not_valid_here=1206]="Decorators_are_not_valid_here",e[e._abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration=1242]="_abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration",e[e.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract=1245]="Method_0_cannot_have_an_implementation_because_it_is_marked_abstract",e[e.A_definite_assignment_assertion_is_not_permitted_in_this_context=1255]="A_definite_assignment_assertion_is_not_permitted_in_this_context",e[e.A_class_may_only_extend_another_class=1311]="A_class_may_only_extend_another_class",e[e.A_parameter_property_cannot_be_declared_using_a_rest_parameter=1317]="A_parameter_property_cannot_be_declared_using_a_rest_parameter",e[e.Duplicate_identifier_0=2300]="Duplicate_identifier_0",e[e.Cannot_find_name_0=2304]="Cannot_find_name_0",e[e.Module_0_has_no_exported_member_1=2305]="Module_0_has_no_exported_member_1",e[e.Generic_type_0_requires_1_type_argument_s=2314]="Generic_type_0_requires_1_type_argument_s",e[e.Type_0_is_not_generic=2315]="Type_0_is_not_generic",e[e.Type_0_is_not_assignable_to_type_1=2322]="Type_0_is_not_assignable_to_type_1",e[e.Index_signature_is_missing_in_type_0=2329]="Index_signature_is_missing_in_type_0",e[e._this_cannot_be_referenced_in_current_location=2332]="_this_cannot_be_referenced_in_current_location",e[e._super_can_only_be_referenced_in_a_derived_class=2335]="_super_can_only_be_referenced_in_a_derived_class",e[e.Property_0_does_not_exist_on_type_1=2339]="Property_0_does_not_exist_on_type_1",e[e.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures=2349]="Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures",e[e.Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature=2351]="Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature",e[e.A_function_whose_declared_type_is_not_void_must_return_a_value=2355]="A_function_whose_declared_type_is_not_void_must_return_a_value",e[e.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access=2357]="The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access",e[e.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access=2364]="The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access",e[e.Operator_0_cannot_be_applied_to_types_1_and_2=2365]="Operator_0_cannot_be_applied_to_types_1_and_2",e[e._get_and_set_accessor_must_have_the_same_type=2380]="_get_and_set_accessor_must_have_the_same_type",e[e.Constructor_implementation_is_missing=2390]="Constructor_implementation_is_missing",e[e.Function_implementation_is_missing_or_not_immediately_following_the_declaration=2391]="Function_implementation_is_missing_or_not_immediately_following_the_declaration",e[e.Multiple_constructor_implementations_are_not_allowed=2392]="Multiple_constructor_implementations_are_not_allowed",e[e.Duplicate_function_implementation=2393]="Duplicate_function_implementation",e[e.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local=2395]="Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local",e[e.Type_0_has_no_property_1=2460]="Type_0_has_no_property_1",e[e.The_0_operator_cannot_be_applied_to_type_1=2469]="The_0_operator_cannot_be_applied_to_type_1",e[e.In_const_enum_declarations_member_initializer_must_be_constant_expression=2474]="In_const_enum_declarations_member_initializer_must_be_constant_expression",e[e.Export_declaration_conflicts_with_exported_declaration_of_0=2484]="Export_declaration_conflicts_with_exported_declaration_of_0",e[e.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property=2540]="Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property",e[e.The_target_of_an_assignment_must_be_a_variable_or_a_property_access=2541]="The_target_of_an_assignment_must_be_a_variable_or_a_property_access",e[e.Index_signature_in_type_0_only_permits_reading=2542]="Index_signature_in_type_0_only_permits_reading",e[e.Expected_0_arguments_but_got_1=2554]="Expected_0_arguments_but_got_1",e[e.Expected_at_least_0_arguments_but_got_1=2555]="Expected_at_least_0_arguments_but_got_1",e[e.Expected_0_type_arguments_but_got_1=2558]="Expected_0_type_arguments_but_got_1",e[e.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums=2651]="A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums",e[e.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration=2673]="Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration",e[e.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration=2674]="Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration",e[e.Namespace_0_has_no_exported_member_1=2694]="Namespace_0_has_no_exported_member_1",e[e.File_0_not_found=6054]="File_0_not_found",e[e.Numeric_separators_are_not_allowed_here=6188]="Numeric_separators_are_not_allowed_here",e[e.Multiple_consecutive_numeric_separators_are_not_permitted=6189]="Multiple_consecutive_numeric_separators_are_not_permitted"}(t.DiagnosticCode||(t.DiagnosticCode={})),t.diagnosticCodeToString=function(e){switch(e){case 100:return"Operation not supported.";case 101:return"Operation is unsafe.";case 102:return"User-defined: {0}";case 200:return"Conversion from type '{0}' to '{1}' requires an explicit cast.";case 201:return"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.";case 202:return"Type '{0}' cannot be changed to type '{1}'.";case 203:return"Type '{0}' cannot be reinterpreted as type '{1}'.";case 204:return"Basic type '{0}' cannot be nullable.";case 205:return"Cannot export a mutable global.";case 206:return"Compiling constant with non-constant initializer as mutable.";case 207:return"Unmanaged classes cannot extend managed classes and vice-versa.";case 208:return"Unmanaged classes cannot implement interfaces.";case 209:return"Invalid regular expression flags.";case 210:return"Implementation '{0}' must match the signature '{1}'.";case 211:return"Class '{0}' is sealed and cannot be extended.";case 212:return"Decorator '{0}' is not valid here.";case 213:return"Duplicate decorator.";case 214:return"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.";case 215:return"Optional parameter must have an initializer.";case 216:return"Constructor of class '{0}' must not require any arguments.";case 217:return"Function '{0}' cannot be inlined into itself.";case 218:return"Cannot access method '{0}' without calling it as it requires 'this' to be set.";case 219:return"Optional properties are not supported.";case 1002:return"Unterminated string literal.";case 1003:return"Identifier expected.";case 1005:return"'{0}' expected.";case 1006:return"A file cannot have a reference to itself.";case 1009:return"Trailing comma not allowed.";case 1012:return"Unexpected token.";case 1014:return"A rest parameter must be last in a parameter list.";case 1015:return"Parameter cannot have question mark and initializer.";case 1016:return"A required parameter cannot follow an optional parameter.";case 1036:return"Statements are not allowed in ambient contexts.";case 1039:return"Initializers are not allowed in ambient contexts.";case 1042:return"'{0}' modifier cannot be used here.";case 1047:return"A rest parameter cannot be optional.";case 1048:return"A rest parameter cannot have an initializer.";case 1049:return"A 'set' accessor must have exactly one parameter.";case 1052:return"A 'set' accessor parameter cannot have an initializer.";case 1054:return"A 'get' accessor cannot have parameters.";case 1061:return"Enum member must have initializer.";case 1092:return"Type parameters cannot appear on a constructor declaration.";case 1093:return"Type annotation cannot appear on a constructor declaration.";case 1094:return"An accessor cannot have type parameters.";case 1095:return"A 'set' accessor cannot have a return type annotation.";case 1098:return"Type parameter list cannot be empty.";case 1104:return"A 'continue' statement can only be used within an enclosing iteration statement.";case 1105:return"A 'break' statement can only be used within an enclosing iteration or switch statement.";case 1108:return"A 'return' statement can only be used within a function body.";case 1109:return"Expression expected.";case 1110:return"Type expected.";case 1113:return"A 'default' clause cannot appear more than once in a 'switch' statement.";case 1114:return"Duplicate label '{0}'.";case 1121:return"Octal literals are not allowed in strict mode.";case 1124:return"Digit expected.";case 1125:return"Hexadecimal digit expected.";case 1126:return"Unexpected end of text.";case 1127:return"Invalid character.";case 1130:return"'case' or 'default' expected.";case 1038:return"A 'declare' modifier cannot be used in an already ambient context.";case 1140:return"Type argument expected.";case 1141:return"String literal expected.";case 1142:return"Line break not permitted here.";case 1146:return"Declaration expected.";case 1155:return"'const' declarations must be initialized.";case 1161:return"Unterminated regular expression literal.";case 1176:return"Interface declaration cannot have 'implements' clause.";case 1177:return"Binary digit expected.";case 1178:return"Octal digit expected.";case 1183:return"An implementation cannot be declared in ambient contexts.";case 1198:return"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.";case 1199:return"Unterminated Unicode escape sequence.";case 1206:return"Decorators are not valid here.";case 1242:return"'abstract' modifier can only appear on a class, method, or property declaration.";case 1245:return"Method '{0}' cannot have an implementation because it is marked abstract.";case 1255:return"A definite assignment assertion '!' is not permitted in this context.";case 1311:return"A class may only extend another class.";case 1317:return"A parameter property cannot be declared using a rest parameter.";case 2300:return"Duplicate identifier '{0}'.";case 2304:return"Cannot find name '{0}'.";case 2305:return"Module '{0}' has no exported member '{1}'.";case 2314:return"Generic type '{0}' requires {1} type argument(s).";case 2315:return"Type '{0}' is not generic.";case 2322:return"Type '{0}' is not assignable to type '{1}'.";case 2329:return"Index signature is missing in type '{0}'.";case 2332:return"'this' cannot be referenced in current location.";case 2335:return"'super' can only be referenced in a derived class.";case 2339:return"Property '{0}' does not exist on type '{1}'.";case 2349:return"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.";case 2351:return"Cannot use 'new' with an expression whose type lacks a construct signature.";case 2355:return"A function whose declared type is not 'void' must return a value.";case 2357:return"The operand of an increment or decrement operator must be a variable or a property access.";case 2364:return"The left-hand side of an assignment expression must be a variable or a property access.";case 2365:return"Operator '{0}' cannot be applied to types '{1}' and '{2}'.";case 2380:return"'get' and 'set' accessor must have the same type.";case 2390:return"Constructor implementation is missing.";case 2391:return"Function implementation is missing or not immediately following the declaration.";case 2392:return"Multiple constructor implementations are not allowed.";case 2393:return"Duplicate function implementation.";case 2395:return"Individual declarations in merged declaration '{0}' must be all exported or all local.";case 2460:return"Type '{0}' has no property '{1}'.";case 2469:return"The '{0}' operator cannot be applied to type '{1}'.";case 2474:return"In 'const' enum declarations member initializer must be constant expression.";case 2484:return"Export declaration conflicts with exported declaration of '{0}'.";case 2540:return"Cannot assign to '{0}' because it is a constant or a read-only property.";case 2541:return"The target of an assignment must be a variable or a property access.";case 2542:return"Index signature in type '{0}' only permits reading.";case 2554:return"Expected {0} arguments, but got {1}.";case 2555:return"Expected at least {0} arguments, but got {1}.";case 2558:return"Expected {0} type arguments, but got {1}.";case 2651:return"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.";case 2673:return"Constructor of class '{0}' is private and only accessible within the class declaration.";case 2674:return"Constructor of class '{0}' is protected and only accessible within the class declaration.";case 2694:return"Namespace '{0}' has no exported member '{1}'.";case 6054:return"File '{0}' not found.";case 6188:return"Numeric separators are not allowed here.";case 6189:return"Multiple consecutive numeric separators are not permitted.";default:return""}}},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(t,r)};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),i=this&&this.__values||function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],r=0;return t?t.call(e):{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)s.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return s};Object.defineProperty(t,"__esModule",{value:!0});var s,o=r(1),c=r(4),l=r(3),p=r(7),u=r(0);!function(e){e[e.REPORT=0]="REPORT",e[e.SWALLOW=1]="SWALLOW"}(s=t.ReportMode||(t.ReportMode={}));var h=function(e){function t(t){var r=e.call(this,t.diagnostics)||this;return r.currentThisExpression=null,r.currentElementExpression=null,r.program=t,r}return n(t,e),t.prototype.resolveType=function(e,t,r){if(void 0===t&&(t=null),void 0===r&&(r=s.REPORT),e.kind==l.NodeKind.SIGNATURE){var n=this.resolveSignature(e,t,r);return n?e.isNullable?n.type.asNullable():n.type:null}assert(e.kind==l.NodeKind.TYPE);var i=e,a=i.name.text,h=a,d=i.range.source.internalPath+u.PATH_DELIMITER+a,_=this.program.elementsLookup,m=void 0;if((m=_.get(d))||(m=_.get(h)))switch(m.kind){case c.ElementKind.ENUM:return null!==i.typeArguments&&i.typeArguments.length?(r==s.REPORT&&this.error(o.DiagnosticCode.Type_0_is_not_generic,e.range,m.internalName),null):p.Type.i32;case c.ElementKind.CLASS_PROTOTYPE:var g=this.resolveClassInclTypeArguments(m,i.typeArguments,t,e);return g?e.isNullable?g.type.asNullable():g.type:null}var y=this.program.typeAliases.get(a);if(y)return this.resolveType(y.type,t,r);var E=i.typeArguments;if(E){for(var f=E.length,T=new Array(f),I=0;I",h+="<"+A+">")}else if(t){var C=t.get(h);if(C)return C}}var N=this.program.typesLookup,O=void 0;return(O=N.get(d))||(O=N.get(h))?O:(r==s.REPORT&&this.error(o.DiagnosticCode.Cannot_find_name_0,i.name.range,h),null)},t.prototype.resolveSignature=function(e,t,r){void 0===t&&(t=null),void 0===r&&(r=s.REPORT);var n=e.explicitThisType,i=null;if(n&&!(i=this.resolveType(n,t,r)))return null;for(var a=e.parameters,o=a.length,c=new Array(o),u=new Array(o),h=0,d=!1,_=0;_"),_=new c.Function(e,V,H,R||y,r),e.instances.set(d,_),this.program.instancesLookup.set(V,_),_},t.prototype.resolveFunctionPartially=function(e,t,r){void 0===r&&(r=s.REPORT),assert(e.is(u.CommonFlags.INSTANCE));var n=assert(e.classPrototype);if(!t||!t.length)return e;var i=e.simpleName,a=p.typesToString(t),o=new c.FunctionPrototype(this.program,i,n.internalName+"<"+a+">"+u.INSTANCE_DELIMITER+i,e.declaration,n,e.decoratorFlags);return o.flags=e.flags,o.operatorKind=e.operatorKind,o.classTypeArguments=t,o},t.prototype.resolveFunctionInclTypeArguments=function(e,t,r,n,i){void 0===i&&(i=s.REPORT);var a=null;return!e.is(u.CommonFlags.GENERIC)||(assert(null!=t&&0!=t.length),a=this.resolveTypeArguments(assert(e.declaration.typeParameters),t,r,n,i))?this.resolveFunction(e,a,r,i):null},t.prototype.resolveClass=function(e,t,r,n){var h,d,_,m,g,y,E,f;void 0===r&&(r=null),void 0===n&&(n=s.REPORT);var T=t?p.typesToString(t):"",I=e.instances.get(T);if(I)return I;var v=r;if(r=new Map,v)try{for(var A=i(v),C=A.next();!C.done;C=A.next()){var N=a(C.value,2),O=N[0],S=N[1];r.set(O,S)}}catch(e){h={error:e}}finally{try{C&&!C.done&&(d=A.return)&&d.call(A)}finally{if(h)throw h.error}}var L=e.declaration;if(t){var b=L.typeParameters,k=b.length,R=t.length;assert(R==k);for(var x=0;x",U+="<"+T+">"),(I=new c.Class(e,B,U,t,F)).contextualTypeArguments=r,e.instances.set(T,I),this.program.instancesLookup.set(U,I);var P=0;if(F){if(F.members){I.members||(I.members=new Map);try{for(var w=i(F.members.values()),M=w.next();!M.done;M=w.next()){var G=M.value;I.members.set(G.simpleName,G)}}catch(e){_={error:e}}finally{try{M&&!M.done&&(m=w.return)&&m.call(w)}finally{if(_)throw _.error}}}P=F.currentMemoryOffset}if(e.constructorPrototype){var K=this.resolveFunctionPartially(e.constructorPrototype,t,n);if(!K)return null;I.constructorInstance=this.resolveFunction(K,null,null,n)}if(e.instanceMembers)try{for(var z=i(e.instanceMembers.values()),H=z.next();!H.done;H=z.next()){var V=H.value;switch(V.kind){case c.ElementKind.FIELD_PROTOTYPE:I.members||(I.members=new Map);var X=V.declaration,W=null;if(X.type)W=this.resolveType(X.type,I.contextualTypeArguments,n);else{if(null!==F&&null!==F.members){var Y=F.members.get(V.simpleName);Y&&!Y.is(u.CommonFlags.PRIVATE)&&(assert(Y.kind==c.ElementKind.FIELD),W=Y.type)}W||n==s.REPORT&&this.error(o.DiagnosticCode.Type_expected,X.name.range.atEnd)}if(!W)break;var Q=new c.Field(V,U+u.INSTANCE_DELIMITER+V.simpleName,W,X,I);switch(W.byteSize){case 1:break;case 2:1&P&&++P;break;case 4:3&P&&(P=1+(3|P));break;case 8:7&P&&(P=1+(7|P));break;default:assert(!1)}Q.memoryOffset=P,P+=W.byteSize,I.members.set(V.simpleName,Q);break;case c.ElementKind.FUNCTION_PROTOTYPE:I.members||(I.members=new Map);var q=this.resolveFunctionPartially(V,t,n);if(!q)return null;q.internalName=U+u.INSTANCE_DELIMITER+q.simpleName,I.members.set(V.simpleName,q);break;case c.ElementKind.PROPERTY:I.members||(I.members=new Map);var j=assert(V.getterPrototype),Z=V.setterPrototype,J=new c.Property(this.program,V.simpleName,U+u.INSTANCE_DELIMITER+V.simpleName,e),$=this.resolveFunctionPartially(j,t,n);if(!$)return null;if($.internalName=U+u.INSTANCE_DELIMITER+$.simpleName,J.getterPrototype=$,Z){var ee=this.resolveFunctionPartially(Z,t,n);if(!ee)return null;ee.internalName=U+u.INSTANCE_DELIMITER+ee.simpleName,J.setterPrototype=ee}I.members.set(V.simpleName,J);break;default:assert(!1)}}}catch(e){g={error:e}}finally{try{H&&!H.done&&(y=z.return)&&y.call(z)}finally{if(g)throw g.error}}I.currentMemoryOffset=P;try{for(var te=i(e.overloadPrototypes),re=te.next();!re.done;re=te.next()){var ne=a(re.value,2),ie=ne[0],ae=ne[1];assert(ie!=c.OperatorKind.INVALID);var se=void 0;if(ae.is(u.CommonFlags.INSTANCE)){var oe=this.resolveFunctionPartially(ae,t,n);if(!oe)continue;se=this.resolveFunction(oe,null,null,n)}else se=this.resolveFunction(ae,null,null,n);if(se){var ce=I.overloads;ce||(I.overloads=ce=new Map),ce.set(ie,se)}}}catch(e){E={error:e}}finally{try{re&&!re.done&&(f=te.return)&&f.call(te)}finally{if(E)throw E.error}}return I},t.prototype.resolveClassInclTypeArguments=function(e,t,r,n,i){void 0===i&&(i=s.REPORT);var a=null;if(e.is(u.CommonFlags.GENERIC)){var c=e.declaration.typeParameters,l=c.length;assert(l>0);var p=null!==t?t.length:0;if(l!=p)return i==s.REPORT&&this.error(o.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,l.toString(10),p.toString(10)),null;if(!(a=this.resolveTypeArguments(c,t,r,n,i)))return null}else if(null!==t&&t.length)return i==s.REPORT&&this.error(o.DiagnosticCode.Type_0_is_not_generic,n.range,e.internalName),null;return this.resolveClass(e,a,r,i)},t}(o.DiagnosticEmitter);t.Resolver=h},function(e,t,r){r(13),e.exports=r(25)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(14),r(16),r(17),r(18);var n=r(5);n.Module.prototype.toText=function(){return new binaryen.Module(this.ref).emitStackIR()},n.Module.prototype.toAsmjs=function(){return new binaryen.Module(this.ref).emitAsmjs()}},function(e,t,r){(function(e){const t=e.Binaryen||r(15);for(var n in e.binaryen=t,t)(n.startsWith("_Binaryen")||n.startsWith("_Relooper"))&&(e[n]=t[n]);e.__memory_allocate=t._malloc,e.__memory_free=t._free,e.__memory_copy=t._memmove,e.__store=function(e,r){t.HEAPU8[e]=r},e.__load=function(e){return t.HEAPU8[e]}}).call(this,r(6))},function(t,r){t.exports=e},function(e,t,r){(function(e){var t="undefined"!=typeof window&&window||void 0!==e&&e||self;t.ASC_TARGET=0;var r=new Float64Array(1),n=new Uint32Array(r.buffer);function i(){Error.captureStackTrace?Error.captureStackTrace(this,i):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}function a(e){this.message=e||"assertion failed",Error.captureStackTrace?Error.captureStackTrace(this,a):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}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)},{EPSILON:{value:Math.fround(1.1920929e-7),writable:!1},MIN_VALUE:{value:Math.fround(1.4012985e-45),writable:!1},MAX_VALUE:{value:Math.fround(3.4028235e38),writable:!1},MIN_NORMAL_VALUE:{value:Math.fround(1.17549435e-38),writable:!1},MIN_SAFE_INTEGER:{value:-16777215,writable:!1},MAX_SAFE_INTEGER:{value:16777215,writable:!1},POSITIVE_INFINITY:{value:1/0,writable:!1},NEGATIVE_INFINITY:{value:-1/0,writable:!1},NaN:{value:NaN,writable:!1}}),Object.defineProperties(t.f64=function(e){return+e},{EPSILON:{value:2.220446049250313e-16,writable:!1},MIN_VALUE:{value:5e-324,writable:!1},MAX_VALUE:{value:1.7976931348623157e308,writable:!1},MIN_NORMAL_VALUE:{value:2.2250738585072014e-308,writable:!1},MIN_SAFE_INTEGER:{value:-9007199254740991,writable:!1},MAX_SAFE_INTEGER:{value:9007199254740991,writable:!1},POSITIVE_INFINITY:{value:1/0,writable:!1},NEGATIVE_INFINITY:{value:-1/0,writable:!1},NaN:{value:NaN,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},i.prototype=Object.create(Error.prototype),i.prototype.name="UnreachableError",i.prototype.message="unreachable",t.unreachable=function(){throw new i},a.prototype=Object.create(Error.prototype),a.prototype.name="AssertionError",t.assert=function(e,t){if(e)return e;throw new a(t)},t.changetype=function(e){return e},t.parseI32=function(e,t){return 0|parseInt(e,void 0)},String.fromCharCodes=function(e){return String.fromCharCode.apply(String,e)},String.fromCodePoints=function(e){return String.fromCodePoint.apply(String,e)},t.isInteger=Number.isInteger,t.isFloat=function(e){return"number"==typeof e},t.isReference=function(e){return"object"==typeof e||"string"==typeof e},t.isString=function(e){return"string"==typeof e||e instanceof String},t.isArray=Array.isArray,t.unchecked=function(e){return e},t.fmod=function(e,t){return e%t},t.fmodf=function(e,t){return Math.fround(e%t)},t.JSMath=Math,t.JSMath.signbit=function(e){return r[0]=e,Boolean(n[1]>>>31&e==e)},t.memory=(()=>{var e=new Uint8Array(0),r=0;return{allocate:t.__memory_allocate||function(t){if(!(t>>>=0))return 0;if(r+t>e.length){var n=e;(e=new Uint8Array(Math.max(65536,e.length+t,2*e.length))).set(n)}var i=r;return 7&(r+=t)&&(r=1+(7|r)),i},free:t.__memory_free||function(e){},copy:t.__memory_copy||function(t,r,n){e.copyWithin(t,r,r+n)}}})(),t.store=t.__store||function(e,t,r){HEAP[e+(0|r)]=t},t.load=t.__load||function(e,t){return HEAP[e+(0|t)]}}).call(this,r(6))},function(e,t,r){(function(e){const t=new Float64Array(1),r=new Float32Array(t.buffer),n=new Int32Array(t.buffer);e.f32_as_i32=function(e){return r[0]=e,n[0]},e.i32_as_f32=function(e){return n[0]=e,r[0]},e.f64_as_i64=function(e){return t[0]=e,i64_new(n[0],n[1])},e.i64_as_f64=function(e){return n[0]=i64_low(e),n[1]=i64_high(e),t[0]}}).call(this,r(6))},function(e,t,r){(function(e){const t=e.Long||r(19);e.i64_zero=t.ZERO,e.i64_one=t.ONE,e.i64_new=function(e,r){return t.fromBits(e,r)},e.i64_low=function(e){return e.low},e.i64_high=function(e){return e.high},e.i64_add=function(e,t){return e.add(t)},e.i64_sub=function(e,t){return e.sub(t)},e.i64_mul=function(e,t){return e.mul(t)},e.i64_div=function(e,t){return e.div(t)},e.i64_div_u=function(e,t){return e.toUnsigned().div(t.toUnsigned()).toSigned()},e.i64_rem=function(e,t){return e.mod(t)},e.i64_rem_u=function(e,t){return e.toUnsigned().mod(t.toUnsigned()).toSigned()},e.i64_and=function(e,t){return e.and(t)},e.i64_or=function(e,t){return e.or(t)},e.i64_xor=function(e,t){return e.xor(t)},e.i64_shl=function(e,t){return e.shl(t)},e.i64_shr=function(e,t){return e.shr(t)},e.i64_shr_u=function(e,t){return e.shru(t)},e.i64_not=function(e){return e.not()},e.i64_eq=function(e,t){return e.eq(t)},e.i64_ne=function(e,t){return e.ne(t)},e.i64_align=function(e,r){assert(r&&0==(r&r-1));var n=t.fromInt(r-1);return e.add(n).and(n.not())},e.i64_is_i8=function(e){return 0===e.high&&e.low>=0&&e.low<=i8.MAX_VALUE||-1===e.high&&e.low>=i8.MIN_VALUE&&e.low<0},e.i64_is_i16=function(e){return 0===e.high&&e.low>=0&&e.low<=i16.MAX_VALUE||-1===e.high&&e.low>=i16.MIN_VALUE&&e.low<0},e.i64_is_i32=function(e){return 0===e.high&&e.low>=0||-1===e.high&&e.low<0},e.i64_is_u8=function(e){return 0===e.high&&e.low>=0&&e.low<=u8.MAX_VALUE},e.i64_is_u16=function(e){return 0===e.high&&e.low>=0&&e.low<=u16.MAX_VALUE},e.i64_is_u32=function(e){return 0===e.high},e.i64_is_bool=function(e){return 0===e.high&&(0===e.low||1===e.low)};const n=t.fromNumber(f32.MIN_SAFE_INTEGER),i=t.fromNumber(f32.MAX_SAFE_INTEGER);e.i64_is_f32=function(e){return e.gte(n)&&e.lte(i)};const a=t.fromNumber(f64.MIN_SAFE_INTEGER),s=t.fromNumber(f64.MAX_SAFE_INTEGER);e.i64_is_f64=function(e){return e.gte(a)&&e.lte(s)},e.i64_to_f32=function(t){return e.Math.fround(t.toNumber())},e.i64_to_f64=function(e){return e.toNumber()},e.i64_to_string=function(e,t){return(t?e.toUnsigned():e).toString(10)}}).call(this,r(6))},function(e,t){e.exports=n;var r=null;try{r=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(e){}function n(e,t,r){this.low=0|e,this.high=0|t,this.unsigned=!!r}function i(e){return!0===(e&&e.__isLong__)}n.prototype.__isLong__,Object.defineProperty(n.prototype,"__isLong__",{value:!0}),n.isLong=i;var a={},s={};function o(e,t){var r,n,i;return t?(i=0<=(e>>>=0)&&e<256)&&(n=s[e])?n:(r=l(e,(0|e)<0?-1:0,!0),i&&(s[e]=r),r):(i=-128<=(e|=0)&&e<128)&&(n=a[e])?n:(r=l(e,e<0?-1:0,!1),i&&(a[e]=r),r)}function c(e,t){if(isNaN(e))return t?E:y;if(t){if(e<0)return E;if(e>=_)return A}else{if(e<=-m)return C;if(e+1>=m)return v}return e<0?c(-e,t).neg():l(e%d|0,e/d|0,t)}function l(e,t,r){return new n(e,t,r)}n.fromInt=o,n.fromNumber=c,n.fromBits=l;var p=Math.pow;function u(e,t,r){if(0===e.length)throw Error("empty string");if("NaN"===e||"Infinity"===e||"+Infinity"===e||"-Infinity"===e)return y;if("number"==typeof t?(r=t,t=!1):t=!!t,(r=r||10)<2||360)throw Error("interior hyphen");if(0===n)return u(e.substring(1),t,r).neg();for(var i=c(p(r,8)),a=y,s=0;s>>0:this.low},N.toNumber=function(){return this.unsigned?(this.high>>>0)*d+(this.low>>>0):this.high*d+(this.low>>>0)},N.toString=function(e){if((e=e||10)<2||36>>0).toString(e);if((a=o).isZero())return l+s;for(;l.length<6;)l="0"+l;s=""+l+s}},N.getHighBits=function(){return this.high},N.getHighBitsUnsigned=function(){return this.high>>>0},N.getLowBits=function(){return this.low},N.getLowBitsUnsigned=function(){return this.low>>>0},N.getNumBitsAbs=function(){if(this.isNegative())return this.eq(C)?64:this.neg().getNumBitsAbs();for(var e=0!=this.high?this.high:this.low,t=31;t>0&&0==(e&1<=0},N.isOdd=function(){return 1==(1&this.low)},N.isEven=function(){return 0==(1&this.low)},N.equals=function(e){return i(e)||(e=h(e)),(this.unsigned===e.unsigned||this.high>>>31!=1||e.high>>>31!=1)&&(this.high===e.high&&this.low===e.low)},N.eq=N.equals,N.notEquals=function(e){return!this.eq(e)},N.neq=N.notEquals,N.ne=N.notEquals,N.lessThan=function(e){return this.comp(e)<0},N.lt=N.lessThan,N.lessThanOrEqual=function(e){return this.comp(e)<=0},N.lte=N.lessThanOrEqual,N.le=N.lessThanOrEqual,N.greaterThan=function(e){return this.comp(e)>0},N.gt=N.greaterThan,N.greaterThanOrEqual=function(e){return this.comp(e)>=0},N.gte=N.greaterThanOrEqual,N.ge=N.greaterThanOrEqual,N.compare=function(e){if(i(e)||(e=h(e)),this.eq(e))return 0;var t=this.isNegative(),r=e.isNegative();return t&&!r?-1:!t&&r?1:this.unsigned?e.high>>>0>this.high>>>0||e.high===this.high&&e.low>>>0>this.low>>>0?-1:1:this.sub(e).isNegative()?-1:1},N.comp=N.compare,N.negate=function(){return!this.unsigned&&this.eq(C)?C:this.not().add(f)},N.neg=N.negate,N.add=function(e){i(e)||(e=h(e));var t=this.high>>>16,r=65535&this.high,n=this.low>>>16,a=65535&this.low,s=e.high>>>16,o=65535&e.high,c=e.low>>>16,p=0,u=0,d=0,_=0;return d+=(_+=a+(65535&e.low))>>>16,u+=(d+=n+c)>>>16,p+=(u+=r+o)>>>16,p+=t+s,l((d&=65535)<<16|(_&=65535),(p&=65535)<<16|(u&=65535),this.unsigned)},N.subtract=function(e){return i(e)||(e=h(e)),this.add(e.neg())},N.sub=N.subtract,N.multiply=function(e){if(this.isZero())return y;if(i(e)||(e=h(e)),r)return l(r.mul(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned);if(e.isZero())return y;if(this.eq(C))return e.isOdd()?C:y;if(e.eq(C))return this.isOdd()?C:y;if(this.isNegative())return e.isNegative()?this.neg().mul(e.neg()):this.neg().mul(e).neg();if(e.isNegative())return this.mul(e.neg()).neg();if(this.lt(g)&&e.lt(g))return c(this.toNumber()*e.toNumber(),this.unsigned);var t=this.high>>>16,n=65535&this.high,a=this.low>>>16,s=65535&this.low,o=e.high>>>16,p=65535&e.high,u=e.low>>>16,d=65535&e.low,_=0,m=0,E=0,f=0;return E+=(f+=s*d)>>>16,m+=(E+=a*d)>>>16,E&=65535,m+=(E+=s*u)>>>16,_+=(m+=n*d)>>>16,m&=65535,_+=(m+=a*u)>>>16,m&=65535,_+=(m+=s*p)>>>16,_+=t*d+n*u+a*p+s*o,l((E&=65535)<<16|(f&=65535),(_&=65535)<<16|(m&=65535),this.unsigned)},N.mul=N.multiply,N.divide=function(e){if(i(e)||(e=h(e)),e.isZero())throw Error("division by zero");var t,n,a;if(r)return this.unsigned||-2147483648!==this.high||-1!==e.low||-1!==e.high?l((this.unsigned?r.div_u:r.div_s)(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned):this;if(this.isZero())return this.unsigned?E:y;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return E;if(e.gt(this.shru(1)))return T;a=E}else{if(this.eq(C))return e.eq(f)||e.eq(I)?C:e.eq(C)?f:(t=this.shr(1).div(e).shl(1)).eq(y)?e.isNegative()?f:I:(n=this.sub(e.mul(t)),a=t.add(n.div(e)));else if(e.eq(C))return this.unsigned?E:y;if(this.isNegative())return e.isNegative()?this.neg().div(e.neg()):this.neg().div(e).neg();if(e.isNegative())return this.div(e.neg()).neg();a=y}for(n=this;n.gte(e);){t=Math.max(1,Math.floor(n.toNumber()/e.toNumber()));for(var s=Math.ceil(Math.log(t)/Math.LN2),o=s<=48?1:p(2,s-48),u=c(t),d=u.mul(e);d.isNegative()||d.gt(n);)d=(u=c(t-=o,this.unsigned)).mul(e);u.isZero()&&(u=f),a=a.add(u),n=n.sub(d)}return a},N.div=N.divide,N.modulo=function(e){return i(e)||(e=h(e)),r?l((this.unsigned?r.rem_u:r.rem_s)(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned):this.sub(this.div(e).mul(e))},N.mod=N.modulo,N.rem=N.modulo,N.not=function(){return l(~this.low,~this.high,this.unsigned)},N.and=function(e){return i(e)||(e=h(e)),l(this.low&e.low,this.high&e.high,this.unsigned)},N.or=function(e){return i(e)||(e=h(e)),l(this.low|e.low,this.high|e.high,this.unsigned)},N.xor=function(e){return i(e)||(e=h(e)),l(this.low^e.low,this.high^e.high,this.unsigned)},N.shiftLeft=function(e){return i(e)&&(e=e.toInt()),0==(e&=63)?this:e<32?l(this.low<>>32-e,this.unsigned):l(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):l(this.high>>e-32,this.high>=0?0:-1,this.unsigned)},N.shr=N.shiftRight,N.shiftRightUnsigned=function(e){if(i(e)&&(e=e.toInt()),0===(e&=63))return this;var t=this.high;return e<32?l(this.low>>>e|t<<32-e,t>>>e,this.unsigned):l(32===e?t:t>>>e-32,0,this.unsigned)},N.shru=N.shiftRightUnsigned,N.shr_u=N.shiftRightUnsigned,N.toSigned=function(){return this.unsigned?l(this.low,this.high,!1):this},N.toUnsigned=function(){return this.unsigned?this:l(this.low,this.high,!0)},N.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()},N.toBytesLE=function(){var e=this.high,t=this.low;return[255&t,t>>>8&255,t>>>16&255,t>>>24,255&e,e>>>8&255,e>>>16&255,e>>>24]},N.toBytesBE=function(){var e=this.high,t=this.low;return[e>>>24,e>>>16&255,e>>>8&255,255&e,t>>>24,t>>>16&255,t>>>8&255,255&t]},n.fromBytes=function(e,t,r){return r?n.fromBytesLE(e,t):n.fromBytesBE(e,t)},n.fromBytesLE=function(e,t){return new n(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)},n.fromBytesBE=function(e,t){return new n(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}},function(e,t,r){"use strict";var n=this&&this.__values||function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],r=0;return t?t.call(e):{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(1),a=r(3),s=r(7),o=r(5),c=r(4),l=r(11),p=r(0);function u(e,t,r,n,p,u){var g,y,E,f,T=e.module;switch(t.internalName){case"isInteger":var I=d(e,r,n,u);return e.currentType=s.Type.bool,I?I.is(4)&&!I.is(256)?T.createI32(1):T.createI32(0):T.createUnreachable();case"isFloat":I=d(e,r,n,u);return e.currentType=s.Type.bool,I?I.is(8)?T.createI32(1):T.createI32(0):T.createUnreachable();case"isSigned":I=d(e,r,n,u);return e.currentType=s.Type.bool,I?I.is(1)?T.createI32(1):T.createI32(0):T.createUnreachable();case"isReference":I=d(e,r,n,u);return e.currentType=s.Type.bool,I?(e.currentType=s.Type.bool,I.is(256)?T.createI32(1):T.createI32(0)):T.createUnreachable();case"isString":I=d(e,r,n,u);if(e.currentType=s.Type.bool,!I)return T.createUnreachable();if(R=I.classReference){var v=e.program.stringInstance;if(v&&R.isAssignableTo(v))return T.createI32(1)}return T.createI32(0);case"isArray":I=d(e,r,n,u);return e.currentType=s.Type.bool,I?null!==(R=I.classReference)&&null!==R.lookupOverload(c.OperatorKind.INDEXED_GET)?T.createI32(1):T.createI32(0):T.createUnreachable();case"isDefined":if(e.currentType=s.Type.bool,r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),1!=n.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();var A=e.resolver.resolveExpression(n[0],e.currentFunction,l.ReportMode.SWALLOW);return T.createI32(A?1:0);case"isConstant":if(e.currentType=s.Type.bool,r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),1!=n.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();var C=e.compileExpressionRetainType(n[0],s.Type.i32,0);return e.currentType=s.Type.bool,T.createI32(o.getExpressionId(C)==o.ExpressionId.Const?1:0);case"isManaged":if(!e.program.hasGC)return e.currentType=s.Type.bool,T.createI32(0);I=d(e,r,n,u);return e.currentType=s.Type.bool,I?null===(R=I.classReference)||R.hasDecorator(c.DecoratorFlags.UNMANAGED)?T.createI32(0):T.createI32(1):T.createUnreachable();case"clz":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.i32,0,1);switch(e.currentType.kind){case 0:case 1:case 5:case 6:f=T.createUnary(o.UnaryOp.ClzI32,g);break;case 10:case 2:case 7:f=T.createUnary(o.UnaryOp.ClzI32,g);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}case 4:f=T.createUnary(e.options.isWasm64?o.UnaryOp.ClzI64:o.UnaryOp.ClzI32,g);break;case 3:case 8:f=T.createUnary(o.UnaryOp.ClzI64,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"ctz":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],0,1)}else g=e.compileExpression(n[0],s.Type.i32,0,1);switch(e.currentType.kind){case 0:case 1:case 5:case 6:f=T.createUnary(o.UnaryOp.CtzI32,g);break;case 10:case 2:case 7:f=T.createUnary(o.UnaryOp.CtzI32,g);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}case 4:f=T.createUnary(e.options.isWasm64?o.UnaryOp.CtzI64:o.UnaryOp.CtzI32,g);break;case 3:case 8:f=T.createUnary(o.UnaryOp.CtzI64,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"popcnt":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.i32,0,1);switch(e.currentType.kind){case 0:case 1:case 5:case 6:f=T.createUnary(o.UnaryOp.PopcntI32,g);break;case 10:case 2:case 7:f=T.createUnary(o.UnaryOp.PopcntI32,g);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}case 4:f=T.createUnary(e.options.isWasm64?o.UnaryOp.PopcntI64:o.UnaryOp.PopcntI32,g);break;case 3:case 8:f=T.createUnary(o.UnaryOp.PopcntI64,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"rotl":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.i32,0,1);switch(y=e.compileExpression(n[1],e.currentType,1,0),e.currentType.kind){case 0:case 1:case 5:case 6:case 10:f=e.ensureSmallIntegerWrap(T.createBinary(o.BinaryOp.RotlI32,g,y),e.currentType);case 2:case 7:f=T.createBinary(o.BinaryOp.RotlI32,g,y);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}case 4:f=T.createBinary(e.options.isWasm64?o.BinaryOp.RotlI64:o.BinaryOp.RotlI32,g,y);break;case 3:case 8:f=T.createBinary(o.BinaryOp.RotlI64,g,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"rotr":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.i32,0,1);switch(y=e.compileExpression(n[1],e.currentType,1,0),e.currentType.kind){case 0:case 1:case 5:case 6:case 10:f=e.ensureSmallIntegerWrap(T.createBinary(o.BinaryOp.RotrI32,g,y),e.currentType);break;case 2:case 7:f=T.createBinary(o.BinaryOp.RotrI32,g,y);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}case 4:f=T.createBinary(e.options.isWasm64?o.BinaryOp.RotrI64:o.BinaryOp.RotrI32,g,y);break;case 3:case 8:f=T.createBinary(o.BinaryOp.RotrI64,g,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"abs":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.f64,0,1);switch(e.currentType.kind){case 0:case 1:case 2:var N=e.currentFunction.getAndFreeTempLocal(s.Type.i32,!1);f=T.createSelect(T.createTeeLocal(N.index,g),T.createBinary(o.BinaryOp.SubI32,T.createI32(0),T.createGetLocal(N.index,1)),T.createBinary(o.BinaryOp.GtI32,T.createGetLocal(N.index,1),T.createI32(0)));break;case 4:N=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);f=T.createSelect(T.createTeeLocal(N.index,g),T.createBinary(e.options.isWasm64?o.BinaryOp.SubI64:o.BinaryOp.SubI32,e.options.usizeType.toNativeZero(T),T.createGetLocal(N.index,e.options.nativeSizeType)),T.createBinary(e.options.isWasm64?o.BinaryOp.GtI64:o.BinaryOp.GtI32,T.createGetLocal(N.index,e.options.nativeSizeType),e.options.usizeType.toNativeZero(T)));break;case 3:N=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);f=T.createSelect(T.createTeeLocal(N.index,g),T.createBinary(o.BinaryOp.SubI64,T.createI64(0,0),T.createGetLocal(N.index,2)),T.createBinary(o.BinaryOp.GtI64,T.createGetLocal(N.index,2),T.createI64(0,0)));break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}case 5:case 6:case 7:case 8:case 10:f=g;break;case 11:f=T.createUnary(o.UnaryOp.AbsF32,g);break;case 12:f=T.createUnary(o.UnaryOp.AbsF64,g);break;case 13:f=T.createUnreachable();break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"max":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.f64,0,1);switch(y=e.compileExpression(n[1],e.currentType,1,1),e.currentType.kind){case 0:case 1:case 2:var O=e.currentFunction.flow,S=e.currentFunction.getTempLocal(e.currentType,!O.canOverflow(g,e.currentType)),L=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(y,e.currentType));e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.GtI32,T.createGetLocal(S.index,1),T.createGetLocal(L.index,1)));break;case 5:case 6:case 7:case 10:O=e.currentFunction.flow,S=e.currentFunction.getTempLocal(e.currentType,!O.canOverflow(g,e.currentType)),L=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(y,e.currentType));e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.GtU32,T.createGetLocal(S.index,1),T.createGetLocal(L.index,1)));break;case 3:S=e.currentFunction.getTempLocal(s.Type.i64,!1),L=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.GtI64,T.createGetLocal(S.index,2),T.createGetLocal(L.index,2)));break;case 8:S=e.currentFunction.getTempLocal(s.Type.i64,!1),L=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.GtU64,T.createGetLocal(S.index,2),T.createGetLocal(L.index,2)));break;case 4:S=e.currentFunction.getTempLocal(e.options.usizeType,!1),L=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(e.options.isWasm64?o.BinaryOp.GtI64:o.BinaryOp.GtI32,T.createGetLocal(S.index,e.options.nativeSizeType),T.createGetLocal(L.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}S=e.currentFunction.getTempLocal(e.options.usizeType,!1),L=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(e.options.isWasm64?o.BinaryOp.GtU64:o.BinaryOp.GtU32,T.createGetLocal(S.index,e.options.nativeSizeType),T.createGetLocal(L.index,e.options.nativeSizeType)));break;case 11:f=T.createBinary(o.BinaryOp.MaxF32,g,y);break;case 12:f=T.createBinary(o.BinaryOp.MaxF64,g,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"min":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.f64,0,1);switch(y=e.compileExpression(n[1],e.currentType,1,1),e.currentType.kind){case 0:case 1:case 2:O=e.currentFunction.flow,S=e.currentFunction.getTempLocal(e.currentType,!O.canOverflow(g,e.currentType)),L=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(y,e.currentType));e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.LtI32,T.createGetLocal(S.index,1),T.createGetLocal(L.index,1)));break;case 5:case 6:case 7:case 10:O=e.currentFunction.flow,S=e.currentFunction.getTempLocal(e.currentType,!O.canOverflow(g,e.currentType)),L=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(y,e.currentType));e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.LtU32,T.createGetLocal(S.index,1),T.createGetLocal(L.index,1)));break;case 3:S=e.currentFunction.getTempLocal(s.Type.i64,!1),L=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.LtI64,T.createGetLocal(S.index,2),T.createGetLocal(L.index,2)));break;case 8:S=e.currentFunction.getTempLocal(s.Type.i64,!1),L=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.LtU64,T.createGetLocal(S.index,2),T.createGetLocal(L.index,2)));break;case 4:S=e.currentFunction.getTempLocal(e.options.usizeType,!1),L=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(e.options.isWasm64?o.BinaryOp.LtI64:o.BinaryOp.LtI32,T.createGetLocal(S.index,e.options.nativeSizeType),T.createGetLocal(L.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}S=e.currentFunction.getTempLocal(e.options.usizeType,!1),L=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(e.options.isWasm64?o.BinaryOp.LtU64:o.BinaryOp.LtU32,T.createGetLocal(S.index,e.options.nativeSizeType),T.createGetLocal(L.index,e.options.nativeSizeType)));break;case 11:f=T.createBinary(o.BinaryOp.MinF32,g,y);break;case 12:f=T.createBinary(o.BinaryOp.MinF64,g,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"ceil":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}default:f=g;break;case 11:f=T.createUnary(o.UnaryOp.CeilF32,g);break;case 12:f=T.createUnary(o.UnaryOp.CeilF64,g);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"floor":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}default:f=g;break;case 11:f=T.createUnary(o.UnaryOp.FloorF32,g);break;case 12:f=T.createUnary(o.UnaryOp.FloorF64,g);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"copysign":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpression(n[0],s.Type.f64,0,0);switch(y=e.compileExpression(n[1],e.currentType,1,0),e.currentType.kind){case 11:f=T.createBinary(o.BinaryOp.CopysignF32,g,y);break;case 12:f=T.createBinary(o.BinaryOp.CopysignF64,g,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"nearest":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}default:f=g;break;case 11:f=T.createUnary(o.UnaryOp.NearestF32,g);break;case 12:f=T.createUnary(o.UnaryOp.NearestF64,g);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"reinterpret":if(1!=n.length)return r&&1==r.length||(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0")),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(!r||1!=r.length)return r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),T.createUnreachable();switch(r[0].kind){case 2:case 7:g=e.compileExpression(n[0],s.Type.f32,1,0),f=T.createUnary(o.UnaryOp.ReinterpretF32,g);break;case 3:case 8:g=e.compileExpression(n[0],s.Type.f64,1,0),f=T.createUnary(o.UnaryOp.ReinterpretF64,g);break;case 9:if(r[0].is(256))return e.error(i.DiagnosticCode.Operation_not_supported,u.range),e.currentType=r[0],T.createUnreachable();case 4:g=e.compileExpression(n[0],e.options.isWasm64?s.Type.f64:s.Type.f32,1,0),f=T.createUnary(e.options.isWasm64?o.UnaryOp.ReinterpretF64:o.UnaryOp.ReinterpretF32,g);break;case 11:g=e.compileExpression(n[0],s.Type.i32,1,0),f=T.createUnary(o.UnaryOp.ReinterpretI32,g);break;case 12:g=e.compileExpression(n[0],s.Type.i64,1,0),f=T.createUnary(o.UnaryOp.ReinterpretI64,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return e.currentType=r[0],f;case"sqrt":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 11:f=T.createUnary(o.UnaryOp.SqrtF32,g);break;case 12:f=T.createUnary(o.UnaryOp.SqrtF64,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"trunc":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r&&r.length){if(e.currentType=r[0],1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}default:f=g;break;case 11:f=T.createUnary(o.UnaryOp.TruncF32,g);break;case 12:f=T.createUnary(o.UnaryOp.TruncF64,g);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"load":return n.length<1||n.length>2?(r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),n.length<1?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,u.range,"1",n.length.toString(10)):e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable()):r&&1==r.length?(g=e.compileExpression(n[0],e.options.usizeType,1,0),(x=2==n.length?_(e,n[1]):0)<0?T.createUnreachable():(e.currentType=r[0],T.createLoad(r[0].byteSize,r[0].is(5),g,r[0].is(4)&&p.is(4)&&p.size>r[0].size?(e.currentType=p).toNativeType():(e.currentType=r[0]).toNativeType(),x))):(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),T.createUnreachable());case"store":if(e.currentType=s.Type.void,n.length<2||n.length>3)return r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),n.length<2?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,u.range,"2",n.length.toString(10)):e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"3",n.length.toString(10)),T.createUnreachable();if(!r||1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),T.createUnreachable();g=e.compileExpression(n[0],e.options.usizeType,1,0),y=e.compileExpression(n[1],r[0],r[0].is(4)?0:1,0);I=void 0;return r[0].is(4)&&(!e.currentType.is(4)||e.currentType.size1)return r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(!r||1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),T.createUnreachable();var R;if(!(R=r[0].classReference))return e.error(i.DiagnosticCode.Operation_not_supported,u.range),T.createUnreachable();var x=void 0;if(n.length){if(n[0].kind!=a.NodeKind.LITERAL||n[0].literalKind!=a.LiteralKind.STRING)return e.error(i.DiagnosticCode.String_literal_expected,n[0].range),T.createUnreachable();var F=n[0].value,D=R.members?R.members.get(F):null;if(!D||D.kind!=c.ElementKind.FIELD)return e.error(i.DiagnosticCode.Type_0_has_no_property_1,n[0].range,R.internalName,F),T.createUnreachable();x=D.memoryOffset}else x=R.currentMemoryOffset;return e.options.isWasm64?p.is(4)&&p.size<=32?(e.currentType=s.Type.u32,T.createI32(x)):T.createI64(x):p.is(4)&&64==p.size?(e.currentType=s.Type.u64,T.createI64(x)):T.createI32(x);case"select":if(3!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"3",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpressionRetainType(n[0],s.Type.i32,0);I=e.currentType;switch(y=e.compileExpression(n[1],I,1,0),E=e.makeIsTrueish(e.compileExpressionRetainType(n[2],s.Type.bool,0),e.currentType),e.currentType=I,e.currentType.kind){case 0:case 1:case 5:case 6:case 10:default:f=T.createSelect(g,y,E);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"unreachable":return 0!=n.length&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"0",n.length.toString(10)),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),T.createUnreachable();case"memory.size":return e.currentType=s.Type.i32,0!=n.length&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"0",n.length.toString(10)),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),T.createHost(o.HostOp.CurrentMemory);case"memory.grow":return e.currentType=s.Type.i32,1!=n.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"0",n.length.toString(10)),g=T.createUnreachable()):g=e.compileExpression(n[0],s.Type.i32,1,0),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),T.createHost(o.HostOp.GrowMemory,null,[g]);case"memory.copy":if(r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),3!=n.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"3",n.length.toString(10)),e.currentType=s.Type.void,T.createUnreachable();throw g=e.compileExpression(n[0],e.options.usizeType,1,0),y=e.compileExpression(n[1],e.options.usizeType,1,0),E=e.compileExpression(n[2],e.options.usizeType,1,0),e.currentType=s.Type.void,new Error("not implemented");case"memory.fill":if(r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),3!=n.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"3",n.length.toString(10)),e.currentType=s.Type.void,T.createUnreachable();throw g=e.compileExpression(n[0],e.options.usizeType,1,0),y=e.compileExpression(n[1],s.Type.u32,1,0),E=e.compileExpression(n[2],e.options.usizeType,1,0),e.currentType=s.Type.void,new Error("not implemented");case"changetype":return r&&1==r.length?1!=n.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),e.currentType=r[0],T.createUnreachable()):(g=e.compileExpressionRetainType(n[0],r[0],0),e.currentType=r[0],e.currentType.size!=r[0].size?(e.error(i.DiagnosticCode.Operation_not_supported,u.range),T.createUnreachable()):g):(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),T.createUnreachable());case"assert":if(n.length<1||n.length>2)return r&&(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),n.length<1?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,u.range,"1",n.length.toString(10)):n.length>2&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable();if(r){if(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpressionRetainType(n[0],s.Type.bool,1);I=e.currentType;if(e.currentType=I.nonNullableType,e.options.noAssert)return p==s.Type.void?(e.currentType=s.Type.void,T.createNop()):g;var B=m(e,2==n.length?n[1]:null,u);if(e.currentType=I.nonNullableType,p==s.Type.void){switch(e.currentType.kind){default:f=T.createIf(T.createUnary(o.UnaryOp.EqzI32,g),B);break;case 3:case 8:f=T.createIf(T.createUnary(o.UnaryOp.EqzI64,g),B);break;case 4:case 9:f=T.createIf(T.createUnary(e.options.isWasm64?o.UnaryOp.EqzI64:o.UnaryOp.EqzI32,g),B);break;case 11:f=T.createIf(T.createBinary(o.BinaryOp.EqF32,g,T.createF32(0)),B);break;case 12:f=T.createIf(T.createBinary(o.BinaryOp.EqF64,g,T.createF64(0)),B);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=B}e.currentType=s.Type.void}else switch(e.currentType.kind){case 0:case 1:case 5:case 6:case 10:O=e.currentFunction.flow,N=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(g,e.currentType));f=T.createIf(T.createTeeLocal(N.index,g),T.createGetLocal(N.index,1),B);break;case 2:case 7:default:N=e.currentFunction.getAndFreeTempLocal(s.Type.i32,!1);f=T.createIf(T.createTeeLocal(N.index,g),T.createGetLocal(N.index,1),B);break;case 3:case 8:N=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);f=T.createIf(T.createUnary(o.UnaryOp.EqzI64,T.createTeeLocal(N.index,g)),B,T.createGetLocal(N.index,2));break;case 4:case 9:N=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);f=T.createIf(T.createUnary(e.options.isWasm64?o.UnaryOp.EqzI64:o.UnaryOp.EqzI32,T.createTeeLocal(N.index,g)),B,T.createGetLocal(N.index,e.options.nativeSizeType));break;case 11:N=e.currentFunction.getAndFreeTempLocal(s.Type.f32,!1);f=T.createIf(T.createBinary(o.BinaryOp.EqF32,T.createTeeLocal(N.index,g),T.createF32(0)),B,T.createGetLocal(N.index,3));break;case 12:N=e.currentFunction.getAndFreeTempLocal(s.Type.f64,!1);f=T.createIf(T.createBinary(o.BinaryOp.EqF64,T.createTeeLocal(N.index,g),T.createF64(0)),B,T.createGetLocal(N.index,4));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=B}return f;case"unchecked":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),1!=n.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable()):((O=e.currentFunction.flow).set(4096),f=e.compileExpressionRetainType(n[0],p,0),O.unset(4096),f);case"call_indirect":if(n.length<1)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();var U=void 0;if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();U=r[0]}else U=p;if(g=e.compileExpressionRetainType(n[0],s.Type.u32,0),7!=e.currentType.kind)return e.error(i.DiagnosticCode.Operation_not_supported,n[0].range),T.createUnreachable();for(var P=n.length-1,w=new Array(P),M=new Array(P+1),G=U.toNativeType(),K=new Array(P),z=0;z void"),T.createUnreachable())}var Q=function(e,t,r,n,i){switch(t.internalName){case"i32.clz":return h("clz",e,s.Type.i32,r,s.Type.i32,i);case"i64.clz":return h("clz",e,s.Type.i64,r,s.Type.i64,i);case"i32.ctz":return h("ctz",e,s.Type.i32,r,s.Type.i32,i);case"i64.ctz":return h("ctz",e,s.Type.i64,r,s.Type.i64,i);case"i32.popcnt":return h("popcnt",e,s.Type.i32,r,s.Type.i32,i);case"i64.popcnt":return h("popcnt",e,s.Type.i64,r,s.Type.i64,i);case"i32.rotl":return h("rotl",e,s.Type.i32,r,s.Type.i32,i);case"i64.rotl":return h("rotl",e,s.Type.i64,r,s.Type.i64,i);case"i32.rotr":return h("rotr",e,s.Type.i32,r,s.Type.i32,i);case"i64.rotr":return h("rotr",e,s.Type.i64,r,s.Type.i64,i);case"f32.abs":return h("abs",e,s.Type.f32,r,s.Type.f32,i);case"f64.abs":return h("abs",e,s.Type.f64,r,s.Type.f64,i);case"f32.max":return h("max",e,s.Type.f32,r,s.Type.f32,i);case"f64.max":return h("max",e,s.Type.f64,r,s.Type.f64,i);case"f32.min":return h("min",e,s.Type.f32,r,s.Type.f32,i);case"f64.min":return h("min",e,s.Type.f64,r,s.Type.f64,i);case"f32.ceil":return h("ceil",e,s.Type.f32,r,s.Type.f32,i);case"f64.ceil":return h("ceil",e,s.Type.f64,r,s.Type.f64,i);case"f32.floor":return h("floor",e,s.Type.f32,r,s.Type.f32,i);case"f64.floor":return h("floor",e,s.Type.f64,r,s.Type.f64,i);case"f32.copysign":return h("copysign",e,s.Type.f32,r,s.Type.f32,i);case"f64.copysign":return h("copysign",e,s.Type.f64,r,s.Type.f64,i);case"f32.nearest":return h("nearest",e,s.Type.f32,r,s.Type.f32,i);case"f64.nearest":return h("nearest",e,s.Type.f64,r,s.Type.f64,i);case"i32.reinterpret_f32":return h("reinterpret",e,s.Type.i32,r,s.Type.f32,i);case"i64.reinterpret_f64":return h("reinterpret",e,s.Type.i64,r,s.Type.f64,i);case"f32.reinterpret_i32":return h("reinterpret",e,s.Type.f32,r,s.Type.i32,i);case"f64.reinterpret_i64":return h("reinterpret",e,s.Type.f64,r,s.Type.i64,i);case"f32.sqrt":return h("sqrt",e,s.Type.f32,r,s.Type.f32,i);case"f64.sqrt":return h("sqrt",e,s.Type.f64,r,s.Type.f64,i);case"f32.trunc":return h("trunc",e,s.Type.f32,r,s.Type.f32,i);case"f64.trunc":return h("trunc",e,s.Type.f64,r,s.Type.f64,i);case"i32.load8_s":return h("load",e,s.Type.i8,r,s.Type.i32,i);case"i32.load8_u":return h("load",e,s.Type.u8,r,s.Type.u32,i);case"i32.load16_s":return h("load",e,s.Type.i16,r,s.Type.i32,i);case"i32.load16_u":return h("load",e,s.Type.u16,r,s.Type.u32,i);case"i32.load":return h("load",e,s.Type.i32,r,s.Type.i32,i);case"i64.load8_s":return h("load",e,s.Type.i8,r,s.Type.i64,i);case"i64.load8_u":return h("load",e,s.Type.u8,r,s.Type.u64,i);case"i64.load16_s":return h("load",e,s.Type.i16,r,s.Type.i64,i);case"i64.load16_u":return h("load",e,s.Type.u16,r,s.Type.u64,i);case"i64.load32_s":return h("load",e,s.Type.i32,r,s.Type.i64,i);case"i64.load32_u":return h("load",e,s.Type.u32,r,s.Type.u64,i);case"i64.load":return h("load",e,s.Type.i64,r,s.Type.i64,i);case"f32.load":return h("load",e,s.Type.f32,r,s.Type.f32,i);case"f64.load":return h("load",e,s.Type.f64,r,s.Type.f64,i);case"i32.store8":return h("store",e,s.Type.i8,r,s.Type.i32,i);case"i32.store16":return h("store",e,s.Type.i16,r,s.Type.i32,i);case"i32.store":return h("store",e,s.Type.i32,r,s.Type.i32,i);case"i64.store8":return h("store",e,s.Type.i8,r,s.Type.i64,i);case"i64.store16":return h("store",e,s.Type.i16,r,s.Type.i64,i);case"i64.store32":return h("store",e,s.Type.i32,r,s.Type.i64,i);case"i64.store":return h("store",e,s.Type.i64,r,s.Type.i64,i);case"f32.store":return h("store",e,s.Type.f32,r,s.Type.f32,i);case"f64.store":return h("store",e,s.Type.f64,r,s.Type.f64,i)}return 0}(e,t,n,0,u);return Q?(r&&r.length&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),Q):(e.error(i.DiagnosticCode.Operation_not_supported,u.range),T.createUnreachable())}function h(e,t,r,n,i,a){var s=assert(t.program.elementsLookup.get(e));return assert(s.kind==c.ElementKind.FUNCTION_PROTOTYPE),u(t,s,[r],n,i,a)}function d(e,t,r,n){if(0==r.length)return t&&1==t.length?t[0]:(e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,"1",t?t.length.toString(10):"0"),null);if(1==r.length){if(t)if(1==t.length)e.compileExpression(r[0],t[0],1,0);else{if(t.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,"1",t.length.toString(10)),null;e.compileExpressionRetainType(r[0],s.Type.i32,0)}else e.compileExpressionRetainType(r[0],s.Type.i32,0);return e.currentType}return t&&t.length>1&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,"1",t.length.toString(10)),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,"1",r.length.toString(10)),null}function _(e,t){var r,n;return e.options.isWasm64?(r=e.precomputeExpression(t,s.Type.usize64,1,0),(o.getExpressionId(r)!=o.ExpressionId.Const||2!=o.getExpressionType(r)||0!=o.getConstValueI64High(r)||(n=o.getConstValueI64Low(r))<0)&&(e.error(i.DiagnosticCode.Operation_not_supported,t.range),n=-1)):(r=e.precomputeExpression(t,s.Type.usize32,1,0),(o.getExpressionId(r)!=o.ExpressionId.Const||1!=o.getExpressionType(r)||(n=o.getConstValueI32(r))<0)&&(e.error(i.DiagnosticCode.Operation_not_supported,t.range),n=-1)),n}function m(e,t,r){var n=e.program,i=e.module,a=n.typesLookup.get("string");if(!a)return i.createUnreachable();var o=n.abortInstance;if(!o||!e.compileFunction(o))return i.createUnreachable();var c=null!=t?e.compileExpression(t,a,1,0):a.toNativeZero(i),l=e.ensureStaticString(r.range.source.normalizedPath);return e.currentType=s.Type.void,i.createBlock(null,[i.createCall(o.internalName,[c,l,i.createI32(r.range.line),i.createI32(r.range.column)],0),i.createUnreachable()])}function g(e,t){var r,i,a=e.program;assert(t.type.isManaged(a));var l=t.gcHookIndex;if(-1!=l)return l;var u=t.members;if(t.prototype.declaration.range.source.isLibrary&&null!==u&&u.has("__gc")){var h=assert(u.get("__gc"));assert(h.kind==c.ElementKind.FUNCTION_PROTOTYPE);var d=assert(a.resolver.resolveFunction(h,null));assert(d.is(p.CommonFlags.PRIVATE|p.CommonFlags.INSTANCE)),assert(!d.isAny(p.CommonFlags.AMBIENT|p.CommonFlags.VIRTUAL)),assert(0==d.signature.parameterTypes.length),assert(d.signature.returnType==s.Type.void),d.internalName=t.internalName+"~gc",assert(e.compileFunction(d));var _=e.ensureFunctionTableEntry(d);return t.gcHookIndex=_,_}var m=e.module,y=e.options,E=y.nativeSizeType,f=y.usizeType.byteSize,T=new Array;T.push(m.createIf(m.createUnary(y.isWasm64?o.UnaryOp.EqzI64:o.UnaryOp.EqzI32,m.createGetLocal(0,E)),m.createReturn()));var I=e.functionTable,v=I.length;I.push(""),t.gcHookIndex=v;var A=t.base;if(A?(assert(A.type.isManaged(a)),T.push(m.createCallIndirect(m.createI32(g(e,A.type.classReference)),[m.createGetLocal(0,E)],2==E?"Iv":"iv"))):T.push(m.createCall(assert(a.gcMarkInstance).internalName,[m.createGetLocal(0,E)],0)),u)try{for(var C=n(u.values()),N=C.next();!N.done;N=C.next()){var O=N.value;if(O.kind==c.ElementKind.FIELD)if(O.parent===t)if(O.type.isManaged(a)){var S=O.memoryOffset;assert(S>=0),T.push(m.createCall(assert(a.gcMarkInstance).internalName,[m.createLoad(f,!1,m.createGetLocal(0,E),E,S)],0))}}}catch(e){r={error:e}}finally{try{N&&!N.done&&(i=C.return)&&i.call(C)}finally{if(r)throw r.error}}var L=t.internalName+"~gc";return m.addFunction(L,e.ensureFunctionType(null,s.Type.void,y.usizeType),null,m.createBlock(null,T)),I[v]=L,v}t.compileCall=u,t.compileAllocate=function(e,t,r){var n=e.program;assert(t.program==n);var a=e.module,s=e.options;if(n.hasGC&&t.type.isManaged(n)){var o=assert(n.gcAllocateInstance);return e.compileFunction(o)?(e.currentType=t.type,a.createCall(o.internalName,[s.isWasm64?a.createI64(t.currentMemoryOffset):a.createI32(t.currentMemoryOffset),a.createI32(g(e,t))],s.nativeSizeType)):a.createUnreachable()}return(o=n.memoryAllocateInstance)?e.compileFunction(o)?(e.currentType=t.type,a.createCall(o.internalName,[s.isWasm64?a.createI64(t.currentMemoryOffset):a.createI32(t.currentMemoryOffset)],s.nativeSizeType)):a.createUnreachable():(n.error(i.DiagnosticCode.Cannot_find_name_0,r.range,"memory.allocate"),a.createUnreachable())},t.compileAbort=m,t.compileIterateRoots=function(e){var t,r,i=e.module,a=new Array;try{for(var o=n(e.program.elementsLookup.values()),l=o.next();!l.done;l=o.next()){var u=l.value;if(u.kind==c.ElementKind.GLOBAL){var h=u,d=h.type.classReference;if(h.is(p.CommonFlags.COMPILED)&&null!==d&&!d.hasDecorator(c.DecoratorFlags.UNMANAGED))if(h.is(p.CommonFlags.INLINED)){var _=h.constantIntegerValue;a.push(i.createCallIndirect(i.createGetLocal(0,1),[e.options.isWasm64?i.createI64(i64_low(_),i64_high(_)):i.createI32(i64_low(_))],"iv"))}else a.push(i.createCallIndirect(i.createGetLocal(0,1),[i.createGetGlobal(h.internalName,e.options.nativeSizeType)],"iv"))}}}catch(e){t={error:e}}finally{try{l&&!l.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}var m=e.ensureFunctionType([s.Type.i32],s.Type.void);i.addFunction("~iterateRoots",m,[],a.length?i.createBlock(null,a):i.createNop())},t.ensureGCHook=g},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.NULL=0]="NULL",e[e.LINEFEED=10]="LINEFEED",e[e.CARRIAGERETURN=13]="CARRIAGERETURN",e[e.LINESEPARATOR=8232]="LINESEPARATOR",e[e.PARAGRAPHSEPARATOR=8233]="PARAGRAPHSEPARATOR",e[e.NEXTLINE=133]="NEXTLINE",e[e.SPACE=32]="SPACE",e[e.NONBREAKINGSPACE=160]="NONBREAKINGSPACE",e[e.ENQUAD=8192]="ENQUAD",e[e.EMQUAD=8193]="EMQUAD",e[e.ENSPACE=8194]="ENSPACE",e[e.EMSPACE=8195]="EMSPACE",e[e.THREEPEREMSPACE=8196]="THREEPEREMSPACE",e[e.FOURPEREMSPACE=8197]="FOURPEREMSPACE",e[e.SIXPEREMSPACE=8198]="SIXPEREMSPACE",e[e.FIGURESPACE=8199]="FIGURESPACE",e[e.PUNCTUATIONSPACE=8200]="PUNCTUATIONSPACE",e[e.THINSPACE=8201]="THINSPACE",e[e.HAIRSPACE=8202]="HAIRSPACE",e[e.ZEROWIDTHSPACE=8203]="ZEROWIDTHSPACE",e[e.NARROWNOBREAKSPACE=8239]="NARROWNOBREAKSPACE",e[e.IDEOGRAPHICSPACE=12288]="IDEOGRAPHICSPACE",e[e.MATHEMATICALSPACE=8287]="MATHEMATICALSPACE",e[e.OGHAM=5760]="OGHAM",e[e._=95]="_",e[e._0=48]="_0",e[e._1=49]="_1",e[e._2=50]="_2",e[e._3=51]="_3",e[e._4=52]="_4",e[e._5=53]="_5",e[e._6=54]="_6",e[e._7=55]="_7",e[e._8=56]="_8",e[e._9=57]="_9",e[e.a=97]="a",e[e.b=98]="b",e[e.c=99]="c",e[e.d=100]="d",e[e.e=101]="e",e[e.f=102]="f",e[e.g=103]="g",e[e.h=104]="h",e[e.i=105]="i",e[e.j=106]="j",e[e.k=107]="k",e[e.l=108]="l",e[e.m=109]="m",e[e.n=110]="n",e[e.o=111]="o",e[e.p=112]="p",e[e.q=113]="q",e[e.r=114]="r",e[e.s=115]="s",e[e.t=116]="t",e[e.u=117]="u",e[e.v=118]="v",e[e.w=119]="w",e[e.x=120]="x",e[e.y=121]="y",e[e.z=122]="z",e[e.A=65]="A",e[e.B=66]="B",e[e.C=67]="C",e[e.D=68]="D",e[e.E=69]="E",e[e.F=70]="F",e[e.G=71]="G",e[e.H=72]="H",e[e.I=73]="I",e[e.J=74]="J",e[e.K=75]="K",e[e.L=76]="L",e[e.M=77]="M",e[e.N=78]="N",e[e.O=79]="O",e[e.P=80]="P",e[e.Q=81]="Q",e[e.R=82]="R",e[e.S=83]="S",e[e.T=84]="T",e[e.U=85]="U",e[e.V=86]="V",e[e.W=87]="W",e[e.X=88]="X",e[e.Y=89]="Y",e[e.Z=90]="Z",e[e.AMPERSAND=38]="AMPERSAND",e[e.ASTERISK=42]="ASTERISK",e[e.AT=64]="AT",e[e.BACKSLASH=92]="BACKSLASH",e[e.BACKTICK=96]="BACKTICK",e[e.BAR=124]="BAR",e[e.CARET=94]="CARET",e[e.CLOSEBRACE=125]="CLOSEBRACE",e[e.CLOSEBRACKET=93]="CLOSEBRACKET",e[e.CLOSEPAREN=41]="CLOSEPAREN",e[e.COLON=58]="COLON",e[e.COMMA=44]="COMMA",e[e.DOLLAR=36]="DOLLAR",e[e.DOT=46]="DOT",e[e.DOUBLEQUOTE=34]="DOUBLEQUOTE",e[e.EQUALS=61]="EQUALS",e[e.EXCLAMATION=33]="EXCLAMATION",e[e.GREATERTHAN=62]="GREATERTHAN",e[e.HASH=35]="HASH",e[e.LESSTHAN=60]="LESSTHAN",e[e.MINUS=45]="MINUS",e[e.OPENBRACE=123]="OPENBRACE",e[e.OPENBRACKET=91]="OPENBRACKET",e[e.OPENPAREN=40]="OPENPAREN",e[e.PERCENT=37]="PERCENT",e[e.PLUS=43]="PLUS",e[e.QUESTION=63]="QUESTION",e[e.SEMICOLON=59]="SEMICOLON",e[e.SINGLEQUOTE=39]="SINGLEQUOTE",e[e.SLASH=47]="SLASH",e[e.TILDE=126]="TILDE",e[e.BACKSPACE=8]="BACKSPACE",e[e.FORMFEED=12]="FORMFEED",e[e.BYTEORDERMARK=65279]="BYTEORDERMARK",e[e.TAB=9]="TAB",e[e.VERTICALTAB=11]="VERTICALTAB"}(t.CharCode||(t.CharCode={})),t.isLineBreak=function(e){switch(e){case 10:case 13:case 8232:case 8233:return!0;default:return!1}},t.isWhiteSpace=function(e){switch(e){case 32:case 9:case 11:case 12:case 160:case 133:case 5760:case 8239:case 8287:case 12288:case 65279:return!0;default:return e>=8192&&e<=8203}},t.isDecimalDigit=function(e){return e>=48&&e<=57},t.isOctalDigit=function(e){return e>=48&&e<=55},t.isIdentifierStart=function(e){return e>=65&&e<=90||e>=97&&e<=122||36==e||95==e||e>127&&function(e){return!(e<0||e>65535)&&a(e,n)}(e)},t.isKeywordCharacter=function(e){return e>=97&&e<=122},t.isIdentifierPart=function(e){return e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||36==e||95==e||e>127&&function(e){return!(e<0||e>65535)&&a(e,i)}(e)};var n=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,880,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1162,1319,1329,1366,1369,1369,1377,1415,1488,1514,1520,1522,1568,1610,1646,1647,1649,1747,1749,1749,1765,1766,1774,1775,1786,1788,1791,1791,1808,1808,1810,1839,1869,1957,1969,1969,1994,2026,2036,2037,2042,2042,2048,2069,2074,2074,2084,2084,2088,2088,2112,2136,2208,2208,2210,2220,2308,2361,2365,2365,2384,2384,2392,2401,2417,2423,2425,2431,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2493,2493,2510,2510,2524,2525,2527,2529,2544,2545,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2649,2652,2654,2654,2674,2676,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2749,2749,2768,2768,2784,2785,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2877,2877,2908,2909,2911,2913,2929,2929,2947,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3024,3024,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3133,3160,3161,3168,3169,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3261,3261,3294,3294,3296,3297,3313,3314,3333,3340,3342,3344,3346,3386,3389,3389,3406,3406,3424,3425,3450,3455,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3585,3632,3634,3635,3648,3654,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3760,3762,3763,3773,3773,3776,3780,3782,3782,3804,3807,3840,3840,3904,3911,3913,3948,3976,3980,4096,4138,4159,4159,4176,4181,4186,4189,4193,4193,4197,4198,4206,4208,4213,4225,4238,4238,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5905,5920,5937,5952,5969,5984,5996,5998,6e3,6016,6067,6103,6103,6108,6108,6176,6263,6272,6312,6314,6314,6320,6389,6400,6428,6480,6509,6512,6516,6528,6571,6593,6599,6656,6678,6688,6740,6823,6823,6917,6963,6981,6987,7043,7072,7086,7087,7098,7141,7168,7203,7245,7247,7258,7293,7401,7404,7406,7409,7413,7414,7424,7615,7680,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8305,8305,8319,8319,8336,8348,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11502,11506,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11648,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11823,11823,12293,12295,12321,12329,12337,12341,12344,12348,12353,12438,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42527,42538,42539,42560,42606,42623,42647,42656,42735,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43009,43011,43013,43015,43018,43020,43042,43072,43123,43138,43187,43250,43255,43259,43259,43274,43301,43312,43334,43360,43388,43396,43442,43471,43471,43520,43560,43584,43586,43588,43595,43616,43638,43642,43642,43648,43695,43697,43697,43701,43702,43705,43709,43712,43712,43714,43714,43739,43741,43744,43754,43762,43764,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44002,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64285,64287,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65136,65140,65142,65276,65313,65338,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500],i=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,768,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1155,1159,1162,1319,1329,1366,1369,1369,1377,1415,1425,1469,1471,1471,1473,1474,1476,1477,1479,1479,1488,1514,1520,1522,1552,1562,1568,1641,1646,1747,1749,1756,1759,1768,1770,1788,1791,1791,1808,1866,1869,1969,1984,2037,2042,2042,2048,2093,2112,2139,2208,2208,2210,2220,2276,2302,2304,2403,2406,2415,2417,2423,2425,2431,2433,2435,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2492,2500,2503,2504,2507,2510,2519,2519,2524,2525,2527,2531,2534,2545,2561,2563,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2620,2620,2622,2626,2631,2632,2635,2637,2641,2641,2649,2652,2654,2654,2662,2677,2689,2691,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2748,2757,2759,2761,2763,2765,2768,2768,2784,2787,2790,2799,2817,2819,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2876,2884,2887,2888,2891,2893,2902,2903,2908,2909,2911,2915,2918,2927,2929,2929,2946,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3006,3010,3014,3016,3018,3021,3024,3024,3031,3031,3046,3055,3073,3075,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3140,3142,3144,3146,3149,3157,3158,3160,3161,3168,3171,3174,3183,3202,3203,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3260,3268,3270,3272,3274,3277,3285,3286,3294,3294,3296,3299,3302,3311,3313,3314,3330,3331,3333,3340,3342,3344,3346,3386,3389,3396,3398,3400,3402,3406,3415,3415,3424,3427,3430,3439,3450,3455,3458,3459,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3530,3530,3535,3540,3542,3542,3544,3551,3570,3571,3585,3642,3648,3662,3664,3673,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3769,3771,3773,3776,3780,3782,3782,3784,3789,3792,3801,3804,3807,3840,3840,3864,3865,3872,3881,3893,3893,3895,3895,3897,3897,3902,3911,3913,3948,3953,3972,3974,3991,3993,4028,4038,4038,4096,4169,4176,4253,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4957,4959,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5908,5920,5940,5952,5971,5984,5996,5998,6e3,6002,6003,6016,6099,6103,6103,6108,6109,6112,6121,6155,6157,6160,6169,6176,6263,6272,6314,6320,6389,6400,6428,6432,6443,6448,6459,6470,6509,6512,6516,6528,6571,6576,6601,6608,6617,6656,6683,6688,6750,6752,6780,6783,6793,6800,6809,6823,6823,6912,6987,6992,7001,7019,7027,7040,7155,7168,7223,7232,7241,7245,7293,7376,7378,7380,7414,7424,7654,7676,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8204,8205,8255,8256,8276,8276,8305,8305,8319,8319,8336,8348,8400,8412,8417,8417,8421,8432,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11647,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11744,11775,11823,11823,12293,12295,12321,12335,12337,12341,12344,12348,12353,12438,12441,12442,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42539,42560,42607,42612,42621,42623,42647,42655,42737,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43047,43072,43123,43136,43204,43216,43225,43232,43255,43259,43259,43264,43309,43312,43347,43360,43388,43392,43456,43471,43481,43520,43574,43584,43597,43600,43609,43616,43638,43642,43643,43648,43714,43739,43741,43744,43759,43762,43766,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44010,44012,44013,44016,44025,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65024,65039,65056,65062,65075,65076,65101,65103,65136,65140,65142,65276,65296,65305,65313,65338,65343,65343,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500];function a(e,t){if(e0||i=0;)if(e.charCodeAt(a)==n){r-a==3&&46==e.charCodeAt(a+1)&&46==e.charCodeAt(a+2)||(e=t?e.substring(0,a):e.substring(0,a)+e.substring(r+3),i-=r+3-a,r=a-1);break}if(a<0&&r>0&&(2!=r||46!=e.charCodeAt(0)||46!=e.charCodeAt(1))){i=(e=e.substring(r+4)).length;continue}}}r++}return i>0?e:"."}function a(e){for(var t=e.length;--t>0;)if(e.charCodeAt(t)==n)return e.substring(0,t);return"."}t.normalizePath=i,t.resolvePath=function(e,t){return e.startsWith("std/")?e:i(a(t)+String.fromCharCode(n)+e)},t.dirname=a},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=" ",i=" ",a=" ";t.indent=function(e,t){for(;t>=4;)e.push(a),t-=4;t>=2&&(e.push(i),t-=2),t&&e.push(n)}},function(e,t,r){"use strict";function n(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24}function i(e,t,r){t[r]=e,t[r+1]=e>>>8,t[r+2]=e>>>16,t[r+3]=e>>>24}function a(e,t){var r=n(e,t),i=n(e,t+4);return i64_new(r,i)}Object.defineProperty(t,"__esModule",{value:!0}),t.readI8=function(e,t){return e[t]},t.writeI8=function(e,t,r){t[r]=e},t.readI16=function(e,t){return e[t]|e[t+1]<<8},t.writeI16=function(e,t,r){t[r]=e,t[r+1]=e>>>8},t.readI32=n,t.writeI32=i,t.readI64=a,t.writeI64=function(e,t,r){i(i64_low(e),t,r),i(i64_high(e),t,r+4)},t.readF32=function(e,t){return i32_as_f32(n(e,t))},t.writeF32=function(e,t,r){i(f32_as_i32(e),t,r)},t.readF64=function(e,t){return i64_as_f64(a(e,t))},t.writeF64=function(e,t,r){var n=f64_as_i64(e);i(i64_low(n),t,r),i(i64_high(n),t,r+4)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(9),i=r(26),a=r(27),s=r(1);t.formatDiagnostic=s.formatDiagnosticMessage;var o=r(28);t.parseFile=function(e,t,r,n){return void 0===r&&(r=!1),void 0===n&&(n=null),n||(n=new o.Parser),n.parseFile(e,t,r),n},t.nextFile=function(e){return e.nextFile()},t.nextDiagnostic=function(e){var t=e.program;return t.diagnosticsOffset0&&this.push(", "),this.push("$"),this.push(i.toString(10)),this.push(": "),this.push(a(n.getFunctionParamType(e,i)));this.push("): "),this.push(a(n.getFunctionResultType(e))),this.push(" "),n.getExpressionId(r)!=n.ExpressionId.Block&&this.push("{\n"),this.decompileExpression(r),n.getExpressionId(r)!=n.ExpressionId.Block&&this.push("\n}\n"),++this.functionId},e.prototype.decompileExpression=function(e){var t,r,i,s,o=n.getExpressionId(e),c=n.getExpressionType(e);switch(o){case n.ExpressionId.Block:for(null!=(r=n.getBlockName(e))&&(this.push(r),this.push(": ")),this.push("{\n"),s=n.getBlockChildCount(e),i=0;i("),this.push(n.getLoadOffset(e).toString(10)),this.push(" + "),this.decompileExpression(n.getLoadPtr(e)),void this.push(")");case n.ExpressionId.Store:return this.push("store<"),this.push(a(c)),this.push(">("),this.push(n.getStoreOffset(e).toString(10)),this.push(" + "),this.decompileExpression(n.getStorePtr(e)),this.push(", "),this.decompileExpression(n.getStoreValue(e)),void this.push(")");case n.ExpressionId.Const:switch(c){case 1:return void this.push(n.getConstValueI32(e).toString(10));case 2:return void this.push(i64_to_string(i64_new(n.getConstValueI64Low(e),n.getConstValueI64High(e))));case 3:return void this.push(n.getConstValueF32(e).toString(10));case 4:return void this.push(n.getConstValueF64(e).toString(10))}break;case n.ExpressionId.Unary:switch(n.getUnaryOp(e)){case n.UnaryOp.ClzI32:return this.push("clz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CtzI32:return this.push("ctz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.PopcntI32:return this.push("popcnt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NegF32:case n.UnaryOp.NegF64:return this.push("-"),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.AbsF32:return this.push("abs("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CeilF32:return this.push("ceil("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.FloorF32:return this.push("floor("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.TruncF32:return this.push("trunc("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NearestF32:return this.push("nearest("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.SqrtF32:return this.push("sqrt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.EqzI32:case n.UnaryOp.EqzI64:return this.push("!"),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ClzI64:return this.push("clz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CtzI64:return this.push("ctz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.PopcntI64:return this.push("popcnt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.AbsF64:return this.push("abs("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CeilF64:return this.push("ceil("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.FloorF64:return this.push("floor("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.TruncF64:return this.push("trunc("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NearestF64:return this.push("nearest("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.SqrtF64:return this.push("sqrt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ExtendI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ExtendU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.WrapI64:case n.UnaryOp.TruncF32ToI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToI64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToU64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToI64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToU64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ReinterpretF32:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ReinterpretF64:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ConvertI32ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI32ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU32ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU32ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI64ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI64ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU64ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU64ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.PromoteF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.DemoteF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ReinterpretI32:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ReinterpretI64:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")")}break;case n.ExpressionId.Binary:switch(n.getBinaryOp(e)){case n.BinaryOp.AddI32:case n.BinaryOp.AddI64:case n.BinaryOp.AddF32:case n.BinaryOp.AddF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" + "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.SubI32:case n.BinaryOp.SubI64:case n.BinaryOp.SubF32:case n.BinaryOp.SubF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" - "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.MulI32:case n.BinaryOp.MulI64:case n.BinaryOp.MulF32:case n.BinaryOp.MulF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" * "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivI32:case n.BinaryOp.DivI64:case n.BinaryOp.DivF32:case n.BinaryOp.DivF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivU32:return this.push("("),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RemI32:case n.BinaryOp.RemI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" % "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RemU32:return this.push("("),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.AndI32:case n.BinaryOp.AndI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" & "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.OrI32:case n.BinaryOp.OrI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" | "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.XorI32:case n.BinaryOp.XorI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" ^ "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShlI32:case n.BinaryOp.ShlI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" << "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShrU32:case n.BinaryOp.ShrU64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >>> "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShrI32:case n.BinaryOp.ShrI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >> "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RotlI32:return this.push("rotl("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RotrI32:return this.push("rotr("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.EqI32:case n.BinaryOp.EqI64:case n.BinaryOp.EqF32:case n.BinaryOp.EqF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" == "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.NeI32:case n.BinaryOp.NeI64:case n.BinaryOp.NeF32:case n.BinaryOp.NeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" != "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LtI32:case n.BinaryOp.LtI64:case n.BinaryOp.LtF32:case n.BinaryOp.LtF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LtU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeI32:case n.BinaryOp.LeI64:case n.BinaryOp.LeF32:case n.BinaryOp.LeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtI32:case n.BinaryOp.GtI64:case n.BinaryOp.GtF32:case n.BinaryOp.GtF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeI32:case n.BinaryOp.GeI64:case n.BinaryOp.GeF32:case n.BinaryOp.GeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RemU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" % "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RotlI64:return this.push("rotl("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RotrI64:return this.push("rotr("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.LtU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.CopysignF32:return this.push("copysign("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MinF32:return this.push("min("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MaxF32:return this.push("max("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.CopysignF64:return this.push("copysign("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MinF64:return this.push("min("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MaxF64:return this.push("max("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")")}return;case n.ExpressionId.Select:return this.push("select<"),this.push(a(c)),this.push(">("),this.decompileExpression(n.getSelectThen(e)),this.push(", "),this.decompileExpression(n.getSelectElse(e)),this.push(", "),this.decompileExpression(n.getSelectCondition(e)),void this.push(")");case n.ExpressionId.Drop:return this.decompileExpression(n.getDropValue(e)),void this.push(";\n");case n.ExpressionId.Return:return void((t=n.getReturnValue(e))?(this.push("return "),this.decompileExpression(t),this.push(";\n")):this.push("return;\n"));case n.ExpressionId.Host:switch(n.getHostOp(e)){case n.HostOp.CurrentMemory:return void this.push("memory.size()");case n.HostOp.GrowMemory:return this.push("memory.grow("),this.decompileExpression(n.getHostOperand(e,0)),void this.push(")")}break;case n.ExpressionId.Nop:return void this.push(";\n");case n.ExpressionId.Unreachable:return void this.push("unreachable()");case n.ExpressionId.AtomicCmpxchg:case n.ExpressionId.AtomicRMW:case n.ExpressionId.AtomicWait:case n.ExpressionId.AtomicWake:}throw new Error("not implemented")},e.prototype.push=function(e){this.text.push(e)},e.prototype.finish=function(){var e=this.text.join("");return this.text=[],e},e}();function a(e){switch(e){case 0:return"void";case 1:return"i32";case 2:return"i64";case 3:return"f32";case 4:return"f64";case 5:throw new Error("unreachable type");case-1:throw new Error("auto type");default:throw new Error("unexpected type")}}t.Decompiler=i},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(t,r)};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),i=this&&this.__values||function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],r=0;return t?t.call(e):{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)s.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return s};Object.defineProperty(t,"__esModule",{value:!0});var s=r(0),o=r(4),c=r(2),l=function(){function e(e,t){void 0===t&&(t=!1),this.todo=[],this.seen=new Set,this.program=e,this.includePrivate}return e.prototype.walk=function(){var e,t;try{for(var r=i(this.program.moduleLevelExports.values()),n=r.next();!n.done;n=r.next()){var a=n.value;this.visitElement(a.element)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}for(var s=this.todo;0"),null}if(e.skip(s.Token.BAR)){if(!e.skip(s.Token.NULL))return r||this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"null"),null;_=!0}n=l.Node.createType(h,d,_,e.range(a,e.pos))}for(;e.skip(s.Token.OPENBRACKET);){var g=e.tokenPos;if(!e.skip(s.Token.CLOSEBRACKET))return r||this.error(o.DiagnosticCode._0_expected,e.range(),"]"),null;var y=e.range(g,e.pos);_=!1;if(e.skip(s.Token.BAR)){if(!e.skip(s.Token.NULL))return r||this.error(o.DiagnosticCode._0_expected,e.range(),"null"),null;_=!0}if(n=l.Node.createType(l.Node.createIdentifierExpression("Array",y),[n],_,e.range(a,e.pos)),_)break}return n},t.prototype.tryParseSignature=function(e){var t,r=e.mark(),n=e.tokenPos,i=null,a=null,c=!1;if(e.skip(s.Token.CLOSEPAREN))c=!0,e.discard(r),i=[];else{c=!1;do{var p=l.ParameterKind.DEFAULT;if(e.skip(s.Token.DOT_DOT_DOT)&&(c=!0,e.discard(r),p=l.ParameterKind.REST),e.skip(s.Token.THIS)){if(!e.skip(s.Token.COLON))return e.reset(r),this.tryParseSignatureIsSignature=!1,null;c=!0,e.discard(r);var u=this.parseType(e,!1);if(!u)return null;if(u.kind!=l.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,u.range),this.tryParseSignatureIsSignature=!0,null;a=u}else{if(!e.skipIdentifier())return c?this.error(o.DiagnosticCode.Identifier_expected,e.range()):e.reset(r),this.tryParseSignatureIsSignature=c,null;var h=l.Node.createIdentifierExpression(e.readIdentifier(),e.range(e.tokenPos,e.pos));if(e.skip(s.Token.QUESTION)&&(c=!0,e.discard(r),p==l.ParameterKind.REST?this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,e.range()):p=l.ParameterKind.OPTIONAL),e.skip(s.Token.COLON)){c=!0,e.discard(r);var d=this.parseType(e);if(!d)return this.tryParseSignatureIsSignature=c,null;var _=new l.ParameterNode;_.parameterKind=p,_.name=h,_.type=d,i?i.push(_):i=[_]}else c&&this.error(o.DiagnosticCode.Type_expected,e.range())}}while(e.skip(s.Token.COMMA));if(!e.skip(s.Token.CLOSEPAREN))return c?this.error(o.DiagnosticCode._0_expected,e.range(),")"):e.reset(r),this.tryParseSignatureIsSignature=c,null}return e.skip(s.Token.EQUALS_GREATERTHAN)?(c=!0,e.discard(r),(t=this.parseType(e))?(this.tryParseSignatureIsSignature=!0,l.Node.createSignature(i||[],t,a,!1,e.range(n,e.pos))):(this.tryParseSignatureIsSignature=c,null)):(c?this.error(o.DiagnosticCode._0_expected,e.range(),"=>"):e.reset(r),this.tryParseSignatureIsSignature=c,null)},t.prototype.parseDecorator=function(e){var t=e.tokenPos;if(e.skipIdentifier()){for(var r=e.readIdentifier(),n=l.Node.createIdentifierExpression(r,e.range(t,e.pos));e.skip(s.Token.DOT);){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;r=e.readIdentifier(),n=l.Node.createPropertyAccessExpression(n,l.Node.createIdentifierExpression(r,e.range()),e.range(t,e.pos))}var i=void 0;if(!e.skip(s.Token.OPENPAREN))return l.Node.createDecorator(n,null,e.range(t,e.pos));if(i=this.parseArguments(e))return l.Node.createDecorator(n,i,e.range(t,e.pos))}else this.error(o.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseVariable=function(e,t,r,n){var i=new Array;do{var a=this.parseVariableDeclaration(e,t,r);if(!a)return null;i.push(a)}while(e.skip(s.Token.COMMA));var o=l.Node.createVariableStatement(i,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),o},t.prototype.parseVariableDeclaration=function(e,t,r){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var n=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),a=t;e.skip(s.Token.EXCLAMATION)&&(a|=i.CommonFlags.DEFINITE_ASSIGNMENT);var c=null;e.skip(s.Token.COLON)&&(c=this.parseType(e));var p=null;if(e.skip(s.Token.EQUALS)){if(a&i.CommonFlags.AMBIENT&&this.error(o.DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,e.range()),!(p=this.parseExpression(e,2)))return null}else a&i.CommonFlags.CONST?a&i.CommonFlags.AMBIENT||this.error(o.DiagnosticCode._const_declarations_must_be_initialized,n.range):c||this.error(o.DiagnosticCode.Type_expected,e.range(e.pos));var u=s.Range.join(n.range,e.range());return a&i.CommonFlags.DEFINITE_ASSIGNMENT&&p&&this.error(o.DiagnosticCode.A_definite_assignment_assertion_is_not_permitted_in_this_context,u),l.Node.createVariableDeclaration(n,c,p,r,a,u)},t.prototype.parseEnum=function(e,t,r,n){if(e.next()!=s.Token.IDENTIFIER)return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var a=l.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.next()!=s.Token.OPENBRACE)return this.error(o.DiagnosticCode._0_expected,e.range(),"{"),null;for(var c=new Array;!e.skip(s.Token.CLOSEBRACE);){var p=this.parseEnumValue(e,i.CommonFlags.NONE);if(!p)return null;if(c.push(p),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEBRACE))break;return this.error(o.DiagnosticCode._0_expected,e.range(),"}"),null}}var u=l.Node.createEnumDeclaration(a,c,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),u},t.prototype.parseEnumValue=function(e,t){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var r=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),n=null;return e.skip(s.Token.EQUALS)&&!(n=this.parseExpression(e,2))?null:l.Node.createEnumValueDeclaration(r,n,t,s.Range.join(r.range,e.range()))},t.prototype.parseReturn=function(e){var t=null;if(e.peek(!0)!=s.Token.SEMICOLON&&e.nextToken!=s.Token.CLOSEBRACE&&!e.nextTokenOnNewLine&&!(t=this.parseExpression(e)))return null;var r=l.Node.createReturnStatement(t,e.range());return e.skip(s.Token.SEMICOLON),r},t.prototype.parseTypeParameters=function(e){for(var t=new Array;!e.skip(s.Token.GREATERTHAN);){var r=this.parseTypeParameter(e);if(!r)return null;if(t.push(r),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.GREATERTHAN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),">"),null}}return 0===t.length&&this.error(o.DiagnosticCode.Type_parameter_list_cannot_be_empty,e.range()),t},t.prototype.parseTypeParameter=function(e){if(e.next()==s.Token.IDENTIFIER){var t=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(s.Token.EXTENDS)){var n=this.parseType(e);if(!n)return null;if(n.kind!=l.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,n.range),null;r=n}return l.Node.createTypeParameter(t,r,s.Range.join(t.range,e.range()))}return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseParameters=function(e,t){void 0===t&&(t=!1);var r=new Array,n=null,i=!1,a=!1,c=null;if(this.parseParametersThis=null,e.skip(s.Token.THIS)){if(!e.skip(s.Token.COLON))return this.error(o.DiagnosticCode._0_expected,e.range(),":"),null;if(!(c=this.parseType(e)))return null;if(c.kind==l.NodeKind.TYPE?this.parseParametersThis=c:this.error(o.DiagnosticCode.Operation_not_supported,c.range),!e.skip(s.Token.COMMA))return e.skip(s.Token.CLOSEPAREN)?r:(this.error(o.DiagnosticCode._0_expected,e.range(),")"),null)}for(;!e.skip(s.Token.CLOSEPAREN);){var p=this.parseParameter(e,t);if(!p)return null;switch(n&&!a&&(this.error(o.DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,n.name.range),a=!0),p.parameterKind){default:i&&this.error(o.DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,p.name.range);break;case l.ParameterKind.OPTIONAL:i=!0;break;case l.ParameterKind.REST:n=p}if(r.push(p),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEPAREN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),")"),null}}return r},t.prototype.parseParameter=function(e,t){void 0===t&&(t=!1);var r=!1,n=!1,a=null,c=i.CommonFlags.NONE;if(t&&(e.skip(s.Token.PUBLIC)?(a=e.range(),c|=i.CommonFlags.PUBLIC):e.skip(s.Token.PROTECTED)?(a=e.range(),c|=i.CommonFlags.PROTECTED):e.skip(s.Token.PRIVATE)&&(a=e.range(),c|=i.CommonFlags.PRIVATE),e.peek()==s.Token.READONLY)){var p=e.mark();e.next(),e.peek()!=s.Token.COLON?(e.discard(p),a||(a=e.range()),c|=i.CommonFlags.READONLY):e.reset(p)}if(e.skip(s.Token.DOT_DOT_DOT)&&(c?this.error(o.DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,e.range()):a=e.range(),r=!0),e.skipIdentifier()){r||(a=e.range());var u=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),h=null;if((n=e.skip(s.Token.QUESTION))&&r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,u.range),e.skip(s.Token.COLON)){if(!(h=this.parseType(e)))return null}else h=l.Node.createOmittedType(e.range(e.pos));var d=null;if(e.skip(s.Token.EQUALS)&&(r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,u.range),n?this.error(o.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,u.range):n=!0,!(d=this.parseExpression(e,2))))return null;var _=l.Node.createParameter(u,h,d,r?l.ParameterKind.REST:n?l.ParameterKind.OPTIONAL:l.ParameterKind.DEFAULT,s.Range.join(a,e.range()));return _.flags|=c,_}return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseFunction=function(e,t,r,n){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range(e.pos)),null;var a=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),c=-1,p=null;if(e.skip(s.Token.LESSTHAN)){if(c=e.tokenPos,!(p=this.parseTypeParameters(e)))return null;t|=i.CommonFlags.GENERIC}if(!e.skip(s.Token.OPENPAREN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"("),null;c<0&&(c=e.tokenPos);var u=this.parseParameters(e);if(!u)return null;var h=this.parseParametersThis,d=0!=(t&i.CommonFlags.SET);d&&(1!=u.length&&this.error(o.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,a.range),u.length&&u[0].initializer&&this.error(o.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,a.range)),t&i.CommonFlags.GET&&u.length&&this.error(o.DiagnosticCode.A_get_accessor_cannot_have_parameters,a.range);var _=null;if(e.skip(s.Token.COLON)&&!(_=this.parseType(e,!0,d)))return null;_||(_=l.Node.createOmittedType(e.range(e.pos)),d||this.error(o.DiagnosticCode.Type_expected,_.range));var m=l.Node.createSignature(u,_,h,!1,e.range(c,e.pos)),g=null;if(e.skip(s.Token.OPENBRACE)){if(t&i.CommonFlags.AMBIENT&&this.error(o.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,e.range()),!(g=this.parseBlockStatement(e,!1)))return null}else t&i.CommonFlags.AMBIENT||this.error(o.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,e.range(e.pos));var y=l.Node.createFunctionDeclaration(a,p,m,g,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),y},t.prototype.parseFunctionExpression=function(e){var t,r=e.tokenPos,n=!1;if(e.token==s.Token.FUNCTION){if(t=e.skipIdentifier()?l.Node.createIdentifierExpression(e.readIdentifier(),e.range()):l.Node.createEmptyIdentifierExpression(e.range(e.pos)),!e.skip(s.Token.OPENPAREN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"("),null}else n=!0,assert(e.token==s.Token.OPENPAREN),t=l.Node.createEmptyIdentifierExpression(e.range(e.tokenPos));var i=e.pos,a=this.parseParameters(e);return a?this.parseFunctionExpressionCommon(e,t,a,n,r,i):null},t.prototype.parseFunctionExpressionCommon=function(e,t,r,n,a,c){void 0===a&&(a=-1),void 0===c&&(c=-1),a<0&&(a=t.range.start),c<0&&(c=a);var p=null;if(e.skip(s.Token.COLON)){if(!(p=this.parseType(e)))return null}else p=l.Node.createOmittedType(e.range(e.pos)),this.error(o.DiagnosticCode.Type_expected,p.range);if(n&&!e.skip(s.Token.EQUALS_GREATERTHAN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"=>"),null;var u,h=l.Node.createSignature(r,p,null,!1,e.range(c,e.pos));if(n)u=this.parseStatement(e,!1);else{if(!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;u=this.parseBlockStatement(e,!1)}if(!u)return null;var d=l.Node.createFunctionDeclaration(t,null,h,u,null,n?i.CommonFlags.ARROW:i.CommonFlags.NONE,e.range(a,e.pos));return l.Node.createFunctionExpression(d)},t.prototype.parseClassOrInterface=function(e,t,r,n){var a=e.token==s.Token.INTERFACE;if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var c,p=l.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(s.Token.LESSTHAN)){if(!(c=this.parseTypeParameters(e)))return null;t|=i.CommonFlags.GENERIC}else c=[];var u=null;if(e.skip(s.Token.EXTENDS)){var h=this.parseType(e);if(!h)return null;if(h.kind!=l.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,h.range),null;u=h}var d=null;if(e.skip(s.Token.IMPLEMENTS)){a&&this.error(o.DiagnosticCode.Interface_declaration_cannot_have_implements_clause,e.range());do{var _=this.parseType(e);if(!_)return null;a||(d||(d=[]),d.push(_))}while(e.skip(s.Token.COMMA))}if(!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(),"{"),null;var m,g=new Array;if(a?(assert(!d),m=l.Node.createInterfaceDeclaration(p,c,u,g,r,t,e.range(n,e.pos))):m=l.Node.createClassDeclaration(p,c,u,d,g,r,t,e.range(n,e.pos)),!e.skip(s.Token.CLOSEBRACE))do{var y=this.parseClassMember(e,m);if(!y)return null;y.parent=m,g.push(y)}while(!e.skip(s.Token.CLOSEBRACE));return m},t.prototype.parseClassExpression=function(e){var t,r=e.tokenPos;if(t=e.skipIdentifier()?l.Node.createIdentifierExpression(e.readIdentifier(),e.range()):l.Node.createEmptyIdentifierExpression(e.range(e.pos)),!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;var n=new Array,a=l.Node.createClassDeclaration(t,[],null,null,n,null,i.CommonFlags.NONE,e.range(r,e.pos));if(!e.skip(s.Token.CLOSEBRACE))do{var c=this.parseClassMember(e,a);if(!c)return null;c.parent=a,n.push(c)}while(!e.skip(s.Token.CLOSEBRACE));return l.Node.createClassExpression(a)},t.prototype.parseClassMember=function(e,t){for(var r=e.pos,n=t.kind==l.NodeKind.INTERFACEDECLARATION,a=new Array;e.skip(s.Token.AT);){var c=this.parseDecorator(e);if(!c)break;n&&this.error(o.DiagnosticCode.Decorators_are_not_valid_here,c.range),a.push(c)}var p=t.flags&i.CommonFlags.AMBIENT;n&&(p|=i.CommonFlags.VIRTUAL),e.skip(s.Token.PUBLIC)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"public"),p|=i.CommonFlags.PUBLIC):e.skip(s.Token.PRIVATE)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"private"),p|=i.CommonFlags.PRIVATE):e.skip(s.Token.PROTECTED)&&(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"protected"),p|=i.CommonFlags.PROTECTED);var u=0,h=0,d=0,_=0;e.skip(s.Token.STATIC)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"static"),p|=i.CommonFlags.STATIC,u=e.tokenPos,h=e.pos):(p|=i.CommonFlags.INSTANCE,e.skip(s.Token.ABSTRACT)&&(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"abstract"),p|=i.CommonFlags.ABSTRACT,d=e.tokenPos,_=e.pos),t.flags&i.CommonFlags.GENERIC&&(p|=i.CommonFlags.GENERIC_CONTEXT));var m=0,g=0;e.skip(s.Token.READONLY)&&(p|=i.CommonFlags.READONLY,m=e.tokenPos,g=e.pos);var y=e.mark(),E=!1,f=!1,T=!1,I=0,v=0;if(n||(e.skip(s.Token.GET)?e.peek(!0,s.IdentifierHandling.PREFER)!=s.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(y):(p|=i.CommonFlags.GET,f=!0,I=e.tokenPos,v=e.pos,p&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,g),"readonly")):e.skip(s.Token.SET)?e.peek(!0,s.IdentifierHandling.PREFER)!=s.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(y):(p|=i.CommonFlags.SET|i.CommonFlags.SET,T=!0,I=e.tokenPos,v=e.pos,p&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,g),"readonly")):e.skip(s.Token.CONSTRUCTOR)&&(E=!0,(p|=i.CommonFlags.CONSTRUCTOR)&i.CommonFlags.STATIC&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(u,h),"static"),p&i.CommonFlags.ABSTRACT&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(d,_),"abstract"),p&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,g),"readonly"))),!E&&!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var A=E?l.Node.createConstructorExpression(e.range()):l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),C=null;if(e.skip(s.Token.LESSTHAN)){var N=e.tokenPos;if(!(C=this.parseTypeParameters(e)))return null;E?this.error(o.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,e.range(N,e.pos)):f||T?this.error(o.DiagnosticCode.An_accessor_cannot_have_type_parameters,e.range(N,e.pos)):p|=i.CommonFlags.GENERIC}if(e.skip(s.Token.OPENPAREN)){var O=e.tokenPos,S=this.parseParameters(e,E);if(!S)return null;var L=this.parseParametersThis;if(E)for(var b=0,k=S.length;b"),null):null;case s.Token.IDENTIFIER:return l.Node.createIdentifierExpression(e.readIdentifier(),e.range(r,e.pos));case s.Token.THIS:return l.Node.createThisExpression(e.range(r,e.pos));case s.Token.CONSTRUCTOR:return l.Node.createConstructorExpression(e.range(r,e.pos));case s.Token.SUPER:return l.Node.createSuperExpression(e.range(r,e.pos));case s.Token.STRINGLITERAL:return l.Node.createStringLiteralExpression(e.readString(),e.range(r,e.pos));case s.Token.INTEGERLITERAL:return l.Node.createIntegerLiteralExpression(e.readInteger(),e.range(r,e.pos));case s.Token.FLOATLITERAL:return l.Node.createFloatLiteralExpression(e.readFloat(),e.range(r,e.pos));case s.Token.SLASH:var f=e.readRegexpPattern();return e.skip(s.Token.SLASH)?l.Node.createRegexpLiteralExpression(f,e.readRegexpFlags(),e.range(r,e.pos)):(this.error(o.DiagnosticCode._0_expected,e.range(),"/"),null);case s.Token.FUNCTION:return this.parseFunctionExpression(e);case s.Token.CLASS:return this.parseClassExpression(e);default:return t==s.Token.ENDOFFILE?this.error(o.DiagnosticCode.Unexpected_end_of_text,e.range(r)):this.error(o.DiagnosticCode.Expression_expected,e.range()),null}},t.prototype.tryParseTypeArgumentsBeforeArguments=function(e){var t=e.mark();if(!e.skip(s.Token.LESSTHAN))return null;var r=new Array;do{if(e.peek()===s.Token.GREATERTHAN)break;var n=this.parseType(e,!0,!0);if(!n)return e.reset(t),null;r.push(n)}while(e.skip(s.Token.COMMA));return e.skip(s.Token.GREATERTHAN)&&e.skip(s.Token.OPENPAREN)?r:(e.reset(t),null)},t.prototype.parseArguments=function(e){for(var t=new Array;!e.skip(s.Token.CLOSEPAREN);){var r=this.parseExpression(e,2);if(!r)return null;if(t.push(r),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEPAREN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),")"),null}}return t},t.prototype.parseExpression=function(e,t){void 0===t&&(t=1),assert(0!=t);var r=this.parseExpressionStart(e);if(!r)return null;for(var n,i,a=(r=this.maybeParseCallExpression(e,r)).range.start,c=null;(i=u(n=e.peek()))>=t;){switch(e.next(),n){case s.Token.AS:var p=this.parseType(e);if(!p)return null;r=l.Node.createAssertionExpression(l.AssertionKind.AS,r,p,e.range(a,e.pos));break;case s.Token.INSTANCEOF:var d=this.parseType(e);if(!d)return null;r=l.Node.createInstanceOfExpression(r,d,e.range(a,e.pos));break;case s.Token.OPENBRACKET:if(!(c=this.parseExpression(e)))return null;if(!e.skip(s.Token.CLOSEBRACKET))return this.error(o.DiagnosticCode._0_expected,e.range(),"]"),null;r=l.Node.createElementAccessExpression(r,c,e.range(a,e.pos));break;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:r.kind!=l.NodeKind.IDENTIFIER&&r.kind!=l.NodeKind.ELEMENTACCESS&&r.kind!=l.NodeKind.PROPERTYACCESS&&this.error(o.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,r.range),r=l.Node.createUnaryPostfixExpression(n,r,e.range(a,e.pos));break;case s.Token.QUESTION:var _=this.parseExpression(e);if(!_)return null;if(!e.skip(s.Token.COLON))return this.error(o.DiagnosticCode._0_expected,e.range(),":"),null;var m=this.parseExpression(e,t>1?2:1);if(!m)return null;r=l.Node.createTernaryExpression(r,_,m,e.range(a,e.pos));break;case s.Token.COMMA:var g=[r];do{if(!(r=this.parseExpression(e,2)))return null;g.push(r)}while(e.skip(s.Token.COMMA));r=l.Node.createCommaExpression(g,e.range(a,e.pos));break;default:if(n==s.Token.DOT){if(e.skipIdentifier())c=l.Node.createIdentifierExpression(e.readIdentifier(),e.range());else if(!(c=this.parseExpression(e,h(n)?i:i+1)))return null;if(c.kind==l.NodeKind.IDENTIFIER)r=l.Node.createPropertyAccessExpression(r,c,e.range(a,e.pos));else{if(c.kind!=l.NodeKind.CALL)return this.error(o.DiagnosticCode.Identifier_expected,c.range),null;if(!(r=this.joinPropertyCall(e,a,r,c)))return null}}else{if(!(c=this.parseExpression(e,h(n)?i:i+1)))return null;r=l.Node.createBinaryExpression(n,r,c,e.range(a,e.pos))}}r=this.maybeParseCallExpression(e,r)}return r},t.prototype.joinPropertyCall=function(e,t,r,n){var i=n.expression;switch(i.kind){case l.NodeKind.IDENTIFIER:n.expression=l.Node.createPropertyAccessExpression(r,i,e.range(t,e.pos));break;case l.NodeKind.CALL:var a=this.joinPropertyCall(e,t,r,i);if(!a)return null;n.expression=a,n.range=e.range(t,e.pos);break;default:return this.error(o.DiagnosticCode.Identifier_expected,n.range),null}return n},t.prototype.maybeParseCallExpression=function(e,t){if(l.nodeIsCallable(t.kind))for(var r=null;e.skip(s.Token.OPENPAREN)||l.nodeIsGenericCallable(t.kind)&&null!==(r=this.tryParseTypeArgumentsBeforeArguments(e));){var n=this.parseArguments(e);if(!n)break;t=l.Node.createCallExpression(t,r,n,e.range(t.range.start,e.pos))}return t},t.prototype.skipStatement=function(e){for(e.peek(!0),e.nextTokenOnNewLine&&e.next();;){var t=e.peek(!0);if(t==s.Token.ENDOFFILE||t==s.Token.SEMICOLON){e.next();break}if(e.nextTokenOnNewLine)break;switch(e.next()){case s.Token.IDENTIFIER:e.readIdentifier();break;case s.Token.STRINGLITERAL:e.readString();break;case s.Token.INTEGERLITERAL:e.readInteger();break;case s.Token.FLOATLITERAL:e.readFloat()}}},t.prototype.skipBlock=function(e){var t=1,r=!0;do{switch(e.next()){case s.Token.ENDOFFILE:this.error(o.DiagnosticCode._0_expected,e.range(),"}"),r=!1;break;case s.Token.OPENBRACE:++t;break;case s.Token.CLOSEBRACE:--t||(r=!1);break;case s.Token.IDENTIFIER:e.readIdentifier();break;case s.Token.STRINGLITERAL:e.readString();break;case s.Token.INTEGERLITERAL:e.readInteger();break;case s.Token.FLOATLITERAL:e.readFloat()}}while(r)},t}(o.DiagnosticEmitter);function u(e){switch(e){case s.Token.COMMA:return 1;case s.Token.EQUALS:case s.Token.PLUS_EQUALS:case s.Token.MINUS_EQUALS:case s.Token.ASTERISK_ASTERISK_EQUALS:case s.Token.ASTERISK_EQUALS:case s.Token.SLASH_EQUALS:case s.Token.PERCENT_EQUALS:case s.Token.LESSTHAN_LESSTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.AMPERSAND_EQUALS:case s.Token.CARET_EQUALS:case s.Token.BAR_EQUALS:return 4;case s.Token.QUESTION:return 5;case s.Token.BAR_BAR:return 6;case s.Token.AMPERSAND_AMPERSAND:return 7;case s.Token.BAR:return 8;case s.Token.CARET:return 9;case s.Token.AMPERSAND:return 10;case s.Token.EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS:case s.Token.EQUALS_EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS_EQUALS:return 11;case s.Token.AS:case s.Token.IN:case s.Token.INSTANCEOF:case s.Token.LESSTHAN:case s.Token.GREATERTHAN:case s.Token.LESSTHAN_EQUALS:case s.Token.GREATERTHAN_EQUALS:return 12;case s.Token.LESSTHAN_LESSTHAN:case s.Token.GREATERTHAN_GREATERTHAN:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:return 13;case s.Token.PLUS:case s.Token.MINUS:return 14;case s.Token.ASTERISK:case s.Token.SLASH:case s.Token.PERCENT:return 15;case s.Token.ASTERISK_ASTERISK:return 16;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:return 18;case s.Token.DOT:case s.Token.NEW:case s.Token.OPENBRACKET:return 20}return 0}function h(e){switch(e){case s.Token.EQUALS:case s.Token.PLUS_EQUALS:case s.Token.MINUS_EQUALS:case s.Token.ASTERISK_ASTERISK_EQUALS:case s.Token.ASTERISK_EQUALS:case s.Token.SLASH_EQUALS:case s.Token.PERCENT_EQUALS:case s.Token.LESSTHAN_LESSTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.AMPERSAND_EQUALS:case s.Token.CARET_EQUALS:case s.Token.BAR_EQUALS:case s.Token.QUESTION:case s.Token.ASTERISK_ASTERISK:return!0;default:return!1}}t.Parser=p,function(e){e[e.NONE=0]="NONE",e[e.COMMA=1]="COMMA",e[e.SPREAD=2]="SPREAD",e[e.YIELD=3]="YIELD",e[e.ASSIGNMENT=4]="ASSIGNMENT",e[e.CONDITIONAL=5]="CONDITIONAL",e[e.LOGICAL_OR=6]="LOGICAL_OR",e[e.LOGICAL_AND=7]="LOGICAL_AND",e[e.BITWISE_OR=8]="BITWISE_OR",e[e.BITWISE_XOR=9]="BITWISE_XOR",e[e.BITWISE_AND=10]="BITWISE_AND",e[e.EQUALITY=11]="EQUALITY",e[e.RELATIONAL=12]="RELATIONAL",e[e.SHIFT=13]="SHIFT",e[e.ADDITIVE=14]="ADDITIVE",e[e.MULTIPLICATIVE=15]="MULTIPLICATIVE",e[e.EXPONENTIATED=16]="EXPONENTIATED",e[e.UNARY_PREFIX=17]="UNARY_PREFIX",e[e.UNARY_POSTFIX=18]="UNARY_POSTFIX",e[e.CALL=19]="CALL",e[e.MEMBERACCESS=20]="MEMBERACCESS",e[e.GROUPING=21]="GROUPING"}(t.Precedence||(t.Precedence={}))}])}); +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("binaryen")):"function"==typeof define&&define.amd?define(["binaryen"],t):"object"==typeof exports?exports.assemblyscript=t(require("binaryen")):e.assemblyscript=t(e.binaryen)}("undefined"!=typeof self?self:this,function(e){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=12)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.NONE=0]="NONE",e[e.IMPORT=1]="IMPORT",e[e.EXPORT=2]="EXPORT",e[e.DECLARE=4]="DECLARE",e[e.CONST=8]="CONST",e[e.LET=16]="LET",e[e.STATIC=32]="STATIC",e[e.READONLY=64]="READONLY",e[e.ABSTRACT=128]="ABSTRACT",e[e.PUBLIC=256]="PUBLIC",e[e.PRIVATE=512]="PRIVATE",e[e.PROTECTED=1024]="PROTECTED",e[e.GET=2048]="GET",e[e.SET=4096]="SET",e[e.DEFINITE_ASSIGNMENT=8192]="DEFINITE_ASSIGNMENT",e[e.AMBIENT=16384]="AMBIENT",e[e.GENERIC=32768]="GENERIC",e[e.GENERIC_CONTEXT=65536]="GENERIC_CONTEXT",e[e.INSTANCE=131072]="INSTANCE",e[e.CONSTRUCTOR=262144]="CONSTRUCTOR",e[e.ARROW=524288]="ARROW",e[e.MODULE_EXPORT=1048576]="MODULE_EXPORT",e[e.MODULE_IMPORT=2097152]="MODULE_IMPORT",e[e.COMPILED=4194304]="COMPILED",e[e.INLINED=8388608]="INLINED",e[e.SCOPED=16777216]="SCOPED",e[e.TRAMPOLINE=33554432]="TRAMPOLINE",e[e.VIRTUAL=67108864]="VIRTUAL",e[e.MAIN=134217728]="MAIN",e[e.QUOTED=268435456]="QUOTED"}(t.CommonFlags||(t.CommonFlags={})),t.PATH_DELIMITER="/",t.PARENT_SUBST="..",t.GETTER_PREFIX="get:",t.SETTER_PREFIX="set:",t.INSTANCE_DELIMITER="#",t.STATIC_DELIMITER=".",t.INNER_DELIMITER="~",t.LIBRARY_SUBST="~lib",t.LIBRARY_PREFIX=t.LIBRARY_SUBST+t.PATH_DELIMITER,t.FILESPACE_PREFIX="file:"},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,i=r(10),a=r(2),s=r(10);function o(e){switch(e){case n.INFO:return"INFO";case n.WARNING:return"WARNING";case n.ERROR:return"ERROR";default:return assert(!1),""}}function c(e){switch(e){case n.INFO:return t.COLOR_BLUE;case n.WARNING:return t.COLOR_YELLOW;case n.ERROR:return t.COLOR_RED;default:return assert(!1),""}}t.DiagnosticCode=s.DiagnosticCode,t.diagnosticCodeToString=s.diagnosticCodeToString,function(e){e[e.INFO=0]="INFO",e[e.WARNING=1]="WARNING",e[e.ERROR=2]="ERROR"}(n=t.DiagnosticCategory||(t.DiagnosticCategory={})),t.diagnosticCategoryToString=o,t.COLOR_BLUE="",t.COLOR_YELLOW="",t.COLOR_RED="",t.COLOR_RESET="",t.diagnosticCategoryToColor=c;var l=function(){function e(e,t,r){this.range=null,this.code=e,this.category=t,this.message=r}return e.create=function(t,r,n,a,s){void 0===n&&(n=null),void 0===a&&(a=null),void 0===s&&(s=null);var o=i.diagnosticCodeToString(t);return null!=n&&(o=o.replace("{0}",n)),null!=a&&(o=o.replace("{1}",a)),null!=s&&(o=o.replace("{2}",s)),new e(t,r,o)},e.createInfo=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.INFO,r,i)},e.createWarning=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.WARNING,r,i)},e.createError=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.ERROR,r,i)},e.prototype.withRange=function(e){return this.range=e,this},e.prototype.toString=function(){return this.range?o(this.category)+" "+this.code.toString(10)+': "'+this.message+'" in '+this.range.source.normalizedPath+":"+this.range.line.toString(10)+":"+this.range.column.toString(10):o(this.category)+" "+this.code.toString(10)+": "+this.message},e}();function p(e,r){void 0===r&&(r=!1);for(var n=e.source.text,i=n.length,s=e.start,o=e.end;s>0&&!a.isLineBreak(n.charCodeAt(s-1));)s--;for(;o=0?c.substring(l+1):c,o.statements=new Array,o.range=new a.Range(o,0,r.length),o.text=r,o}return n(t,e),Object.defineProperty(t.prototype,"isEntry",{get:function(){return this.sourceKind==q.ENTRY},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isLibrary",{get:function(){return this.sourceKind==q.LIBRARY},enumerable:!0,configurable:!0}),t}(c);t.Source=Z;var J=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.decorators=null,t.cachedProgramLevelInternalName=null,t.cachedFileLevelInternalName=null,t}return n(t,e),Object.defineProperty(t.prototype,"programLevelInternalName",{get:function(){return this.cachedProgramLevelInternalName||(this.cachedProgramLevelInternalName=Re(this,!0)),this.cachedProgramLevelInternalName},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"fileLevelInternalName",{get:function(){return this.cachedFileLevelInternalName||(this.cachedFileLevelInternalName=Re(this,!1)),this.cachedFileLevelInternalName},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isTopLevel",{get:function(){var e=this.parent;return!!e&&(!(e.kind==s.VARIABLE&&!(e=e.parent))&&e.kind==s.SOURCE)},enumerable:!0,configurable:!0}),Object.defineProperty(t.prototype,"isTopLevelExport",{get:function(){var e=this.parent;return!(!e||e.kind==s.VARIABLE&&!(e=e.parent))&&(e.kind==s.NAMESPACEDECLARATION?this.is(i.CommonFlags.EXPORT)&&e.isTopLevelExport:e.kind==s.CLASSDECLARATION?this.is(i.CommonFlags.STATIC)&&e.isTopLevelExport:e.kind==s.SOURCE&&this.is(i.CommonFlags.EXPORT))},enumerable:!0,configurable:!0}),t.prototype.needsExplicitExport=function(e){return e.name.text!=e.externalName.text||this.range.source!=e.range.source||!this.isTopLevelExport},t}(j);t.DeclarationStatement=J;var $=function(e){function t(){return null!==e&&e.apply(this,arguments)||this}return n(t,e),t}(J);t.VariableLikeDeclarationStatement=$;var ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.BLOCK,t}return n(t,e),t}(j);t.BlockStatement=ee;var te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.BREAK,t}return n(t,e),t}(j);t.BreakStatement=te;var re=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.CLASSDECLARATION,t}return n(t,e),Object.defineProperty(t.prototype,"isGeneric",{get:function(){var e=this.typeParameters;return null!=e&&e.length>0},enumerable:!0,configurable:!0}),t}(J);t.ClassDeclaration=re;var ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.CONTINUE,t}return n(t,e),t}(j);t.ContinueStatement=ne;var ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.DO,t}return n(t,e),t}(j);t.DoStatement=ie;var ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EMPTY,t}return n(t,e),t}(j);t.EmptyStatement=ae;var se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMDECLARATION,t}return n(t,e),t}(J);t.EnumDeclaration=se;var oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMVALUEDECLARATION,t}return n(t,e),t}(J);t.EnumValueDeclaration=oe;var ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORTIMPORT,t}return n(t,e),t}(c);t.ExportImportStatement=ce;var le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORTMEMBER,t}return n(t,e),t}(c);t.ExportMember=le;var pe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORT,t}return n(t,e),t}(j);t.ExportStatement=pe;var ue=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPRESSION,t}return n(t,e),t}(j);t.ExpressionStatement=ue;var he=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FIELDDECLARATION,t.parameterIndex=-1,t}return n(t,e),t}($);t.FieldDeclaration=he;var de=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FOR,t}return n(t,e),t}(j);t.ForStatement=de;var _e=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FUNCTIONDECLARATION,t}return n(t,e),Object.defineProperty(t.prototype,"isGeneric",{get:function(){var e=this.typeParameters;return null!=e&&e.length>0},enumerable:!0,configurable:!0}),t}(J);t.FunctionDeclaration=_e;var me=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IF,t}return n(t,e),t}(j);t.IfStatement=me;var ge=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORTDECLARATION,t}return n(t,e),t}(J);t.ImportDeclaration=ge;var ye=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORT,t}return n(t,e),t}(j);t.ImportStatement=ye;var Ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.INTERFACEDECLARATION,t}return n(t,e),t}(re);t.InterfaceDeclaration=Ee;var fe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.METHODDECLARATION,t}return n(t,e),t}(_e);t.MethodDeclaration=fe;var Te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.NAMESPACEDECLARATION,t}return n(t,e),t}(J);t.NamespaceDeclaration=Te;var Ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.RETURN,t}return n(t,e),t}(j);t.ReturnStatement=Ie;var ve=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCHCASE,t}return n(t,e),t}(c);t.SwitchCase=ve;var Ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCH,t}return n(t,e),t}(j);t.SwitchStatement=Ae;var Ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.THROW,t}return n(t,e),t}(j);t.ThrowStatement=Ce;var Ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TRY,t}return n(t,e),t}(j);t.TryStatement=Ne;var Oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TYPEDECLARATION,t}return n(t,e),t}(J);t.TypeDeclaration=Oe;var Se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLEDECLARATION,t}return n(t,e),t}($);t.VariableDeclaration=Se;var Le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLE,t}return n(t,e),t}(j);t.VariableStatement=Le;var be=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VOID,t}return n(t,e),t}(j);t.VoidStatement=be;var ke=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.WHILE,t}return n(t,e),t}(j);function Re(e,t){void 0===t&&(t=!1);var r=e.name.text,n=e.parent;return n&&(e.kind!=s.VARIABLEDECLARATION||n.kind!=s.VARIABLE||(n=n.parent))?n.kind==s.CLASSDECLARATION?Re(n,t)+(e.is(i.CommonFlags.STATIC)?i.STATIC_DELIMITER:i.INSTANCE_DELIMITER)+r:n.kind==s.NAMESPACEDECLARATION||n.kind==s.ENUMDECLARATION?Re(n,t)+i.STATIC_DELIMITER+r:t?r:e.range.source.internalPath+i.PATH_DELIMITER+r:r}function xe(e){return e.endsWith(".ts")&&(e=e.substring(0,e.length-3)),e}function Fe(e,t){for(var r=0,n=e.length;r=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)s.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return s};Object.defineProperty(t,"__esModule",{value:!0});var s,o=r(0),c=r(1),l=r(7),p=r(3),u=r(5),h=r(11),d=function(){return function(){}}(),_=function(){return function(){}}(),m=function(){return function(){}}();function g(e,t){switch(assert(t.length),e){case p.DecoratorKind.OPERATOR:case p.DecoratorKind.OPERATOR_BINARY:switch(t.charCodeAt(0)){case 91:if("[]"==t)return s.INDEXED_GET;if("[]="==t)return s.INDEXED_SET;break;case 123:if("{}"==t)return s.UNCHECKED_INDEXED_GET;if("{}="==t)return s.UNCHECKED_INDEXED_SET;break;case 43:if("+"==t)return s.ADD;break;case 45:if("-"==t)return s.SUB;break;case 42:if("*"==t)return s.MUL;if("**"==t)return s.POW;break;case 47:if("/"==t)return s.DIV;break;case 37:if("%"==t)return s.REM;break;case 38:if("&"==t)return s.BITWISE_AND;break;case 124:if("|"==t)return s.BITWISE_OR;break;case 94:if("^"==t)return s.BITWISE_XOR;break;case 61:if("=="==t)return s.EQ;break;case 33:if("!="==t)return s.NE;break;case 62:if(">"==t)return s.GT;if(">="==t)return s.GE;if(">>"==t)return s.BITWISE_SHR;if(">>>"==t)return s.BITWISE_SHR_U;break;case 60:if("<"==t)return s.LT;if("<="==t)return s.LE;if("<<"==t)return s.BITWISE_SHL}break;case p.DecoratorKind.OPERATOR_PREFIX:switch(t.charCodeAt(0)){case 43:if("+"==t)return s.PLUS;if("++"==t)return s.PREFIX_INC;break;case 45:if("-"==t)return s.MINUS;if("--"==t)return s.PREFIX_DEC;break;case 33:if("!"==t)return s.NOT;break;case 126:if("~"==t)return s.BITWISE_NOT}break;case p.DecoratorKind.OPERATOR_POSTFIX:switch(t.charCodeAt(0)){case 43:if("++"==t)return s.POSTFIX_INC;break;case 45:if("--"==t)return s.POSTFIX_DEC}}return s.INVALID}!function(e){e[e.INVALID=0]="INVALID",e[e.INDEXED_GET=1]="INDEXED_GET",e[e.INDEXED_SET=2]="INDEXED_SET",e[e.UNCHECKED_INDEXED_GET=3]="UNCHECKED_INDEXED_GET",e[e.UNCHECKED_INDEXED_SET=4]="UNCHECKED_INDEXED_SET",e[e.ADD=5]="ADD",e[e.SUB=6]="SUB",e[e.MUL=7]="MUL",e[e.DIV=8]="DIV",e[e.REM=9]="REM",e[e.POW=10]="POW",e[e.BITWISE_AND=11]="BITWISE_AND",e[e.BITWISE_OR=12]="BITWISE_OR",e[e.BITWISE_XOR=13]="BITWISE_XOR",e[e.BITWISE_SHL=14]="BITWISE_SHL",e[e.BITWISE_SHR=15]="BITWISE_SHR",e[e.BITWISE_SHR_U=16]="BITWISE_SHR_U",e[e.EQ=17]="EQ",e[e.NE=18]="NE",e[e.GT=19]="GT",e[e.GE=20]="GE",e[e.LT=21]="LT",e[e.LE=22]="LE",e[e.PLUS=23]="PLUS",e[e.MINUS=24]="MINUS",e[e.NOT=25]="NOT",e[e.BITWISE_NOT=26]="BITWISE_NOT",e[e.PREFIX_INC=27]="PREFIX_INC",e[e.PREFIX_DEC=28]="PREFIX_DEC",e[e.POSTFIX_INC=29]="POSTFIX_INC",e[e.POSTFIX_DEC=30]="POSTFIX_DEC"}(s=t.OperatorKind||(t.OperatorKind={}));var y,E,f=new Map,T=function(e){function t(t){void 0===t&&(t=null);var r=e.call(this,t)||this;return r.diagnosticsOffset=0,r.elementsLookup=new Map,r.instancesLookup=new Map,r.typesLookup=f,r.typeAliases=new Map,r.fileLevelExports=new Map,r.moduleLevelExports=new Map,r.arrayBufferInstance=null,r.arrayPrototype=null,r.stringInstance=null,r.mainFunction=null,r.abortInstance=null,r.memoryAllocateInstance=null,r.hasGC=!1,r.gcAllocateInstance=null,r.gcLinkInstance=null,r.gcMarkInstance=null,r.gcHeaderSize=0,r.gcHookOffset=0,r.resolver=new h.Resolver(r),r.sources=[],r}return n(t,e),t.prototype.getSource=function(e){for(var t=this.sources,r=0,n=t.length;r=0),assert(null!=e.type),e.type.toNativeType()){case 1:t=this.tempI32s||(this.tempI32s=[]);break;case 2:t=this.tempI64s||(this.tempI64s=[]);break;case 3:t=this.tempF32s||(this.tempF32s=[]);break;case 4:t=this.tempF64s||(this.tempF64s=[]);break;default:throw new Error("concrete type expected")}assert(e.index>=0),t.push(e)}},t.prototype.getAndFreeTempLocal=function(e,t){var r,n;switch(e.toNativeType()){case 1:r=this.tempI32s||(this.tempI32s=[]);break;case 2:r=this.tempI64s||(this.tempI64s=[]);break;case 3:r=this.tempF32s||(this.tempF32s=[]);break;case 4:r=this.tempF64s||(this.tempF64s=[]);break;default:throw new Error("concrete type expected")}return r.length?(n=r[r.length-1]).type=e:(n=this.addLocal(e),r.push(n)),e.is(36)&&this.flow.setLocalWrapped(n.index,t),n},t.prototype.enterBreakContext=function(){var e=this.nextBreakId++;return this.breakStack?this.breakStack.push(e):this.breakStack=[e],this.breakContext=e.toString(10)},t.prototype.leaveBreakContext=function(){assert(null!=this.breakStack);var e=this.breakStack.length;assert(e>0),this.breakStack.pop(),e>1?this.breakContext=this.breakStack[e-2].toString(10):(this.breakContext=null,this.breakStack=null)},t.prototype.finalize=function(e,t){if(this.ref=t,assert(!this.breakStack||!this.breakStack.length),this.breakStack=null,this.breakContext=null,this.tempI32s=this.tempI64s=this.tempF32s=this.tempF64s=null,this.program.options.sourceMap)for(var r=this.debugLocations,n=0,i=r.length;n=r.length)return!1;t=r[n],e-=64*(n+1)}return i64_ne(i64_and(t,i64_shl(i64_one,i64_new(e))),i64_zero)},e.prototype.setLocalWrapped=function(e,t){var r,n=-1;if(e<64){if(e<0)return;r=this.wrappedLocals}else{var i=this.wrappedLocalsExt;for(n=(e-64)/64|0,i||(this.wrappedLocalsExt=i=new Array(n+1),i.length=0);i.length<=n;)i.push(i64_new(0));r=i[n],e-=64*(n+1)}r=t?i64_or(r,i64_shl(i64_one,i64_new(e))):i64_and(r,i64_not(i64_shl(i64_one,i64_new(e)))),n>=0?this.wrappedLocalsExt[n]=r:this.wrappedLocals=r},e.prototype.inherit=function(e){this.flags|=2047&e.flags,this.wrappedLocals=e.wrappedLocals,this.wrappedLocalsExt=e.wrappedLocalsExt},e.prototype.inheritConditional=function(e){e.is(1)&&this.set(64),e.is(4)&&this.set(128),e.is(8)&&e.breakLabel==this.breakLabel&&this.set(256),e.is(16)&&e.continueLabel==this.continueLabel&&this.set(512),e.is(32)&&this.set(1024)},e.prototype.inheritMutual=function(e,t){this.flags|=e.flags&t.flags&63,this.flags|=1984&e.flags,this.flags|=1984&t.flags,this.wrappedLocals=i64_and(e.wrappedLocals,t.wrappedLocals);var r=e.wrappedLocalsExt,n=t.wrappedLocalsExt;if(null!=r&&null!=n){var i=this.wrappedLocalsExt,a=min(r.length,n.length);if(a){if(i)for(;i.lengtha):this.canOverflow(u.getBinaryLeft(e),t)&&!(u.getExpressionId(r=u.getBinaryRight(e))==u.ExpressionId.Const&&u.getConstValueI32(r)>=a);case u.BinaryOp.DivU32:case u.BinaryOp.RemI32:case u.BinaryOp.RemU32:return this.canOverflow(u.getBinaryLeft(e),t)||this.canOverflow(u.getBinaryRight(e),t)}break;case u.ExpressionId.Unary:switch(u.getUnaryOp(e)){case u.UnaryOp.EqzI32:case u.UnaryOp.EqzI64:return!1;case u.UnaryOp.ClzI32:case u.UnaryOp.CtzI32:case u.UnaryOp.PopcntI32:return t.size<7}break;case u.ExpressionId.Const:var s=0;switch(u.getExpressionType(e)){case 1:s=u.getConstValueI32(e);break;case 2:s=u.getConstValueI64Low(e);break;case 3:s=i32(u.getConstValueF32(e));break;case 4:s=i32(u.getConstValueF64(e));break;default:assert(!1)}switch(t.kind){case 0:return si8.MAX_VALUE;case 1:return si16.MAX_VALUE;case 5:return s<0||s>u8.MAX_VALUE;case 6:return s<0||s>u16.MAX_VALUE;case 10:return 0!=(-2&s)}break;case u.ExpressionId.Load:var o=void 0;switch(u.getLoadBytes(e)){case 1:o=u.isLoadSigned(e)?l.Type.i8:l.Type.u8;break;case 2:o=u.isLoadSigned(e)?l.Type.i16:l.Type.u16;break;default:o=u.isLoadSigned(e)?l.Type.i32:l.Type.u32}return z(o,t);case u.ExpressionId.Block:if(!u.getBlockName(e)){var c=assert(u.getBlockChildCount(e)),p=u.getBlockChild(e,c-1);return this.canOverflow(p,t)}break;case u.ExpressionId.If:return this.canOverflow(u.getIfTrue(e),t)||this.canOverflow(assert(u.getIfFalse(e)),t);case u.ExpressionId.Select:return this.canOverflow(u.getSelectThen(e),t)||this.canOverflow(u.getSelectElse(e),t);case u.ExpressionId.Call:var h=this.currentFunction.program,d=assert(h.instancesLookup.get(assert(u.getCallTarget(e))));assert(d.kind==y.FUNCTION);var _=d.signature.returnType;return!d.flow.is(2)||z(_,t);case u.ExpressionId.Unreachable:return!1}return!0},e.prototype.finalize=function(){assert(null==this.parent),this.continueLabel=null,this.breakLabel=null,this.returnLabel=null,this.contextualTypeArguments=null},e}();function z(e,t){var r=e.byteSize,n=t.byteSize;return!e.is(4)||r>n||e.is(1)!=t.is(1)}t.Flow=K},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,i=r(9);!function(e){e[e.None=0]="None",e[e.I32=1]="I32",e[e.I64=2]="I64",e[e.F32=3]="F32",e[e.F64=4]="F64",e[e.Unreachable=5]="Unreachable",e[e.Auto=-1]="Auto"}(t.NativeType||(t.NativeType={})),function(e){e[e.Invalid=_BinaryenInvalidId()]="Invalid",e[e.Block=_BinaryenBlockId()]="Block",e[e.If=_BinaryenIfId()]="If",e[e.Loop=_BinaryenLoopId()]="Loop",e[e.Break=_BinaryenBreakId()]="Break",e[e.Switch=_BinaryenSwitchId()]="Switch",e[e.Call=_BinaryenCallId()]="Call",e[e.CallIndirect=_BinaryenCallIndirectId()]="CallIndirect",e[e.GetLocal=_BinaryenGetLocalId()]="GetLocal",e[e.SetLocal=_BinaryenSetLocalId()]="SetLocal",e[e.GetGlobal=_BinaryenGetGlobalId()]="GetGlobal",e[e.SetGlobal=_BinaryenSetGlobalId()]="SetGlobal",e[e.Load=_BinaryenLoadId()]="Load",e[e.Store=_BinaryenStoreId()]="Store",e[e.Const=_BinaryenConstId()]="Const",e[e.Unary=_BinaryenUnaryId()]="Unary",e[e.Binary=_BinaryenBinaryId()]="Binary",e[e.Select=_BinaryenSelectId()]="Select",e[e.Drop=_BinaryenDropId()]="Drop",e[e.Return=_BinaryenReturnId()]="Return",e[e.Host=_BinaryenHostId()]="Host",e[e.Nop=_BinaryenNopId()]="Nop",e[e.Unreachable=_BinaryenUnreachableId()]="Unreachable",e[e.AtomicCmpxchg=_BinaryenAtomicCmpxchgId()]="AtomicCmpxchg",e[e.AtomicRMW=_BinaryenAtomicRMWId()]="AtomicRMW",e[e.AtomicWait=_BinaryenAtomicWaitId()]="AtomicWait",e[e.AtomicWake=_BinaryenAtomicWakeId()]="AtomicWake"}(n=t.ExpressionId||(t.ExpressionId={})),function(e){e[e.ClzI32=_BinaryenClzInt32()]="ClzI32",e[e.CtzI32=_BinaryenCtzInt32()]="CtzI32",e[e.PopcntI32=_BinaryenPopcntInt32()]="PopcntI32",e[e.NegF32=_BinaryenNegFloat32()]="NegF32",e[e.AbsF32=_BinaryenAbsFloat32()]="AbsF32",e[e.CeilF32=_BinaryenCeilFloat32()]="CeilF32",e[e.FloorF32=_BinaryenFloorFloat32()]="FloorF32",e[e.TruncF32=_BinaryenTruncFloat32()]="TruncF32",e[e.NearestF32=_BinaryenNearestFloat32()]="NearestF32",e[e.SqrtF32=_BinaryenSqrtFloat32()]="SqrtF32",e[e.EqzI32=_BinaryenEqZInt32()]="EqzI32",e[e.ClzI64=_BinaryenClzInt64()]="ClzI64",e[e.CtzI64=_BinaryenCtzInt64()]="CtzI64",e[e.PopcntI64=_BinaryenPopcntInt64()]="PopcntI64",e[e.NegF64=_BinaryenNegFloat64()]="NegF64",e[e.AbsF64=_BinaryenAbsFloat64()]="AbsF64",e[e.CeilF64=_BinaryenCeilFloat64()]="CeilF64",e[e.FloorF64=_BinaryenFloorFloat64()]="FloorF64",e[e.TruncF64=_BinaryenTruncFloat64()]="TruncF64",e[e.NearestF64=_BinaryenNearestFloat64()]="NearestF64",e[e.SqrtF64=_BinaryenSqrtFloat64()]="SqrtF64",e[e.EqzI64=_BinaryenEqZInt64()]="EqzI64",e[e.ExtendI32=_BinaryenExtendSInt32()]="ExtendI32",e[e.ExtendU32=_BinaryenExtendUInt32()]="ExtendU32",e[e.WrapI64=_BinaryenWrapInt64()]="WrapI64",e[e.TruncF32ToI32=_BinaryenTruncSFloat32ToInt32()]="TruncF32ToI32",e[e.TruncF32ToI64=_BinaryenTruncSFloat32ToInt64()]="TruncF32ToI64",e[e.TruncF32ToU32=_BinaryenTruncUFloat32ToInt32()]="TruncF32ToU32",e[e.TruncF32ToU64=_BinaryenTruncUFloat32ToInt64()]="TruncF32ToU64",e[e.TruncF64ToI32=_BinaryenTruncSFloat64ToInt32()]="TruncF64ToI32",e[e.TruncF64ToI64=_BinaryenTruncSFloat64ToInt64()]="TruncF64ToI64",e[e.TruncF64ToU32=_BinaryenTruncUFloat64ToInt32()]="TruncF64ToU32",e[e.TruncF64ToU64=_BinaryenTruncUFloat64ToInt64()]="TruncF64ToU64",e[e.ReinterpretF32=_BinaryenReinterpretFloat32()]="ReinterpretF32",e[e.ReinterpretF64=_BinaryenReinterpretFloat64()]="ReinterpretF64",e[e.ConvertI32ToF32=_BinaryenConvertSInt32ToFloat32()]="ConvertI32ToF32",e[e.ConvertI32ToF64=_BinaryenConvertSInt32ToFloat64()]="ConvertI32ToF64",e[e.ConvertU32ToF32=_BinaryenConvertUInt32ToFloat32()]="ConvertU32ToF32",e[e.ConvertU32ToF64=_BinaryenConvertUInt32ToFloat64()]="ConvertU32ToF64",e[e.ConvertI64ToF32=_BinaryenConvertSInt64ToFloat32()]="ConvertI64ToF32",e[e.ConvertI64ToF64=_BinaryenConvertSInt64ToFloat64()]="ConvertI64ToF64",e[e.ConvertU64ToF32=_BinaryenConvertUInt64ToFloat32()]="ConvertU64ToF32",e[e.ConvertU64ToF64=_BinaryenConvertUInt64ToFloat64()]="ConvertU64ToF64",e[e.PromoteF32=_BinaryenPromoteFloat32()]="PromoteF32",e[e.DemoteF64=_BinaryenDemoteFloat64()]="DemoteF64",e[e.ReinterpretI32=_BinaryenReinterpretInt32()]="ReinterpretI32",e[e.ReinterpretI64=_BinaryenReinterpretInt64()]="ReinterpretI64",e[e.ExtendI8ToI32=_BinaryenExtendS8Int32()]="ExtendI8ToI32",e[e.ExtendI16ToI32=_BinaryenExtendS16Int32()]="ExtendI16ToI32",e[e.ExtendI8ToI64=_BinaryenExtendS8Int64()]="ExtendI8ToI64",e[e.ExtendI16ToI64=_BinaryenExtendS16Int64()]="ExtendI16ToI64",e[e.ExtendI32ToI64=_BinaryenExtendS32Int64()]="ExtendI32ToI64"}(t.UnaryOp||(t.UnaryOp={})),function(e){e[e.AddI32=_BinaryenAddInt32()]="AddI32",e[e.SubI32=_BinaryenSubInt32()]="SubI32",e[e.MulI32=_BinaryenMulInt32()]="MulI32",e[e.DivI32=_BinaryenDivSInt32()]="DivI32",e[e.DivU32=_BinaryenDivUInt32()]="DivU32",e[e.RemI32=_BinaryenRemSInt32()]="RemI32",e[e.RemU32=_BinaryenRemUInt32()]="RemU32",e[e.AndI32=_BinaryenAndInt32()]="AndI32",e[e.OrI32=_BinaryenOrInt32()]="OrI32",e[e.XorI32=_BinaryenXorInt32()]="XorI32",e[e.ShlI32=_BinaryenShlInt32()]="ShlI32",e[e.ShrU32=_BinaryenShrUInt32()]="ShrU32",e[e.ShrI32=_BinaryenShrSInt32()]="ShrI32",e[e.RotlI32=_BinaryenRotLInt32()]="RotlI32",e[e.RotrI32=_BinaryenRotRInt32()]="RotrI32",e[e.EqI32=_BinaryenEqInt32()]="EqI32",e[e.NeI32=_BinaryenNeInt32()]="NeI32",e[e.LtI32=_BinaryenLtSInt32()]="LtI32",e[e.LtU32=_BinaryenLtUInt32()]="LtU32",e[e.LeI32=_BinaryenLeSInt32()]="LeI32",e[e.LeU32=_BinaryenLeUInt32()]="LeU32",e[e.GtI32=_BinaryenGtSInt32()]="GtI32",e[e.GtU32=_BinaryenGtUInt32()]="GtU32",e[e.GeI32=_BinaryenGeSInt32()]="GeI32",e[e.GeU32=_BinaryenGeUInt32()]="GeU32",e[e.AddI64=_BinaryenAddInt64()]="AddI64",e[e.SubI64=_BinaryenSubInt64()]="SubI64",e[e.MulI64=_BinaryenMulInt64()]="MulI64",e[e.DivI64=_BinaryenDivSInt64()]="DivI64",e[e.DivU64=_BinaryenDivUInt64()]="DivU64",e[e.RemI64=_BinaryenRemSInt64()]="RemI64",e[e.RemU64=_BinaryenRemUInt64()]="RemU64",e[e.AndI64=_BinaryenAndInt64()]="AndI64",e[e.OrI64=_BinaryenOrInt64()]="OrI64",e[e.XorI64=_BinaryenXorInt64()]="XorI64",e[e.ShlI64=_BinaryenShlInt64()]="ShlI64",e[e.ShrU64=_BinaryenShrUInt64()]="ShrU64",e[e.ShrI64=_BinaryenShrSInt64()]="ShrI64",e[e.RotlI64=_BinaryenRotLInt64()]="RotlI64",e[e.RotrI64=_BinaryenRotRInt64()]="RotrI64",e[e.EqI64=_BinaryenEqInt64()]="EqI64",e[e.NeI64=_BinaryenNeInt64()]="NeI64",e[e.LtI64=_BinaryenLtSInt64()]="LtI64",e[e.LtU64=_BinaryenLtUInt64()]="LtU64",e[e.LeI64=_BinaryenLeSInt64()]="LeI64",e[e.LeU64=_BinaryenLeUInt64()]="LeU64",e[e.GtI64=_BinaryenGtSInt64()]="GtI64",e[e.GtU64=_BinaryenGtUInt64()]="GtU64",e[e.GeI64=_BinaryenGeSInt64()]="GeI64",e[e.GeU64=_BinaryenGeUInt64()]="GeU64",e[e.AddF32=_BinaryenAddFloat32()]="AddF32",e[e.SubF32=_BinaryenSubFloat32()]="SubF32",e[e.MulF32=_BinaryenMulFloat32()]="MulF32",e[e.DivF32=_BinaryenDivFloat32()]="DivF32",e[e.CopysignF32=_BinaryenCopySignFloat32()]="CopysignF32",e[e.MinF32=_BinaryenMinFloat32()]="MinF32",e[e.MaxF32=_BinaryenMaxFloat32()]="MaxF32",e[e.EqF32=_BinaryenEqFloat32()]="EqF32",e[e.NeF32=_BinaryenNeFloat32()]="NeF32",e[e.LtF32=_BinaryenLtFloat32()]="LtF32",e[e.LeF32=_BinaryenLeFloat32()]="LeF32",e[e.GtF32=_BinaryenGtFloat32()]="GtF32",e[e.GeF32=_BinaryenGeFloat32()]="GeF32",e[e.AddF64=_BinaryenAddFloat64()]="AddF64",e[e.SubF64=_BinaryenSubFloat64()]="SubF64",e[e.MulF64=_BinaryenMulFloat64()]="MulF64",e[e.DivF64=_BinaryenDivFloat64()]="DivF64",e[e.CopysignF64=_BinaryenCopySignFloat64()]="CopysignF64",e[e.MinF64=_BinaryenMinFloat64()]="MinF64",e[e.MaxF64=_BinaryenMaxFloat64()]="MaxF64",e[e.EqF64=_BinaryenEqFloat64()]="EqF64",e[e.NeF64=_BinaryenNeFloat64()]="NeF64",e[e.LtF64=_BinaryenLtFloat64()]="LtF64",e[e.LeF64=_BinaryenLeFloat64()]="LeF64",e[e.GtF64=_BinaryenGtFloat64()]="GtF64",e[e.GeF64=_BinaryenGeFloat64()]="GeF64"}(t.BinaryOp||(t.BinaryOp={})),function(e){e[e.CurrentMemory=_BinaryenCurrentMemory()]="CurrentMemory",e[e.GrowMemory=_BinaryenGrowMemory()]="GrowMemory"}(t.HostOp||(t.HostOp={})),function(e){e[e.Add=_BinaryenAtomicRMWAdd()]="Add",e[e.Sub=_BinaryenAtomicRMWSub()]="Sub",e[e.And=_BinaryenAtomicRMWAnd()]="And",e[e.Or=_BinaryenAtomicRMWOr()]="Or",e[e.Xor=_BinaryenAtomicRMWXor()]="Xor",e[e.Xchg=_BinaryenAtomicRMWXchg()]="Xchg"}(t.AtomicRMWOp||(t.AtomicRMWOp={}));var a=function(){function e(){}return e.create=function(t,r){var n=new e;return n.buffer=t,n.offset=r,n},e}();t.MemorySegment=a;var s=function(){function e(){this.cachedTemporaryName=0,this.hasTemporaryFunction=!1,this.cachedPrecomputeName=0,this.cachedPrecomputeNames=0}return e.create=function(){var t=new e;return t.ref=_BinaryenModuleCreate(),t.cachedByValue=memory.allocate(16),t},e.createFrom=function(t){var r=c(t);try{var n=new e;return n.ref=_BinaryenModuleRead(r,t.length),n.cachedByValue=memory.allocate(24),n}finally{memory.free(changetype(r))}},e.prototype.addFunctionType=function(e,t,r){var n=u(e),i=l(r);try{return _BinaryenAddFunctionType(this.ref,n,t,i,r?r.length:0)}finally{memory.free(i),memory.free(n)}},e.prototype.getFunctionTypeBySignature=function(e,t){var r=l(t);try{return _BinaryenGetFunctionTypeBySignature(this.ref,e,r,t?t.length:0)}finally{memory.free(r)}},e.prototype.removeFunctionType=function(e){var t=u(e);try{_BinaryenRemoveFunctionType(this.ref,t)}finally{memory.free(t)}},e.prototype.createI32=function(e){var t=this.cachedByValue;return _BinaryenLiteralInt32(t,e),_BinaryenConst(this.ref,t)},e.prototype.createI64=function(e,t){void 0===t&&(t=0);var r=this.cachedByValue;return _BinaryenLiteralInt64(r,e,t),_BinaryenConst(this.ref,r)},e.prototype.createF32=function(e){var t=this.cachedByValue;return _BinaryenLiteralFloat32(t,e),_BinaryenConst(this.ref,t)},e.prototype.createF64=function(e){var t=this.cachedByValue;return _BinaryenLiteralFloat64(t,e),_BinaryenConst(this.ref,t)},e.prototype.createUnary=function(e,t){return _BinaryenUnary(this.ref,e,t)},e.prototype.createBinary=function(e,t,r){return _BinaryenBinary(this.ref,e,t,r)},e.prototype.createHost=function(e,t,r){void 0===t&&(t=null),void 0===r&&(r=null);var n=u(t),i=p(r);try{return _BinaryenHost(this.ref,e,n,i,r?r.length:0)}finally{memory.free(i),memory.free(n)}},e.prototype.createGetLocal=function(e,t){return _BinaryenGetLocal(this.ref,e,t)},e.prototype.createTeeLocal=function(e,t){return _BinaryenTeeLocal(this.ref,e,t)},e.prototype.createGetGlobal=function(e,t){var r=u(e);try{return _BinaryenGetGlobal(this.ref,r,t)}finally{memory.free(r)}},e.prototype.createLoad=function(e,t,r,n,i){return void 0===i&&(i=0),_BinaryenLoad(this.ref,e,t?1:0,i,e,n,r)},e.prototype.createStore=function(e,t,r,n,i){return void 0===i&&(i=0),_BinaryenStore(this.ref,e,i,e,t,r,n)},e.prototype.createAtomicLoad=function(e,t,r,n){return void 0===n&&(n=0),_BinaryenAtomicLoad(this.ref,e,n,r,t)},e.prototype.createAtomicStore=function(e,t,r,n,i){return void 0===i&&(i=0),_BinaryenAtomicStore(this.ref,e,i,t,r,n)},e.prototype.createAtomicRMW=function(e,t,r,n,i,a){return _BinaryenAtomicRMW(this.ref,e,t,r,n,i,a)},e.prototype.createAtomicCmpxchg=function(e,t,r,n,i,a){return _BinaryenAtomicCmpxchg(this.ref,e,t,r,n,i,a)},e.prototype.createAtomicWait=function(e,t,r,n){return _BinaryenAtomicWait(this.ref,e,t,r,n)},e.prototype.createAtomicWake=function(e,t){return _BinaryenAtomicWake(this.ref,e,t)},e.prototype.createSetLocal=function(e,t){return _BinaryenSetLocal(this.ref,e,t)},e.prototype.createSetGlobal=function(e,t){var r=u(e);try{return _BinaryenSetGlobal(this.ref,r,t)}finally{memory.free(r)}},e.prototype.createBlock=function(e,t,r){void 0===r&&(r=0);var n=u(e),i=p(t);try{return _BinaryenBlock(this.ref,n,i,t.length,r)}finally{memory.free(i),memory.free(n)}},e.prototype.createBreak=function(e,t,r){void 0===t&&(t=0),void 0===r&&(r=0);var n=u(e);try{return _BinaryenBreak(this.ref,n,t,r)}finally{memory.free(n)}},e.prototype.createDrop=function(e){return _BinaryenDrop(this.ref,e)},e.prototype.createLoop=function(e,t){var r=u(e);try{return _BinaryenLoop(this.ref,r,t)}finally{memory.free(r)}},e.prototype.createIf=function(e,t,r){return void 0===r&&(r=0),_BinaryenIf(this.ref,e,t,r)},e.prototype.createNop=function(){return _BinaryenNop(this.ref)},e.prototype.createReturn=function(e){return void 0===e&&(e=0),_BinaryenReturn(this.ref,e)},e.prototype.createSelect=function(e,t,r){return _BinaryenSelect(this.ref,r,e,t)},e.prototype.createSwitch=function(e,t,r,n){void 0===n&&(n=0);for(var i=e.length,a=new Array(i),s=0;s=0;--s)memory.free(a[s])}},e.prototype.createCall=function(e,t,r){var n=u(e),i=p(t);try{return _BinaryenCall(this.ref,n,i,t&&t.length||0,r)}finally{memory.free(i),memory.free(n)}},e.prototype.createCallIndirect=function(e,t,r){var n=p(t),i=u(r);try{return _BinaryenCallIndirect(this.ref,e,n,t&&t.length||0,i)}finally{memory.free(i),memory.free(n)}},e.prototype.createUnreachable=function(){return _BinaryenUnreachable(this.ref)},e.prototype.addGlobal=function(e,t,r,n){var i=u(e);try{return _BinaryenAddGlobal(this.ref,i,t,r?1:0,n)}finally{memory.free(i)}},e.prototype.removeGlobal=function(e){var t=u(e);try{_BinaryenRemoveGlobal(this.ref,t)}finally{memory.free(t)}},e.prototype.addFunction=function(e,t,r,n){var i=u(e),a=l(r);try{return _BinaryenAddFunction(this.ref,i,t,a,r?r.length:0,n)}finally{memory.free(a),memory.free(i)}},e.prototype.removeFunction=function(e){var t=u(e);try{_BinaryenRemoveFunction(this.ref,t)}finally{memory.free(t)}},e.prototype.addTemporaryFunction=function(e,t,r){this.hasTemporaryFunction=assert(!this.hasTemporaryFunction);var n=this.cachedTemporaryName;n||(this.cachedTemporaryName=n=u(""));var i=l(t);try{var a=_BinaryenAddFunctionType(this.ref,n,e,i,t?t.length:0);return _BinaryenAddFunction(this.ref,n,a,0,0,r)}finally{memory.free(i)}},e.prototype.removeTemporaryFunction=function(){this.hasTemporaryFunction=!assert(this.hasTemporaryFunction);var e=assert(this.cachedTemporaryName);_BinaryenRemoveFunction(this.ref,e),_BinaryenRemoveFunctionType(this.ref,e)},e.prototype.addFunctionExport=function(e,t){var r=u(e),n=u(t);try{return _BinaryenAddFunctionExport(this.ref,r,n)}finally{memory.free(n),memory.free(r)}},e.prototype.addTableExport=function(e,t){var r=u(e),n=u(t);try{return _BinaryenAddTableExport(this.ref,r,n)}finally{memory.free(n),memory.free(r)}},e.prototype.addMemoryExport=function(e,t){var r=u(e),n=u(t);try{return _BinaryenAddMemoryExport(this.ref,r,n)}finally{memory.free(n),memory.free(r)}},e.prototype.addGlobalExport=function(e,t){var r=u(e),n=u(t);try{return _BinaryenAddGlobalExport(this.ref,r,n)}finally{memory.free(n),memory.free(r)}},e.prototype.removeExport=function(e){var t=u(e);try{_BinaryenRemoveExport(this.ref,t)}finally{memory.free(t)}},e.prototype.addFunctionImport=function(e,t,r,n){var i=u(e),a=u(t),s=u(r);try{return _BinaryenAddFunctionImport(this.ref,i,a,s,n)}finally{memory.free(s),memory.free(a),memory.free(i)}},e.prototype.addTableImport=function(e,t,r){var n=u(e),i=u(t),a=u(r);try{return _BinaryenAddTableImport(this.ref,n,i,a)}finally{memory.free(a),memory.free(i),memory.free(n)}},e.prototype.addMemoryImport=function(e,t,r){var n=u(e),i=u(t),a=u(r);try{return _BinaryenAddMemoryImport(this.ref,n,i,a)}finally{memory.free(a),memory.free(i),memory.free(n)}},e.prototype.addGlobalImport=function(e,t,r,n){var i=u(e),a=u(t),s=u(r);try{return _BinaryenAddGlobalImport(this.ref,i,a,s,n)}finally{memory.free(s),memory.free(a),memory.free(i)}},e.prototype.setMemory=function(e,t,r,n,a){void 0===a&&(a=null);for(var s=u(a),o=r.length,p=new Array(o),h=new Array(o),d=new Array(o),_=0;_=0;--_)memory.free(p[_]);memory.free(s)}},e.prototype.setFunctionTable=function(e,t,r){for(var n=r.length,i=new Array(n),a=0;a=0;--a)memory.free(i[a])}},e.prototype.setStart=function(e){_BinaryenSetStart(this.ref,e)},e.prototype.getOptimizeLevel=function(){return _BinaryenGetOptimizeLevel()},e.prototype.setOptimizeLevel=function(e){void 0===e&&(e=2),_BinaryenSetOptimizeLevel(e)},e.prototype.getShrinkLevel=function(){return _BinaryenGetShrinkLevel()},e.prototype.setShrinkLevel=function(e){void 0===e&&(e=1),_BinaryenSetShrinkLevel(e)},e.prototype.setDebugInfo=function(e){void 0===e&&(e=!1),_BinaryenSetDebugInfo(e)},e.prototype.optimize=function(e){void 0===e&&(e=0),e?_BinaryenFunctionOptimize(e,this.ref):_BinaryenModuleOptimize(this.ref)},e.prototype.runPasses=function(e,t){void 0===t&&(t=0);for(var r=e.length,n=new Array(r),i=0;i=0;--i)memory.free(n[i])}},e.prototype.precomputeExpression=function(e){var t=_BinaryenGetOptimizeLevel(),r=_BinaryenGetShrinkLevel(),n=_BinaryenGetDebugInfo();_BinaryenSetOptimizeLevel(4),_BinaryenSetShrinkLevel(0),_BinaryenSetDebugInfo(!1);var i=_BinaryenExpressionGetType(e),a=this.addTemporaryFunction(i,null,e),s=this.cachedPrecomputeNames;if(!s){var o=u("precompute");this.cachedPrecomputeName=o,this.cachedPrecomputeNames=s=l([o])}return _BinaryenFunctionRunPasses(a,this.ref,s,1),e=_BinaryenFunctionGetBody(a),this.removeTemporaryFunction(),_BinaryenSetOptimizeLevel(t),_BinaryenSetShrinkLevel(r),_BinaryenSetDebugInfo(n),e},e.prototype.validate=function(){return 1==_BinaryenModuleValidate(this.ref)},e.prototype.interpret=function(){_BinaryenModuleInterpret(this.ref)},e.prototype.toBinary=function(e){var t=this.cachedByValue,r=u(e),n=0,i=0;try{_BinaryenModuleAllocateAndWrite(t,this.ref,r),n=h(t);var a=h(t+4);i=h(t+8);var s=new _;return s.output=function(e,t){for(var r=new Uint8Array(t),n=0;n>8&255),store(r+2,a>>16&255),store(r+3,a>>>24),r+=4}return t}function p(e){return l(e)}function u(e){if(null==e)return 0;for(var t=memory.allocate(function(e){for(var t=0,r=0,n=e.length;r=55296&&i<=57343&&r+1=55296&&a<=57343&&n+1>>6),store(r++,128|63&a)):a<=65535?(store(r++,224|a>>>12),store(r++,128|a>>>6&63),store(r++,128|63&a)):a<=2097151?(store(r++,240|a>>>18),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a)):a<=67108863?(store(r++,248|a>>>24),store(r++,128|a>>>18&63),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a)):(store(r++,252|a>>>30),store(r++,128|a>>>24&63),store(r++,128|a>>>18&63),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a))}return store(r,0),t}function h(e){return load(e)|load(e+1)<<8|load(e+2)<<16|load(e+3)<<24}function d(e){if(!e)return null;for(var t,r,n,i,a,s=new Array;t=load(e++);)128&t?(r=63&load(e++),192!=(224&t)?(n=63&load(e++),224==(240&t)?t=(15&t)<<12|r<<6|n:(i=63&load(e++),240==(248&t)?t=(7&t)<<18|r<<12|n<<6|i:(a=63&load(e++),t=248==(252&t)?(3&t)<<24|r<<18|n<<12|i<<6|a:(1&t)<<30|r<<24|n<<18|i<<12|a<<6|63&load(e++))),s.push(t)):s.push((31&t)<<6|r)):s.push(t);return String.fromCodePoints(s)}t.Relooper=o,t.readString=d;var _=function(){return function(){}}();t.BinaryModule=_,t.needsExplicitUnreachable=function e(t){switch(_BinaryenExpressionGetType(t)){case 1:case 2:case 3:case 4:return!1}switch(_BinaryenExpressionGetId(t)){case n.Unreachable:case n.Return:return!1;case n.Break:return 0!=_BinaryenBreakGetCondition(t);case n.Block:if(!_BinaryenBlockGetName(t)){var r=_BinaryenBlockGetNumChildren(t);return r>0&&e(_BinaryenBlockGetChild(t,r-1))}}return!0}},function(e,t){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(4);!function(e){e[e.I8=0]="I8",e[e.I16=1]="I16",e[e.I32=2]="I32",e[e.I64=3]="I64",e[e.ISIZE=4]="ISIZE",e[e.U8=5]="U8",e[e.U16=6]="U16",e[e.U32=7]="U32",e[e.U64=8]="U64",e[e.USIZE=9]="USIZE",e[e.BOOL=10]="BOOL",e[e.F32=11]="F32",e[e.F64=12]="F64",e[e.VOID=13]="VOID"}(t.TypeKind||(t.TypeKind={})),function(e){e[e.NONE=0]="NONE",e[e.SIGNED=1]="SIGNED",e[e.UNSIGNED=2]="UNSIGNED",e[e.INTEGER=4]="INTEGER",e[e.FLOAT=8]="FLOAT",e[e.POINTER=16]="POINTER",e[e.SHORT=32]="SHORT",e[e.LONG=64]="LONG",e[e.VALUE=128]="VALUE",e[e.REFERENCE=256]="REFERENCE",e[e.NULLABLE=512]="NULLABLE"}(t.TypeFlags||(t.TypeFlags={}));var i=function(){function e(e,t,r){this.cachedNullableType=null,this.kind=e,this.flags=t,this.size=r,this.byteSize=ceil(r/8),this.classReference=null,this.signatureReference=null,this.nonNullableType=this}return Object.defineProperty(e.prototype,"intType",{get:function(){switch(this.kind){case 0:return e.i8;case 1:return e.i16;case 11:case 2:return e.i32;case 12:case 3:return e.i64;case 4:return 64==this.size?e.isize64:e.isize32;case 5:return e.u8;case 6:return e.u16;case 7:return e.u32;case 8:return e.u64;case 9:return 64==this.size?e.usize64:e.usize32;case 10:default:return e.i32}},enumerable:!0,configurable:!0}),e.prototype.isManaged=function(e){if(e.hasGC){var t=this.classReference;return null!==t&&!t.hasDecorator(n.DecoratorFlags.UNMANAGED)}return!1},e.prototype.computeSmallIntegerShift=function(e){return e.size-this.size},e.prototype.computeSmallIntegerMask=function(e){var t=this.is(2)?this.size:this.size-1;return-1>>>e.size-t},e.prototype.is=function(e){return(this.flags&e)==e},e.prototype.isAny=function(e){return 0!=(this.flags&e)},e.prototype.asClass=function(t){assert(9==this.kind&&!this.classReference);var r=new e(this.kind,-129&this.flags|256,this.size);return r.classReference=t,r},e.prototype.asFunction=function(t){assert(7==this.kind&&!this.signatureReference);var r=new e(this.kind,-129&this.flags|256,this.size);return r.signatureReference=t,r},e.prototype.asNullable=function(){return assert(this.is(256)),this.cachedNullableType||(assert(!this.is(512)),this.cachedNullableType=new e(this.kind,512|this.flags,this.size),this.cachedNullableType.nonNullableType=this,this.cachedNullableType.classReference=this.classReference,this.cachedNullableType.signatureReference=this.signatureReference),this.cachedNullableType},e.prototype.isAssignableTo=function(t,r){var n,i,a,s;if(void 0===r&&(r=!1),this.is(256)){if(t.is(256)&&(!this.is(512)||t.is(512)))if(n=this.classReference){if(i=t.classReference)return n.isAssignableTo(i)}else if((a=this.signatureReference)&&(s=t.signatureReference))return a.isAssignableTo(s)}else if(!t.is(256))if(this.is(4))if(t.is(4)){if(!r||this==e.bool||this.is(1)==t.is(1))return this.size<=t.size}else{if(11==t.kind)return this.size<=23;if(12==t.kind)return this.size<=52}else if(this.is(8)&&t.is(8))return this.size<=t.size;return!1},e.commonCompatible=function(e,t,r){return t.isAssignableTo(e,r)?e:e.isAssignableTo(t,r)?t:null},e.prototype.toString=function(e){if(void 0===e&&(e=!1),!e&&this.is(256)){var t=this.classReference;if(t)return this.is(512)?t.toString()+" | null":t.toString();var r=this.signatureReference;if(r)return this.is(512)?"("+r.toString(!0)+") | null":r.toString(!0);assert(!1)}switch(this.kind){case 0:return"i8";case 1:return"i16";case 2:return"i32";case 3:return"i64";case 4:return"isize";case 5:return"u8";case 6:return"u16";case 7:return"u32";case 8:return"u64";case 9:return"usize";case 10:return"bool";case 11:return"f32";case 12:return"f64";default:assert(!1);case 13:return"void"}},e.prototype.toNativeType=function(){switch(this.kind){default:return 1;case 3:case 8:return 2;case 4:case 9:return 64==this.size?2:1;case 11:return 3;case 12:return 4;case 13:return 0}},e.prototype.toNativeZero=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(0);case 4:case 9:if(64!=this.size)return e.createI32(0);case 3:case 8:return e.createI64(0);case 11:return e.createF32(0);case 12:return e.createF64(0)}},e.prototype.toNativeOne=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(1);case 4:case 9:if(64!=this.size)return e.createI32(1);case 3:case 8:return e.createI64(1);case 11:return e.createF32(1);case 12:return e.createF64(1)}},e.prototype.toNativeNegOne=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(-1);case 4:case 9:if(64!=this.size)return e.createI32(-1);case 3:case 8:return e.createI64(-1,-1);case 11:return e.createF32(-1);case 12:return e.createF64(-1)}},e.prototype.toSignatureString=function(){switch(this.kind){default:return"i";case 3:case 8:return"I";case 4:case 9:return 64==this.size?"I":"i";case 11:return"f";case 12:return"F";case 13:return"v"}},e.i8=new e(0,165,8),e.i16=new e(1,165,16),e.i32=new e(2,133,32),e.i64=new e(3,197,64),e.isize32=new e(4,149,32),e.isize64=new e(4,213,64),e.u8=new e(5,166,8),e.u16=new e(6,166,16),e.u32=new e(7,134,32),e.u64=new e(8,198,64),e.usize32=new e(9,150,32),e.usize64=new e(9,214,64),e.bool=new e(10,166,1),e.f32=new e(11,137,32),e.f64=new e(12,201,64),e.void=new e(13,0,0),e}();t.Type=i,t.typesToNativeTypes=function(e){for(var t=e.length,r=new Array(t),n=0;ne?t[e]:o(e)},e.prototype.isAssignableTo=function(e){var t=this.thisType,r=e.thisType;if(t){if(!r||!t.isAssignableTo(r))return!1}else if(r)return!1;if(this.hasRest!=e.hasRest)return!1;var n=this.parameterTypes,i=e.parameterTypes,a=n.length;if(a!=i.length)return!1;for(var s=0;s=l&&u!=p?t.push("?: "):t.push(": "),t.push(i[u].toString());return t.push(") => "),t.push(this.returnType.toString()),t.join("")},e}();t.Signature=a;var s=null;function o(e){s||(s=[]);for(var t=s.length;t<=e;++t)s.push("arg$"+t.toString(10));return s[e-1]}t.getDefaultParameterName=o},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(t,r)};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}();Object.defineProperty(t,"__esModule",{value:!0});var i,a,s=r(1),o=r(3),c=r(2);function l(e){switch(assert(e.length),e.charCodeAt(0)){case 97:switch(e){case"abstract":return i.ABSTRACT;case"as":return i.AS;case"async":return i.ASYNC;case"await":return i.AWAIT}break;case 98:switch(e){case"break":return i.BREAK}break;case 99:switch(e){case"case":return i.CASE;case"catch":return i.CATCH;case"class":return i.CLASS;case"continue":return i.CONTINUE;case"const":return i.CONST;case"constructor":return i.CONSTRUCTOR}break;case 100:switch(e){case"debugger":return i.DEBUGGER;case"declare":return i.DECLARE;case"default":return i.DEFAULT;case"delete":return i.DELETE;case"do":return i.DO}break;case 101:switch(e){case"else":return i.ELSE;case"enum":return i.ENUM;case"export":return i.EXPORT;case"extends":return i.EXTENDS}break;case 102:switch(e){case"false":return i.FALSE;case"finally":return i.FINALLY;case"for":return i.FOR;case"from":return i.FROM;case"function":return i.FUNCTION}break;case 103:switch(e){case"get":return i.GET}break;case 105:switch(e){case"if":return i.IF;case"implements":return i.IMPLEMENTS;case"import":return i.IMPORT;case"in":return i.IN;case"instanceof":return i.INSTANCEOF;case"interface":return i.INTERFACE;case"is":return i.IS}break;case 107:switch(e){case"keyof":return i.KEYOF}break;case 108:switch(e){case"let":return i.LET}break;case 109:switch(e){case"module":return i.MODULE}break;case 110:switch(e){case"namespace":return i.NAMESPACE;case"new":return i.NEW;case"null":return i.NULL}break;case 111:switch(e){case"of":return i.OF}break;case 112:switch(e){case"package":return i.PACKAGE;case"private":return i.PRIVATE;case"protected":return i.PROTECTED;case"public":return i.PUBLIC}break;case 114:switch(e){case"readonly":return i.READONLY;case"return":return i.RETURN}break;case 115:switch(e){case"set":return i.SET;case"static":return i.STATIC;case"super":return i.SUPER;case"switch":return i.SWITCH}break;case 116:switch(e){case"this":return i.THIS;case"throw":return i.THROW;case"true":return i.TRUE;case"try":return i.TRY;case"type":return i.TYPE;case"typeof":return i.TYPEOF}break;case 118:switch(e){case"var":return i.VAR;case"void":return i.VOID}break;case 119:switch(e){case"while":return i.WHILE;case"with":return i.WITH}break;case 121:switch(e){case"yield":return i.YIELD}}return i.INVALID}function p(e){switch(e){case i.ABSTRACT:case i.AS:case i.CONSTRUCTOR:case i.DECLARE:case i.DELETE:case i.FROM:case i.FOR:case i.GET:case i.IS:case i.KEYOF:case i.MODULE:case i.NAMESPACE:case i.READONLY:case i.SET:case i.TYPE:case i.VOID:return!0;default:return!1}}!function(e){e[e.ABSTRACT=0]="ABSTRACT",e[e.AS=1]="AS",e[e.ASYNC=2]="ASYNC",e[e.AWAIT=3]="AWAIT",e[e.BREAK=4]="BREAK",e[e.CASE=5]="CASE",e[e.CATCH=6]="CATCH",e[e.CLASS=7]="CLASS",e[e.CONST=8]="CONST",e[e.CONTINUE=9]="CONTINUE",e[e.CONSTRUCTOR=10]="CONSTRUCTOR",e[e.DEBUGGER=11]="DEBUGGER",e[e.DECLARE=12]="DECLARE",e[e.DEFAULT=13]="DEFAULT",e[e.DELETE=14]="DELETE",e[e.DO=15]="DO",e[e.ELSE=16]="ELSE",e[e.ENUM=17]="ENUM",e[e.EXPORT=18]="EXPORT",e[e.EXTENDS=19]="EXTENDS",e[e.FALSE=20]="FALSE",e[e.FINALLY=21]="FINALLY",e[e.FOR=22]="FOR",e[e.FROM=23]="FROM",e[e.FUNCTION=24]="FUNCTION",e[e.GET=25]="GET",e[e.IF=26]="IF",e[e.IMPLEMENTS=27]="IMPLEMENTS",e[e.IMPORT=28]="IMPORT",e[e.IN=29]="IN",e[e.INSTANCEOF=30]="INSTANCEOF",e[e.INTERFACE=31]="INTERFACE",e[e.IS=32]="IS",e[e.KEYOF=33]="KEYOF",e[e.LET=34]="LET",e[e.MODULE=35]="MODULE",e[e.NAMESPACE=36]="NAMESPACE",e[e.NEW=37]="NEW",e[e.NULL=38]="NULL",e[e.OF=39]="OF",e[e.PACKAGE=40]="PACKAGE",e[e.PRIVATE=41]="PRIVATE",e[e.PROTECTED=42]="PROTECTED",e[e.PUBLIC=43]="PUBLIC",e[e.READONLY=44]="READONLY",e[e.RETURN=45]="RETURN",e[e.SET=46]="SET",e[e.STATIC=47]="STATIC",e[e.SUPER=48]="SUPER",e[e.SWITCH=49]="SWITCH",e[e.THIS=50]="THIS",e[e.THROW=51]="THROW",e[e.TRUE=52]="TRUE",e[e.TRY=53]="TRY",e[e.TYPE=54]="TYPE",e[e.TYPEOF=55]="TYPEOF",e[e.VAR=56]="VAR",e[e.VOID=57]="VOID",e[e.WHILE=58]="WHILE",e[e.WITH=59]="WITH",e[e.YIELD=60]="YIELD",e[e.OPENBRACE=61]="OPENBRACE",e[e.CLOSEBRACE=62]="CLOSEBRACE",e[e.OPENPAREN=63]="OPENPAREN",e[e.CLOSEPAREN=64]="CLOSEPAREN",e[e.OPENBRACKET=65]="OPENBRACKET",e[e.CLOSEBRACKET=66]="CLOSEBRACKET",e[e.DOT=67]="DOT",e[e.DOT_DOT_DOT=68]="DOT_DOT_DOT",e[e.SEMICOLON=69]="SEMICOLON",e[e.COMMA=70]="COMMA",e[e.LESSTHAN=71]="LESSTHAN",e[e.GREATERTHAN=72]="GREATERTHAN",e[e.LESSTHAN_EQUALS=73]="LESSTHAN_EQUALS",e[e.GREATERTHAN_EQUALS=74]="GREATERTHAN_EQUALS",e[e.EQUALS_EQUALS=75]="EQUALS_EQUALS",e[e.EXCLAMATION_EQUALS=76]="EXCLAMATION_EQUALS",e[e.EQUALS_EQUALS_EQUALS=77]="EQUALS_EQUALS_EQUALS",e[e.EXCLAMATION_EQUALS_EQUALS=78]="EXCLAMATION_EQUALS_EQUALS",e[e.EQUALS_GREATERTHAN=79]="EQUALS_GREATERTHAN",e[e.PLUS=80]="PLUS",e[e.MINUS=81]="MINUS",e[e.ASTERISK_ASTERISK=82]="ASTERISK_ASTERISK",e[e.ASTERISK=83]="ASTERISK",e[e.SLASH=84]="SLASH",e[e.PERCENT=85]="PERCENT",e[e.PLUS_PLUS=86]="PLUS_PLUS",e[e.MINUS_MINUS=87]="MINUS_MINUS",e[e.LESSTHAN_LESSTHAN=88]="LESSTHAN_LESSTHAN",e[e.GREATERTHAN_GREATERTHAN=89]="GREATERTHAN_GREATERTHAN",e[e.GREATERTHAN_GREATERTHAN_GREATERTHAN=90]="GREATERTHAN_GREATERTHAN_GREATERTHAN",e[e.AMPERSAND=91]="AMPERSAND",e[e.BAR=92]="BAR",e[e.CARET=93]="CARET",e[e.EXCLAMATION=94]="EXCLAMATION",e[e.TILDE=95]="TILDE",e[e.AMPERSAND_AMPERSAND=96]="AMPERSAND_AMPERSAND",e[e.BAR_BAR=97]="BAR_BAR",e[e.QUESTION=98]="QUESTION",e[e.COLON=99]="COLON",e[e.EQUALS=100]="EQUALS",e[e.PLUS_EQUALS=101]="PLUS_EQUALS",e[e.MINUS_EQUALS=102]="MINUS_EQUALS",e[e.ASTERISK_EQUALS=103]="ASTERISK_EQUALS",e[e.ASTERISK_ASTERISK_EQUALS=104]="ASTERISK_ASTERISK_EQUALS",e[e.SLASH_EQUALS=105]="SLASH_EQUALS",e[e.PERCENT_EQUALS=106]="PERCENT_EQUALS",e[e.LESSTHAN_LESSTHAN_EQUALS=107]="LESSTHAN_LESSTHAN_EQUALS",e[e.GREATERTHAN_GREATERTHAN_EQUALS=108]="GREATERTHAN_GREATERTHAN_EQUALS",e[e.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS=109]="GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS",e[e.AMPERSAND_EQUALS=110]="AMPERSAND_EQUALS",e[e.BAR_EQUALS=111]="BAR_EQUALS",e[e.CARET_EQUALS=112]="CARET_EQUALS",e[e.AT=113]="AT",e[e.IDENTIFIER=114]="IDENTIFIER",e[e.STRINGLITERAL=115]="STRINGLITERAL",e[e.INTEGERLITERAL=116]="INTEGERLITERAL",e[e.FLOATLITERAL=117]="FLOATLITERAL",e[e.INVALID=118]="INVALID",e[e.ENDOFFILE=119]="ENDOFFILE"}(i=t.Token||(t.Token={})),function(e){e[e.DEFAULT=0]="DEFAULT",e[e.PREFER=1]="PREFER",e[e.ALWAYS=2]="ALWAYS"}(a=t.IdentifierHandling||(t.IdentifierHandling={})),t.tokenFromKeyword=l,t.tokenIsAlsoIdentifier=p,t.operatorTokenToString=function(e){switch(e){case i.DELETE:return"delete";case i.IN:return"in";case i.INSTANCEOF:return"instanceof";case i.NEW:return"new";case i.TYPEOF:return"typeof";case i.VOID:return"void";case i.YIELD:return"yield";case i.DOT_DOT_DOT:return"...";case i.COMMA:return",";case i.LESSTHAN:return"<";case i.GREATERTHAN:return">";case i.LESSTHAN_EQUALS:return"<=";case i.GREATERTHAN_EQUALS:return">=";case i.EQUALS_EQUALS:return"==";case i.EXCLAMATION_EQUALS:return"!=";case i.EQUALS_EQUALS_EQUALS:return"===";case i.EXCLAMATION_EQUALS_EQUALS:return"!==";case i.PLUS:return"+";case i.MINUS:return"-";case i.ASTERISK_ASTERISK:return"**";case i.ASTERISK:return"*";case i.SLASH:return"/";case i.PERCENT:return"%";case i.PLUS_PLUS:return"++";case i.MINUS_MINUS:return"--";case i.LESSTHAN_LESSTHAN:return"<<";case i.GREATERTHAN_GREATERTHAN:return">>";case i.GREATERTHAN_GREATERTHAN_GREATERTHAN:return">>>";case i.AMPERSAND:return"&";case i.BAR:return"|";case i.CARET:return"^";case i.EXCLAMATION:return"!";case i.TILDE:return"~";case i.AMPERSAND_AMPERSAND:return"&&";case i.BAR_BAR:return"||";case i.EQUALS:return"=";case i.PLUS_EQUALS:return"+=";case i.MINUS_EQUALS:return"-=";case i.ASTERISK_EQUALS:return"*=";case i.ASTERISK_ASTERISK_EQUALS:return"**=";case i.SLASH_EQUALS:return"/=";case i.PERCENT_EQUALS:return"%=";case i.LESSTHAN_LESSTHAN_EQUALS:return"<<=";case i.GREATERTHAN_GREATERTHAN_EQUALS:return">>=";case i.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:return">>>=";case i.AMPERSAND_EQUALS:return"&=";case i.BAR_EQUALS:return"|=";case i.CARET_EQUALS:return"^=";default:return assert(!1),""}};var u=function(){function e(e,t,r){this.debugInfoRef=0,this.source=e,this.start=t,this.end=r}return e.join=function(t,r){if(t.source!=r.source)throw new Error("source mismatch");return new e(t.source,t.startr.end?t.end:r.end)},Object.defineProperty(e.prototype,"atStart",{get:function(){return new e(this.source,this.start,this.start)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"atEnd",{get:function(){return new e(this.source,this.end,this.end)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"line",{get:function(){for(var e=this.source.text,t=1,r=this.start;r>=0;--r)10==e.charCodeAt(r)&&t++;return t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"column",{get:function(){for(var e=this.source.text,t=0,r=this.start-1;r>=0&&10!=e.charCodeAt(r);--r)++t;return t},enumerable:!0,configurable:!0}),e.prototype.toString=function(){return this.source.text.substring(this.start,this.end)},e}();t.Range=u;var h=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,r)||this;n.end=0,n.pos=0,n.token=-1,n.tokenPos=0,n.nextToken=-1,n.nextTokenPos=0,n.nextTokenOnNewLine=!1,n.onComment=null,n.source=t,n.pos=0,n.end=t.text.length,n.diagnostics=r||new Array;var i=t.text;if(n.pos1&&this.pos2&&this.pos1&&this.pos1&&this.pos1&&this.pos2&&this.pos1&&this.pos1&&this.pos1&&this.pos2&&this.pos+11&&this.pos1&&this.pos2&&this.pos1&&this.pos2&&this.pos1&&this.pos2&&this.pos3&&this.pos1&&this.pos1&&this.pos=this.end){n+=e.substring(r,this.pos),this.error(s.DiagnosticCode.Unterminated_string_literal,this.range(r-1,this.end));break}var i=e.charCodeAt(this.pos);if(i==t){n+=e.substring(r,this.pos++);break}if(92!=i){if(c.isLineBreak(i)){n+=e.substring(r,this.pos),this.error(s.DiagnosticCode.Unterminated_string_literal,this.range(r-1,this.pos));break}++this.pos}else n+=e.substring(r,this.pos),n+=this.readEscapeSequence(),r=this.pos}return n},t.prototype.readEscapeSequence=function(){if(++this.pos>=this.end)return this.error(s.DiagnosticCode.Unexpected_end_of_text,this.range(this.end)),"";var e=this.source.text,t=e.charCodeAt(this.pos++);switch(t){case 48:return"\0";case 98:return"\b";case 116:return"\t";case 110:return"\n";case 118:return"\v";case 102:return"\f";case 114:return"\r";case 39:return"'";case 34:return'"';case 117:return this.pos=this.end){this.error(s.DiagnosticCode.Unterminated_regular_expression_literal,this.range(t,this.end));break}if(92!=e.charCodeAt(this.pos)){var n=e.charCodeAt(this.pos);if(47==n&&!r)break;if(c.isLineBreak(n)){this.error(s.DiagnosticCode.Unterminated_regular_expression_literal,this.range(t,this.pos));break}++this.pos,r=!1}else++this.pos,r=!0}return e.substring(t,this.pos)},t.prototype.readRegexpFlags=function(){for(var e=this.source.text,t=this.pos,r=0;this.pos57)&&95!=r)break;t++}return!0},t.prototype.readInteger=function(){var e=this.source.text;if(48==e.charCodeAt(this.pos)&&this.pos+2=48&&o<=57)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else if(o>=65&&o<=70)r=i64_add(i64_mul(r,n),i64_new(10+o-65,0));else if(o>=97&&o<=102)r=i64_add(i64_mul(r,n),i64_new(10+o-97,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}this.pos=a+1}return this.pos==t?this.error(s.DiagnosticCode.Hexadecimal_digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readDecimalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(10,0),i=t;this.pos=48&&o<=57)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}this.pos=a+1}return this.pos==t?this.error(s.DiagnosticCode.Digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readOctalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(8,0),i=t;this.pos=48&&o<=55)r=i64_add(i64_mul(r,n),i64_new(o-48,0));else{if(95!=o)break;i==a&&this.error(i==t?s.DiagnosticCode.Numeric_separators_are_not_allowed_here:s.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}++this.pos}return this.pos==t?this.error(s.DiagnosticCode.Octal_digit_expected,this.range(t)):i==this.pos&&this.error(s.DiagnosticCode.Numeric_separators_are_not_allowed_here,this.range(i-1)),r},t.prototype.readBinaryInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(2,0),i=i64_new(1,0),a=t;this.pos=48&&n<=57)t=16*t+n-48;else if(n>=65&&n<=70)t=16*t+10+n-65;else{if(!(n>=97&&n<=102))return this.error(s.DiagnosticCode.Hexadecimal_digit_expected,this.range(this.pos-1,this.pos)),"";t=16*t+10+n-97}if(0==--e)break}return e?(this.error(s.DiagnosticCode.Unexpected_end_of_text,this.range(this.pos)),""):String.fromCharCode(t)},t.prototype.readExtendedUnicodeEscape=function(){var e=this.pos,t=this.readHexInteger(),r=i64_low(t),n=!1;assert(!i64_high(t)),r>1114111&&(this.error(s.DiagnosticCode.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive,this.range(e,this.pos)),n=!0);var i=this.source.text;return this.pos>=this.end?(this.error(s.DiagnosticCode.Unexpected_end_of_text,this.range(e,this.end)),n=!0):125==i.charCodeAt(this.pos)?++this.pos:(this.error(s.DiagnosticCode.Unterminated_Unicode_escape_sequence,this.range(e,this.pos)),n=!0),n?"":r<65536?String.fromCharCode(r):String.fromCharCode(55296+((r-65536)/1024|0),(r-65536)%1024+56320)},t.prototype.finish=function(){},t}(s.DiagnosticEmitter);t.Tokenizer=h;var d=function(){return function(){}}();t.State=d;var _=null},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(t,r)};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),i=this&&this.__values||function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],r=0;return t?t.call(e):{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)s.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return s};Object.defineProperty(t,"__esModule",{value:!0});var s,o=r(20),c=r(1),l=r(5),p=r(0),u=r(4),h=r(8),d=r(3),_=r(7),m=r(2);!function(e){e[e.WASM32=0]="WASM32",e[e.WASM64=1]="WASM64"}(s=t.Target||(t.Target={}));var g=function(){function e(){this.target=s.WASM32,this.noTreeShaking=!1,this.noAssert=!1,this.importMemory=!1,this.importTable=!1,this.sourceMap=!1,this.memoryBase=0,this.globalAliases=null,this.features=0,this.optimizeLevelHint=0,this.shrinkLevelHint=0}return Object.defineProperty(e.prototype,"isWasm64",{get:function(){return this.target==s.WASM64},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"usizeType",{get:function(){return this.target==s.WASM64?_.Type.usize64:_.Type.usize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isizeType",{get:function(){return this.target==s.WASM64?_.Type.isize64:_.Type.isize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"nativeSizeType",{get:function(){return this.target==s.WASM64?2:1},enumerable:!0,configurable:!0}),e.prototype.hasFeature=function(e){return 0!=(this.features&e)},e}();t.Options=g,function(e){e[e.NONE=0]="NONE",e[e.SIGN_EXTENSION=1]="SIGN_EXTENSION",e[e.MUTABLE_GLOBAL=2]="MUTABLE_GLOBAL"}(t.Feature||(t.Feature={})),function(e){e[e.NONE=0]="NONE",e[e.IMPLICIT=1]="IMPLICIT",e[e.EXPLICIT=2]="EXPLICIT"}(t.ConversionKind||(t.ConversionKind={})),function(e){e[e.NONE=0]="NONE",e[e.WRAP=1]="WRAP"}(t.WrapMode||(t.WrapMode={}));var y,E,f=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,t.diagnostics)||this;return n.currentOuterFunction=null,n.currentInlineFunctions=[],n.currentEnum=null,n.currentType=_.Type.void,n.memorySegments=[],n.stringSegments=new Map,n.functionTable=["null"],n.argcVar=0,n.argcSet=0,n.needsIterateRoots=!1,n.f32ModInstance=null,n.f64ModInstance=null,n.f32PowInstance=null,n.f64PowInstance=null,n.program=t,n.resolver=t.resolver,r||(r=new g),n.options=r,n.memoryOffset=i64_new(max(r.memoryBase,8)),n.module=l.Module.create(),n}return n(t,e),t.compile=function(e,r){return void 0===r&&(r=null),new t(e,r).compile()},t.prototype.compile=function(){var e,t,r=this.options,n=this.module,s=this.program;s.initialize(r);var c=new u.Function(s.startFunction,"start",new _.Signature([],_.Type.void));this.startFunctionInstance=c;var p=new Array;this.startFunctionBody=p,this.currentFunction=c,r.isWasm64?n.addGlobal("HEAP_BASE",2,!0,n.createI64(0,0)):n.addGlobal("HEAP_BASE",1,!1,n.createI32(0));for(var h=s.sources,d=0,m=h.length;d"),!1;e.type=this.currentType}else assert(!1);if(e.is(p.CommonFlags.AMBIENT)&&e.hasDecorator(u.DecoratorFlags.BUILTIN))return!0;var a=e.type.toNativeType(),s=e.is(p.CommonFlags.CONST)||e.is(p.CommonFlags.STATIC|p.CommonFlags.READONLY);if(e.is(p.CommonFlags.AMBIENT))return s||this.options.hasFeature(2)?(e.set(p.CommonFlags.MODULE_IMPORT),r?T(e,r):(y="env",E=e.simpleName),t.addGlobalImport(e.internalName,y,E,a),e.set(p.CommonFlags.COMPILED),!0):(this.error(c.DiagnosticCode.Operation_not_supported,assert(r).range),!1);var o=!1;if(null!==r&&null!==r.initializer){if(n||(n=this.compileExpression(r.initializer,e.type,1,1)),l.getExpressionId(n)!=l.ExpressionId.Const&&(s?(n=t.precomputeExpression(n),l.getExpressionId(n)!=l.ExpressionId.Const&&(this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,r.range),o=!0)):o=!0),e.hasDecorator(u.DecoratorFlags.INLINE)&&!o){switch(assert(l.getExpressionId(n)==l.ExpressionId.Const),l.getExpressionType(n)){case 1:e.constantValueKind=1,e.constantIntegerValue=i64_new(l.getConstValueI32(n),0);break;case 2:e.constantValueKind=1,e.constantIntegerValue=i64_new(l.getConstValueI64Low(n),l.getConstValueI64High(n));break;case 3:e.constantValueKind=2,e.constantFloatValue=l.getConstValueF32(n);break;case 4:e.constantValueKind=2,e.constantFloatValue=l.getConstValueF64(n);break;default:return assert(!1),!1}e.set(p.CommonFlags.INLINED)}}else n=e.type.toNativeZero(t);var h=e.internalName;return o?(t.addGlobal(h,a,!0,e.type.toNativeZero(t)),this.startFunctionBody.push(t.createSetGlobal(h,n))):t.addGlobal(h,a,!s,n),!0},t.prototype.compileEnumDeclaration=function(e){var t=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(t.kind==u.ElementKind.ENUM),this.compileEnum(t)?t:null},t.prototype.compileEnum=function(e){var t,r;if(e.is(p.CommonFlags.COMPILED))return!0;e.set(p.CommonFlags.COMPILED);var n=this.module;this.currentEnum=e;var a=null,s=!1;if(e.members)try{for(var o=i(e.members.values()),h=o.next();!h.done;h=o.next()){var d=h.value;if(d.kind==u.ElementKind.ENUMVALUE){var m=!1,g=d,y=g.declaration;g.set(p.CommonFlags.COMPILED);var E=void 0;y.value?(E=this.compileExpression(y.value,_.Type.i32,1,0),l.getExpressionId(E)!=l.ExpressionId.Const&&(e.is(p.CommonFlags.CONST)?(E=n.precomputeExpression(E),l.getExpressionId(E)!=l.ExpressionId.Const&&(this.error(c.DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,y.value.range),m=!0)):m=!0)):null==a?E=n.createI32(0):(s&&this.error(c.DiagnosticCode.Enum_member_must_have_initializer,y.range),E=n.createBinary(l.BinaryOp.AddI32,n.createGetGlobal(a.internalName,1),n.createI32(1)),E=n.precomputeExpression(E),l.getExpressionId(E)!=l.ExpressionId.Const&&(e.is(p.CommonFlags.CONST)&&this.error(c.DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,y.range),m=!0)),m?(n.addGlobal(g.internalName,1,!0,n.createI32(0)),this.startFunctionBody.push(n.createSetGlobal(g.internalName,E)),s=!0):(n.addGlobal(g.internalName,1,!e.is(p.CommonFlags.CONST),E),s=!1),a=g}}}catch(e){t={error:e}}finally{try{h&&!h.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}return this.currentEnum=null,!0},t.prototype.compileFunctionDeclaration=function(e,t,r){void 0===r&&(r=null);var n=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(n.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.compileFunctionUsingTypeArguments(n,t,r,null,n.declaration.name)},t.prototype.compileFunctionUsingTypeArguments=function(e,t,r,n,i){var a=this.resolver.resolveFunctionInclTypeArguments(e,t,r,i);return a?(a.outerScope=n,this.compileFunction(a)?a:null):null},t.prototype.ensureFunctionType=function(e,t,r){void 0===r&&(r=null);var n,i=e?e.length:0,a=0;if(r?((n=new Array(1+i))[0]=r.toNativeType(),a=1):n=new Array(i),e)for(var s=0;s=0)return e.functionTableIndex;var t=this.functionTable,r=t.length;return!e.is(p.CommonFlags.TRAMPOLINE)&&e.signature.requiredParameters=0?"case"+h.toString(10):"break")+"|"+a);var g=t.createBlock("case0|"+a,p,0),y=!0,E=!0,f=!0,T=!0;for(d=0;d=0&&(y&&s.set(1),E&&s.set(2),f&&s.set(4),T&&s.set(32)),g},t.prototype.compileThrowStatement=function(e){var t=this.currentFunction.flow;return t.set(4),t.set(1),o.compileAbort(this,null,e)},t.prototype.compileTryStatement=function(e){return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileVariableStatement=function(e,t){void 0===t&&(t=!1);var r=this.program,n=this.currentFunction,i=e.declarations,a=i.length;if(t||n==this.startFunctionInstance&&e.parent&&e.parent.kind==d.NodeKind.SOURCE){for(var s=0;s");continue}E=this.currentType}var T=!1;if(g.is(p.CommonFlags.CONST))if(f)if(f=this.module.precomputeExpression(f),l.getExpressionId(f)==l.ExpressionId.Const){var I=new u.Local(r,y,-1,E);switch(l.getExpressionType(f)){case 1:I=I.withConstantIntegerValue(i64_new(l.getConstValueI32(f),0));break;case 2:I=I.withConstantIntegerValue(i64_new(l.getConstValueI64Low(f),l.getConstValueI64High(f)));break;case 3:I=I.withConstantFloatValue(l.getConstValueF32(f));break;case 4:I=I.withConstantFloatValue(l.getConstValueF64(f));break;default:return assert(!1),this.module.createUnreachable()}var v=n.flow.scopedLocals;if(v){if(v.has(y))return this.error(c.DiagnosticCode.Duplicate_identifier_0,g.name.range,y),this.module.createUnreachable()}else n.flow.scopedLocals=v=new Map;v.set(y,I),T=!0}else this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,g.range);else this.error(c.DiagnosticCode._const_declarations_must_be_initialized,g.range);if(!T){I=void 0;I=g.isAny(p.CommonFlags.LET|p.CommonFlags.CONST)||h.is(2048)?h.addScopedLocal(E,y,!1,g):n.addLocal(E,y,g),f?(o.push(this.compileAssignmentWithValue(g.name,f)),I.type.is(36)&&h.setLocalWrapped(I.index,!h.canOverflow(f,E))):I.type.is(36)&&h.setLocalWrapped(I.index,!0)}}return o.length?1==o.length?o[0]:this.module.createBlock(null,o,0):0},t.prototype.compileVoidStatement=function(e){return this.compileExpression(e.expression,_.Type.void,2,0)},t.prototype.compileWhileStatement=function(e){var t=this.module,r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,_.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(p.CommonFlags.GENERIC|p.CommonFlags.GENERIC_CONTEXT)){var n=t.precomputeExpression(r);if(l.getExpressionId(n)==l.ExpressionId.Const&&1==l.getExpressionType(n)){if(!l.getConstValueI32(n))return t.createNop()}else r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,_.Type.bool,0),this.currentType)}var i=this.currentFunction,a=i.enterBreakContext(),s=i.flow,o=s.fork();i.flow=o;var c="break|"+a;o.breakLabel=c;var u="continue|"+a;o.continueLabel=u;var h=this.compileStatement(e.statement),d=o.isAny(29);return i.flow=o.free(),i.leaveBreakContext(),o.unset(792),s.inheritConditional(o),t.createBlock(c,[t.createLoop(u,t.createIf(r,d?h:t.createBlock(null,[h,t.createBreak(u)],0)))])},t.prototype.compileInlineConstant=function(e,t,r){assert(e.is(p.CommonFlags.INLINED));var n=e.type;switch(!r&&n.is(4)&&t.is(4)&&n.size>i:0);case 5:case 6:case 10:var a=e.type.computeSmallIntegerMask(_.Type.i32);return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue)&a:0);case 2:case 7:return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 4:case 9:if(!e.program.options.isWasm64)return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 3:case 8:return 1==e.constantValueKind?this.module.createI64(i64_low(e.constantIntegerValue),i64_high(e.constantIntegerValue)):this.module.createI64(0);case 12:if(!e.hasDecorator(u.DecoratorFlags.BUILTIN)||t!=_.Type.f32)return this.module.createF64(e.constantFloatValue);this.currentType=_.Type.f32;case 11:return this.module.createF32(e.constantFloatValue);default:return assert(!1),this.module.createUnreachable()}},t.prototype.compileExpression=function(e,t,r,n){var i;switch(this.currentType=t,e.kind){case d.NodeKind.ASSERTION:i=this.compileAssertionExpression(e,t);break;case d.NodeKind.BINARY:i=this.compileBinaryExpression(e,t);break;case d.NodeKind.CALL:i=this.compileCallExpression(e,t);break;case d.NodeKind.COMMA:i=this.compileCommaExpression(e,t);break;case d.NodeKind.ELEMENTACCESS:i=this.compileElementAccessExpression(e,t);break;case d.NodeKind.FUNCTION:i=this.compileFunctionExpression(e,t);break;case d.NodeKind.IDENTIFIER:case d.NodeKind.FALSE:case d.NodeKind.NULL:case d.NodeKind.THIS:case d.NodeKind.SUPER:case d.NodeKind.TRUE:i=this.compileIdentifierExpression(e,t,0==r);break;case d.NodeKind.INSTANCEOF:i=this.compileInstanceOfExpression(e,t);break;case d.NodeKind.LITERAL:i=this.compileLiteralExpression(e,t);break;case d.NodeKind.NEW:i=this.compileNewExpression(e,t);break;case d.NodeKind.PARENTHESIZED:i=this.compileParenthesizedExpression(e,t);break;case d.NodeKind.PROPERTYACCESS:i=this.compilePropertyAccessExpression(e,t,0==r);break;case d.NodeKind.TERNARY:i=this.compileTernaryExpression(e,t);break;case d.NodeKind.UNARYPOSTFIX:i=this.compileUnaryPostfixExpression(e,t);break;case d.NodeKind.UNARYPREFIX:i=this.compileUnaryPrefixExpression(e,t);break;default:this.error(c.DiagnosticCode.Operation_not_supported,e.range),i=this.module.createUnreachable()}var a=this.currentType;return 0!=r&&a!=t?(i=this.convertExpression(i,a,t,r,n,e),this.currentType=t):1==n&&(i=this.ensureSmallIntegerWrap(i,a)),this.options.sourceMap&&this.addDebugLocation(i,e.range),i},t.prototype.compileExpressionRetainType=function(e,t,r){return this.compileExpression(e,t==_.Type.void?_.Type.i32:t,0,r)},t.prototype.precomputeExpression=function(e,t,r,n){return this.module.precomputeExpression(this.compileExpression(e,t,r,n))},t.prototype.convertExpression=function(e,t,r,n,i,a){assert(0!=n);var s=this.module;return 13==t.kind?(assert(13!=r.kind),this.error(c.DiagnosticCode.Type_0_is_not_assignable_to_type_1,a.range,t.toString(),r.toString()),s.createUnreachable()):13==r.kind?s.createDrop(e):(t.isAssignableTo(r)||1==n&&this.error(c.DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast,a.range,t.toString(),r.toString()),t.is(8)?r.is(8)?11==t.kind?12==r.kind&&(e=s.createUnary(l.UnaryOp.PromoteF32,e)):11==r.kind&&(e=s.createUnary(l.UnaryOp.DemoteF64,e)):r.is(4)?e=11==t.kind?r.is(1)?r.is(64)?s.createUnary(l.UnaryOp.TruncF32ToI64,e):s.createUnary(l.UnaryOp.TruncF32ToI32,e):r.is(64)?s.createUnary(l.UnaryOp.TruncF32ToU64,e):s.createUnary(l.UnaryOp.TruncF32ToU32,e):r.is(1)?r.is(64)?s.createUnary(l.UnaryOp.TruncF64ToI64,e):s.createUnary(l.UnaryOp.TruncF64ToI32,e):r.is(64)?s.createUnary(l.UnaryOp.TruncF64ToU64,e):s.createUnary(l.UnaryOp.TruncF64ToU32,e):(assert(0==r.flags,"void type expected"),e=s.createDrop(e)):t.is(4)&&r.is(8)?e=11==r.kind?t.is(64)?s.createUnary(t.is(1)?l.UnaryOp.ConvertI64ToF32:l.UnaryOp.ConvertU64ToF32,e):s.createUnary(t.is(1)?l.UnaryOp.ConvertI32ToF32:l.UnaryOp.ConvertU32ToF32,e):t.is(64)?s.createUnary(t.is(1)?l.UnaryOp.ConvertI64ToF64:l.UnaryOp.ConvertU64ToF64,e):s.createUnary(t.is(1)?l.UnaryOp.ConvertI32ToF64:l.UnaryOp.ConvertU32ToF64,e):t.is(64)?r.is(64)||(e=s.createUnary(l.UnaryOp.WrapI64,e)):r.is(64)?(e=s.createUnary(t.is(1)?l.UnaryOp.ExtendI32:l.UnaryOp.ExtendU32,this.ensureSmallIntegerWrap(e,t)),i=0):t.is(32)&&t.size",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.GtI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GtI64:l.BinaryOp.GtI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.GtI64,r,i);break;case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.GtU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GtU64:l.BinaryOp.GtU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.GtU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.GtF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.GtF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.LESSTHAN_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.LE)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!0)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"<=",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.LeI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.LeI64:l.BinaryOp.LeI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.LeI64,r,i);break;case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.LeU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.LeU64:l.BinaryOp.LeU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.LeU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.LeF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.LeF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.GREATERTHAN_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.GE)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!0)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,">=",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.GeI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GeI64:l.BinaryOp.GeI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.GeI64,r,i);break;case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.GeU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GeU64:l.BinaryOp.GeU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.GeU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.GeF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.GeF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.EQUALS_EQUALS_EQUALS:case h.Token.EQUALS_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,y==h.Token.EQUALS_EQUALS&&this.currentType.is(256))if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.EQ)){o=this.compileBinaryOverload(v,d,r,m,e);break}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,h.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.EqI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.EqI64:l.BinaryOp.EqI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.EqI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.EqF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.EqF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.EXCLAMATION_EQUALS_EQUALS:case h.Token.EXCLAMATION_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,y==h.Token.EXCLAMATION_EQUALS&&this.currentType.is(256))if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.NE)){o=this.compileBinaryOverload(v,d,r,m,e);break}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,h.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.NeI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.NeI64:l.BinaryOp.NeI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.NeI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.NeF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.NeF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.EQUALS:return this.compileAssignment(d,m,t);case h.Token.PLUS_EQUALS:g=!0;case h.Token.PLUS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.ADD)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)i=this.compileExpression(m,n,1,0);else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"+",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=p.createBinary(l.BinaryOp.AddI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.AddI64:l.BinaryOp.AddI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.AddI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.AddF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.AddF64,r,i);break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.MINUS_EQUALS:g=!0;case h.Token.MINUS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.SUB)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"-",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=p.createBinary(l.BinaryOp.SubI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.SubI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.SubF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.SubF64,r,i);break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.ASTERISK_EQUALS:g=!0;case h.Token.ASTERISK:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.MUL)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1);else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"*",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=p.createBinary(l.BinaryOp.MulI32,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.MulI64:l.BinaryOp.MulI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.MulI64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.MulF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.MulF64,r,i);break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.ASTERISK_ASTERISK_EQUALS:g=!0;case h.Token.ASTERISK_ASTERISK:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.POW)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}var E=void 0;if(11==this.currentType.kind){if(i=this.compileExpression(m,_.Type.f32,1,0),a=this.currentType,!(E=this.f32PowInstance)){if(!(f=this.program.elementsLookup.get("Mathf"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),o=p.createUnreachable();break}if(!(T=f.members?f.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.pow"),o=p.createUnreachable();break}assert(T.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f32PowInstance=E=this.resolver.resolveFunction(T,null)}}else if(r=this.convertExpression(r,this.currentType,_.Type.f64,1,0,d),n=this.currentType,i=this.compileExpression(m,_.Type.f64,1,0),a=this.currentType,!(E=this.f64PowInstance)){if(!(f=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),o=p.createUnreachable();break}if(!(T=f.members?f.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.pow"),o=p.createUnreachable();break}assert(T.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f64PowInstance=E=this.resolver.resolveFunction(T,null)}o=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):p.createUnreachable();break;case h.Token.SLASH_EQUALS:g=!0;case h.Token.SLASH:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.DIV)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"/",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m)}switch(this.currentType.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.DivI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.DivI64:l.BinaryOp.DivI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.DivI64,r,i);break;case 5:case 6:case 10:case 7:o=p.createBinary(l.BinaryOp.DivU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.DivU64:l.BinaryOp.DivU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.DivU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.DivF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.DivF64,r,i);break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.PERCENT_EQUALS:g=!0;case h.Token.PERCENT:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.REM)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"%",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m)}switch(this.currentType.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.RemI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.RemI64:l.BinaryOp.RemI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.RemI64,r,i);break;case 5:case 6:case 10:case 7:o=p.createBinary(l.BinaryOp.RemU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.RemU64:l.BinaryOp.RemU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.RemU64,r,i);break;case 11:if(!(E=this.f32ModInstance)){if(!(f=this.program.elementsLookup.get("Mathf"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),o=p.createUnreachable();break}if(!(T=f.members?f.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.mod"),o=p.createUnreachable();break}assert(T.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f32ModInstance=E=this.resolver.resolveFunction(T,null)}o=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):p.createUnreachable();break;case 12:if(!(E=this.f64ModInstance)){var f,T;if(!(f=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),o=p.createUnreachable();break}if(!(T=f.members?f.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.mod"),o=p.createUnreachable();break}assert(T.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f64ModInstance=E=this.resolver.resolveFunction(T,null)}o=E&&this.compileFunction(E)?this.makeCallDirect(E,[r,i]):p.createUnreachable();break;default:assert(!1),o=p.createUnreachable()}break;case h.Token.LESSTHAN_LESSTHAN_EQUALS:g=!0;case h.Token.LESSTHAN_LESSTHAN:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_SHL)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(i=this.compileExpression(m,n,1,0),a=this.currentType,this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=p.createBinary(l.BinaryOp.ShlI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.ShlI64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.ShlI64:l.BinaryOp.ShlI32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.GREATERTHAN_GREATERTHAN_EQUALS:g=!0;case h.Token.GREATERTHAN_GREATERTHAN:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_SHR)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1),a=this.currentType,this.currentType.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.ShrI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.ShrI64,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.ShrI64:l.BinaryOp.ShrI32,r,i);break;case 5:case 6:case 10:case 7:o=p.createBinary(l.BinaryOp.ShrU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.ShrU64,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.ShrU64:l.BinaryOp.ShrU32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:g=!0;case h.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_SHR_U)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,0),a=this.currentType,this.currentType.kind){case 5:case 6:case 10:o=p.createBinary(l.BinaryOp.ShrU32,r,i);case 0:case 1:case 2:case 7:o=p.createBinary(l.BinaryOp.ShrU32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.ShrU64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.ShrU64:l.BinaryOp.ShrU32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.AMPERSAND_EQUALS:g=!0;case h.Token.AMPERSAND:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_AND)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"&",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 10:case 7:o=p.createBinary(l.BinaryOp.AndI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.AndI64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.AndI64:l.BinaryOp.AndI32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.BAR_EQUALS:g=!0;case h.Token.BAR:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_OR)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"|",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:o=p.createBinary(l.BinaryOp.OrI32,r,i);break;case 2:case 7:o=p.createBinary(l.BinaryOp.OrI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.OrI64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.OrI64:l.BinaryOp.OrI32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.CARET_EQUALS:g=!0;case h.Token.CARET:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){var I,v;if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_XOR)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(g)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"^",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,d),i=this.convertExpression(i,a,a=s,1,0,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:o=p.createBinary(l.BinaryOp.XorI32,r,i);break;case 2:case 7:o=p.createBinary(l.BinaryOp.XorI32,r,i);break;case 3:case 8:o=p.createBinary(l.BinaryOp.XorI64,r,i);break;case 9:case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.XorI64:l.BinaryOp.XorI32,r,i);break;case 11:case 12:return this.error(c.DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,e.range,h.operatorTokenToString(e.operator),this.currentType.toString()),p.createUnreachable();default:assert(!1),o=p.createUnreachable()}break;case h.Token.AMPERSAND_AMPERSAND:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,i=this.compileExpression(m,n,1,0),a=this.currentType,o=p.cloneExpression(r,!0,0))this.makeIsTrueish(r,this.currentType),o=p.createIf(this.makeIsTrueish(r,this.currentType),i,o);else{var A=this.currentFunction.flow,C=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));o=p.createIf(this.makeIsTrueish(p.createTeeLocal(C.index,r),this.currentType),i,p.createGetLocal(assert(C).index,this.currentType.toNativeType()))}break;case h.Token.BAR_BAR:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,i=this.compileExpression(m,n,1,0),a=this.currentType,o=this.module.cloneExpression(r,!0,0))o=this.module.createIf(this.makeIsTrueish(r,this.currentType),o,i);else{A=this.currentFunction.flow,C=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));o=p.createIf(this.makeIsTrueish(p.createTeeLocal(C.index,r),this.currentType),p.createGetLocal(assert(C).index,this.currentType.toNativeType()),i)}break;default:assert(!1),o=this.module.createUnreachable()}return g?this.compileAssignmentWithValue(d,o,t!=_.Type.void):o},t.prototype.compileUnaryOverload=function(e,t,r,n){var i,a=0;return e.is(p.CommonFlags.INSTANCE)?(a=r,i=[]):i=[t],this.compileCallDirect(e,i,n,a,e.hasDecorator(u.DecoratorFlags.INLINE))},t.prototype.compileBinaryOverload=function(e,t,r,n,i){var a,s=0;if(e.is(p.CommonFlags.INSTANCE)){var o=assert(e.parent);assert(o.kind==u.ElementKind.CLASS),s=r,a=[n]}else a=[t,n];return this.compileCallDirect(e,a,i,s,e.hasDecorator(u.DecoratorFlags.INLINE))},t.prototype.compileAssignment=function(e,t,r){var n,i=this.program.resolver,a=this.currentFunction,s=i.resolveExpression(e,a);if(!s)return this.module.createUnreachable();switch(s.kind){case u.ElementKind.GLOBAL:if(!this.compileGlobal(s))return this.module.createUnreachable();assert(s.type!=_.Type.void);case u.ElementKind.LOCAL:case u.ElementKind.FIELD:n=s.type;break;case u.ElementKind.PROPERTY:var o=s.setterPrototype;if(o){var l=this.resolver.resolveFunction(o,null);if(!l)return this.module.createUnreachable();assert(1==l.signature.parameterTypes.length),n=l.signature.parameterTypes[0];break}return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,s.internalName),this.module.createUnreachable();case u.ElementKind.CLASS:if(i.currentElementExpression){var p=a.flow.is(4096),h=s.lookupOverload(u.OperatorKind.INDEXED_SET,p);if(!h)return s.lookupOverload(u.OperatorKind.INDEXED_GET,p)?this.error(c.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,s.internalName):this.error(c.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,s.internalName),this.module.createUnreachable();assert(2==h.signature.parameterTypes.length),n=h.signature.parameterTypes[1];break}default:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}assert(n!=_.Type.void);var d=this.compileExpression(t,n,1,0);return this.compileAssignmentWithValue(e,d,r!=_.Type.void)},t.prototype.compileAssignmentWithValue=function(e,t,r){void 0===r&&(r=!1);var n=this.module,i=this.resolver.resolveExpression(e,this.currentFunction);if(!i)return n.createUnreachable();switch(i.kind){case u.ElementKind.LOCAL:var a=i.type;if(assert(a!=_.Type.void),this.currentType=r?a:_.Type.void,i.is(p.CommonFlags.CONST))return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();var s=this.currentFunction.flow;return a.is(36)&&s.setLocalWrapped(i.index,!s.canOverflow(t,a)),r?n.createTeeLocal(i.index,t):n.createSetLocal(i.index,t);case u.ElementKind.GLOBAL:if(!this.compileGlobal(i))return n.createUnreachable();a=i.type;if(assert(a!=_.Type.void),this.currentType=r?a:_.Type.void,i.is(p.CommonFlags.CONST))return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();if(t=this.ensureSmallIntegerWrap(t,a),r){var o=a.toNativeType(),l=i.internalName;return n.createBlock(null,[n.createSetGlobal(l,t),n.createGetGlobal(l,o)],o)}return n.createSetGlobal(i.internalName,t);case u.ElementKind.FIELD:var h=i.declaration;if(i.is(p.CommonFlags.READONLY)&&!this.currentFunction.is(p.CommonFlags.CONSTRUCTOR)&&null!=h&&null==h.initializer)return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();var d=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(d,this.options.usizeType,0);a=i.type;this.currentType=r?a:_.Type.void;o=a.toNativeType();if(10==a.kind&&(t=this.ensureSmallIntegerWrap(t,a)),r){s=(L=this.currentFunction).flow;var g=L.getAndFreeTempLocal(a,!s.canOverflow(t,a)).index;return n.createBlock(null,[n.createSetLocal(g,t),n.createStore(a.byteSize,m,n.createGetLocal(g,o),o,i.memoryOffset),n.createGetLocal(g,o)],o)}return n.createStore(a.byteSize,m,t,o,i.memoryOffset);case u.ElementKind.PROPERTY:var y=i.setterPrototype;if(y){var E=this.resolver.resolveFunction(y,null);if(!E)return n.createUnreachable();if(!r){if(E.is(p.CommonFlags.INSTANCE)){d=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(d,this.options.usizeType,0);return this.makeCallDirect(E,[m,t])}return this.makeCallDirect(E,[t])}var f=i.getterPrototype;assert(null!=f);var T=this.resolver.resolveFunction(f,null);if(!T)return n.createUnreachable();var I=(R=T.signature.returnType).toNativeType();if(E.is(p.CommonFlags.INSTANCE)){d=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(d,this.options.usizeType,0),g=this.currentFunction.getAndFreeTempLocal(R,!1).index;return n.createBlock(null,[this.makeCallDirect(E,[n.createTeeLocal(g,m),t]),this.makeCallDirect(T,[n.createGetLocal(g,I)])],I)}return n.createBlock(null,[this.makeCallDirect(E,[t]),this.makeCallDirect(T)],I)}return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();case u.ElementKind.CLASS:var v=this.resolver.currentElementExpression;if(v){var A=this.currentFunction.flow.is(4096),C=i.lookupOverload(u.OperatorKind.INDEXED_GET,A);if(!C)return this.error(c.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,i.internalName),n.createUnreachable();var N=i.lookupOverload(u.OperatorKind.INDEXED_SET,A);if(!N)return this.error(c.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,i.internalName),this.currentType=r?C.signature.returnType:_.Type.void,n.createUnreachable();var O=i.type,S=(d=assert(this.resolver.currentThisExpression),m=this.compileExpressionRetainType(d,this.options.usizeType,0),this.compileExpression(v,_.Type.i32,1,0));if(r){var L,b=(L=this.currentFunction).getTempLocal(O,!1),k=L.getAndFreeTempLocal(this.currentType,!1),R=C.signature.returnType;return this.currentFunction.freeTempLocal(b),n.createBlock(null,[this.makeCallDirect(N,[n.createTeeLocal(b.index,m),n.createTeeLocal(k.index,S),t]),this.makeCallDirect(C,[n.createGetLocal(b.index,b.type.toNativeType()),n.createGetLocal(k.index,k.type.toNativeType())])],R.toNativeType())}return this.makeCallDirect(N,[m,S,t])}}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()},t.prototype.compileCallExpression=function(e,t){var r,n,i=this.module,a=this.currentFunction,s=this.resolver.resolveExpression(e.expression,a);if(!s)return i.createUnreachable();switch(s.kind){case u.ElementKind.FUNCTION_PROTOTYPE:var o=s,l=e.typeArguments;if(o.hasDecorator(u.DecoratorFlags.BUILTIN))return this.compileCallExpressionBuiltin(o,e,t);var h=null;if(l){if(!o.is(p.CommonFlags.GENERIC))return this.error(c.DiagnosticCode.Type_0_is_not_generic,e.expression.range,o.internalName),i.createUnreachable();h=this.resolver.resolveFunctionInclTypeArguments(o,l,this.currentFunction.flow.contextualTypeArguments,e)}else{if(o.is(p.CommonFlags.GENERIC)){for(var m=new Map,g=assert(o.declaration.typeParameters),y=g.length,E=0;Es&&!i)||(this.error(c.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,s.toString(),t.toString()),!1)},t.prototype.compileCallDirect=function(e,t,r,n,i){void 0===n&&(n=0),void 0===i&&(i=!1);var a=t.length,s=e.signature;if(!this.checkCallSignature(s,a,0!=n,r))return this.module.createUnreachable();if(i){if(assert(!e.is(p.CommonFlags.TRAMPOLINE)),!this.currentInlineFunctions.includes(e)){this.currentInlineFunctions.push(e);var o=this.compileCallInlineUnchecked(e,t,r,n);return this.currentInlineFunctions.pop(),o}this.warning(c.DiagnosticCode.Function_0_cannot_be_inlined_into_itself,r.range,e.internalName)}var l=n?a+1:a,u=new Array(l),h=0;n&&(u[0]=n,h=1);for(var d=s.parameterTypes,_=0;_1?g.createBlock(null,v,T.toNativeType()):v.length?v[0]:g.createNop():(this.error(c.DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,y.signature.returnType.range),g.createUnreachable())},t.prototype.ensureTrampoline=function(e){var t=e.trampoline;if(t)return t;var r=e.signature,n=e.internalName,i=r.parameterTypes,a=e.prototype.declaration.signature.parameters,s=r.returnType,o=r.thisType,h=e.is(p.CommonFlags.INSTANCE),d=r.requiredParameters,m=d,g=i.length,y=g;h&&(++m,++y);var E=assert(y-m),f=new Array(m),T=0,I=this.module;h&&(f[0]=I.createGetLocal(0,this.options.nativeSizeType),T=1);for(var v=0;v=i);var o=this.module;if(!this.compileFunction(e))return o.createUnreachable();var c=e.signature.returnType,l=e.is(p.CommonFlags.MODULE_IMPORT);if(r=a),this.ensureFunctionType(e.parameterTypes,e.returnType,e.thisType);var c=this.module;if(n=0),this.currentType=E,this.module.createGetLocal(f,E.toNativeType());case u.ElementKind.GLOBAL:if(!this.compileGlobal(y))return this.module.createUnreachable();var T=y.type;return assert(T!=_.Type.void),y.is(p.CommonFlags.INLINED)?this.compileInlineConstant(y,t,r):(this.currentType=T,this.module.createGetGlobal(y.internalName,T.toNativeType()));case u.ElementKind.ENUMVALUE:return y.is(p.CommonFlags.COMPILED)?(this.currentType=_.Type.i32,y.is(p.CommonFlags.INLINED)?this.module.createI32(y.constantValue):this.module.createGetGlobal(y.internalName,1)):(this.error(c.DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,e.range),this.currentType=_.Type.i32,this.module.createUnreachable());case u.ElementKind.FUNCTION_PROTOTYPE:var I=this.resolver.resolveFunction(y,null,i.flow.contextualTypeArguments);if(!I||!this.compileFunction(I))return n.createUnreachable();var v=this.ensureFunctionTableEntry(I);return this.currentType=I.signature.type,this.module.createI32(v)}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileInstanceOfExpression=function(e,t){var r=this.module,n=this.compileExpressionRetainType(e.expression,this.options.usizeType,0),i=this.currentType,a=this.resolver.resolveType(e.isType);return this.currentType=_.Type.bool,a?i.is(512)&&!a.is(512)?i.nonNullableType.isAssignableTo(a)?r.createBinary(i.is(64)?l.BinaryOp.NeI64:l.BinaryOp.NeI32,n,i.toNativeZero(r)):r.createI32(0):r.createI32(i.isAssignableTo(a,!0)?1:0):r.createUnreachable()},t.prototype.compileLiteralExpression=function(e,t,r){void 0===r&&(r=!1);var n=this.module;switch(e.literalKind){case d.LiteralKind.ARRAY:assert(!r);var i=t.classReference;return i&&i.prototype==this.program.arrayPrototype?this.compileArrayLiteral(assert(i.typeArguments)[0],e.elementExpressions,!1,e):(this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable());case d.LiteralKind.FLOAT:var a=e.value;return r&&(a=-a),t==_.Type.f32?n.createF32(a):(this.currentType=_.Type.f64,n.createF64(a));case d.LiteralKind.INTEGER:var s=e.value;switch(r&&(s=i64_sub(i64_new(0),s)),t.kind){case 0:if(i64_is_i8(s))return n.createI32(i64_low(s));break;case 5:if(i64_is_u8(s))return n.createI32(i64_low(s));break;case 1:if(i64_is_i16(s))return n.createI32(i64_low(s));break;case 6:if(i64_is_u16(s))return n.createI32(i64_low(s));break;case 2:if(i64_is_i32(s))return n.createI32(i64_low(s));break;case 7:if(i64_is_u32(s))return n.createI32(i64_low(s));break;case 10:if(i64_is_bool(s))return n.createI32(i64_low(s));break;case 4:if(!this.options.isWasm64){if(i64_is_i32(s))return n.createI32(i64_low(s));break}return n.createI64(i64_low(s),i64_high(s));case 9:if(!this.options.isWasm64){if(i64_is_u32(s))return n.createI32(i64_low(s));break}return n.createI64(i64_low(s),i64_high(s));case 3:case 8:return n.createI64(i64_low(s),i64_high(s));case 11:if(i64_is_f32(s))return n.createF32(i64_to_f32(s));break;case 12:if(i64_is_f64(s))return n.createF64(i64_to_f64(s));break;case 13:break;default:return assert(!1),n.createUnreachable()}return i64_is_i32(s)?(this.currentType=_.Type.i32,n.createI32(i64_low(s))):i64_is_u32(s)?(this.currentType=_.Type.u32,n.createI32(i64_low(s))):(this.currentType=_.Type.i64,n.createI64(i64_low(s),i64_high(s)));case d.LiteralKind.STRING:return assert(!r),this.compileStringLiteral(e);case d.LiteralKind.OBJECT:return assert(!r),this.compileObjectLiteral(e,t)}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.currentType=t,n.createUnreachable()},t.prototype.ensureStaticString=function(e){var t,r=this.program,n=r.hasGC,i=r.gcHeaderSize,a=assert(r.stringInstance),s=this.stringSegments;if(s.has(e))t=s.get(e);else{var c=e.length,l=a.currentMemoryOffset+1&-2,p=l+2*c,u=void 0,h=void 0;n?(u=new Uint8Array(i+p),h=i,m.writeI32(o.ensureGCHook(this,a),u,r.gcHookOffset)):(u=new Uint8Array(p),h=0),m.writeI32(c,u,h+a.offsetof("length")),h+=l;for(var d=0;d",t.toString()),r.createUnreachable();var i=n.constructorInstance;if(i){if(i.signature.requiredParameters)return this.error(c.DiagnosticCode.Constructor_of_class_0_must_not_require_any_arguments,e.range,n.toString()),r.createUnreachable();if(i.is(p.CommonFlags.PRIVATE))return this.error(c.DiagnosticCode.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration,e.range,n.toString()),r.createUnreachable();if(i.is(p.CommonFlags.PROTECTED))return this.error(c.DiagnosticCode.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration,e.range,n.toString()),r.createUnreachable()}var a=e.names,s=a.length,l=e.values,h=n.members,d=!1,_=new Array(s+2),m=this.currentFunction.getTempLocal(this.options.usizeType);assert(s==l.length);for(var g=0,y=s;g=0);var l=this.compileExpressionRetainType(o,this.options.usizeType,0);return this.currentType=i.type,n.createLoad(i.type.byteSize,i.type.is(5),l,i.type.toNativeType(),i.memoryOffset);case u.ElementKind.PROPERTY:return this.compileGetter(i,e);case u.ElementKind.FUNCTION_PROTOTYPE:return this.error(c.DiagnosticCode.Cannot_access_method_0_without_calling_it_as_it_requires_this_to_be_set,e.range,i.simpleName),n.createUnreachable()}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()},t.prototype.compileGetter=function(e,t){var r=e.getterPrototype;if(r){var n=this.resolver.resolveFunction(r,null);if(!n)return this.module.createUnreachable();var i=n.signature;if(!this.checkCallSignature(i,0,n.is(p.CommonFlags.INSTANCE),t))return this.module.createUnreachable();var a=0!=(n.decoratorFlags&u.DecoratorFlags.INLINE);if(n.is(p.CommonFlags.INSTANCE)){var s=assert(n.parent);assert(s.kind==u.ElementKind.CLASS);var o=assert(this.resolver.currentThisExpression),l=this.compileExpressionRetainType(o,this.options.usizeType,0);//!!! +return this.currentType=i.returnType,this.compileCallDirect(n,[],t,l,a)}return this.currentType=i.returnType,this.compileCallDirect(n,[],t,0,a)}return this.error(c.DiagnosticCode.Property_0_does_not_exist_on_type_1,t.range,e.simpleName,e.parent.toString()),this.module.createUnreachable()},t.prototype.compileTernaryExpression=function(e,t){var r=e.ifThen,n=e.ifElse,i=this.currentFunction,a=i.flow,s=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,_.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(p.CommonFlags.GENERIC|p.CommonFlags.GENERIC_CONTEXT)){var o=this.module.precomputeExpression(s);if(l.getExpressionId(o)==l.ExpressionId.Const&&1==l.getExpressionType(o))return l.getConstValueI32(o)?this.compileExpressionRetainType(r,t,0):this.compileExpressionRetainType(n,t,0);s=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,_.Type.bool,0),this.currentType)}var u=a.fork();i.flow=u;var h=this.compileExpressionRetainType(r,t,0),d=this.currentType;u.free();var m=a.fork();i.flow=m;var g=this.compileExpressionRetainType(n,t,0),y=this.currentType;i.flow=m.free(),a.inheritMutual(u,m);var E=_.Type.commonCompatible(d,y,!1);return E?(h=this.convertExpression(h,d,E,1,0,r),g=this.convertExpression(g,y,E,1,0,n),this.currentType=E,this.module.createIf(s,h,g)):(this.error(c.DiagnosticCode.Type_0_is_not_assignable_to_type_1,e.range,d.toString(),y.toString()),this.currentType=t,this.module.createUnreachable())},t.prototype.compileUnaryPostfixExpression=function(e,t){var r=this.module,n=this.currentFunction,i=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0);if(l.getExpressionId(i)==l.ExpressionId.Unreachable)return i;var a,s=this.currentType,o=null;switch(t!=_.Type.void&&(o=n.getTempLocal(s,!1),i=r.createTeeLocal(o.index,i)),e.operator){case h.Token.PLUS_PLUS:switch(s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=r.createBinary(l.BinaryOp.AddI32,i,r.createI32(1));break;case 9:if(this.currentType.is(256)){if(d=this.currentType.classReference)if(m=d.lookupOverload(u.OperatorKind.POSTFIX_INC)){a=this.compileUnaryOverload(m,e.operand,i,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),r.createUnreachable()}case 4:var p=this.options;a=r.createBinary(p.isWasm64?l.BinaryOp.AddI64:l.BinaryOp.AddI32,i,s.toNativeOne(r));break;case 3:case 8:a=r.createBinary(l.BinaryOp.AddI64,i,r.createI64(1));break;case 11:a=r.createBinary(l.BinaryOp.AddF32,i,r.createF32(1));break;case 12:a=r.createBinary(l.BinaryOp.AddF64,i,r.createF64(1));break;default:return assert(!1),r.createUnreachable()}break;case h.Token.MINUS_MINUS:switch(s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=r.createBinary(l.BinaryOp.SubI32,i,r.createI32(1));break;case 9:if(this.currentType.is(256)){var d,m;if(d=this.currentType.classReference)if(m=d.lookupOverload(u.OperatorKind.POSTFIX_DEC)){a=this.compileUnaryOverload(m,e.operand,i,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),r.createUnreachable()}case 4:p=this.options;a=r.createBinary(p.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,i,s.toNativeOne(r));break;case 3:case 8:a=r.createBinary(l.BinaryOp.SubI64,i,r.createI64(1));break;case 11:a=r.createBinary(l.BinaryOp.SubF32,i,r.createF32(1));break;case 12:a=r.createBinary(l.BinaryOp.SubF64,i,r.createF64(1));break;default:return assert(!1),r.createUnreachable()}break;default:return assert(!1),r.createUnreachable()}if(!o)return this.currentType=_.Type.void,this.compileAssignmentWithValue(e.operand,a,!1);var g=this.compileAssignmentWithValue(e.operand,a,!1);this.currentType=o.type,n.freeTempLocal(o);var y=o.type.toNativeType();return r.createBlock(null,[g,r.createGetLocal(o.index,y)],y)},t.prototype.compileUnaryPrefixExpression=function(e,t){var r,n=this.module,i=!1;switch(e.operator){case h.Token.PLUS:if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.PLUS)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}break;case h.Token.MINUS:if(e.operand.kind==d.NodeKind.LITERAL&&(e.operand.literalKind==d.LiteralKind.INTEGER||e.operand.literalKind==d.LiteralKind.FLOAT)){r=this.compileLiteralExpression(e.operand,t,!0),this.options.sourceMap&&this.addDebugLocation(r,e.range);break}if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.MINUS)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.SubI32,n.createI32(0),r);break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,this.currentType.toNativeZero(n),r);break;case 3:case 8:r=n.createBinary(l.BinaryOp.SubI64,n.createI64(0),r);break;case 11:r=n.createUnary(l.UnaryOp.NegF32,r);break;case 12:r=n.createUnary(l.UnaryOp.NegF64,r);break;default:assert(!1),r=n.createUnreachable()}break;case h.Token.PLUS_PLUS:if(i=!0,r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.PREFIX_INC)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.AddI32,r,this.module.createI32(1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.AddI64:l.BinaryOp.AddI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(l.BinaryOp.AddI64,r,n.createI64(1));break;case 11:r=n.createBinary(l.BinaryOp.AddF32,r,n.createF32(1));break;case 12:r=n.createBinary(l.BinaryOp.AddF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case h.Token.MINUS_MINUS:if(i=!0,r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.PREFIX_DEC)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.SubI32,r,n.createI32(1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(l.BinaryOp.SubI64,r,n.createI64(1));break;case 11:r=n.createBinary(l.BinaryOp.SubF32,r,n.createF32(1));break;case 12:r=n.createBinary(l.BinaryOp.SubF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case h.Token.EXCLAMATION:if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256))if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.NOT)){r=this.compileUnaryOverload(s,e.operand,r,e);break}r=this.makeIsFalseish(r,this.currentType),this.currentType=_.Type.bool;break;case h.Token.TILDE:if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t.is(8)?_.Type.i64:t,0,0),this.currentType.is(256)){var a,s;if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.BITWISE_NOT)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(r=this.convertExpression(r,this.currentType,this.currentType.intType,1,0,e.operand),this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.XorI32,r,n.createI32(-1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.XorI64:l.BinaryOp.XorI32,r,this.currentType.toNativeNegOne(n));break;case 3:case 8:r=n.createBinary(l.BinaryOp.XorI64,r,n.createI64(-1,-1));break;default:assert(!1),r=n.createUnreachable()}break;case h.Token.TYPEOF:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();default:return assert(!1),n.createUnreachable()}return i?this.compileAssignmentWithValue(e.operand,r,t!=_.Type.void):r},t.prototype.ensureSmallIntegerWrap=function(e,t){var r=this.module,n=this.currentFunction.flow;switch(t.kind){case 0:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(l.UnaryOp.ExtendI8ToI32,e):r.createBinary(l.BinaryOp.ShrI32,r.createBinary(l.BinaryOp.ShlI32,e,r.createI32(24)),r.createI32(24)));break;case 1:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(l.UnaryOp.ExtendI16ToI32,e):r.createBinary(l.BinaryOp.ShrI32,r.createBinary(l.BinaryOp.ShlI32,e,r.createI32(16)),r.createI32(16)));break;case 5:n.canOverflow(e,t)&&(e=r.createBinary(l.BinaryOp.AndI32,e,r.createI32(255)));break;case 6:n.canOverflow(e,t)&&(e=r.createBinary(l.BinaryOp.AndI32,e,r.createI32(65535)));break;case 10:n.canOverflow(e,t)&&(e=r.createBinary(l.BinaryOp.AndI32,e,r.createI32(1)))}return e},t.prototype.makeIsFalseish=function(e,t){var r=this.module;switch(t.kind){case 0:case 1:case 5:case 6:case 10:e=this.ensureSmallIntegerWrap(e,t);case 2:case 7:return r.createUnary(l.UnaryOp.EqzI32,e);case 3:case 8:return r.createUnary(l.UnaryOp.EqzI64,e);case 9:case 4:return r.createUnary(64==t.size?l.UnaryOp.EqzI64:l.UnaryOp.EqzI32,e);case 11:return r.createBinary(l.BinaryOp.EqF32,e,r.createF32(0));case 12:return r.createBinary(l.BinaryOp.EqF64,e,r.createF64(0));default:return assert(!1),r.createI32(1)}},t.prototype.makeIsTrueish=function(e,t){var r=this.module;switch(t.kind){case 0:case 1:case 5:case 6:case 10:e=this.ensureSmallIntegerWrap(e,t);case 2:case 7:return e;case 3:case 8:return r.createBinary(l.BinaryOp.NeI64,e,r.createI64(0));case 9:case 4:return 64==t.size?r.createBinary(l.BinaryOp.NeI64,e,r.createI64(0)):e;case 11:return r.createBinary(l.BinaryOp.NeF32,e,r.createF32(0));case 12:return r.createBinary(l.BinaryOp.NeF64,e,r.createF64(0));default:return assert(!1),r.createI32(0)}},t.prototype.makeAllocate=function(e,t){var r,n,a=this.module,s=this.currentFunction,c=this.options.nativeSizeType,l=s.getTempLocal(e.type,!1),h=new Array;if(h.push(a.createSetLocal(l.index,o.compileAllocate(this,e,t))),e.members)try{for(var d=i(e.members.values()),_=d.next();!_.done;_=d.next()){var m=_.value;if(m.kind==u.ElementKind.FIELD){var g=m,y=g.type,E=y.toNativeType(),f=g.prototype.declaration;if(assert(!g.isAny(p.CommonFlags.CONST)),f.initializer)h.push(a.createStore(y.byteSize,a.createGetLocal(l.index,c),this.compileExpression(f.initializer,y,1,0),E,g.memoryOffset));else{var T=g.prototype.declaration.parameterIndex;h.push(a.createStore(y.byteSize,a.createGetLocal(l.index,c),T>=0?a.createGetLocal(1+T,E):y.toNativeZero(a),E,g.memoryOffset))}}}}catch(e){r={error:e}}finally{try{_&&!_.done&&(n=d.return)&&n.call(d)}finally{if(r)throw r.error}}return h.push(a.createGetLocal(l.index,c)),s.freeTempLocal(l),this.currentType=e.type,a.createBlock(null,h,c)},t.prototype.makeConditionalAllocate=function(e,t){var r=this.module,n=this.options.nativeSizeType;return this.currentType=e.type,r.createIf(2==n?r.createBinary(l.BinaryOp.NeI64,r.createGetLocal(0,2),r.createI64(0)):r.createGetLocal(0,1),r.createGetLocal(0,n),r.createTeeLocal(0,this.makeAllocate(e,t)))},t.prototype.addDebugLocation=function(e,t){var r=this.currentFunction,n=t.source;n.debugInfoIndex<0&&(n.debugInfoIndex=this.module.addDebugInfoFile(n.normalizedPath)),t.debugInfoRef=e,r.debugLocations.push(t)},t}(c.DiagnosticEmitter);function T(e,t){if(y=t.range.source.simplePath,E=t.programLevelInternalName,e.hasDecorator(u.DecoratorFlags.EXTERNAL)){var r=e.program,n=assert(d.findDecorator(d.DecoratorKind.EXTERNAL,t.decorators)),i=n.arguments;if(i&&i.length){var a=i[0];a.kind==d.NodeKind.LITERAL&&a.literalKind==d.LiteralKind.STRING?(E=a.value,i.length>=2&&((a=i[1]).kind==d.NodeKind.LITERAL&&a.literalKind==d.LiteralKind.STRING?(y=E,E=a.value,i.length>2&&r.error(c.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,"2",i.length.toString())):r.error(c.DiagnosticCode.String_literal_expected,a.range))):r.error(c.DiagnosticCode.String_literal_expected,a.range)}else r.error(c.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,n.range,"1","0")}}t.Compiler=f},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.Operation_not_supported=100]="Operation_not_supported",e[e.Operation_is_unsafe=101]="Operation_is_unsafe",e[e.User_defined_0=102]="User_defined_0",e[e.Conversion_from_type_0_to_1_requires_an_explicit_cast=200]="Conversion_from_type_0_to_1_requires_an_explicit_cast",e[e.Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit=201]="Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit",e[e.Type_0_cannot_be_changed_to_type_1=202]="Type_0_cannot_be_changed_to_type_1",e[e.Type_0_cannot_be_reinterpreted_as_type_1=203]="Type_0_cannot_be_reinterpreted_as_type_1",e[e.Basic_type_0_cannot_be_nullable=204]="Basic_type_0_cannot_be_nullable",e[e.Cannot_export_a_mutable_global=205]="Cannot_export_a_mutable_global",e[e.Compiling_constant_with_non_constant_initializer_as_mutable=206]="Compiling_constant_with_non_constant_initializer_as_mutable",e[e.Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa=207]="Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa",e[e.Unmanaged_classes_cannot_implement_interfaces=208]="Unmanaged_classes_cannot_implement_interfaces",e[e.Invalid_regular_expression_flags=209]="Invalid_regular_expression_flags",e[e.Implementation_0_must_match_the_signature_1=210]="Implementation_0_must_match_the_signature_1",e[e.Class_0_is_sealed_and_cannot_be_extended=211]="Class_0_is_sealed_and_cannot_be_extended",e[e.Decorator_0_is_not_valid_here=212]="Decorator_0_is_not_valid_here",e[e.Duplicate_decorator=213]="Duplicate_decorator",e[e.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf=214]="An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf",e[e.Optional_parameter_must_have_an_initializer=215]="Optional_parameter_must_have_an_initializer",e[e.Constructor_of_class_0_must_not_require_any_arguments=216]="Constructor_of_class_0_must_not_require_any_arguments",e[e.Function_0_cannot_be_inlined_into_itself=217]="Function_0_cannot_be_inlined_into_itself",e[e.Cannot_access_method_0_without_calling_it_as_it_requires_this_to_be_set=218]="Cannot_access_method_0_without_calling_it_as_it_requires_this_to_be_set",e[e.Optional_properties_are_not_supported=219]="Optional_properties_are_not_supported",e[e.Unterminated_string_literal=1002]="Unterminated_string_literal",e[e.Identifier_expected=1003]="Identifier_expected",e[e._0_expected=1005]="_0_expected",e[e.A_file_cannot_have_a_reference_to_itself=1006]="A_file_cannot_have_a_reference_to_itself",e[e.Trailing_comma_not_allowed=1009]="Trailing_comma_not_allowed",e[e.Unexpected_token=1012]="Unexpected_token",e[e.A_rest_parameter_must_be_last_in_a_parameter_list=1014]="A_rest_parameter_must_be_last_in_a_parameter_list",e[e.Parameter_cannot_have_question_mark_and_initializer=1015]="Parameter_cannot_have_question_mark_and_initializer",e[e.A_required_parameter_cannot_follow_an_optional_parameter=1016]="A_required_parameter_cannot_follow_an_optional_parameter",e[e.Statements_are_not_allowed_in_ambient_contexts=1036]="Statements_are_not_allowed_in_ambient_contexts",e[e.Initializers_are_not_allowed_in_ambient_contexts=1039]="Initializers_are_not_allowed_in_ambient_contexts",e[e._0_modifier_cannot_be_used_here=1042]="_0_modifier_cannot_be_used_here",e[e.A_rest_parameter_cannot_be_optional=1047]="A_rest_parameter_cannot_be_optional",e[e.A_rest_parameter_cannot_have_an_initializer=1048]="A_rest_parameter_cannot_have_an_initializer",e[e.A_set_accessor_must_have_exactly_one_parameter=1049]="A_set_accessor_must_have_exactly_one_parameter",e[e.A_set_accessor_parameter_cannot_have_an_initializer=1052]="A_set_accessor_parameter_cannot_have_an_initializer",e[e.A_get_accessor_cannot_have_parameters=1054]="A_get_accessor_cannot_have_parameters",e[e.Enum_member_must_have_initializer=1061]="Enum_member_must_have_initializer",e[e.Type_parameters_cannot_appear_on_a_constructor_declaration=1092]="Type_parameters_cannot_appear_on_a_constructor_declaration",e[e.Type_annotation_cannot_appear_on_a_constructor_declaration=1093]="Type_annotation_cannot_appear_on_a_constructor_declaration",e[e.An_accessor_cannot_have_type_parameters=1094]="An_accessor_cannot_have_type_parameters",e[e.A_set_accessor_cannot_have_a_return_type_annotation=1095]="A_set_accessor_cannot_have_a_return_type_annotation",e[e.Type_parameter_list_cannot_be_empty=1098]="Type_parameter_list_cannot_be_empty",e[e.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement=1104]="A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement",e[e.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement=1105]="A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement",e[e.A_return_statement_can_only_be_used_within_a_function_body=1108]="A_return_statement_can_only_be_used_within_a_function_body",e[e.Expression_expected=1109]="Expression_expected",e[e.Type_expected=1110]="Type_expected",e[e.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement=1113]="A_default_clause_cannot_appear_more_than_once_in_a_switch_statement",e[e.Duplicate_label_0=1114]="Duplicate_label_0",e[e.Octal_literals_are_not_allowed_in_strict_mode=1121]="Octal_literals_are_not_allowed_in_strict_mode",e[e.Digit_expected=1124]="Digit_expected",e[e.Hexadecimal_digit_expected=1125]="Hexadecimal_digit_expected",e[e.Unexpected_end_of_text=1126]="Unexpected_end_of_text",e[e.Invalid_character=1127]="Invalid_character",e[e._case_or_default_expected=1130]="_case_or_default_expected",e[e.A_declare_modifier_cannot_be_used_in_an_already_ambient_context=1038]="A_declare_modifier_cannot_be_used_in_an_already_ambient_context",e[e.Type_argument_expected=1140]="Type_argument_expected",e[e.String_literal_expected=1141]="String_literal_expected",e[e.Line_break_not_permitted_here=1142]="Line_break_not_permitted_here",e[e.Declaration_expected=1146]="Declaration_expected",e[e._const_declarations_must_be_initialized=1155]="_const_declarations_must_be_initialized",e[e.Unterminated_regular_expression_literal=1161]="Unterminated_regular_expression_literal",e[e.Interface_declaration_cannot_have_implements_clause=1176]="Interface_declaration_cannot_have_implements_clause",e[e.Binary_digit_expected=1177]="Binary_digit_expected",e[e.Octal_digit_expected=1178]="Octal_digit_expected",e[e.An_implementation_cannot_be_declared_in_ambient_contexts=1183]="An_implementation_cannot_be_declared_in_ambient_contexts",e[e.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive=1198]="An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive",e[e.Unterminated_Unicode_escape_sequence=1199]="Unterminated_Unicode_escape_sequence",e[e.Decorators_are_not_valid_here=1206]="Decorators_are_not_valid_here",e[e._abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration=1242]="_abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration",e[e.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract=1245]="Method_0_cannot_have_an_implementation_because_it_is_marked_abstract",e[e.A_definite_assignment_assertion_is_not_permitted_in_this_context=1255]="A_definite_assignment_assertion_is_not_permitted_in_this_context",e[e.A_class_may_only_extend_another_class=1311]="A_class_may_only_extend_another_class",e[e.A_parameter_property_cannot_be_declared_using_a_rest_parameter=1317]="A_parameter_property_cannot_be_declared_using_a_rest_parameter",e[e.Duplicate_identifier_0=2300]="Duplicate_identifier_0",e[e.Cannot_find_name_0=2304]="Cannot_find_name_0",e[e.Module_0_has_no_exported_member_1=2305]="Module_0_has_no_exported_member_1",e[e.Generic_type_0_requires_1_type_argument_s=2314]="Generic_type_0_requires_1_type_argument_s",e[e.Type_0_is_not_generic=2315]="Type_0_is_not_generic",e[e.Type_0_is_not_assignable_to_type_1=2322]="Type_0_is_not_assignable_to_type_1",e[e.Index_signature_is_missing_in_type_0=2329]="Index_signature_is_missing_in_type_0",e[e._this_cannot_be_referenced_in_current_location=2332]="_this_cannot_be_referenced_in_current_location",e[e._super_can_only_be_referenced_in_a_derived_class=2335]="_super_can_only_be_referenced_in_a_derived_class",e[e.Property_0_does_not_exist_on_type_1=2339]="Property_0_does_not_exist_on_type_1",e[e.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures=2349]="Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures",e[e.Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature=2351]="Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature",e[e.A_function_whose_declared_type_is_not_void_must_return_a_value=2355]="A_function_whose_declared_type_is_not_void_must_return_a_value",e[e.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access=2357]="The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access",e[e.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access=2364]="The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access",e[e.Operator_0_cannot_be_applied_to_types_1_and_2=2365]="Operator_0_cannot_be_applied_to_types_1_and_2",e[e._get_and_set_accessor_must_have_the_same_type=2380]="_get_and_set_accessor_must_have_the_same_type",e[e.Constructor_implementation_is_missing=2390]="Constructor_implementation_is_missing",e[e.Function_implementation_is_missing_or_not_immediately_following_the_declaration=2391]="Function_implementation_is_missing_or_not_immediately_following_the_declaration",e[e.Multiple_constructor_implementations_are_not_allowed=2392]="Multiple_constructor_implementations_are_not_allowed",e[e.Duplicate_function_implementation=2393]="Duplicate_function_implementation",e[e.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local=2395]="Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local",e[e.Type_0_has_no_property_1=2460]="Type_0_has_no_property_1",e[e.The_0_operator_cannot_be_applied_to_type_1=2469]="The_0_operator_cannot_be_applied_to_type_1",e[e.In_const_enum_declarations_member_initializer_must_be_constant_expression=2474]="In_const_enum_declarations_member_initializer_must_be_constant_expression",e[e.Export_declaration_conflicts_with_exported_declaration_of_0=2484]="Export_declaration_conflicts_with_exported_declaration_of_0",e[e.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property=2540]="Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property",e[e.The_target_of_an_assignment_must_be_a_variable_or_a_property_access=2541]="The_target_of_an_assignment_must_be_a_variable_or_a_property_access",e[e.Index_signature_in_type_0_only_permits_reading=2542]="Index_signature_in_type_0_only_permits_reading",e[e.Expected_0_arguments_but_got_1=2554]="Expected_0_arguments_but_got_1",e[e.Expected_at_least_0_arguments_but_got_1=2555]="Expected_at_least_0_arguments_but_got_1",e[e.Expected_0_type_arguments_but_got_1=2558]="Expected_0_type_arguments_but_got_1",e[e.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums=2651]="A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums",e[e.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration=2673]="Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration",e[e.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration=2674]="Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration",e[e.Namespace_0_has_no_exported_member_1=2694]="Namespace_0_has_no_exported_member_1",e[e.File_0_not_found=6054]="File_0_not_found",e[e.Numeric_separators_are_not_allowed_here=6188]="Numeric_separators_are_not_allowed_here",e[e.Multiple_consecutive_numeric_separators_are_not_permitted=6189]="Multiple_consecutive_numeric_separators_are_not_permitted"}(t.DiagnosticCode||(t.DiagnosticCode={})),t.diagnosticCodeToString=function(e){switch(e){case 100:return"Operation not supported.";case 101:return"Operation is unsafe.";case 102:return"User-defined: {0}";case 200:return"Conversion from type '{0}' to '{1}' requires an explicit cast.";case 201:return"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.";case 202:return"Type '{0}' cannot be changed to type '{1}'.";case 203:return"Type '{0}' cannot be reinterpreted as type '{1}'.";case 204:return"Basic type '{0}' cannot be nullable.";case 205:return"Cannot export a mutable global.";case 206:return"Compiling constant with non-constant initializer as mutable.";case 207:return"Unmanaged classes cannot extend managed classes and vice-versa.";case 208:return"Unmanaged classes cannot implement interfaces.";case 209:return"Invalid regular expression flags.";case 210:return"Implementation '{0}' must match the signature '{1}'.";case 211:return"Class '{0}' is sealed and cannot be extended.";case 212:return"Decorator '{0}' is not valid here.";case 213:return"Duplicate decorator.";case 214:return"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.";case 215:return"Optional parameter must have an initializer.";case 216:return"Constructor of class '{0}' must not require any arguments.";case 217:return"Function '{0}' cannot be inlined into itself.";case 218:return"Cannot access method '{0}' without calling it as it requires 'this' to be set.";case 219:return"Optional properties are not supported.";case 1002:return"Unterminated string literal.";case 1003:return"Identifier expected.";case 1005:return"'{0}' expected.";case 1006:return"A file cannot have a reference to itself.";case 1009:return"Trailing comma not allowed.";case 1012:return"Unexpected token.";case 1014:return"A rest parameter must be last in a parameter list.";case 1015:return"Parameter cannot have question mark and initializer.";case 1016:return"A required parameter cannot follow an optional parameter.";case 1036:return"Statements are not allowed in ambient contexts.";case 1039:return"Initializers are not allowed in ambient contexts.";case 1042:return"'{0}' modifier cannot be used here.";case 1047:return"A rest parameter cannot be optional.";case 1048:return"A rest parameter cannot have an initializer.";case 1049:return"A 'set' accessor must have exactly one parameter.";case 1052:return"A 'set' accessor parameter cannot have an initializer.";case 1054:return"A 'get' accessor cannot have parameters.";case 1061:return"Enum member must have initializer.";case 1092:return"Type parameters cannot appear on a constructor declaration.";case 1093:return"Type annotation cannot appear on a constructor declaration.";case 1094:return"An accessor cannot have type parameters.";case 1095:return"A 'set' accessor cannot have a return type annotation.";case 1098:return"Type parameter list cannot be empty.";case 1104:return"A 'continue' statement can only be used within an enclosing iteration statement.";case 1105:return"A 'break' statement can only be used within an enclosing iteration or switch statement.";case 1108:return"A 'return' statement can only be used within a function body.";case 1109:return"Expression expected.";case 1110:return"Type expected.";case 1113:return"A 'default' clause cannot appear more than once in a 'switch' statement.";case 1114:return"Duplicate label '{0}'.";case 1121:return"Octal literals are not allowed in strict mode.";case 1124:return"Digit expected.";case 1125:return"Hexadecimal digit expected.";case 1126:return"Unexpected end of text.";case 1127:return"Invalid character.";case 1130:return"'case' or 'default' expected.";case 1038:return"A 'declare' modifier cannot be used in an already ambient context.";case 1140:return"Type argument expected.";case 1141:return"String literal expected.";case 1142:return"Line break not permitted here.";case 1146:return"Declaration expected.";case 1155:return"'const' declarations must be initialized.";case 1161:return"Unterminated regular expression literal.";case 1176:return"Interface declaration cannot have 'implements' clause.";case 1177:return"Binary digit expected.";case 1178:return"Octal digit expected.";case 1183:return"An implementation cannot be declared in ambient contexts.";case 1198:return"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.";case 1199:return"Unterminated Unicode escape sequence.";case 1206:return"Decorators are not valid here.";case 1242:return"'abstract' modifier can only appear on a class, method, or property declaration.";case 1245:return"Method '{0}' cannot have an implementation because it is marked abstract.";case 1255:return"A definite assignment assertion '!' is not permitted in this context.";case 1311:return"A class may only extend another class.";case 1317:return"A parameter property cannot be declared using a rest parameter.";case 2300:return"Duplicate identifier '{0}'.";case 2304:return"Cannot find name '{0}'.";case 2305:return"Module '{0}' has no exported member '{1}'.";case 2314:return"Generic type '{0}' requires {1} type argument(s).";case 2315:return"Type '{0}' is not generic.";case 2322:return"Type '{0}' is not assignable to type '{1}'.";case 2329:return"Index signature is missing in type '{0}'.";case 2332:return"'this' cannot be referenced in current location.";case 2335:return"'super' can only be referenced in a derived class.";case 2339:return"Property '{0}' does not exist on type '{1}'.";case 2349:return"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.";case 2351:return"Cannot use 'new' with an expression whose type lacks a construct signature.";case 2355:return"A function whose declared type is not 'void' must return a value.";case 2357:return"The operand of an increment or decrement operator must be a variable or a property access.";case 2364:return"The left-hand side of an assignment expression must be a variable or a property access.";case 2365:return"Operator '{0}' cannot be applied to types '{1}' and '{2}'.";case 2380:return"'get' and 'set' accessor must have the same type.";case 2390:return"Constructor implementation is missing.";case 2391:return"Function implementation is missing or not immediately following the declaration.";case 2392:return"Multiple constructor implementations are not allowed.";case 2393:return"Duplicate function implementation.";case 2395:return"Individual declarations in merged declaration '{0}' must be all exported or all local.";case 2460:return"Type '{0}' has no property '{1}'.";case 2469:return"The '{0}' operator cannot be applied to type '{1}'.";case 2474:return"In 'const' enum declarations member initializer must be constant expression.";case 2484:return"Export declaration conflicts with exported declaration of '{0}'.";case 2540:return"Cannot assign to '{0}' because it is a constant or a read-only property.";case 2541:return"The target of an assignment must be a variable or a property access.";case 2542:return"Index signature in type '{0}' only permits reading.";case 2554:return"Expected {0} arguments, but got {1}.";case 2555:return"Expected at least {0} arguments, but got {1}.";case 2558:return"Expected {0} type arguments, but got {1}.";case 2651:return"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.";case 2673:return"Constructor of class '{0}' is private and only accessible within the class declaration.";case 2674:return"Constructor of class '{0}' is protected and only accessible within the class declaration.";case 2694:return"Namespace '{0}' has no exported member '{1}'.";case 6054:return"File '{0}' not found.";case 6188:return"Numeric separators are not allowed here.";case 6189:return"Multiple consecutive numeric separators are not permitted.";default:return""}}},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(t,r)};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),i=this&&this.__values||function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],r=0;return t?t.call(e):{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)s.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return s};Object.defineProperty(t,"__esModule",{value:!0});var s,o=r(1),c=r(4),l=r(3),p=r(7),u=r(0);!function(e){e[e.REPORT=0]="REPORT",e[e.SWALLOW=1]="SWALLOW"}(s=t.ReportMode||(t.ReportMode={}));var h=function(e){function t(t){var r=e.call(this,t.diagnostics)||this;return r.currentThisExpression=null,r.currentElementExpression=null,r.program=t,r}return n(t,e),t.prototype.resolveType=function(e,t,r){if(void 0===t&&(t=null),void 0===r&&(r=s.REPORT),e.kind==l.NodeKind.SIGNATURE){var n=this.resolveSignature(e,t,r);return n?e.isNullable?n.type.asNullable():n.type:null}assert(e.kind==l.NodeKind.TYPE);var i=e,a=i.name.text,h=a,d=i.range.source.internalPath+u.PATH_DELIMITER+a,_=this.program.elementsLookup,m=void 0;if((m=_.get(d))||(m=_.get(h)))switch(m.kind){case c.ElementKind.ENUM:return null!==i.typeArguments&&i.typeArguments.length?(r==s.REPORT&&this.error(o.DiagnosticCode.Type_0_is_not_generic,e.range,m.internalName),null):p.Type.i32;case c.ElementKind.CLASS_PROTOTYPE:var g=this.resolveClassInclTypeArguments(m,i.typeArguments,t,e);return g?e.isNullable?g.type.asNullable():g.type:null}var y=this.program.typeAliases.get(a);if(y)return this.resolveType(y.type,t,r);var E=i.typeArguments;if(E){for(var f=E.length,T=new Array(f),I=0;I",h+="<"+A+">")}else if(t){var C=t.get(h);if(C)return C}}var N=this.program.typesLookup,O=void 0;return(O=N.get(d))||(O=N.get(h))?O:(r==s.REPORT&&this.error(o.DiagnosticCode.Cannot_find_name_0,i.name.range,h),null)},t.prototype.resolveSignature=function(e,t,r){void 0===t&&(t=null),void 0===r&&(r=s.REPORT);var n=e.explicitThisType,i=null;if(n&&!(i=this.resolveType(n,t,r)))return null;for(var a=e.parameters,o=a.length,c=new Array(o),u=new Array(o),h=0,d=!1,_=0;_"),_=new c.Function(e,V,H,R||y,r),e.instances.set(d,_),this.program.instancesLookup.set(V,_),_},t.prototype.resolveFunctionPartially=function(e,t,r){void 0===r&&(r=s.REPORT),assert(e.is(u.CommonFlags.INSTANCE));var n=assert(e.classPrototype);if(!t||!t.length)return e;var i=e.simpleName,a=p.typesToString(t),o=new c.FunctionPrototype(this.program,i,n.internalName+"<"+a+">"+u.INSTANCE_DELIMITER+i,e.declaration,n,e.decoratorFlags);return o.flags=e.flags,o.operatorKind=e.operatorKind,o.classTypeArguments=t,o},t.prototype.resolveFunctionInclTypeArguments=function(e,t,r,n,i){void 0===i&&(i=s.REPORT);var a=null;return!e.is(u.CommonFlags.GENERIC)||(assert(null!=t&&0!=t.length),a=this.resolveTypeArguments(assert(e.declaration.typeParameters),t,r,n,i))?this.resolveFunction(e,a,r,i):null},t.prototype.resolveClass=function(e,t,r,n){var h,d,_,m,g,y,E,f;void 0===r&&(r=null),void 0===n&&(n=s.REPORT);var T=t?p.typesToString(t):"",I=e.instances.get(T);if(I)return I;var v=r;if(r=new Map,v)try{for(var A=i(v),C=A.next();!C.done;C=A.next()){var N=a(C.value,2),O=N[0],S=N[1];r.set(O,S)}}catch(e){h={error:e}}finally{try{C&&!C.done&&(d=A.return)&&d.call(A)}finally{if(h)throw h.error}}var L=e.declaration;if(t){var b=L.typeParameters,k=b.length,R=t.length;assert(R==k);for(var x=0;x",U+="<"+T+">"),(I=new c.Class(e,B,U,t,F)).contextualTypeArguments=r,e.instances.set(T,I),this.program.instancesLookup.set(U,I);var P=0;if(F){if(F.members){I.members||(I.members=new Map);try{for(var w=i(F.members.values()),M=w.next();!M.done;M=w.next()){var G=M.value;I.members.set(G.simpleName,G)}}catch(e){_={error:e}}finally{try{M&&!M.done&&(m=w.return)&&m.call(w)}finally{if(_)throw _.error}}}P=F.currentMemoryOffset}if(e.constructorPrototype){var K=this.resolveFunctionPartially(e.constructorPrototype,t,n);if(!K)return null;I.constructorInstance=this.resolveFunction(K,null,null,n)}if(e.instanceMembers)try{for(var z=i(e.instanceMembers.values()),H=z.next();!H.done;H=z.next()){var V=H.value;switch(V.kind){case c.ElementKind.FIELD_PROTOTYPE:I.members||(I.members=new Map);var X=V.declaration,W=null;if(X.type)W=this.resolveType(X.type,I.contextualTypeArguments,n);else{if(null!==F&&null!==F.members){var Y=F.members.get(V.simpleName);Y&&!Y.is(u.CommonFlags.PRIVATE)&&(assert(Y.kind==c.ElementKind.FIELD),W=Y.type)}W||n==s.REPORT&&this.error(o.DiagnosticCode.Type_expected,X.name.range.atEnd)}if(!W)break;var Q=new c.Field(V,U+u.INSTANCE_DELIMITER+V.simpleName,W,X,I);switch(W.byteSize){case 1:break;case 2:1&P&&++P;break;case 4:3&P&&(P=1+(3|P));break;case 8:7&P&&(P=1+(7|P));break;default:assert(!1)}Q.memoryOffset=P,P+=W.byteSize,I.members.set(V.simpleName,Q);break;case c.ElementKind.FUNCTION_PROTOTYPE:I.members||(I.members=new Map);var q=this.resolveFunctionPartially(V,t,n);if(!q)return null;q.internalName=U+u.INSTANCE_DELIMITER+q.simpleName,I.members.set(V.simpleName,q);break;case c.ElementKind.PROPERTY:I.members||(I.members=new Map);var j=assert(V.getterPrototype),Z=V.setterPrototype,J=new c.Property(this.program,V.simpleName,U+u.INSTANCE_DELIMITER+V.simpleName,e),$=this.resolveFunctionPartially(j,t,n);if(!$)return null;if($.internalName=U+u.INSTANCE_DELIMITER+$.simpleName,J.getterPrototype=$,Z){var ee=this.resolveFunctionPartially(Z,t,n);if(!ee)return null;ee.internalName=U+u.INSTANCE_DELIMITER+ee.simpleName,J.setterPrototype=ee}I.members.set(V.simpleName,J);break;default:assert(!1)}}}catch(e){g={error:e}}finally{try{H&&!H.done&&(y=z.return)&&y.call(z)}finally{if(g)throw g.error}}I.currentMemoryOffset=P;try{for(var te=i(e.overloadPrototypes),re=te.next();!re.done;re=te.next()){var ne=a(re.value,2),ie=ne[0],ae=ne[1];assert(ie!=c.OperatorKind.INVALID);var se=void 0;if(ae.is(u.CommonFlags.INSTANCE)){var oe=this.resolveFunctionPartially(ae,t,n);if(!oe)continue;se=this.resolveFunction(oe,null,null,n)}else se=this.resolveFunction(ae,null,null,n);if(se){var ce=I.overloads;ce||(I.overloads=ce=new Map),ce.set(ie,se)}}}catch(e){E={error:e}}finally{try{re&&!re.done&&(f=te.return)&&f.call(te)}finally{if(E)throw E.error}}return I},t.prototype.resolveClassInclTypeArguments=function(e,t,r,n,i){void 0===i&&(i=s.REPORT);var a=null;if(e.is(u.CommonFlags.GENERIC)){var c=e.declaration.typeParameters,l=c.length;assert(l>0);var p=null!==t?t.length:0;if(l!=p)return i==s.REPORT&&this.error(o.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,l.toString(10),p.toString(10)),null;if(!(a=this.resolveTypeArguments(c,t,r,n,i)))return null}else if(null!==t&&t.length)return i==s.REPORT&&this.error(o.DiagnosticCode.Type_0_is_not_generic,n.range,e.internalName),null;return this.resolveClass(e,a,r,i)},t}(o.DiagnosticEmitter);t.Resolver=h},function(e,t,r){r(13),e.exports=r(25)},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(14),r(16),r(17),r(18);var n=r(5);n.Module.prototype.toText=function(){return binaryen.wrapModule(this.ref).emitStackIR()},n.Module.prototype.toAsmjs=function(){return binaryen.wrapModule(this.ref).emitAsmjs()}},function(e,t,r){(function(e){const t=e.Binaryen||r(15);for(var n in e.binaryen=t,t)(n.startsWith("_Binaryen")||n.startsWith("_Relooper"))&&(e[n]=t[n]);e.__memory_allocate=t._malloc,e.__memory_free=t._free,e.__memory_copy=t._memmove,e.__store=function(e,r){t.HEAPU8[e]=r},e.__load=function(e){return t.HEAPU8[e]}}).call(this,r(6))},function(t,r){t.exports=e},function(e,t,r){(function(e){var t="undefined"!=typeof window&&window||void 0!==e&&e||self;t.ASC_TARGET=0;var r=new Float64Array(1),n=new Uint32Array(r.buffer);function i(){Error.captureStackTrace?Error.captureStackTrace(this,i):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}function a(e){this.message=e||"assertion failed",Error.captureStackTrace?Error.captureStackTrace(this,a):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}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)},{EPSILON:{value:Math.fround(1.1920929e-7),writable:!1},MIN_VALUE:{value:Math.fround(1.4012985e-45),writable:!1},MAX_VALUE:{value:Math.fround(3.4028235e38),writable:!1},MIN_NORMAL_VALUE:{value:Math.fround(1.17549435e-38),writable:!1},MIN_SAFE_INTEGER:{value:-16777215,writable:!1},MAX_SAFE_INTEGER:{value:16777215,writable:!1},POSITIVE_INFINITY:{value:1/0,writable:!1},NEGATIVE_INFINITY:{value:-1/0,writable:!1},NaN:{value:NaN,writable:!1}}),Object.defineProperties(t.f64=function(e){return+e},{EPSILON:{value:2.220446049250313e-16,writable:!1},MIN_VALUE:{value:5e-324,writable:!1},MAX_VALUE:{value:1.7976931348623157e308,writable:!1},MIN_NORMAL_VALUE:{value:2.2250738585072014e-308,writable:!1},MIN_SAFE_INTEGER:{value:-9007199254740991,writable:!1},MAX_SAFE_INTEGER:{value:9007199254740991,writable:!1},POSITIVE_INFINITY:{value:1/0,writable:!1},NEGATIVE_INFINITY:{value:-1/0,writable:!1},NaN:{value:NaN,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},i.prototype=Object.create(Error.prototype),i.prototype.name="UnreachableError",i.prototype.message="unreachable",t.unreachable=function(){throw new i},a.prototype=Object.create(Error.prototype),a.prototype.name="AssertionError",t.assert=function(e,t){if(e)return e;throw new a(t)},t.changetype=function(e){return e},t.parseI32=function(e,t){return 0|parseInt(e,void 0)},String.fromCharCodes=function(e){return String.fromCharCode.apply(String,e)},String.fromCodePoints=function(e){return String.fromCodePoint.apply(String,e)},t.isInteger=Number.isInteger,t.isFloat=function(e){return"number"==typeof e},t.isReference=function(e){return"object"==typeof e||"string"==typeof e},t.isString=function(e){return"string"==typeof e||e instanceof String},t.isArray=Array.isArray,t.unchecked=function(e){return e},t.fmod=function(e,t){return e%t},t.fmodf=function(e,t){return Math.fround(e%t)},t.JSMath=Math,t.JSMath.signbit=function(e){return r[0]=e,Boolean(n[1]>>>31&e==e)},t.memory=(()=>{var e=new Uint8Array(0),r=0;return{allocate:t.__memory_allocate||function(t){if(!(t>>>=0))return 0;if(r+t>e.length){var n=e;(e=new Uint8Array(Math.max(65536,e.length+t,2*e.length))).set(n)}var i=r;return 7&(r+=t)&&(r=1+(7|r)),i},free:t.__memory_free||function(e){},copy:t.__memory_copy||function(t,r,n){e.copyWithin(t,r,r+n)}}})(),t.store=t.__store||function(e,t,r){HEAP[e+(0|r)]=t},t.load=t.__load||function(e,t){return HEAP[e+(0|t)]}}).call(this,r(6))},function(e,t,r){(function(e){const t=new Float64Array(1),r=new Float32Array(t.buffer),n=new Int32Array(t.buffer);e.f32_as_i32=function(e){return r[0]=e,n[0]},e.i32_as_f32=function(e){return n[0]=e,r[0]},e.f64_as_i64=function(e){return t[0]=e,i64_new(n[0],n[1])},e.i64_as_f64=function(e){return n[0]=i64_low(e),n[1]=i64_high(e),t[0]}}).call(this,r(6))},function(e,t,r){(function(e){const t=e.Long||r(19);e.i64_zero=t.ZERO,e.i64_one=t.ONE,e.i64_new=function(e,r){return t.fromBits(e,r)},e.i64_low=function(e){return e.low},e.i64_high=function(e){return e.high},e.i64_add=function(e,t){return e.add(t)},e.i64_sub=function(e,t){return e.sub(t)},e.i64_mul=function(e,t){return e.mul(t)},e.i64_div=function(e,t){return e.div(t)},e.i64_div_u=function(e,t){return e.toUnsigned().div(t.toUnsigned()).toSigned()},e.i64_rem=function(e,t){return e.mod(t)},e.i64_rem_u=function(e,t){return e.toUnsigned().mod(t.toUnsigned()).toSigned()},e.i64_and=function(e,t){return e.and(t)},e.i64_or=function(e,t){return e.or(t)},e.i64_xor=function(e,t){return e.xor(t)},e.i64_shl=function(e,t){return e.shl(t)},e.i64_shr=function(e,t){return e.shr(t)},e.i64_shr_u=function(e,t){return e.shru(t)},e.i64_not=function(e){return e.not()},e.i64_eq=function(e,t){return e.eq(t)},e.i64_ne=function(e,t){return e.ne(t)},e.i64_align=function(e,r){assert(r&&0==(r&r-1));var n=t.fromInt(r-1);return e.add(n).and(n.not())},e.i64_is_i8=function(e){return 0===e.high&&e.low>=0&&e.low<=i8.MAX_VALUE||-1===e.high&&e.low>=i8.MIN_VALUE&&e.low<0},e.i64_is_i16=function(e){return 0===e.high&&e.low>=0&&e.low<=i16.MAX_VALUE||-1===e.high&&e.low>=i16.MIN_VALUE&&e.low<0},e.i64_is_i32=function(e){return 0===e.high&&e.low>=0||-1===e.high&&e.low<0},e.i64_is_u8=function(e){return 0===e.high&&e.low>=0&&e.low<=u8.MAX_VALUE},e.i64_is_u16=function(e){return 0===e.high&&e.low>=0&&e.low<=u16.MAX_VALUE},e.i64_is_u32=function(e){return 0===e.high},e.i64_is_bool=function(e){return 0===e.high&&(0===e.low||1===e.low)};const n=t.fromNumber(f32.MIN_SAFE_INTEGER),i=t.fromNumber(f32.MAX_SAFE_INTEGER);e.i64_is_f32=function(e){return e.gte(n)&&e.lte(i)};const a=t.fromNumber(f64.MIN_SAFE_INTEGER),s=t.fromNumber(f64.MAX_SAFE_INTEGER);e.i64_is_f64=function(e){return e.gte(a)&&e.lte(s)},e.i64_to_f32=function(t){return e.Math.fround(t.toNumber())},e.i64_to_f64=function(e){return e.toNumber()},e.i64_to_string=function(e,t){return(t?e.toUnsigned():e).toString(10)}}).call(this,r(6))},function(e,t){e.exports=n;var r=null;try{r=new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([0,97,115,109,1,0,0,0,1,13,2,96,0,1,127,96,4,127,127,127,127,1,127,3,7,6,0,1,1,1,1,1,6,6,1,127,1,65,0,11,7,50,6,3,109,117,108,0,1,5,100,105,118,95,115,0,2,5,100,105,118,95,117,0,3,5,114,101,109,95,115,0,4,5,114,101,109,95,117,0,5,8,103,101,116,95,104,105,103,104,0,0,10,191,1,6,4,0,35,0,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,126,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,127,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,128,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,129,34,4,66,32,135,167,36,0,32,4,167,11,36,1,1,126,32,0,173,32,1,173,66,32,134,132,32,2,173,32,3,173,66,32,134,132,130,34,4,66,32,135,167,36,0,32,4,167,11])),{}).exports}catch(e){}function n(e,t,r){this.low=0|e,this.high=0|t,this.unsigned=!!r}function i(e){return!0===(e&&e.__isLong__)}n.prototype.__isLong__,Object.defineProperty(n.prototype,"__isLong__",{value:!0}),n.isLong=i;var a={},s={};function o(e,t){var r,n,i;return t?(i=0<=(e>>>=0)&&e<256)&&(n=s[e])?n:(r=l(e,(0|e)<0?-1:0,!0),i&&(s[e]=r),r):(i=-128<=(e|=0)&&e<128)&&(n=a[e])?n:(r=l(e,e<0?-1:0,!1),i&&(a[e]=r),r)}function c(e,t){if(isNaN(e))return t?E:y;if(t){if(e<0)return E;if(e>=_)return A}else{if(e<=-m)return C;if(e+1>=m)return v}return e<0?c(-e,t).neg():l(e%d|0,e/d|0,t)}function l(e,t,r){return new n(e,t,r)}n.fromInt=o,n.fromNumber=c,n.fromBits=l;var p=Math.pow;function u(e,t,r){if(0===e.length)throw Error("empty string");if("NaN"===e||"Infinity"===e||"+Infinity"===e||"-Infinity"===e)return y;if("number"==typeof t?(r=t,t=!1):t=!!t,(r=r||10)<2||360)throw Error("interior hyphen");if(0===n)return u(e.substring(1),t,r).neg();for(var i=c(p(r,8)),a=y,s=0;s>>0:this.low},N.toNumber=function(){return this.unsigned?(this.high>>>0)*d+(this.low>>>0):this.high*d+(this.low>>>0)},N.toString=function(e){if((e=e||10)<2||36>>0).toString(e);if((a=o).isZero())return l+s;for(;l.length<6;)l="0"+l;s=""+l+s}},N.getHighBits=function(){return this.high},N.getHighBitsUnsigned=function(){return this.high>>>0},N.getLowBits=function(){return this.low},N.getLowBitsUnsigned=function(){return this.low>>>0},N.getNumBitsAbs=function(){if(this.isNegative())return this.eq(C)?64:this.neg().getNumBitsAbs();for(var e=0!=this.high?this.high:this.low,t=31;t>0&&0==(e&1<=0},N.isOdd=function(){return 1==(1&this.low)},N.isEven=function(){return 0==(1&this.low)},N.equals=function(e){return i(e)||(e=h(e)),(this.unsigned===e.unsigned||this.high>>>31!=1||e.high>>>31!=1)&&(this.high===e.high&&this.low===e.low)},N.eq=N.equals,N.notEquals=function(e){return!this.eq(e)},N.neq=N.notEquals,N.ne=N.notEquals,N.lessThan=function(e){return this.comp(e)<0},N.lt=N.lessThan,N.lessThanOrEqual=function(e){return this.comp(e)<=0},N.lte=N.lessThanOrEqual,N.le=N.lessThanOrEqual,N.greaterThan=function(e){return this.comp(e)>0},N.gt=N.greaterThan,N.greaterThanOrEqual=function(e){return this.comp(e)>=0},N.gte=N.greaterThanOrEqual,N.ge=N.greaterThanOrEqual,N.compare=function(e){if(i(e)||(e=h(e)),this.eq(e))return 0;var t=this.isNegative(),r=e.isNegative();return t&&!r?-1:!t&&r?1:this.unsigned?e.high>>>0>this.high>>>0||e.high===this.high&&e.low>>>0>this.low>>>0?-1:1:this.sub(e).isNegative()?-1:1},N.comp=N.compare,N.negate=function(){return!this.unsigned&&this.eq(C)?C:this.not().add(f)},N.neg=N.negate,N.add=function(e){i(e)||(e=h(e));var t=this.high>>>16,r=65535&this.high,n=this.low>>>16,a=65535&this.low,s=e.high>>>16,o=65535&e.high,c=e.low>>>16,p=0,u=0,d=0,_=0;return d+=(_+=a+(65535&e.low))>>>16,u+=(d+=n+c)>>>16,p+=(u+=r+o)>>>16,p+=t+s,l((d&=65535)<<16|(_&=65535),(p&=65535)<<16|(u&=65535),this.unsigned)},N.subtract=function(e){return i(e)||(e=h(e)),this.add(e.neg())},N.sub=N.subtract,N.multiply=function(e){if(this.isZero())return y;if(i(e)||(e=h(e)),r)return l(r.mul(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned);if(e.isZero())return y;if(this.eq(C))return e.isOdd()?C:y;if(e.eq(C))return this.isOdd()?C:y;if(this.isNegative())return e.isNegative()?this.neg().mul(e.neg()):this.neg().mul(e).neg();if(e.isNegative())return this.mul(e.neg()).neg();if(this.lt(g)&&e.lt(g))return c(this.toNumber()*e.toNumber(),this.unsigned);var t=this.high>>>16,n=65535&this.high,a=this.low>>>16,s=65535&this.low,o=e.high>>>16,p=65535&e.high,u=e.low>>>16,d=65535&e.low,_=0,m=0,E=0,f=0;return E+=(f+=s*d)>>>16,m+=(E+=a*d)>>>16,E&=65535,m+=(E+=s*u)>>>16,_+=(m+=n*d)>>>16,m&=65535,_+=(m+=a*u)>>>16,m&=65535,_+=(m+=s*p)>>>16,_+=t*d+n*u+a*p+s*o,l((E&=65535)<<16|(f&=65535),(_&=65535)<<16|(m&=65535),this.unsigned)},N.mul=N.multiply,N.divide=function(e){if(i(e)||(e=h(e)),e.isZero())throw Error("division by zero");var t,n,a;if(r)return this.unsigned||-2147483648!==this.high||-1!==e.low||-1!==e.high?l((this.unsigned?r.div_u:r.div_s)(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned):this;if(this.isZero())return this.unsigned?E:y;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return E;if(e.gt(this.shru(1)))return T;a=E}else{if(this.eq(C))return e.eq(f)||e.eq(I)?C:e.eq(C)?f:(t=this.shr(1).div(e).shl(1)).eq(y)?e.isNegative()?f:I:(n=this.sub(e.mul(t)),a=t.add(n.div(e)));else if(e.eq(C))return this.unsigned?E:y;if(this.isNegative())return e.isNegative()?this.neg().div(e.neg()):this.neg().div(e).neg();if(e.isNegative())return this.div(e.neg()).neg();a=y}for(n=this;n.gte(e);){t=Math.max(1,Math.floor(n.toNumber()/e.toNumber()));for(var s=Math.ceil(Math.log(t)/Math.LN2),o=s<=48?1:p(2,s-48),u=c(t),d=u.mul(e);d.isNegative()||d.gt(n);)d=(u=c(t-=o,this.unsigned)).mul(e);u.isZero()&&(u=f),a=a.add(u),n=n.sub(d)}return a},N.div=N.divide,N.modulo=function(e){return i(e)||(e=h(e)),r?l((this.unsigned?r.rem_u:r.rem_s)(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned):this.sub(this.div(e).mul(e))},N.mod=N.modulo,N.rem=N.modulo,N.not=function(){return l(~this.low,~this.high,this.unsigned)},N.and=function(e){return i(e)||(e=h(e)),l(this.low&e.low,this.high&e.high,this.unsigned)},N.or=function(e){return i(e)||(e=h(e)),l(this.low|e.low,this.high|e.high,this.unsigned)},N.xor=function(e){return i(e)||(e=h(e)),l(this.low^e.low,this.high^e.high,this.unsigned)},N.shiftLeft=function(e){return i(e)&&(e=e.toInt()),0==(e&=63)?this:e<32?l(this.low<>>32-e,this.unsigned):l(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):l(this.high>>e-32,this.high>=0?0:-1,this.unsigned)},N.shr=N.shiftRight,N.shiftRightUnsigned=function(e){if(i(e)&&(e=e.toInt()),0===(e&=63))return this;var t=this.high;return e<32?l(this.low>>>e|t<<32-e,t>>>e,this.unsigned):l(32===e?t:t>>>e-32,0,this.unsigned)},N.shru=N.shiftRightUnsigned,N.shr_u=N.shiftRightUnsigned,N.toSigned=function(){return this.unsigned?l(this.low,this.high,!1):this},N.toUnsigned=function(){return this.unsigned?this:l(this.low,this.high,!0)},N.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()},N.toBytesLE=function(){var e=this.high,t=this.low;return[255&t,t>>>8&255,t>>>16&255,t>>>24,255&e,e>>>8&255,e>>>16&255,e>>>24]},N.toBytesBE=function(){var e=this.high,t=this.low;return[e>>>24,e>>>16&255,e>>>8&255,255&e,t>>>24,t>>>16&255,t>>>8&255,255&t]},n.fromBytes=function(e,t,r){return r?n.fromBytesLE(e,t):n.fromBytesBE(e,t)},n.fromBytesLE=function(e,t){return new n(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)},n.fromBytesBE=function(e,t){return new n(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}},function(e,t,r){"use strict";var n=this&&this.__values||function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],r=0;return t?t.call(e):{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}};Object.defineProperty(t,"__esModule",{value:!0});var i=r(1),a=r(3),s=r(7),o=r(5),c=r(4),l=r(11),p=r(0);function u(e,t,r,n,p,u){var g,y,E,f,T=e.module;switch(t.internalName){case"isInteger":var I=d(e,r,n,u);return e.currentType=s.Type.bool,I?I.is(4)&&!I.is(256)?T.createI32(1):T.createI32(0):T.createUnreachable();case"isFloat":I=d(e,r,n,u);return e.currentType=s.Type.bool,I?I.is(8)?T.createI32(1):T.createI32(0):T.createUnreachable();case"isSigned":I=d(e,r,n,u);return e.currentType=s.Type.bool,I?I.is(1)?T.createI32(1):T.createI32(0):T.createUnreachable();case"isReference":I=d(e,r,n,u);return e.currentType=s.Type.bool,I?(e.currentType=s.Type.bool,I.is(256)?T.createI32(1):T.createI32(0)):T.createUnreachable();case"isString":I=d(e,r,n,u);if(e.currentType=s.Type.bool,!I)return T.createUnreachable();if(R=I.classReference){var v=e.program.stringInstance;if(v&&R.isAssignableTo(v))return T.createI32(1)}return T.createI32(0);case"isArray":I=d(e,r,n,u);return e.currentType=s.Type.bool,I?null!==(R=I.classReference)&&null!==R.lookupOverload(c.OperatorKind.INDEXED_GET)?T.createI32(1):T.createI32(0):T.createUnreachable();case"isDefined":if(e.currentType=s.Type.bool,r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),1!=n.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();var A=e.resolver.resolveExpression(n[0],e.currentFunction,l.ReportMode.SWALLOW);return T.createI32(A?1:0);case"isConstant":if(e.currentType=s.Type.bool,r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),1!=n.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();var C=e.compileExpressionRetainType(n[0],s.Type.i32,0);return e.currentType=s.Type.bool,T.createI32(o.getExpressionId(C)==o.ExpressionId.Const?1:0);case"isManaged":if(!e.program.hasGC)return e.currentType=s.Type.bool,T.createI32(0);I=d(e,r,n,u);return e.currentType=s.Type.bool,I?null===(R=I.classReference)||R.hasDecorator(c.DecoratorFlags.UNMANAGED)?T.createI32(0):T.createI32(1):T.createUnreachable();case"clz":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.i32,0,1);switch(e.currentType.kind){case 0:case 1:case 5:case 6:f=T.createUnary(o.UnaryOp.ClzI32,g);break;case 10:case 2:case 7:f=T.createUnary(o.UnaryOp.ClzI32,g);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}case 4:f=T.createUnary(e.options.isWasm64?o.UnaryOp.ClzI64:o.UnaryOp.ClzI32,g);break;case 3:case 8:f=T.createUnary(o.UnaryOp.ClzI64,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"ctz":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],0,1)}else g=e.compileExpression(n[0],s.Type.i32,0,1);switch(e.currentType.kind){case 0:case 1:case 5:case 6:f=T.createUnary(o.UnaryOp.CtzI32,g);break;case 10:case 2:case 7:f=T.createUnary(o.UnaryOp.CtzI32,g);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}case 4:f=T.createUnary(e.options.isWasm64?o.UnaryOp.CtzI64:o.UnaryOp.CtzI32,g);break;case 3:case 8:f=T.createUnary(o.UnaryOp.CtzI64,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"popcnt":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.i32,0,1);switch(e.currentType.kind){case 0:case 1:case 5:case 6:f=T.createUnary(o.UnaryOp.PopcntI32,g);break;case 10:case 2:case 7:f=T.createUnary(o.UnaryOp.PopcntI32,g);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}case 4:f=T.createUnary(e.options.isWasm64?o.UnaryOp.PopcntI64:o.UnaryOp.PopcntI32,g);break;case 3:case 8:f=T.createUnary(o.UnaryOp.PopcntI64,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"rotl":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.i32,0,1);switch(y=e.compileExpression(n[1],e.currentType,1,0),e.currentType.kind){case 0:case 1:case 5:case 6:case 10:f=e.ensureSmallIntegerWrap(T.createBinary(o.BinaryOp.RotlI32,g,y),e.currentType);case 2:case 7:f=T.createBinary(o.BinaryOp.RotlI32,g,y);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}case 4:f=T.createBinary(e.options.isWasm64?o.BinaryOp.RotlI64:o.BinaryOp.RotlI32,g,y);break;case 3:case 8:f=T.createBinary(o.BinaryOp.RotlI64,g,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"rotr":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.i32,0,1);switch(y=e.compileExpression(n[1],e.currentType,1,0),e.currentType.kind){case 0:case 1:case 5:case 6:case 10:f=e.ensureSmallIntegerWrap(T.createBinary(o.BinaryOp.RotrI32,g,y),e.currentType);break;case 2:case 7:f=T.createBinary(o.BinaryOp.RotrI32,g,y);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}case 4:f=T.createBinary(e.options.isWasm64?o.BinaryOp.RotrI64:o.BinaryOp.RotrI32,g,y);break;case 3:case 8:f=T.createBinary(o.BinaryOp.RotrI64,g,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"abs":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.f64,0,1);switch(e.currentType.kind){case 0:case 1:case 2:var N=e.currentFunction.getAndFreeTempLocal(s.Type.i32,!1);f=T.createSelect(T.createTeeLocal(N.index,g),T.createBinary(o.BinaryOp.SubI32,T.createI32(0),T.createGetLocal(N.index,1)),T.createBinary(o.BinaryOp.GtI32,T.createGetLocal(N.index,1),T.createI32(0)));break;case 4:N=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);f=T.createSelect(T.createTeeLocal(N.index,g),T.createBinary(e.options.isWasm64?o.BinaryOp.SubI64:o.BinaryOp.SubI32,e.options.usizeType.toNativeZero(T),T.createGetLocal(N.index,e.options.nativeSizeType)),T.createBinary(e.options.isWasm64?o.BinaryOp.GtI64:o.BinaryOp.GtI32,T.createGetLocal(N.index,e.options.nativeSizeType),e.options.usizeType.toNativeZero(T)));break;case 3:N=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);f=T.createSelect(T.createTeeLocal(N.index,g),T.createBinary(o.BinaryOp.SubI64,T.createI64(0,0),T.createGetLocal(N.index,2)),T.createBinary(o.BinaryOp.GtI64,T.createGetLocal(N.index,2),T.createI64(0,0)));break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}case 5:case 6:case 7:case 8:case 10:f=g;break;case 11:f=T.createUnary(o.UnaryOp.AbsF32,g);break;case 12:f=T.createUnary(o.UnaryOp.AbsF64,g);break;case 13:f=T.createUnreachable();break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"max":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.f64,0,1);switch(y=e.compileExpression(n[1],e.currentType,1,1),e.currentType.kind){case 0:case 1:case 2:var O=e.currentFunction.flow,S=e.currentFunction.getTempLocal(e.currentType,!O.canOverflow(g,e.currentType)),L=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(y,e.currentType));e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.GtI32,T.createGetLocal(S.index,1),T.createGetLocal(L.index,1)));break;case 5:case 6:case 7:case 10:O=e.currentFunction.flow,S=e.currentFunction.getTempLocal(e.currentType,!O.canOverflow(g,e.currentType)),L=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(y,e.currentType));e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.GtU32,T.createGetLocal(S.index,1),T.createGetLocal(L.index,1)));break;case 3:S=e.currentFunction.getTempLocal(s.Type.i64,!1),L=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.GtI64,T.createGetLocal(S.index,2),T.createGetLocal(L.index,2)));break;case 8:S=e.currentFunction.getTempLocal(s.Type.i64,!1),L=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.GtU64,T.createGetLocal(S.index,2),T.createGetLocal(L.index,2)));break;case 4:S=e.currentFunction.getTempLocal(e.options.usizeType,!1),L=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(e.options.isWasm64?o.BinaryOp.GtI64:o.BinaryOp.GtI32,T.createGetLocal(S.index,e.options.nativeSizeType),T.createGetLocal(L.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}S=e.currentFunction.getTempLocal(e.options.usizeType,!1),L=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(e.options.isWasm64?o.BinaryOp.GtU64:o.BinaryOp.GtU32,T.createGetLocal(S.index,e.options.nativeSizeType),T.createGetLocal(L.index,e.options.nativeSizeType)));break;case 11:f=T.createBinary(o.BinaryOp.MaxF32,g,y);break;case 12:f=T.createBinary(o.BinaryOp.MaxF64,g,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"min":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpression(n[0],s.Type.f64,0,1);switch(y=e.compileExpression(n[1],e.currentType,1,1),e.currentType.kind){case 0:case 1:case 2:O=e.currentFunction.flow,S=e.currentFunction.getTempLocal(e.currentType,!O.canOverflow(g,e.currentType)),L=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(y,e.currentType));e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.LtI32,T.createGetLocal(S.index,1),T.createGetLocal(L.index,1)));break;case 5:case 6:case 7:case 10:O=e.currentFunction.flow,S=e.currentFunction.getTempLocal(e.currentType,!O.canOverflow(g,e.currentType)),L=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(y,e.currentType));e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.LtU32,T.createGetLocal(S.index,1),T.createGetLocal(L.index,1)));break;case 3:S=e.currentFunction.getTempLocal(s.Type.i64,!1),L=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.LtI64,T.createGetLocal(S.index,2),T.createGetLocal(L.index,2)));break;case 8:S=e.currentFunction.getTempLocal(s.Type.i64,!1),L=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(o.BinaryOp.LtU64,T.createGetLocal(S.index,2),T.createGetLocal(L.index,2)));break;case 4:S=e.currentFunction.getTempLocal(e.options.usizeType,!1),L=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(e.options.isWasm64?o.BinaryOp.LtI64:o.BinaryOp.LtI32,T.createGetLocal(S.index,e.options.nativeSizeType),T.createGetLocal(L.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}S=e.currentFunction.getTempLocal(e.options.usizeType,!1),L=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);e.currentFunction.freeTempLocal(S),f=T.createSelect(T.createTeeLocal(S.index,g),T.createTeeLocal(L.index,y),T.createBinary(e.options.isWasm64?o.BinaryOp.LtU64:o.BinaryOp.LtU32,T.createGetLocal(S.index,e.options.nativeSizeType),T.createGetLocal(L.index,e.options.nativeSizeType)));break;case 11:f=T.createBinary(o.BinaryOp.MinF32,g,y);break;case 12:f=T.createBinary(o.BinaryOp.MinF64,g,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"ceil":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}default:f=g;break;case 11:f=T.createUnary(o.UnaryOp.CeilF32,g);break;case 12:f=T.createUnary(o.UnaryOp.CeilF64,g);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"floor":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}default:f=g;break;case 11:f=T.createUnary(o.UnaryOp.FloorF32,g);break;case 12:f=T.createUnary(o.UnaryOp.FloorF64,g);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"copysign":if(2!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpression(n[0],s.Type.f64,0,0);switch(y=e.compileExpression(n[1],e.currentType,1,0),e.currentType.kind){case 11:f=T.createBinary(o.BinaryOp.CopysignF32,g,y);break;case 12:f=T.createBinary(o.BinaryOp.CopysignF64,g,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"nearest":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}default:f=g;break;case 11:f=T.createUnary(o.UnaryOp.NearestF32,g);break;case 12:f=T.createUnary(o.UnaryOp.NearestF64,g);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"reinterpret":if(1!=n.length)return r&&1==r.length||(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0")),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(!r||1!=r.length)return r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),T.createUnreachable();switch(r[0].kind){case 2:case 7:g=e.compileExpression(n[0],s.Type.f32,1,0),f=T.createUnary(o.UnaryOp.ReinterpretF32,g);break;case 3:case 8:g=e.compileExpression(n[0],s.Type.f64,1,0),f=T.createUnary(o.UnaryOp.ReinterpretF64,g);break;case 9:if(r[0].is(256))return e.error(i.DiagnosticCode.Operation_not_supported,u.range),e.currentType=r[0],T.createUnreachable();case 4:g=e.compileExpression(n[0],e.options.isWasm64?s.Type.f64:s.Type.f32,1,0),f=T.createUnary(e.options.isWasm64?o.UnaryOp.ReinterpretF64:o.UnaryOp.ReinterpretF32,g);break;case 11:g=e.compileExpression(n[0],s.Type.i32,1,0),f=T.createUnary(o.UnaryOp.ReinterpretI32,g);break;case 12:g=e.compileExpression(n[0],s.Type.i64,1,0),f=T.createUnary(o.UnaryOp.ReinterpretI64,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return e.currentType=r[0],f;case"sqrt":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 11:f=T.createUnary(o.UnaryOp.SqrtF32,g);break;case 12:f=T.createUnary(o.UnaryOp.SqrtF64,g);break;default:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"trunc":if(1!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(r&&r.length){if(e.currentType=r[0],1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpression(n[0],s.Type.f64,0,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable();break}default:f=g;break;case 11:f=T.createUnary(o.UnaryOp.TruncF32,g);break;case 12:f=T.createUnary(o.UnaryOp.TruncF64,g);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"load":return n.length<1||n.length>2?(r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),n.length<1?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,u.range,"1",n.length.toString(10)):e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable()):r&&1==r.length?(g=e.compileExpression(n[0],e.options.usizeType,1,0),(x=2==n.length?_(e,n[1]):0)<0?T.createUnreachable():(e.currentType=r[0],T.createLoad(r[0].byteSize,r[0].is(5),g,r[0].is(4)&&p.is(4)&&p.size>r[0].size?(e.currentType=p).toNativeType():(e.currentType=r[0]).toNativeType(),x))):(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),T.createUnreachable());case"store":if(e.currentType=s.Type.void,n.length<2||n.length>3)return r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),n.length<2?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,u.range,"2",n.length.toString(10)):e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"3",n.length.toString(10)),T.createUnreachable();if(!r||1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),T.createUnreachable();g=e.compileExpression(n[0],e.options.usizeType,1,0),y=e.compileExpression(n[1],r[0],r[0].is(4)?0:1,0);I=void 0;return r[0].is(4)&&(!e.currentType.is(4)||e.currentType.size1)return r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();if(!r||1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),T.createUnreachable();var R;if(!(R=r[0].classReference))return e.error(i.DiagnosticCode.Operation_not_supported,u.range),T.createUnreachable();var x=void 0;if(n.length){if(n[0].kind!=a.NodeKind.LITERAL||n[0].literalKind!=a.LiteralKind.STRING)return e.error(i.DiagnosticCode.String_literal_expected,n[0].range),T.createUnreachable();var F=n[0].value,D=R.members?R.members.get(F):null;if(!D||D.kind!=c.ElementKind.FIELD)return e.error(i.DiagnosticCode.Type_0_has_no_property_1,n[0].range,R.internalName,F),T.createUnreachable();x=D.memoryOffset}else x=R.currentMemoryOffset;return e.options.isWasm64?p.is(4)&&p.size<=32?(e.currentType=s.Type.u32,T.createI32(x)):T.createI64(x):p.is(4)&&64==p.size?(e.currentType=s.Type.u64,T.createI64(x)):T.createI32(x);case"select":if(3!=n.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"3",n.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,0)}else g=e.compileExpressionRetainType(n[0],s.Type.i32,0);I=e.currentType;switch(y=e.compileExpression(n[1],I,1,0),E=e.makeIsTrueish(e.compileExpressionRetainType(n[2],s.Type.bool,0),e.currentType),e.currentType=I,e.currentType.kind){case 0:case 1:case 5:case 6:case 10:default:f=T.createSelect(g,y,E);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=T.createUnreachable()}return f;case"unreachable":return 0!=n.length&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"0",n.length.toString(10)),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),T.createUnreachable();case"memory.size":return e.currentType=s.Type.i32,0!=n.length&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"0",n.length.toString(10)),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),T.createHost(o.HostOp.CurrentMemory);case"memory.grow":return e.currentType=s.Type.i32,1!=n.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"0",n.length.toString(10)),g=T.createUnreachable()):g=e.compileExpression(n[0],s.Type.i32,1,0),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),T.createHost(o.HostOp.GrowMemory,null,[g]);case"memory.copy":if(r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),3!=n.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"3",n.length.toString(10)),e.currentType=s.Type.void,T.createUnreachable();throw g=e.compileExpression(n[0],e.options.usizeType,1,0),y=e.compileExpression(n[1],e.options.usizeType,1,0),E=e.compileExpression(n[2],e.options.usizeType,1,0),e.currentType=s.Type.void,new Error("not implemented");case"memory.fill":if(r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),3!=n.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"3",n.length.toString(10)),e.currentType=s.Type.void,T.createUnreachable();throw g=e.compileExpression(n[0],e.options.usizeType,1,0),y=e.compileExpression(n[1],s.Type.u32,1,0),E=e.compileExpression(n[2],e.options.usizeType,1,0),e.currentType=s.Type.void,new Error("not implemented");case"changetype":return r&&1==r.length?1!=n.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),e.currentType=r[0],T.createUnreachable()):(g=e.compileExpressionRetainType(n[0],r[0],0),e.currentType=r[0],e.currentType.size!=r[0].size?(e.error(i.DiagnosticCode.Operation_not_supported,u.range),T.createUnreachable()):g):(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r?r.length.toString(10):"0"),T.createUnreachable());case"assert":if(n.length<1||n.length>2)return r&&(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),n.length<1?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,u.range,"1",n.length.toString(10)):n.length>2&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"2",n.length.toString(10)),T.createUnreachable();if(r){if(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();g=e.compileExpression(n[0],r[0],1,1)}else g=e.compileExpressionRetainType(n[0],s.Type.bool,1);I=e.currentType;if(e.currentType=I.nonNullableType,e.options.noAssert)return p==s.Type.void?(e.currentType=s.Type.void,T.createNop()):g;var B=m(e,2==n.length?n[1]:null,u);if(e.currentType=I.nonNullableType,p==s.Type.void){switch(e.currentType.kind){default:f=T.createIf(T.createUnary(o.UnaryOp.EqzI32,g),B);break;case 3:case 8:f=T.createIf(T.createUnary(o.UnaryOp.EqzI64,g),B);break;case 4:case 9:f=T.createIf(T.createUnary(e.options.isWasm64?o.UnaryOp.EqzI64:o.UnaryOp.EqzI32,g),B);break;case 11:f=T.createIf(T.createBinary(o.BinaryOp.EqF32,g,T.createF32(0)),B);break;case 12:f=T.createIf(T.createBinary(o.BinaryOp.EqF64,g,T.createF64(0)),B);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=B}e.currentType=s.Type.void}else switch(e.currentType.kind){case 0:case 1:case 5:case 6:case 10:O=e.currentFunction.flow,N=e.currentFunction.getAndFreeTempLocal(e.currentType,!O.canOverflow(g,e.currentType));f=T.createIf(T.createTeeLocal(N.index,g),T.createGetLocal(N.index,1),B);break;case 2:case 7:default:N=e.currentFunction.getAndFreeTempLocal(s.Type.i32,!1);f=T.createIf(T.createTeeLocal(N.index,g),T.createGetLocal(N.index,1),B);break;case 3:case 8:N=e.currentFunction.getAndFreeTempLocal(s.Type.i64,!1);f=T.createIf(T.createUnary(o.UnaryOp.EqzI64,T.createTeeLocal(N.index,g)),B,T.createGetLocal(N.index,2));break;case 4:case 9:N=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);f=T.createIf(T.createUnary(e.options.isWasm64?o.UnaryOp.EqzI64:o.UnaryOp.EqzI32,T.createTeeLocal(N.index,g)),B,T.createGetLocal(N.index,e.options.nativeSizeType));break;case 11:N=e.currentFunction.getAndFreeTempLocal(s.Type.f32,!1);f=T.createIf(T.createBinary(o.BinaryOp.EqF32,T.createTeeLocal(N.index,g),T.createF32(0)),B,T.createGetLocal(N.index,3));break;case 12:N=e.currentFunction.getAndFreeTempLocal(s.Type.f64,!1);f=T.createIf(T.createBinary(o.BinaryOp.EqF64,T.createTeeLocal(N.index,g),T.createF64(0)),B,T.createGetLocal(N.index,4));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,u.range),f=B}return f;case"unchecked":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),1!=n.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable()):((O=e.currentFunction.flow).set(4096),f=e.compileExpressionRetainType(n[0],p,0),O.unset(4096),f);case"call_indirect":if(n.length<1)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,u.range,"1",n.length.toString(10)),T.createUnreachable();var U=void 0;if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.range,"1",r.length.toString(10)),T.createUnreachable();U=r[0]}else U=p;if(g=e.compileExpressionRetainType(n[0],s.Type.u32,0),7!=e.currentType.kind)return e.error(i.DiagnosticCode.Operation_not_supported,n[0].range),T.createUnreachable();for(var P=n.length-1,w=new Array(P),M=new Array(P+1),G=U.toNativeType(),K=new Array(P),z=0;z void"),T.createUnreachable())}var Q=function(e,t,r,n,i){switch(t.internalName){case"i32.clz":return h("clz",e,s.Type.i32,r,s.Type.i32,i);case"i64.clz":return h("clz",e,s.Type.i64,r,s.Type.i64,i);case"i32.ctz":return h("ctz",e,s.Type.i32,r,s.Type.i32,i);case"i64.ctz":return h("ctz",e,s.Type.i64,r,s.Type.i64,i);case"i32.popcnt":return h("popcnt",e,s.Type.i32,r,s.Type.i32,i);case"i64.popcnt":return h("popcnt",e,s.Type.i64,r,s.Type.i64,i);case"i32.rotl":return h("rotl",e,s.Type.i32,r,s.Type.i32,i);case"i64.rotl":return h("rotl",e,s.Type.i64,r,s.Type.i64,i);case"i32.rotr":return h("rotr",e,s.Type.i32,r,s.Type.i32,i);case"i64.rotr":return h("rotr",e,s.Type.i64,r,s.Type.i64,i);case"f32.abs":return h("abs",e,s.Type.f32,r,s.Type.f32,i);case"f64.abs":return h("abs",e,s.Type.f64,r,s.Type.f64,i);case"f32.max":return h("max",e,s.Type.f32,r,s.Type.f32,i);case"f64.max":return h("max",e,s.Type.f64,r,s.Type.f64,i);case"f32.min":return h("min",e,s.Type.f32,r,s.Type.f32,i);case"f64.min":return h("min",e,s.Type.f64,r,s.Type.f64,i);case"f32.ceil":return h("ceil",e,s.Type.f32,r,s.Type.f32,i);case"f64.ceil":return h("ceil",e,s.Type.f64,r,s.Type.f64,i);case"f32.floor":return h("floor",e,s.Type.f32,r,s.Type.f32,i);case"f64.floor":return h("floor",e,s.Type.f64,r,s.Type.f64,i);case"f32.copysign":return h("copysign",e,s.Type.f32,r,s.Type.f32,i);case"f64.copysign":return h("copysign",e,s.Type.f64,r,s.Type.f64,i);case"f32.nearest":return h("nearest",e,s.Type.f32,r,s.Type.f32,i);case"f64.nearest":return h("nearest",e,s.Type.f64,r,s.Type.f64,i);case"i32.reinterpret_f32":return h("reinterpret",e,s.Type.i32,r,s.Type.f32,i);case"i64.reinterpret_f64":return h("reinterpret",e,s.Type.i64,r,s.Type.f64,i);case"f32.reinterpret_i32":return h("reinterpret",e,s.Type.f32,r,s.Type.i32,i);case"f64.reinterpret_i64":return h("reinterpret",e,s.Type.f64,r,s.Type.i64,i);case"f32.sqrt":return h("sqrt",e,s.Type.f32,r,s.Type.f32,i);case"f64.sqrt":return h("sqrt",e,s.Type.f64,r,s.Type.f64,i);case"f32.trunc":return h("trunc",e,s.Type.f32,r,s.Type.f32,i);case"f64.trunc":return h("trunc",e,s.Type.f64,r,s.Type.f64,i);case"i32.load8_s":return h("load",e,s.Type.i8,r,s.Type.i32,i);case"i32.load8_u":return h("load",e,s.Type.u8,r,s.Type.u32,i);case"i32.load16_s":return h("load",e,s.Type.i16,r,s.Type.i32,i);case"i32.load16_u":return h("load",e,s.Type.u16,r,s.Type.u32,i);case"i32.load":return h("load",e,s.Type.i32,r,s.Type.i32,i);case"i64.load8_s":return h("load",e,s.Type.i8,r,s.Type.i64,i);case"i64.load8_u":return h("load",e,s.Type.u8,r,s.Type.u64,i);case"i64.load16_s":return h("load",e,s.Type.i16,r,s.Type.i64,i);case"i64.load16_u":return h("load",e,s.Type.u16,r,s.Type.u64,i);case"i64.load32_s":return h("load",e,s.Type.i32,r,s.Type.i64,i);case"i64.load32_u":return h("load",e,s.Type.u32,r,s.Type.u64,i);case"i64.load":return h("load",e,s.Type.i64,r,s.Type.i64,i);case"f32.load":return h("load",e,s.Type.f32,r,s.Type.f32,i);case"f64.load":return h("load",e,s.Type.f64,r,s.Type.f64,i);case"i32.store8":return h("store",e,s.Type.i8,r,s.Type.i32,i);case"i32.store16":return h("store",e,s.Type.i16,r,s.Type.i32,i);case"i32.store":return h("store",e,s.Type.i32,r,s.Type.i32,i);case"i64.store8":return h("store",e,s.Type.i8,r,s.Type.i64,i);case"i64.store16":return h("store",e,s.Type.i16,r,s.Type.i64,i);case"i64.store32":return h("store",e,s.Type.i32,r,s.Type.i64,i);case"i64.store":return h("store",e,s.Type.i64,r,s.Type.i64,i);case"f32.store":return h("store",e,s.Type.f32,r,s.Type.f32,i);case"f64.store":return h("store",e,s.Type.f64,r,s.Type.f64,i)}return 0}(e,t,n,0,u);return Q?(r&&r.length&&e.error(i.DiagnosticCode.Type_0_is_not_generic,u.range,t.internalName),Q):(e.error(i.DiagnosticCode.Operation_not_supported,u.range),T.createUnreachable())}function h(e,t,r,n,i,a){var s=assert(t.program.elementsLookup.get(e));return assert(s.kind==c.ElementKind.FUNCTION_PROTOTYPE),u(t,s,[r],n,i,a)}function d(e,t,r,n){if(0==r.length)return t&&1==t.length?t[0]:(e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,"1",t?t.length.toString(10):"0"),null);if(1==r.length){if(t)if(1==t.length)e.compileExpression(r[0],t[0],1,0);else{if(t.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,"1",t.length.toString(10)),null;e.compileExpressionRetainType(r[0],s.Type.i32,0)}else e.compileExpressionRetainType(r[0],s.Type.i32,0);return e.currentType}return t&&t.length>1&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,"1",t.length.toString(10)),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,"1",r.length.toString(10)),null}function _(e,t){var r,n;return e.options.isWasm64?(r=e.precomputeExpression(t,s.Type.usize64,1,0),(o.getExpressionId(r)!=o.ExpressionId.Const||2!=o.getExpressionType(r)||0!=o.getConstValueI64High(r)||(n=o.getConstValueI64Low(r))<0)&&(e.error(i.DiagnosticCode.Operation_not_supported,t.range),n=-1)):(r=e.precomputeExpression(t,s.Type.usize32,1,0),(o.getExpressionId(r)!=o.ExpressionId.Const||1!=o.getExpressionType(r)||(n=o.getConstValueI32(r))<0)&&(e.error(i.DiagnosticCode.Operation_not_supported,t.range),n=-1)),n}function m(e,t,r){var n=e.program,i=e.module,a=n.typesLookup.get("string");if(!a)return i.createUnreachable();var o=n.abortInstance;if(!o||!e.compileFunction(o))return i.createUnreachable();var c=null!=t?e.compileExpression(t,a,1,0):a.toNativeZero(i),l=e.ensureStaticString(r.range.source.normalizedPath);return e.currentType=s.Type.void,i.createBlock(null,[i.createCall(o.internalName,[c,l,i.createI32(r.range.line),i.createI32(r.range.column)],0),i.createUnreachable()])}function g(e,t){var r,i,a=e.program;assert(t.type.isManaged(a));var l=t.gcHookIndex;if(-1!=l)return l;var u=t.members;if(t.prototype.declaration.range.source.isLibrary&&null!==u&&u.has("__gc")){var h=assert(u.get("__gc"));assert(h.kind==c.ElementKind.FUNCTION_PROTOTYPE);var d=assert(a.resolver.resolveFunction(h,null));assert(d.is(p.CommonFlags.PRIVATE|p.CommonFlags.INSTANCE)),assert(!d.isAny(p.CommonFlags.AMBIENT|p.CommonFlags.VIRTUAL)),assert(0==d.signature.parameterTypes.length),assert(d.signature.returnType==s.Type.void),d.internalName=t.internalName+"~gc",assert(e.compileFunction(d));var _=e.ensureFunctionTableEntry(d);return t.gcHookIndex=_,_}var m=e.module,y=e.options,E=y.nativeSizeType,f=y.usizeType.byteSize,T=new Array;T.push(m.createIf(m.createUnary(y.isWasm64?o.UnaryOp.EqzI64:o.UnaryOp.EqzI32,m.createGetLocal(0,E)),m.createReturn()));var I=e.functionTable,v=I.length;I.push(""),t.gcHookIndex=v;var A=t.base;if(A?(assert(A.type.isManaged(a)),T.push(m.createCallIndirect(m.createI32(g(e,A.type.classReference)),[m.createGetLocal(0,E)],2==E?"Iv":"iv"))):T.push(m.createCall(assert(a.gcMarkInstance).internalName,[m.createGetLocal(0,E)],0)),u)try{for(var C=n(u.values()),N=C.next();!N.done;N=C.next()){var O=N.value;if(O.kind==c.ElementKind.FIELD)if(O.parent===t)if(O.type.isManaged(a)){var S=O.memoryOffset;assert(S>=0),T.push(m.createCall(assert(a.gcMarkInstance).internalName,[m.createLoad(f,!1,m.createGetLocal(0,E),E,S)],0))}}}catch(e){r={error:e}}finally{try{N&&!N.done&&(i=C.return)&&i.call(C)}finally{if(r)throw r.error}}var L=t.internalName+"~gc";return m.addFunction(L,e.ensureFunctionType(null,s.Type.void,y.usizeType),null,m.createBlock(null,T)),I[v]=L,v}t.compileCall=u,t.compileAllocate=function(e,t,r){var n=e.program;assert(t.program==n);var a=e.module,s=e.options;if(n.hasGC&&t.type.isManaged(n)){var o=assert(n.gcAllocateInstance);return e.compileFunction(o)?(e.currentType=t.type,a.createCall(o.internalName,[s.isWasm64?a.createI64(t.currentMemoryOffset):a.createI32(t.currentMemoryOffset),a.createI32(g(e,t))],s.nativeSizeType)):a.createUnreachable()}return(o=n.memoryAllocateInstance)?e.compileFunction(o)?(e.currentType=t.type,a.createCall(o.internalName,[s.isWasm64?a.createI64(t.currentMemoryOffset):a.createI32(t.currentMemoryOffset)],s.nativeSizeType)):a.createUnreachable():(n.error(i.DiagnosticCode.Cannot_find_name_0,r.range,"memory.allocate"),a.createUnreachable())},t.compileAbort=m,t.compileIterateRoots=function(e){var t,r,i=e.module,a=new Array;try{for(var o=n(e.program.elementsLookup.values()),l=o.next();!l.done;l=o.next()){var u=l.value;if(u.kind==c.ElementKind.GLOBAL){var h=u,d=h.type.classReference;if(h.is(p.CommonFlags.COMPILED)&&null!==d&&!d.hasDecorator(c.DecoratorFlags.UNMANAGED))if(h.is(p.CommonFlags.INLINED)){var _=h.constantIntegerValue;a.push(i.createCallIndirect(i.createGetLocal(0,1),[e.options.isWasm64?i.createI64(i64_low(_),i64_high(_)):i.createI32(i64_low(_))],"iv"))}else a.push(i.createCallIndirect(i.createGetLocal(0,1),[i.createGetGlobal(h.internalName,e.options.nativeSizeType)],"iv"))}}}catch(e){t={error:e}}finally{try{l&&!l.done&&(r=o.return)&&r.call(o)}finally{if(t)throw t.error}}var m=e.ensureFunctionType([s.Type.i32],s.Type.void);i.addFunction("~iterateRoots",m,[],a.length?i.createBlock(null,a):i.createNop())},t.ensureGCHook=g},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.NULL=0]="NULL",e[e.LINEFEED=10]="LINEFEED",e[e.CARRIAGERETURN=13]="CARRIAGERETURN",e[e.LINESEPARATOR=8232]="LINESEPARATOR",e[e.PARAGRAPHSEPARATOR=8233]="PARAGRAPHSEPARATOR",e[e.NEXTLINE=133]="NEXTLINE",e[e.SPACE=32]="SPACE",e[e.NONBREAKINGSPACE=160]="NONBREAKINGSPACE",e[e.ENQUAD=8192]="ENQUAD",e[e.EMQUAD=8193]="EMQUAD",e[e.ENSPACE=8194]="ENSPACE",e[e.EMSPACE=8195]="EMSPACE",e[e.THREEPEREMSPACE=8196]="THREEPEREMSPACE",e[e.FOURPEREMSPACE=8197]="FOURPEREMSPACE",e[e.SIXPEREMSPACE=8198]="SIXPEREMSPACE",e[e.FIGURESPACE=8199]="FIGURESPACE",e[e.PUNCTUATIONSPACE=8200]="PUNCTUATIONSPACE",e[e.THINSPACE=8201]="THINSPACE",e[e.HAIRSPACE=8202]="HAIRSPACE",e[e.ZEROWIDTHSPACE=8203]="ZEROWIDTHSPACE",e[e.NARROWNOBREAKSPACE=8239]="NARROWNOBREAKSPACE",e[e.IDEOGRAPHICSPACE=12288]="IDEOGRAPHICSPACE",e[e.MATHEMATICALSPACE=8287]="MATHEMATICALSPACE",e[e.OGHAM=5760]="OGHAM",e[e._=95]="_",e[e._0=48]="_0",e[e._1=49]="_1",e[e._2=50]="_2",e[e._3=51]="_3",e[e._4=52]="_4",e[e._5=53]="_5",e[e._6=54]="_6",e[e._7=55]="_7",e[e._8=56]="_8",e[e._9=57]="_9",e[e.a=97]="a",e[e.b=98]="b",e[e.c=99]="c",e[e.d=100]="d",e[e.e=101]="e",e[e.f=102]="f",e[e.g=103]="g",e[e.h=104]="h",e[e.i=105]="i",e[e.j=106]="j",e[e.k=107]="k",e[e.l=108]="l",e[e.m=109]="m",e[e.n=110]="n",e[e.o=111]="o",e[e.p=112]="p",e[e.q=113]="q",e[e.r=114]="r",e[e.s=115]="s",e[e.t=116]="t",e[e.u=117]="u",e[e.v=118]="v",e[e.w=119]="w",e[e.x=120]="x",e[e.y=121]="y",e[e.z=122]="z",e[e.A=65]="A",e[e.B=66]="B",e[e.C=67]="C",e[e.D=68]="D",e[e.E=69]="E",e[e.F=70]="F",e[e.G=71]="G",e[e.H=72]="H",e[e.I=73]="I",e[e.J=74]="J",e[e.K=75]="K",e[e.L=76]="L",e[e.M=77]="M",e[e.N=78]="N",e[e.O=79]="O",e[e.P=80]="P",e[e.Q=81]="Q",e[e.R=82]="R",e[e.S=83]="S",e[e.T=84]="T",e[e.U=85]="U",e[e.V=86]="V",e[e.W=87]="W",e[e.X=88]="X",e[e.Y=89]="Y",e[e.Z=90]="Z",e[e.AMPERSAND=38]="AMPERSAND",e[e.ASTERISK=42]="ASTERISK",e[e.AT=64]="AT",e[e.BACKSLASH=92]="BACKSLASH",e[e.BACKTICK=96]="BACKTICK",e[e.BAR=124]="BAR",e[e.CARET=94]="CARET",e[e.CLOSEBRACE=125]="CLOSEBRACE",e[e.CLOSEBRACKET=93]="CLOSEBRACKET",e[e.CLOSEPAREN=41]="CLOSEPAREN",e[e.COLON=58]="COLON",e[e.COMMA=44]="COMMA",e[e.DOLLAR=36]="DOLLAR",e[e.DOT=46]="DOT",e[e.DOUBLEQUOTE=34]="DOUBLEQUOTE",e[e.EQUALS=61]="EQUALS",e[e.EXCLAMATION=33]="EXCLAMATION",e[e.GREATERTHAN=62]="GREATERTHAN",e[e.HASH=35]="HASH",e[e.LESSTHAN=60]="LESSTHAN",e[e.MINUS=45]="MINUS",e[e.OPENBRACE=123]="OPENBRACE",e[e.OPENBRACKET=91]="OPENBRACKET",e[e.OPENPAREN=40]="OPENPAREN",e[e.PERCENT=37]="PERCENT",e[e.PLUS=43]="PLUS",e[e.QUESTION=63]="QUESTION",e[e.SEMICOLON=59]="SEMICOLON",e[e.SINGLEQUOTE=39]="SINGLEQUOTE",e[e.SLASH=47]="SLASH",e[e.TILDE=126]="TILDE",e[e.BACKSPACE=8]="BACKSPACE",e[e.FORMFEED=12]="FORMFEED",e[e.BYTEORDERMARK=65279]="BYTEORDERMARK",e[e.TAB=9]="TAB",e[e.VERTICALTAB=11]="VERTICALTAB"}(t.CharCode||(t.CharCode={})),t.isLineBreak=function(e){switch(e){case 10:case 13:case 8232:case 8233:return!0;default:return!1}},t.isWhiteSpace=function(e){switch(e){case 32:case 9:case 11:case 12:case 160:case 133:case 5760:case 8239:case 8287:case 12288:case 65279:return!0;default:return e>=8192&&e<=8203}},t.isDecimalDigit=function(e){return e>=48&&e<=57},t.isOctalDigit=function(e){return e>=48&&e<=55},t.isIdentifierStart=function(e){return e>=65&&e<=90||e>=97&&e<=122||36==e||95==e||e>127&&function(e){return!(e<0||e>65535)&&a(e,n)}(e)},t.isKeywordCharacter=function(e){return e>=97&&e<=122},t.isIdentifierPart=function(e){return e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||36==e||95==e||e>127&&function(e){return!(e<0||e>65535)&&a(e,i)}(e)};var n=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,880,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1162,1319,1329,1366,1369,1369,1377,1415,1488,1514,1520,1522,1568,1610,1646,1647,1649,1747,1749,1749,1765,1766,1774,1775,1786,1788,1791,1791,1808,1808,1810,1839,1869,1957,1969,1969,1994,2026,2036,2037,2042,2042,2048,2069,2074,2074,2084,2084,2088,2088,2112,2136,2208,2208,2210,2220,2308,2361,2365,2365,2384,2384,2392,2401,2417,2423,2425,2431,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2493,2493,2510,2510,2524,2525,2527,2529,2544,2545,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2649,2652,2654,2654,2674,2676,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2749,2749,2768,2768,2784,2785,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2877,2877,2908,2909,2911,2913,2929,2929,2947,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3024,3024,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3133,3160,3161,3168,3169,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3261,3261,3294,3294,3296,3297,3313,3314,3333,3340,3342,3344,3346,3386,3389,3389,3406,3406,3424,3425,3450,3455,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3585,3632,3634,3635,3648,3654,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3760,3762,3763,3773,3773,3776,3780,3782,3782,3804,3807,3840,3840,3904,3911,3913,3948,3976,3980,4096,4138,4159,4159,4176,4181,4186,4189,4193,4193,4197,4198,4206,4208,4213,4225,4238,4238,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5905,5920,5937,5952,5969,5984,5996,5998,6e3,6016,6067,6103,6103,6108,6108,6176,6263,6272,6312,6314,6314,6320,6389,6400,6428,6480,6509,6512,6516,6528,6571,6593,6599,6656,6678,6688,6740,6823,6823,6917,6963,6981,6987,7043,7072,7086,7087,7098,7141,7168,7203,7245,7247,7258,7293,7401,7404,7406,7409,7413,7414,7424,7615,7680,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8305,8305,8319,8319,8336,8348,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11502,11506,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11648,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11823,11823,12293,12295,12321,12329,12337,12341,12344,12348,12353,12438,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42527,42538,42539,42560,42606,42623,42647,42656,42735,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43009,43011,43013,43015,43018,43020,43042,43072,43123,43138,43187,43250,43255,43259,43259,43274,43301,43312,43334,43360,43388,43396,43442,43471,43471,43520,43560,43584,43586,43588,43595,43616,43638,43642,43642,43648,43695,43697,43697,43701,43702,43705,43709,43712,43712,43714,43714,43739,43741,43744,43754,43762,43764,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44002,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64285,64287,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65136,65140,65142,65276,65313,65338,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500],i=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,768,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1155,1159,1162,1319,1329,1366,1369,1369,1377,1415,1425,1469,1471,1471,1473,1474,1476,1477,1479,1479,1488,1514,1520,1522,1552,1562,1568,1641,1646,1747,1749,1756,1759,1768,1770,1788,1791,1791,1808,1866,1869,1969,1984,2037,2042,2042,2048,2093,2112,2139,2208,2208,2210,2220,2276,2302,2304,2403,2406,2415,2417,2423,2425,2431,2433,2435,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2492,2500,2503,2504,2507,2510,2519,2519,2524,2525,2527,2531,2534,2545,2561,2563,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2620,2620,2622,2626,2631,2632,2635,2637,2641,2641,2649,2652,2654,2654,2662,2677,2689,2691,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2748,2757,2759,2761,2763,2765,2768,2768,2784,2787,2790,2799,2817,2819,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2876,2884,2887,2888,2891,2893,2902,2903,2908,2909,2911,2915,2918,2927,2929,2929,2946,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3006,3010,3014,3016,3018,3021,3024,3024,3031,3031,3046,3055,3073,3075,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3140,3142,3144,3146,3149,3157,3158,3160,3161,3168,3171,3174,3183,3202,3203,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3260,3268,3270,3272,3274,3277,3285,3286,3294,3294,3296,3299,3302,3311,3313,3314,3330,3331,3333,3340,3342,3344,3346,3386,3389,3396,3398,3400,3402,3406,3415,3415,3424,3427,3430,3439,3450,3455,3458,3459,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3530,3530,3535,3540,3542,3542,3544,3551,3570,3571,3585,3642,3648,3662,3664,3673,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3769,3771,3773,3776,3780,3782,3782,3784,3789,3792,3801,3804,3807,3840,3840,3864,3865,3872,3881,3893,3893,3895,3895,3897,3897,3902,3911,3913,3948,3953,3972,3974,3991,3993,4028,4038,4038,4096,4169,4176,4253,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4957,4959,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5908,5920,5940,5952,5971,5984,5996,5998,6e3,6002,6003,6016,6099,6103,6103,6108,6109,6112,6121,6155,6157,6160,6169,6176,6263,6272,6314,6320,6389,6400,6428,6432,6443,6448,6459,6470,6509,6512,6516,6528,6571,6576,6601,6608,6617,6656,6683,6688,6750,6752,6780,6783,6793,6800,6809,6823,6823,6912,6987,6992,7001,7019,7027,7040,7155,7168,7223,7232,7241,7245,7293,7376,7378,7380,7414,7424,7654,7676,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8204,8205,8255,8256,8276,8276,8305,8305,8319,8319,8336,8348,8400,8412,8417,8417,8421,8432,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11647,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11744,11775,11823,11823,12293,12295,12321,12335,12337,12341,12344,12348,12353,12438,12441,12442,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42539,42560,42607,42612,42621,42623,42647,42655,42737,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43047,43072,43123,43136,43204,43216,43225,43232,43255,43259,43259,43264,43309,43312,43347,43360,43388,43392,43456,43471,43481,43520,43574,43584,43597,43600,43609,43616,43638,43642,43643,43648,43714,43739,43741,43744,43759,43762,43766,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44010,44012,44013,44016,44025,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65024,65039,65056,65062,65075,65076,65101,65103,65136,65140,65142,65276,65296,65305,65313,65338,65343,65343,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500];function a(e,t){if(e0||i=0;)if(e.charCodeAt(a)==n){r-a==3&&46==e.charCodeAt(a+1)&&46==e.charCodeAt(a+2)||(e=t?e.substring(0,a):e.substring(0,a)+e.substring(r+3),i-=r+3-a,r=a-1);break}if(a<0&&r>0&&(2!=r||46!=e.charCodeAt(0)||46!=e.charCodeAt(1))){i=(e=e.substring(r+4)).length;continue}}}r++}return i>0?e:"."}function a(e){for(var t=e.length;--t>0;)if(e.charCodeAt(t)==n)return e.substring(0,t);return"."}t.normalizePath=i,t.resolvePath=function(e,t){return e.startsWith("std/")?e:i(a(t)+String.fromCharCode(n)+e)},t.dirname=a},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=" ",i=" ",a=" ";t.indent=function(e,t){for(;t>=4;)e.push(a),t-=4;t>=2&&(e.push(i),t-=2),t&&e.push(n)}},function(e,t,r){"use strict";function n(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24}function i(e,t,r){t[r]=e,t[r+1]=e>>>8,t[r+2]=e>>>16,t[r+3]=e>>>24}function a(e,t){var r=n(e,t),i=n(e,t+4);return i64_new(r,i)}Object.defineProperty(t,"__esModule",{value:!0}),t.readI8=function(e,t){return e[t]},t.writeI8=function(e,t,r){t[r]=e},t.readI16=function(e,t){return e[t]|e[t+1]<<8},t.writeI16=function(e,t,r){t[r]=e,t[r+1]=e>>>8},t.readI32=n,t.writeI32=i,t.readI64=a,t.writeI64=function(e,t,r){i(i64_low(e),t,r),i(i64_high(e),t,r+4)},t.readF32=function(e,t){return i32_as_f32(n(e,t))},t.writeF32=function(e,t,r){i(f32_as_i32(e),t,r)},t.readF64=function(e,t){return i64_as_f64(a(e,t))},t.writeF64=function(e,t,r){var n=f64_as_i64(e);i(i64_low(n),t,r),i(i64_high(n),t,r+4)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(9),i=r(26),a=r(27),s=r(1);t.formatDiagnostic=s.formatDiagnosticMessage;var o=r(28);t.parseFile=function(e,t,r,n){return void 0===r&&(r=!1),void 0===n&&(n=null),n||(n=new o.Parser),n.parseFile(e,t,r),n},t.nextFile=function(e){return e.nextFile()},t.nextDiagnostic=function(e){var t=e.program;return t.diagnosticsOffset0&&this.push(", "),this.push("$"),this.push(i.toString(10)),this.push(": "),this.push(a(n.getFunctionParamType(e,i)));this.push("): "),this.push(a(n.getFunctionResultType(e))),this.push(" "),n.getExpressionId(r)!=n.ExpressionId.Block&&this.push("{\n"),this.decompileExpression(r),n.getExpressionId(r)!=n.ExpressionId.Block&&this.push("\n}\n"),++this.functionId},e.prototype.decompileExpression=function(e){var t,r,i,s,o=n.getExpressionId(e),c=n.getExpressionType(e);switch(o){case n.ExpressionId.Block:for(null!=(r=n.getBlockName(e))&&(this.push(r),this.push(": ")),this.push("{\n"),s=n.getBlockChildCount(e),i=0;i("),this.push(n.getLoadOffset(e).toString(10)),this.push(" + "),this.decompileExpression(n.getLoadPtr(e)),void this.push(")");case n.ExpressionId.Store:return this.push("store<"),this.push(a(c)),this.push(">("),this.push(n.getStoreOffset(e).toString(10)),this.push(" + "),this.decompileExpression(n.getStorePtr(e)),this.push(", "),this.decompileExpression(n.getStoreValue(e)),void this.push(")");case n.ExpressionId.Const:switch(c){case 1:return void this.push(n.getConstValueI32(e).toString(10));case 2:return void this.push(i64_to_string(i64_new(n.getConstValueI64Low(e),n.getConstValueI64High(e))));case 3:return void this.push(n.getConstValueF32(e).toString(10));case 4:return void this.push(n.getConstValueF64(e).toString(10))}break;case n.ExpressionId.Unary:switch(n.getUnaryOp(e)){case n.UnaryOp.ClzI32:return this.push("clz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CtzI32:return this.push("ctz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.PopcntI32:return this.push("popcnt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NegF32:case n.UnaryOp.NegF64:return this.push("-"),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.AbsF32:return this.push("abs("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CeilF32:return this.push("ceil("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.FloorF32:return this.push("floor("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.TruncF32:return this.push("trunc("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NearestF32:return this.push("nearest("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.SqrtF32:return this.push("sqrt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.EqzI32:case n.UnaryOp.EqzI64:return this.push("!"),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ClzI64:return this.push("clz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CtzI64:return this.push("ctz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.PopcntI64:return this.push("popcnt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.AbsF64:return this.push("abs("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CeilF64:return this.push("ceil("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.FloorF64:return this.push("floor("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.TruncF64:return this.push("trunc("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NearestF64:return this.push("nearest("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.SqrtF64:return this.push("sqrt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ExtendI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ExtendU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.WrapI64:case n.UnaryOp.TruncF32ToI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToI64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToU64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToI64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToU64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ReinterpretF32:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ReinterpretF64:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ConvertI32ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI32ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU32ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU32ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI64ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI64ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU64ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU64ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.PromoteF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.DemoteF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ReinterpretI32:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ReinterpretI64:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")")}break;case n.ExpressionId.Binary:switch(n.getBinaryOp(e)){case n.BinaryOp.AddI32:case n.BinaryOp.AddI64:case n.BinaryOp.AddF32:case n.BinaryOp.AddF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" + "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.SubI32:case n.BinaryOp.SubI64:case n.BinaryOp.SubF32:case n.BinaryOp.SubF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" - "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.MulI32:case n.BinaryOp.MulI64:case n.BinaryOp.MulF32:case n.BinaryOp.MulF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" * "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivI32:case n.BinaryOp.DivI64:case n.BinaryOp.DivF32:case n.BinaryOp.DivF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivU32:return this.push("("),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RemI32:case n.BinaryOp.RemI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" % "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RemU32:return this.push("("),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.AndI32:case n.BinaryOp.AndI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" & "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.OrI32:case n.BinaryOp.OrI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" | "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.XorI32:case n.BinaryOp.XorI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" ^ "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShlI32:case n.BinaryOp.ShlI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" << "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShrU32:case n.BinaryOp.ShrU64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >>> "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShrI32:case n.BinaryOp.ShrI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >> "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RotlI32:return this.push("rotl("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RotrI32:return this.push("rotr("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.EqI32:case n.BinaryOp.EqI64:case n.BinaryOp.EqF32:case n.BinaryOp.EqF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" == "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.NeI32:case n.BinaryOp.NeI64:case n.BinaryOp.NeF32:case n.BinaryOp.NeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" != "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LtI32:case n.BinaryOp.LtI64:case n.BinaryOp.LtF32:case n.BinaryOp.LtF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LtU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeI32:case n.BinaryOp.LeI64:case n.BinaryOp.LeF32:case n.BinaryOp.LeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtI32:case n.BinaryOp.GtI64:case n.BinaryOp.GtF32:case n.BinaryOp.GtF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeI32:case n.BinaryOp.GeI64:case n.BinaryOp.GeF32:case n.BinaryOp.GeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RemU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" % "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RotlI64:return this.push("rotl("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RotrI64:return this.push("rotr("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.LtU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.CopysignF32:return this.push("copysign("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MinF32:return this.push("min("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MaxF32:return this.push("max("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.CopysignF64:return this.push("copysign("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MinF64:return this.push("min("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MaxF64:return this.push("max("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")")}return;case n.ExpressionId.Select:return this.push("select<"),this.push(a(c)),this.push(">("),this.decompileExpression(n.getSelectThen(e)),this.push(", "),this.decompileExpression(n.getSelectElse(e)),this.push(", "),this.decompileExpression(n.getSelectCondition(e)),void this.push(")");case n.ExpressionId.Drop:return this.decompileExpression(n.getDropValue(e)),void this.push(";\n");case n.ExpressionId.Return:return void((t=n.getReturnValue(e))?(this.push("return "),this.decompileExpression(t),this.push(";\n")):this.push("return;\n"));case n.ExpressionId.Host:switch(n.getHostOp(e)){case n.HostOp.CurrentMemory:return void this.push("memory.size()");case n.HostOp.GrowMemory:return this.push("memory.grow("),this.decompileExpression(n.getHostOperand(e,0)),void this.push(")")}break;case n.ExpressionId.Nop:return void this.push(";\n");case n.ExpressionId.Unreachable:return void this.push("unreachable()");case n.ExpressionId.AtomicCmpxchg:case n.ExpressionId.AtomicRMW:case n.ExpressionId.AtomicWait:case n.ExpressionId.AtomicWake:}throw new Error("not implemented")},e.prototype.push=function(e){this.text.push(e)},e.prototype.finish=function(){var e=this.text.join("");return this.text=[],e},e}();function a(e){switch(e){case 0:return"void";case 1:return"i32";case 2:return"i64";case 3:return"f32";case 4:return"f64";case 5:throw new Error("unreachable type");case-1:throw new Error("auto type");default:throw new Error("unexpected type")}}t.Decompiler=i},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=function(t,r){return(e=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])})(t,r)};return function(t,r){function n(){this.constructor=t}e(t,r),t.prototype=null===r?Object.create(r):(n.prototype=r.prototype,new n)}}(),i=this&&this.__values||function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],r=0;return t?t.call(e):{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}},a=this&&this.__read||function(e,t){var r="function"==typeof Symbol&&e[Symbol.iterator];if(!r)return e;var n,i,a=r.call(e),s=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)s.push(n.value)}catch(e){i={error:e}}finally{try{n&&!n.done&&(r=a.return)&&r.call(a)}finally{if(i)throw i.error}}return s};Object.defineProperty(t,"__esModule",{value:!0});var s=r(0),o=r(4),c=r(2),l=function(){function e(e,t){void 0===t&&(t=!1),this.todo=[],this.seen=new Set,this.program=e,this.includePrivate}return e.prototype.walk=function(){var e,t;try{for(var r=i(this.program.moduleLevelExports.values()),n=r.next();!n.done;n=r.next()){var a=n.value;this.visitElement(a.element)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}for(var s=this.todo;0"),null}if(e.skip(s.Token.BAR)){if(!e.skip(s.Token.NULL))return r||this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"null"),null;_=!0}n=l.Node.createType(h,d,_,e.range(a,e.pos))}for(;e.skip(s.Token.OPENBRACKET);){var g=e.tokenPos;if(!e.skip(s.Token.CLOSEBRACKET))return r||this.error(o.DiagnosticCode._0_expected,e.range(),"]"),null;var y=e.range(g,e.pos);_=!1;if(e.skip(s.Token.BAR)){if(!e.skip(s.Token.NULL))return r||this.error(o.DiagnosticCode._0_expected,e.range(),"null"),null;_=!0}if(n=l.Node.createType(l.Node.createIdentifierExpression("Array",y),[n],_,e.range(a,e.pos)),_)break}return n},t.prototype.tryParseSignature=function(e){var t,r=e.mark(),n=e.tokenPos,i=null,a=null,c=!1;if(e.skip(s.Token.CLOSEPAREN))c=!0,e.discard(r),i=[];else{c=!1;do{var p=l.ParameterKind.DEFAULT;if(e.skip(s.Token.DOT_DOT_DOT)&&(c=!0,e.discard(r),p=l.ParameterKind.REST),e.skip(s.Token.THIS)){if(!e.skip(s.Token.COLON))return e.reset(r),this.tryParseSignatureIsSignature=!1,null;c=!0,e.discard(r);var u=this.parseType(e,!1);if(!u)return null;if(u.kind!=l.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,u.range),this.tryParseSignatureIsSignature=!0,null;a=u}else{if(!e.skipIdentifier())return c?this.error(o.DiagnosticCode.Identifier_expected,e.range()):e.reset(r),this.tryParseSignatureIsSignature=c,null;var h=l.Node.createIdentifierExpression(e.readIdentifier(),e.range(e.tokenPos,e.pos));if(e.skip(s.Token.QUESTION)&&(c=!0,e.discard(r),p==l.ParameterKind.REST?this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,e.range()):p=l.ParameterKind.OPTIONAL),e.skip(s.Token.COLON)){c=!0,e.discard(r);var d=this.parseType(e);if(!d)return this.tryParseSignatureIsSignature=c,null;var _=new l.ParameterNode;_.parameterKind=p,_.name=h,_.type=d,i?i.push(_):i=[_]}else c&&this.error(o.DiagnosticCode.Type_expected,e.range())}}while(e.skip(s.Token.COMMA));if(!e.skip(s.Token.CLOSEPAREN))return c?this.error(o.DiagnosticCode._0_expected,e.range(),")"):e.reset(r),this.tryParseSignatureIsSignature=c,null}return e.skip(s.Token.EQUALS_GREATERTHAN)?(c=!0,e.discard(r),(t=this.parseType(e))?(this.tryParseSignatureIsSignature=!0,l.Node.createSignature(i||[],t,a,!1,e.range(n,e.pos))):(this.tryParseSignatureIsSignature=c,null)):(c?this.error(o.DiagnosticCode._0_expected,e.range(),"=>"):e.reset(r),this.tryParseSignatureIsSignature=c,null)},t.prototype.parseDecorator=function(e){var t=e.tokenPos;if(e.skipIdentifier()){for(var r=e.readIdentifier(),n=l.Node.createIdentifierExpression(r,e.range(t,e.pos));e.skip(s.Token.DOT);){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;r=e.readIdentifier(),n=l.Node.createPropertyAccessExpression(n,l.Node.createIdentifierExpression(r,e.range()),e.range(t,e.pos))}var i=void 0;if(!e.skip(s.Token.OPENPAREN))return l.Node.createDecorator(n,null,e.range(t,e.pos));if(i=this.parseArguments(e))return l.Node.createDecorator(n,i,e.range(t,e.pos))}else this.error(o.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseVariable=function(e,t,r,n){var i=new Array;do{var a=this.parseVariableDeclaration(e,t,r);if(!a)return null;i.push(a)}while(e.skip(s.Token.COMMA));var o=l.Node.createVariableStatement(i,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),o},t.prototype.parseVariableDeclaration=function(e,t,r){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var n=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),a=t;e.skip(s.Token.EXCLAMATION)&&(a|=i.CommonFlags.DEFINITE_ASSIGNMENT);var c=null;e.skip(s.Token.COLON)&&(c=this.parseType(e));var p=null;if(e.skip(s.Token.EQUALS)){if(a&i.CommonFlags.AMBIENT&&this.error(o.DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,e.range()),!(p=this.parseExpression(e,2)))return null}else a&i.CommonFlags.CONST?a&i.CommonFlags.AMBIENT||this.error(o.DiagnosticCode._const_declarations_must_be_initialized,n.range):c||this.error(o.DiagnosticCode.Type_expected,e.range(e.pos));var u=s.Range.join(n.range,e.range());return a&i.CommonFlags.DEFINITE_ASSIGNMENT&&p&&this.error(o.DiagnosticCode.A_definite_assignment_assertion_is_not_permitted_in_this_context,u),l.Node.createVariableDeclaration(n,c,p,r,a,u)},t.prototype.parseEnum=function(e,t,r,n){if(e.next()!=s.Token.IDENTIFIER)return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var a=l.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.next()!=s.Token.OPENBRACE)return this.error(o.DiagnosticCode._0_expected,e.range(),"{"),null;for(var c=new Array;!e.skip(s.Token.CLOSEBRACE);){var p=this.parseEnumValue(e,i.CommonFlags.NONE);if(!p)return null;if(c.push(p),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEBRACE))break;return this.error(o.DiagnosticCode._0_expected,e.range(),"}"),null}}var u=l.Node.createEnumDeclaration(a,c,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),u},t.prototype.parseEnumValue=function(e,t){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var r=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),n=null;return e.skip(s.Token.EQUALS)&&!(n=this.parseExpression(e,2))?null:l.Node.createEnumValueDeclaration(r,n,t,s.Range.join(r.range,e.range()))},t.prototype.parseReturn=function(e){var t=null;if(e.peek(!0)!=s.Token.SEMICOLON&&e.nextToken!=s.Token.CLOSEBRACE&&!e.nextTokenOnNewLine&&!(t=this.parseExpression(e)))return null;var r=l.Node.createReturnStatement(t,e.range());return e.skip(s.Token.SEMICOLON),r},t.prototype.parseTypeParameters=function(e){for(var t=new Array;!e.skip(s.Token.GREATERTHAN);){var r=this.parseTypeParameter(e);if(!r)return null;if(t.push(r),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.GREATERTHAN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),">"),null}}return 0===t.length&&this.error(o.DiagnosticCode.Type_parameter_list_cannot_be_empty,e.range()),t},t.prototype.parseTypeParameter=function(e){if(e.next()==s.Token.IDENTIFIER){var t=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(s.Token.EXTENDS)){var n=this.parseType(e);if(!n)return null;if(n.kind!=l.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,n.range),null;r=n}return l.Node.createTypeParameter(t,r,s.Range.join(t.range,e.range()))}return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseParameters=function(e,t){void 0===t&&(t=!1);var r=new Array,n=null,i=!1,a=!1,c=null;if(this.parseParametersThis=null,e.skip(s.Token.THIS)){if(!e.skip(s.Token.COLON))return this.error(o.DiagnosticCode._0_expected,e.range(),":"),null;if(!(c=this.parseType(e)))return null;if(c.kind==l.NodeKind.TYPE?this.parseParametersThis=c:this.error(o.DiagnosticCode.Operation_not_supported,c.range),!e.skip(s.Token.COMMA))return e.skip(s.Token.CLOSEPAREN)?r:(this.error(o.DiagnosticCode._0_expected,e.range(),")"),null)}for(;!e.skip(s.Token.CLOSEPAREN);){var p=this.parseParameter(e,t);if(!p)return null;switch(n&&!a&&(this.error(o.DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,n.name.range),a=!0),p.parameterKind){default:i&&this.error(o.DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,p.name.range);break;case l.ParameterKind.OPTIONAL:i=!0;break;case l.ParameterKind.REST:n=p}if(r.push(p),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEPAREN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),")"),null}}return r},t.prototype.parseParameter=function(e,t){void 0===t&&(t=!1);var r=!1,n=!1,a=null,c=i.CommonFlags.NONE;if(t&&(e.skip(s.Token.PUBLIC)?(a=e.range(),c|=i.CommonFlags.PUBLIC):e.skip(s.Token.PROTECTED)?(a=e.range(),c|=i.CommonFlags.PROTECTED):e.skip(s.Token.PRIVATE)&&(a=e.range(),c|=i.CommonFlags.PRIVATE),e.peek()==s.Token.READONLY)){var p=e.mark();e.next(),e.peek()!=s.Token.COLON?(e.discard(p),a||(a=e.range()),c|=i.CommonFlags.READONLY):e.reset(p)}if(e.skip(s.Token.DOT_DOT_DOT)&&(c?this.error(o.DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,e.range()):a=e.range(),r=!0),e.skipIdentifier()){r||(a=e.range());var u=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),h=null;if((n=e.skip(s.Token.QUESTION))&&r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,u.range),e.skip(s.Token.COLON)){if(!(h=this.parseType(e)))return null}else h=l.Node.createOmittedType(e.range(e.pos));var d=null;if(e.skip(s.Token.EQUALS)&&(r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,u.range),n?this.error(o.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,u.range):n=!0,!(d=this.parseExpression(e,2))))return null;var _=l.Node.createParameter(u,h,d,r?l.ParameterKind.REST:n?l.ParameterKind.OPTIONAL:l.ParameterKind.DEFAULT,s.Range.join(a,e.range()));return _.flags|=c,_}return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseFunction=function(e,t,r,n){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range(e.pos)),null;var a=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),c=-1,p=null;if(e.skip(s.Token.LESSTHAN)){if(c=e.tokenPos,!(p=this.parseTypeParameters(e)))return null;t|=i.CommonFlags.GENERIC}if(!e.skip(s.Token.OPENPAREN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"("),null;c<0&&(c=e.tokenPos);var u=this.parseParameters(e);if(!u)return null;var h=this.parseParametersThis,d=0!=(t&i.CommonFlags.SET);d&&(1!=u.length&&this.error(o.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,a.range),u.length&&u[0].initializer&&this.error(o.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,a.range)),t&i.CommonFlags.GET&&u.length&&this.error(o.DiagnosticCode.A_get_accessor_cannot_have_parameters,a.range);var _=null;if(e.skip(s.Token.COLON)&&!(_=this.parseType(e,!0,d)))return null;_||(_=l.Node.createOmittedType(e.range(e.pos)),d||this.error(o.DiagnosticCode.Type_expected,_.range));var m=l.Node.createSignature(u,_,h,!1,e.range(c,e.pos)),g=null;if(e.skip(s.Token.OPENBRACE)){if(t&i.CommonFlags.AMBIENT&&this.error(o.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,e.range()),!(g=this.parseBlockStatement(e,!1)))return null}else t&i.CommonFlags.AMBIENT||this.error(o.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,e.range(e.pos));var y=l.Node.createFunctionDeclaration(a,p,m,g,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),y},t.prototype.parseFunctionExpression=function(e){var t,r=e.tokenPos,n=!1;if(e.token==s.Token.FUNCTION){if(t=e.skipIdentifier()?l.Node.createIdentifierExpression(e.readIdentifier(),e.range()):l.Node.createEmptyIdentifierExpression(e.range(e.pos)),!e.skip(s.Token.OPENPAREN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"("),null}else n=!0,assert(e.token==s.Token.OPENPAREN),t=l.Node.createEmptyIdentifierExpression(e.range(e.tokenPos));var i=e.pos,a=this.parseParameters(e);return a?this.parseFunctionExpressionCommon(e,t,a,n,r,i):null},t.prototype.parseFunctionExpressionCommon=function(e,t,r,n,a,c){void 0===a&&(a=-1),void 0===c&&(c=-1),a<0&&(a=t.range.start),c<0&&(c=a);var p=null;if(e.skip(s.Token.COLON)){if(!(p=this.parseType(e)))return null}else p=l.Node.createOmittedType(e.range(e.pos)),this.error(o.DiagnosticCode.Type_expected,p.range);if(n&&!e.skip(s.Token.EQUALS_GREATERTHAN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"=>"),null;var u,h=l.Node.createSignature(r,p,null,!1,e.range(c,e.pos));if(n)u=this.parseStatement(e,!1);else{if(!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;u=this.parseBlockStatement(e,!1)}if(!u)return null;var d=l.Node.createFunctionDeclaration(t,null,h,u,null,n?i.CommonFlags.ARROW:i.CommonFlags.NONE,e.range(a,e.pos));return l.Node.createFunctionExpression(d)},t.prototype.parseClassOrInterface=function(e,t,r,n){var a=e.token==s.Token.INTERFACE;if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var c,p=l.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(s.Token.LESSTHAN)){if(!(c=this.parseTypeParameters(e)))return null;t|=i.CommonFlags.GENERIC}else c=[];var u=null;if(e.skip(s.Token.EXTENDS)){var h=this.parseType(e);if(!h)return null;if(h.kind!=l.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,h.range),null;u=h}var d=null;if(e.skip(s.Token.IMPLEMENTS)){a&&this.error(o.DiagnosticCode.Interface_declaration_cannot_have_implements_clause,e.range());do{var _=this.parseType(e);if(!_)return null;a||(d||(d=[]),d.push(_))}while(e.skip(s.Token.COMMA))}if(!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(),"{"),null;var m,g=new Array;if(a?(assert(!d),m=l.Node.createInterfaceDeclaration(p,c,u,g,r,t,e.range(n,e.pos))):m=l.Node.createClassDeclaration(p,c,u,d,g,r,t,e.range(n,e.pos)),!e.skip(s.Token.CLOSEBRACE))do{var y=this.parseClassMember(e,m);if(!y)return null;y.parent=m,g.push(y)}while(!e.skip(s.Token.CLOSEBRACE));return m},t.prototype.parseClassExpression=function(e){var t,r=e.tokenPos;if(t=e.skipIdentifier()?l.Node.createIdentifierExpression(e.readIdentifier(),e.range()):l.Node.createEmptyIdentifierExpression(e.range(e.pos)),!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;var n=new Array,a=l.Node.createClassDeclaration(t,[],null,null,n,null,i.CommonFlags.NONE,e.range(r,e.pos));if(!e.skip(s.Token.CLOSEBRACE))do{var c=this.parseClassMember(e,a);if(!c)return null;c.parent=a,n.push(c)}while(!e.skip(s.Token.CLOSEBRACE));return l.Node.createClassExpression(a)},t.prototype.parseClassMember=function(e,t){for(var r=e.pos,n=t.kind==l.NodeKind.INTERFACEDECLARATION,a=new Array;e.skip(s.Token.AT);){var c=this.parseDecorator(e);if(!c)break;n&&this.error(o.DiagnosticCode.Decorators_are_not_valid_here,c.range),a.push(c)}var p=t.flags&i.CommonFlags.AMBIENT;n&&(p|=i.CommonFlags.VIRTUAL),e.skip(s.Token.PUBLIC)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"public"),p|=i.CommonFlags.PUBLIC):e.skip(s.Token.PRIVATE)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"private"),p|=i.CommonFlags.PRIVATE):e.skip(s.Token.PROTECTED)&&(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"protected"),p|=i.CommonFlags.PROTECTED);var u=0,h=0,d=0,_=0;e.skip(s.Token.STATIC)?(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"static"),p|=i.CommonFlags.STATIC,u=e.tokenPos,h=e.pos):(p|=i.CommonFlags.INSTANCE,e.skip(s.Token.ABSTRACT)&&(n&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(),"abstract"),p|=i.CommonFlags.ABSTRACT,d=e.tokenPos,_=e.pos),t.flags&i.CommonFlags.GENERIC&&(p|=i.CommonFlags.GENERIC_CONTEXT));var m=0,g=0;e.skip(s.Token.READONLY)&&(p|=i.CommonFlags.READONLY,m=e.tokenPos,g=e.pos);var y=e.mark(),E=!1,f=!1,T=!1,I=0,v=0;if(n||(e.skip(s.Token.GET)?e.peek(!0,s.IdentifierHandling.PREFER)!=s.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(y):(p|=i.CommonFlags.GET,f=!0,I=e.tokenPos,v=e.pos,p&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,g),"readonly")):e.skip(s.Token.SET)?e.peek(!0,s.IdentifierHandling.PREFER)!=s.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(y):(p|=i.CommonFlags.SET|i.CommonFlags.SET,T=!0,I=e.tokenPos,v=e.pos,p&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,g),"readonly")):e.skip(s.Token.CONSTRUCTOR)&&(E=!0,(p|=i.CommonFlags.CONSTRUCTOR)&i.CommonFlags.STATIC&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(u,h),"static"),p&i.CommonFlags.ABSTRACT&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(d,_),"abstract"),p&i.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(m,g),"readonly"))),!E&&!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var A=E?l.Node.createConstructorExpression(e.range()):l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),C=null;if(e.skip(s.Token.LESSTHAN)){var N=e.tokenPos;if(!(C=this.parseTypeParameters(e)))return null;E?this.error(o.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,e.range(N,e.pos)):f||T?this.error(o.DiagnosticCode.An_accessor_cannot_have_type_parameters,e.range(N,e.pos)):p|=i.CommonFlags.GENERIC}if(e.skip(s.Token.OPENPAREN)){var O=e.tokenPos,S=this.parseParameters(e,E);if(!S)return null;var L=this.parseParametersThis;if(E)for(var b=0,k=S.length;b"),null):null;case s.Token.IDENTIFIER:return l.Node.createIdentifierExpression(e.readIdentifier(),e.range(r,e.pos));case s.Token.THIS:return l.Node.createThisExpression(e.range(r,e.pos));case s.Token.CONSTRUCTOR:return l.Node.createConstructorExpression(e.range(r,e.pos));case s.Token.SUPER:return l.Node.createSuperExpression(e.range(r,e.pos));case s.Token.STRINGLITERAL:return l.Node.createStringLiteralExpression(e.readString(),e.range(r,e.pos));case s.Token.INTEGERLITERAL:return l.Node.createIntegerLiteralExpression(e.readInteger(),e.range(r,e.pos));case s.Token.FLOATLITERAL:return l.Node.createFloatLiteralExpression(e.readFloat(),e.range(r,e.pos));case s.Token.SLASH:var f=e.readRegexpPattern();return e.skip(s.Token.SLASH)?l.Node.createRegexpLiteralExpression(f,e.readRegexpFlags(),e.range(r,e.pos)):(this.error(o.DiagnosticCode._0_expected,e.range(),"/"),null);case s.Token.FUNCTION:return this.parseFunctionExpression(e);case s.Token.CLASS:return this.parseClassExpression(e);default:return t==s.Token.ENDOFFILE?this.error(o.DiagnosticCode.Unexpected_end_of_text,e.range(r)):this.error(o.DiagnosticCode.Expression_expected,e.range()),null}},t.prototype.tryParseTypeArgumentsBeforeArguments=function(e){var t=e.mark();if(!e.skip(s.Token.LESSTHAN))return null;var r=new Array;do{if(e.peek()===s.Token.GREATERTHAN)break;var n=this.parseType(e,!0,!0);if(!n)return e.reset(t),null;r.push(n)}while(e.skip(s.Token.COMMA));return e.skip(s.Token.GREATERTHAN)&&e.skip(s.Token.OPENPAREN)?r:(e.reset(t),null)},t.prototype.parseArguments=function(e){for(var t=new Array;!e.skip(s.Token.CLOSEPAREN);){var r=this.parseExpression(e,2);if(!r)return null;if(t.push(r),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEPAREN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),")"),null}}return t},t.prototype.parseExpression=function(e,t){void 0===t&&(t=1),assert(0!=t);var r=this.parseExpressionStart(e);if(!r)return null;for(var n,i,a=(r=this.maybeParseCallExpression(e,r)).range.start,c=null;(i=u(n=e.peek()))>=t;){switch(e.next(),n){case s.Token.AS:var p=this.parseType(e);if(!p)return null;r=l.Node.createAssertionExpression(l.AssertionKind.AS,r,p,e.range(a,e.pos));break;case s.Token.INSTANCEOF:var d=this.parseType(e);if(!d)return null;r=l.Node.createInstanceOfExpression(r,d,e.range(a,e.pos));break;case s.Token.OPENBRACKET:if(!(c=this.parseExpression(e)))return null;if(!e.skip(s.Token.CLOSEBRACKET))return this.error(o.DiagnosticCode._0_expected,e.range(),"]"),null;r=l.Node.createElementAccessExpression(r,c,e.range(a,e.pos));break;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:r.kind!=l.NodeKind.IDENTIFIER&&r.kind!=l.NodeKind.ELEMENTACCESS&&r.kind!=l.NodeKind.PROPERTYACCESS&&this.error(o.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,r.range),r=l.Node.createUnaryPostfixExpression(n,r,e.range(a,e.pos));break;case s.Token.QUESTION:var _=this.parseExpression(e);if(!_)return null;if(!e.skip(s.Token.COLON))return this.error(o.DiagnosticCode._0_expected,e.range(),":"),null;var m=this.parseExpression(e,t>1?2:1);if(!m)return null;r=l.Node.createTernaryExpression(r,_,m,e.range(a,e.pos));break;case s.Token.COMMA:var g=[r];do{if(!(r=this.parseExpression(e,2)))return null;g.push(r)}while(e.skip(s.Token.COMMA));r=l.Node.createCommaExpression(g,e.range(a,e.pos));break;default:if(n==s.Token.DOT){if(e.skipIdentifier())c=l.Node.createIdentifierExpression(e.readIdentifier(),e.range());else if(!(c=this.parseExpression(e,h(n)?i:i+1)))return null;if(c.kind==l.NodeKind.IDENTIFIER)r=l.Node.createPropertyAccessExpression(r,c,e.range(a,e.pos));else{if(c.kind!=l.NodeKind.CALL)return this.error(o.DiagnosticCode.Identifier_expected,c.range),null;if(!(r=this.joinPropertyCall(e,a,r,c)))return null}}else{if(!(c=this.parseExpression(e,h(n)?i:i+1)))return null;r=l.Node.createBinaryExpression(n,r,c,e.range(a,e.pos))}}r=this.maybeParseCallExpression(e,r)}return r},t.prototype.joinPropertyCall=function(e,t,r,n){var i=n.expression;switch(i.kind){case l.NodeKind.IDENTIFIER:n.expression=l.Node.createPropertyAccessExpression(r,i,e.range(t,e.pos));break;case l.NodeKind.CALL:var a=this.joinPropertyCall(e,t,r,i);if(!a)return null;n.expression=a,n.range=e.range(t,e.pos);break;default:return this.error(o.DiagnosticCode.Identifier_expected,n.range),null}return n},t.prototype.maybeParseCallExpression=function(e,t){if(l.nodeIsCallable(t.kind))for(var r=null;e.skip(s.Token.OPENPAREN)||l.nodeIsGenericCallable(t.kind)&&null!==(r=this.tryParseTypeArgumentsBeforeArguments(e));){var n=this.parseArguments(e);if(!n)break;t=l.Node.createCallExpression(t,r,n,e.range(t.range.start,e.pos))}return t},t.prototype.skipStatement=function(e){for(e.peek(!0),e.nextTokenOnNewLine&&e.next();;){var t=e.peek(!0);if(t==s.Token.ENDOFFILE||t==s.Token.SEMICOLON){e.next();break}if(e.nextTokenOnNewLine)break;switch(e.next()){case s.Token.IDENTIFIER:e.readIdentifier();break;case s.Token.STRINGLITERAL:e.readString();break;case s.Token.INTEGERLITERAL:e.readInteger();break;case s.Token.FLOATLITERAL:e.readFloat()}}},t.prototype.skipBlock=function(e){var t=1,r=!0;do{switch(e.next()){case s.Token.ENDOFFILE:this.error(o.DiagnosticCode._0_expected,e.range(),"}"),r=!1;break;case s.Token.OPENBRACE:++t;break;case s.Token.CLOSEBRACE:--t||(r=!1);break;case s.Token.IDENTIFIER:e.readIdentifier();break;case s.Token.STRINGLITERAL:e.readString();break;case s.Token.INTEGERLITERAL:e.readInteger();break;case s.Token.FLOATLITERAL:e.readFloat()}}while(r)},t}(o.DiagnosticEmitter);function u(e){switch(e){case s.Token.COMMA:return 1;case s.Token.EQUALS:case s.Token.PLUS_EQUALS:case s.Token.MINUS_EQUALS:case s.Token.ASTERISK_ASTERISK_EQUALS:case s.Token.ASTERISK_EQUALS:case s.Token.SLASH_EQUALS:case s.Token.PERCENT_EQUALS:case s.Token.LESSTHAN_LESSTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.AMPERSAND_EQUALS:case s.Token.CARET_EQUALS:case s.Token.BAR_EQUALS:return 4;case s.Token.QUESTION:return 5;case s.Token.BAR_BAR:return 6;case s.Token.AMPERSAND_AMPERSAND:return 7;case s.Token.BAR:return 8;case s.Token.CARET:return 9;case s.Token.AMPERSAND:return 10;case s.Token.EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS:case s.Token.EQUALS_EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS_EQUALS:return 11;case s.Token.AS:case s.Token.IN:case s.Token.INSTANCEOF:case s.Token.LESSTHAN:case s.Token.GREATERTHAN:case s.Token.LESSTHAN_EQUALS:case s.Token.GREATERTHAN_EQUALS:return 12;case s.Token.LESSTHAN_LESSTHAN:case s.Token.GREATERTHAN_GREATERTHAN:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:return 13;case s.Token.PLUS:case s.Token.MINUS:return 14;case s.Token.ASTERISK:case s.Token.SLASH:case s.Token.PERCENT:return 15;case s.Token.ASTERISK_ASTERISK:return 16;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:return 18;case s.Token.DOT:case s.Token.NEW:case s.Token.OPENBRACKET:return 20}return 0}function h(e){switch(e){case s.Token.EQUALS:case s.Token.PLUS_EQUALS:case s.Token.MINUS_EQUALS:case s.Token.ASTERISK_ASTERISK_EQUALS:case s.Token.ASTERISK_EQUALS:case s.Token.SLASH_EQUALS:case s.Token.PERCENT_EQUALS:case s.Token.LESSTHAN_LESSTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.AMPERSAND_EQUALS:case s.Token.CARET_EQUALS:case s.Token.BAR_EQUALS:case s.Token.QUESTION:case s.Token.ASTERISK_ASTERISK:return!0;default:return!1}}t.Parser=p,function(e){e[e.NONE=0]="NONE",e[e.COMMA=1]="COMMA",e[e.SPREAD=2]="SPREAD",e[e.YIELD=3]="YIELD",e[e.ASSIGNMENT=4]="ASSIGNMENT",e[e.CONDITIONAL=5]="CONDITIONAL",e[e.LOGICAL_OR=6]="LOGICAL_OR",e[e.LOGICAL_AND=7]="LOGICAL_AND",e[e.BITWISE_OR=8]="BITWISE_OR",e[e.BITWISE_XOR=9]="BITWISE_XOR",e[e.BITWISE_AND=10]="BITWISE_AND",e[e.EQUALITY=11]="EQUALITY",e[e.RELATIONAL=12]="RELATIONAL",e[e.SHIFT=13]="SHIFT",e[e.ADDITIVE=14]="ADDITIVE",e[e.MULTIPLICATIVE=15]="MULTIPLICATIVE",e[e.EXPONENTIATED=16]="EXPONENTIATED",e[e.UNARY_PREFIX=17]="UNARY_PREFIX",e[e.UNARY_POSTFIX=18]="UNARY_POSTFIX",e[e.CALL=19]="CALL",e[e.MEMBERACCESS=20]="MEMBERACCESS",e[e.GROUPING=21]="GROUPING"}(t.Precedence||(t.Precedence={}))}])}); //# sourceMappingURL=assemblyscript.js.map \ No newline at end of file diff --git a/dist/assemblyscript.js.map b/dist/assemblyscript.js.map index e3212240..83454386 100644 --- a/dist/assemblyscript.js.map +++ b/dist/assemblyscript.js.map @@ -1 +1 @@ -{"version":3,"sources":["webpack://assemblyscript/webpack/universalModuleDefinition","webpack://assemblyscript/webpack/bootstrap","webpack://assemblyscript/./src/common.ts","webpack://assemblyscript/./src/diagnostics.ts","webpack://assemblyscript/./src/util/index.ts","webpack://assemblyscript/./src/ast.ts","webpack://assemblyscript/./src/program.ts","webpack://assemblyscript/./src/module.ts","webpack://assemblyscript/(webpack)/buildin/global.js","webpack://assemblyscript/./src/types.ts","webpack://assemblyscript/./src/tokenizer.ts","webpack://assemblyscript/./src/compiler.ts","webpack://assemblyscript/./src/diagnosticMessages.generated.ts","webpack://assemblyscript/./src/resolver.ts","webpack://assemblyscript/./src/glue/js/index.ts","webpack://assemblyscript/./src/glue/js/binaryen.js","webpack://assemblyscript/external \"binaryen\"","webpack://assemblyscript/./std/portable/index.js","webpack://assemblyscript/./src/glue/js/float.js","webpack://assemblyscript/./src/glue/js/i64.js","webpack://assemblyscript/./node_modules/long/src/long.js","webpack://assemblyscript/./src/builtins.ts","webpack://assemblyscript/./src/util/charcode.ts","webpack://assemblyscript/./src/util/path.ts","webpack://assemblyscript/./src/util/text.ts","webpack://assemblyscript/./src/util/binary.ts","webpack://assemblyscript/./src/index.ts","webpack://assemblyscript/./src/decompiler.ts","webpack://assemblyscript/./src/definitions.ts","webpack://assemblyscript/./src/parser.ts"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__15__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","CommonFlags","PATH_DELIMITER","PARENT_SUBST","GETTER_PREFIX","SETTER_PREFIX","INSTANCE_DELIMITER","STATIC_DELIMITER","INNER_DELIMITER","LIBRARY_SUBST","LIBRARY_PREFIX","FILESPACE_PREFIX","DiagnosticCategory","diagnosticMessages_generated_1","util_1","diagnosticMessages_generated_2","diagnosticCategoryToString","category","INFO","WARNING","ERROR","assert","diagnosticCategoryToColor","COLOR_BLUE","COLOR_YELLOW","COLOR_RED","DiagnosticCode","diagnosticCodeToString","COLOR_RESET","DiagnosticMessage","code","message","range","arg0","arg1","arg2","replace","createInfo","createWarning","createError","withRange","toString","source","normalizedPath","line","column","formatDiagnosticContext","useColors","text","len","length","start","end","isLineBreak","charCodeAt","sb","substring","push","join","formatDiagnosticMessage","showContext","DiagnosticEmitter","diagnostics","Array","emitDiagnostic","info","warning","error","__export","common_1","tokenizer_1","Token","Range","NodeKind","nodeIsConstantValue","kind","LITERAL","NULL","TRUE","FALSE","nodeIsCallable","IDENTIFIER","CALL","ELEMENTACCESS","PROPERTYACCESS","PARENTHESIZED","nodeIsGenericCallable","Node","parent","flags","NONE","is","flag","isAny","set","createType","typeArguments","isNullable","type","TypeNode","setParent","createOmittedType","createIdentifierExpression","createTypeParameter","extendsType","elem","TypeParameterNode","createParameter","initializer","ParameterNode","parameterKind","createSignature","parameters","returnType","explicitThisType","sig","SignatureNode","createDecorator","args","stmt","DecoratorNode","arguments","decoratorKind","decoratorNameToKind","createComment","node","CommentNode","commentKind","expr","IdentifierExpression","createEmptyIdentifierExpression","createArrayLiteralExpression","elements","ArrayLiteralExpression","elementExpressions","nodes","k","setParentIfNotNull","createAssertionExpression","assertionKind","expression","toType","AssertionExpression","createBinaryExpression","operator","left","right","BinaryExpression","createCallExpression","typeArgs","CallExpression","createClassExpression","declaration","ClassExpression","createCommaExpression","expressions","CommaExpression","createConstructorExpression","ConstructorExpression","createElementAccessExpression","element","ElementAccessExpression","elementExpression","createFalseExpression","FalseExpression","createFloatLiteralExpression","FloatLiteralExpression","createFunctionExpression","FunctionExpression","ARROW","createInstanceOfExpression","isType","InstanceOfExpression","createIntegerLiteralExpression","IntegerLiteralExpression","createNewExpression","NewExpression","createNullExpression","NullExpression","createObjectLiteralExpression","names","values","ObjectLiteralExpression","createParenthesizedExpression","ParenthesizedExpression","createPropertyAccessExpression","PropertyAccessExpression","createRegexpLiteralExpression","pattern","RegexpLiteralExpression","patternFlags","createTernaryExpression","condition","ifThen","ifElse","TernaryExpression","createStringLiteralExpression","StringLiteralExpression","createSuperExpression","SuperExpression","createThisExpression","ThisExpression","createTrueExpression","TrueExpression","createUnaryPostfixExpression","operand","UnaryPostfixExpression","createUnaryPrefixExpression","UnaryPrefixExpression","createBlockStatement","statements","BlockStatement","createBreakStatement","label","BreakStatement","createClassDeclaration","identifier","typeParameters","implementsTypes","members","decorators","ClassDeclaration","createContinueStatement","ContinueStatement","createDoStatement","statement","DoStatement","createEmptyStatement","EmptyStatement","createEnumDeclaration","EnumDeclaration","createEnumValueDeclaration","EnumValueDeclaration","createExportStatement","path","ExportStatement","normalizePath","startsWith","resolvePath","internalPath","mangleInternalPath","createExportImportStatement","externalName","ExportImportStatement","createExportMember","ExportMember","createExpressionStatement","ExpressionStatement","createIfStatement","ifTrue","ifFalse","IfStatement","createImportStatement","decls","ImportStatement","declarations","namespaceName","createImportStatementWithWildcard","createImportDeclaration","ImportDeclaration","createInterfaceDeclaration","InterfaceDeclaration","createFieldDeclaration","FieldDeclaration","createForStatement","incrementor","ForStatement","createFunctionDeclaration","signature","body","FunctionDeclaration","createMethodDeclaration","MethodDeclaration","createNamespaceDeclaration","NamespaceDeclaration","createReturnStatement","ReturnStatement","createSwitchStatement","cases","SwitchStatement","createSwitchCase","SwitchCase","createThrowStatement","ThrowStatement","createTryStatement","catchVariable","catchStatements","finallyStatements","TryStatement","createTypeDeclaration","alias","TypeDeclaration","createVariableStatement","VariableStatement","createVariableDeclaration","VariableDeclaration","createVoidStatement","VoidStatement","createWhileStatement","WhileStatement","CommonTypeNode","_super","__extends","_this","apply","TYPE","TYPEPARAMETER","ParameterKind","PARAMETER","implicitFieldDeclaration","DecoratorKind","SIGNATURE","nameStr","BUILTIN","EXTERNAL","GLOBAL","INLINE","OPERATOR","SEALED","UNMANAGED","propStr","OPERATOR_BINARY","OPERATOR_PREFIX","OPERATOR_POSTFIX","CUSTOM","DECORATOR","CommentKind","COMMENT","Expression","LiteralKind","LiteralExpression","literalKind","ARRAY","AssertionKind","ASSERTION","BINARY","CLASS","COMMA","CONSTRUCTOR","FLOAT","FUNCTION","INSTANCEOF","INTEGER","NEW","OBJECT","REGEXP","TERNARY","STRING","SUPER","THIS","UnaryExpression","UNARYPOSTFIX","UNARYPREFIX","isLastStatement","BLOCK","FUNCTIONDECLARATION","METHODDECLARATION","SourceKind","Statement","Source","SOURCE","tokenizer","debugInfoIndex","exportPaths","sourceKind","pos","lastIndexOf","simplePath","ENTRY","LIBRARY","DeclarationStatement","cachedProgramLevelInternalName","cachedFileLevelInternalName","mangleInternalName","VARIABLE","NAMESPACEDECLARATION","EXPORT","isTopLevelExport","CLASSDECLARATION","STATIC","needsExplicitExport","member","VariableLikeDeclarationStatement","BREAK","CONTINUE","DO","EMPTY","ENUMDECLARATION","ENUMVALUEDECLARATION","EXPORTIMPORT","EXPORTMEMBER","EXPRESSION","FIELDDECLARATION","parameterIndex","FOR","IF","IMPORTDECLARATION","IMPORT","INTERFACEDECLARATION","RETURN","SWITCHCASE","SWITCH","THROW","TRY","TYPEDECLARATION","VARIABLEDECLARATION","VOID","WHILE","asGlobal","endsWith","findDecorator","decorator","OperatorKind","diagnostics_1","types_1","ast_1","module_1","resolver_1","QueuedImport","QueuedExport","TypeAlias","operatorKindFromDecorator","arg","INDEXED_GET","INDEXED_SET","UNCHECKED_INDEXED_GET","UNCHECKED_INDEXED_SET","ADD","SUB","MUL","POW","DIV","REM","BITWISE_AND","BITWISE_OR","BITWISE_XOR","EQ","NE","GT","GE","BITWISE_SHR","BITWISE_SHR_U","LT","LE","BITWISE_SHL","PLUS","PREFIX_INC","MINUS","PREFIX_DEC","NOT","BITWISE_NOT","POSTFIX_INC","POSTFIX_DEC","INVALID","ElementKind","DecoratorFlags","noTypesYet","Map","Program","diagnosticsOffset","elementsLookup","instancesLookup","typesLookup","typeAliases","fileLevelExports","moduleLevelExports","arrayBufferInstance","arrayPrototype","stringInstance","mainFunction","abortInstance","memoryAllocateInstance","hasGC","gcAllocateInstance","gcLinkInstance","gcMarkInstance","gcHeaderSize","gcHookOffset","resolver","Resolver","sources","getSource","lookupSourceByPath","normalizedPathWithoutExtension","tmp","initialize","options","Type","i8","i16","i32","i64","isizeType","u8","u16","u32","u64","usizeType","bool","f32","f64","void","setConstantInteger","i64_new","isWasm64","noTreeShaking","noAssert","memoryBase","optimizeLevelHint","shrinkLevelHint","hasFeature","queuedImports","queuedExports","queuedExtends","queuedImplements","filespace","Filespace","internalName","currentFilespace","j","initializeClass","initializeEnum","initializeExports","initializeFunction","initializeImports","initializeInterface","initializeNamespace","initializeTypeAlias","initializeVariables","queuedImport","tryLocateImport","localName","splice","externalNameAlt","Module_0_has_no_exported_member_1","queuedExports_1","__values","queuedExports_1_1","next","done","_c","__read","exportName","queuedExport","currentExport","isReExport","setExportAndCheckLibrary","Cannot_find_name_0","derivedPrototype","derivedDeclaration","derivedType","baseElement","resolveIdentifier","CLASS_PROTOTYPE","basePrototype","A_class_may_only_extend_another_class","globalAliases","globalAliases_1","globalAliases_1_1","_d","Error","has","resolveClass","instance","Duplicate_identifier_0","programLevelInternalName","FUNCTION_PROTOTYPE","startFunction","GENERIC","AMBIENT","MAIN","resolveFunction","parameterTypes","signatureReference","byteSize","globalName","Global","withConstantIntegerValue","setConstantFloat","withConstantFloatValue","queuedNamedExports","checkDecorators","acceptedFlags","presentFlags","decoratorKindToFlag","isLibrary","Decorator_0_is_not_valid_here","Duplicate_decorator","checkGlobal","parentNode","hasDecorator","namespace","fileLevelInternalName","simpleName","ClassPrototype","numImplementsTypes","Unmanaged_classes_cannot_implement_interfaces","Operation_not_supported","MODULE_EXPORT","Export_declaration_conflicts_with_exported_declaration_of_0","isEntry","existingExport","memberDeclarations","memberDeclaration","initializeField","GET","SET","initializeAccessor","initializeMethod","classPrototype","isInterface","INTERFACE_PROTOTYPE","staticField","READONLY","ABSTRACT","instanceMembers","instanceField","FieldPrototype","decoratorFlags","FunctionPrototype","constructorPrototype","Multiple_constructor_implementations_are_not_allowed","checkOperatorOverloads","numArgs","firstArg","overloads","overloadPrototypes","Duplicate_function_implementation","operatorKind","String_literal_expected","Expected_0_arguments_but_got_1","internalPropertyName","propertyElement","isGetter","isNew","PROPERTY","getterPrototype","setterPrototype","Property","baseName","staticName","staticPrototype","instanceName","instancePrototype","Enum","initializeEnumValue","enm","EnumValue","initializeExport","externalIdentifier","prefix","FILESPACE","referencedName","referencedElement","seen","Set","add","initializeImport","indexPart","InterfacePrototype","parentNamespace","Namespace","Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local","existingExport_1","global_1","CONST","Element","program","NAMESPACE","ENUM","ENUMVALUE","constantValue","ConstantValueKind","VariableLikeElement","constantValueKind","constantIntegerValue","INLINED","constantFloatValue","Parameter","Local","index","LOCAL","scopedGlobal","instances","classTypeArguments","Function","contextualTypeArguments","localsByName","localsByIndex","additionalLocals","breakContext","debugLocations","ref","functionTableIndex","trampoline","outerScope","nextBreakId","breakStack","nextInlineId","tempI32s","tempI64s","tempF32s","tempF64s","localIndex","INSTANCE","local","thisType","inheritedTypeArguments","inheritedTypeArguments_1","inheritedTypeArguments_1_1","_b","inheritedName","inheritedType","parameterType","parameterName","getParameterName","flow","Flow","addLocal","getTempLocal","wrapped","temps","toNativeType","pop","setLocalWrapped","freeTempLocal","getAndFreeTempLocal","enterBreakContext","id","leaveBreakContext","finalize","sourceMap","debugLocation","setDebugLocation","debugInfoRef","FunctionTarget","FUNCTION_TARGET","toSignatureString","asFunction","FIELD_PROTOTYPE","Field","FIELD","memoryOffset","Class","base","currentMemoryOffset","constructorInstance","gcHookIndex","asClass","inheritedTypeArguments_2","inheritedTypeArguments_2_1","baseType","isAssignableTo","target","current","lookupOverload","unchecked","uncheckedOverload","overload","offsetof","fieldName","field","Interface","INTERFACE","FlowFlags","scopedLocals","currentFunction","parentFlow","continueLabel","breakLabel","returnLabel","wrappedLocals","wrappedLocalsExt","unset","fork","branch","slice","free","scopedLocal","SCOPED","addScopedLocal","existingLocal","addScopedLocalAlias","scopedAlias","getScopedLocal","isLocalWrapped","map","ext","i64_ne","i64_and","i64_shl","i64_one","i64_zero","off","i64_or","i64_not","inherit","other","inheritConditional","inheritMutual","leftExt","rightExt","thisExt","minLength","min","canOverflow","getExpressionId","ExpressionId","GetLocal","getGetLocalIndex","canConversionOverflow","SetLocal","isTeeLocal","getSetLocalValue","GetGlobal","Binary","getBinaryOp","BinaryOp","EqI32","EqI64","EqF32","EqF64","NeI32","NeI64","NeF32","NeF64","LtI32","LtU32","LtI64","LtU64","LtF32","LtF64","LeI32","LeU32","LeI64","LeU64","LeF32","LeF64","GtI32","GtU32","GtI64","GtU64","GtF32","GtF64","GeI32","GeU32","GeI64","GeU64","GeF32","GeF64","MulI32","getBinaryLeft","Const","getConstValueI32","getBinaryRight","AndI32","computeSmallIntegerMask","ShlI32","shift","size","ShrI32","ShrU32","DivU32","RemI32","RemU32","Unary","getUnaryOp","UnaryOp","EqzI32","EqzI64","ClzI32","CtzI32","PopcntI32","getExpressionType","getConstValueI64Low","getConstValueF32","getConstValueF64","MIN_VALUE","MAX_VALUE","Load","fromType","getLoadBytes","isLoadSigned","Block","getBlockName","getBlockChildCount","last","getBlockChild","If","getIfTrue","getIfFalse","Select","getSelectThen","getSelectElse","Call","getCallTarget","Unreachable","fromSize","toSize","compiler_1","NativeType","_BinaryenInvalidId","_BinaryenBlockId","_BinaryenIfId","_BinaryenLoopId","_BinaryenBreakId","_BinaryenSwitchId","_BinaryenCallId","_BinaryenCallIndirectId","_BinaryenGetLocalId","_BinaryenSetLocalId","_BinaryenGetGlobalId","_BinaryenSetGlobalId","_BinaryenLoadId","_BinaryenStoreId","_BinaryenConstId","_BinaryenUnaryId","_BinaryenBinaryId","_BinaryenSelectId","_BinaryenDropId","_BinaryenReturnId","_BinaryenHostId","_BinaryenNopId","_BinaryenUnreachableId","_BinaryenAtomicCmpxchgId","_BinaryenAtomicRMWId","_BinaryenAtomicWaitId","_BinaryenAtomicWakeId","_BinaryenClzInt32","_BinaryenCtzInt32","_BinaryenPopcntInt32","_BinaryenNegFloat32","_BinaryenAbsFloat32","_BinaryenCeilFloat32","_BinaryenFloorFloat32","_BinaryenTruncFloat32","_BinaryenNearestFloat32","_BinaryenSqrtFloat32","_BinaryenEqZInt32","_BinaryenClzInt64","_BinaryenCtzInt64","_BinaryenPopcntInt64","_BinaryenNegFloat64","_BinaryenAbsFloat64","_BinaryenCeilFloat64","_BinaryenFloorFloat64","_BinaryenTruncFloat64","_BinaryenNearestFloat64","_BinaryenSqrtFloat64","_BinaryenEqZInt64","_BinaryenExtendSInt32","_BinaryenExtendUInt32","_BinaryenWrapInt64","_BinaryenTruncSFloat32ToInt32","_BinaryenTruncSFloat32ToInt64","_BinaryenTruncUFloat32ToInt32","_BinaryenTruncUFloat32ToInt64","_BinaryenTruncSFloat64ToInt32","_BinaryenTruncSFloat64ToInt64","_BinaryenTruncUFloat64ToInt32","_BinaryenTruncUFloat64ToInt64","_BinaryenReinterpretFloat32","_BinaryenReinterpretFloat64","_BinaryenConvertSInt32ToFloat32","_BinaryenConvertSInt32ToFloat64","_BinaryenConvertUInt32ToFloat32","_BinaryenConvertUInt32ToFloat64","_BinaryenConvertSInt64ToFloat32","_BinaryenConvertSInt64ToFloat64","_BinaryenConvertUInt64ToFloat32","_BinaryenConvertUInt64ToFloat64","_BinaryenPromoteFloat32","_BinaryenDemoteFloat64","_BinaryenReinterpretInt32","_BinaryenReinterpretInt64","_BinaryenExtendS8Int32","_BinaryenExtendS16Int32","_BinaryenExtendS8Int64","_BinaryenExtendS16Int64","_BinaryenExtendS32Int64","_BinaryenAddInt32","_BinaryenSubInt32","_BinaryenMulInt32","_BinaryenDivSInt32","_BinaryenDivUInt32","_BinaryenRemSInt32","_BinaryenRemUInt32","_BinaryenAndInt32","_BinaryenOrInt32","_BinaryenXorInt32","_BinaryenShlInt32","_BinaryenShrUInt32","_BinaryenShrSInt32","_BinaryenRotLInt32","_BinaryenRotRInt32","_BinaryenEqInt32","_BinaryenNeInt32","_BinaryenLtSInt32","_BinaryenLtUInt32","_BinaryenLeSInt32","_BinaryenLeUInt32","_BinaryenGtSInt32","_BinaryenGtUInt32","_BinaryenGeSInt32","_BinaryenGeUInt32","_BinaryenAddInt64","_BinaryenSubInt64","_BinaryenMulInt64","_BinaryenDivSInt64","_BinaryenDivUInt64","_BinaryenRemSInt64","_BinaryenRemUInt64","_BinaryenAndInt64","_BinaryenOrInt64","_BinaryenXorInt64","_BinaryenShlInt64","_BinaryenShrUInt64","_BinaryenShrSInt64","_BinaryenRotLInt64","_BinaryenRotRInt64","_BinaryenEqInt64","_BinaryenNeInt64","_BinaryenLtSInt64","_BinaryenLtUInt64","_BinaryenLeSInt64","_BinaryenLeUInt64","_BinaryenGtSInt64","_BinaryenGtUInt64","_BinaryenGeSInt64","_BinaryenGeUInt64","_BinaryenAddFloat32","_BinaryenSubFloat32","_BinaryenMulFloat32","_BinaryenDivFloat32","_BinaryenCopySignFloat32","_BinaryenMinFloat32","_BinaryenMaxFloat32","_BinaryenEqFloat32","_BinaryenNeFloat32","_BinaryenLtFloat32","_BinaryenLeFloat32","_BinaryenGtFloat32","_BinaryenGeFloat32","_BinaryenAddFloat64","_BinaryenSubFloat64","_BinaryenMulFloat64","_BinaryenDivFloat64","_BinaryenCopySignFloat64","_BinaryenMinFloat64","_BinaryenMaxFloat64","_BinaryenEqFloat64","_BinaryenNeFloat64","_BinaryenLtFloat64","_BinaryenLeFloat64","_BinaryenGtFloat64","_BinaryenGeFloat64","HostOp","_BinaryenCurrentMemory","_BinaryenGrowMemory","AtomicRMWOp","_BinaryenAtomicRMWAdd","_BinaryenAtomicRMWSub","_BinaryenAtomicRMWAnd","_BinaryenAtomicRMWOr","_BinaryenAtomicRMWXor","_BinaryenAtomicRMWXchg","MemorySegment","buffer","offset","segment","Module","cachedTemporaryName","hasTemporaryFunction","cachedPrecomputeName","cachedPrecomputeNames","_BinaryenModuleCreate","cachedByValue","memory","allocate","createFrom","cArr","allocU8Array","_BinaryenModuleRead","changetype","addFunctionType","result","paramTypes","cStr","allocString","allocI32Array","_BinaryenAddFunctionType","getFunctionTypeBySignature","_BinaryenGetFunctionTypeBySignature","removeFunctionType","_BinaryenRemoveFunctionType","createI32","out","_BinaryenLiteralInt32","_BinaryenConst","createI64","valueLow","valueHigh","_BinaryenLiteralInt64","createF32","_BinaryenLiteralFloat32","createF64","_BinaryenLiteralFloat64","createUnary","op","_BinaryenUnary","createBinary","_BinaryenBinary","createHost","operands","allocPtrArray","_BinaryenHost","createGetLocal","_BinaryenGetLocal","createTeeLocal","_BinaryenTeeLocal","createGetGlobal","_BinaryenGetGlobal","createLoad","bytes","signed","ptr","_BinaryenLoad","createStore","_BinaryenStore","createAtomicLoad","_BinaryenAtomicLoad","createAtomicStore","_BinaryenAtomicStore","createAtomicRMW","_BinaryenAtomicRMW","createAtomicCmpxchg","expected","replacement","_BinaryenAtomicCmpxchg","createAtomicWait","timeout","expectedType","_BinaryenAtomicWait","createAtomicWake","wakeCount","_BinaryenAtomicWake","createSetLocal","_BinaryenSetLocal","createSetGlobal","_BinaryenSetGlobal","createBlock","children","_BinaryenBlock","createBreak","_BinaryenBreak","createDrop","_BinaryenDrop","createLoop","_BinaryenLoop","createIf","_BinaryenIf","createNop","_BinaryenNop","createReturn","_BinaryenReturn","createSelect","_BinaryenSelect","createSwitch","defaultName","numNames","strs","_BinaryenSwitch","createCall","_BinaryenCall","createCallIndirect","typeName","_BinaryenCallIndirect","createUnreachable","_BinaryenUnreachable","addGlobal","mutable","_BinaryenAddGlobal","removeGlobal","_BinaryenRemoveGlobal","addFunction","varTypes","_BinaryenAddFunction","removeFunction","_BinaryenRemoveFunction","addTemporaryFunction","tempName","typeRef","removeTemporaryFunction","addFunctionExport","cStr1","cStr2","_BinaryenAddFunctionExport","addTableExport","_BinaryenAddTableExport","addMemoryExport","_BinaryenAddMemoryExport","addGlobalExport","_BinaryenAddGlobalExport","removeExport","_BinaryenRemoveExport","addFunctionImport","externalModuleName","externalBaseName","functionType","cStr3","_BinaryenAddFunctionImport","addTableImport","_BinaryenAddTableImport","addMemoryImport","_BinaryenAddMemoryImport","addGlobalImport","globalType","_BinaryenAddGlobalImport","setMemory","initial","maximum","segments","segs","offs","sizs","Target","WASM64","i64_low","i64_high","cArr1","cArr2","cArr3","_BinaryenSetMemory","setFunctionTable","funcs","_BinaryenSetFunctionTable","setStart","func","_BinaryenSetStart","getOptimizeLevel","_BinaryenGetOptimizeLevel","setOptimizeLevel","level","_BinaryenSetOptimizeLevel","getShrinkLevel","_BinaryenGetShrinkLevel","setShrinkLevel","_BinaryenSetShrinkLevel","setDebugInfo","on","_BinaryenSetDebugInfo","optimize","_BinaryenFunctionOptimize","_BinaryenModuleOptimize","runPasses","passes","_BinaryenFunctionRunPasses","_BinaryenModuleRunPasses","precomputeExpression","previousOptimizeLevel","previousShrinkLevel","previousDebugInfo","_BinaryenGetDebugInfo","_BinaryenExpressionGetType","_BinaryenFunctionGetBody","validate","_BinaryenModuleValidate","interpret","_BinaryenModuleInterpret","toBinary","sourceMapUrl","binaryPtr","sourceMapPtr","_BinaryenModuleAllocateAndWrite","readInt","binaryBytes","ret","BinaryModule","output","Uint8Array","load","readBuffer","readString","toText","toAsmjs","dispose","_BinaryenModuleDispose","createRelooper","Relooper","cloneExpression","noSideEffects","maxDepth","nested1","nested2","_BinaryenExpressionGetId","_BinaryenConstGetValueI32","_BinaryenConstGetValueI64Low","_BinaryenConstGetValueI64High","_BinaryenConstGetValueF32","_BinaryenConstGetValueF64","_BinaryenGetLocalGetIndex","_BinaryenGetGlobalGetName","_BinaryenLoadGetPtr","_BinaryenLoadIsAtomic","_BinaryenLoadGetBytes","_BinaryenLoadGetOffset","_BinaryenLoadIsSigned","_BinaryenLoadGetAlign","_BinaryenUnaryGetValue","_BinaryenUnaryGetOp","_BinaryenBinaryGetLeft","_BinaryenBinaryGetRight","_BinaryenBinaryGetOp","addDebugInfoFile","_BinaryenModuleAddDebugInfoFileName","getDebugInfoFile","_BinaryenModuleGetDebugInfoFileName","fileIndex","lineNumber","columnNumber","_BinaryenFunctionSetDebugLocation","UNLIMITED_MEMORY","getConstValueI64High","getSetLocalIndex","_BinaryenSetLocalGetIndex","_BinaryenSetLocalGetValue","_BinaryenSetLocalIsTee","getUnaryValue","getLoadOffset","getLoadPtr","getStoreBytes","_BinaryenStoreGetBytes","getStoreOffset","_BinaryenStoreGetOffset","getStorePtr","_BinaryenStoreGetPtr","getStoreValue","_BinaryenStoreGetValue","_BinaryenBlockGetName","_BinaryenBlockGetNumChildren","_BinaryenBlockGetChild","getIfCondition","_BinaryenIfGetCondition","_BinaryenIfGetIfTrue","_BinaryenIfGetIfFalse","getLoopName","_BinaryenLoopGetName","getLoopBody","_BinaryenLoopGetBody","getBreakName","_BinaryenBreakGetName","getBreakCondition","_BinaryenBreakGetCondition","_BinaryenSelectGetIfTrue","_BinaryenSelectGetIfFalse","getSelectCondition","_BinaryenSelectGetCondition","getDropValue","_BinaryenDropGetValue","getReturnValue","_BinaryenReturnGetValue","_BinaryenCallGetTarget","getHostOp","_BinaryenHostGetOp","getHostOperandCount","_BinaryenHostGetNumOperands","getHostOperand","_BinaryenHostGetOperand","getHostName","_BinaryenHostGetNameOperand","getFunctionBody","getFunctionName","_BinaryenFunctionGetName","getFunctionParamCount","_BinaryenFunctionGetNumParams","getFunctionParamType","_BinaryenFunctionGetParam","getFunctionResultType","_BinaryenFunctionGetResult","relooper","_RelooperCreate","addBlock","_RelooperAddBlock","addBranch","from","to","_RelooperAddBranch","addBlockWithSwitch","_RelooperAddBlockWithSwitch","addBranchForSwitch","indexes","_RelooperAddBranchForSwitch","renderAndDispose","entry","labelHelper","_RelooperRenderAndDispose","u8s","numValues","idx","store","i32s","val","ptrs","str","u","stringLengthUTF8","cp","u1","u2","u3","u4","arr","String","fromCodePoints","needsExplicitUnreachable","Return","Break","numChildren","g","eval","e","window","program_1","TypeKind","TypeFlags","cachedNullableType","ceil","classReference","nonNullableType","isize64","isize32","usize64","usize32","isManaged","computeSmallIntegerShift","targetType","classType","asNullable","signednessIsRelevant","currentClass","targetClass","targetFunction","commonCompatible","signednessIsImportant","kindOnly","toNativeZero","toNativeOne","toNativeNegOne","typesToNativeTypes","types","numTypes","typesToString","Signature","cachedFunctionTarget","parameterNames","requiredParameters","hasRest","getDefaultParameterName","thisThisType","targetThisType","thisParameterTypes","targetParameterTypes","numParameters","thisParameterType","targetParameterType","thisReturnType","targetReturnType","makeSignatureString","includeThis","optionalStart","restIndex","cachedDefaultParameterNames","IdentifierHandling","tokenFromKeyword","AS","ASYNC","AWAIT","CASE","CATCH","DEBUGGER","DECLARE","DEFAULT","DELETE","ELSE","EXTENDS","FINALLY","FROM","IMPLEMENTS","IN","IS","KEYOF","LET","MODULE","OF","PACKAGE","PRIVATE","PROTECTED","PUBLIC","TYPEOF","VAR","WITH","YIELD","tokenIsAlsoIdentifier","token","operatorTokenToString","DOT_DOT_DOT","LESSTHAN","GREATERTHAN","LESSTHAN_EQUALS","GREATERTHAN_EQUALS","EQUALS_EQUALS","EXCLAMATION_EQUALS","EQUALS_EQUALS_EQUALS","EXCLAMATION_EQUALS_EQUALS","ASTERISK_ASTERISK","ASTERISK","SLASH","PERCENT","PLUS_PLUS","MINUS_MINUS","LESSTHAN_LESSTHAN","GREATERTHAN_GREATERTHAN","GREATERTHAN_GREATERTHAN_GREATERTHAN","AMPERSAND","BAR","CARET","EXCLAMATION","TILDE","AMPERSAND_AMPERSAND","BAR_BAR","EQUALS","PLUS_EQUALS","MINUS_EQUALS","ASTERISK_EQUALS","ASTERISK_ASTERISK_EQUALS","SLASH_EQUALS","PERCENT_EQUALS","LESSTHAN_LESSTHAN_EQUALS","GREATERTHAN_GREATERTHAN_EQUALS","GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS","AMPERSAND_EQUALS","BAR_EQUALS","CARET_EQUALS","a","b","Tokenizer","tokenPos","nextToken","nextTokenPos","nextTokenOnNewLine","onComment","identifierHandling","unsafeNext","maxTokenLength","STRINGLITERAL","OPENPAREN","CLOSEPAREN","isDecimalDigit","FLOATLITERAL","DOT","commentStartPos","LINE","TRIPLE","closed","_0_expected","testInteger","INTEGERLITERAL","COLON","SEMICOLON","EQUALS_GREATERTHAN","QUESTION","OPENBRACKET","CLOSEBRACKET","OPENBRACE","CLOSEBRACE","AT","isIdentifierStart","isKeywordCharacter","posBefore","isIdentifierPart","keywordToken","ALWAYS","PREFER","isWhiteSpace","Invalid_character","ENDOFFILE","peek","checkOnNewLine","maxCompoundLength","tokenBefore","tokenPosBefore","skipIdentifier","skip","mark","state","reusableState","State","discard","reset","readIdentifier","quote","Unterminated_string_literal","readEscapeSequence","Unexpected_end_of_text","readExtendedUnicodeEscape","readUnicodeEscape","fromCharCode","readRegexpPattern","escaped","Unterminated_regular_expression_literal","readRegexpFlags","Invalid_regular_expression_flags","readInteger","readHexInteger","readBinaryInteger","readOctalInteger","isOctalDigit","Octal_literals_are_not_allowed_in_strict_mode","readDecimalInteger","i64_16","sepEnd","i64_add","i64_mul","Numeric_separators_are_not_allowed_here","Multiple_consecutive_numeric_separators_are_not_permitted","Hexadecimal_digit_expected","i64_10","Digit_expected","i64_8","Octal_digit_expected","i64_2","i64_1","Binary_digit_expected","readFloat","readDecimalFloat","parseFloat","readHexFloat","remain","value32","invalid","An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive","Unterminated_Unicode_escape_sequence","finish","builtins_1","Options","WASM32","importMemory","importTable","features","feature","Feature","ConversionKind","WrapMode","mangleImportName_moduleName","mangleImportName_elementName","Compiler","currentOuterFunction","currentInlineFunctions","currentEnum","currentType","memorySegments","stringSegments","functionTable","argcVar","argcSet","needsIterateRoots","f32ModInstance","f64ModInstance","f32PowInstance","f64PowInstance","max","compile","startFunctionInstance","startFunctionBody","compileSource","funcRef","ensureFunctionType","i64_align","numPages","i64_shr_u","moduleExport","makeModuleExport","compileIterateRoots","subPrefix","_e","_f","_g","_h","Cannot_export_a_mutable_global","ensureTrampoline","ensureArgcSet","COMPILED","setter","nativeType","nativeSizeType","getterName","setterName","_j","_k","fullName","_l","_m","ctor","compileSourceByPath","reportNode","File_0_not_found","isGeneric","compileClassDeclaration","compileEnumDeclaration","compileFunctionDeclaration","compileNamespaceDeclaration","variableInit","compileVariableStatement","compileExportStatement","previousFunction","compileStatement","compileGlobalDeclaration","compileGlobal","global","initExpr","resolvedType","resolveType","Type_expected","atEnd","compileExpressionRetainType","Type_0_is_not_assignable_to_type_1","isDeclaredConstant","MODULE_IMPORT","mangleImportName","initializeInStart","compileExpression","Compiling_constant_with_non_constant_initializer_as_mutable","compileEnum","previousValue","previousValueIsMut","initInStart","valueDeclaration","In_const_enum_declarations_member_initializer_must_be_constant_expression","Enum_member_must_have_initializer","AddI32","compileFunctionUsingTypeArguments","resolveFunctionInclTypeArguments","compileFunction","resultType","An_implementation_cannot_be_declared_in_ambient_contexts","Function_implementation_is_missing_or_not_immediately_following_the_declaration","isConstructor","stmts","compileStatements","unshift","makeConditionalAllocate","A_function_whose_declared_type_is_not_void_must_return_a_value","compileInterfaceDeclaration","compileNamespace","compileClassUsingTypeArguments","alternativeReportNode","resolveClassInclTypeArguments","compileClass","staticMembers","ctorInstance","addMemorySegment","alignment","ensureFunctionTableEntry","TRAMPOLINE","compileBlockStatement","compileBreakStatement","compileContinueStatement","compileDoStatement","compileEmptyStatement","compileExpressionStatement","compileForStatement","compileIfStatement","compileReturnStatement","compileSwitchStatement","compileThrowStatement","compileTryStatement","compileVoidStatement","compileWhileStatement","addDebugLocation","numStatements","Nop","A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement","A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement","condExpr","makeIsTrueish","terminated","block","repeatLabel","alwaysTrue","condPre","incrExpr","bodyStatement","bodyExpr","usesContinue","breakBlock","repeatBlock","GENERIC_CONTEXT","condExprPrecomp","ifTrueFlow","ifTrueExpr","ifFalseExpr","ifFalseFlow","numCases","context","tempLocal","tempLocalIndex","breaks","breakIndex","defaultIndex","currentBlock","alwaysReturns","alwaysReturnsWrapped","alwaysThrows","alwaysAllocates","isLast","nextLabel","count","compileAbort","isKnownGlobal","numDeclarations","initializers","isInlined","_const_declarations_must_be_initialized","compileAssignmentWithValue","compileInlineConstant","contextualType","retainType","mask","conversionKind","wrapMode","compileAssertionExpression","compileBinaryExpression","compileCallExpression","compileCommaExpression","compileElementAccessExpression","compileFunctionExpression","compileIdentifierExpression","compileInstanceOfExpression","compileLiteralExpression","compileNewExpression","compileParenthesizedExpression","compilePropertyAccessExpression","compileTernaryExpression","compileUnaryPostfixExpression","compileUnaryPrefixExpression","convertExpression","ensureSmallIntegerWrap","Conversion_from_type_0_to_1_requires_an_explicit_cast","PromoteF32","DemoteF64","TruncF32ToI64","TruncF32ToI32","TruncF32ToU64","TruncF32ToU32","TruncF64ToI64","TruncF64ToI32","TruncF64ToU64","TruncF64ToU32","ConvertI64ToF32","ConvertU64ToF32","ConvertI32ToF32","ConvertU32ToF32","ConvertI64ToF64","ConvertU64ToF64","ConvertI32ToF64","ConvertU32ToF64","WrapI64","ExtendI32","ExtendU32","leftExpr","leftType","rightExpr","rightType","commonType","compound","compileBinaryOverload","Operator_0_cannot_be_applied_to_types_1_and_2","compileAssignment","AddI64","AddF32","AddF64","SubI32","SubI64","SubF32","SubF64","MulI64","MulF32","MulF64","makeCallDirect","DivI32","DivI64","DivU64","DivF32","DivF64","RemI64","RemU64","intType","ShlI64","The_0_operator_cannot_be_applied_to_type_1","ShrI64","ShrU64","AndI64","OrI32","OrI64","XorI32","XorI64","compileUnaryOverload","operatorInstance","valueExpr","argumentExpressions","thisArg","compileCallDirect","valueExpression","resolveExpression","Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property","currentElementExpression","isUnchecked","indexedSet","Index_signature_in_type_0_only_permits_reading","Index_signature_is_missing_in_type_0","valueWithCorrectType","tee","thisExpression","currentThisExpression","thisExpr","setterInstance","getterInstance","nativeReturnType","indexedGet","elementExpr","tempLocalTarget","tempLocalElement","indexArg","compileCallExpressionBuiltin","Type_0_is_not_generic","inferredTypes","numTypeParameters","numParameterTypes","numArguments","argumentExprs","typeNode","argumentExpression","inferredType","concreteType","resolvedTypeArguments","Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures","compileGetter","compileCallIndirect","typeArgumentNodes","resolveTypeArguments","compileCall","checkCallSignature","hasThis","minimum","Expected_at_least_0_arguments_but_got_1","inline","includes","compileCallInlineUnchecked","Function_0_cannot_be_inlined_into_itself","numArgumentsInclThis","previousFlow","thisLocal","paramExpr","argumentLocal","original","originalSignature","originalName","originalParameterTypes","originalParameterDeclarations","commonReturnType","commonThisType","isInstance","minArguments","minOperands","maxArguments","maxOperands","numOptional","forwardedOperands","operandIndex","trampolineSignature","trampolineName","ofN","Optional_parameter_must_have_an_initializer","ensureArgcVar","numOperands","isCallImport","parameterNodes","allOptionalsAreConstant","makeCallIndirect","numExpressions","exprs","resolveElementAccess","retainConstantType","scopedThis","_this_cannot_be_referenced_in_current_location","superType","_super_can_only_be_referenced_in_a_derived_class","localType","A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums","implicitNegate","compileArrayLiteral","floatValue","intValue","i64_sub","i64_is_i8","i64_is_u8","i64_is_i16","i64_is_u16","i64_is_i32","i64_is_u32","i64_is_bool","i64_is_f32","i64_to_f32","i64_is_f64","i64_to_f64","compileStringLiteral","compileObjectLiteral","ensureStaticString","stringValue","stringSegment","headerSize","totalSize","buf","writeI32","ensureGCHook","writeI16","stringOffset","ensureStaticArray","elementType","byteLength","usizeTypeSize","bufferInstance","bufferHeaderSize","bufferTotalSize","clz","writeI8","writeI64","writeF32","writeF64","bufferOffset","arrayInstance","arrayHeaderSize","arrayOffset","isConst","compiledValues","constantValues","nativeElementType","isStatic","arrayType","nativeArrayType","Constructor_of_class_0_must_not_require_any_arguments","Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration","Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration","hasErrors","Property_0_does_not_exist_on_type_1","compileAllocate","Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature","classInstance","currentClassInstance","makeAllocate","propertyAccess","resolvePropertyAccess","Cannot_access_method_0_without_calling_it_as_it_requires_this_to_be_set","ifThenFlow","ifThenExpr","ifThenType","ifElseFlow","ifElseExpr","ifElseType","getValue","calcValue","setValue","NegF32","NegF64","makeIsFalseish","ExtendI8ToI32","ExtendI16ToI32","fieldType","nativeFieldType","fieldDeclaration","ReportMode","reportMode","REPORT","resolveSignature","numTypeArguments","paramType","instanceKey","placeholderType","parameterTypeNodes","parameterTypeNode","REST","returnTypeNode","parameterCount","argumentCount","Expected_0_type_arguments_but_got_1","contextualFunction","targetExpression","propertyName","elementAccess","explicitLocal","functionTarget","classTypeParameters","numClassTypeParameters","numFunctionTypeArguments","signatureNode","functionTypeParameters","signatureParameters","signatureParameterCount","parameterDeclaration","resolveFunctionPartially","partialKey","partialPrototype","expectedTypeArguments","actualTypeArguments","baseClass","baseClassType","Class_0_is_sealed_and_cannot_be_extended","Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa","inheritedMember","constructorPartial","baseField","fieldInstance","instanceProperty","partialGetterPrototype","partialSetterPrototype","overloadPrototype","operatorPartial","typeParameterNodes","binaryen","emitStackIR","emitAsmjs","Binaryen","__memory_allocate","_malloc","__memory_free","_free","__memory_copy","_memmove","__store","HEAPU8","__load","globalScope","ASC_TARGET","F64","Float64Array","U64","Uint32Array","UnreachableError","captureStackTrace","stack","AssertionError","defineProperties","writable","Math","fround","EPSILON","MIN_NORMAL_VALUE","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","POSITIVE_INFINITY","Infinity","NEGATIVE_INFINITY","NaN","clz32","abs","floor","trunc","round","sqrt","x","y","sign","isTrueish","radix","parseInt","undefined","fromCodePoint","Number","isInteger","isArray","signbit","Boolean","HEAP","HEAP_OFFSET","oldHeap","copy","dest","src","copyWithin","F32","Float32Array","I32","Int32Array","f32_as_i32","i32_as_f32","f64_as_i64","i64_as_f64","Long","ZERO","ONE","lo","hi","fromBits","low","high","sub","mul","i64_div","div","i64_div_u","toUnsigned","toSigned","i64_rem","mod","i64_rem_u","and","or","i64_xor","xor","shl","i64_shr","shr","shru","not","i64_eq","eq","ne","fromInt","minSafeF32","fromNumber","maxSafeF32","gte","lte","minSafeF64","maxSafeF64","toNumber","i64_to_string","unsigned","wasm","WebAssembly","Instance","isLong","obj","__isLong__","INT_CACHE","UINT_CACHE","cachedObj","cache","isNaN","UZERO","TWO_PWR_64_DBL","MAX_UNSIGNED_VALUE","TWO_PWR_63_DBL","neg","TWO_PWR_32_DBL","lowBits","highBits","pow_dbl","pow","fromString","RangeError","indexOf","radixToPower","power","fromValue","TWO_PWR_16_DBL","TWO_PWR_24","UONE","NEG_ONE","LongPrototype","toInt","isZero","isNegative","radixLong","rem1","rem","remDiv","digits","getHighBits","getHighBitsUnsigned","getLowBits","getLowBitsUnsigned","getNumBitsAbs","bit","eqz","isPositive","isOdd","isEven","equals","notEquals","neq","lessThan","comp","lt","lessThanOrEqual","le","greaterThan","gt","greaterThanOrEqual","ge","compare","thisNeg","otherNeg","negate","addend","a48","a32","a16","a00","b48","b32","b16","c48","c32","c16","c00","subtract","subtrahend","multiply","multiplier","get_high","b00","divide","divisor","approx","res","div_u","div_s","log2","log","LN2","delta","approxRes","approxRem","modulo","rem_u","rem_s","shiftLeft","numBits","shiftRight","shiftRightUnsigned","shr_u","toBytes","toBytesLE","toBytesBE","fromBytes","fromBytesLE","fromBytesBE","compiler","evaluateConstantType","SWALLOW","expr_1","ClzI64","CtzI64","PopcntI64","RotlI32","RotlI64","RotrI32","RotrI64","AbsF32","AbsF64","tempLocal0","tempLocal1","MaxF32","MaxF64","MinF32","MinF64","CeilF32","CeilF64","FloorF32","FloorF64","CopysignF32","CopysignF64","NearestF32","NearestF64","ReinterpretF32","ReinterpretF64","ReinterpretI32","ReinterpretI64","SqrtF32","SqrtF64","TruncF32","TruncF64","evaluateConstantOffset","alignLog2","Type_0_has_no_property_1","CurrentMemory","GrowMemory","abort","operandExprs","signatureParts","nativeParamTypes","operandType","User_defined_0","expr_2","deferASM","deferASMCall","typeArgument","valueType","stringType","messageArg","filenameArg","existingIndex","gcPrototype","gcInstance","VIRTUAL","nativeSizeSize","baseInstance","funcName","allocateInstance","CharCode","lookupInUnicodeMap","unicodeIdentifierStart","isUnicodeIdentifierStart","unicodeIdentifierPart","isUnicodeIdentifierPart","mid","separator","ipos","dirname","origin","indentX1","indentX2","indentX4","indent","readI32","readI64","readI8","readI16","readF32","readF64","valueI64","decompiler_1","definitions_1","formatDiagnostic","parser_1","parseFile","parser","Parser","nextFile","nextDiagnostic","isInfo","isWarning","isError","createOptions","setTarget","setNoTreeShaking","setNoAssert","setImportMemory","setImportTable","setSourceMap","setMemoryBase","setGlobalAlias","FEATURE_SIGN_EXTENSION","FEATURE_MUTABLE_GLOBAL","enableFeature","setOptimizeLevelHints","optimizeLevel","shrinkLevel","finishParsing","compileProgram","decompileModule","decompiler","Decompiler","decompile","buildIDL","IDLBuilder","build","buildTSD","TSDBuilder","functionId","decompileFunction","nativeTypeToType","decompileExpression","nested","string","Loop","Switch","CallIndirect","SetGlobal","Store","Drop","Host","AtomicCmpxchg","AtomicRMW","AtomicWait","AtomicWake","ExportsWalker","includePrivate","todo","walk","visitElement","visitGlobal","visitEnum","visitFunctionInstances","visitClassInstances","visitField","prop","hasCompiledMember","visitNamespace","visitFunction","visitClass","indentLevel","typeToString","members_1","members_1_1","visitInterface","numMembers","members_2","members_2_1","backlog","seenlog","donelog","tryParseSignatureIsSignature","parseParametersThis","tn","parseTopLevelStatement","startPos","parseDecorator","skipStatement","exportStart","exportEnd","contextIsAmbient","A_declare_modifier_cannot_be_used_in_an_already_ambient_context","first","parseEnum","parseVariable","parseFunction","parseStatement","parseClassOrInterface","parseNamespace","parseExportImport","parseImport","parseTypeDeclaration","parseExport","_0_modifier_cannot_be_used_here","Decorators_are_not_valid_here","clear","parseType","acceptParenthesized","suppressErrors","isNullableSignature","tryParseSignature","Unexpected_token","innerType","Identifier_expected","nullable","parameter","bracketStart","bracketRange","isSignature","A_rest_parameter_cannot_be_optional","OPTIONAL","param","parseArguments","parseVariableDeclaration","parentFlags","parentDecorators","DEFINITE_ASSIGNMENT","Initializers_are_not_allowed_in_ambient_contexts","parseExpression","A_definite_assignment_assertion_is_not_permitted_in_this_context","parseEnumValue","parseReturn","parseTypeParameters","typeParameter","parseTypeParameter","Type_parameter_list_cannot_be_empty","parseParameters","seenRest","seenOptional","reportedRest","parseParameter","A_rest_parameter_must_be_last_in_a_parameter_list","A_required_parameter_cannot_follow_an_optional_parameter","isRest","isOptional","startRange","accessFlags","A_parameter_property_cannot_be_declared_using_a_rest_parameter","A_rest_parameter_cannot_have_an_initializer","Parameter_cannot_have_question_mark_and_initializer","signatureStart","isSetter","A_set_accessor_must_have_exactly_one_parameter","A_set_accessor_parameter_cannot_have_an_initializer","A_get_accessor_cannot_have_parameters","parseBlockStatement","parseFunctionExpression","isArrow","parseFunctionExpressionCommon","Interface_declaration_cannot_have_implements_clause","parseClassMember","parseClassExpression","staticStart","staticEnd","abstractStart","abstractEnd","readonlyStart","readonlyEnd","setEnd","typeParametersStart","Type_parameters_cannot_appear_on_a_constructor_declaration","An_accessor_cannot_have_type_parameters","Type_annotation_cannot_appear_on_a_constructor_declaration","A_set_accessor_cannot_have_a_return_type_annotation","Method_0_cannot_have_an_implementation_because_it_is_marked_abstract","retMethod","Constructor_implementation_is_missing","Optional_properties_are_not_supported","retField","parseExportMember","asIdentifier","skipFrom","parseImportDeclaration","topLevel","parseBreak","parseContinue","parseDoStatement","parseForStatement","parseIfStatement","A_return_statement_can_only_be_used_within_a_function_body","parseSwitchStatement","parseThrowStatement","parseTryStatement","parseVoidStatement","parseWhileStatement","parseExpressionStatement","elseStatement","case_","parseSwitchCase","_case_or_default_expected","parseExpressionStart","precedence","determinePrecedenceStart","The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access","again","startPos_1","QUOTED","PREFIX","regexpPattern","Expression_expected","tryParseTypeArgumentsBeforeArguments","nextPrecedence","maybeParseCallExpression","determinePrecedence","commaExprs","isRightAssociative","joinPropertyCall","callee","inner","skipBlock","depth","Precedence"],"mappings":"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,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAEtCE,GACJ,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IACpB,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KACxB,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAG1D,SAASH,EAAmB70E,EAAWovB,GACrC,GAAIpvB,EAAOovB,EAAI,GAAI,OAAO,EAM1B,IAJA,IAEI8lD,EAFAxN,EAAK,EACLC,EAAKv4C,EAAIhuB,OAGNsmE,EAAK,EAAIC,GAAI,CAGlB,GAFAuN,EAAMxN,GAAMC,EAAKD,GAAM,EAEnBt4C,EADJ8lD,GAAOA,EAAM,IACGl1E,GAAQA,GAAQovB,EAAI8lD,EAAM,GACxC,OAAO,EAELl1E,EAAOovB,EAAI8lD,GACbvN,EAAKuN,EAELxN,EAAKwN,EAAM,EAGf,OAAO,kFCtWT,IAAMC,EAAS,GAMf,SAAgBroE,EAAcF,GAK5B,IAJA,IAiBIi9C,EAjBA90C,EAAM,EACN5T,EAAMyL,EAAKxL,OAGR2T,EAAM,EAAI5T,GACK,IAApByL,EAAKpL,WAAWuT,IAChBnI,EAAKpL,WAAWuT,EAAM,IAAMogE,GAE5BpgE,GAAO,EAUT,KAPIA,EAAM,GAAK5T,EAAMyL,EAAKxL,UACxBwL,EAAOA,EAAKlL,UAAUqT,EAAK5T,GAC3BA,GAAO4T,EACPA,EAAM,GAIDA,EAAM,EAAI5T,GAAK,CAIpB,GAHA0oD,GAAQ,EAINj9C,EAAKpL,WAAWuT,IAAQogE,GACA,IAAxBvoE,EAAKpL,WAAWuT,EAAM,GACtB,CAGA,IADA80C,EAAQ90C,EAAM,GAAK5T,IAEjB4T,EAAM,EAAI5T,GACVyL,EAAKpL,WAAWuT,EAAM,IAAMogE,EAC5B,CACAvoE,EAAOi9C,EACHj9C,EAAKlL,UAAU,EAAGqT,GAClBnI,EAAKlL,UAAU,EAAGqT,GAAOnI,EAAKlL,UAAUqT,EAAM,GAClD5T,GAAO,EACP,SAKF,IADA0oD,EAAQ90C,EAAM,GAAK5T,IACkB,IAAxByL,EAAKpL,WAAWuT,EAAM,IACjCA,EAAM,EAAI5T,GACc,IAAxByL,EAAKpL,WAAWuT,EAAM,IACtBnI,EAAKpL,WAAWuT,EAAM,IAAMogE,EAC5B,CAGA,IADA,IAAIC,EAAOrgE,IACFqgE,GAAQ,GACf,GAAIxoE,EAAKpL,WAAW4zE,IAASD,EAAW,CAClCpgE,EAAMqgE,GAAQ,GACS,IAAzBxoE,EAAKpL,WAAW4zE,EAAO,IACE,IAAzBxoE,EAAKpL,WAAW4zE,EAAO,KAEvBxoE,EAAOi9C,EACHj9C,EAAKlL,UAAU,EAAG0zE,GAClBxoE,EAAKlL,UAAU,EAAG0zE,GAAQxoE,EAAKlL,UAAUqT,EAAM,GACnD5T,GAAO4T,EAAM,EAAIqgE,EACjBrgE,EAAMqgE,EAAO,GAEf,MAKJ,GAAIA,EAAO,GAAKrgE,EAAM,IACT,GAAPA,GACgB,IAAlBnI,EAAKpL,WAAW,IACE,IAAlBoL,EAAKpL,WAAW,IAChB,CAEAL,GADAyL,EAAOA,EAAKlL,UAAUqT,EAAM,IACjB3T,OACX,WAKR2T,IAEF,OAAO5T,EAAM,EAAIyL,EAAO,IAc1B,SAAgByoE,EAAQx0E,GAEtB,IADA,IAAIkU,EAAMlU,EAAeO,SAChB2T,EAAM,GACb,GAAIlU,EAAeW,WAAWuT,IAAQogE,EACpC,OAAOt0E,EAAea,UAAU,EAAGqT,GAGvC,MAAO,IArGTvZ,EAAAsR,gBAoFAtR,EAAAwR,YAAA,SAA4BnM,EAAwBy0E,GAClD,OAAIz0E,EAAekM,WAAW,QACrBlM,EAEFiM,EACLuoE,EAAQC,GAAUh/B,OAAOkM,aAAa2yB,GAAat0E,IAKvDrF,EAAA65E,yFCxGA,IAAME,EAAW,KACXC,EAAW,OACXC,EAAW,WAGjBj6E,EAAAk6E,OAAA,SAAuBj0E,EAAcmqC,GACnC,KAAOA,GAAS,GACdnqC,EAAGE,KAAK8zE,GACR7pC,GAAS,EAEPA,GAAS,IACXnqC,EAAGE,KAAK6zE,GACR5pC,GAAS,GAEPA,GACFnqC,EAAGE,KAAK4zE,kCCQZ,SAAgBI,EAAQ90C,EAAoBC,GAC1C,OAAOD,EAAOC,GACPD,EAAOC,EAAS,IAAM,EACtBD,EAAOC,EAAS,IAAM,GACtBD,EAAOC,EAAS,IAAM,GAI/B,SAAgB27B,EAASr/D,EAAYyjC,EAAoBC,GACvDD,EAAOC,GAAc1jC,EACrByjC,EAAOC,EAAS,GAAK1jC,IAAU,EAC/ByjC,EAAOC,EAAS,GAAK1jC,IAAU,GAC/ByjC,EAAOC,EAAS,GAAK1jC,IAAU,GAIjC,SAAgBw4E,EAAQ/0C,EAAoBC,GAC1C,IAAI4mC,EAAKiO,EAAQ90C,EAAQC,GACrB6mC,EAAKgO,EAAQ90C,EAAQC,EAAS,GAClC,OAAOrjB,QAAQiqD,EAAIC,oDAzCrBnsE,EAAAq6E,OAAA,SAAuBh1C,EAAoBC,GACzC,OAAOD,EAAOC,IAIhBtlC,EAAA6hE,QAAA,SAAwBjgE,EAAYyjC,EAAoBC,GACtDD,EAAOC,GAAU1jC,GAInB5B,EAAAs6E,QAAA,SAAwBj1C,EAAoBC,GAC1C,OAAOD,EAAOC,GACPD,EAAOC,EAAS,IAAM,GAI/BtlC,EAAAmhE,SAAA,SAAyBv/D,EAAYyjC,EAAoBC,GACvDD,EAAOC,GAAc1jC,EACrByjC,EAAOC,EAAS,GAAK1jC,IAAU,GAIjC5B,EAAAm6E,UAQAn6E,EAAAihE,WAQAjhE,EAAAo6E,UAOAp6E,EAAA8hE,SAAA,SAAyBlgE,EAAYyjC,EAAoBC,GACvD27B,EAAS5xB,QAAQztC,GAAQyjC,EAAQC,GACjC27B,EAAS3xB,SAAS1tC,GAAQyjC,EAAQC,EAAS,IAI7CtlC,EAAAu6E,QAAA,SAAwBl1C,EAAoBC,GAC1C,OAAOsmC,WAAWuO,EAAQ90C,EAAQC,KAIpCtlC,EAAA+hE,SAAA,SAAyBngE,EAAYyjC,EAAoBC,GACvD27B,EAAS0K,WAAW/pE,GAAQyjC,EAAQC,IAItCtlC,EAAAw6E,QAAA,SAAwBn1C,EAAoBC,GAC1C,OAAOwmC,WAAWsO,EAAQ/0C,EAAQC,KAIpCtlC,EAAAgiE,SAAA,SAAyBpgE,EAAYyjC,EAAoBC,GACvD,IAAIm1C,EAAW5O,WAAWjqE,GAC1Bq/D,EAAS5xB,QAAQorC,GAAWp1C,EAAQC,GACpC27B,EAAS3xB,SAASmrC,GAAWp1C,EAAQC,EAAS,mFCnEhD,IAAAzK,EAAAp6B,EAAA,GAOAi6E,EAAAj6E,EAAA,IAIAk6E,EAAAl6E,EAAA,IAKA8b,EAAA9b,EAAA,GAyCoCT,EAAA46E,iBAtClCr+D,EAAAlW,wBAOF,IAAAw0E,EAAAp6E,EAAA,IASAT,EAAA86E,UAAA,SAA0Bp1E,EAAc0L,EAAc8W,EACpD6yD,GAIA,YALoD,IAAA7yD,OAAA,QACpD,IAAA6yD,MAAA,MAEKA,IAAQA,EAAS,IAAIF,EAAAG,QAC1BD,EAAOD,UAAUp1E,EAAM0L,EAAM8W,GACtB6yD,GAIT/6E,EAAAi7E,SAAA,SAAyBF,GACvB,OAAOA,EAAOE,YAIhBj7E,EAAAk7E,eAAA,SAA+BH,GAC7B,IAAI1uD,EAAU0uD,EAAO1uD,QACrB,OAAOA,EAAQhN,kBAAoBgN,EAAQ7lB,YAAYZ,OACnDymB,EAAQ7lB,YAAY6lB,EAAQhN,qBAC5B,MAONrf,EAAAm7E,OAAA,SAAuB12E,GACrB,OAAOA,EAAQd,UAAY4Y,EAAAjZ,mBAAmBM,MAIhD5D,EAAAo7E,UAAA,SAA0B32E,GACxB,OAAOA,EAAQd,UAAY4Y,EAAAjZ,mBAAmBO,SAIhD7D,EAAAq7E,QAAA,SAAwB52E,GACtB,OAAOA,EAAQd,UAAY4Y,EAAAjZ,mBAAmBQ,OAIhD9D,EAAAs7E,cAAA,WACE,OAAO,IAAIzgD,EAAAyuB,SAIbtpD,EAAAu7E,UAAA,SAA0Bv6D,EAAkB2Q,GAC1C3Q,EAAQ2Q,OAASA,GAInB3xB,EAAAw7E,iBAAA,SAAiCx6D,EAAkBmB,GACjDnB,EAAQmB,cAAgBA,GAI1BniB,EAAAy7E,YAAA,SAA4Bz6D,EAAkBoB,GAC5CpB,EAAQoB,SAAWA,GAIrBpiB,EAAA07E,gBAAA,SAAgC16D,EAAkBwoC,GAChDxoC,EAAQwoC,aAAeA,GAIzBxpD,EAAA27E,eAAA,SAA+B36D,EAAkByoC,GAC/CzoC,EAAQyoC,YAAcA,GAIxBzpD,EAAA47E,aAAA,SAA6B56D,EAAkBqP,GAC7CrP,EAAQqP,UAAYA,GAItBrwB,EAAA67E,cAAA,SAA8B76D,EAAkBqB,GAC9CrB,EAAQqB,WAAaA,GAIvBriB,EAAA87E,eAAA,SAA+B96D,EAAkB9f,EAAc0T,GAC7D,IAAI0Q,EAAgBtE,EAAQsE,cACvBA,IAAetE,EAAQsE,cAAgBA,EAAgB,IAAInG,KAChEmG,EAAc9c,IAAItH,EAAM0T,IAIb5U,EAAA+7E,uBAAsB,EAEtB/7E,EAAAg8E,uBAAsB,EAGnCh8E,EAAAi8E,cAAA,SAA8Bj7D,EAAkB2oC,GAC9C3oC,EAAQ0oC,UAAYC,GAItB3pD,EAAAk8E,sBAAA,SAAsCl7D,EAAkBm7D,EAAoBC,GAC1Ep7D,EAAQsB,kBAAoB65D,EAC5Bn7D,EAAQuB,gBAAkB65D,GAI5Bp8E,EAAAq8E,cAAA,SAA8BtB,GAC5B,OAAOA,EAAO3xB,UAIhBppD,EAAAs8E,eAAA,SAA+BjwD,EAAkBrL,GAC/C,YAD+C,IAAAA,MAAA,MACxC,IAAI6Z,EAAAovB,SAAS59B,EAASrL,GAASiqC,WAIxCjrD,EAAAu8E,gBAAA,SAAgCt8E,GAC9B,IAAIu8E,EAAa,IAAI9B,EAAA+B,WAErB,OADAD,EAAWE,UAAUz8E,GACdu8E,EAAWpzB,UAIpBppD,EAAA28E,SAAA,SAAyBtwD,GACvB,OAAOsuD,EAAAiC,WAAWC,MAAMxwD,IAI1BrsB,EAAA88E,SAAA,SAAyBzwD,GACvB,OAAOsuD,EAAAoC,WAAWF,MAAMxwD,IAI1B,IAAAtlB,EAAAtG,EAAA,GAAST,EAAAoD,eAAA2D,EAAA3D,8FCrKT,IAAAsZ,EAAAjc,EAAA,GAwDAg8E,EAAA,WAWE,SAAAA,IAHAn8E,KAAAoF,QACApF,KAAA08E,WAAkB,EAmyBpB,OA1yBSP,EAAAC,UAAP,SAAiBz8E,GACf,IAAIu8E,EAAa,IAAIC,EAErB,OADAD,EAAWE,UAAUz8E,GACdu8E,EAAWpzB,UASpBqzB,EAAAl6E,UAAAm6E,UAAA,SAAUz8E,GACR,MAAM,IAAIylB,MAAM,oBAGlB+2D,EAAAl6E,UAAA06E,kBAAA,SAAkBltC,GAChB,IAAI7uC,EAAOwb,EAAA27B,gBAAgBtI,IAAS,IAAMzvC,KAAK08E,WAAW73E,SAAS,IAC/DoO,EAAOmJ,EAAA07B,gBAAgBrI,GAC3BzvC,KAAK6F,KAAK,aACV7F,KAAK6F,KAAKjF,GACVZ,KAAK6F,KAAK,KACT,IAAK,IAAIxF,EAAW,EAAGuK,EAAWwR,EAAA67B,sBAAsBxI,GAAOpvC,EAAIuK,IAAKvK,EACnEA,EAAI,GAAGL,KAAK6F,KAAK,MACrB7F,KAAK6F,KAAK,KACV7F,KAAK6F,KAAKxF,EAAEwE,SAAS,KACrB7E,KAAK6F,KAAK,MACV7F,KAAK6F,KAAK+2E,EAAiBxgE,EAAA+7B,qBAAqB1I,EAAMpvC,KAExDL,KAAK6F,KAAK,OACV7F,KAAK6F,KAAK+2E,EAAiBxgE,EAAAi8B,sBAAsB5I,KACjDzvC,KAAK6F,KAAK,KACNuW,EAAAsY,gBAAgBzhB,IAASmJ,EAAAuY,aAAa4E,OACxCv5B,KAAK6F,KAAK,OAEZ7F,KAAK68E,oBAAoB5pE,GACrBmJ,EAAAsY,gBAAgBzhB,IAASmJ,EAAAuY,aAAa4E,OACxCv5B,KAAK6F,KAAK,WAEV7F,KAAK08E,YAGTP,EAAAl6E,UAAA46E,oBAAA,SAAoBzyE,GAClB,IAGI0yE,EACAC,EACA18E,EAAUuK,EALVglB,EAAKxT,EAAAsY,gBAAgBtqB,GACrB9B,EAAO8T,EAAAyc,kBAAkBzuB,GAM7B,OAAQwlB,GACN,KAAKxT,EAAAuY,aAAa4E,MAOhB,IANqC,OAAhCwjD,EAAS3gE,EAAAod,aAAapvB,MACzBpK,KAAK6F,KAAKk3E,GACV/8E,KAAK6F,KAAK,OAEZ7F,KAAK6F,KAAK,OACV+E,EAAIwR,EAAAqd,mBAAmBrvB,GAClB/J,EAAI,EAAGA,EAAIuK,IAAKvK,EACnBL,KAAK68E,oBAAoBzgE,EAAAud,cAAcvvB,EAAM/J,IAG/C,YADAL,KAAK6F,KAAK,OAGZ,KAAKuW,EAAAuY,aAAaiF,GAiBhB,YAhBQ,GAAJtxB,GACFtI,KAAK6F,KAAK,QACV7F,KAAK68E,oBAAoBzgE,EAAA65B,eAAe7rC,IACxCpK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAAyd,UAAUzvB,KAC/B0yE,EAAS1gE,EAAA0d,WAAW1vB,MACtBpK,KAAK6F,KAAK,UACV7F,KAAK68E,oBAAoBC,MAG3B98E,KAAK68E,oBAAoBzgE,EAAA65B,eAAe7rC,IACxCpK,KAAK6F,KAAK,OACV7F,KAAK68E,oBAAoBzgE,EAAAyd,UAAUzvB,IACnCpK,KAAK6F,KAAK,OACV7F,KAAK68E,oBAAoBzgE,EAAA0d,WAAW1vB,MAIxC,KAAKgS,EAAAuY,aAAaqoD,KACoB,OAA/BD,EAAS3gE,EAAAi6B,YAAYjsC,MACxBpK,KAAK6F,KAAKk3E,GACV/8E,KAAK6F,KAAK,OAEZ7F,KAAK6F,KAAK,OACV7F,KAAK68E,oBAAoBzgE,EAAAm6B,YAAYnsC,IACrCpK,KAAK6F,KAAK,gBAEZ,KAAKuW,EAAAuY,aAAaimB,MAahB,OAZIkiC,EAAS1gE,EAAAu6B,kBAAkBvsC,MAC7BpK,KAAK6F,KAAK,QACV7F,KAAK68E,oBAAoBC,GACzB98E,KAAK6F,KAAK,YAEyB,OAAhCk3E,EAAS3gE,EAAAq6B,aAAarsC,KACzBpK,KAAK6F,KAAK,UACV7F,KAAK6F,KAAKk3E,GACV/8E,KAAK6F,KAAK,QAEV7F,KAAK6F,KAAK,aAId,KAAKuW,EAAAuY,aAAasoD,OAClB,KAAK7gE,EAAAuY,aAAauF,KAClB,KAAK9d,EAAAuY,aAAauoD,aAChB,MAAM,IAAI93D,MAAM,mBAElB,KAAKhJ,EAAAuY,aAAaC,SAGhB,OAFA50B,KAAK6F,KAAK,UACV7F,KAAK6F,KAAKuW,EAAAyY,iBAAiBzqB,GAAMvF,SAAS,KAG5C,KAAKuX,EAAAuY,aAAaI,SAKhB,OAJA/0B,KAAK6F,KAAK,KACV7F,KAAK6F,KAAKuW,EAAA24B,iBAAiB3qC,GAAMvF,SAAS,KAC1C7E,KAAK6F,KAAK,YACV7F,KAAK68E,oBAAoBzgE,EAAA6Y,iBAAiB7qB,IAG5C,KAAKgS,EAAAuY,aAAaO,UAClB,KAAK9Y,EAAAuY,aAAawoD,UAChB,MAAM,IAAI/3D,MAAM,mBAElB,KAAKhJ,EAAAuY,aAAawE,KAQhB,OAPAn5B,KAAK6F,KAAK,SACV7F,KAAK6F,KAAK+2E,EAAiBt0E,IAC3BtI,KAAK6F,KAAK,MACV7F,KAAK6F,KAAKuW,EAAAg5B,cAAchrC,GAAMvF,SAAS,KACvC7E,KAAK6F,KAAK,OACV7F,KAAK68E,oBAAoBzgE,EAAAi5B,WAAWjrC,SACpCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAuY,aAAayoD,MAUhB,OATAp9E,KAAK6F,KAAK,UACV7F,KAAK6F,KAAK+2E,EAAiBt0E,IAC3BtI,KAAK6F,KAAK,MACV7F,KAAK6F,KAAKuW,EAAAo5B,eAAeprC,GAAMvF,SAAS,KACxC7E,KAAK6F,KAAK,OACV7F,KAAK68E,oBAAoBzgE,EAAAs5B,YAAYtrC,IACrCpK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAAw5B,cAAcxrC,SACvCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAuY,aAAa6C,MAChB,OAAQlvB,GACN,OAEE,YADAtI,KAAK6F,KAAKuW,EAAAqb,iBAAiBrtB,GAAMvF,SAAS,KAG5C,OASE,YARA7E,KAAK6F,KACHmoE,cACErsD,QACEvF,EAAA0c,oBAAoB1uB,GACpBgS,EAAA04B,qBAAqB1qC,MAM7B,OAEE,YADApK,KAAK6F,KAAKuW,EAAA2c,iBAAiB3uB,GAAMvF,SAAS,KAG5C,OAEE,YADA7E,KAAK6F,KAAKuW,EAAA4c,iBAAiB5uB,GAAMvF,SAAS,KAI9C,MAEF,KAAKuX,EAAAuY,aAAa0D,MAChB,OAAQjc,EAAAkc,WAAWluB,IACjB,KAAKgS,EAAAmc,QAAQG,OAIX,OAHA14B,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,SACvCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQI,OAIX,OAHA34B,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,SACvCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQK,UAIX,OAHA54B,KAAK6F,KAAK,gBACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,SACvCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQqrC,OACb,KAAKxnD,EAAAmc,QAAQsrC,OAGX,OAFA7jE,KAAK6F,KAAK,UACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,IAGzC,KAAKgS,EAAAmc,QAAQo9C,OAIX,OAHA31E,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,SACvCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQ49C,QAIX,OAHAn2E,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,SACvCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQ89C,SAIX,OAHAr2E,KAAK6F,KAAK,eACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,SACvCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQ0+C,SAIX,OAHAj3E,KAAK6F,KAAK,eACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,SACvCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQk+C,WAIX,OAHAz2E,KAAK6F,KAAK,iBACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,SACvCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQw+C,QAIX,OAHA/2E,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,SACvCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQC,OACb,KAAKpc,EAAAmc,QAAQE,OAGX,OAFAz4B,KAAK6F,KAAK,UACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,IAGzC,KAAKgS,EAAAmc,QAAQ68C,OAIX,OAHAp1E,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,SACvCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQ88C,OAIX,OAHAr1E,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,SACvCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQ+8C,UAIX,OAHAt1E,KAAK6F,KAAK,gBACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,SACvCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQq9C,OAIX,OAHA51E,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,SACvCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQ69C,QAIX,OAHAp2E,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,SACvCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQ+9C,SAIX,OAHAt2E,KAAK6F,KAAK,eACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,SACvCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQ2+C,SAIX,OAHAl3E,KAAK6F,KAAK,eACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,SACvCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQm+C,WAIX,OAHA12E,KAAK6F,KAAK,iBACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,SACvCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQy+C,QAIX,OAHAh3E,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,SACvCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQw+B,UAGX,OAFA/2D,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,IAGzC,KAAKgS,EAAAmc,QAAQy+B,UAGX,OAFAh3D,KAAK6F,KAAK,mBACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,IAGzC,KAAKgS,EAAAmc,QAAQu+B,QAKb,KAAK16C,EAAAmc,QAAQw9B,cAGX,OAFA/1D,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,IAGzC,KAAKgS,EAAAmc,QAAQu9B,cAGX,OAFA91D,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,IAGzC,KAAKgS,EAAAmc,QAAQ09B,cAGX,OAFAj2D,KAAK6F,KAAK,mBACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,IAGzC,KAAKgS,EAAAmc,QAAQy9B,cAGX,OAFAh2D,KAAK6F,KAAK,mBACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,IAGzC,KAAKgS,EAAAmc,QAAQ49B,cAGX,OAFAn2D,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,IAGzC,KAAKgS,EAAAmc,QAAQ29B,cAGX,OAFAl2D,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,IAGzC,KAAKgS,EAAAmc,QAAQ89B,cAGX,OAFAr2D,KAAK6F,KAAK,mBACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,IAGzC,KAAKgS,EAAAmc,QAAQ69B,cAGX,OAFAp2D,KAAK6F,KAAK,mBACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,IAGzC,KAAKgS,EAAAmc,QAAQo+C,eAIX,OAHA32E,KAAK6F,KAAK,yBACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,SACvCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQq+C,eAIX,OAHA52E,KAAK6F,KAAK,yBACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,SACvCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQi+B,gBAGX,OAFAx2D,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,IAGzC,KAAKgS,EAAAmc,QAAQq+B,gBAGX,OAFA52D,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,IAGzC,KAAKgS,EAAAmc,QAAQk+B,gBAGX,OAFAz2D,KAAK6F,KAAK,mBACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,IAGzC,KAAKgS,EAAAmc,QAAQs+B,gBAGX,OAFA72D,KAAK6F,KAAK,mBACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,IAGzC,KAAKgS,EAAAmc,QAAQ+9B,gBAGX,OAFAt2D,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,IAGzC,KAAKgS,EAAAmc,QAAQm+B,gBAGX,OAFA12D,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,IAGzC,KAAKgS,EAAAmc,QAAQg+B,gBAGX,OAFAv2D,KAAK6F,KAAK,mBACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,IAGzC,KAAKgS,EAAAmc,QAAQo+B,gBAGX,OAFA32D,KAAK6F,KAAK,mBACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,IAGzC,KAAKgS,EAAAmc,QAAQq9B,WAGX,OAFA51D,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,IAGzC,KAAKgS,EAAAmc,QAAQs9B,UAGX,OAFA71D,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,IAGzC,KAAKgS,EAAAmc,QAAQs+C,eAIX,OAHA72E,KAAK6F,KAAK,yBACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,SACvCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQu+C,eAIX,OAHA92E,KAAK6F,KAAK,yBACV7F,KAAK68E,oBAAoBzgE,EAAA+4B,cAAc/qC,SACvCpK,KAAK6F,KAAK,KAId,MAEF,KAAKuW,EAAAuY,aAAaQ,OAChB,OAAQ/Y,EAAAgZ,YAAYhrB,IAClB,KAAKgS,EAAAiZ,SAAS05B,OACd,KAAK3yC,EAAAiZ,SAASqiC,OACd,KAAKt7C,EAAAiZ,SAASsiC,OACd,KAAKv7C,EAAAiZ,SAASuiC,OAIZ,OAHA53D,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,YACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAASwiC,OACd,KAAKz7C,EAAAiZ,SAASyiC,OACd,KAAK17C,EAAAiZ,SAAS0iC,OACd,KAAK37C,EAAAiZ,SAAS2iC,OAIZ,OAHAh4D,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,YACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAASiC,OACd,KAAKlb,EAAAiZ,SAAS4iC,OACd,KAAK77C,EAAAiZ,SAAS6iC,OACd,KAAK97C,EAAAiZ,SAAS8iC,OAIZ,OAHAn4D,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,YACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAASgjC,OACd,KAAKj8C,EAAAiZ,SAASijC,OACd,KAAKl8C,EAAAiZ,SAASmjC,OACd,KAAKp8C,EAAAiZ,SAASojC,OAIZ,OAHAz4D,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,YACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAAS6C,OAMZ,OALAl4B,KAAK6F,KAAK,eACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,YACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,SACxCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAiZ,SAAS8C,OACd,KAAK/b,EAAAiZ,SAASqjC,OAIZ,OAHA14D,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,YACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAAS+C,OAMZ,OALAp4B,KAAK6F,KAAK,eACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,YACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,SACxCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAiZ,SAASsC,OACd,KAAKvb,EAAAiZ,SAAS4jC,OAIZ,OAHAj5D,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,YACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAAS6jC,MACd,KAAK98C,EAAAiZ,SAAS8jC,MAIZ,OAHAn5D,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,YACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAAS+jC,OACd,KAAKh9C,EAAAiZ,SAASgkC,OAIZ,OAHAr5D,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,YACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAASwC,OACd,KAAKzb,EAAAiZ,SAASwjC,OAIZ,OAHA74D,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAAS4C,OACd,KAAK7b,EAAAiZ,SAAS2jC,OAIZ,OAHAh5D,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAAS2C,OACd,KAAK5b,EAAAiZ,SAAS0jC,OAIZ,OAHA/4D,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAASkgD,QAMZ,OALAv1E,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,SACxCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAiZ,SAASogD,QAMZ,OALAz1E,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,SACxCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAiZ,SAASC,MACd,KAAKlZ,EAAAiZ,SAASE,MACd,KAAKnZ,EAAAiZ,SAASG,MACd,KAAKpZ,EAAAiZ,SAASI,MAIZ,OAHAz1B,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAASK,MACd,KAAKtZ,EAAAiZ,SAASM,MACd,KAAKvZ,EAAAiZ,SAASO,MACd,KAAKxZ,EAAAiZ,SAASQ,MAIZ,OAHA71B,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAASS,MACd,KAAK1Z,EAAAiZ,SAASW,MACd,KAAK5Z,EAAAiZ,SAASa,MACd,KAAK9Z,EAAAiZ,SAASc,MAIZ,OAHAn2B,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,YACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAASU,MAKZ,OAJA/1B,KAAK6F,KAAK,SACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,iBACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAASe,MACd,KAAKha,EAAAiZ,SAASiB,MACd,KAAKla,EAAAiZ,SAASmB,MACd,KAAKpa,EAAAiZ,SAASoB,MAIZ,OAHAz2B,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAASgB,MAKZ,OAJAr2B,KAAK6F,KAAK,SACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,kBACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAASqB,MACd,KAAKta,EAAAiZ,SAASuB,MACd,KAAKxa,EAAAiZ,SAASyB,MACd,KAAK1a,EAAAiZ,SAAS0B,MAIZ,OAHA/2B,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,YACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAASsB,MAKZ,OAJA32B,KAAK6F,KAAK,SACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,iBACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAAS2B,MACd,KAAK5a,EAAAiZ,SAAS6B,MACd,KAAK9a,EAAAiZ,SAAS+B,MACd,KAAKhb,EAAAiZ,SAASgC,MAIZ,OAHAr3B,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAAS4B,MAKZ,OAJAj3B,KAAK6F,KAAK,SACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,kBACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAASkjC,OAKZ,OAJAv4D,KAAK6F,KAAK,SACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,iBACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAASsjC,OAKZ,OAJA34D,KAAK6F,KAAK,SACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,iBACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAASmgD,QAMZ,OALAx1E,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,SACxCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAiZ,SAASqgD,QAMZ,OALA11E,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,SACxCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAiZ,SAASY,MAKZ,OAJAj2B,KAAK6F,KAAK,SACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,iBACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAASkB,MAKZ,OAJAv2B,KAAK6F,KAAK,SACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,kBACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAASwB,MAKZ,OAJA72B,KAAK6F,KAAK,SACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,iBACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAAS8B,MAKZ,OAJAn3B,KAAK6F,KAAK,SACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,kBACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,IAG1C,KAAKgS,EAAAiZ,SAASkhD,YAMZ,OALAv2E,KAAK6F,KAAK,kBACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,SACxCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAiZ,SAAS4gD,OAMZ,OALAj2E,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,SACxCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAiZ,SAAS0gD,OAMZ,OALA/1E,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,SACxCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAiZ,SAASmhD,YAMZ,OALAx2E,KAAK6F,KAAK,kBACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,SACxCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAiZ,SAAS6gD,OAMZ,OALAl2E,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,SACxCpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAiZ,SAAS2gD,OAMZ,OALAh2E,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcntB,IACvCpK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAettB,SACxCpK,KAAK6F,KAAK,KAId,OAEF,KAAKuW,EAAAuY,aAAaoF,OAUhB,OATA/5B,KAAK6F,KAAK,WACV7F,KAAK6F,KAAK+2E,EAAiBt0E,IAC3BtI,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAA4d,cAAc5vB,IACvCpK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAA6d,cAAc7vB,IACvCpK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAA26B,mBAAmB3sC,SAC5CpK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAuY,aAAa0oD,KAGhB,OAFAr9E,KAAK68E,oBAAoBzgE,EAAA66B,aAAa7sC,SACtCpK,KAAK6F,KAAK,OAGZ,KAAKuW,EAAAuY,aAAagmB,OAQhB,aAPImiC,EAAS1gE,EAAA+6B,eAAe/sC,KAC1BpK,KAAK6F,KAAK,WACV7F,KAAK68E,oBAAoBC,GACzB98E,KAAK6F,KAAK,QAEV7F,KAAK6F,KAAK,cAId,KAAKuW,EAAAuY,aAAa2oD,KAChB,OAAQlhE,EAAAk7B,UAAUltC,IAChB,KAAKgS,EAAAgoB,OAAOkzC,cAEV,YADAt3E,KAAK6F,KAAK,iBAGZ,KAAKuW,EAAAgoB,OAAOmzC,WAIV,OAHAv3E,KAAK6F,KAAK,gBACV7F,KAAK68E,oBAAoBzgE,EAAAs7B,eAAettC,EAAM,SAC9CpK,KAAK6F,KAAK,KAId,MAEF,KAAKuW,EAAAuY,aAAa68B,IAEhB,YADAxxD,KAAK6F,KAAK,OAGZ,KAAKuW,EAAAuY,aAAayF,YAEhB,YADAp6B,KAAK6F,KAAK,iBAGZ,KAAKuW,EAAAuY,aAAa4oD,cAClB,KAAKnhE,EAAAuY,aAAa6oD,UAClB,KAAKphE,EAAAuY,aAAa8oD,WAClB,KAAKrhE,EAAAuY,aAAa+oD,YAEpB,MAAM,IAAIt4D,MAAM,oBAGV+2D,EAAAl6E,UAAA4D,KAAR,SAAaT,GAEXpF,KAAKoF,KAAKS,KAAKT,IAGjB+2E,EAAAl6E,UAAA6mD,OAAA,WACE,IAAI9W,EAAMhyC,KAAKoF,KAAKU,KAAK,IAEzB,OADA9F,KAAKoF,QACE4sC,GAEXmqC,EA5yBA,GA8yBA,SAASS,EAAiBt0E,GACxB,OAAQA,GACN,OAAsB,MAAO,OAC7B,OAAqB,MAAO,MAC5B,OAAqB,MAAO,MAC5B,OAAqB,MAAO,MAC5B,OAAqB,MAAO,MAC5B,OAA6B,MAAM,IAAI8c,MAAM,oBAC7C,OAAsB,MAAM,IAAIA,MAAM,aACtC,QAAS,MAAM,IAAIA,MAAM,oBAvzBhB1lB,EAAAy8E,46BCxDb,IAAA11E,EAAAtG,EAAA,GAIA+6C,EAAA/6C,EAAA,GAuBA+C,EAAA/C,EAAA,GAKAw9E,EAAA,WAYE,SAAAA,EAAY5xD,EAAkB6xD,QAAA,IAAAA,OAAA,GAL9B59E,KAAA69E,QAEA79E,KAAAkrB,KAAqB,IAAIC,IAIvBnrB,KAAK+rB,QAAUA,EACf/rB,KAAK49E,eA0ET,OAtEED,EAAA17E,UAAA67E,KAAA,uBACE,IAAyB,IAAApvD,EAAA9K,EAAA5jB,KAAK+rB,QAAQ1M,mBAAmB5R,UAAQuW,EAAA0K,EAAA5K,QAAAE,EAAAD,KAAAC,EAAA0K,EAAA5K,OAAE,CAA9D,IAAIsnC,EAAYpnC,EAAA1iB,MAEnBtB,KAAK+9E,aAAa3yB,EAAah/C,2GAGjC,IADA,IAAIyxE,EAAO79E,KAAK69E,KACH,EAAOA,EAAKv4E,QAAUtF,KAAK+9E,aAAaF,EAAxC,KAIfF,EAAA17E,UAAA87E,aAAA,SAAa3xE,GACX,KAAIA,EAAQrE,GAAGtB,EAAApE,YAAYs9C,UAAa3/C,KAAK49E,kBACzC59E,KAAKkrB,KAAK7F,IAAIjZ,GAElB,OADApM,KAAKkrB,KAAKE,IAAIhf,GACNA,EAAQrF,MACd,KAAKm0C,EAAAx8B,YAAY3I,OACX3J,EAAQrE,GAAGtB,EAAApE,YAAY0pD,WAAW/rD,KAAKg+E,YAAoB5xE,GAC/D,MAEF,KAAK8uC,EAAAx8B,YAAYuN,KACX7f,EAAQrE,GAAGtB,EAAApE,YAAY0pD,WAAW/rD,KAAKi+E,UAAgB7xE,GAC3D,MAEF,KAAK8uC,EAAAx8B,YAAYgH,mBACf1lB,KAAKk+E,uBAA0C9xE,GAC/C,MAEF,KAAK8uC,EAAAx8B,YAAYmG,gBACf7kB,KAAKm+E,oBAAoC/xE,GACzC,MAEF,KAAK8uC,EAAAx8B,YAAY+R,MACHrkB,EAASrE,GAAGtB,EAAApE,YAAY0pD,WAAW/rD,KAAKo+E,WAAkBhyE,GACtE,MAEF,KAAK8uC,EAAAx8B,YAAYqL,SACf,IAAIs0D,EAAiBjyE,EACjBvL,EAASw9E,EAAKr0D,gBACdnpB,GAAQb,KAAKk+E,uBAAuBr9E,GACxC,IAAImrD,EAASqyB,EAAKp0D,gBACd+hC,GAAQhsD,KAAKk+E,uBAAuBlyB,GACxC,MAEF,KAAK9Q,EAAAx8B,YAAYsN,WA8ZvB,SAASsyD,EAAkBlyE,mBACzB,IAAI2D,EAAU3D,EAAQ2D,QACtB,GAAIA,MACF,IAAmB,IAAAoV,EAAAvB,EAAA7T,EAAQtC,UAAQ+9C,EAAArmC,EAAArB,QAAA0nC,EAAAznC,KAAAynC,EAAArmC,EAAArB,OAAE,CAAhC,IAAI7J,EAAMuxC,EAAAlqD,MACb,OAAQ2Y,EAAOlT,MACb,KAAKm0C,EAAAx8B,YAAYgH,uBACf,IAAqB,IAAA+lC,EAAA7nC,EAAoB3J,EAAQ8S,UAAUtf,UAAQi+C,EAAAD,EAAA3nC,QAAA4nC,EAAA3nC,KAAA2nC,EAAAD,EAAA3nC,OAAE,CAAhE,IAAIyB,EAAQmmC,EAAApqD,MACf,GAAIikB,EAASxd,GAAGtB,EAAApE,YAAY0pD,UAAW,OAAO,oGAEhD,MAEF,KAAK7Q,EAAAx8B,YAAYmG,oBACf,IAAqB,IAAA8mC,EAAA/nC,EAAiB3J,EAAQ8S,UAAUtf,UAAQ4+C,EAAAV,EAAA7nC,QAAAuoC,EAAAtoC,KAAAsoC,EAAAV,EAAA7nC,OAAE,CAA7D,IAAIyB,EAAQ8mC,EAAA/qD,MACf,GAAIikB,EAASxd,GAAGtB,EAAApE,YAAY0pD,UAAW,OAAO,oGAEhD,MAEF,QACE,GAAI9xC,EAAOlS,GAAGtB,EAAApE,YAAY0pD,WAAauyB,EAAkBrkE,GAAS,OAAO,qGAMjF,OAAO,GArbGqkE,CAAkBlyE,IAAUpM,KAAKu+E,eAAenyE,GACpD,MAEF,QAAS3I,QAAO,KAIZk6E,EAAA17E,UAAAi8E,uBAAR,SAA+B9xE,eAC7B,IAAqB,IAAAsiB,EAAA9K,EAAAxX,EAAQ2gB,UAAUtf,UAAQuW,EAAA0K,EAAA5K,QAAAE,EAAAD,KAAAC,EAAA0K,EAAA5K,OAAE,CAA5C,IAAIyB,EAAQvB,EAAA1iB,MACXikB,EAASxd,GAAGtB,EAAApE,YAAY0pD,WAAW/rD,KAAKw+E,cAAwBj5D,uGAIhEo4D,EAAA17E,UAAAk8E,oBAAR,SAA4B/xE,eAC1B,IAAqB,IAAAsiB,EAAA9K,EAAAxX,EAAQ2gB,UAAUtf,UAAQuW,EAAA0K,EAAA5K,QAAAE,EAAAD,KAAAC,EAAA0K,EAAA5K,OAAE,CAA5C,IAAIyB,EAAQvB,EAAA1iB,MACXikB,EAASxd,GAAGtB,EAAApE,YAAY0pD,WAAW/rD,KAAKy+E,WAAkBl5D,uGAWpEo4D,EAxFA,GA2FArB,EAAA,SAAArnE,GAWE,SAAAqnE,EAAYvwD,EAAkB6xD,QAAA,IAAAA,OAAA,GAA9B,IAAAzoE,EACEF,EAAAzU,KAAAR,KAAM+rB,EAAS6xD,IAAe59E,YALxBmV,EAAAxP,MACAwP,EAAAupE,YAAmB,IAkK7B,OA1KgCxpE,EAAAonE,EAAArnE,GAGvBqnE,EAAAC,MAAP,SAAaxwD,GACX,OAAO,IAAIuwD,EAAWvwD,GAASwwD,SAWjCD,EAAAr6E,UAAA+7E,YAAA,SAAY5xE,GACV,IAAIzG,EAAK3F,KAAK2F,GACVo8D,EAAU31D,EAAQrE,GAAGtB,EAAApE,YAAYmqB,SAMrC,GALAtpB,EAAA02E,OAAOj0E,EAAI3F,KAAK0+E,aACZ3c,GAASp8D,EAAGE,KAAK,UACrBF,EAAGE,KAAK7F,KAAK2+E,aAAavyE,EAAQ9D,OAClC3C,EAAGE,KAAK,KACRF,EAAGE,KAAKuG,EAAQib,YACZ06C,EACF,OAAQ31D,EAAQkgB,mBACd,OACE3mB,EAAGE,KAAK,OACRF,EAAGE,KAAKmoE,cAAc5hE,EAAQmgB,uBAC9B,MAEF,OACE5mB,EAAGE,KAAK,OACRF,EAAGE,KAAKuG,EAAQqgB,mBAAmB5nB,YACnC,MAEF,QAASpB,QAAO,GAGpBkC,EAAGE,KAAK,QAGVy2E,EAAAr6E,UAAAg8E,UAAA,SAAU7xE,eACJzG,EAAK3F,KAAK2F,GACdzC,EAAA02E,OAAOj0E,EAAI3F,KAAK0+E,eAChB/4E,EAAGE,KAAK,cACRF,EAAGE,KAAKuG,EAAQib,YAChB1hB,EAAGE,KAAK,QACR,IAAIkK,EAAU3D,EAAQ2D,QACtB,GAAIA,EAAS,KACX,IAA2B,IAAA6uE,EAAAh7D,EAAA7T,GAAO8uE,EAAAD,EAAA96D,QAAA+6D,EAAA96D,KAAA86D,EAAAD,EAAA96D,OAAE,CAA3B,IAAAE,EAAAC,EAAA46D,EAAAv9E,MAAA,GAACV,EAAAojB,EAAA,GACR,IADc/J,EAAA+J,EAAA,IACHjd,MAAQm0C,EAAAx8B,YAAYwN,UAAW,CACxC,IAAI61C,EAAsB9nD,EAAQlS,GAAGtB,EAAApE,YAAYmqB,SACjDtpB,EAAA02E,OAAOj0E,EAAI3F,KAAK0+E,aACZ3c,EAASp8D,EAAGE,KAAK,UAChBF,EAAGE,KAAK,aACbF,EAAGE,KAAK,kBACRF,EAAGE,KAAKjF,GACJmhE,IACFp8D,EAAGE,KAAK,OACRF,EAAGE,KAAiBoU,EAAQkS,cAActnB,SAAS,MAErDc,EAAGE,KAAK,8GAGZ,IAAmB,IAAAsf,EAAAvB,EAAA7T,EAAQtC,UAAQ+9C,EAAArmC,EAAArB,QAAA0nC,EAAAznC,KAAAynC,EAAArmC,EAAArB,OAAE,CAAhC,IAAI7J,KAAMuxC,EAAAlqD,OACFyF,MAAQm0C,EAAAx8B,YAAYwN,WAAWlsB,KAAK+9E,aAAa9jE,sGAGhE/W,EAAA02E,OAAOj0E,IAAM3F,KAAK0+E,aAClB/4E,EAAGE,KAAK,QAGVy2E,EAAAr6E,UAAAu8E,cAAA,SAAcpyE,WACRzG,EAAK3F,KAAK2F,GACVqN,EAAY5G,EAAQ4G,UACxB9P,EAAA02E,OAAOj0E,EAAI3F,KAAK0+E,aAChB/4E,EAAGE,KAAK7F,KAAK2+E,aAAa3rE,EAAU3J,aACpC1D,EAAGE,KAAK,KACRF,EAAGE,KAAKuG,EAAQib,YAChB1hB,EAAGE,KAAK,KAIR,IAHA,IAAIuD,EAAa4J,EAAUgT,eACvB03B,EAAgBt0C,EAAW9D,OAEtBjF,EAAI,EAAGA,EAAIq9C,IAAiBr9C,EAC/BA,GAAGsF,EAAGE,KAAK,MAEfF,EAAGE,KAAK7F,KAAK2+E,aAAav1E,EAAW/I,KACrCsF,EAAGE,KAAK,KACRF,EAAGE,KAAKmN,EAAU+b,iBAAiB1uB,IAErCsF,EAAGE,KAAK,QACR,IAAIkK,EAAU3D,EAAQ2D,QACtB,GAAIA,GAAWA,EAAQgoB,KAAM,CAC3B70B,EAAA02E,OAAOj0E,EAAI3F,KAAK0+E,aAChB/4E,EAAGE,KAAK,cACRF,EAAGE,KAAKuG,EAAQib,YAChB1hB,EAAGE,KAAK,YACR,IAAmB,IAAA6oB,EAAA9K,EAAA7T,EAAQtC,UAAQuW,EAAA0K,EAAA5K,QAAAE,EAAAD,KAAAC,EAAA0K,EAAA5K,OAAA,CAA9B,IAAI7J,EAAM+J,EAAA1iB,MAAsBtB,KAAK+9E,aAAa9jE,qGACvD/W,EAAA02E,OAAOj0E,IAAM3F,KAAK0+E,aAClB/4E,EAAGE,KAAK,SAIZy2E,EAAAr6E,UAAAw8E,WAAA,SAAWryE,GACT,IAAIzG,EAAK3F,KAAK2F,GACdzC,EAAA02E,OAAOj0E,EAAI3F,KAAK0+E,eAChB/4E,EAAGE,KAAK,cACRF,EAAGE,KAAKuG,EAAQib,YAChB1hB,EAAGE,KAAK,QAER3C,EAAA02E,OAAOj0E,IAAM3F,KAAK0+E,aAClB/4E,EAAGE,KAAK,QAGVy2E,EAAAr6E,UAAA68E,eAAA,SAAe1yE,GACbpM,KAAKy+E,WAAWryE,IAGlBkwE,EAAAr6E,UAAAm8E,WAAA,SAAWhyE,KAIXkwE,EAAAr6E,UAAAs8E,eAAA,SAAenyE,WACTzG,EAAK3F,KAAK2F,GACdzC,EAAA02E,OAAOj0E,EAAI3F,KAAK0+E,eAChB/4E,EAAGE,KAAK,cACRF,EAAGE,KAAKuG,EAAQib,YAChB1hB,EAAGE,KAAK,QACR,IAAIkK,EAAU3D,EAAQ2D,QACtB,GAAIA,MACF,IAAmB,IAAA2e,EAAA9K,EAAA7T,EAAQtC,UAAQuW,EAAA0K,EAAA5K,QAAAE,EAAAD,KAAAC,EAAA0K,EAAA5K,OAAA,CAA9B,IAAI7J,EAAM+J,EAAA1iB,MAAsBtB,KAAK+9E,aAAa9jE,qGAEzD/W,EAAA02E,OAAOj0E,IAAM3F,KAAK0+E,aAClB/4E,EAAGE,KAAK,QAGVy2E,EAAAr6E,UAAA08E,aAAA,SAAar2E,GACX,OAAQA,EAAKvB,MACX,OAAkB,MAAO,OACzB,OAAmB,MAAO,QAC1B,OAAmB,MAAO,OAC1B,OAAmB,MAAO,YAC1B,OAAqB,OAAO/G,KAAK+rB,QAAQrL,QAAQkB,SAAW,YAAc,OAC1E,OAAkB,MAAO,QACzB,OAAmB,MAAO,iBAC1B,OAAmB,MAAO,gBAE1B,OAAmB,MAAO,qBAC1B,OAAqB,OAAO5hB,KAAK+rB,QAAQrL,QAAQkB,SAAW,qBAAuB,gBAEnF,QAAoB,MAAO,UAC3B,QAAmB,MAAO,qBAC1B,QAAmB,MAAO,sBAC1B,QAAoB,MAAO,OAC3B,QAEE,OADAne,QAAO,GACA,KAKb64E,EAAAr6E,UAAAs6E,MAAA,WACE,IAAI52E,EAAK3F,KAAK2F,GAMd,OALAA,EAAGE,KAAK,4BACN7F,KAAK0+E,YACP1+E,KAAK89E,SACH99E,KAAK0+E,YACP/4E,EAAGE,KAAK,OACDF,EAAGG,KAAK,KAEnBw2E,EA1KA,CAAgCqB,GAAnBj+E,EAAA48E,aA6Kb,IAAAG,EAAA,SAAAxnE,GAWE,SAAAwnE,EAAY1wD,EAAkB6xD,QAAA,IAAAA,OAAA,GAA9B,IAAAzoE,EACEF,EAAAzU,KAAAR,KAAM+rB,EAAS6xD,IAAe59E,YALxBmV,EAAAxP,MACAwP,EAAAupE,YAAmB,IAsM7B,OA9MgCxpE,EAAAunE,EAAAxnE,GAGvBwnE,EAAAF,MAAP,SAAaxwD,GACX,OAAO,IAAI0wD,EAAW1wD,GAASwwD,SAWjCE,EAAAx6E,UAAA+7E,YAAA,SAAY5xE,GACV,IAAIzG,EAAK3F,KAAK2F,GACVo8D,EAAU31D,EAAQrE,GAAGtB,EAAApE,YAAYmqB,SACrCtpB,EAAA02E,OAAOj0E,EAAI3F,KAAK0+E,aACZtyE,EAAQrE,GAAGtB,EAAApE,YAAY0X,QACrBgoD,EAASp8D,EAAGE,KAAK,oBAChBF,EAAGE,KAAK,WAETk8D,EAASp8D,EAAGE,KAAK,UAChBF,EAAGE,KAAK,QAEfF,EAAGE,KAAKuG,EAAQib,YAChB1hB,EAAGE,KAAK,MACRF,EAAGE,KAAK7F,KAAK2+E,aAAavyE,EAAQ9D,OAClC3C,EAAGE,KAAK,OACR7F,KAAKu+E,eAAenyE,IAGtBqwE,EAAAx6E,UAAAg8E,UAAA,SAAU7xE,WACJzG,EAAK3F,KAAK2F,GACdzC,EAAA02E,OAAOj0E,EAAI3F,KAAK0+E,eAChB/4E,EAAGE,KAAK,SACRF,EAAGE,KAAKuG,EAAQib,YAChB1hB,EAAGE,KAAK,QACR,IAAIkK,EAAU3D,EAAQ2D,QACtB,GAAIA,EAAS,CACX,IAAIgvE,EAAahvE,EAAQgoB,SACzB,IAA2B,IAAAinD,EAAAp7D,EAAA7T,GAAOkvE,EAAAD,EAAAl7D,QAAAm7D,EAAAl7D,KAAAk7D,EAAAD,EAAAl7D,OAAE,CAA3B,IAAA4K,EAAAzK,EAAAg7D,EAAA39E,MAAA,GAACV,EAAA8tB,EAAA,GAAMzU,EAAAyU,EAAA,GACVzU,EAAOlT,MAAQm0C,EAAAx8B,YAAYwN,YAC7BhpB,EAAA02E,OAAOj0E,EAAI3F,KAAK0+E,aAChB/4E,EAAGE,KAAKjF,GACJqZ,EAAOlS,GAAGtB,EAAApE,YAAYmqB,WACxB7mB,EAAGE,KAAK,OACRF,EAAGE,KAAiBoU,EAAQkS,cAActnB,SAAS,MAErDc,EAAGE,KAAK,SACNk5E,qGAGFA,GAAY/+E,KAAKu+E,eAAenyE,GAEtClJ,EAAA02E,OAAOj0E,IAAM3F,KAAK0+E,aAClB/4E,EAAGE,KAAK,QAGV42E,EAAAx6E,UAAAu8E,cAAA,SAAcpyE,GACZ,IAAIA,EAAQnE,MAAMxB,EAAApE,YAAYs9C,QAAUl5C,EAAApE,YAAY6lB,KAApD,CACA,IAAIviB,EAAK3F,KAAK2F,GACVqN,EAAY5G,EAAQ4G,UAIxB,GAHA9P,EAAA02E,OAAOj0E,EAAI3F,KAAK0+E,aACZtyE,EAAQrE,GAAGtB,EAAApE,YAAYu9C,YAAYj6C,EAAGE,KAAK,cAC3CuG,EAAQrE,GAAGtB,EAAApE,YAAY0X,SAASpU,EAAGE,KAAK,WACxCuG,EAAQrE,GAAGtB,EAAApE,YAAY4lB,KAKzB,OAJAtiB,EAAGE,KAAKuG,EAAQnK,UAAU2J,YAAYhL,KAAKwE,MAC3CO,EAAGE,KAAK,MACRF,EAAGE,KAAK7F,KAAK2+E,aAAa3rE,EAAU3J,kBACpC1D,EAAGE,KAAK,OAGHuG,EAAQnE,MAAMxB,EAAApE,YAAY0X,OAAStT,EAAApE,YAAY+rB,WAAWzoB,EAAGE,KAAK,aACvEF,EAAGE,KAAKuG,EAAQib,YAElB1hB,EAAGE,KAAK,KAIR,IAHA,IAAIuD,EAAa4J,EAAUgT,eACvB03B,EAAgBt0C,EAAW9D,OAEtBjF,EAAI,EAAGA,EAAIq9C,IAAiBr9C,EAC/BA,GAAGsF,EAAGE,KAAK,MAEfF,EAAGE,KAAKmN,EAAU+b,iBAAiB1uB,IACnCsF,EAAGE,KAAK,MACRF,EAAGE,KAAK7F,KAAK2+E,aAAav1E,EAAW/I,KAEnC+L,EAAQnE,MAAMxB,EAAApE,YAAYiV,YAAc7Q,EAAApE,YAAY6lB,KACtDviB,EAAGE,KAAK,MAERF,EAAGE,KAAK,OACRF,EAAGE,KAAK7F,KAAK2+E,aAAa3rE,EAAU3J,cAEtC1D,EAAGE,KAAK,OACR7F,KAAKu+E,eAAenyE,KAGtBqwE,EAAAx6E,UAAAw8E,WAAA,SAAWryE,eACLzG,EAAK3F,KAAK2F,GACV2iB,EAAclc,EAAQrF,MAAQm0C,EAAAx8B,YAAYqT,UAC9C7uB,EAAA02E,OAAOj0E,EAAI3F,KAAK0+E,eACZp2D,EACF3iB,EAAGE,KAAK,eAEJuG,EAAQrE,GAAGtB,EAAApE,YAAYqmB,WAAW/iB,EAAGE,KAAK,aAC9CF,EAAGE,KAAK,WAEVF,EAAGE,KAAKuG,EAAQib,YAChB,IAAIuJ,EAAOxkB,EAAQwkB,KACfA,GAAQA,EAAK7oB,GAAGtB,EAAApE,YAAY0pD,SAAWtlD,EAAApE,YAAYqlB,iBACrD/hB,EAAGE,KAAK,aACRF,EAAGE,KAAK+qB,EAAKvJ,aAEf1hB,EAAGE,KAAK,QACR,IAAIkK,EAAU3D,EAAQnK,UAAU8N,QAChC,GAAIA,MACF,IAAmB,IAAAiU,EAAAJ,EAAA7T,EAAQtC,UAAQ0X,EAAAnB,EAAAF,QAAAqB,EAAApB,KAAAoB,EAAAnB,EAAAF,OAAE,CAAhC,IAAI7J,EAAMkL,EAAA7jB,MACbtB,KAAK+9E,aAAa9jE,qGAGtB,IAAIyyC,EAAOtgD,EAAQ0kB,oBAGnB,GAFI47B,GAAM1sD,KAAKw+E,cAAc9xB,GAC7B38C,EAAU3D,EAAQ2D,YAEhB,IAAmB,IAAAy7C,EAAA5nC,EAAA7T,EAAQtC,UAAQg+C,EAAAD,EAAA1nC,QAAA2nC,EAAA1nC,KAAA0nC,EAAAD,EAAA1nC,OAAA,CAA1B7J,EAAMwxC,EAAAnqD,MAAsBtB,KAAK+9E,aAAa9jE,qGAEzD/W,EAAA02E,OAAOj0E,IAAM3F,KAAK0+E,aAClB/4E,EAAGE,KAAK,QAGV42E,EAAAx6E,UAAA68E,eAAA,SAAe1yE,GACbpM,KAAKy+E,WAAWryE,IAGlBqwE,EAAAx6E,UAAAm8E,WAAA,SAAWhyE,GACT,IAAIA,EAAQrE,GAAGtB,EAAApE,YAAYs9C,SAA3B,CACA,IAAIh6C,EAAK3F,KAAK2F,GACdzC,EAAA02E,OAAOj0E,EAAI3F,KAAK0+E,aACZtyE,EAAQrE,GAAGtB,EAAApE,YAAYu9C,YAAYj6C,EAAGE,KAAK,cAC3CuG,EAAQrE,GAAGtB,EAAApE,YAAY0X,SAASpU,EAAGE,KAAK,WACxCuG,EAAQrE,GAAGtB,EAAApE,YAAYomB,WAAW9iB,EAAGE,KAAK,aAC9CF,EAAGE,KAAKuG,EAAQib,YAChB1hB,EAAGE,KAAK,MACRF,EAAGE,KAAK7F,KAAK2+E,aAAavyE,EAAQ9D,OAClC3C,EAAGE,KAAK,SAGV42E,EAAAx6E,UAAAs8E,eAAA,SAAenyE,WACT2D,EAAU3D,EAAQ2D,QACtB,GAAIA,GAAWA,EAAQgoB,KAAM,CAC3B,IAAIpyB,EAAK3F,KAAK2F,GACdzC,EAAA02E,OAAOj0E,EAAI3F,KAAK0+E,eAChB/4E,EAAGE,KAAK,cACRF,EAAGE,KAAKuG,EAAQib,YAChB1hB,EAAGE,KAAK,YACR,IAAmB,IAAA6oB,EAAA9K,EAAA7T,EAAQtC,UAAQuW,EAAA0K,EAAA5K,QAAAE,EAAAD,KAAAC,EAAA0K,EAAA5K,OAAA,CAA9B,IAAI7J,EAAM+J,EAAA1iB,MAAsBtB,KAAK+9E,aAAa9jE,qGACvD/W,EAAA02E,OAAOj0E,IAAM3F,KAAK0+E,aAClB/4E,EAAGE,KAAK,SAIZ42E,EAAAx6E,UAAA08E,aAAA,SAAar2E,GACX,OAAQA,EAAKvB,MACX,OAAkB,MAAO,KACzB,OAAmB,MAAO,MAC1B,OAAmB,MAAO,MAC1B,OAAmB,MAAO,MAC1B,OAAqB,OAAO/G,KAAK+rB,QAAQrL,QAAQkB,SAAW,MAAQ,MACpE,OAAkB,MAAO,KACzB,OAAmB,MAAO,MAC1B,OAAmB,MAAO,MAE1B,OAAmB,MAAO,MAC1B,OAAqB,OAAO5hB,KAAK+rB,QAAQrL,QAAQkB,SAAW,MAAQ,MAEpE,QAAoB,MAAO,OAC3B,QAAmB,MAAO,MAC1B,QAAmB,MAAO,MAC1B,QAAoB,MAAO,OAC3B,QAEE,OADAne,QAAO,GACA,KAKbg5E,EAAAx6E,UAAAs6E,MAAA,WACE,IAAI52E,EAAK3F,KAAK2F,GAgBd,OAfAA,EAAGE,KAAK,+BACRF,EAAGE,KAAK,yBACRF,EAAGE,KAAK,0BACRF,EAAGE,KAAK,0BACRF,EAAGE,KAAK,yBACRF,EAAGE,KAAK,0BACRF,EAAGE,KAAK,0BACRF,EAAGE,KAAK,0BACRF,EAAGE,KAAK,0BACRF,EAAGE,KAAK,0BACN7F,KAAK0+E,YACP1+E,KAAK89E,SACH99E,KAAK0+E,YACP/4E,EAAGE,KAAK,OACRF,EAAGE,KAAK,8BACD7F,KAAK2F,GAAGG,KAAK,KAExB22E,EA9MA,CAAgCkB,GAAnBj+E,EAAA+8E,icCxSb,IAAAh2E,EAAAtG,EAAA,GAMA+6C,EAAA/6C,EAAA,GAIAuG,EAAAvG,EAAA,GAQA8b,EAAA9b,EAAA,GAKA+C,EAAA/C,EAAA,GAIAgc,EAAAhc,EAAA,GAyDAu6E,EAAA,SAAAzlE,GAcE,SAAAylE,IAAA,IAAAvlE,EACEF,EAAAzU,KAAAR,OAAOA,YAVTmV,EAAA+pE,QAAoB,IAAI/4E,MAExBgP,EAAAgqE,QAAuB,IAAIh0D,IAE3BhW,EAAAiqE,QAAuB,IAAIj0D,IAE3BhW,EAAA+tC,UAAmC,KA4b3B/tC,EAAAkqE,8BAAqC,EA+brClqE,EAAAmqE,oBAAuC,KAt3B7CnqE,EAAK4W,QAAU,IAAImvB,EAAAp8B,QAAQ3J,EAAKjP,eA05GpC,OA16G4BgP,EAAAwlE,EAAAzlE,GAoB1BylE,EAAAz4E,UAAAu4E,UAAA,SACEp1E,EACA0L,EACA8W,GAEA,IAAI7iB,EAAiB7B,EAAA8N,cAAcF,GAC/BK,EAAegL,EAAA/K,mBAAmBrM,GAGtC,IAAI/E,KAAKo/E,QAAQ/5D,IAAIlU,GAArB,CACAnR,KAAKo/E,QAAQh0D,IAAIja,GACjBnR,KAAKm/E,QAAQ/zD,IAAIja,GAGjB,IAAIrM,EAAS,IAAIqX,EAAAxD,OACf5T,EACAK,EACAwiB,EACIzL,EAAA1D,WAAWW,MACXtI,EAAKG,WAAWxK,EAAA3D,iBAAmBgO,EAAK2+D,QAAQhpE,EAAAnE,eAAgBmE,EAAA3D,eAAewC,QAAU,EACvF6W,EAAA1D,WAAWY,QACX8C,EAAA1D,WAAWomC,SAEf9yB,EAAU/rB,KAAK+rB,QACnBA,EAAQ3L,QAAQva,KAAKf,GAGrB,IAAIy6E,EAAK,IAAI74E,EAAAm8C,UAAU/9C,EAAQinB,EAAQ7lB,aACvCq5E,EAAGr8B,UAAYljD,KAAKkjD,UACpBp+C,EAAO+T,UAAY0mE,EAEnB,IADA,IAAIjwE,EAAaxK,EAAOwK,YAChBiwE,EAAG35B,KAAKl/C,EAAAC,MAAM0+C,YAAY,CAChC,IAAIh1C,EAAYrQ,KAAKw/E,uBAAuBD,GACxClvE,IACFA,EAAUzI,OAAS9C,EACnBwK,EAAWzJ,KAAKwK,IAGpBkvE,EAAGz2B,WAIL4xB,EAAAz4E,UAAAu9E,uBAAA,SACED,EACAp4D,QAAA,IAAAA,MAAA,MAOA,IALA,IAAItf,EAAQpB,EAAApE,YAAYyF,KACpB23E,GAAiB,EAGjBzvE,EAAqC,KAClCuvE,EAAG35B,KAAKl/C,EAAAC,MAAMg+C,KAAK,CACpB86B,EAAW,IAAGA,EAAWF,EAAGz8B,UAChC,IAAI/mC,EAAY/b,KAAK0/E,eAAeH,GAC/BxjE,GAIA/L,IAAYA,MACjBA,EAAWnK,KAAKkW,IAJd/b,KAAK2/E,cAAcJ,GAQvB,IAAIK,EAAmB,EACnBC,EAAiB,EACjBN,EAAG35B,KAAKl/C,EAAAC,MAAMiT,UACZ2lE,EAAG35B,KAAKl/C,EAAAC,MAAMk4C,UAChB7+C,KAAKuG,MACH0V,EAAAnY,eAAe2jB,wBACf83D,EAAGn7E,SAGHq7E,EAAW,IAAGA,EAAWF,EAAGz8B,UAChCj7C,GAASpB,EAAApE,YAAYuX,OACrBgmE,EAAcL,EAAGz8B,SACjB+8B,EAAYN,EAAGtmE,KAGjB,IAEI6mE,EAAgC,MAAb34D,GAAqBA,EAAUpf,GAAGtB,EAAApE,YAAYwjB,SACjE05D,EAAG35B,KAAKl/C,EAAAC,MAAMi4C,UACZ6gC,EAAW,IAAGA,EAAWF,EAAGz8B,UAC5Bg9B,GACF9/E,KAAKuG,MACH0V,EAAAnY,eAAei8E,gEACfR,EAAGn7E,SAGPyD,GAASpB,EAAApE,YAAYu8C,QAAUn4C,EAAApE,YAAYwjB,SAClCi6D,IACTj4E,GAASpB,EAAApE,YAAYwjB,SAIvB,IAAIxV,EAA8B,KAG9B2vE,EAAQT,EAAGj6B,OAEf,OADIm6B,EAAW,IAAGA,EAAWF,EAAGv8B,cACxBg9B,GACN,KAAKt5E,EAAAC,MAAMklB,MAGT,GAFA0zD,EAAGz7D,OACHjc,GAASpB,EAAApE,YAAYwpB,MACjB0zD,EAAG35B,KAAKl/C,EAAAC,MAAMslB,MAAO,CACvB5b,EAAYrQ,KAAKigF,UAAUV,EAAI13E,EAAOmI,EAAYyvE,GAClD,MAEApvE,EAAYrQ,KAAKkgF,cAAcX,EAAI13E,EAAOmI,EAAYyvE,GACtDzvE,EAAa,KAEf,MAEF,KAAKtJ,EAAAC,MAAM44C,IAAK13C,GAASpB,EAAApE,YAAYk9C,IACrC,KAAK74C,EAAAC,MAAMo5C,IACTw/B,EAAGz7D,OACHzT,EAAYrQ,KAAKkgF,cAAcX,EAAI13E,EAAOmI,EAAYyvE,GACtDzvE,EAAa,KACb,MAEF,KAAKtJ,EAAAC,MAAMslB,KACTszD,EAAGz7D,OACHzT,EAAYrQ,KAAKigF,UAAUV,EAAI13E,EAAOmI,EAAYyvE,GAClDzvE,EAAa,KACb,MAEF,KAAKtJ,EAAAC,MAAM6Q,SACT+nE,EAAGz7D,OACHzT,EAAYrQ,KAAKmgF,cAAcZ,EAAI13E,EAAOmI,EAAYyvE,GACtDzvE,EAAa,KACb,MAEF,KAAKtJ,EAAAC,MAAM+hB,SACT,IAAIo9B,EAAQy5B,EAAG15B,OAEf,GADA05B,EAAGz7D,QACEy7D,EAAG35B,KAAKl/C,EAAAC,MAAMyQ,OAAQ,CACzBmoE,EAAGr5B,MAAMJ,GACTz1C,EAAYrQ,KAAKogF,eAAeb,GAAI,GACpC,MAEAA,EAAGt5B,QAAQH,GAEbj+C,GAASpB,EAAApE,YAAYqmB,SAGvB,KAAKhiB,EAAAC,MAAMyQ,MACX,KAAK1Q,EAAAC,MAAMorB,UACTwtD,EAAGz7D,OACHzT,EAAYrQ,KAAKqgF,sBAAsBd,EAAI13E,EAAOmI,EAAYyvE,GAC9DzvE,EAAa,KACb,MAEF,KAAKtJ,EAAAC,MAAMqlB,UACL85B,EAAQy5B,EAAG15B,OACf05B,EAAGz7D,OACCy7D,EAAGj6B,MAAK,EAAO5+C,EAAA03C,mBAAmB8G,SAAWx+C,EAAAC,MAAMU,YACrDk4E,EAAGt5B,QAAQH,GACXz1C,EAAYrQ,KAAKsgF,eAAef,EAAI13E,EAAOmI,EAAYyvE,GACvDzvE,EAAa,OAEbuvE,EAAGr5B,MAAMJ,GACTz1C,EAAYrQ,KAAKogF,eAAeb,GAAI,IAEtC,MAEF,KAAK74E,EAAAC,MAAMsU,OACTskE,EAAGz7D,OAGDzT,GAFFxI,GAASpB,EAAApE,YAAY4Y,QACTxU,EAAApE,YAAYuX,OACV5Z,KAAKugF,kBAAkBhB,EAAIE,GAE3Bz/E,KAAKwgF,YAAYjB,GAE/B,MAEF,KAAK74E,EAAAC,MAAM0O,KACLywC,EAAQy5B,EAAG15B,OACf05B,EAAGz7D,OACCy7D,EAAGj6B,MAAK,EAAO5+C,EAAA03C,mBAAmB8G,SAAWx+C,EAAAC,MAAMU,YACrDk4E,EAAGt5B,QAAQH,GACXz1C,EAAYrQ,KAAKygF,qBAAqBlB,EAAI13E,EAAOmI,EAAYyvE,GAC7DzvE,EAAa,OAEbuvE,EAAGr5B,MAAMJ,GACTz1C,EAAYrQ,KAAKogF,eAAeb,GAAI,IAEtC,MAEF,QAGM13E,EAAQpB,EAAApE,YAAYuX,OACtBvJ,EAAYrQ,KAAK0gF,YAAYnB,EAAI13E,EAAO43E,IAIpCI,GACF7/E,KAAKuG,MACH0V,EAAAnY,eAAe68E,gCACfpB,EAAGn7E,MAAMw7E,EAAaC,GAAY,UASjC14D,IACH9W,EAAYrQ,KAAKogF,eAAeb,GAAI,KAQ5C,GAAIvvE,EACF,IAAK,IAAI3P,EAAI,EAAGuK,EAAIoF,EAAW1K,OAAQjF,EAAIuK,IAAKvK,EAC9CL,KAAKuG,MACH0V,EAAAnY,eAAe88E,8BACf5wE,EAAW3P,GAAG+D,OAIpB,OAAOiM,GAITqqE,EAAAz4E,UAAA04E,SAAA,WACE,IAAIuE,EAAUl/E,KAAKk/E,QACnB,OAAOA,EAAQ55E,OAAS45E,EAAQpnD,QAAU,MAI5C4iD,EAAAz4E,UAAA6mD,OAAA,WACE,GAAI9oD,KAAKk/E,QAAQ55E,OAAQ,MAAM,IAAI8f,MAAM,wBAIzC,OAHAplB,KAAKk/E,WACLl/E,KAAKm/E,QAAQ0B,QACb7gF,KAAKo/E,QAAQyB,QACN7gF,KAAK+rB,SAId2uD,EAAAz4E,UAAA6+E,UAAA,SACEvB,EACAwB,EACAC,QADA,IAAAD,OAAA,QACA,IAAAC,OAAA,GAIA,IAGI14E,EAHA63C,EAAQo/B,EAAGz7D,OACX27D,EAAWF,EAAGz8B,SAKlB,GAAI3C,GAASz5C,EAAAC,MAAM48C,UAAW,CAG5B,IAAI09B,EAAsB1B,EAAG35B,KAAKl/C,EAAAC,MAAM48C,WAEpCvwC,EAAYhT,KAAKkhF,kBAAkB3B,GACvC,GAAIvsE,EAAW,CACb,GAAIiuE,EAAqB,CACvB,IAAK1B,EAAG35B,KAAKl/C,EAAAC,MAAM68C,YAKjB,OAJAxjD,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAEP,KAET,IAAKm7E,EAAG35B,KAAKl/C,EAAAC,MAAM66C,KAKjB,OAJAxhD,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAEP,KAEJm7E,EAAG35B,KAAKl/C,EAAAC,MAAMM,OACjBjH,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,QAGhB4O,EAAU3K,YAAa,EAEzB,OAAO2K,EACF,GAAIiuE,GAAuBjhF,KAAKq/E,6BAKrC,OAJAr/E,KAAKuG,MACH0V,EAAAnY,eAAeq9E,iBACf5B,EAAGn7E,SAEE,KAIT,IAAI28E,EAoBF,OAJA/gF,KAAKuG,MACH0V,EAAAnY,eAAeq9E,iBACf5B,EAAGn7E,SAEE,KAnBP,IAAIg9E,EAAYphF,KAAK8gF,UAAUvB,GAAI,EAAOyB,GAC1C,IAAKI,EAAW,OAAO,KACvB,IAAK7B,EAAG35B,KAAKl/C,EAAAC,MAAM68C,YAOjB,OANKw9B,GACHhhF,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,MAAMm7E,EAAGtmE,KAAM,KAGf,MAET3Q,EAAO84E,GACFh9E,MAAMmB,MAAQk6E,EACnBn3E,EAAKlE,MAAMoB,IAAM+5E,EAAGtmE,SAUjB,GAAIknC,GAASz5C,EAAAC,MAAM+U,KACxBpT,EAAO6T,EAAAxU,KAAKQ,WACVgU,EAAAxU,KAAKe,2BAA2B,OAAQ62E,EAAGn7E,aAAc,EAAOm7E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,WAInF,GAAIknC,GAASz5C,EAAAC,MAAMsR,KACxB3P,EAAO6T,EAAAxU,KAAKQ,WACVgU,EAAAxU,KAAKiH,qBAAqB2wE,EAAGn7E,aAAc,EAAOm7E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,WAIrE,GAAIknC,GAASz5C,EAAAC,MAAMO,MAAQi5C,GAASz5C,EAAAC,MAAMQ,MAC/CmB,EAAO6T,EAAAxU,KAAKQ,WACVgU,EAAAxU,KAAKe,2BAA2B,OAAQ62E,EAAGn7E,aAAc,EAAOm7E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,WAInF,GAAIknC,GAASz5C,EAAAC,MAAM28C,cACxBi8B,EAAGjtC,aACHhqC,EAAO6T,EAAAxU,KAAKQ,WACVgU,EAAAxU,KAAKe,2BAA2B,SAAU62E,EAAGn7E,aAAc,EAAOm7E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,UAIrF,IAAIknC,GAASz5C,EAAAC,MAAMU,WA6CxB,OANK25E,GACHhhF,KAAKuG,MACH0V,EAAAnY,eAAeu9E,oBACf9B,EAAGn7E,SAGA,KA5CP,IAAIwL,EAAauM,EAAAxU,KAAKe,2BAA2B62E,EAAGp5B,iBAAkBo5B,EAAGn7E,SACrEgF,EAAa,IAAIjD,MACjBm7E,GAAW,EAGf,GAAI/B,EAAG35B,KAAKl/C,EAAAC,MAAM25C,UAAW,CAC3B,EAAG,CACD,IAAIihC,EAAYvhF,KAAK8gF,UAAUvB,GAAI,EAAMyB,GACzC,IAAKO,EAAW,OAAO,KACvBn4E,EAAWvD,KAAe07E,SACnBhC,EAAG35B,KAAKl/C,EAAAC,MAAM0Q,QACvB,IAAKkoE,EAAG35B,KAAKl/C,EAAAC,MAAM45C,aAOjB,OANKygC,GACHhhF,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,MAAMm7E,EAAGtmE,KAAM,KAGf,KAIX,GAAIsmE,EAAG35B,KAAKl/C,EAAAC,MAAM66C,KAAM,CACtB,IAAI+9B,EAAG35B,KAAKl/C,EAAAC,MAAMM,MAShB,OANK+5E,GACHhhF,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,MAAMm7E,EAAGtmE,KAAM,QAGf,KARPqoE,GAAW,EAWfh5E,EAAO6T,EAAAxU,KAAKQ,WAAWyH,EAAYxG,EAAYk4E,EAAU/B,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAYjF,KAAOsmE,EAAG35B,KAAKl/C,EAAAC,MAAM49C,cAAc,CACjC,IAAIi9B,EAAejC,EAAGz8B,SACtB,IAAKy8B,EAAG35B,KAAKl/C,EAAAC,MAAM69C,cAOjB,OANKw8B,GACHhhF,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAGT,KAET,IAAIq9E,EAAelC,EAAGn7E,MAAMo9E,EAAcjC,EAAGtmE,KAGzCqoE,GAAW,EACf,GAAI/B,EAAG35B,KAAKl/C,EAAAC,MAAM66C,KAAM,CACtB,IAAI+9B,EAAG35B,KAAKl/C,EAAAC,MAAMM,MAShB,OANK+5E,GACHhhF,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,QAGT,KARPk9E,GAAW,EAiBf,GANAh5E,EAAO6T,EAAAxU,KAAKQ,WACVgU,EAAAxU,KAAKe,2BAA2B,QAAS+4E,IACvCn5E,GACFg5E,EACA/B,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAEpBqoE,EAAU,MAGhB,OAAOh5E,GAOToyE,EAAAz4E,UAAAi/E,kBAAA,SACE3B,GAKA,IAuGIl2E,EAvGAy8C,EAAQy5B,EAAG15B,OACX45B,EAAWF,EAAGz8B,SACd15C,EAAqC,KACrCklB,EAA4B,KAC5BozD,GAAoB,EAExB,GAAInC,EAAG35B,KAAKl/C,EAAAC,MAAM68C,YAChBk+B,GAAc,EACdnC,EAAGt5B,QAAQH,GACX18C,SAEK,CACLs4E,GAAc,EACd,EAAG,CACD,IAAI36E,EAAOoV,EAAA5G,cAAcspC,QAMzB,GALI0gC,EAAG35B,KAAKl/C,EAAAC,MAAM05C,eAChBqhC,GAAc,EACdnC,EAAGt5B,QAAQH,GACX/+C,EAAOoV,EAAA5G,cAAcuvD,MAEnBya,EAAG35B,KAAKl/C,EAAAC,MAAMsR,MAAO,CACvB,IAAIsnE,EAAG35B,KAAKl/C,EAAAC,MAAMw9C,OAiBhB,OAFAo7B,EAAGr5B,MAAMJ,GACT9lD,KAAKq/E,8BAA+B,EAC7B,KAhBPqC,GAAc,EACdnC,EAAGt5B,QAAQH,GACX,IAAIvkD,EAAIvB,KAAK8gF,UAAUvB,GAAI,GAC3B,IAAKh+E,EAAG,OAAO,KACf,GAAIA,EAAEwF,MAAQoV,EAAAtV,SAASwO,KAMrB,OALArV,KAAKuG,MACH0V,EAAAnY,eAAe2jB,wBACflmB,EAAE6C,OAEJpE,KAAKq/E,8BAA+B,EAC7B,KAET/wD,EAAqB/sB,MAMlB,KAAIg+E,EAAG55B,iBA8CZ,OATI+7B,EACF1hF,KAAKuG,MACH0V,EAAAnY,eAAeu9E,oBACf9B,EAAGn7E,SAGLm7E,EAAGr5B,MAAMJ,GAEX9lD,KAAKq/E,6BAA+BqC,EAC7B,KA7CP,IAAI9gF,EAAOub,EAAAxU,KAAKe,2BAA2B62E,EAAGp5B,iBAAkBo5B,EAAGn7E,MAAMm7E,EAAGz8B,SAAUy8B,EAAGtmE,MAazF,GAZIsmE,EAAG35B,KAAKl/C,EAAAC,MAAM29C,YAChBo9B,GAAc,EACdnC,EAAGt5B,QAAQH,GACP/+C,GAAQoV,EAAA5G,cAAcuvD,KACxB9kE,KAAKuG,MACH0V,EAAAnY,eAAe69E,oCACfpC,EAAGn7E,SAGL2C,EAAOoV,EAAA5G,cAAcqsE,UAGrBrC,EAAG35B,KAAKl/C,EAAAC,MAAMw9C,OAAQ,CACxBu9B,GAAc,EACdnC,EAAGt5B,QAAQH,GACX,IAAIx9C,EAAOtI,KAAK8gF,UAAUvB,GAC1B,IAAKj3E,EAEH,OADAtI,KAAKq/E,6BAA+BqC,EAC7B,KAET,IAAIG,EAAQ,IAAI1lE,EAAAlT,cAChB44E,EAAM34E,cAAgBnC,EACtB86E,EAAMjhF,KAAOA,EACbihF,EAAMv5E,KAAOA,EACRc,EACAA,EAAWvD,KAAKg8E,GADJz4E,GAAey4E,QAG5BH,GACF1hF,KAAKuG,MACH0V,EAAAnY,eAAegqD,cACfyxB,EAAGn7E,gBAgBJm7E,EAAG35B,KAAKl/C,EAAAC,MAAM0Q,QACvB,IAAKkoE,EAAG35B,KAAKl/C,EAAAC,MAAM68C,YAUjB,OATIk+B,EACF1hF,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAGdm7E,EAAGr5B,MAAMJ,GAEX9lD,KAAKq/E,6BAA+BqC,EAC7B,KAKX,OAAInC,EAAG35B,KAAKl/C,EAAAC,MAAM09C,qBAChBq9B,GAAc,EACdnC,EAAGt5B,QAAQH,IACXz8C,EAAarJ,KAAK8gF,UAAUvB,KAiB9Bv/E,KAAKq/E,8BAA+B,EAC7BljE,EAAAxU,KAAKwB,gBACVC,MACAC,EACAilB,GACA,EACAixD,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,QArBpBjZ,KAAKq/E,6BAA+BqC,EAC7B,QAGLA,EACF1hF,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,MAGdm7E,EAAGr5B,MAAMJ,GAEX9lD,KAAKq/E,6BAA+BqC,EAC7B,OAcXhH,EAAAz4E,UAAAy9E,eAAA,SACEH,GAKA,IAAIE,EAAWF,EAAGz8B,SAClB,GAAIy8B,EAAG55B,iBAAkB,CAGvB,IAFA,IAAI/kD,EAAO2+E,EAAGp5B,iBACVn7C,EAAyBmR,EAAAxU,KAAKe,2BAA2B9H,EAAM2+E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAClFsmE,EAAG35B,KAAKl/C,EAAAC,MAAMg9C,MAAM,CACzB,IAAI47B,EAAG55B,iBAYL,OAJA3lD,KAAKuG,MACH0V,EAAAnY,eAAeu9E,oBACf9B,EAAGn7E,SAEE,KAXPxD,EAAO2+E,EAAGp5B,iBACVn7C,EAAamR,EAAAxU,KAAKkG,+BAChB7C,EACAmR,EAAAxU,KAAKe,2BAA2B9H,EAAM2+E,EAAGn7E,SACzCm7E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAU5B,IAAIvP,OAAI,EACR,IAAI61E,EAAG35B,KAAKl/C,EAAAC,MAAM48C,WAMhB,OAAOpnC,EAAAxU,KAAK8B,gBAAgBuB,EAAY,KAAMu0E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAJpE,GADAvP,EAAO1J,KAAK8hF,eAAevC,GAEzB,OAAOpjE,EAAAxU,KAAK8B,gBAAgBuB,EAAYtB,EAAM61E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,WAMxEjZ,KAAKuG,MACH0V,EAAAnY,eAAeu9E,oBACf9B,EAAGn7E,SAGP,OAAO,MAGTs2E,EAAAz4E,UAAAi+E,cAAA,SACEX,EACA13E,EACAmI,EACAyvE,GAKA,IAAI1vE,EAAU,IAAI5J,MAClB,EAAG,CACD,IAAI8T,EAASja,KAAK+hF,yBAAyBxC,EAAI13E,EAAOmI,GACtD,IAAKiK,EAAQ,OAAO,KACpBlK,EAAQlK,KAA0BoU,SAC3BslE,EAAG35B,KAAKl/C,EAAAC,MAAM0Q,QAEvB,IAAI26B,EAAM71B,EAAAxU,KAAK6M,wBAAwBzE,EAASC,EAAYnI,EAAO03E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAEzF,OADAsmE,EAAG35B,KAAKl/C,EAAAC,MAAMy9C,WACPpS,GAGT0oC,EAAAz4E,UAAA8/E,yBAAA,SACExC,EACAyC,EACAC,GAKA,IAAK1C,EAAG55B,iBAKN,OAJA3lD,KAAKuG,MACH0V,EAAAnY,eAAeu9E,oBACf9B,EAAGn7E,SAEE,KAET,IAAIwL,EAAauM,EAAAxU,KAAKe,2BAA2B62E,EAAGp5B,iBAAkBo5B,EAAGn7E,SACrEyD,EAAQm6E,EACRzC,EAAG35B,KAAKl/C,EAAAC,MAAM+6C,eAChB75C,GAASpB,EAAApE,YAAY6/E,qBAGvB,IAAI55E,EAA8B,KAC9Bi3E,EAAG35B,KAAKl/C,EAAAC,MAAMw9C,SAChB77C,EAAOtI,KAAK8gF,UAAUvB,IAGxB,IAAIv2E,EAAiC,KACrC,GAAIu2E,EAAG35B,KAAKl/C,EAAAC,MAAMm7C,SAQhB,GAPIj6C,EAAQpB,EAAApE,YAAYwjB,SACtB7lB,KAAKuG,MACH0V,EAAAnY,eAAeq+E,iDACf5C,EAAGn7E,WAGP4E,EAAchJ,KAAKoiF,gBAAgB7C,EAAI,IACrB,OAAO,UAErB13E,EAAQpB,EAAApE,YAAYwpB,MAChBhkB,EAAQpB,EAAApE,YAAYwjB,SACxB7lB,KAAKuG,MACH0V,EAAAnY,eAAeowD,wCACftkD,EAAWxL,OAGLkE,GACVtI,KAAKuG,MACH0V,EAAAnY,eAAegqD,cACfyxB,EAAGn7E,MAAMm7E,EAAGtmE,MAIlB,IAAI7U,EAAQsC,EAAAE,MAAMd,KAAK8J,EAAWxL,MAAOm7E,EAAGn7E,SAM5C,OALKyD,EAAQpB,EAAApE,YAAY6/E,qBAAwBl5E,GAC/ChJ,KAAKuG,MACH0V,EAAAnY,eAAeu+E,iEACfj+E,GAEG+X,EAAAxU,KAAK+M,0BACV9E,EACAtH,EACAU,EACAi5E,EACAp6E,EACAzD,IAIJs2E,EAAAz4E,UAAAg+E,UAAA,SACEV,EACA13E,EACAmI,EACAyvE,GAKA,GAAIF,EAAGz7D,QAAUpd,EAAAC,MAAMU,WAKrB,OAJArH,KAAKuG,MACH0V,EAAAnY,eAAeu9E,oBACf9B,EAAGn7E,SAEE,KAET,IAAIwL,EAAauM,EAAAxU,KAAKe,2BAA2B62E,EAAGp5B,iBAAkBo5B,EAAGn7E,SACzE,GAAIm7E,EAAGz7D,QAAUpd,EAAAC,MAAM89C,UAKrB,OAJAzkD,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAEP,KAGT,IADA,IAAI2L,EAAU,IAAI5J,OACVo5E,EAAG35B,KAAKl/C,EAAAC,MAAM+9C,aAAa,CACjC,IAAIzqC,EAASja,KAAKsiF,eAAe/C,EAAI94E,EAAApE,YAAYyF,MACjD,IAAKmS,EAAQ,OAAO,KAEpB,GADAlK,EAAQlK,KAA2BoU,IAC9BslE,EAAG35B,KAAKl/C,EAAAC,MAAM0Q,OAAQ,CACzB,GAAIkoE,EAAG35B,KAAKl/C,EAAAC,MAAM+9C,YAChB,MAMA,OAJA1kD,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAEP,MAIb,IAAI4tC,EAAM71B,EAAAxU,KAAK8I,sBACbb,EACAG,EACAC,EACAnI,EACA03E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAGxB,OADAsmE,EAAG35B,KAAKl/C,EAAAC,MAAMy9C,WACPpS,GAGT0oC,EAAAz4E,UAAAqgF,eAAA,SACE/C,EACAyC,GAKA,IAAKzC,EAAG55B,iBAKN,OAJA3lD,KAAKuG,MACH0V,EAAAnY,eAAeu9E,oBACf9B,EAAGn7E,SAEE,KAET,IAAIwL,EAAauM,EAAAxU,KAAKe,2BAA2B62E,EAAGp5B,iBAAkBo5B,EAAGn7E,SACrE9C,EAA2B,KAC/B,OAAIi+E,EAAG35B,KAAKl/C,EAAAC,MAAMm7C,WAChBxgD,EAAQtB,KAAKoiF,gBAAgB7C,EAAI,IACd,KAEdpjE,EAAAxU,KAAKgJ,2BACVf,EACAtO,EACA0gF,EACAt7E,EAAAE,MAAMd,KAAK8J,EAAWxL,MAAOm7E,EAAGn7E,WAIpCs2E,EAAAz4E,UAAAsgF,YAAA,SACEhD,GAKA,IAAIn1E,EAA0B,KAC9B,GACEm1E,EAAGj6B,MAAK,IAAS5+C,EAAAC,MAAMy9C,WACvBm7B,EAAGx8B,WAAar8C,EAAAC,MAAM+9C,aACrB66B,EAAGt8B,sBAEE74C,EAAOpK,KAAKoiF,gBAAgB7C,IAAM,OAAO,KAGjD,IAAIvtC,EAAM71B,EAAAxU,KAAK4L,sBAAsBnJ,EAAMm1E,EAAGn7E,SAE9C,OADAm7E,EAAG35B,KAAKl/C,EAAAC,MAAMy9C,WACPpS,GAGT0oC,EAAAz4E,UAAAugF,oBAAA,SACEjD,GAMA,IADA,IAAI1vE,EAAiB,IAAI1J,OACjBo5E,EAAG35B,KAAKl/C,EAAAC,MAAM45C,cAAc,CAClC,IAAIkiC,EAAgBziF,KAAK0iF,mBAAmBnD,GAC5C,IAAKkD,EAAe,OAAO,KAE3B,GADA5yE,EAAehK,KAAwB48E,IAClClD,EAAG35B,KAAKl/C,EAAAC,MAAM0Q,OAAQ,CACzB,GAAIkoE,EAAG35B,KAAKl/C,EAAAC,MAAM45C,aAChB,MAMA,OAJAvgD,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAEP,MAUb,OAN8B,IAA1ByL,EAAevK,QACjBtF,KAAKuG,MACH0V,EAAAnY,eAAe6+E,oCACfpD,EAAGn7E,SAGAyL,GAGT6qE,EAAAz4E,UAAAygF,mBAAA,SACEnD,GAKA,GAAIA,EAAGz7D,QAAUpd,EAAAC,MAAMU,WAAY,CACjC,IAAIuI,EAAauM,EAAAxU,KAAKe,2BACpB62E,EAAGp5B,iBACHo5B,EAAGn7E,SAEDwE,EAA+B,KACnC,GAAI22E,EAAG35B,KAAKl/C,EAAAC,MAAMq4C,SAAU,CAC1B,IAAIz9C,EAAIvB,KAAK8gF,UAAUvB,GACvB,IAAKh+E,EAAG,OAAO,KACf,GAAIA,EAAEwF,MAAQoV,EAAAtV,SAASwO,KAKrB,OAJArV,KAAKuG,MACH0V,EAAAnY,eAAe2jB,wBACflmB,EAAE6C,OAEG,KAETwE,EAAwBrH,EAE1B,OAAO4a,EAAAxU,KAAKgB,oBACViH,EACAhH,EACAlC,EAAAE,MAAMd,KAAK8J,EAAWxL,MAAOm7E,EAAGn7E,UAQpC,OALEpE,KAAKuG,MACH0V,EAAAnY,eAAeu9E,oBACf9B,EAAGn7E,SAGA,MAKTs2E,EAAAz4E,UAAA2gF,gBAAA,SACErD,EACAjwB,QAAA,IAAAA,OAAA,GAKA,IAAIlmD,EAAa,IAAIjD,MACjB08E,EAAiC,KACjCC,GAAe,EACfC,GAAe,EACfz0D,EAAkC,KAItC,GADAtuB,KAAKs/E,oBAAsB,KACvBC,EAAG35B,KAAKl/C,EAAAC,MAAMsR,MAAO,CACvB,IAAIsnE,EAAG35B,KAAKl/C,EAAAC,MAAMw9C,OAgBhB,OAJAnkD,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAEP,KAdP,KADAkqB,EAAWtuB,KAAK8gF,UAAUvB,IACX,OAAO,KAgBxB,GAfMjxD,EAASvnB,MAAQoV,EAAAtV,SAASwO,KAC5BrV,KAAKs/E,oBAAgChxD,EAErCtuB,KAAKuG,MACH0V,EAAAnY,eAAe2jB,wBACf6G,EAASlqB,QAUVm7E,EAAG35B,KAAKl/C,EAAAC,MAAM0Q,OACjB,OAAIkoE,EAAG35B,KAAKl/C,EAAAC,MAAM68C,YACTp6C,GAEPpJ,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAEP,MAKb,MAAQm7E,EAAG35B,KAAKl/C,EAAAC,MAAM68C,aAAa,CACjC,IAAIq+B,EAAQ7hF,KAAKgjF,eAAezD,EAAIjwB,GACpC,IAAKuyB,EAAO,OAAO,KAQnB,OAPIgB,IAAaE,IACf/iF,KAAKuG,MACH0V,EAAAnY,eAAem/E,kDACfJ,EAASjiF,KAAKwD,OAEhB2+E,GAAe,GAETlB,EAAM34E,eACZ,QACM45E,GACF9iF,KAAKuG,MACH0V,EAAAnY,eAAeo/E,yDACfrB,EAAMjhF,KAAKwD,OAGf,MAEF,KAAK+X,EAAA5G,cAAcqsE,SACjBkB,GAAe,EACf,MAEF,KAAK3mE,EAAA5G,cAAcuvD,KACjB+d,EAAWhB,EAKf,GADAz4E,EAAWvD,KAAKg8E,IACXtC,EAAG35B,KAAKl/C,EAAAC,MAAM0Q,OAAQ,CACzB,GAAIkoE,EAAG35B,KAAKl/C,EAAAC,MAAM68C,YAChB,MAMA,OAJAxjD,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAEP,MAIb,OAAOgF,GAGTsxE,EAAAz4E,UAAA+gF,eAAA,SACEzD,EACAjwB,QAAA,IAAAA,OAAA,GAKA,IAAI6zB,GAAS,EACTC,GAAa,EACbC,EAA2B,KAC3BC,EAA2B78E,EAAApE,YAAYyF,KAC3C,GAAIwnD,IACEiwB,EAAG35B,KAAKl/C,EAAAC,MAAMk5C,SAChBwjC,EAAa9D,EAAGn7E,QAChBk/E,GAAe78E,EAAApE,YAAYw9C,QAClB0/B,EAAG35B,KAAKl/C,EAAAC,MAAMi5C,YACvByjC,EAAa9D,EAAGn7E,QAChBk/E,GAAe78E,EAAApE,YAAYu9C,WAClB2/B,EAAG35B,KAAKl/C,EAAAC,MAAMg5C,WACvB0jC,EAAa9D,EAAGn7E,QAChBk/E,GAAe78E,EAAApE,YAAYs9C,SAEzB4/B,EAAGj6B,QAAU5+C,EAAAC,MAAM8hB,UAAU,CAC/B,IAAIq9B,EAAQy5B,EAAG15B,OACf05B,EAAGz7D,OACCy7D,EAAGj6B,QAAU5+C,EAAAC,MAAMw9C,OACrBo7B,EAAGt5B,QAAQH,GACNu9B,IAAYA,EAAa9D,EAAGn7E,SACjCk/E,GAAe78E,EAAApE,YAAYomB,UAE3B82D,EAAGr5B,MAAMJ,GAef,GAXIy5B,EAAG35B,KAAKl/C,EAAAC,MAAM05C,eACZijC,EACFtjF,KAAKuG,MACH0V,EAAAnY,eAAey/E,+DACfhE,EAAGn7E,SAGLi/E,EAAa9D,EAAGn7E,QAElB++E,GAAS,GAEP5D,EAAG55B,iBAAkB,CAClBw9B,IAAQE,EAAa9D,EAAGn7E,SAC7B,IAAIwL,EAAauM,EAAAxU,KAAKe,2BAA2B62E,EAAGp5B,iBAAkBo5B,EAAGn7E,SACrEkE,EAA8B,KASlC,IARI86E,EAAa7D,EAAG35B,KAAKl/C,EAAAC,MAAM29C,YACzB6+B,GACFnjF,KAAKuG,MACH0V,EAAAnY,eAAe69E,oCACf/xE,EAAWxL,OAIbm7E,EAAG35B,KAAKl/C,EAAAC,MAAMw9C,QAEhB,KADA77C,EAAOtI,KAAK8gF,UAAUvB,IACX,OAAO,UAElBj3E,EAAO6T,EAAAxU,KAAKc,kBAAkB82E,EAAGn7E,MAAMm7E,EAAGtmE,MAE5C,IAAIjQ,EAAiC,KACrC,GAAIu2E,EAAG35B,KAAKl/C,EAAAC,MAAMm7C,UACZqhC,GACFnjF,KAAKuG,MACH0V,EAAAnY,eAAe0/E,4CACf5zE,EAAWxL,OAGXg/E,EACFpjF,KAAKuG,MACH0V,EAAAnY,eAAe2/E,oDACf7zE,EAAWxL,OAGbg/E,GAAa,IAEfp6E,EAAchJ,KAAKoiF,gBAAgB7C,EAAI,KACrB,OAAO,KAE3B,IAAIsC,EAAQ1lE,EAAAxU,KAAKoB,gBACf6G,EACAtH,EACAU,EACAm6E,EACIhnE,EAAA5G,cAAcuvD,KACdse,EACEjnE,EAAA5G,cAAcqsE,SACdzlE,EAAA5G,cAAcspC,QACpBn4C,EAAAE,MAAMd,KAAYu9E,EAAY9D,EAAGn7E,UAGnC,OADAy9E,EAAMh6E,OAASy7E,EACRzB,EAOT,OALE7hF,KAAKuG,MACH0V,EAAAnY,eAAeu9E,oBACf9B,EAAGn7E,SAGA,MAGTs2E,EAAAz4E,UAAAk+E,cAAA,SACEZ,EACA13E,EACAmI,EACAyvE,GAUA,IAAKF,EAAG55B,iBAKN,OAJA3lD,KAAKuG,MACH0V,EAAAnY,eAAeu9E,oBACf9B,EAAGn7E,MAAMm7E,EAAGtmE,MAEP,KAGT,IAAIrY,EAAOub,EAAAxU,KAAKe,2BAA2B62E,EAAGp5B,iBAAkBo5B,EAAGn7E,SAC/Ds/E,GAAuB,EAEvB7zE,EAA6C,KACjD,GAAI0vE,EAAG35B,KAAKl/C,EAAAC,MAAM25C,UAAW,CAG3B,GAFAojC,EAAiBnE,EAAGz8B,WACpBjzC,EAAiB7P,KAAKwiF,oBAAoBjD,IACrB,OAAO,KAC5B13E,GAASpB,EAAApE,YAAYujB,QAGvB,IAAK25D,EAAG35B,KAAKl/C,EAAAC,MAAM48C,WAKjB,OAJAvjD,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,MAAMm7E,EAAGtmE,KAAM,KAEb,KAGLyqE,EAAiB,IACnBA,EAAiBnE,EAAGz8B,UAGtB,IAAI15C,EAAapJ,KAAK4iF,gBAAgBrD,GACtC,IAAKn2E,EAAY,OAAO,KACxB,IAAIklB,EAAWtuB,KAAKs/E,oBAEhBqE,EAAwC,IAA5B97E,EAAQpB,EAAApE,YAAY6lB,KAChCy7D,IACuB,GAArBv6E,EAAW9D,QACbtF,KAAKuG,MACH0V,EAAAnY,eAAe8/E,+CACfhjF,EAAKwD,OAGLgF,EAAW9D,QAAU8D,EAAW,GAAGJ,aACrChJ,KAAKuG,MACH0V,EAAAnY,eAAe+/E,oDACfjjF,EAAKwD,QAKPyD,EAAQpB,EAAApE,YAAY4lB,KAClB7e,EAAW9D,QACbtF,KAAKuG,MACH0V,EAAAnY,eAAeggF,sCACfljF,EAAKwD,OAKX,IAAIiF,EAAoC,KACxC,GAAIk2E,EAAG35B,KAAKl/C,EAAAC,MAAMw9C,UAChB96C,EAAarJ,KAAK8gF,UAAUvB,GAAI,EAAMoE,IACrB,OAAO,KAGrBt6E,IACHA,EAAa8S,EAAAxU,KAAKc,kBAChB82E,EAAGn7E,MAAMm7E,EAAGtmE,MAET0qE,GACH3jF,KAAKuG,MACH0V,EAAAnY,eAAegqD,cACfzkD,EAAWjF,QAKjB,IAAI4O,EAAYmJ,EAAAxU,KAAKwB,gBACnBC,EACAC,EACAilB,GACA,EACAixD,EAAGn7E,MAAMs/E,EAAgBnE,EAAGtmE,MAG1BhG,EAAyB,KAC7B,GAAIssE,EAAG35B,KAAKl/C,EAAAC,MAAM89C,YAShB,GARI58C,EAAQpB,EAAApE,YAAYwjB,SACtB7lB,KAAKuG,MACH0V,EAAAnY,eAAesrD,yDACfmwB,EAAGn7E,WAIP6O,EAAOjT,KAAK+jF,oBAAoBxE,GAAI,IACzB,OAAO,UACP13E,EAAQpB,EAAApE,YAAYwjB,SAC/B7lB,KAAKuG,MACH0V,EAAAnY,eAAeurD,gFACfkwB,EAAGn7E,MAAMm7E,EAAGtmE,MAIhB,IAAI+4B,EAAM71B,EAAAxU,KAAKoL,0BACbnS,EACAiP,EACAmD,EACAC,EACAjD,EACAnI,EACA03E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAGxB,OADAsmE,EAAG35B,KAAKl/C,EAAAC,MAAMy9C,WACPpS,GAGT0oC,EAAAz4E,UAAA+hF,wBAAA,SAAwBzE,GACtB,IACI3+E,EADA6+E,EAAWF,EAAGz8B,SAEdmhC,GAAU,EAOd,GAAI1E,EAAGp/B,OAASz5C,EAAAC,MAAM6Q,UAMpB,GAJE5W,EADE2+E,EAAG55B,iBACExpC,EAAAxU,KAAKe,2BAA2B62E,EAAGp5B,iBAAkBo5B,EAAGn7E,SAExD+X,EAAAxU,KAAK2C,gCAAgCi1E,EAAGn7E,MAAMm7E,EAAGtmE,OAErDsmE,EAAG35B,KAAKl/C,EAAAC,MAAM48C,WAKjB,OAJAvjD,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,MAAMm7E,EAAGtmE,KAAM,KAEb,UAQTgrE,GAAU,EACVxgF,OAAO87E,EAAGp/B,OAASz5C,EAAAC,MAAM48C,WACzB3iD,EAAOub,EAAAxU,KAAK2C,gCAAgCi1E,EAAGn7E,MAAMm7E,EAAGz8B,WAK1D,IAAI4gC,EAAiBnE,EAAGtmE,IACpB7P,EAAapJ,KAAK4iF,gBAAgBrD,GACtC,OAAKn2E,EAEEpJ,KAAKkkF,8BAA8B3E,EAAI3+E,EAAMwI,EAAY66E,EAASxE,EAAUiE,GAF3D,MAKlBhJ,EAAAz4E,UAAAiiF,8BAAR,SACE3E,EACA3+E,EACAwI,EACA66E,EACAxE,EACAiE,QADA,IAAAjE,OAAiB,QACjB,IAAAiE,OAAuB,GAEnBjE,EAAW,IAAGA,EAAW7+E,EAAKwD,MAAMmB,OACpCm+E,EAAiB,IAAGA,EAAiBjE,GAEzC,IAAIp2E,EAAoC,KACxC,GAAIk2E,EAAG35B,KAAKl/C,EAAAC,MAAMw9C,QAEhB,KADA96C,EAAarJ,KAAK8gF,UAAUvB,IACX,OAAO,UAExBl2E,EAAa8S,EAAAxU,KAAKc,kBAAkB82E,EAAGn7E,MAAMm7E,EAAGtmE,MAChDjZ,KAAKuG,MACH0V,EAAAnY,eAAegqD,cACfzkD,EAAWjF,OAIf,GAAI6/E,IACG1E,EAAG35B,KAAKl/C,EAAAC,MAAM09C,oBAKjB,OAJArkD,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,MAAMm7E,EAAGtmE,KAAM,MAEb,KAIX,IAQIhG,EARAD,EAAYmJ,EAAAxU,KAAKwB,gBACnBC,EACAC,EACA,MACA,EACAk2E,EAAGn7E,MAAMs/E,EAAgBnE,EAAGtmE,MAI9B,GAAIgrE,EACFhxE,EAAOjT,KAAKogF,eAAeb,GAAI,OAC1B,CACL,IAAKA,EAAG35B,KAAKl/C,EAAAC,MAAM89C,WAKjB,OAJAzkD,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,MAAMm7E,EAAGtmE,KAAM,KAEb,KAEThG,EAAOjT,KAAK+jF,oBAAoBxE,GAAI,GAEtC,IAAKtsE,EAAM,OAAO,KAElB,IAAIrH,EAAcuQ,EAAAxU,KAAKoL,0BACrBnS,EACA,KACAoS,EACAC,EACA,KACAgxE,EAAUx9E,EAAApE,YAAYwK,MAAQpG,EAAApE,YAAYyF,KAC1Cy3E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAExB,OAAOkD,EAAAxU,KAAKgF,yBAAyBf,IAGvC8uE,EAAAz4E,UAAAo+E,sBAAA,SACEd,EACA13E,EACAmI,EACAyvE,GAUA,IAAIn3D,EAAci3D,EAAGp/B,OAASz5C,EAAAC,MAAMorB,UAEpC,IAAKwtD,EAAG55B,iBAKN,OAJA3lD,KAAKuG,MACH0V,EAAAnY,eAAeu9E,oBACf9B,EAAGn7E,SAEE,KAGT,IAKIyL,EALAD,EAAauM,EAAAxU,KAAKe,2BACpB62E,EAAGp5B,iBACHo5B,EAAGn7E,SAIL,GAAIm7E,EAAG35B,KAAKl/C,EAAAC,MAAM25C,UAAW,CAE3B,KADAzwC,EAAiB7P,KAAKwiF,oBAAoBjD,IACrB,OAAO,KAC5B13E,GAASpB,EAAApE,YAAYujB,aAErB/V,KAGF,IAAIjH,EAA+B,KACnC,GAAI22E,EAAG35B,KAAKl/C,EAAAC,MAAMq4C,SAAU,CAC1B,IAAIz9C,EAAIvB,KAAK8gF,UAAUvB,GACvB,IAAKh+E,EAAG,OAAO,KACf,GAAIA,EAAEwF,MAAQoV,EAAAtV,SAASwO,KAKrB,OAJArV,KAAKuG,MACH0V,EAAAnY,eAAe2jB,wBACflmB,EAAE6C,OAEG,KAETwE,EAAwBrH,EAG1B,IAAIuO,EAAqC,KACzC,GAAIyvE,EAAG35B,KAAKl/C,EAAAC,MAAMw4C,YAAa,CACzB72B,GACFtoB,KAAKuG,MACH0V,EAAAnY,eAAeqgF,oDACf5E,EAAGn7E,SAGP,EAAG,CACD,IAAIkE,EAAOtI,KAAK8gF,UAAUvB,GAC1B,IAAKj3E,EAAM,OAAO,KACbggB,IACExY,IAAiBA,MACtBA,EAAgBjK,KAAeyC,UAE1Bi3E,EAAG35B,KAAKl/C,EAAAC,MAAM0Q,QAGzB,IAAKkoE,EAAG35B,KAAKl/C,EAAAC,MAAM89C,WAKjB,OAJAzkD,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAEP,KAGT,IACIwH,EADAmE,EAAU,IAAI5J,MAyBlB,GAvBImiB,GACF7kB,QAAQqM,GACRlE,EAAcuQ,EAAAxU,KAAK6K,2BACjB5C,EACAC,EACAjH,EACAmH,EACAC,EACAnI,EACA03E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,OAGxBrN,EAAcuQ,EAAAxU,KAAKgI,uBACjBC,EACAC,EACAjH,EACAkH,EACAC,EACAC,EACAnI,EACA03E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,OAGrBsmE,EAAG35B,KAAKl/C,EAAAC,MAAM+9C,YACjB,EAAG,CACD,IAAIzqC,EAASja,KAAKokF,iBAAiB7E,EAAI3zE,GACvC,IAAKqO,EAAQ,OAAO,KACpBA,EAAOrS,OAASgE,EAChBmE,EAAQlK,KAA2BoU,UAC3BslE,EAAG35B,KAAKl/C,EAAAC,MAAM+9C,aAE1B,OAAO94C,GAGT8uE,EAAAz4E,UAAAoiF,qBAAA,SAAqB9E,GAInB,IACI3+E,EADA6+E,EAAWF,EAAGz8B,SASlB,GALEliD,EADE2+E,EAAG55B,iBACExpC,EAAAxU,KAAKe,2BAA2B62E,EAAGp5B,iBAAkBo5B,EAAGn7E,SAExD+X,EAAAxU,KAAK2C,gCAAgCi1E,EAAGn7E,MAAMm7E,EAAGtmE,OAGrDsmE,EAAG35B,KAAKl/C,EAAAC,MAAM89C,WAKjB,OAJAzkD,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,MAAMm7E,EAAGtmE,KAAM,KAEb,KAGT,IAAIlJ,EAAU,IAAI5J,MACdyF,EAAcuQ,EAAAxU,KAAKgI,uBACrB/O,KAEA,KACA,KACAmP,EACA,KACAtJ,EAAApE,YAAYyF,KACZy3E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAExB,IAAKsmE,EAAG35B,KAAKl/C,EAAAC,MAAM+9C,YACjB,EAAG,CACD,IAAIzqC,EAASja,KAAKokF,iBAAiB7E,EAAI3zE,GACvC,IAAKqO,EAAQ,OAAO,KACpBA,EAAOrS,OAASgE,EAChBmE,EAAQlK,KAA2BoU,UAC3BslE,EAAG35B,KAAKl/C,EAAAC,MAAM+9C,aAE1B,OAAOvoC,EAAAxU,KAAKgE,sBAAsBC,IAGpC8uE,EAAAz4E,UAAAmiF,iBAAA,SACE7E,EACA33E,GAcA,IAJA,IAAI63E,EAAWF,EAAGtmE,IACdqP,EAAc1gB,EAAOb,MAAQoV,EAAAtV,SAASqU,qBAEtClL,EAAa,IAAI7J,MACdo5E,EAAG35B,KAAKl/C,EAAAC,MAAMg+C,KAAK,CACxB,IAAI5oC,EAAY/b,KAAK0/E,eAAeH,GACpC,IAAKxjE,EAAW,MACZuM,GACFtoB,KAAKuG,MACH0V,EAAAnY,eAAe88E,8BACf7kE,EAAU3X,OAGd4L,EAAWnK,KAAoBkW,GAIjC,IAAIlU,EAAQD,EAAOC,MAAQpB,EAAApE,YAAYwjB,QAGnCyC,IAAazgB,GAASpB,EAAApE,YAAYo2E,SAElC8G,EAAG35B,KAAKl/C,EAAAC,MAAMk5C,SACZv3B,GACFtoB,KAAKuG,MACH0V,EAAAnY,eAAe68E,gCACfpB,EAAGn7E,QAAS,UAGhByD,GAASpB,EAAApE,YAAYw9C,QACZ0/B,EAAG35B,KAAKl/C,EAAAC,MAAMg5C,UACnBr3B,GACFtoB,KAAKuG,MACH0V,EAAAnY,eAAe68E,gCACfpB,EAAGn7E,QAAS,WAGhByD,GAASpB,EAAApE,YAAYs9C,SACZ4/B,EAAG35B,KAAKl/C,EAAAC,MAAMi5C,aACnBt3B,GACFtoB,KAAKuG,MACH0V,EAAAnY,eAAe68E,gCACfpB,EAAGn7E,QAAS,aAGhByD,GAASpB,EAAApE,YAAYu9C,WAGvB,IAAI0kC,EAAmB,EACnBC,EAAiB,EACjBC,EAAqB,EACrBC,EAAmB,EACnBlF,EAAG35B,KAAKl/C,EAAAC,MAAMoT,SACZuO,GACFtoB,KAAKuG,MACH0V,EAAAnY,eAAe68E,gCACfpB,EAAGn7E,QAAS,UAGhByD,GAASpB,EAAApE,YAAY0X,OACrBuqE,EAAc/E,EAAGz8B,SACjByhC,EAAYhF,EAAGtmE,MAEfpR,GAASpB,EAAApE,YAAY+rB,SACjBmxD,EAAG35B,KAAKl/C,EAAAC,MAAM+hB,YACZJ,GACFtoB,KAAKuG,MACH0V,EAAAnY,eAAe68E,gCACfpB,EAAGn7E,QAAS,YAGhByD,GAASpB,EAAApE,YAAYqmB,SACrB87D,EAAgBjF,EAAGz8B,SACnB2hC,EAAclF,EAAGtmE,KAEfrR,EAAOC,MAAQpB,EAAApE,YAAYujB,UAC7B/d,GAASpB,EAAApE,YAAYmwD,kBAIzB,IAAIkyB,EAAqB,EACrBC,EAAmB,EACnBpF,EAAG35B,KAAKl/C,EAAAC,MAAM8hB,YAChB5gB,GAASpB,EAAApE,YAAYomB,SACrBi8D,EAAgBnF,EAAGz8B,SACnB6hC,EAAcpF,EAAGtmE,KAInB,IAAI6sC,EAAQy5B,EAAG15B,OACXyJ,GAAgB,EAChBzlC,GAAW,EAGX85D,GAAW,EACXn0C,EAAgB,EAChBo1C,EAAc,EAwDlB,GAvDKt8D,IACCi3D,EAAG35B,KAAKl/C,EAAAC,MAAMshB,KACZs3D,EAAGj6B,MAAK,EAAM5+C,EAAA03C,mBAAmB8G,SAAWx+C,EAAAC,MAAMU,YAAek4E,EAAGt8B,mBAYtEs8B,EAAGr5B,MAAMJ,IAXTj+C,GAASpB,EAAApE,YAAY4lB,IACrB4B,GAAW,EACX2lB,EAAW+vC,EAAGz8B,SACd8hC,EAASrF,EAAGtmE,IACRpR,EAAQpB,EAAApE,YAAYomB,UACtBzoB,KAAKuG,MACH0V,EAAAnY,eAAe68E,gCACfpB,EAAGn7E,MAAMsgF,EAAeC,GAAc,aAMnCpF,EAAG35B,KAAKl/C,EAAAC,MAAMuhB,KACnBq3D,EAAGj6B,MAAK,EAAM5+C,EAAA03C,mBAAmB8G,SAAWx+C,EAAAC,MAAMU,YAAek4E,EAAGt8B,mBAYtEs8B,EAAGr5B,MAAMJ,IAXTj+C,GAASpB,EAAApE,YAAY6lB,IAAMzhB,EAAApE,YAAY6lB,IACvCy7D,GAAW,EACXn0C,EAAW+vC,EAAGz8B,SACd8hC,EAASrF,EAAGtmE,IACRpR,EAAQpB,EAAApE,YAAYomB,UACtBzoB,KAAKuG,MACH0V,EAAAnY,eAAe68E,gCACfpB,EAAGn7E,MAAMsgF,EAAeC,GAAc,aAMnCpF,EAAG35B,KAAKl/C,EAAAC,MAAM2Q,eAEvBg4C,GAAgB,GADhBznD,GAASpB,EAAApE,YAAYiV,aAET7Q,EAAApE,YAAY0X,QACtB/Z,KAAKuG,MACH0V,EAAAnY,eAAe68E,gCACfpB,EAAGn7E,MAAMkgF,EAAaC,GAAY,UAGlC18E,EAAQpB,EAAApE,YAAYqmB,UACtB1oB,KAAKuG,MACH0V,EAAAnY,eAAe68E,gCACfpB,EAAGn7E,MAAMogF,EAAeC,GAAc,YAGtC58E,EAAQpB,EAAApE,YAAYomB,UACtBzoB,KAAKuG,MACH0V,EAAAnY,eAAe68E,gCACfpB,EAAGn7E,MAAMsgF,EAAeC,GAAc,eAMzCr1B,IAAkBiwB,EAAG55B,iBAKxB,OAJA3lD,KAAKuG,MACH0V,EAAAnY,eAAeu9E,oBACf9B,EAAGn7E,SAEE,KAGT,IAAIxD,EAAO0uD,EACPnzC,EAAAxU,KAAKsE,4BAA4BszE,EAAGn7E,SACpC+X,EAAAxU,KAAKe,2BAA2B62E,EAAGp5B,iBAAkBo5B,EAAGn7E,SACxDyL,EAA6C,KACjD,GAAI0vE,EAAG35B,KAAKl/C,EAAAC,MAAM25C,UAAW,CAC3B,IAAIukC,EAAsBtF,EAAGz8B,SAE7B,KADAjzC,EAAiB7P,KAAKwiF,oBAAoBjD,IACrB,OAAO,KACxBjwB,EACFtvD,KAAKuG,MACH0V,EAAAnY,eAAeghF,2DACfvF,EAAGn7E,MAAMygF,EAAqBtF,EAAGtmE,MAE1B4Q,GAAY85D,EACrB3jF,KAAKuG,MACH0V,EAAAnY,eAAeihF,wCACfxF,EAAGn7E,MAAMygF,EAAqBtF,EAAGtmE,MAGnCpR,GAASpB,EAAApE,YAAYujB,QAKzB,GAAI25D,EAAG35B,KAAKl/C,EAAAC,MAAM48C,WAAY,CAC5B,IAAImgC,EAAiBnE,EAAGz8B,SACpB15C,EAAapJ,KAAK4iF,gBAAgBrD,EAAIjwB,GAC1C,IAAKlmD,EAAY,OAAO,KACxB,IAAIklB,EAAWtuB,KAAKs/E,oBACpB,GAAIhwB,EACF,IAAK,IAAIjvD,EAAI,EAAGuK,EAAIxB,EAAW9D,OAAQjF,EAAIuK,IAAKvK,EAAG,CACjD,IAAIkhF,EAAYn4E,EAAW/I,GAC3B,GAAIkhF,EAAUt5E,MACZxB,EAAApE,YAAYw9C,OACZp5C,EAAApE,YAAYu9C,UACZn5C,EAAApE,YAAYs9C,QACZl5C,EAAApE,YAAYomB,UACX,CACD,IAAIhT,EAA2B0G,EAAAxU,KAAK+K,uBAClC6uE,EAAU3gF,KACV2gF,EAAUj5E,KACV,KACA,KACAi5E,EAAU15E,MAAQpB,EAAApE,YAAY+rB,SAC9BmzD,EAAUn9E,OAEZqR,EAAyBoF,eAAiBxa,EAC1CoV,EAAyB7N,OAASA,EAClC25E,EAAU9rE,yBAA2BA,EACrC7N,EAAOmI,QAAQlK,KAAK4P,SAGfoU,EACLzgB,EAAW9D,QACbtF,KAAKuG,MACH0V,EAAAnY,eAAeggF,sCACfljF,EAAKwD,OAGAu/E,IACgB,GAArBv6E,EAAW9D,QACbtF,KAAKuG,MACH0V,EAAAnY,eAAe8/E,+CACfhjF,EAAKwD,OAGLgF,EAAW9D,QAAU8D,EAAW,GAAGJ,aACrChJ,KAAKuG,MACH0V,EAAAnY,eAAe+/E,oDACfjjF,EAAKwD,QAKX,IAAIiF,EAAoC,KACxC,GAAIk2E,EAAG35B,KAAKl/C,EAAAC,MAAMw9C,QAahB,GAZIvjD,EAAKmG,MAAQoV,EAAAtV,SAASyQ,YACxBtX,KAAKuG,MACH0V,EAAAnY,eAAekhF,2DACfzF,EAAGn7E,SAEIu/E,GACT3jF,KAAKuG,MACH0V,EAAAnY,eAAemhF,oDACf1F,EAAGn7E,WAGPiF,EAAarJ,KAAK8gF,UAAUvB,EAAI3+E,EAAKmG,MAAQoV,EAAAtV,SAASyQ,aAAeqsE,IACpD,OAAO,UAExBt6E,EAAa8S,EAAAxU,KAAKc,kBAAkB82E,EAAGn7E,MAAMm7E,EAAGtmE,MAC3C0qE,GAAY/iF,EAAKmG,MAAQoV,EAAAtV,SAASyQ,aACrCtX,KAAKuG,MACH0V,EAAAnY,eAAegqD,cACfzkD,EAAWjF,OAKjB,IAAI4O,EAAYmJ,EAAAxU,KAAKwB,gBACnBC,EACAC,EACAilB,GACA,EACAixD,EAAGn7E,MAAMs/E,EAAgBnE,EAAGtmE,MAG1BhG,EAAyB,KAC7B,GAAIssE,EAAG35B,KAAKl/C,EAAAC,MAAM89C,YAahB,GAZI58C,EAAQpB,EAAApE,YAAYwjB,QACtB7lB,KAAKuG,MACH0V,EAAAnY,eAAesrD,yDACfmwB,EAAGn7E,SAEIyD,EAAQpB,EAAApE,YAAYqmB,UAC7B1oB,KAAKuG,MACH0V,EAAAnY,eAAeohF,qEACf3F,EAAGn7E,QAASxD,EAAKwE,QAGrB6N,EAAOjT,KAAK+jF,oBAAoBxE,GAAI,IACzB,OAAO,UACP13E,EAAQpB,EAAApE,YAAYwjB,SAAayC,GAC5CtoB,KAAKuG,MACH0V,EAAAnY,eAAeurD,gFACfkwB,EAAGn7E,SAIP,IAAI+gF,EAAYhpE,EAAAxU,KAAKwL,wBACnBvS,EACAiP,EACAmD,EACAC,EACAjD,EACAnI,EACA03E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAGxB,OADAsmE,EAAG35B,KAAKl/C,EAAAC,MAAMy9C,WACP+gC,EAEF,GAAI71B,EACTtvD,KAAKuG,MACH0V,EAAAnY,eAAeshF,sCACfxkF,EAAKwD,WAGF,KAAIylB,IAAY85D,EAOhB,CACD97E,EAAQpB,EAAApE,YAAYqmB,UACtB1oB,KAAKuG,MACH0V,EAAAnY,eAAe68E,gCACfpB,EAAGn7E,MAAMogF,EAAeC,GAAc,YAItC58E,EAAQpB,EAAApE,YAAY4lB,KACtBjoB,KAAKuG,MACH0V,EAAAnY,eAAe68E,gCACfpB,EAAGn7E,MAzOW,EACF,GAwOgB,OAI5ByD,EAAQpB,EAAApE,YAAY6lB,KACtBloB,KAAKuG,MACH0V,EAAAnY,eAAe68E,gCACfpB,EAAGn7E,MAAMorC,EAAUo1C,GAAS,OAIhC,IAAIt8E,EAA8B,KAUlC,GATIi3E,EAAG35B,KAAKl/C,EAAAC,MAAM29C,WAChBtkD,KAAKuG,MACH0V,EAAAnY,eAAeuhF,sCACf9F,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAGtBsmE,EAAG35B,KAAKl/C,EAAAC,MAAM+6C,eAChB75C,GAASpB,EAAApE,YAAY6/E,qBAEnB3C,EAAG35B,KAAKl/C,EAAAC,MAAMw9C,QAEhB,KADA77C,EAAOtI,KAAK8gF,UAAUvB,IACX,OAAO,UAElBv/E,KAAKuG,MACH0V,EAAAnY,eAAegqD,cACfyxB,EAAGn7E,SAGP,IAAI4E,EAAiC,KACrC,GAAIu2E,EAAG35B,KAAKl/C,EAAAC,MAAMm7C,WAChB94C,EAAchJ,KAAKoiF,gBAAgB7C,IACjB,OAAO,KAE3B,IAAIn7E,EAAQm7E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,KAC7BpR,EAAQpB,EAAApE,YAAY6/E,sBAA0Br6E,EAAQpB,EAAApE,YAAY0X,QAAWuO,GAAetf,IAC/FhJ,KAAKuG,MACH0V,EAAAnY,eAAeu+E,iEACfj+E,GAGJ,IAAIkhF,EAAWnpE,EAAAxU,KAAK+K,uBAClB9R,EACA0H,EACAU,EACAgH,EACAnI,EACAzD,GAGF,OADAm7E,EAAG35B,KAAKl/C,EAAAC,MAAMy9C,WACPkhC,EApEPtlF,KAAKuG,MACH0V,EAAAnY,eAAeurD,gFACfzuD,EAAKwD,OAoET,OAAO,MAGTs2E,EAAAz4E,UAAAq+E,eAAA,SACEf,EACA13E,EACAmI,EACAyvE,GAKA,GAAIF,EAAG55B,iBAAkB,CACvB,IAAI/1C,EAAauM,EAAAxU,KAAKe,2BAA2B62E,EAAGp5B,iBAAkBo5B,EAAGn7E,SACzE,GAAIm7E,EAAG35B,KAAKl/C,EAAAC,MAAM89C,WAAY,CAS5B,IARA,IAAI10C,EAAU,IAAI5J,MACdzE,EAAKya,EAAAxU,KAAK0L,2BACZzD,EACAG,EACAC,EACAnI,EACA03E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,OAEhBsmE,EAAG35B,KAAKl/C,EAAAC,MAAM+9C,aAAa,CACjC,IAAIzqC,EAASja,KAAKw/E,uBAAuBD,EAAI79E,GAC7C,IAAKuY,EAAQ,OAAO,KACpBA,EAAOrS,OAASlG,EAChBqO,EAAQlK,KAAKoU,GAGf,OADAslE,EAAG35B,KAAKl/C,EAAAC,MAAMy9C,WACP1iD,EAEP1B,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,UAIhBpE,KAAKuG,MACH0V,EAAAnY,eAAeu9E,oBACf9B,EAAGn7E,SAGP,OAAO,MAGTs2E,EAAAz4E,UAAAy+E,YAAA,SACEnB,EACA13E,EACA43E,GAKA,IAAI3uE,EAAuC,KAC3C,GAAIyuE,EAAG35B,KAAKl/C,EAAAC,MAAM89C,WAAY,CAE5B,IADA,IAAI10C,EAAU,IAAI5J,OACVo5E,EAAG35B,KAAKl/C,EAAAC,MAAM+9C,aAAa,CAC/B,IAAIzqC,EAASja,KAAKulF,kBAAkBhG,GACpC,IAAKtlE,EAAQ,OAAO,KAEtB,GADElK,EAAQlK,KAAKoU,IACVslE,EAAG35B,KAAKl/C,EAAAC,MAAM0Q,OAAQ,CACzB,GAAIkoE,EAAG35B,KAAKl/C,EAAAC,MAAM+9C,YAChB,MAMA,OAJA1kD,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAEP,MAIb,GAAIm7E,EAAG35B,KAAKl/C,EAAAC,MAAMu4C,MAAO,CACvB,IAAIqgC,EAAG35B,KAAKl/C,EAAAC,MAAM28C,eAOhB,OAJAtjD,KAAKuG,MACH0V,EAAAnY,eAAe2lB,wBACf81D,EAAGn7E,SAEE,KANP0M,EAAOqL,EAAAxU,KAAK6G,8BAA8B+wE,EAAGjtC,aAAcitC,EAAGn7E,SAgBlE,OALqB,QADjB+M,GADA6gC,EAAM71B,EAAAxU,KAAKkJ,sBAAsBd,EAASe,EAAMjJ,EAAO03E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,OAC1D9H,eACOnR,KAAKm/E,QAAQ95D,IAAIlU,KAC7CnR,KAAKk/E,QAAQr5E,KAAKsL,GAClBnR,KAAKm/E,QAAQ/zD,IAAIja,IAEnBouE,EAAG35B,KAAKl/C,EAAAC,MAAMy9C,WACPpS,EACF,GAAIutC,EAAG35B,KAAKl/C,EAAAC,MAAMo6C,UACvB,GAAIw+B,EAAG35B,KAAKl/C,EAAAC,MAAMu4C,MAAO,CACvB,GAAIqgC,EAAG35B,KAAKl/C,EAAAC,MAAM28C,eAAgB,CAChCxyC,EAAOqL,EAAAxU,KAAK6G,8BAA8B+wE,EAAGjtC,aAAcitC,EAAGn7E,SAC9D,IAAI4tC,EAAM71B,EAAAxU,KAAKkJ,sBAAsB,KAAMC,EAAMjJ,EAAO03E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAC1E9H,EAAe1N,OAAOuuC,EAAI7gC,cAC1BrM,EAASy6E,EAAGz6E,OAQhB,OAPKA,EAAOiU,cAAajU,EAAOiU,YAAc,IAAIoS,KAClDrmB,EAAOiU,YAAYqS,IAAIja,GAClBnR,KAAKm/E,QAAQ95D,IAAIlU,KACpBnR,KAAKk/E,QAAQr5E,KAAKsL,GAClBnR,KAAKm/E,QAAQ/zD,IAAIja,IAEnBouE,EAAG35B,KAAKl/C,EAAAC,MAAMy9C,WACPpS,EAEPhyC,KAAKuG,MACH0V,EAAAnY,eAAe2lB,wBACf81D,EAAGn7E,cAIPpE,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,aAIhBpE,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAGhB,OAAO,MAGTs2E,EAAAz4E,UAAAsjF,kBAAA,SACEhG,GAKA,GAAIA,EAAG55B,iBAAkB,CACvB,IAAI/1C,EAAauM,EAAAxU,KAAKe,2BAA2B62E,EAAGp5B,iBAAkBo5B,EAAGn7E,SACrEohF,EAA4C,KAChD,GAAIjG,EAAG35B,KAAKl/C,EAAAC,MAAM23C,IAAK,CACrB,IAAIihC,EAAG55B,eAAej/C,EAAA03C,mBAAmB6G,QAOvC,OAJAjlD,KAAKuG,MACH0V,EAAAnY,eAAeu9E,oBACf9B,EAAGn7E,SAEE,KANPohF,EAAerpE,EAAAxU,KAAKe,2BAA2B62E,EAAGp5B,iBAAkBo5B,EAAGn7E,SAS3E,OAAO+X,EAAAxU,KAAK6J,mBACV5B,EACA41E,EACAA,EACI9+E,EAAAE,MAAMd,KAAK8J,EAAWxL,MAAOohF,EAAaphF,OAC1CwL,EAAWxL,OAQnB,OALEpE,KAAKuG,MACH0V,EAAAnY,eAAeu9E,oBACf9B,EAAGn7E,SAGA,MAGTs2E,EAAAz4E,UAAAu+E,YAAA,SACEjB,GAOA,IAAIE,EAAWF,EAAGz8B,SACd/yC,EAAsC,KACtCqC,EAA6C,KAC7CqzE,GAAW,EACf,GAAIlG,EAAG35B,KAAKl/C,EAAAC,MAAM89C,WAEhB,IADA10C,EAAU,IAAI5J,OACNo5E,EAAG35B,KAAKl/C,EAAAC,MAAM+9C,aAAa,CACjC,IAAIzqC,EAASja,KAAK0lF,uBAAuBnG,GACzC,IAAKtlE,EAAQ,OAAO,KAEpB,GADAlK,EAAQlK,KAAKoU,IACRslE,EAAG35B,KAAKl/C,EAAAC,MAAM0Q,OAAQ,CACzB,GAAIkoE,EAAG35B,KAAKl/C,EAAAC,MAAM+9C,YAChB,MAMA,OAJA1kD,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAEP,WAIR,GAAIm7E,EAAG35B,KAAKl/C,EAAAC,MAAMo6C,UAAW,CAClC,IAAIw+B,EAAG35B,KAAKl/C,EAAAC,MAAM23C,IAehB,OAJAt+C,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,MAEP,KAdP,IAAIm7E,EAAG55B,iBAOL,OAJA3lD,KAAKuG,MACH0V,EAAAnY,eAAeu9E,oBACf9B,EAAGn7E,SAEE,KANPgO,EAAgB+J,EAAAxU,KAAKe,2BAA2B62E,EAAGp5B,iBAAkBo5B,EAAGn7E,cAgB5EqhF,GAAW,EAGb,GAAIA,GAAYlG,EAAG35B,KAAKl/C,EAAAC,MAAMu4C,MAAO,CACnC,GAAIqgC,EAAG35B,KAAKl/C,EAAAC,MAAM28C,eAAgB,CAChC,IAAIxyC,EAAOqL,EAAAxU,KAAK6G,8BAA8B+wE,EAAGjtC,aAAcitC,EAAGn7E,SAC9D4tC,OAAG,EACH5/B,GACF3O,QAAQsM,GACRiiC,EAAM71B,EAAAxU,KAAK0K,kCAAkCD,EAAetB,EAAMyuE,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,OAExF+4B,EAAM71B,EAAAxU,KAAKqK,sBAAsBjC,EAASe,EAAMyuE,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAExE,IAAI9H,EAAe6gC,EAAI7gC,aAMvB,OALKnR,KAAKm/E,QAAQ95D,IAAIlU,KACpBnR,KAAKk/E,QAAQr5E,KAAKsL,GAClBnR,KAAKm/E,QAAQ/zD,IAAIja,IAEnBouE,EAAG35B,KAAKl/C,EAAAC,MAAMy9C,WACPpS,EAEPhyC,KAAKuG,MACH0V,EAAAnY,eAAe2lB,wBACf81D,EAAGn7E,cAIPpE,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,QAGhB,OAAO,MAGTs2E,EAAAz4E,UAAAyjF,uBAAA,SACEnG,GAKA,GAAIA,EAAG55B,eAAej/C,EAAA03C,mBAAmB6G,QAAS,CAChD,IAAIr1C,EAAauM,EAAAxU,KAAKe,2BAA2B62E,EAAGp5B,iBAAkBo5B,EAAGn7E,SACrEohF,EAA4C,KAChD,GAAIjG,EAAG35B,KAAKl/C,EAAAC,MAAM23C,IAAK,CACrB,IAAIihC,EAAG55B,iBAOL,OAJA3lD,KAAKuG,MACH0V,EAAAnY,eAAeu9E,oBACf9B,EAAGn7E,SAEE,KANPohF,EAAerpE,EAAAxU,KAAKe,2BAA2B62E,EAAGp5B,iBAAkBo5B,EAAGn7E,SAS3E,OAAO+X,EAAAxU,KAAK2K,wBACV1C,EACA41E,EACAA,EACI9+E,EAAAE,MAAMd,KAAK8J,EAAWxL,MAAOohF,EAAaphF,OAC1CwL,EAAWxL,OAQnB,OALEpE,KAAKuG,MACH0V,EAAAnY,eAAeu9E,oBACf9B,EAAGn7E,SAGA,MAGTs2E,EAAAz4E,UAAAs+E,kBAAA,SACEhB,EACAE,GAKA,GAAIF,EAAG55B,iBAAkB,CACvB,IAAI6/B,EAAerpE,EAAAxU,KAAKe,2BAA2B62E,EAAGp5B,iBAAkBo5B,EAAGn7E,SAC3E,GAAIm7E,EAAG35B,KAAKl/C,EAAAC,MAAMm7C,QAAS,CACzB,GAAIy9B,EAAG55B,iBAAkB,CACvB,IAAI/1C,EAAauM,EAAAxU,KAAKe,2BAA2B62E,EAAGp5B,iBAAkBo5B,EAAGn7E,SACrE4tC,EAAM71B,EAAAxU,KAAK0J,4BAA4BzB,EAAY41E,EAAcjG,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAE3F,OADAsmE,EAAG35B,KAAKl/C,EAAAC,MAAMy9C,WACPpS,EAEPhyC,KAAKuG,MACH0V,EAAAnY,eAAeu9E,oBACf9B,EAAGn7E,cAIPpE,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,UAIhBpE,KAAKuG,MACH0V,EAAAnY,eAAeu9E,oBACf9B,EAAGn7E,SAGP,OAAO,MAGTs2E,EAAAz4E,UAAAm+E,eAAA,SACEb,EACAoG,QAAA,IAAAA,OAAA,GAKA,IAAI7/B,EAAQy5B,EAAG15B,OAEXx1C,EAA8B,KAClC,OAFYkvE,EAAGz7D,QAGb,KAAKpd,EAAAC,MAAMwT,MACT9J,EAAYrQ,KAAK4lF,WAAWrG,GAC5B,MAEF,KAAK74E,EAAAC,MAAMklB,MACTxb,EAAYrQ,KAAKkgF,cAAcX,EAAI94E,EAAApE,YAAYwpB,MAAO,KAAM0zD,EAAGz8B,UAC/D,MAEF,KAAKp8C,EAAAC,MAAMyT,SACT/J,EAAYrQ,KAAK6lF,cAActG,GAC/B,MAEF,KAAK74E,EAAAC,MAAM0T,GACThK,EAAYrQ,KAAK8lF,iBAAiBvG,GAClC,MAEF,KAAK74E,EAAAC,MAAMmU,IACTzK,EAAYrQ,KAAK+lF,kBAAkBxG,GACnC,MAEF,KAAK74E,EAAAC,MAAMoU,GACT1K,EAAYrQ,KAAKgmF,iBAAiBzG,GAClC,MAEF,KAAK74E,EAAAC,MAAM44C,IACTlvC,EAAYrQ,KAAKkgF,cAAcX,EAAI94E,EAAApE,YAAYk9C,IAAK,KAAMggC,EAAGz8B,UAC7D,MAEF,KAAKp8C,EAAAC,MAAMo5C,IACT1vC,EAAYrQ,KAAKkgF,cAAcX,EAAI94E,EAAApE,YAAYyF,KAAM,KAAMy3E,EAAGz8B,UAC9D,MAEF,KAAKp8C,EAAAC,MAAM89C,UACTp0C,EAAYrQ,KAAK+jF,oBAAoBxE,EAAIoG,GACzC,MAEF,KAAKj/E,EAAAC,MAAMwU,OACLwqE,GACF3lF,KAAKuG,MACH0V,EAAAnY,eAAemiF,2DACf1G,EAAGn7E,SAGPiM,EAAYrQ,KAAKuiF,YAAYhD,GAC7B,MAEF,KAAK74E,EAAAC,MAAMy9C,UACT,OAAOjoC,EAAAxU,KAAK4I,qBAAqBgvE,EAAGn7E,MAAMm7E,EAAGz8B,WAE/C,KAAKp8C,EAAAC,MAAM0U,OACThL,EAAYrQ,KAAKkmF,qBAAqB3G,GACtC,MAEF,KAAK74E,EAAAC,MAAM2U,MACTjL,EAAYrQ,KAAKmmF,oBAAoB5G,GACrC,MAEF,KAAK74E,EAAAC,MAAM4U,IACTlL,EAAYrQ,KAAKomF,kBAAkB7G,GACnC,MAEF,KAAK74E,EAAAC,MAAM+U,KACTrL,EAAYrQ,KAAKqmF,mBAAmB9G,GACpC,MAEF,KAAK74E,EAAAC,MAAMgV,MACTtL,EAAYrQ,KAAKsmF,oBAAoB/G,GACrC,MAEF,KAAK74E,EAAAC,MAAM0O,KACT,GAAIkqE,EAAGj6B,MAAK,EAAO5+C,EAAA03C,mBAAmB8G,SAAWx+C,EAAAC,MAAMU,WAAY,CACjEgJ,EAAYrQ,KAAKygF,qBAAqBlB,EAAI94E,EAAApE,YAAYyF,KAAM,KAAMy3E,EAAGz8B,UACrE,MAIJ,QACEy8B,EAAGr5B,MAAMJ,GACTz1C,EAAYrQ,KAAKumF,yBAAyBhH,GAU9C,OANKlvE,EAIHkvE,EAAGt5B,QAAQH,IAHXy5B,EAAGr5B,MAAMJ,GACT9lD,KAAK2/E,cAAcJ,IAIdlvE,GAGTqqE,EAAAz4E,UAAA8hF,oBAAA,SACExE,EACAoG,GAOA,IAFA,IAAIlG,EAAWF,EAAGz8B,SACdxzC,EAAa,IAAInJ,OACbo5E,EAAG35B,KAAKl/C,EAAAC,MAAM+9C,aAAa,CACjC,IAAIoB,EAAQy5B,EAAG15B,OACXx1C,EAAYrQ,KAAKogF,eAAeb,EAAIoG,GACxC,GAAKt1E,EAKHkvE,EAAGt5B,QAAQH,GACXx2C,EAAWzJ,KAAKwK,OANF,CACd,GAAIkvE,EAAGp/B,OAASz5C,EAAAC,MAAM0+C,UAAW,OAAO,KACxCk6B,EAAGr5B,MAAMJ,GACT9lD,KAAK2/E,cAAcJ,IAMvB,IAAIvtC,EAAM71B,EAAAxU,KAAK0H,qBAAqBC,EAAYiwE,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAEtE,OADAsmE,EAAG35B,KAAKl/C,EAAAC,MAAMy9C,WACPpS,GAGT0oC,EAAAz4E,UAAA2jF,WAAA,SACErG,GAKA,IAAI3vE,EAA0C,KAC1C2vE,EAAGj6B,MAAK,IAAS5+C,EAAAC,MAAMU,YAAek4E,EAAGt8B,qBAC3Cs8B,EAAGz7D,KAAKpd,EAAA03C,mBAAmB8G,QAC3Bt1C,EAAauM,EAAAxU,KAAKe,2BAA2B62E,EAAGp5B,iBAAkBo5B,EAAGn7E,UAEvE,IAAI4tC,EAAM71B,EAAAxU,KAAK6H,qBAAqBI,EAAY2vE,EAAGn7E,SAEnD,OADAm7E,EAAG35B,KAAKl/C,EAAAC,MAAMy9C,WACPpS,GAGT0oC,EAAAz4E,UAAA4jF,cAAA,SACEtG,GAKA,IAAI3vE,EAA0C,KAC1C2vE,EAAGj6B,MAAK,IAAS5+C,EAAAC,MAAMU,YAAek4E,EAAGt8B,qBAC3Cs8B,EAAGz7D,KAAKpd,EAAA03C,mBAAmB8G,QAC3Bt1C,EAAauM,EAAAxU,KAAKe,2BAA2B62E,EAAGp5B,iBAAkBo5B,EAAGn7E,UAEvE,IAAI4tC,EAAM71B,EAAAxU,KAAKuI,wBAAwBN,EAAY2vE,EAAGn7E,SAEtD,OADAm7E,EAAG35B,KAAKl/C,EAAAC,MAAMy9C,WACPpS,GAGT0oC,EAAAz4E,UAAA6jF,iBAAA,SACEvG,GAKA,IAAIE,EAAWF,EAAGz8B,SACdzyC,EAAYrQ,KAAKogF,eAAeb,GACpC,IAAKlvE,EAAW,OAAO,KAEvB,GAAIkvE,EAAG35B,KAAKl/C,EAAAC,MAAMgV,OAEhB,GAAI4jE,EAAG35B,KAAKl/C,EAAAC,MAAM48C,WAAY,CAC5B,IAAIn1C,EAAYpO,KAAKoiF,gBAAgB7C,GACrC,IAAKnxE,EAAW,OAAO,KAEvB,GAAImxE,EAAG35B,KAAKl/C,EAAAC,MAAM68C,YAAa,CAC7B,IAAIxR,EAAM71B,EAAAxU,KAAKyI,kBAA6BC,EAAuBjC,EAAWmxE,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAEpG,OADAsmE,EAAG35B,KAAKl/C,EAAAC,MAAMy9C,WACPpS,EAEPhyC,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,UAIhBpE,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,UAIhBpE,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,SAGhB,OAAO,MAGTs2E,EAAAz4E,UAAAskF,yBAAA,SACEhH,GAKA,IAAIn1E,EAAOpK,KAAKoiF,gBAAgB7C,GAChC,IAAKn1E,EAAM,OAAO,KAElB,IAAI4nC,EAAM71B,EAAAxU,KAAK+J,0BAA0BtH,GAEzC,OADAm1E,EAAG35B,KAAKl/C,EAAAC,MAAMy9C,WACPpS,GAGT0oC,EAAAz4E,UAAA8jF,kBAAA,SACExG,GAKA,IAAIE,EAAWF,EAAGz8B,SAElB,GAAIy8B,EAAG35B,KAAKl/C,EAAAC,MAAM48C,WAAY,CAC5B,IAAIv6C,EAAgC,KAEpC,GAAIu2E,EAAG35B,KAAKl/C,EAAAC,MAAMklB,OAChB7iB,EAAchJ,KAAKkgF,cAAcX,EAAI94E,EAAApE,YAAYwpB,MAAO,KAAM0zD,EAAGz8B,eAC5D,GAAIy8B,EAAG35B,KAAKl/C,EAAAC,MAAM44C,KACvBv2C,EAAchJ,KAAKkgF,cAAcX,EAAI94E,EAAApE,YAAYk9C,IAAK,KAAMggC,EAAGz8B,eAC1D,GAAIy8B,EAAG35B,KAAKl/C,EAAAC,MAAMo5C,KACvB/2C,EAAchJ,KAAKkgF,cAAcX,EAAI94E,EAAApE,YAAYyF,KAAM,KAAMy3E,EAAGz8B,eAE3D,IAAKy8B,EAAG35B,KAAKl/C,EAAAC,MAAMy9C,cACxBp7C,EAAchJ,KAAKumF,yBAAyBhH,IAC1B,OAAO,KAG3B,GAAIA,EAAGp/B,OAASz5C,EAAAC,MAAMy9C,UAAW,CAC/B,IAAIh2C,EAAwC,KAC5C,IAAKmxE,EAAG35B,KAAKl/C,EAAAC,MAAMy9C,cACjBh2C,EAAYpO,KAAKumF,yBAAyBhH,IAC1B,OAAO,KAGzB,GAAIA,EAAGp/B,OAASz5C,EAAAC,MAAMy9C,UAAW,CAC/B,IAAIvxC,EAAiC,KACrC,IAAK0sE,EAAG35B,KAAKl/C,EAAAC,MAAM68C,YAAa,CAE9B,KADA3wC,EAAc7S,KAAKoiF,gBAAgB7C,IACjB,OAAO,KAEzB,IAAKA,EAAG35B,KAAKl/C,EAAAC,MAAM68C,YAKjB,OAJAxjD,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAEP,KAIX,IAAIiM,EAAYrQ,KAAKogF,eAAeb,GACpC,OAAKlvE,EAEE8L,EAAAxU,KAAKiL,mBACV5J,EACAoF,EACIA,EAAUpD,WACV,KACJ6H,EACAxC,EACAkvE,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MATD,KAavBjZ,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,UAIhBpE,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,UAIhBpE,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAGhB,OAAO,MAGTs2E,EAAAz4E,UAAA+jF,iBAAA,SACEzG,GAKA,IAAIE,EAAWF,EAAGz8B,SAClB,GAAIy8B,EAAG35B,KAAKl/C,EAAAC,MAAM48C,WAAY,CAC5B,IAAIn1C,EAAYpO,KAAKoiF,gBAAgB7C,GACrC,IAAKnxE,EAAW,OAAO,KACvB,GAAImxE,EAAG35B,KAAKl/C,EAAAC,MAAM68C,YAAa,CAC7B,IAAInzC,EAAYrQ,KAAKogF,eAAeb,GACpC,IAAKlvE,EAAW,OAAO,KACvB,IAAIm2E,EAAkC,KACtC,OAAIjH,EAAG35B,KAAKl/C,EAAAC,MAAMo4C,SAChBynC,EAAgBxmF,KAAKogF,eAAeb,IACT,KAEtBpjE,EAAAxU,KAAKiK,kBACVxD,EACAiC,EACAm2E,EACAjH,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAGxBjZ,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,UAIhBpE,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAGhB,OAAO,MAGTs2E,EAAAz4E,UAAAikF,qBAAA,SACE3G,GAKA,IAAIE,EAAWF,EAAGz8B,SAClB,GAAIy8B,EAAG35B,KAAKl/C,EAAAC,MAAM48C,WAAY,CAC5B,IAAIn1C,EAAYpO,KAAKoiF,gBAAgB7C,GACrC,IAAKnxE,EAAW,OAAO,KACvB,GAAImxE,EAAG35B,KAAKl/C,EAAAC,MAAM68C,YAAa,CAC7B,GAAI+7B,EAAG35B,KAAKl/C,EAAAC,MAAM89C,WAAY,CAE5B,IADA,IAAI/wC,EAAQ,IAAIvN,OACRo5E,EAAG35B,KAAKl/C,EAAAC,MAAM+9C,aAAa,CACjC,IAAI+hC,EAAQzmF,KAAK0mF,gBAAgBnH,GACjC,IAAKkH,EAAO,OAAO,KACnB/yE,EAAM7N,KAAiB4gF,GAEzB,IAAIz0C,EAAM71B,EAAAxU,KAAK8L,sBAAsBrF,EAAWsF,EAAO6rE,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAE7E,OADAsmE,EAAG35B,KAAKl/C,EAAAC,MAAMy9C,WACPpS,EAEPhyC,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,UAIhBpE,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,UAIhBpE,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAGhB,OAAO,MAGTs2E,EAAAz4E,UAAAykF,gBAAA,SACEnH,GAGA,IACIjwE,EACAe,EAFAovE,EAAWF,EAAGz8B,SAMlB,GAAIy8B,EAAG35B,KAAKl/C,EAAAC,MAAM83C,MAAO,CACvB,IAAIhvC,EAAQzP,KAAKoiF,gBAAgB7C,GACjC,IAAK9vE,EAAO,OAAO,KACnB,GAAI8vE,EAAG35B,KAAKl/C,EAAAC,MAAMw9C,OAAQ,CAExB,IADA70C,EAAa,IAAInJ,MACVo5E,EAAGj6B,QAAU5+C,EAAAC,MAAM83C,MAAQ8gC,EAAGx8B,WAAar8C,EAAAC,MAAMk4C,SAAW0gC,EAAGx8B,WAAar8C,EAAAC,MAAM+9C,YAAY,CAEnG,KADAr0C,EAAYrQ,KAAKogF,eAAeb,IAChB,OAAO,KACvBjwE,EAAWzJ,KAAKwK,GAElB,OAAO8L,EAAAxU,KAAKiM,iBAAiBnE,EAAOH,EAAYiwE,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAEtEjZ,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,UAMX,GAAIm7E,EAAG35B,KAAKl/C,EAAAC,MAAMk4C,SAAU,CACjC,GAAI0gC,EAAG35B,KAAKl/C,EAAAC,MAAMw9C,OAAQ,CAExB,IADA70C,EAAa,IAAInJ,MACVo5E,EAAGj6B,QAAU5+C,EAAAC,MAAM83C,MAAQ8gC,EAAGx8B,WAAar8C,EAAAC,MAAMk4C,SAAW0gC,EAAGx8B,WAAar8C,EAAAC,MAAM+9C,YAAY,CAEnG,KADAr0C,EAAYrQ,KAAKogF,eAAeb,IAChB,OAAO,KACvBjwE,EAAWzJ,KAAKwK,GAElB,OAAO8L,EAAAxU,KAAKiM,iBAAiB,KAAMtE,EAAYiwE,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAErEjZ,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,UAIhBpE,KAAKuG,MACH0V,EAAAnY,eAAe6iF,0BACfpH,EAAGn7E,SAGP,OAAO,MAGTs2E,EAAAz4E,UAAAkkF,oBAAA,SACE5G,GAKA,IAAIE,EAAWF,EAAGz8B,SACd93C,EAAahL,KAAKoiF,gBAAgB7C,GACtC,IAAKv0E,EAAY,OAAO,KACxB,IAAIgnC,EAAM71B,EAAAxU,KAAKmM,qBAAiC9I,EAAYu0E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAElF,OADAsmE,EAAG35B,KAAKl/C,EAAAC,MAAMy9C,WACPpS,GAGT0oC,EAAAz4E,UAAAmkF,kBAAA,SACE7G,GAQA,IACI51E,EADA81E,EAAWF,EAAGz8B,SAElB,GAAIy8B,EAAG35B,KAAKl/C,EAAAC,MAAM89C,WAAY,CAE5B,IADA,IAAIn1C,EAAa,IAAInJ,OACbo5E,EAAG35B,KAAKl/C,EAAAC,MAAM+9C,aAAa,CAEjC,KADA/6C,EAAO3J,KAAKogF,eAAeb,IAChB,OAAO,KAClBjwE,EAAWzJ,KAAgB8D,GAE7B,IAAIsK,EAA6C,KAC7CC,EAAsC,KACtCC,EAAwC,KAC5C,GAAIorE,EAAG35B,KAAKl/C,EAAAC,MAAM+3C,OAAQ,CACxB,IAAK6gC,EAAG35B,KAAKl/C,EAAAC,MAAM48C,WAKjB,OAJAvjD,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAEP,KAET,IAAKm7E,EAAG55B,iBAKN,OAJA3lD,KAAKuG,MACH0V,EAAAnY,eAAeu9E,oBACf9B,EAAGn7E,SAEE,KAGT,GADA6P,EAAgBkI,EAAAxU,KAAKe,2BAA2B62E,EAAGp5B,iBAAkBo5B,EAAGn7E,UACnEm7E,EAAG35B,KAAKl/C,EAAAC,MAAM68C,YAKjB,OAJAxjD,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAEP,KAET,IAAKm7E,EAAG35B,KAAKl/C,EAAAC,MAAM89C,WAKjB,OAJAzkD,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAEP,KAGT,IADA8P,MACQqrE,EAAG35B,KAAKl/C,EAAAC,MAAM+9C,aAAa,CAEjC,KADA/6C,EAAO3J,KAAKogF,eAAeb,IAChB,OAAO,KAClBrrE,EAAgBrO,KAAgB8D,IAGpC,GAAI41E,EAAG35B,KAAKl/C,EAAAC,MAAMs4C,SAAU,CAC1B,IAAKsgC,EAAG35B,KAAKl/C,EAAAC,MAAM89C,WAKjB,OAJAzkD,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAEP,KAGT,IADA+P,MACQorE,EAAG35B,KAAKl/C,EAAAC,MAAM+9C,aAAa,CAEjC,KADA/6C,EAAO3J,KAAKogF,eAAeb,IAChB,OAAO,KAClBprE,EAAkBtO,KAAgB8D,IAGtC,IAAMuK,IAAmBC,EAKvB,OAJAnU,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,SAEP,KAET,IAAI4tC,EAAM71B,EAAAxU,KAAKqM,mBACb1E,EACA2E,EACAC,EACAC,EACAorE,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAGxB,OADAsmE,EAAG35B,KAAKl/C,EAAAC,MAAMy9C,WACPpS,EAOT,OALEhyC,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAGT,MAGTs2E,EAAAz4E,UAAAw+E,qBAAA,SACElB,EACA13E,EACAmI,EACAyvE,GAKA,GAAIF,EAAG55B,iBAAkB,CACvB,IAAI/kD,EAAOub,EAAAxU,KAAKe,2BAA2B62E,EAAGp5B,iBAAkBo5B,EAAGn7E,SAC/DyL,EAA6C,KACjD,GAAI0vE,EAAG35B,KAAKl/C,EAAAC,MAAM25C,UAAW,CAE3B,KADAzwC,EAAiB7P,KAAKwiF,oBAAoBjD,IACrB,OAAO,KAC5B13E,GAASpB,EAAApE,YAAYujB,QAEvB,GAAI25D,EAAG35B,KAAKl/C,EAAAC,MAAMm7C,QAAS,CACzB,IAAIx5C,EAAOtI,KAAK8gF,UAAUvB,GAC1B,IAAKj3E,EAAM,OAAO,KAClB,IAAI0pC,EAAM71B,EAAAxU,KAAK0M,sBACbzT,EACAiP,EACAvH,EACA0H,EACAnI,EACA03E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAGxB,OADAsmE,EAAG35B,KAAKl/C,EAAAC,MAAMy9C,WACPpS,EAEPhyC,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,UAIhBpE,KAAKuG,MACH0V,EAAAnY,eAAeu9E,oBACf9B,EAAGn7E,SAGP,OAAO,MAGTs2E,EAAAz4E,UAAAokF,mBAAA,SACE9G,GAKA,IAAIE,EAAWF,EAAGz8B,SACd93C,EAAahL,KAAKoiF,gBAAgB7C,EAAE,IACxC,IAAKv0E,EAAY,OAAO,KACxB,IAAIgnC,EAAM71B,EAAAxU,KAAKiN,oBAAoB5J,EAAYu0E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAErE,OADAsmE,EAAG35B,KAAKl/C,EAAAC,MAAMy9C,WACPpS,GAGT0oC,EAAAz4E,UAAAqkF,oBAAA,SACE/G,GAKA,IAAIE,EAAWF,EAAGz8B,SAClB,GAAIy8B,EAAG35B,KAAKl/C,EAAAC,MAAM48C,WAAY,CAC5B,IAAIv4C,EAAahL,KAAKoiF,gBAAgB7C,GACtC,IAAKv0E,EAAY,OAAO,KACxB,GAAIu0E,EAAG35B,KAAKl/C,EAAAC,MAAM68C,YAAa,CAC7B,IAAInzC,EAAYrQ,KAAKogF,eAAeb,GACpC,IAAKlvE,EAAW,OAAO,KACvB,IAAI2hC,EAAM71B,EAAAxU,KAAKmN,qBAAqB9J,EAAYqF,EAAWkvE,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAEjF,OADAsmE,EAAG35B,KAAKl/C,EAAAC,MAAMy9C,WACPpS,EAEPhyC,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,UAIhBpE,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAGhB,OAAO,MAMTs2E,EAAAz4E,UAAA2kF,qBAAA,SACErH,GAGA,IAAIp/B,EAAQo/B,EAAGz7D,KAAKpd,EAAA03C,mBAAmB8G,QACnCu6B,EAAWF,EAAGz8B,SACd+jC,EAsqBR,SAAkC9/E,GAChC,OAAQA,GACN,KAAKL,EAAAC,MAAM05C,YAAa,SACxB,KAAK35C,EAAAC,MAAMs5C,MAAO,SAClB,KAAKv5C,EAAAC,MAAM+6C,YACX,KAAKh7C,EAAAC,MAAMg7C,MACX,KAAKj7C,EAAAC,MAAMsX,KACX,KAAKvX,EAAAC,MAAMwX,MACX,KAAKzX,EAAAC,MAAMu6C,UACX,KAAKx6C,EAAAC,MAAMw6C,YACX,KAAKz6C,EAAAC,MAAMm5C,OACX,KAAKp5C,EAAAC,MAAM+U,KACX,KAAKhV,EAAAC,MAAMm4C,OAAQ,UACnB,KAAKp4C,EAAAC,MAAMgR,IAAK,UAElB,SArrBmBmvE,CAAyB3mC,GAC1C,GAAc,GAAV0mC,EAA+B,CACjC,IAAI53E,OAAO,EAKX,OAAIkxC,GAASz5C,EAAAC,MAAMgR,KACjB1I,EAAUjP,KAAKoiF,gBAAgB7C,EAAE,KAE7BtwE,EAAQlI,MAAQoV,EAAAtV,SAASS,KACpB6U,EAAAxU,KAAKwF,oBACO8B,EAASjE,WACTiE,EAAS7G,cACT6G,EAASpF,UAC1B01E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,OAGxBjZ,KAAKuG,MACH0V,EAAAnY,eAAe2jB,wBACf83D,EAAGn7E,SAGA,MAdc,MAgBrB6K,EAAUjP,KAAKoiF,gBAAgB7C,EAAIsH,KAKjC1mC,GAASz5C,EAAAC,MAAMu6C,WAAaf,GAASz5C,EAAAC,MAAMw6C,aAE3ClyC,EAAQlI,MAAQoV,EAAAtV,SAASQ,YACzB4H,EAAQlI,MAAQoV,EAAAtV,SAASU,eACzB0H,EAAQlI,MAAQoV,EAAAtV,SAASW,gBAEzBxH,KAAKuG,MACH0V,EAAAnY,eAAeijF,0FACf93E,EAAQ7K,OAIP+X,EAAAxU,KAAKwH,4BAA4BgxC,EAAOlxC,EAASswE,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,OAhBvD,KAmBzB,IAAI7O,EAA0B,KAC9B,OAAQ+1C,GAEN,KAAKz5C,EAAAC,MAAMM,KAAM,OAAOkV,EAAAxU,KAAK0F,qBAAqBkyE,EAAGn7E,SACrD,KAAKsC,EAAAC,MAAMO,KAAM,OAAOiV,EAAAxU,KAAKmH,qBAAqBywE,EAAGn7E,SACrD,KAAKsC,EAAAC,MAAMQ,MAAO,OAAOgV,EAAAxU,KAAK4E,sBAAsBgzE,EAAGn7E,SAIvD,KAAKsC,EAAAC,MAAM48C,UAGT,GAAIg8B,EAAG35B,KAAKl/C,EAAAC,MAAM68C,YAChB,OAAOxjD,KAAKkkF,8BACV3E,EACApjE,EAAAxU,KAAK2C,gCAAgCi1E,EAAGn7E,MAAMq7E,QAE9C,GAGJ,IAAI35B,EAAQy5B,EAAG15B,OACXmhC,GAAQ,EACZ,GACE,OAAQzH,EAAGz7D,KAAKpd,EAAA03C,mBAAmB8G,SAGjC,KAAKx+C,EAAAC,MAAM05C,YAET,OADAk/B,EAAGr5B,MAAMJ,GACF9lD,KAAKgkF,wBAAwBzE,GAGtC,KAAK74E,EAAAC,MAAMU,WAET,OADAk4E,EAAGp5B,iBACKo5B,EAAGz7D,QAGT,KAAKpd,EAAAC,MAAM68C,WACT,IACG+7B,EAAG35B,KAAKl/C,EAAAC,MAAMw9C,SACdo7B,EAAG35B,KAAKl/C,EAAAC,MAAM09C,oBACf,CACA2iC,GAAQ,EACR,MAKJ,KAAKtgF,EAAAC,MAAMw9C,MAET,OADAo7B,EAAGr5B,MAAMJ,GACF9lD,KAAKgkF,wBAAwBzE,GAGtC,KAAK74E,EAAAC,MAAM29C,SACT,GACEi7B,EAAG35B,KAAKl/C,EAAAC,MAAMw9C,QACdo7B,EAAG35B,KAAKl/C,EAAAC,MAAM0Q,QACdkoE,EAAG35B,KAAKl/C,EAAAC,MAAM68C,YAGd,OADA+7B,EAAGr5B,MAAMJ,GACF9lD,KAAKgkF,wBAAwBzE,GAEtCyH,GAAQ,EACR,MAEF,KAAKtgF,EAAAC,MAAM0Q,MACT,MAIF,QACE2vE,GAAQ,EAIZ,MAGF,QACEA,GAAQ,SAILA,GAKT,OAJAzH,EAAGr5B,MAAMJ,IAGT17C,EAAOpK,KAAKoiF,gBAAgB7C,IAEvBA,EAAG35B,KAAKl/C,EAAAC,MAAM68C,YAOZrnC,EAAAxU,KAAKgG,8BAA8BvD,EAAMm1E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,OANpEjZ,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAEP,MANS,KAWpB,KAAKsC,EAAAC,MAAM49C,YAET,IADA,IAAI75C,EAAqB,IAAIvE,OACrBo5E,EAAG35B,KAAKl/C,EAAAC,MAAM69C,eAAe,CACnC,GAAI+6B,EAAGj6B,QAAU5+C,EAAAC,MAAM0Q,MACrBjN,EAAO,UAGP,KADAA,EAAOpK,KAAKoiF,gBAAgB7C,EAAI,IACrB,OAAO,KAGpB,GADA70E,EAAmB7E,KAAKuE,IACnBm1E,EAAG35B,KAAKl/C,EAAAC,MAAM0Q,OAAQ,CACzB,GAAIkoE,EAAG35B,KAAKl/C,EAAAC,MAAM69C,cAChB,MAMA,OAJAxkD,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAEP,MAIb,OAAO+X,EAAAxU,KAAK4C,6BAA6BG,EAAoB60E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAGrF,KAAKvS,EAAAC,MAAM89C,UAKT,IAJA,IAAIwiC,EAAW1H,EAAGz8B,SACdt1C,EAAQ,IAAIrH,MACZsH,EAAS,IAAItH,MACbvF,OAAI,GACA2+E,EAAG35B,KAAKl/C,EAAAC,MAAM+9C,aAAa,CACjC,GAAK66B,EAAG55B,iBAWN/kD,EAAOub,EAAAxU,KAAKe,2BAA2B62E,EAAGp5B,iBAAkBo5B,EAAGn7E,aAXvC,CACxB,IAAKm7E,EAAG35B,KAAKl/C,EAAAC,MAAM28C,eAKjB,OAJAtjD,KAAKuG,MACH0V,EAAAnY,eAAeu9E,oBACf9B,EAAGn7E,SAEE,MAETxD,EAAOub,EAAAxU,KAAKe,2BAA2B62E,EAAGjtC,aAAcitC,EAAGn7E,UACtD8D,IAAIzB,EAAApE,YAAY6kF,QAKvB,GADA15E,EAAM3H,KAAKjF,GACP2+E,EAAG35B,KAAKl/C,EAAAC,MAAMw9C,OAAQ,CACxB,IAAI7iD,EAAQtB,KAAKoiF,gBAAgB7C,EAAI,GACrC,IAAKj+E,EAAO,OAAO,KACnBmM,EAAO5H,KAAKvE,OACP,IAAKV,EAAKmH,GAAGtB,EAAApE,YAAY6kF,QAO9B,OAJAlnF,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAEP,KANPqJ,EAAO5H,KAAKjF,GAQd,IAAK2+E,EAAG35B,KAAKl/C,EAAAC,MAAM0Q,OAAQ,CACzB,GAAIkoE,EAAG35B,KAAKl/C,EAAAC,MAAM+9C,YAChB,MAMA,OAJA1kD,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAEP,MAIb,OAAO+X,EAAAxU,KAAK4F,8BAA8BC,EAAOC,EAAQ8xE,EAAGn7E,MAAM6iF,EAAU1H,EAAGtmE,MAGjF,KAAKvS,EAAAC,MAAM25C,SACT,IAAIr1C,EAASjL,KAAK8gF,UAAUvB,GAC5B,OAAKt0E,EACAs0E,EAAG35B,KAAKl/C,EAAAC,MAAM45C,cAOnBn2C,EAAOpK,KAAKoiF,gBAAgB7C,EAAE,KAEvBpjE,EAAAxU,KAAKmD,0BACVqR,EAAAlF,cAAckwE,OACd/8E,EACAa,EACAs0E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MALN,MAPhBjZ,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAEP,MANW,KAiBtB,KAAKsC,EAAAC,MAAMU,WACT,OAAO8U,EAAAxU,KAAKe,2BAA2B62E,EAAGp5B,iBAAkBo5B,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAEpF,KAAKvS,EAAAC,MAAMsR,KACT,OAAOkE,EAAAxU,KAAKiH,qBAAqB2wE,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAEzD,KAAKvS,EAAAC,MAAM2Q,YACT,OAAO6E,EAAAxU,KAAKsE,4BAA4BszE,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAEhE,KAAKvS,EAAAC,MAAMqR,MACT,OAAOmE,EAAAxU,KAAK+G,sBAAsB6wE,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAE1D,KAAKvS,EAAAC,MAAM28C,cACT,OAAOnnC,EAAAxU,KAAK6G,8BAA8B+wE,EAAGjtC,aAAcitC,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAEnF,KAAKvS,EAAAC,MAAMu9C,eACT,OAAO/nC,EAAAxU,KAAKsF,+BAA+BsyE,EAAGv4B,cAAeu4B,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAErF,KAAKvS,EAAAC,MAAM+8C,aACT,OAAOvnC,EAAAxU,KAAK8E,6BAA6B8yE,EAAGl3B,YAAak3B,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAIjF,KAAKvS,EAAAC,MAAMq6C,MACT,IAAIomC,EAAgB7H,EAAG54B,oBACvB,OAAK44B,EAAG35B,KAAKl/C,EAAAC,MAAMq6C,OAOZ7kC,EAAAxU,KAAKoG,8BACVq5E,EACA7H,EAAGz4B,kBACHy4B,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,OATtBjZ,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAEP,MAQX,KAAKsC,EAAAC,MAAM6Q,SACT,OAAOxX,KAAKgkF,wBAAwBzE,GAEtC,KAAK74E,EAAAC,MAAMyQ,MACT,OAAOpX,KAAKqkF,qBAAqB9E,GAEnC,QAYE,OAXIp/B,GAASz5C,EAAAC,MAAM0+C,UACjBrlD,KAAKuG,MACH0V,EAAAnY,eAAeyiD,uBACfg5B,EAAGn7E,MAAMq7E,IAGXz/E,KAAKuG,MACH0V,EAAAnY,eAAeujF,oBACf9H,EAAGn7E,SAGA,OAKbs2E,EAAAz4E,UAAAqlF,qCAAA,SACE/H,GAKA,IAAIz5B,EAAQy5B,EAAG15B,OACf,IAAK05B,EAAG35B,KAAKl/C,EAAAC,MAAM25C,UAAW,OAAO,KACrC,IAAIl4C,EAAgB,IAAIjC,MACxB,EAAG,CACD,GAAIo5E,EAAGj6B,SAAW5+C,EAAAC,MAAM45C,YACtB,MAEF,IAAIj4C,EAAOtI,KAAK8gF,UAAUvB,GAAI,GAAM,GACpC,IAAKj3E,EAEH,OADAi3E,EAAGr5B,MAAMJ,GACF,KAET19C,EAAcvC,KAAKyC,SACZi3E,EAAG35B,KAAKl/C,EAAAC,MAAM0Q,QACvB,OAAIkoE,EAAG35B,KAAKl/C,EAAAC,MAAM45C,cAAgBg/B,EAAG35B,KAAKl/C,EAAAC,MAAM48C,WACvCn7C,GAETm3E,EAAGr5B,MAAMJ,GACF,OAGT40B,EAAAz4E,UAAA6/E,eAAA,SACEvC,GAMA,IADA,IAAI71E,EAAO,IAAIvD,OACPo5E,EAAG35B,KAAKl/C,EAAAC,MAAM68C,aAAa,CACjC,IAAIp5C,EAAOpK,KAAKoiF,gBAAgB7C,EAAI,GACpC,IAAKn1E,EAAM,OAAO,KAElB,GADAV,EAAK7D,KAAKuE,IACLm1E,EAAG35B,KAAKl/C,EAAAC,MAAM0Q,OAAQ,CACzB,GAAIkoE,EAAG35B,KAAKl/C,EAAAC,MAAM68C,YAChB,MAMA,OAJAxjD,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAEP,MAIb,OAAOsF,GAGTgxE,EAAAz4E,UAAAmgF,gBAAA,SACE7C,EACAsH,QAAA,IAAAA,MAAA,GAEApjF,OAAiB,GAAVojF,GAEP,IAAIz8E,EAAOpK,KAAK4mF,qBAAqBrH,GACrC,IAAKn1E,EAAM,OAAO,KAOlB,IAJA,IACI+1C,EAEAonC,EAHA9H,GAFJr1E,EAAOpK,KAAKwnF,yBAAyBjI,EAAIn1E,IAErBhG,MAAMmB,MAEtBue,EAA0B,MAG3ByjE,EAAiBE,EAAoBtnC,EAAQo/B,EAAGj6B,UAAYuhC,GAC7D,CAEA,OADAtH,EAAGz7D,OACKq8B,GAEN,KAAKz5C,EAAAC,MAAM23C,GACT,IAAIrzC,EAASjL,KAAK8gF,UAAUvB,GAC5B,IAAKt0E,EAAQ,OAAO,KACpBb,EAAO+R,EAAAxU,KAAKmD,0BACVqR,EAAAlF,cAAcqnC,GACdl0C,EACAa,EACAs0E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAExB,MAGF,KAAKvS,EAAAC,MAAM8Q,WACT,IAAI1K,EAAS/M,KAAK8gF,UAAUvB,GAC5B,IAAKxyE,EAAQ,OAAO,KACpB3C,EAAO+R,EAAAxU,KAAKmF,2BACV1C,EACA2C,EACAwyE,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAExB,MAGF,KAAKvS,EAAAC,MAAM49C,YAET,KADAzgC,EAAO9jB,KAAKoiF,gBAAgB7C,IACjB,OAAO,KAClB,IAAKA,EAAG35B,KAAKl/C,EAAAC,MAAM69C,cAKjB,OAJAxkD,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAEP,KAETgG,EAAO+R,EAAAxU,KAAKwE,8BACV/B,EACA0Z,EACAy7D,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAExB,MAGF,KAAKvS,EAAAC,MAAMu6C,UACX,KAAKx6C,EAAAC,MAAMw6C,YAEP/2C,EAAKrD,MAAQoV,EAAAtV,SAASQ,YACtB+C,EAAKrD,MAAQoV,EAAAtV,SAASU,eACtB6C,EAAKrD,MAAQoV,EAAAtV,SAASW,gBAEtBxH,KAAKuG,MACH0V,EAAAnY,eAAeijF,0FACf38E,EAAKhG,OAGTgG,EAAO+R,EAAAxU,KAAKqH,6BACVmxC,EACA/1C,EACAm1E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAExB,MAGF,KAAKvS,EAAAC,MAAM29C,SACT,IAAIj2C,EAASrO,KAAKoiF,gBAAgB7C,GAClC,IAAKlxE,EAAQ,OAAO,KACpB,IAAKkxE,EAAG35B,KAAKl/C,EAAAC,MAAMw9C,OAKjB,OAJAnkD,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAEP,KAET,IAAIkK,EAAStO,KAAKoiF,gBAAgB7C,EAAIsH,EAAU,EAC5C,EACD,GAEH,IAAKv4E,EAAQ,OAAO,KACpBlE,EAAO+R,EAAAxU,KAAKwG,wBACV/D,EACAiE,EACAC,EACAixE,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAExB,MAGF,KAAKvS,EAAAC,MAAM0Q,MACT,IAAIqwE,GAA6Bt9E,GACjC,EAAG,CAED,KADAA,EAAOpK,KAAKoiF,gBAAgB7C,EAAI,IACrB,OAAO,KAClBmI,EAAW7hF,KAAKuE,SACTm1E,EAAG35B,KAAKl/C,EAAAC,MAAM0Q,QACvBjN,EAAO+R,EAAAxU,KAAKmE,sBAAsB47E,EAAYnI,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MACpE,MAEF,QAGE,GAAIknC,GAASz5C,EAAAC,MAAMg9C,IAAK,CACtB,GAAI47B,EAAG55B,iBACL7hC,EAAO3H,EAAAxU,KAAKe,2BAA2B62E,EAAGp5B,iBAAkBo5B,EAAGn7E,cAO/D,KALA0f,EAAO9jB,KAAKoiF,gBAAgB7C,EAC1BoI,EAAmBxnC,GACfonC,EACAA,EAAiB,IAEZ,OAAO,KAEpB,GAAIzjE,EAAK/c,MAAQoV,EAAAtV,SAASQ,WACxB+C,EAAO+R,EAAAxU,KAAKkG,+BACVzD,EACsB0Z,EACtBy7D,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,UAEnB,IAAI6K,EAAK/c,MAAQoV,EAAAtV,SAASS,KAQ/B,OAJAtH,KAAKuG,MACH0V,EAAAnY,eAAeu9E,oBACfv9D,EAAK1f,OAEA,KANP,KADAgG,EAAOpK,KAAK4nF,iBAAiBrI,EAAIE,EAAUr1E,EAAsB0Z,IACtD,OAAO,UAUf,CAML,KALAA,EAAO9jB,KAAKoiF,gBAAgB7C,EAC1BoI,EAAmBxnC,GACfonC,EACAA,EAAiB,IAEZ,OAAO,KAClBn9E,EAAO+R,EAAAxU,KAAKwD,uBAAuBg1C,EAAO/1C,EAAM0Z,EAAMy7D,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,OAKlF7O,EAAOpK,KAAKwnF,yBAAyBjI,EAAIn1E,GAE3C,OAAOA,GAGDswE,EAAAz4E,UAAA2lF,iBAAR,SACErI,EACAE,EACAr1E,EACA5J,GAEA,IAAIqnF,EAASrnF,EAAKwK,WAClB,OAAQ68E,EAAO9gF,MACb,KAAKoV,EAAAtV,SAASQ,WACZ7G,EAAKwK,WAAamR,EAAAxU,KAAKkG,+BACrBzD,EACsBy9E,EACtBtI,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,MAExB,MAEF,KAAKkD,EAAAtV,SAASS,KACZ,IAAIwgF,EAAQ9nF,KAAK4nF,iBAAiBrI,EAAIE,EAAUr1E,EAAsBy9E,GACtE,IAAKC,EAAO,OAAO,KACnBtnF,EAAKwK,WAAa88E,EAClBtnF,EAAK4D,MAAQm7E,EAAGn7E,MAAMq7E,EAAUF,EAAGtmE,KACnC,MAEF,QAKE,OAJAjZ,KAAKuG,MACH0V,EAAAnY,eAAeu9E,oBACf7gF,EAAK4D,OAEA,KAGX,OAAO5D,GAGDk6E,EAAAz4E,UAAAulF,yBAAR,SACEjI,EACAn1E,GAEA,GAAI+R,EAAA/U,eAAegD,EAAKrD,MAEtB,IADA,IAAIqB,EAAyC,KAE3Cm3E,EAAG35B,KAAKl/C,EAAAC,MAAM48C,YAEdpnC,EAAAzU,sBAAsB0C,EAAKrD,OAA6E,QAAnEqB,EAAgBpI,KAAKsnF,qCAAqC/H,KAC/F,CACA,IAAI71E,EAAO1J,KAAK8hF,eAAevC,GAC/B,IAAK71E,EAAM,MACXU,EAAO+R,EAAAxU,KAAK6D,qBACVpB,EACAhC,EACAsB,EACA61E,EAAGn7E,MAAMgG,EAAKhG,MAAMmB,MAAOg6E,EAAGtmE,MAIpC,OAAO7O,GAITswE,EAAAz4E,UAAA09E,cAAA,SAAcJ,GAGZ,IAFAA,EAAGj6B,MAAK,GACJi6B,EAAGt8B,oBAAoBs8B,EAAGz7D,SAC3B,CACD,IAAIi/B,EAAYw8B,EAAGj6B,MAAK,GACxB,GACEvC,GAAar8C,EAAAC,MAAM0+C,WACnBtC,GAAar8C,EAAAC,MAAMy9C,UACnB,CACAm7B,EAAGz7D,OACH,MAEF,GAAIy7D,EAAGt8B,mBAAoB,MAC3B,OAAQs8B,EAAGz7D,QACT,KAAKpd,EAAAC,MAAMU,WACTk4E,EAAGp5B,iBACH,MAEF,KAAKz/C,EAAAC,MAAM28C,cACTi8B,EAAGjtC,aACH,MAEF,KAAK5rC,EAAAC,MAAMu9C,eACTq7B,EAAGv4B,cACH,MAEF,KAAKtgD,EAAAC,MAAM+8C,aACT67B,EAAGl3B,eAQXqyB,EAAAz4E,UAAA8lF,UAAA,SAAUxI,GAER,IAAIyI,EAAQ,EACRhB,GAAQ,EACZ,GACE,OAAQzH,EAAGz7D,QACT,KAAKpd,EAAAC,MAAM0+C,UACTrlD,KAAKuG,MACH0V,EAAAnY,eAAekgD,YACfu7B,EAAGn7E,QAAS,KAEd4iF,GAAQ,EACR,MAEF,KAAKtgF,EAAAC,MAAM89C,YACPujC,EACF,MAEF,KAAKthF,EAAAC,MAAM+9C,aACPsjC,IACUhB,GAAQ,GACpB,MAEF,KAAKtgF,EAAAC,MAAMU,WACTk4E,EAAGp5B,iBACH,MAEF,KAAKz/C,EAAAC,MAAM28C,cACTi8B,EAAGjtC,aACH,MAEF,KAAK5rC,EAAAC,MAAMu9C,eACTq7B,EAAGv4B,cACH,MAEF,KAAKtgD,EAAAC,MAAM+8C,aACT67B,EAAGl3B,mBAIA2+B,IAEbtM,EA16GA,CAA4Bz+D,EAAAhW,mBA09G5B,SAASwhF,EAAoB1gF,GAC3B,OAAQA,GACN,KAAKL,EAAAC,MAAM0Q,MAAO,SAClB,KAAK3Q,EAAAC,MAAMm7C,OACX,KAAKp7C,EAAAC,MAAMo7C,YACX,KAAKr7C,EAAAC,MAAMq7C,aACX,KAAKt7C,EAAAC,MAAMu7C,yBACX,KAAKx7C,EAAAC,MAAMs7C,gBACX,KAAKv7C,EAAAC,MAAMw7C,aACX,KAAKz7C,EAAAC,MAAMy7C,eACX,KAAK17C,EAAAC,MAAM07C,yBACX,KAAK37C,EAAAC,MAAM27C,+BACX,KAAK57C,EAAAC,MAAM47C,2CACX,KAAK77C,EAAAC,MAAM67C,iBACX,KAAK97C,EAAAC,MAAM+7C,aACX,KAAKh8C,EAAAC,MAAM87C,WAAY,SACvB,KAAK/7C,EAAAC,MAAM29C,SAAU,SACrB,KAAK59C,EAAAC,MAAMk7C,QAAS,SACpB,KAAKn7C,EAAAC,MAAMi7C,oBAAqB,SAChC,KAAKl7C,EAAAC,MAAM66C,IAAK,SAChB,KAAK96C,EAAAC,MAAM86C,MAAO,SAClB,KAAK/6C,EAAAC,MAAM46C,UAAW,UACtB,KAAK76C,EAAAC,MAAM+5C,cACX,KAAKh6C,EAAAC,MAAMg6C,mBACX,KAAKj6C,EAAAC,MAAMi6C,qBACX,KAAKl6C,EAAAC,MAAMk6C,0BAA2B,UACtC,KAAKn6C,EAAAC,MAAM23C,GACX,KAAK53C,EAAAC,MAAMy4C,GACX,KAAK14C,EAAAC,MAAM8Q,WACX,KAAK/Q,EAAAC,MAAM25C,SACX,KAAK55C,EAAAC,MAAM45C,YACX,KAAK75C,EAAAC,MAAM65C,gBACX,KAAK95C,EAAAC,MAAM85C,mBAAoB,UAC/B,KAAK/5C,EAAAC,MAAMy6C,kBACX,KAAK16C,EAAAC,MAAM06C,wBACX,KAAK36C,EAAAC,MAAM26C,oCAAqC,UAChD,KAAK56C,EAAAC,MAAMsX,KACX,KAAKvX,EAAAC,MAAMwX,MAAO,UAClB,KAAKzX,EAAAC,MAAMo6C,SACX,KAAKr6C,EAAAC,MAAMq6C,MACX,KAAKt6C,EAAAC,MAAMs6C,QAAS,UACpB,KAAKv6C,EAAAC,MAAMm6C,kBAAmB,UAC9B,KAAKp6C,EAAAC,MAAMu6C,UACX,KAAKx6C,EAAAC,MAAMw6C,YAAa,UACxB,KAAKz6C,EAAAC,MAAMg9C,IACX,KAAKj9C,EAAAC,MAAMgR,IACX,KAAKjR,EAAAC,MAAM49C,YAAa,UAE1B,SAIF,SAASojC,EAAmB5gF,GAC1B,OAAQA,GACN,KAAKL,EAAAC,MAAMm7C,OACX,KAAKp7C,EAAAC,MAAMo7C,YACX,KAAKr7C,EAAAC,MAAMq7C,aACX,KAAKt7C,EAAAC,MAAMu7C,yBACX,KAAKx7C,EAAAC,MAAMs7C,gBACX,KAAKv7C,EAAAC,MAAMw7C,aACX,KAAKz7C,EAAAC,MAAMy7C,eACX,KAAK17C,EAAAC,MAAM07C,yBACX,KAAK37C,EAAAC,MAAM27C,+BACX,KAAK57C,EAAAC,MAAM47C,2CACX,KAAK77C,EAAAC,MAAM67C,iBACX,KAAK97C,EAAAC,MAAM+7C,aACX,KAAKh8C,EAAAC,MAAM87C,WACX,KAAK/7C,EAAAC,MAAM29C,SACX,KAAK59C,EAAAC,MAAMm6C,kBAAmB,OAAO,EACrC,QAAS,OAAO,GA/hHPphD,EAAAg7E,SA66Gb,SAAkBuN,GAChBA,IAAA,eACAA,IAAA,iBACAA,IAAA,mBACAA,IAAA,iBACAA,IAAA,2BACAA,IAAA,6BACAA,IAAA,2BACAA,IAAA,6BACAA,IAAA,2BACAA,IAAA,6BACAA,IAAA,8BACAA,IAAA,wBACAA,IAAA,4BACAA,IAAA,kBACAA,IAAA,wBACAA,IAAA,oCACAA,IAAA,kCACAA,IAAA,gCACAA,IAAA,kCACAA,IAAA,gBACAA,IAAA,gCACAA,IAAA,wBAtBF,CAAkBvoF,EAAAuoF,aAAAvoF,EAAAuoF","file":"assemblyscript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"binaryen\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"binaryen\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"assemblyscript\"] = factory(require(\"binaryen\"));\n\telse\n\t\troot[\"assemblyscript\"] = factory(root[\"binaryen\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE__15__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 12);\n","/**\r\n * Common constants.\r\n * @module common\r\n *//***/\r\n\r\n/** Indicates traits of a {@link Node} or {@link Element}. */\r\nexport enum CommonFlags {\r\n /** No flags set. */\r\n NONE = 0,\r\n\r\n // Basic modifiers\r\n\r\n /** Has an `import` modifier. */\r\n IMPORT = 1 << 0,\r\n /** Has an `export` modifier. */\r\n EXPORT = 1 << 1,\r\n /** Has a `declare` modifier. */\r\n DECLARE = 1 << 2,\r\n /** Has a `const` modifier. */\r\n CONST = 1 << 3,\r\n /** Has a `let` modifier. */\r\n LET = 1 << 4,\r\n /** Has a `static` modifier. */\r\n STATIC = 1 << 5,\r\n /** Has a `readonly` modifier. */\r\n READONLY = 1 << 6,\r\n /** Has an `abstract` modifier. */\r\n ABSTRACT = 1 << 7,\r\n /** Has a `public` modifier. */\r\n PUBLIC = 1 << 8,\r\n /** Has a `private` modifier. */\r\n PRIVATE = 1 << 9,\r\n /** Has a `protected` modifier. */\r\n PROTECTED = 1 << 10,\r\n /** Has a `get` modifier. */\r\n GET = 1 << 11,\r\n /** Has a `set` modifier. */\r\n SET = 1 << 12,\r\n /** Has a definite assignment assertion `!` as in `x!: i32;`. */\r\n DEFINITE_ASSIGNMENT = 1 << 13,\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 << 14,\r\n /** Is generic. */\r\n GENERIC = 1 << 15,\r\n /** Is part of a generic context. */\r\n GENERIC_CONTEXT = 1 << 16,\r\n /** Is an instance member. */\r\n INSTANCE = 1 << 17,\r\n /** Is a constructor. */\r\n CONSTRUCTOR = 1 << 18,\r\n /** Is an arrow function. */\r\n ARROW = 1 << 19,\r\n /** Is a module export. */\r\n MODULE_EXPORT = 1 << 20,\r\n /** Is a module import. */\r\n MODULE_IMPORT = 1 << 21,\r\n\r\n // Compilation states\r\n\r\n /** Is compiled. */\r\n COMPILED = 1 << 22,\r\n /** Has a constant value and is therefore inlined. */\r\n INLINED = 1 << 23,\r\n /** Is scoped. */\r\n SCOPED = 1 << 24,\r\n /** Is a trampoline. */\r\n TRAMPOLINE = 1 << 25,\r\n /** Is a virtual method. */\r\n VIRTUAL = 1 << 26,\r\n /** Is the main function. */\r\n MAIN = 1 << 27,\r\n\r\n // Other\r\n\r\n QUOTED = 1 << 28\r\n}\r\n\r\n/** Path delimiter inserted between file system levels. */\r\nexport const PATH_DELIMITER = \"/\";\r\n/** Substitution used to indicate the parent directory. */\r\nexport const PARENT_SUBST = \"..\";\r\n/** Function name prefix used for getters. */\r\nexport const GETTER_PREFIX = \"get:\";\r\n/** Function name prefix used for setters. */\r\nexport const SETTER_PREFIX = \"set:\";\r\n/** Delimiter used between class names and instance members. */\r\nexport const INSTANCE_DELIMITER = \"#\";\r\n/** Delimiter used between class and namespace names and static members. */\r\nexport const STATIC_DELIMITER = \".\";\r\n/** Delimiter used between a function and its inner elements. */\r\nexport const INNER_DELIMITER = \"~\";\r\n/** Substitution used to indicate a library directory. */\r\nexport const LIBRARY_SUBST = \"~lib\";\r\n/** Library directory prefix. */\r\nexport const LIBRARY_PREFIX = LIBRARY_SUBST + PATH_DELIMITER;\r\n/** Prefix used to indicate a filespace element. */\r\nexport const FILESPACE_PREFIX = \"file:\";\r\n","/**\r\n * Shared diagnostic handling inherited by the parser and the compiler.\r\n * @module diagnostics\r\n * @preferred\r\n *//***/\r\n\r\nimport {\r\n Range\r\n} from \"./ast\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\nimport {\r\n isLineBreak\r\n} from \"./util\";\r\n\r\nexport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\n/** Indicates the category of a {@link DiagnosticMessage}. */\r\nexport enum DiagnosticCategory {\r\n /** Informatory message. */\r\n INFO,\r\n /** Warning message. */\r\n WARNING,\r\n /** Error message. */\r\n ERROR\r\n}\r\n\r\n/** Returns the string representation of the specified diagnostic category. */\r\nexport function diagnosticCategoryToString(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return \"INFO\";\r\n case DiagnosticCategory.WARNING: return \"WARNING\";\r\n case DiagnosticCategory.ERROR: return \"ERROR\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\n/** ANSI escape sequence for blue foreground. */\r\nexport const COLOR_BLUE: string = \"\\u001b[96m\";\r\n/** ANSI escape sequence for yellow foreground. */\r\nexport const COLOR_YELLOW: string = \"\\u001b[93m\";\r\n/** ANSI escape sequence for red foreground. */\r\nexport const COLOR_RED: string = \"\\u001b[91m\";\r\n/** ANSI escape sequence to reset the foreground color. */\r\nexport const COLOR_RESET: string = \"\\u001b[0m\";\r\n\r\n/** Returns the ANSI escape sequence for the specified category. */\r\nexport function diagnosticCategoryToColor(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return COLOR_BLUE;\r\n case DiagnosticCategory.WARNING: return COLOR_YELLOW;\r\n case DiagnosticCategory.ERROR: return COLOR_RED;\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\n/** Represents a diagnostic message. */\r\nexport class DiagnosticMessage {\r\n\r\n /** Message code. */\r\n code: i32;\r\n /** Message category. */\r\n category: DiagnosticCategory;\r\n /** Message text. */\r\n message: string;\r\n /** Respective source range, if any. */\r\n range: Range | null = null;\r\n\r\n /** Constructs a new diagnostic message. */\r\n private constructor(code: i32, category: DiagnosticCategory, message: string) {\r\n this.code = code;\r\n this.category = category;\r\n this.message = message;\r\n }\r\n\r\n /** Creates a new diagnostic message of the specified category. */\r\n static create(\r\n code: DiagnosticCode,\r\n category: DiagnosticCategory,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): DiagnosticMessage {\r\n var message = diagnosticCodeToString(code);\r\n if (arg0 != null) message = message.replace(\"{0}\", arg0);\r\n if (arg1 != null) message = message.replace(\"{1}\", arg1);\r\n if (arg2 != null) message = message.replace(\"{2}\", arg2);\r\n return new DiagnosticMessage(code, category, message);\r\n }\r\n\r\n /** Creates a new informatory diagnostic message. */\r\n static createInfo(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.INFO, arg0, arg1);\r\n }\r\n\r\n /** Creates a new warning diagnostic message. */\r\n static createWarning(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.WARNING, arg0, arg1);\r\n }\r\n\r\n /** Creates a new error diagnostic message. */\r\n static createError(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.ERROR, arg0, arg1);\r\n }\r\n\r\n /** Adds a source range to this message. */\r\n withRange(range: Range): this {\r\n this.range = range;\r\n return this;\r\n }\r\n\r\n /** Converts this message to a string. */\r\n toString(): string {\r\n if (this.range) {\r\n return (\r\n diagnosticCategoryToString(this.category) +\r\n \" \" +\r\n this.code.toString(10) +\r\n \": \\\"\" +\r\n this.message +\r\n \"\\\" in \" +\r\n this.range.source.normalizedPath +\r\n \":\" +\r\n this.range.line.toString(10) +\r\n \":\" +\r\n this.range.column.toString(10)\r\n );\r\n }\r\n return (\r\n diagnosticCategoryToString(this.category) +\r\n \" \" +\r\n this.code.toString(10) +\r\n \": \" +\r\n this.message\r\n );\r\n }\r\n}\r\n\r\n/** Formats a diagnostic message, optionally with terminal colors and source context. */\r\nexport function formatDiagnosticMessage(\r\n message: DiagnosticMessage,\r\n useColors: bool = false,\r\n showContext: bool = false\r\n): string {\r\n\r\n // general information\r\n var sb: string[] = [];\r\n if (useColors) sb.push(diagnosticCategoryToColor(message.category));\r\n sb.push(diagnosticCategoryToString(message.category));\r\n if (useColors) sb.push(COLOR_RESET);\r\n sb.push(message.code < 1000 ? \" AS\" : \" TS\");\r\n sb.push(message.code.toString(10));\r\n sb.push(\": \");\r\n sb.push(message.message);\r\n\r\n // include range information if available\r\n if (message.range) {\r\n\r\n // include context information if requested\r\n let range = message.range;\r\n if (showContext) {\r\n sb.push(\"\\n\");\r\n sb.push(formatDiagnosticContext(message.range, useColors));\r\n }\r\n\r\n sb.push(\"\\n\");\r\n sb.push(\" in \");\r\n sb.push(range.source.normalizedPath);\r\n sb.push(\"(\");\r\n sb.push(range.line.toString(10));\r\n sb.push(\",\");\r\n sb.push(range.column.toString(10));\r\n sb.push(\")\");\r\n }\r\n return sb.join(\"\");\r\n}\r\n\r\n/** Formats the diagnostic context for the specified range, optionally with terminal colors. */\r\nexport function formatDiagnosticContext(range: Range, useColors: bool = false): string {\r\n var text = range.source.text;\r\n var len = text.length;\r\n var start = range.start;\r\n var end = range.end;\r\n while (start > 0 && !isLineBreak(text.charCodeAt(start - 1))) start--;\r\n while (end < len && !isLineBreak(text.charCodeAt(end))) end++;\r\n var sb: string[] = [\r\n \"\\n \",\r\n text.substring(start, end),\r\n \"\\n \"\r\n ];\r\n while (start < range.start) {\r\n sb.push(\" \");\r\n start++;\r\n }\r\n if (useColors) sb.push(COLOR_RED);\r\n if (range.start == range.end) {\r\n sb.push(\"^\");\r\n } else {\r\n while (start++ < range.end) sb.push(\"~\");\r\n }\r\n if (useColors) sb.push(COLOR_RESET);\r\n return sb.join(\"\");\r\n}\r\n\r\n/** Base class of all diagnostic emitters. */\r\nexport abstract class DiagnosticEmitter {\r\n\r\n /** Diagnostic messages emitted so far. */\r\n diagnostics: DiagnosticMessage[];\r\n\r\n /** Initializes this diagnostic emitter. */\r\n protected constructor(diagnostics: DiagnosticMessage[] | null = null) {\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n }\r\n\r\n /** Emits a diagnostic message of the specified category. */\r\n emitDiagnostic(\r\n code: DiagnosticCode,\r\n category: DiagnosticCategory,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n var message = DiagnosticMessage.create(code, category, arg0, arg1, arg2).withRange(range);\r\n this.diagnostics.push(message);\r\n // console.log(formatDiagnosticMessage(message, true, true) + \"\\n\"); // temporary\r\n // console.log(new Error(\"stack\").stack);\r\n }\r\n\r\n /** Emits an informatory diagnostic message. */\r\n info(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.INFO, range, arg0, arg1, arg2);\r\n }\r\n\r\n /** Emits a warning diagnostic message. */\r\n warning(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.WARNING, range, arg0, arg1, arg2);\r\n }\r\n\r\n /** Emits an error diagnostic message. */\r\n error(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.ERROR, range, arg0, arg1, arg2);\r\n }\r\n}\r\n","/**\r\n * Various compiler utilities.\r\n * @module util\r\n * @preferred\r\n *//***/\r\n\r\nexport * from \"./charcode\";\r\nexport * from \"./path\";\r\nexport * from \"./text\";\r\nexport * from \"./binary\";\r\n","/**\r\n * Abstract syntax tree representing a source file once parsed.\r\n * @module ast\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n PATH_DELIMITER,\r\n STATIC_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n LIBRARY_PREFIX\r\n} from \"./common\";\r\n\r\nimport {\r\n Token,\r\n Tokenizer,\r\n Range\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n normalizePath,\r\n resolvePath,\r\n CharCode\r\n} from \"./util\";\r\n\r\nexport { Token, Range };\r\n\r\n/** Indicates the kind of a node. */\r\nexport enum NodeKind {\r\n\r\n SOURCE,\r\n\r\n // types\r\n TYPE,\r\n TYPEPARAMETER,\r\n PARAMETER,\r\n SIGNATURE,\r\n\r\n // expressions\r\n IDENTIFIER,\r\n ASSERTION,\r\n BINARY,\r\n CALL,\r\n CLASS,\r\n COMMA,\r\n ELEMENTACCESS,\r\n FALSE,\r\n FUNCTION,\r\n INSTANCEOF,\r\n LITERAL,\r\n NEW,\r\n NULL,\r\n PARENTHESIZED,\r\n PROPERTYACCESS,\r\n TERNARY,\r\n SUPER,\r\n THIS,\r\n TRUE,\r\n CONSTRUCTOR,\r\n UNARYPOSTFIX,\r\n UNARYPREFIX,\r\n\r\n // statements\r\n BLOCK,\r\n BREAK,\r\n CONTINUE,\r\n DO,\r\n EMPTY,\r\n EXPORT,\r\n EXPORTIMPORT,\r\n EXPRESSION,\r\n FOR,\r\n IF,\r\n IMPORT,\r\n RETURN,\r\n SWITCH,\r\n THROW,\r\n TRY,\r\n VARIABLE,\r\n VOID,\r\n WHILE,\r\n\r\n // declaration statements\r\n CLASSDECLARATION,\r\n ENUMDECLARATION,\r\n ENUMVALUEDECLARATION,\r\n FIELDDECLARATION,\r\n FUNCTIONDECLARATION,\r\n IMPORTDECLARATION,\r\n INTERFACEDECLARATION,\r\n METHODDECLARATION,\r\n NAMESPACEDECLARATION,\r\n TYPEDECLARATION,\r\n VARIABLEDECLARATION,\r\n\r\n // special\r\n DECORATOR,\r\n EXPORTMEMBER,\r\n SWITCHCASE,\r\n COMMENT\r\n}\r\n\r\n/** Checks if a node represents a constant value. */\r\nexport function nodeIsConstantValue(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.LITERAL:\r\n case NodeKind.NULL:\r\n case NodeKind.TRUE:\r\n case NodeKind.FALSE: return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Checks if a node might be callable. */\r\nexport function nodeIsCallable(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.CALL:\r\n case NodeKind.ELEMENTACCESS:\r\n case NodeKind.PROPERTYACCESS:\r\n case NodeKind.PARENTHESIZED: return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Checks if a node might be callable with generic arguments. */\r\nexport function nodeIsGenericCallable(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.PROPERTYACCESS: return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Base class of all nodes. */\r\nexport abstract class Node {\r\n\r\n /** Node kind indicator. */\r\n kind: NodeKind;\r\n /** Source range. */\r\n range: Range;\r\n /** Parent node. */\r\n parent: Node | null = null;\r\n /** Common flags indicating specific traits. */\r\n flags: CommonFlags = CommonFlags.NONE;\r\n\r\n /** Tests if this node has the specified flag or flags. */\r\n is(flag: CommonFlags): bool { return (this.flags & flag) == flag; }\r\n /** Tests if this node has one of the specified flags. */\r\n isAny(flag: CommonFlags): bool { return (this.flags & flag) != 0; }\r\n /** Sets a specific flag or flags. */\r\n set(flag: CommonFlags): void { this.flags |= flag; }\r\n\r\n // types\r\n\r\n static createType(\r\n name: IdentifierExpression,\r\n typeArguments: CommonTypeNode[] | null,\r\n isNullable: bool,\r\n range: Range\r\n ): TypeNode {\r\n var type = new TypeNode();\r\n type.range = range;\r\n type.name = name; name.parent = type;\r\n type.typeArguments = typeArguments; if (typeArguments) setParent(typeArguments, type);\r\n type.isNullable = isNullable;\r\n return type;\r\n }\r\n\r\n static createOmittedType(\r\n range: Range\r\n ): TypeNode {\r\n return Node.createType(\r\n Node.createIdentifierExpression(\"\", range),\r\n null,\r\n false,\r\n range\r\n );\r\n }\r\n\r\n static createTypeParameter(\r\n name: IdentifierExpression,\r\n extendsType: TypeNode | null,\r\n range: Range\r\n ): TypeParameterNode {\r\n var elem = new TypeParameterNode();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n elem.extendsType = extendsType; if (extendsType) extendsType.parent = elem;\r\n return elem;\r\n }\r\n\r\n static createParameter(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode,\r\n initializer: Expression | null,\r\n kind: ParameterKind,\r\n range: Range\r\n ): ParameterNode {\r\n var elem = new ParameterNode();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n elem.type = type; if (type) type.parent = elem;\r\n elem.initializer = initializer; if (initializer) initializer.parent = elem;\r\n elem.parameterKind = kind;\r\n return elem;\r\n }\r\n\r\n static createSignature(\r\n parameters: ParameterNode[],\r\n returnType: CommonTypeNode,\r\n explicitThisType: TypeNode | null,\r\n isNullable: bool,\r\n range: Range\r\n ): SignatureNode {\r\n var sig = new SignatureNode();\r\n sig.range = range;\r\n sig.parameters = parameters; setParent(parameters, sig);\r\n sig.returnType = returnType; returnType.parent = sig;\r\n sig.explicitThisType = explicitThisType; if (explicitThisType) explicitThisType.parent = sig;\r\n sig.isNullable = isNullable;\r\n return sig;\r\n }\r\n\r\n // special\r\n\r\n static createDecorator(\r\n name: Expression,\r\n args: Expression[] | null,\r\n range: Range\r\n ): DecoratorNode {\r\n var stmt = new DecoratorNode();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.arguments = args; if (args) setParent(args, stmt);\r\n stmt.decoratorKind = decoratorNameToKind(name);\r\n return stmt;\r\n }\r\n\r\n static createComment(\r\n text: string,\r\n kind: CommentKind,\r\n range: Range\r\n ): CommentNode {\r\n var node = new CommentNode();\r\n node.range = range;\r\n node.commentKind = kind;\r\n node.text = text;\r\n return node;\r\n }\r\n\r\n // expressions\r\n\r\n static createIdentifierExpression(\r\n name: string,\r\n range: Range\r\n ): IdentifierExpression {\r\n var expr = new IdentifierExpression();\r\n expr.range = range;\r\n expr.text = name;\r\n return expr;\r\n }\r\n\r\n static createEmptyIdentifierExpression(\r\n range: Range\r\n ): IdentifierExpression {\r\n var expr = new IdentifierExpression();\r\n expr.range = range;\r\n expr.text = \"\";\r\n return expr;\r\n }\r\n\r\n static createArrayLiteralExpression(\r\n elements: (Expression | null)[],\r\n range: Range\r\n ): ArrayLiteralExpression {\r\n var expr = new ArrayLiteralExpression();\r\n expr.range = range;\r\n expr.elementExpressions = elements; setParentIfNotNull(elements, expr);\r\n return expr;\r\n }\r\n\r\n static createAssertionExpression(\r\n assertionKind: AssertionKind,\r\n expression: Expression,\r\n toType: CommonTypeNode,\r\n range: Range\r\n ): AssertionExpression {\r\n var expr = new AssertionExpression();\r\n expr.range = range;\r\n expr.assertionKind = assertionKind;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.toType = toType; toType.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createBinaryExpression(\r\n operator: Token,\r\n left: Expression,\r\n right: Expression,\r\n range: Range\r\n ): BinaryExpression {\r\n var expr = new BinaryExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.left = left; left.parent = expr;\r\n expr.right = right; right.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createCallExpression(\r\n expression: Expression,\r\n typeArgs: CommonTypeNode[] | null,\r\n args: Expression[],\r\n range: Range\r\n ): CallExpression {\r\n var expr = new CallExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.typeArguments = typeArgs; if (typeArgs) setParent(typeArgs, expr);\r\n expr.arguments = args; setParent(args, expr);\r\n return expr;\r\n }\r\n\r\n static createClassExpression(\r\n declaration: ClassDeclaration\r\n ): ClassExpression {\r\n var expr = new ClassExpression();\r\n expr.range = declaration.range;\r\n expr.declaration = declaration;\r\n return expr;\r\n }\r\n\r\n static createCommaExpression(\r\n expressions: Expression[],\r\n range: Range\r\n ): CommaExpression {\r\n var expr = new CommaExpression();\r\n expr.range = range;\r\n expr.expressions = expressions; setParent(expressions, expr);\r\n return expr;\r\n }\r\n\r\n static createConstructorExpression(\r\n range: Range\r\n ): ConstructorExpression {\r\n var expr = new ConstructorExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createElementAccessExpression(\r\n expression: Expression,\r\n element: Expression,\r\n range: Range\r\n ): ElementAccessExpression {\r\n var expr = new ElementAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.elementExpression = element; element.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createFalseExpression(\r\n range: Range\r\n ): FalseExpression {\r\n var expr = new FalseExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createFloatLiteralExpression(\r\n value: f64,\r\n range: Range\r\n ): FloatLiteralExpression {\r\n var expr = new FloatLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createFunctionExpression(\r\n declaration: FunctionDeclaration\r\n ): FunctionExpression {\r\n var expr = new FunctionExpression();\r\n expr.flags = declaration.flags & CommonFlags.ARROW;\r\n expr.range = declaration.range;\r\n expr.declaration = declaration;\r\n return expr;\r\n }\r\n\r\n static createInstanceOfExpression(\r\n expression: Expression,\r\n isType: CommonTypeNode,\r\n range: Range\r\n ): InstanceOfExpression {\r\n var expr = new InstanceOfExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.isType = isType; isType.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createIntegerLiteralExpression(\r\n value: I64,\r\n range: Range\r\n ): IntegerLiteralExpression {\r\n var expr = new IntegerLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createNewExpression(\r\n expression: Expression,\r\n typeArgs: CommonTypeNode[] | null,\r\n args: Expression[],\r\n range: Range\r\n ): NewExpression {\r\n var expr = new NewExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.typeArguments = typeArgs; if (typeArgs) setParent(typeArgs, expr);\r\n expr.arguments = args; setParent(args, expr);\r\n return expr;\r\n }\r\n\r\n static createNullExpression(\r\n range: Range\r\n ): NullExpression {\r\n var expr = new NullExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createObjectLiteralExpression(\r\n names: IdentifierExpression[],\r\n values: Expression[],\r\n range: Range\r\n ): ObjectLiteralExpression {\r\n var expr = new ObjectLiteralExpression();\r\n expr.range = range;\r\n expr.names = names;\r\n expr.values = values;\r\n return expr;\r\n }\r\n\r\n static createParenthesizedExpression(\r\n expression: Expression,\r\n range: Range\r\n ): ParenthesizedExpression {\r\n var expr = new ParenthesizedExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createPropertyAccessExpression(\r\n expression: Expression,\r\n property: IdentifierExpression,\r\n range: Range\r\n ): PropertyAccessExpression {\r\n var expr = new PropertyAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.property = property; property.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createRegexpLiteralExpression(\r\n pattern: string,\r\n flags: string,\r\n range: Range\r\n ): RegexpLiteralExpression {\r\n var expr = new RegexpLiteralExpression();\r\n expr.range = range;\r\n expr.pattern = pattern;\r\n expr.patternFlags = flags;\r\n return expr;\r\n }\r\n\r\n static createTernaryExpression(\r\n condition: Expression,\r\n ifThen: Expression,\r\n ifElse: Expression,\r\n range: Range\r\n ): TernaryExpression {\r\n var expr = new TernaryExpression();\r\n expr.range = range;\r\n expr.condition = condition; condition.parent = expr;\r\n expr.ifThen = ifThen; ifThen.parent = expr;\r\n expr.ifElse = ifElse; ifElse.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createStringLiteralExpression(\r\n value: string,\r\n range: Range\r\n ): StringLiteralExpression {\r\n var expr = new StringLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createSuperExpression(\r\n range: Range\r\n ): SuperExpression {\r\n var expr = new SuperExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createThisExpression(\r\n range: Range\r\n ): ThisExpression {\r\n var expr = new ThisExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createTrueExpression(\r\n range: Range\r\n ): TrueExpression {\r\n var expr = new TrueExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createUnaryPostfixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPostfixExpression {\r\n var expr = new UnaryPostfixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createUnaryPrefixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPrefixExpression {\r\n var expr = new UnaryPrefixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n // statements\r\n\r\n static createBlockStatement(\r\n statements: Statement[],\r\n range: Range\r\n ): BlockStatement {\r\n var stmt = new BlockStatement();\r\n stmt.range = range;\r\n stmt.statements = statements; setParent(statements, stmt);\r\n return stmt;\r\n }\r\n\r\n static createBreakStatement(\r\n label: IdentifierExpression | null,\r\n range: Range\r\n ): BreakStatement {\r\n var stmt = new BreakStatement();\r\n stmt.range = range;\r\n stmt.label = label; if (label) label.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createClassDeclaration(\r\n identifier: IdentifierExpression,\r\n typeParameters: TypeParameterNode[],\r\n extendsType: TypeNode | null, // can't be a function\r\n implementsTypes: TypeNode[] | null, // can't be functions\r\n members: DeclarationStatement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): ClassDeclaration {\r\n var stmt = new ClassDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = identifier; identifier.parent = stmt;\r\n stmt.typeParameters = typeParameters; setParent(typeParameters, stmt);\r\n stmt.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.implementsTypes = implementsTypes; if (implementsTypes) setParent(implementsTypes, stmt);\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createContinueStatement(\r\n label: IdentifierExpression | null,\r\n range: Range\r\n ): ContinueStatement {\r\n var stmt = new ContinueStatement();\r\n stmt.range = range;\r\n stmt.label = label; if (label) label.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createDoStatement(\r\n statement: Statement,\r\n condition: Expression,\r\n range: Range\r\n ): DoStatement {\r\n var stmt = new DoStatement();\r\n stmt.range = range;\r\n stmt.statement = statement; statement.parent = stmt;\r\n stmt.condition = condition; condition.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createEmptyStatement(\r\n range: Range\r\n ): EmptyStatement {\r\n var stmt = new EmptyStatement();\r\n stmt.range = range;\r\n return stmt;\r\n }\r\n\r\n static createEnumDeclaration(\r\n name: IdentifierExpression,\r\n members: EnumValueDeclaration[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): EnumDeclaration {\r\n var stmt = new EnumDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.values = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createEnumValueDeclaration(\r\n name: IdentifierExpression,\r\n value: Expression | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): EnumValueDeclaration {\r\n var stmt = new EnumValueDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.value = value; if (value) value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createExportStatement(\r\n members: ExportMember[] | null,\r\n path: StringLiteralExpression | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): ExportStatement {\r\n var stmt = new ExportStatement();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.members = members; if (members) setParent(members, stmt);\r\n stmt.path = path;\r\n if (path) {\r\n let normalizedPath = normalizePath(path.value);\r\n if (path.value.startsWith(\".\")) { // relative\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n } else {\r\n stmt.normalizedPath = null;\r\n stmt.internalPath = null;\r\n }\r\n return stmt;\r\n }\r\n\r\n static createExportImportStatement(\r\n name: IdentifierExpression,\r\n externalName: IdentifierExpression,\r\n range: Range\r\n ): ExportImportStatement {\r\n var stmt = new ExportImportStatement();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.externalName = externalName; externalName.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createExportMember(\r\n name: IdentifierExpression,\r\n externalName: IdentifierExpression | null,\r\n range: Range\r\n ): ExportMember {\r\n var elem = new ExportMember();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n if (!externalName) {\r\n externalName = name;\r\n } else {\r\n externalName.parent = elem;\r\n }\r\n elem.externalName = externalName;\r\n return elem;\r\n }\r\n\r\n static createExpressionStatement(\r\n expression: Expression\r\n ): ExpressionStatement {\r\n var stmt = new ExpressionStatement();\r\n stmt.range = expression.range;\r\n stmt.expression = expression; expression.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createIfStatement(\r\n condition: Expression,\r\n ifTrue: Statement,\r\n ifFalse: Statement | null,\r\n range: Range\r\n ): IfStatement {\r\n var stmt = new IfStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.ifTrue = ifTrue; ifTrue.parent = stmt;\r\n stmt.ifFalse = ifFalse; if (ifFalse) ifFalse.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createImportStatement(\r\n decls: ImportDeclaration[] | null,\r\n path: StringLiteralExpression,\r\n range: Range\r\n ): ImportStatement {\r\n var stmt = new ImportStatement();\r\n stmt.range = range;\r\n stmt.declarations = decls; if (decls) setParent(decls, stmt);\r\n stmt.namespaceName = null;\r\n stmt.path = path;\r\n var normalizedPath = normalizePath(path.value);\r\n if (path.value.startsWith(\".\")) { // relative in project\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute in library\r\n if (!normalizedPath.startsWith(LIBRARY_PREFIX)) {\r\n normalizedPath = LIBRARY_PREFIX + normalizedPath;\r\n }\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n return stmt;\r\n }\r\n\r\n static createImportStatementWithWildcard(\r\n identifier: IdentifierExpression,\r\n path: StringLiteralExpression,\r\n range: Range\r\n ): ImportStatement {\r\n var stmt = new ImportStatement();\r\n stmt.range = range;\r\n stmt.declarations = null;\r\n stmt.namespaceName = identifier;\r\n stmt.path = path;\r\n stmt.normalizedPath = resolvePath(\r\n normalizePath(path.value),\r\n range.source.normalizedPath\r\n );\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n return stmt;\r\n }\r\n\r\n static createImportDeclaration(\r\n externalName: IdentifierExpression,\r\n name: IdentifierExpression | null,\r\n range: Range\r\n ): ImportDeclaration {\r\n var elem = new ImportDeclaration();\r\n elem.range = range;\r\n elem.externalName = externalName; externalName.parent = elem;\r\n if (!name) {\r\n name = externalName;\r\n } else {\r\n name.parent = elem;\r\n }\r\n elem.name = name;\r\n return elem;\r\n }\r\n\r\n static createInterfaceDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[],\r\n extendsType: TypeNode | null, // can't be a function\r\n members: DeclarationStatement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): InterfaceDeclaration {\r\n var stmt = new InterfaceDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createFieldDeclaration(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): FieldDeclaration {\r\n var stmt = new FieldDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.type = type; if (type) type.parent = stmt;\r\n stmt.initializer = initializer; if (initializer) initializer.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createForStatement(\r\n initializer: Statement | null,\r\n condition: Expression | null,\r\n incrementor: Expression | null,\r\n statement: Statement,\r\n range: Range\r\n ): ForStatement {\r\n var stmt = new ForStatement();\r\n stmt.range = range;\r\n stmt.initializer = initializer; if (initializer) initializer.parent = stmt;\r\n stmt.condition = condition; if (condition) condition.parent = stmt;\r\n stmt.incrementor = incrementor; if (incrementor) incrementor.parent = stmt;\r\n stmt.statement = statement; statement.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createFunctionDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): FunctionDeclaration {\r\n var stmt = new FunctionDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.signature = signature; signature.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createMethodDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): MethodDeclaration {\r\n var stmt = new MethodDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.signature = signature; signature.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createNamespaceDeclaration(\r\n name: IdentifierExpression,\r\n members: Statement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): NamespaceDeclaration {\r\n var stmt = new NamespaceDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createReturnStatement(\r\n value: Expression | null,\r\n range: Range\r\n ): ReturnStatement {\r\n var stmt = new ReturnStatement();\r\n stmt.range = range;\r\n stmt.value = value; if (value) value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createSwitchStatement(\r\n condition: Expression,\r\n cases: SwitchCase[],\r\n range: Range\r\n ): SwitchStatement {\r\n var stmt = new SwitchStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.cases = cases; setParent(cases, stmt);\r\n return stmt;\r\n }\r\n\r\n static createSwitchCase(\r\n label: Expression | null,\r\n statements: Statement[],\r\n range: Range\r\n ): SwitchCase {\r\n var elem = new SwitchCase();\r\n elem.range = range;\r\n elem.label = label; if (label) label.parent = elem;\r\n elem.statements = statements; setParent(statements, elem);\r\n return elem;\r\n }\r\n\r\n static createThrowStatement(\r\n value: Expression,\r\n range: Range\r\n ): ThrowStatement {\r\n var stmt = new ThrowStatement();\r\n stmt.range = range;\r\n stmt.value = value; value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createTryStatement(\r\n statements: Statement[],\r\n catchVariable: IdentifierExpression | null,\r\n catchStatements: Statement[] | null,\r\n finallyStatements: Statement[] | null,\r\n range: Range\r\n ): TryStatement {\r\n var stmt = new TryStatement();\r\n stmt.range = range;\r\n stmt.statements = statements; setParent(statements, stmt);\r\n stmt.catchVariable = catchVariable;\r\n if (catchVariable) catchVariable.parent = stmt;\r\n stmt.catchStatements = catchStatements;\r\n if (catchStatements) setParent(catchStatements, stmt);\r\n stmt.finallyStatements = finallyStatements;\r\n if (finallyStatements) setParent(finallyStatements, stmt);\r\n return stmt;\r\n }\r\n\r\n static createTypeDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n alias: CommonTypeNode,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): TypeDeclaration {\r\n var stmt = new TypeDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.type = alias; alias.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createVariableStatement(\r\n declarations: VariableDeclaration[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): VariableStatement {\r\n var stmt = new VariableStatement();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.declarations = declarations; setParent(declarations, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createVariableDeclaration(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): VariableDeclaration {\r\n var elem = new VariableDeclaration();\r\n elem.range = range;\r\n elem.flags = flags;\r\n elem.name = name; name.parent = elem;\r\n elem.type = type; if (type) type.parent = elem;\r\n elem.initializer = initializer; if (initializer) initializer.parent = elem;\r\n elem.decorators = decorators; // inherited\r\n return elem;\r\n }\r\n\r\n static createVoidStatement(\r\n expression: Expression,\r\n range: Range\r\n ): VoidStatement {\r\n var stmt = new VoidStatement();\r\n stmt.range = range;\r\n stmt.expression = expression;\r\n return stmt;\r\n }\r\n\r\n static createWhileStatement(\r\n condition: Expression,\r\n statement: Statement,\r\n range: Range\r\n ): WhileStatement {\r\n var stmt = new WhileStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.statement = statement; statement.parent = stmt;\r\n return stmt;\r\n }\r\n}\r\n\r\n// types\r\n\r\nexport abstract class CommonTypeNode extends Node {\r\n // kind varies\r\n\r\n /** Whether nullable or not. */\r\n isNullable: bool;\r\n}\r\n\r\n/** Represents a type annotation. */\r\nexport class TypeNode extends CommonTypeNode {\r\n kind = NodeKind.TYPE;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Type argument references. */\r\n typeArguments: CommonTypeNode[] | null;\r\n}\r\n\r\n/** Represents a type parameter. */\r\nexport class TypeParameterNode extends Node {\r\n kind = NodeKind.TYPEPARAMETER;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Extended type reference, if any. */\r\n extendsType: TypeNode | null; // can't be a function\r\n}\r\n\r\n/** Represents the kind of a parameter. */\r\nexport enum ParameterKind {\r\n /** No specific flags. */\r\n DEFAULT,\r\n /** Is an optional parameter. */\r\n OPTIONAL,\r\n /** Is a rest parameter. */\r\n REST\r\n}\r\n\r\n/** Represents a function parameter. */\r\nexport class ParameterNode extends Node {\r\n kind = NodeKind.PARAMETER;\r\n\r\n /** Parameter kind. */\r\n parameterKind: ParameterKind;\r\n /** Parameter name. */\r\n name: IdentifierExpression;\r\n /** Parameter type. */\r\n type: CommonTypeNode;\r\n /** Initializer expression, if present. */\r\n initializer: Expression | null;\r\n /** Implicit field declaration, if applicable. */\r\n implicitFieldDeclaration: FieldDeclaration | null = null;\r\n}\r\n\r\n/** Represents a function signature. */\r\nexport class SignatureNode extends CommonTypeNode {\r\n kind = NodeKind.SIGNATURE;\r\n\r\n /** Accepted parameters. */\r\n parameters: ParameterNode[];\r\n /** Return type. */\r\n returnType: CommonTypeNode;\r\n /** Explicitly provided this type, if any. */\r\n explicitThisType: TypeNode | null; // can't be a function\r\n}\r\n\r\n// special\r\n\r\n/** Built-in decorator kinds. */\r\nexport enum DecoratorKind {\r\n CUSTOM,\r\n GLOBAL,\r\n OPERATOR,\r\n OPERATOR_BINARY,\r\n OPERATOR_PREFIX,\r\n OPERATOR_POSTFIX,\r\n UNMANAGED,\r\n SEALED,\r\n INLINE,\r\n EXTERNAL,\r\n BUILTIN\r\n}\r\n\r\n/** Returns the kind of the specified decorator. Defaults to {@link DecoratorKind.CUSTOM}. */\r\nexport function decoratorNameToKind(name: Expression): DecoratorKind {\r\n // @global, @inline, @operator, @sealed, @unmanaged\r\n if (name.kind == NodeKind.IDENTIFIER) {\r\n let nameStr = (name).text;\r\n assert(nameStr.length);\r\n switch (nameStr.charCodeAt(0)) {\r\n case CharCode.b: {\r\n if (nameStr == \"builtin\") return DecoratorKind.BUILTIN;\r\n break;\r\n }\r\n case CharCode.e: {\r\n if (nameStr == \"external\") return DecoratorKind.EXTERNAL;\r\n break;\r\n }\r\n case CharCode.g: {\r\n if (nameStr == \"global\") return DecoratorKind.GLOBAL;\r\n break;\r\n }\r\n case CharCode.i: {\r\n if (nameStr == \"inline\") return DecoratorKind.INLINE;\r\n break;\r\n }\r\n case CharCode.o: {\r\n if (nameStr == \"operator\") return DecoratorKind.OPERATOR;\r\n break;\r\n }\r\n case CharCode.s: {\r\n if (nameStr == \"sealed\") return DecoratorKind.SEALED;\r\n break;\r\n }\r\n case CharCode.u: {\r\n if (nameStr == \"unmanaged\") return DecoratorKind.UNMANAGED;\r\n break;\r\n }\r\n }\r\n } else if (\r\n name.kind == NodeKind.PROPERTYACCESS &&\r\n (name).expression.kind == NodeKind.IDENTIFIER\r\n ) {\r\n let nameStr = ((name).expression).text;\r\n assert(nameStr.length);\r\n let propStr = (name).property.text;\r\n assert(propStr.length);\r\n // @operator.binary, @operator.prefix, @operator.postfix\r\n if (nameStr == \"operator\") {\r\n switch (propStr.charCodeAt(0)) {\r\n case CharCode.b: {\r\n if (propStr == \"binary\") return DecoratorKind.OPERATOR_BINARY;\r\n break;\r\n }\r\n case CharCode.p: {\r\n switch (propStr) {\r\n case \"prefix\": return DecoratorKind.OPERATOR_PREFIX;\r\n case \"postfix\": return DecoratorKind.OPERATOR_POSTFIX;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return DecoratorKind.CUSTOM;\r\n}\r\n\r\n/** Represents a decorator. */\r\nexport class DecoratorNode extends Node {\r\n kind = NodeKind.DECORATOR;\r\n\r\n /** Built-in kind, if applicable. */\r\n decoratorKind: DecoratorKind;\r\n /** Name expression. */\r\n name: Expression;\r\n /** Argument expressions. */\r\n arguments: Expression[] | null;\r\n}\r\n\r\n/** Comment kinds. */\r\nexport enum CommentKind {\r\n /** Line comment. */\r\n LINE,\r\n /** Triple-slash comment. */\r\n TRIPLE,\r\n /** Block comment. */\r\n BLOCK\r\n}\r\n\r\n/** Represents a comment. */\r\nexport class CommentNode extends Node {\r\n kind = NodeKind.COMMENT;\r\n\r\n /** Comment kind. */\r\n commentKind: CommentKind;\r\n /** Comment text. */\r\n text: string;\r\n}\r\n\r\n// expressions\r\n\r\n/** Base class of all expression nodes. */\r\nexport abstract class Expression extends Node { }\r\n\r\n/** Represents an identifier expression. */\r\nexport class IdentifierExpression extends Expression {\r\n kind = NodeKind.IDENTIFIER;\r\n\r\n /** Textual name. */\r\n text: string;\r\n}\r\n\r\n/** Indicates the kind of a literal. */\r\nexport enum LiteralKind {\r\n FLOAT,\r\n INTEGER,\r\n STRING,\r\n REGEXP,\r\n ARRAY,\r\n OBJECT\r\n}\r\n\r\n/** Base class of all literal expressions. */\r\nexport abstract class LiteralExpression extends Expression {\r\n kind = NodeKind.LITERAL;\r\n\r\n /** Specific literal kind. */\r\n literalKind: LiteralKind;\r\n}\r\n\r\n/** Represents an `[]` literal expression. */\r\nexport class ArrayLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.ARRAY;\r\n\r\n /** Nested element expressions. */\r\n elementExpressions: (Expression | null)[];\r\n}\r\n\r\n/** Indicates the kind of an assertion. */\r\nexport enum AssertionKind {\r\n PREFIX,\r\n AS\r\n}\r\n\r\n/** Represents an assertion expression. */\r\nexport class AssertionExpression extends Expression {\r\n kind = NodeKind.ASSERTION;\r\n\r\n /** Specific kind of this assertion. */\r\n assertionKind: AssertionKind;\r\n /** Expression being asserted. */\r\n expression: Expression;\r\n /** Target type. */\r\n toType: CommonTypeNode;\r\n}\r\n\r\n/** Represents a binary expression. */\r\nexport class BinaryExpression extends Expression {\r\n kind = NodeKind.BINARY;\r\n\r\n /** Operator token. */\r\n operator: Token;\r\n /** Left-hand side expression */\r\n left: Expression;\r\n /** Right-hand side expression. */\r\n right: Expression;\r\n}\r\n\r\n/** Represents a call expression. */\r\nexport class CallExpression extends Expression {\r\n kind = NodeKind.CALL;\r\n\r\n /** Called expression. Usually an identifier or property access expression. */\r\n expression: Expression;\r\n /** Provided type arguments. */\r\n typeArguments: CommonTypeNode[] | null;\r\n /** Provided arguments. */\r\n arguments: Expression[];\r\n}\r\n\r\n/** Represents a class expression using the 'class' keyword. */\r\nexport class ClassExpression extends Expression {\r\n kind = NodeKind.CLASS;\r\n\r\n /** Inline class declaration. */\r\n declaration: ClassDeclaration;\r\n}\r\n\r\n/** Represents a comma expression composed of multiple expressions. */\r\nexport class CommaExpression extends Expression {\r\n kind = NodeKind.COMMA;\r\n\r\n /** Sequential expressions. */\r\n expressions: Expression[];\r\n}\r\n\r\n/** Represents a `constructor` expression. */\r\nexport class ConstructorExpression extends IdentifierExpression {\r\n kind = NodeKind.CONSTRUCTOR;\r\n text = \"constructor\";\r\n}\r\n\r\n/** Represents an element access expression, e.g., array access. */\r\nexport class ElementAccessExpression extends Expression {\r\n kind = NodeKind.ELEMENTACCESS;\r\n\r\n /** Expression being accessed. */\r\n expression: Expression;\r\n /** Element of the expression being accessed. */\r\n elementExpression: Expression;\r\n}\r\n\r\n/** Represents a float literal expression. */\r\nexport class FloatLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.FLOAT;\r\n\r\n /** Float value. */\r\n value: f64;\r\n}\r\n\r\n/** Represents a function expression using the 'function' keyword. */\r\nexport class FunctionExpression extends Expression {\r\n kind = NodeKind.FUNCTION;\r\n\r\n /** Inline function declaration. */\r\n declaration: FunctionDeclaration;\r\n}\r\n\r\n/** Represents an `instanceof` expression. */\r\nexport class InstanceOfExpression extends Expression {\r\n kind = NodeKind.INSTANCEOF;\r\n\r\n /** Expression being asserted. */\r\n expression: Expression;\r\n /** Type to test for. */\r\n isType: CommonTypeNode;\r\n}\r\n\r\n/** Represents an integer literal expression. */\r\nexport class IntegerLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.INTEGER;\r\n\r\n /** Integer value. */\r\n value: I64;\r\n}\r\n\r\n/** Represents a `new` expression. Like a call but with its own kind. */\r\nexport class NewExpression extends CallExpression {\r\n kind = NodeKind.NEW;\r\n}\r\n\r\n/** Represents a `null` expression. */\r\nexport class NullExpression extends IdentifierExpression {\r\n kind = NodeKind.NULL;\r\n text = \"null\";\r\n}\r\n\r\n/** Represents an object literal expression. */\r\nexport class ObjectLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.OBJECT;\r\n\r\n /** Field names. */\r\n names: IdentifierExpression[];\r\n /** Field values. */\r\n values: Expression[];\r\n}\r\n\r\n/** Represents a parenthesized expression. */\r\nexport class ParenthesizedExpression extends Expression {\r\n kind = NodeKind.PARENTHESIZED;\r\n\r\n /** Expression in parenthesis. */\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a property access expression. */\r\nexport class PropertyAccessExpression extends Expression {\r\n kind = NodeKind.PROPERTYACCESS;\r\n\r\n /** Expression being accessed. */\r\n expression: Expression;\r\n /** Property of the expression being accessed. */\r\n property: IdentifierExpression;\r\n}\r\n\r\n/** Represents a regular expression literal expression. */\r\nexport class RegexpLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.REGEXP;\r\n\r\n /** Regular expression pattern. */\r\n pattern: string;\r\n /** Regular expression flags. */\r\n patternFlags: string;\r\n}\r\n\r\n/** Represents a ternary expression, i.e., short if notation. */\r\nexport class TernaryExpression extends Expression {\r\n kind = NodeKind.TERNARY;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Expression executed when condition is `true`. */\r\n ifThen: Expression;\r\n /** Expression executed when condition is `false`. */\r\n ifElse: Expression;\r\n}\r\n\r\n/** Represents a string literal expression. */\r\nexport class StringLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.STRING;\r\n\r\n /** String value without quotes. */\r\n value: string;\r\n}\r\n\r\n/** Represents a `super` expression. */\r\nexport class SuperExpression extends IdentifierExpression {\r\n kind = NodeKind.SUPER;\r\n text = \"super\";\r\n}\r\n\r\n/** Represents a `this` expression. */\r\nexport class ThisExpression extends IdentifierExpression {\r\n kind = NodeKind.THIS;\r\n text = \"this\";\r\n}\r\n\r\n/** Represents a `true` expression. */\r\nexport class TrueExpression extends IdentifierExpression {\r\n kind = NodeKind.TRUE;\r\n text = \"true\";\r\n}\r\n\r\n/** Represents a `false` expression. */\r\nexport class FalseExpression extends IdentifierExpression {\r\n kind = NodeKind.FALSE;\r\n text = \"false\";\r\n}\r\n\r\n/** Base class of all unary expressions. */\r\nexport abstract class UnaryExpression extends Expression {\r\n\r\n /** Operator token. */\r\n operator: Token;\r\n /** Operand expression. */\r\n operand: Expression;\r\n}\r\n\r\n/** Represents a unary postfix expression, e.g. a postfix increment. */\r\nexport class UnaryPostfixExpression extends UnaryExpression {\r\n kind = NodeKind.UNARYPOSTFIX;\r\n}\r\n\r\n/** Represents a unary prefix expression, e.g. a negation. */\r\nexport class UnaryPrefixExpression extends UnaryExpression {\r\n kind = NodeKind.UNARYPREFIX;\r\n}\r\n\r\n// statements\r\n\r\nexport function isLastStatement(statement: Statement): bool {\r\n var parent = assert(statement.parent);\r\n if (parent.kind == NodeKind.BLOCK) {\r\n let statements = (parent).statements;\r\n if (statements[statements.length - 1] === statement) {\r\n switch (assert(parent.parent).kind) {\r\n case NodeKind.FUNCTIONDECLARATION:\r\n case NodeKind.METHODDECLARATION: return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n/** Base class of all statement nodes. */\r\nexport abstract class Statement extends Node { }\r\n\r\n/** Indicates the specific kind of a source. */\r\nexport enum SourceKind {\r\n /** Default source. Usually imported from an entry file. */\r\n DEFAULT,\r\n /** Entry file. */\r\n ENTRY,\r\n /** Library file. */\r\n LIBRARY\r\n}\r\n\r\n/** A top-level source node. */\r\nexport class Source extends Node {\r\n kind = NodeKind.SOURCE;\r\n parent = null;\r\n\r\n /** Source kind. */\r\n sourceKind: SourceKind;\r\n /** Normalized path. */\r\n normalizedPath: string;\r\n /** Path used internally. */\r\n internalPath: string;\r\n /** Simple path (last part without extension). */\r\n simplePath: string;\r\n /** Contained statements. */\r\n statements: Statement[];\r\n /** Full source text. */\r\n text: string;\r\n /** Tokenizer reference. */\r\n tokenizer: Tokenizer | null = null;\r\n /** Source map index. */\r\n debugInfoIndex: i32 = -1;\r\n /** Re-exported sources. */\r\n exportPaths: Set | null = null;\r\n\r\n /** Constructs a new source node. */\r\n constructor(normalizedPath: string, text: string, kind: SourceKind) {\r\n super();\r\n this.sourceKind = kind;\r\n this.normalizedPath = normalizedPath;\r\n var internalPath = mangleInternalPath(this.normalizedPath);\r\n this.internalPath = internalPath;\r\n var pos = internalPath.lastIndexOf(PATH_DELIMITER);\r\n this.simplePath = pos >= 0 ? internalPath.substring(pos + 1) : internalPath;\r\n this.statements = new Array();\r\n this.range = new Range(this, 0, text.length);\r\n this.text = text;\r\n }\r\n\r\n /** Tests if this source is an entry file. */\r\n get isEntry(): bool { return this.sourceKind == SourceKind.ENTRY; }\r\n /** Tests if this source is a stdlib file. */\r\n get isLibrary(): bool { return this.sourceKind == SourceKind.LIBRARY; }\r\n}\r\n\r\n/** Base class of all declaration statements. */\r\nexport abstract class DeclarationStatement extends Statement {\r\n\r\n /** Simple name being declared. */\r\n name: IdentifierExpression;\r\n /** Array of decorators. */\r\n decorators: DecoratorNode[] | null = null;\r\n\r\n protected cachedProgramLevelInternalName: string | null = null;\r\n protected cachedFileLevelInternalName: string | null = null;\r\n\r\n /** Gets the mangled program-level internal name of this declaration. */\r\n get programLevelInternalName(): string {\r\n if (!this.cachedProgramLevelInternalName) {\r\n this.cachedProgramLevelInternalName = mangleInternalName(this, true);\r\n }\r\n return this.cachedProgramLevelInternalName;\r\n }\r\n\r\n /** Gets the mangled file-level internal name of this declaration. */\r\n get fileLevelInternalName(): string {\r\n if (!this.cachedFileLevelInternalName) {\r\n this.cachedFileLevelInternalName = mangleInternalName(this, false);\r\n }\r\n return this.cachedFileLevelInternalName;\r\n }\r\n\r\n /** Tests if this is a top-level declaration within its source file. */\r\n get isTopLevel(): bool {\r\n var parent = this.parent;\r\n if (!parent) {\r\n return false;\r\n }\r\n if (parent.kind == NodeKind.VARIABLE && !(parent = parent.parent)) {\r\n return false;\r\n }\r\n return parent.kind == NodeKind.SOURCE;\r\n }\r\n\r\n /** Tests if this declaration is a top-level export within its source file. */\r\n get isTopLevelExport(): bool {\r\n var parent = this.parent;\r\n if (!parent || (parent.kind == NodeKind.VARIABLE && !(parent = parent.parent))) {\r\n return false;\r\n }\r\n if (parent.kind == NodeKind.NAMESPACEDECLARATION) {\r\n return this.is(CommonFlags.EXPORT) && (parent).isTopLevelExport;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return this.is(CommonFlags.STATIC) && (parent).isTopLevelExport;\r\n }\r\n return parent.kind == NodeKind.SOURCE && this.is(CommonFlags.EXPORT);\r\n }\r\n\r\n /** Tests if this declaration needs an explicit export. */\r\n needsExplicitExport(member: ExportMember): bool {\r\n // This is necessary because module-level exports are automatically created\r\n // for top level declarations of all sorts. This function essentially tests\r\n // that there isn't a otherwise duplicate top-level export already.\r\n return (\r\n member.name.text != member.externalName.text || // if aliased\r\n this.range.source != member.range.source || // if a re-export\r\n !this.isTopLevelExport // if not top-level\r\n );\r\n }\r\n}\r\n\r\n/** Base class of all variable-like declaration statements. */\r\nexport abstract class VariableLikeDeclarationStatement extends DeclarationStatement {\r\n\r\n /** Variable type. */\r\n type: CommonTypeNode | null;\r\n /** Variable initializer. */\r\n initializer: Expression | null;\r\n}\r\n\r\n/** Represents a block statement. */\r\nexport class BlockStatement extends Statement {\r\n kind = NodeKind.BLOCK;\r\n\r\n /** Contained statements. */\r\n statements: Statement[];\r\n}\r\n\r\n/** Represents a `break` statement. */\r\nexport class BreakStatement extends Statement {\r\n kind = NodeKind.BREAK;\r\n\r\n /** Target label, if applicable. */\r\n label: IdentifierExpression | null;\r\n}\r\n\r\n/** Represents a `class` declaration. */\r\nexport class ClassDeclaration extends DeclarationStatement {\r\n kind = NodeKind.CLASSDECLARATION;\r\n\r\n /** Accepted type parameters. */\r\n typeParameters: TypeParameterNode[];\r\n /** Base class type being extended, if any. */\r\n extendsType: TypeNode | null; // can't be a function\r\n /** Interface types being implemented, if any. */\r\n implementsTypes: TypeNode[] | null; // can't be functions\r\n /** Class member declarations. */\r\n members: DeclarationStatement[];\r\n\r\n get isGeneric(): bool {\r\n var typeParameters = this.typeParameters;\r\n return typeParameters != null && typeParameters.length > 0;\r\n }\r\n}\r\n\r\n/** Represents a `continue` statement. */\r\nexport class ContinueStatement extends Statement {\r\n kind = NodeKind.CONTINUE;\r\n\r\n /** Target label, if applicable. */\r\n label: IdentifierExpression | null;\r\n}\r\n\r\n/** Represents a `do` statement. */\r\nexport class DoStatement extends Statement {\r\n kind = NodeKind.DO;\r\n\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n /** Condition when to repeat. */\r\n condition: Expression;\r\n}\r\n\r\n/** Represents an empty statement, i.e., a semicolon terminating nothing. */\r\nexport class EmptyStatement extends Statement {\r\n kind = NodeKind.EMPTY;\r\n}\r\n\r\n/** Represents an `enum` declaration. */\r\nexport class EnumDeclaration extends DeclarationStatement {\r\n kind = NodeKind.ENUMDECLARATION;\r\n\r\n /** Enum value declarations. */\r\n values: EnumValueDeclaration[];\r\n}\r\n\r\n/** Represents a value of an `enum` declaration. */\r\nexport class EnumValueDeclaration extends DeclarationStatement {\r\n kind = NodeKind.ENUMVALUEDECLARATION;\r\n // name is inherited\r\n\r\n /** Value expression. */\r\n value: Expression | null;\r\n}\r\n\r\n/** Represents an `export import` statement of an interface. */\r\nexport class ExportImportStatement extends Node {\r\n kind = NodeKind.EXPORTIMPORT;\r\n\r\n /** Identifier being imported. */\r\n name: IdentifierExpression;\r\n /** Identifier being exported. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents a member of an `export` statement. */\r\nexport class ExportMember extends Node {\r\n kind = NodeKind.EXPORTMEMBER;\r\n\r\n /** Identifier being exported. */\r\n name: IdentifierExpression;\r\n /** Identifier seen when imported again. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents an `export` statement. */\r\nexport class ExportStatement extends Statement {\r\n kind = NodeKind.EXPORT;\r\n\r\n /** Array of members if a set of named exports, or `null` if a filespace export. */\r\n members: ExportMember[] | null;\r\n /** Path being exported from, if applicable. */\r\n path: StringLiteralExpression | null;\r\n /** Normalized path, if `path` is set. */\r\n normalizedPath: string | null;\r\n /** Mangled internal path being referenced, if `path` is set. */\r\n internalPath: string | null;\r\n}\r\n\r\n/** Represents an expression that is used as a statement. */\r\nexport class ExpressionStatement extends Statement {\r\n kind = NodeKind.EXPRESSION;\r\n\r\n /** Expression being used as a statement.*/\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a field declaration within a `class`. */\r\nexport class FieldDeclaration extends VariableLikeDeclarationStatement {\r\n kind = NodeKind.FIELDDECLARATION;\r\n\r\n /** Parameter index within the constructor, if applicable. */\r\n parameterIndex: i32 = -1;\r\n}\r\n\r\n/** Represents a `for` statement. */\r\nexport class ForStatement extends Statement {\r\n kind = NodeKind.FOR;\r\n\r\n /**\r\n * Initializer statement, if present.\r\n * Either a {@link VariableStatement} or {@link ExpressionStatement}.\r\n */\r\n initializer: Statement | null;\r\n /** Condition expression, if present. */\r\n condition: Expression | null;\r\n /** Incrementor expression, if present. */\r\n incrementor: Expression | null;\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n}\r\n\r\n/** Represents a `function` declaration. */\r\nexport class FunctionDeclaration extends DeclarationStatement {\r\n kind = NodeKind.FUNCTIONDECLARATION;\r\n\r\n /** Type parameters, if any. */\r\n typeParameters: TypeParameterNode[] | null;\r\n /** Function signature. */\r\n signature: SignatureNode;\r\n /** Body statement. Usually a block. */\r\n body: Statement | null;\r\n\r\n get isGeneric(): bool {\r\n var typeParameters = this.typeParameters;\r\n return typeParameters != null && typeParameters.length > 0;\r\n }\r\n}\r\n\r\n/** Represents an `if` statement. */\r\nexport class IfStatement extends Statement {\r\n kind = NodeKind.IF;\r\n\r\n /** Condition. */\r\n condition: Expression;\r\n /** Statement executed when condition is `true`. */\r\n ifTrue: Statement;\r\n /** Statement executed when condition is `false`. */\r\n ifFalse: Statement | null;\r\n}\r\n\r\n/** Represents an `import` declaration part of an {@link ImportStatement}. */\r\nexport class ImportDeclaration extends DeclarationStatement {\r\n kind = NodeKind.IMPORTDECLARATION;\r\n\r\n /** Identifier being imported. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents an `import` statement. */\r\nexport class ImportStatement extends Statement {\r\n kind = NodeKind.IMPORT;\r\n\r\n /** Array of member declarations or `null` if an asterisk import. */\r\n declarations: ImportDeclaration[] | null;\r\n /** Name of the local namespace, if an asterisk import. */\r\n namespaceName: IdentifierExpression | null;\r\n /** Path being imported from. */\r\n path: StringLiteralExpression;\r\n /** Normalized path. */\r\n normalizedPath: string;\r\n /** Mangled internal path being referenced. */\r\n internalPath: string;\r\n}\r\n\r\n/** Represents an `interfarce` declaration. */\r\nexport class InterfaceDeclaration extends ClassDeclaration {\r\n kind = NodeKind.INTERFACEDECLARATION;\r\n}\r\n\r\n/** Represents a method declaration within a `class`. */\r\nexport class MethodDeclaration extends FunctionDeclaration {\r\n kind = NodeKind.METHODDECLARATION;\r\n}\r\n\r\n/** Represents a `namespace` declaration. */\r\nexport class NamespaceDeclaration extends DeclarationStatement {\r\n kind = NodeKind.NAMESPACEDECLARATION;\r\n\r\n /** Array of namespace members. */\r\n members: Statement[];\r\n}\r\n\r\n/** Represents a `return` statement. */\r\nexport class ReturnStatement extends Statement {\r\n kind = NodeKind.RETURN;\r\n\r\n /** Value expression being returned, if present. */\r\n value: Expression | null;\r\n}\r\n\r\n/** Represents a single `case` within a `switch` statement. */\r\nexport class SwitchCase extends Node {\r\n kind = NodeKind.SWITCHCASE;\r\n\r\n /** Label expression. `null` indicates the default case. */\r\n label: Expression | null;\r\n /** Contained statements. */\r\n statements: Statement[];\r\n}\r\n\r\n/** Represents a `switch` statement. */\r\nexport class SwitchStatement extends Statement {\r\n kind = NodeKind.SWITCH;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Contained cases. */\r\n cases: SwitchCase[];\r\n}\r\n\r\n/** Represents a `throw` statement. */\r\nexport class ThrowStatement extends Statement {\r\n kind = NodeKind.THROW;\r\n\r\n /** Value expression being thrown. */\r\n value: Expression;\r\n}\r\n\r\n/** Represents a `try` statement. */\r\nexport class TryStatement extends Statement {\r\n kind = NodeKind.TRY;\r\n\r\n /** Contained statements. */\r\n statements: Statement[];\r\n /** Exception variable name, if a `catch` clause is present. */\r\n catchVariable: IdentifierExpression | null;\r\n /** Statements being executed on catch, if a `catch` clause is present. */\r\n catchStatements: Statement[] | null;\r\n /** Statements being executed afterwards, if a `finally` clause is present. */\r\n finallyStatements: Statement[] | null;\r\n}\r\n\r\n/** Represents a `type` declaration. */\r\nexport class TypeDeclaration extends DeclarationStatement {\r\n kind = NodeKind.TYPEDECLARATION;\r\n\r\n /** Type parameters, if any. */\r\n typeParameters: TypeParameterNode[] | null;\r\n /** Type being aliased. */\r\n type: CommonTypeNode;\r\n}\r\n\r\n/** Represents a variable declaration part of a {@link VariableStatement}. */\r\nexport class VariableDeclaration extends VariableLikeDeclarationStatement {\r\n kind = NodeKind.VARIABLEDECLARATION;\r\n}\r\n\r\n/** Represents a variable statement wrapping {@link VariableDeclaration}s. */\r\nexport class VariableStatement extends Statement {\r\n kind = NodeKind.VARIABLE;\r\n\r\n /** Array of decorators. */\r\n decorators: DecoratorNode[] | null;\r\n /** Array of member declarations. */\r\n declarations: VariableDeclaration[];\r\n}\r\n\r\n/** Represents a void statement dropping an expression's value. */\r\nexport class VoidStatement extends Statement {\r\n kind = NodeKind.VOID;\r\n\r\n /** Expression being dropped. */\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a `while` statement. */\r\nexport class WhileStatement extends Statement {\r\n kind = NodeKind.WHILE;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n}\r\n\r\n/** Finds the first decorator matching the specified kind. */\r\nexport function findDecorator(kind: DecoratorKind, decorators: DecoratorNode[] | null): DecoratorNode | null {\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n if (decorator.decoratorKind == kind) return decorator;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/** Mangles a declaration's name to an internal name. */\r\nexport function mangleInternalName(declaration: DeclarationStatement, asGlobal: bool = false): string {\r\n var name = declaration.name.text;\r\n var parent = declaration.parent;\r\n if (!parent) return name;\r\n if (\r\n declaration.kind == NodeKind.VARIABLEDECLARATION &&\r\n parent.kind == NodeKind.VARIABLE\r\n ) { // skip over\r\n if (!(parent = parent.parent)) return name;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return mangleInternalName(parent, asGlobal) + (\r\n declaration.is(CommonFlags.STATIC)\r\n ? STATIC_DELIMITER\r\n : INSTANCE_DELIMITER\r\n ) + name;\r\n }\r\n if (\r\n parent.kind == NodeKind.NAMESPACEDECLARATION ||\r\n parent.kind == NodeKind.ENUMDECLARATION\r\n ) {\r\n return mangleInternalName(parent, asGlobal) +\r\n STATIC_DELIMITER + name;\r\n }\r\n return asGlobal\r\n ? name\r\n : declaration.range.source.internalPath + PATH_DELIMITER + name;\r\n}\r\n\r\n/** Mangles an external to an internal path. */\r\nexport function mangleInternalPath(path: string): string {\r\n if (path.endsWith(\".ts\")) path = path.substring(0, path.length - 3);\r\n return path;\r\n}\r\n\r\n// Helpers\r\n\r\n/** Sets the parent node on an array of nodes. */\r\nfunction setParent(nodes: Node[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n nodes[i].parent = parent;\r\n }\r\n}\r\n\r\n/** Sets the parent node on an array of nullable nodes. */\r\nfunction setParentIfNotNull(nodes: (Node | null)[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n let node = nodes[i];\r\n if (node) node.parent = parent;\r\n }\r\n}\r\n","/**\r\n * AssemblyScript's intermediate representation describing a program's elements.\r\n * @module program\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n PATH_DELIMITER,\r\n STATIC_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n LIBRARY_PREFIX,\r\n GETTER_PREFIX,\r\n SETTER_PREFIX,\r\n FILESPACE_PREFIX\r\n} from \"./common\";\r\n\r\nimport {\r\n Options,\r\n Feature\r\n} from \"./compiler\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticMessage,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags,\r\n Signature\r\n} from \"./types\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Source,\r\n Range,\r\n CommonTypeNode,\r\n TypeParameterNode,\r\n DecoratorNode,\r\n DecoratorKind,\r\n\r\n Expression,\r\n IdentifierExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n StringLiteralExpression,\r\n\r\n ClassDeclaration,\r\n DeclarationStatement,\r\n EnumDeclaration,\r\n EnumValueDeclaration,\r\n ExportMember,\r\n ExportStatement,\r\n FieldDeclaration,\r\n FunctionDeclaration,\r\n ImportDeclaration,\r\n ImportStatement,\r\n InterfaceDeclaration,\r\n MethodDeclaration,\r\n NamespaceDeclaration,\r\n TypeDeclaration,\r\n VariableDeclaration,\r\n VariableLikeDeclarationStatement,\r\n VariableStatement,\r\n\r\n decoratorNameToKind,\r\n findDecorator\r\n} from \"./ast\";\r\n\r\nimport {\r\n Module,\r\n NativeType,\r\n FunctionRef,\r\n ExpressionRef,\r\n ExpressionId,\r\n BinaryOp,\r\n UnaryOp,\r\n\r\n getExpressionId,\r\n getGetLocalIndex,\r\n isTeeLocal,\r\n getSetLocalValue,\r\n getBinaryOp,\r\n getConstValueI32,\r\n getBinaryLeft,\r\n getBinaryRight,\r\n getUnaryOp,\r\n getExpressionType,\r\n getLoadBytes,\r\n isLoadSigned,\r\n getIfTrue,\r\n getIfFalse,\r\n getSelectThen,\r\n getSelectElse,\r\n getCallTarget,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getBlockName,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getConstValueI64Low\r\n} from \"./module\";\r\n\r\nimport {\r\n CharCode\r\n} from \"./util\";\r\n\r\nimport {\r\n Resolver\r\n} from \"./resolver\";\r\n\r\n/** Represents a yet unresolved import. */\r\nclass QueuedImport {\r\n localName: string;\r\n externalName: string;\r\n externalNameAlt: string;\r\n declaration: ImportDeclaration | null; // not set if a filespace\r\n}\r\n\r\n/** Represents a yet unresolved export. */\r\nclass QueuedExport {\r\n externalName: string;\r\n isReExport: bool;\r\n member: ExportMember;\r\n}\r\n\r\n/** Represents a type alias. */\r\nclass TypeAlias {\r\n typeParameters: TypeParameterNode[] | null;\r\n type: CommonTypeNode;\r\n}\r\n\r\n/** Represents a module-level export. */\r\nclass ModuleExport {\r\n element: Element;\r\n identifier: IdentifierExpression;\r\n}\r\n\r\n/** Represents the kind of an operator overload. */\r\nexport enum OperatorKind {\r\n INVALID,\r\n\r\n // indexed access\r\n INDEXED_GET, // a[]\r\n INDEXED_SET, // a[]=b\r\n UNCHECKED_INDEXED_GET, // unchecked(a[])\r\n UNCHECKED_INDEXED_SET, // unchecked(a[]=b)\r\n\r\n // binary\r\n ADD, // a + b\r\n SUB, // a - b\r\n MUL, // a * b\r\n DIV, // a / b\r\n REM, // a % b\r\n POW, // a ** b\r\n BITWISE_AND, // a & b\r\n BITWISE_OR, // a | b\r\n BITWISE_XOR, // a ^ b\r\n BITWISE_SHL, // a << b\r\n BITWISE_SHR, // a >> b\r\n BITWISE_SHR_U, // a >>> b\r\n EQ, // a == b\r\n NE, // a != b\r\n GT, // a > b\r\n GE, // a >= b\r\n LT, // a < b\r\n LE, // a <= b\r\n\r\n // unary prefix\r\n PLUS, // +a\r\n MINUS, // -a\r\n NOT, // !a\r\n BITWISE_NOT, // ~a\r\n PREFIX_INC, // ++a\r\n PREFIX_DEC, // --a\r\n\r\n // unary postfix\r\n POSTFIX_INC, // a++\r\n POSTFIX_DEC // a--\r\n\r\n // not overridable:\r\n // IDENTITY // a === b\r\n // LOGICAL_AND // a && b\r\n // LOGICAL_OR // a || b\r\n}\r\n\r\n/** Returns the operator kind represented by the specified decorator and string argument. */\r\nfunction operatorKindFromDecorator(decoratorKind: DecoratorKind, arg: string): OperatorKind {\r\n assert(arg.length);\r\n switch (decoratorKind) {\r\n case DecoratorKind.OPERATOR:\r\n case DecoratorKind.OPERATOR_BINARY: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.OPENBRACKET: {\r\n if (arg == \"[]\") return OperatorKind.INDEXED_GET;\r\n if (arg == \"[]=\") return OperatorKind.INDEXED_SET;\r\n break;\r\n }\r\n case CharCode.OPENBRACE: {\r\n if (arg == \"{}\") return OperatorKind.UNCHECKED_INDEXED_GET;\r\n if (arg == \"{}=\") return OperatorKind.UNCHECKED_INDEXED_SET;\r\n break;\r\n }\r\n case CharCode.PLUS: {\r\n if (arg == \"+\") return OperatorKind.ADD;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"-\") return OperatorKind.SUB;\r\n break;\r\n }\r\n case CharCode.ASTERISK: {\r\n if (arg == \"*\") return OperatorKind.MUL;\r\n if (arg == \"**\") return OperatorKind.POW;\r\n break;\r\n }\r\n case CharCode.SLASH: {\r\n if (arg == \"/\") return OperatorKind.DIV;\r\n break;\r\n }\r\n case CharCode.PERCENT: {\r\n if (arg == \"%\") return OperatorKind.REM;\r\n break;\r\n }\r\n case CharCode.AMPERSAND: {\r\n if (arg == \"&\") return OperatorKind.BITWISE_AND;\r\n break;\r\n }\r\n case CharCode.BAR: {\r\n if (arg == \"|\") return OperatorKind.BITWISE_OR;\r\n break;\r\n }\r\n case CharCode.CARET: {\r\n if (arg == \"^\") return OperatorKind.BITWISE_XOR;\r\n break;\r\n }\r\n case CharCode.EQUALS: {\r\n if (arg == \"==\") return OperatorKind.EQ;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n if (arg == \"!=\") return OperatorKind.NE;\r\n break;\r\n }\r\n case CharCode.GREATERTHAN: {\r\n if (arg == \">\") return OperatorKind.GT;\r\n if (arg == \">=\") return OperatorKind.GE;\r\n if (arg == \">>\") return OperatorKind.BITWISE_SHR;\r\n if (arg == \">>>\") return OperatorKind.BITWISE_SHR_U;\r\n break;\r\n }\r\n case CharCode.LESSTHAN: {\r\n if (arg == \"<\") return OperatorKind.LT;\r\n if (arg == \"<=\") return OperatorKind.LE;\r\n if (arg == \"<<\") return OperatorKind.BITWISE_SHL;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case DecoratorKind.OPERATOR_PREFIX: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.PLUS: {\r\n if (arg == \"+\") return OperatorKind.PLUS;\r\n if (arg == \"++\") return OperatorKind.PREFIX_INC;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"-\") return OperatorKind.MINUS;\r\n if (arg == \"--\") return OperatorKind.PREFIX_DEC;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n if (arg == \"!\") return OperatorKind.NOT;\r\n break;\r\n }\r\n case CharCode.TILDE: {\r\n if (arg == \"~\") return OperatorKind.BITWISE_NOT;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case DecoratorKind.OPERATOR_POSTFIX: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.PLUS: {\r\n if (arg == \"++\") return OperatorKind.POSTFIX_INC;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"--\") return OperatorKind.POSTFIX_DEC;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n return OperatorKind.INVALID;\r\n}\r\n\r\nconst noTypesYet = new Map();\r\n\r\n/** Represents an AssemblyScript program. */\r\nexport class Program extends DiagnosticEmitter {\r\n\r\n /** Array of source files. */\r\n sources: Source[];\r\n /** Resolver instance. */\r\n resolver: Resolver;\r\n /** Diagnostic offset used where successively obtaining the next diagnostic. */\r\n diagnosticsOffset: i32 = 0;\r\n /** Compiler options. */\r\n options: Options;\r\n\r\n /** Elements by internal name. */\r\n elementsLookup: Map = new Map();\r\n /** Class and function instances by internal name. */\r\n instancesLookup: Map = new Map();\r\n /** Types by internal name. */\r\n typesLookup: Map = noTypesYet;\r\n /** Declared type aliases. */\r\n typeAliases: Map = new Map();\r\n /** File-level exports by exported name. */\r\n fileLevelExports: Map = new Map();\r\n /** Module-level exports by exported name. */\r\n moduleLevelExports: Map = new Map();\r\n\r\n /** ArrayBuffer instance reference. */\r\n arrayBufferInstance: Class | null = null;\r\n /** Array prototype reference. */\r\n arrayPrototype: ClassPrototype | null = null;\r\n /** String instance reference. */\r\n stringInstance: Class | null = null;\r\n /** Start function reference. */\r\n startFunction: FunctionPrototype;\r\n /** Main function reference, if present. */\r\n mainFunction: FunctionPrototype | null = null;\r\n /** Abort function reference, if present. */\r\n abortInstance: Function | null = null;\r\n /** Memory allocation function. */\r\n memoryAllocateInstance: Function | null = null;\r\n\r\n /** Whether a garbage collector is present or not. */\r\n hasGC: bool = false;\r\n /** Garbage collector allocation function. */\r\n gcAllocateInstance: Function | null = null;\r\n /** Garbage collector link function called when a managed object is referenced from a parent. */\r\n gcLinkInstance: Function | null = null;\r\n /** Garbage collector mark function called to on reachable managed objects. */\r\n gcMarkInstance: Function | null = null;\r\n /** Size of a managed object header. */\r\n gcHeaderSize: u32 = 0;\r\n /** Offset of the GC hook. */\r\n gcHookOffset: u32 = 0;\r\n\r\n /** Currently processing filespace. */\r\n currentFilespace: Filespace;\r\n\r\n /** Constructs a new program, optionally inheriting parser diagnostics. */\r\n constructor(diagnostics: DiagnosticMessage[] | null = null) {\r\n super(diagnostics);\r\n this.resolver = new Resolver(this);\r\n this.sources = [];\r\n }\r\n\r\n /** Gets a source by its exact path. */\r\n getSource(normalizedPath: string): Source | null {\r\n var sources = this.sources;\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n let source = sources[i];\r\n if (source.normalizedPath == normalizedPath) return source;\r\n }\r\n return null;\r\n }\r\n\r\n /** Looks up the source for the specified possibly ambiguous path. */\r\n lookupSourceByPath(normalizedPathWithoutExtension: string): Source | null {\r\n var tmp: string;\r\n return (\r\n this.getSource(normalizedPathWithoutExtension + \".ts\") ||\r\n this.getSource(normalizedPathWithoutExtension + \"/index.ts\") ||\r\n this.getSource((tmp = LIBRARY_PREFIX + normalizedPathWithoutExtension) + \".ts\") ||\r\n this.getSource( tmp + \"/index.ts\")\r\n );\r\n }\r\n\r\n /** Initializes the program and its elements prior to compilation. */\r\n initialize(options: Options): void {\r\n this.options = options;\r\n\r\n // add built-in types\r\n this.typesLookup = new Map([\r\n [\"i8\", Type.i8],\r\n [\"i16\", Type.i16],\r\n [\"i32\", Type.i32],\r\n [\"i64\", Type.i64],\r\n [\"isize\", options.isizeType],\r\n [\"u8\", Type.u8],\r\n [\"u16\", Type.u16],\r\n [\"u32\", Type.u32],\r\n [\"u64\", Type.u64],\r\n [\"usize\", options.usizeType],\r\n [\"bool\", Type.bool],\r\n [\"f32\", Type.f32],\r\n [\"f64\", Type.f64],\r\n [\"void\", Type.void],\r\n [\"number\", Type.f64],\r\n [\"boolean\", Type.bool]\r\n ]);\r\n\r\n // add compiler hints\r\n this.setConstantInteger(\"ASC_TARGET\", Type.i32,\r\n i64_new(options.isWasm64 ? 2 : 1));\r\n this.setConstantInteger(\"ASC_NO_TREESHAKING\", Type.bool,\r\n i64_new(options.noTreeShaking ? 1 : 0, 0));\r\n this.setConstantInteger(\"ASC_NO_ASSERT\", Type.bool,\r\n i64_new(options.noAssert ? 1 : 0, 0));\r\n this.setConstantInteger(\"ASC_MEMORY_BASE\", Type.i32,\r\n i64_new(options.memoryBase, 0));\r\n this.setConstantInteger(\"ASC_OPTIMIZE_LEVEL\", Type.i32,\r\n i64_new(options.optimizeLevelHint, 0));\r\n this.setConstantInteger(\"ASC_SHRINK_LEVEL\", Type.i32,\r\n i64_new(options.shrinkLevelHint, 0));\r\n this.setConstantInteger(\"ASC_FEATURE_MUTABLE_GLOBAL\", Type.bool,\r\n i64_new(options.hasFeature(Feature.MUTABLE_GLOBAL) ? 1 : 0, 0));\r\n this.setConstantInteger(\"ASC_FEATURE_SIGN_EXTENSION\", Type.bool,\r\n i64_new(options.hasFeature(Feature.SIGN_EXTENSION) ? 1 : 0, 0));\r\n\r\n // remember deferred elements\r\n var queuedImports = new Array();\r\n var queuedExports = new Map();\r\n var queuedExtends = new Array();\r\n var queuedImplements = new Array();\r\n\r\n // build initial lookup maps of internal names to declarations\r\n for (let i = 0, k = this.sources.length; i < k; ++i) {\r\n let source = this.sources[i];\r\n\r\n // create one filespace per source\r\n let filespace = new Filespace(this, source);\r\n this.elementsLookup.set(filespace.internalName, filespace);\r\n this.currentFilespace = filespace;\r\n\r\n // process this source's statements\r\n let statements = source.statements;\r\n for (let j = 0, l = statements.length; j < l; ++j) {\r\n let statement = statements[j];\r\n switch (statement.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n this.initializeClass(statement, queuedExtends, queuedImplements);\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n this.initializeEnum(statement);\r\n break;\r\n }\r\n case NodeKind.EXPORT: {\r\n this.initializeExports(statement, queuedExports);\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n this.initializeFunction(statement);\r\n break;\r\n }\r\n case NodeKind.IMPORT: {\r\n this.initializeImports(statement, queuedExports, queuedImports);\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n this.initializeInterface(statement);\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n this.initializeNamespace(statement, queuedExtends, queuedImplements);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n this.initializeTypeAlias(statement);\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n this.initializeVariables(statement);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // queued imports should be resolvable now through traversing exports and queued exports\r\n for (let i = 0; i < queuedImports.length;) {\r\n let queuedImport = queuedImports[i];\r\n let declaration = queuedImport.declaration;\r\n if (declaration) { // named\r\n let element = this.tryLocateImport(queuedImport.externalName, queuedExports);\r\n if (element) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n if (element = this.tryLocateImport(queuedImport.externalNameAlt, queuedExports)) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Module_0_has_no_exported_member_1,\r\n declaration.range,\r\n (declaration.parent).path.value,\r\n declaration.externalName.text\r\n );\r\n ++i;\r\n }\r\n }\r\n } else { // filespace\r\n let element = this.elementsLookup.get(queuedImport.externalName);\r\n if (element) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n if (element = this.elementsLookup.get(queuedImport.externalNameAlt)) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n assert(false); // already reported by the parser not finding the file\r\n ++i;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // queued exports should be resolvable now that imports are finalized\r\n for (let [exportName, queuedExport] of queuedExports) {\r\n let currentExport: QueuedExport | null = queuedExport; // nullable below\r\n let element: Element | null;\r\n do {\r\n if (currentExport.isReExport) {\r\n if (element = this.fileLevelExports.get(currentExport.externalName)) {\r\n this.setExportAndCheckLibrary(\r\n exportName,\r\n element,\r\n queuedExport.member.externalName\r\n );\r\n break;\r\n }\r\n currentExport = queuedExports.get(currentExport.externalName);\r\n if (!currentExport) {\r\n this.error(\r\n DiagnosticCode.Module_0_has_no_exported_member_1,\r\n queuedExport.member.externalName.range,\r\n ((queuedExport.member.parent).path).value,\r\n queuedExport.member.externalName.text\r\n );\r\n }\r\n } else {\r\n if (\r\n // normal export\r\n (element = this.elementsLookup.get(currentExport.externalName)) ||\r\n // library re-export\r\n (element = this.elementsLookup.get(currentExport.member.name.text))\r\n ) {\r\n this.setExportAndCheckLibrary(\r\n exportName,\r\n element,\r\n queuedExport.member.externalName\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n queuedExport.member.range, queuedExport.member.name.text\r\n );\r\n }\r\n break;\r\n }\r\n } while (currentExport);\r\n }\r\n\r\n // resolve base prototypes of derived classes\r\n var resolver = this.resolver;\r\n for (let i = 0, k = queuedExtends.length; i < k; ++i) {\r\n let derivedPrototype = queuedExtends[i];\r\n let derivedDeclaration = derivedPrototype.declaration;\r\n let derivedType = assert(derivedDeclaration.extendsType);\r\n let baseElement = resolver.resolveIdentifier(derivedType.name, null); // reports\r\n if (!baseElement) continue;\r\n if (baseElement.kind == ElementKind.CLASS_PROTOTYPE) {\r\n let basePrototype = baseElement;\r\n derivedPrototype.basePrototype = basePrototype;\r\n } else {\r\n this.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n derivedType.range\r\n );\r\n }\r\n }\r\n\r\n // set up global aliases\r\n {\r\n let globalAliases = options.globalAliases;\r\n if (globalAliases) {\r\n for (let [alias, name] of globalAliases) {\r\n if (!name.length) continue; // explicitly disabled\r\n let element = this.elementsLookup.get(name);\r\n if (element) this.elementsLookup.set(alias, element);\r\n else throw new Error(\"element not found: \" + name);\r\n }\r\n }\r\n }\r\n\r\n // register 'ArrayBuffer'\r\n if (this.elementsLookup.has(\"ArrayBuffer\")) {\r\n let element = assert(this.elementsLookup.get(\"ArrayBuffer\"));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.arrayBufferInstance = resolver.resolveClass(element, null);\r\n }\r\n\r\n // register 'Array'\r\n if (this.elementsLookup.has(\"Array\")) {\r\n let element = assert(this.elementsLookup.get(\"Array\"));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.arrayPrototype = element;\r\n }\r\n\r\n // register 'String'\r\n if (this.elementsLookup.has(\"String\")) {\r\n let element = assert(this.elementsLookup.get(\"String\"));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n let instance = resolver.resolveClass(element, null);\r\n if (instance) {\r\n if (this.typesLookup.has(\"string\")) {\r\n let declaration = (element).declaration;\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, declaration.programLevelInternalName\r\n );\r\n } else {\r\n this.stringInstance = instance;\r\n this.typesLookup.set(\"string\", instance.type);\r\n }\r\n }\r\n }\r\n\r\n // register 'start'\r\n {\r\n let element = assert(this.elementsLookup.get(\"start\"));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.startFunction = element;\r\n }\r\n\r\n // register 'main' if present\r\n if (this.moduleLevelExports.has(\"main\")) {\r\n let element = (this.moduleLevelExports.get(\"main\")).element;\r\n if (\r\n element.kind == ElementKind.FUNCTION_PROTOTYPE &&\r\n !(element).isAny(CommonFlags.GENERIC | CommonFlags.AMBIENT)\r\n ) {\r\n (element).set(CommonFlags.MAIN);\r\n this.mainFunction = element;\r\n }\r\n }\r\n\r\n // register 'abort' if present\r\n if (this.elementsLookup.has(\"abort\")) {\r\n let element = this.elementsLookup.get(\"abort\");\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let instance = this.resolver.resolveFunction(element, null);\r\n if (instance) this.abortInstance = instance;\r\n }\r\n\r\n // register 'memory.allocate' if present\r\n if (this.elementsLookup.has(\"memory\")) {\r\n let element = this.elementsLookup.get(\"memory\");\r\n let members = element.members;\r\n if (members) {\r\n if (members.has(\"allocate\")) {\r\n element = assert(members.get(\"allocate\"));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let instance = this.resolver.resolveFunction(element, null);\r\n if (instance) this.memoryAllocateInstance = instance;\r\n }\r\n }\r\n }\r\n\r\n // register GC hooks if present\r\n if (\r\n this.elementsLookup.has(\"__gc_allocate\") &&\r\n this.elementsLookup.has(\"__gc_link\") &&\r\n this.elementsLookup.has(\"__gc_mark\")\r\n ) {\r\n // __gc_allocate(usize, (ref: usize) => void): usize\r\n let element = this.elementsLookup.get(\"__gc_allocate\");\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let gcAllocateInstance = assert(this.resolver.resolveFunction(element, null));\r\n let signature = gcAllocateInstance.signature;\r\n assert(signature.parameterTypes.length == 2);\r\n assert(signature.parameterTypes[0] == this.options.usizeType);\r\n assert(signature.parameterTypes[1].signatureReference);\r\n assert(signature.returnType == this.options.usizeType);\r\n\r\n // __gc_link(usize, usize): void\r\n element = this.elementsLookup.get(\"__gc_link\");\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let gcLinkInstance = assert(this.resolver.resolveFunction(element, null));\r\n signature = gcLinkInstance.signature;\r\n assert(signature.parameterTypes.length == 2);\r\n assert(signature.parameterTypes[0] == this.options.usizeType);\r\n assert(signature.parameterTypes[1] == this.options.usizeType);\r\n assert(signature.returnType == Type.void);\r\n\r\n // __gc_mark(usize): void\r\n element = this.elementsLookup.get(\"__gc_mark\");\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let gcMarkInstance = assert(this.resolver.resolveFunction(element, null));\r\n signature = gcMarkInstance.signature;\r\n assert(signature.parameterTypes.length == 1);\r\n assert(signature.parameterTypes[0] == this.options.usizeType);\r\n assert(signature.returnType == Type.void);\r\n\r\n this.gcAllocateInstance = gcAllocateInstance;\r\n this.gcLinkInstance = gcLinkInstance;\r\n this.gcMarkInstance = gcMarkInstance;\r\n let gcHookOffset = 2 * options.usizeType.byteSize; // .next + .prev\r\n this.gcHookOffset = gcHookOffset;\r\n this.gcHeaderSize = (gcHookOffset + 4 + 7) & ~7; // + .hook index + alignment\r\n this.hasGC = true;\r\n }\r\n }\r\n\r\n /** Sets a constant integer value. */\r\n setConstantInteger(globalName: string, type: Type, value: I64): void {\r\n assert(type.is(TypeFlags.INTEGER));\r\n this.elementsLookup.set(globalName,\r\n new Global(this, globalName, globalName, type, null, DecoratorFlags.NONE)\r\n .withConstantIntegerValue(value)\r\n );\r\n }\r\n\r\n /** Sets a constant float value. */\r\n setConstantFloat(globalName: string, type: Type, value: f64): void {\r\n assert(type.is(TypeFlags.FLOAT));\r\n this.elementsLookup.set(globalName,\r\n new Global(this, globalName, globalName, type, null, DecoratorFlags.NONE)\r\n .withConstantFloatValue(value)\r\n );\r\n }\r\n\r\n /** Tries to locate an import by traversing exports and queued exports. */\r\n private tryLocateImport(\r\n externalName: string,\r\n queuedNamedExports: Map\r\n ): Element | null {\r\n var element: Element | null;\r\n var fileLevelExports = this.fileLevelExports;\r\n do {\r\n if (element = fileLevelExports.get(externalName)) return element;\r\n let queuedExport = queuedNamedExports.get(externalName);\r\n if (!queuedExport) break;\r\n if (queuedExport.isReExport) {\r\n externalName = queuedExport.externalName;\r\n continue;\r\n }\r\n return this.elementsLookup.get(queuedExport.externalName);\r\n } while (true);\r\n return null;\r\n }\r\n\r\n /** Checks that only supported decorators are present. */\r\n private checkDecorators(\r\n decorators: DecoratorNode[],\r\n acceptedFlags: DecoratorFlags\r\n ): DecoratorFlags {\r\n var presentFlags = DecoratorFlags.NONE;\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n let kind = decoratorNameToKind(decorator.name);\r\n let flag = decoratorKindToFlag(kind);\r\n if (flag) {\r\n if (flag == DecoratorFlags.BUILTIN) {\r\n if (decorator.range.source.isLibrary) {\r\n presentFlags |= flag;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n decorator.range, decorator.name.range.toString()\r\n );\r\n }\r\n } else if (!(acceptedFlags & flag)) {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n decorator.range, decorator.name.range.toString()\r\n );\r\n } else if (presentFlags & flag) {\r\n this.error(\r\n DiagnosticCode.Duplicate_decorator,\r\n decorator.range, decorator.name.range.toString()\r\n );\r\n } else {\r\n presentFlags |= flag;\r\n }\r\n }\r\n }\r\n return presentFlags;\r\n }\r\n\r\n /** Checks and sets up global options of an element. */\r\n private checkGlobal(\r\n element: Element,\r\n declaration: DeclarationStatement\r\n ): void {\r\n var parentNode = declaration.parent;\r\n // alias globally if explicitly annotated @global or exported from a top-level library file\r\n if (\r\n (element.hasDecorator(DecoratorFlags.GLOBAL)) ||\r\n (\r\n declaration.range.source.isLibrary &&\r\n element.is(CommonFlags.EXPORT) &&\r\n (\r\n assert(parentNode).kind == NodeKind.SOURCE ||\r\n (\r\n parentNode).kind == NodeKind.VARIABLE &&\r\n assert((parentNode).parent).kind == NodeKind.SOURCE\r\n )\r\n )\r\n ) {\r\n let globalName = declaration.programLevelInternalName;\r\n if (this.elementsLookup.has(globalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, element.internalName\r\n );\r\n } else {\r\n this.elementsLookup.set(globalName, element);\r\n }\r\n }\r\n // builtins use the global name directly\r\n if (element.hasDecorator(DecoratorFlags.BUILTIN)) {\r\n element.internalName = declaration.programLevelInternalName;\r\n }\r\n }\r\n\r\n /** Initializes a class declaration. */\r\n private initializeClass(\r\n declaration: ClassDeclaration,\r\n queuedExtends: ClassPrototype[],\r\n queuedImplements: ClassPrototype[],\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var simpleName = declaration.name.text;\r\n var prototype = new ClassPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n decorators\r\n ? this.checkDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.SEALED |\r\n DecoratorFlags.UNMANAGED\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n var implementsTypes = declaration.implementsTypes;\r\n if (implementsTypes) {\r\n let numImplementsTypes = implementsTypes.length;\r\n if (prototype.hasDecorator(DecoratorFlags.UNMANAGED)) {\r\n if (numImplementsTypes) {\r\n this.error(\r\n DiagnosticCode.Unmanaged_classes_cannot_implement_interfaces,\r\n Range.join(\r\n declaration.name.range,\r\n implementsTypes[numImplementsTypes - 1].range\r\n )\r\n );\r\n }\r\n\r\n // remember classes that implement interfaces\r\n } else if (numImplementsTypes) {\r\n for (let i = 0; i < numImplementsTypes; ++i) {\r\n this.warning( // TODO\r\n DiagnosticCode.Operation_not_supported,\r\n implementsTypes[i].range\r\n );\r\n }\r\n queuedImplements.push(prototype);\r\n }\r\n }\r\n\r\n // remember classes that extend another one\r\n if (declaration.extendsType) queuedExtends.push(prototype);\r\n\r\n // add as namespace member if applicable\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // otherwise add to file-level exports if exported\r\n } else if (prototype.is(CommonFlags.EXPORT)) {\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, prototype);\r\n this.currentFilespace.members.set(simpleName, prototype);\r\n if (prototype.is(CommonFlags.EXPORT) && declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element: prototype,\r\n identifier: declaration.name\r\n });\r\n }\r\n }\r\n\r\n // initialize members\r\n var memberDeclarations = declaration.members;\r\n for (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n case NodeKind.FIELDDECLARATION: {\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n }\r\n case NodeKind.METHODDECLARATION: {\r\n if (memberDeclaration.isAny(CommonFlags.GET | CommonFlags.SET)) {\r\n this.initializeAccessor(memberDeclaration, prototype);\r\n } else {\r\n this.initializeMethod(memberDeclaration, prototype);\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false); // should have been reported while parsing\r\n return;\r\n }\r\n }\r\n }\r\n\r\n this.checkGlobal(prototype, declaration);\r\n }\r\n\r\n /** Initializes a field of a class or interface. */\r\n private initializeField(\r\n declaration: FieldDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n var decorators = declaration.decorators;\r\n var isInterface = classPrototype.kind == ElementKind.INTERFACE_PROTOTYPE;\r\n\r\n // static fields become global variables\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n if (isInterface) {\r\n // should have been reported while parsing\r\n assert(false);\r\n }\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n let staticField = new Global(\r\n this,\r\n name,\r\n internalName,\r\n Type.void, // resolved later on\r\n declaration,\r\n decorators\r\n ? this.checkDecorators(decorators, DecoratorFlags.INLINE)\r\n : DecoratorFlags.NONE\r\n );\r\n staticField.parent = classPrototype;\r\n classPrototype.members.set(name, staticField);\r\n this.elementsLookup.set(internalName, staticField);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n staticField.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n if (staticField.hasDecorator(DecoratorFlags.INLINE) && !staticField.is(CommonFlags.READONLY)) {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n assert(findDecorator(DecoratorKind.INLINE, decorators)).range, \"inline\"\r\n );\r\n }\r\n\r\n // instance fields are remembered until resolved\r\n } else {\r\n if (isInterface) {\r\n // should have been reported while parsing\r\n assert(!declaration.isAny(CommonFlags.ABSTRACT | CommonFlags.GET | CommonFlags.SET));\r\n }\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n let instanceField = new FieldPrototype(\r\n classPrototype,\r\n name,\r\n internalName,\r\n declaration\r\n );\r\n if (decorators) this.checkDecorators(decorators, DecoratorFlags.NONE);\r\n classPrototype.instanceMembers.set(name, instanceField);\r\n }\r\n }\r\n\r\n /** Initializes a method of a class or interface. */\r\n private initializeMethod(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var simpleName = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n var prototype: FunctionPrototype | null = null;\r\n\r\n var decorators = declaration.decorators;\r\n var decoratorFlags = DecoratorFlags.NONE;\r\n if (decorators) {\r\n decoratorFlags = this.checkDecorators(decorators,\r\n DecoratorFlags.OPERATOR_BINARY |\r\n DecoratorFlags.OPERATOR_PREFIX |\r\n DecoratorFlags.OPERATOR_POSTFIX |\r\n DecoratorFlags.INLINE\r\n );\r\n }\r\n\r\n // static methods become global functions\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n assert(declaration.name.kind != NodeKind.CONSTRUCTOR);\r\n\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0, declaration.name.range,\r\n internalName\r\n );\r\n return;\r\n }\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n classPrototype.members.set(simpleName, prototype);\r\n this.elementsLookup.set(internalName, prototype);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance methods are remembered until resolved\r\n } else {\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n // if (classPrototype.isUnmanaged && instancePrototype.isAbstract) {\r\n // this.error( Unmanaged classes cannot declare abstract methods. );\r\n // }\r\n if (declaration.name.kind == NodeKind.CONSTRUCTOR) {\r\n if (classPrototype.constructorPrototype) {\r\n this.error(\r\n DiagnosticCode.Multiple_constructor_implementations_are_not_allowed,\r\n declaration.name.range\r\n );\r\n } else {\r\n prototype.set(CommonFlags.CONSTRUCTOR);\r\n classPrototype.constructorPrototype = prototype;\r\n }\r\n } else {\r\n classPrototype.instanceMembers.set(simpleName, prototype);\r\n }\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n\r\n this.checkOperatorOverloads(declaration.decorators, prototype, classPrototype);\r\n }\r\n\r\n private checkOperatorOverloads(\r\n decorators: DecoratorNode[] | null,\r\n prototype: FunctionPrototype,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n switch (decorator.decoratorKind) {\r\n case DecoratorKind.OPERATOR:\r\n case DecoratorKind.OPERATOR_BINARY:\r\n case DecoratorKind.OPERATOR_PREFIX:\r\n case DecoratorKind.OPERATOR_POSTFIX: {\r\n let numArgs = decorator.arguments && decorator.arguments.length || 0;\r\n if (numArgs == 1) {\r\n let firstArg = (decorator.arguments)[0];\r\n if (\r\n firstArg.kind == NodeKind.LITERAL &&\r\n (firstArg).literalKind == LiteralKind.STRING\r\n ) {\r\n let kind = operatorKindFromDecorator(\r\n decorator.decoratorKind,\r\n (firstArg).value\r\n );\r\n if (kind == OperatorKind.INVALID) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n firstArg.range\r\n );\r\n } else {\r\n let overloads = classPrototype.overloadPrototypes;\r\n if (overloads.has(kind)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_function_implementation,\r\n firstArg.range\r\n );\r\n } else {\r\n prototype.operatorKind = kind;\r\n overloads.set(kind, prototype);\r\n }\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n firstArg.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n decorator.range, \"1\", numArgs.toString(0)\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private initializeAccessor(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var simpleName = declaration.name.text;\r\n var internalPropertyName = declaration.fileLevelInternalName;\r\n var propertyElement = this.elementsLookup.get(internalPropertyName);\r\n var isGetter = declaration.is(CommonFlags.GET);\r\n var isNew = false;\r\n if (propertyElement) {\r\n if (\r\n propertyElement.kind != ElementKind.PROPERTY ||\r\n (isGetter\r\n ? (propertyElement).getterPrototype\r\n : (propertyElement).setterPrototype\r\n ) != null\r\n ) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalPropertyName\r\n );\r\n return;\r\n }\r\n } else {\r\n propertyElement = new Property(\r\n this,\r\n simpleName,\r\n internalPropertyName,\r\n classPrototype\r\n );\r\n isNew = true;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var decoratorFlags = DecoratorFlags.NONE;\r\n if (decorators) {\r\n decoratorFlags = this.checkDecorators(decorators,\r\n DecoratorFlags.INLINE\r\n );\r\n }\r\n\r\n var baseName = (isGetter ? GETTER_PREFIX : SETTER_PREFIX) + simpleName;\r\n\r\n // static accessors become global functions\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n let staticName = classPrototype.internalName + STATIC_DELIMITER + baseName;\r\n if (this.elementsLookup.has(staticName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, staticName\r\n );\r\n return;\r\n }\r\n let staticPrototype = new FunctionPrototype(\r\n this,\r\n baseName,\r\n staticName,\r\n declaration,\r\n null,\r\n decoratorFlags\r\n );\r\n if (isGetter) {\r\n (propertyElement).getterPrototype = staticPrototype;\r\n } else {\r\n (propertyElement).setterPrototype = staticPrototype;\r\n }\r\n if (isNew) {\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, staticName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n classPrototype.members.set(simpleName, propertyElement); // check above\r\n } else {\r\n assert(classPrototype.members && classPrototype.members.has(simpleName));\r\n }\r\n this.elementsLookup.set(internalPropertyName, propertyElement);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n propertyElement.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance accessors are remembered until resolved\r\n } else {\r\n let instanceName = classPrototype.internalName + INSTANCE_DELIMITER + baseName;\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(baseName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalPropertyName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n let instancePrototype = new FunctionPrototype(\r\n this,\r\n baseName,\r\n instanceName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n if (isGetter) {\r\n (propertyElement).getterPrototype = instancePrototype;\r\n } else {\r\n (propertyElement).setterPrototype = instancePrototype;\r\n }\r\n classPrototype.instanceMembers.set(baseName, propertyElement);\r\n this.elementsLookup.set(internalPropertyName, propertyElement);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n propertyElement.set(CommonFlags.MODULE_EXPORT);\r\n instancePrototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n }\r\n\r\n private initializeEnum(\r\n declaration: EnumDeclaration,\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n var simpleName = declaration.name.text;\r\n var element = new Enum(this, simpleName, internalName, declaration);\r\n element.parent = namespace;\r\n this.elementsLookup.set(internalName, element);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, element);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && element.is(CommonFlags.EXPORT)) {\r\n element.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (element.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, element);\r\n this.currentFilespace.members.set(simpleName, element);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n element.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element,\r\n identifier: declaration.name\r\n });\r\n }\r\n }\r\n\r\n var values = declaration.values;\r\n for (let i = 0, k = values.length; i < k; ++i) {\r\n this.initializeEnumValue(values[i], element);\r\n }\r\n\r\n this.checkGlobal(element, declaration);\r\n }\r\n\r\n private initializeEnumValue(\r\n declaration: EnumValueDeclaration,\r\n enm: Enum\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n if (enm.members) {\r\n if (enm.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n enm.members = new Map();\r\n }\r\n var value = new EnumValue(enm, this, name, internalName, declaration);\r\n enm.members.set(name, value);\r\n if (enm.is(CommonFlags.MODULE_EXPORT)) {\r\n value.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n\r\n private initializeExports(\r\n statement: ExportStatement,\r\n queuedExports: Map\r\n ): void {\r\n var members = statement.members;\r\n if (members) { // named\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n this.initializeExport(members[i], statement.internalPath, queuedExports);\r\n }\r\n } else { // TODO: filespace\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n }\r\n }\r\n\r\n private setExportAndCheckLibrary(\r\n internalName: string,\r\n element: Element,\r\n externalIdentifier: IdentifierExpression\r\n ): void {\r\n // add to file-level exports\r\n this.fileLevelExports.set(internalName, element);\r\n\r\n // add to filespace\r\n var internalPath = externalIdentifier.range.source.internalPath;\r\n var prefix = FILESPACE_PREFIX + internalPath;\r\n var filespace = this.elementsLookup.get(prefix);\r\n if (!filespace) filespace = assert(this.elementsLookup.get(prefix + PATH_DELIMITER + \"index\"));\r\n assert(filespace.kind == ElementKind.FILESPACE);\r\n var simpleName = externalIdentifier.text;\r\n (filespace).members.set(simpleName, element);\r\n\r\n // add global alias if a top-level export of a library file\r\n var source = externalIdentifier.range.source;\r\n if (source.isLibrary) {\r\n if (this.elementsLookup.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n externalIdentifier.range, simpleName\r\n );\r\n } else {\r\n element.internalName = simpleName;\r\n this.elementsLookup.set(simpleName, element);\r\n }\r\n\r\n // add module level export if a top-level export of an entry file\r\n } else if (source.isEntry) {\r\n this.moduleLevelExports.set(externalIdentifier.text, {\r\n element,\r\n identifier: externalIdentifier\r\n });\r\n }\r\n }\r\n\r\n private initializeExport(\r\n member: ExportMember,\r\n internalPath: string | null,\r\n queuedExports: Map\r\n ): void {\r\n var externalName = member.range.source.internalPath + PATH_DELIMITER + member.externalName.text;\r\n if (this.fileLevelExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n var referencedName: string;\r\n var referencedElement: Element | null;\r\n var queuedExport: QueuedExport | null;\r\n\r\n // export local element\r\n if (internalPath == null) {\r\n referencedName = member.range.source.internalPath + PATH_DELIMITER + member.name.text;\r\n\r\n // resolve right away if the element exists\r\n if (this.elementsLookup.has(referencedName)) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n this.elementsLookup.get(referencedName),\r\n member.externalName\r\n );\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n if (queuedExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n queuedExport = new QueuedExport();\r\n queuedExport.isReExport = false;\r\n queuedExport.externalName = referencedName; // -> here: local name\r\n queuedExport.member = member;\r\n queuedExports.set(externalName, queuedExport);\r\n\r\n // export external element\r\n } else {\r\n referencedName = internalPath + PATH_DELIMITER + member.name.text;\r\n\r\n // resolve right away if the export exists\r\n referencedElement = this.elementsLookup.get(referencedName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n\r\n // walk already known queued exports\r\n let seen = new Set();\r\n while (queuedExport = queuedExports.get(referencedName)) {\r\n if (queuedExport.isReExport) {\r\n referencedElement = this.fileLevelExports.get(queuedExport.externalName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n referencedName = queuedExport.externalName;\r\n if (seen.has(queuedExport)) break;\r\n seen.add(queuedExport);\r\n } else {\r\n referencedElement = this.elementsLookup.get(queuedExport.externalName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // otherwise queue it\r\n if (queuedExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n queuedExport = new QueuedExport();\r\n queuedExport.isReExport = true;\r\n queuedExport.externalName = referencedName; // -> here: external name\r\n queuedExport.member = member;\r\n queuedExports.set(externalName, queuedExport);\r\n }\r\n }\r\n\r\n private initializeFunction(\r\n declaration: FunctionDeclaration,\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n var simpleName = declaration.name.text;\r\n var decorators = declaration.decorators;\r\n var prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n null,\r\n decorators\r\n ? this.checkDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.INLINE |\r\n DecoratorFlags.EXTERNAL\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.parent = namespace;\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (prototype.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, prototype);\r\n this.currentFilespace.members.set(simpleName, prototype);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element: prototype,\r\n identifier: declaration.name\r\n });\r\n }\r\n }\r\n\r\n this.checkGlobal(prototype, declaration);\r\n }\r\n\r\n private initializeImports(\r\n statement: ImportStatement,\r\n queuedExports: Map,\r\n queuedImports: QueuedImport[]\r\n ): void {\r\n var declarations = statement.declarations;\r\n if (declarations) {\r\n for (let i = 0, k = declarations.length; i < k; ++i) {\r\n this.initializeImport(\r\n declarations[i],\r\n statement.internalPath,\r\n queuedExports, queuedImports\r\n );\r\n }\r\n } else if (statement.namespaceName) { // import * as simpleName from \"file\"\r\n let simpleName = statement.namespaceName.text;\r\n let internalName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n simpleName\r\n );\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n statement.namespaceName.range,\r\n internalName\r\n );\r\n return;\r\n }\r\n\r\n // resolve right away if the exact filespace exists\r\n let filespace = this.elementsLookup.get(statement.internalPath);\r\n if (filespace) {\r\n this.elementsLookup.set(internalName, filespace);\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n let queuedImport = new QueuedImport();\r\n queuedImport.localName = internalName;\r\n let externalName = FILESPACE_PREFIX + statement.internalPath;\r\n queuedImport.externalName = externalName;\r\n queuedImport.externalNameAlt = externalName + PATH_DELIMITER + \"index\";\r\n queuedImport.declaration = null; // filespace\r\n queuedImports.push(queuedImport);\r\n }\r\n }\r\n\r\n private initializeImport(\r\n declaration: ImportDeclaration,\r\n internalPath: string,\r\n queuedNamedExports: Map,\r\n queuedImports: QueuedImport[]\r\n ): void {\r\n var localName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(localName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, localName\r\n );\r\n return;\r\n }\r\n\r\n var externalName = internalPath + PATH_DELIMITER + declaration.externalName.text;\r\n\r\n // resolve right away if the exact export exists\r\n var element: Element | null;\r\n if (element = this.fileLevelExports.get(externalName)) {\r\n this.elementsLookup.set(localName, element);\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n const indexPart = PATH_DELIMITER + \"index\";\r\n var queuedImport = new QueuedImport();\r\n queuedImport.localName = localName;\r\n if (internalPath.endsWith(indexPart)) {\r\n queuedImport.externalName = externalName; // try exact first\r\n queuedImport.externalNameAlt = (\r\n internalPath.substring(0, internalPath.length - indexPart.length + 1) +\r\n declaration.externalName.text\r\n );\r\n } else {\r\n queuedImport.externalName = externalName; // try exact first\r\n queuedImport.externalNameAlt = (\r\n internalPath +\r\n indexPart +\r\n PATH_DELIMITER +\r\n declaration.externalName.text\r\n );\r\n }\r\n queuedImport.declaration = declaration; // named\r\n queuedImports.push(queuedImport);\r\n }\r\n\r\n private initializeInterface(declaration: InterfaceDeclaration, namespace: Element | null = null): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var simpleName = declaration.name.text;\r\n var prototype = new InterfacePrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n decorators\r\n ? this.checkDecorators(decorators, DecoratorFlags.GLOBAL)\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(prototype.internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(prototype.internalName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (prototype.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, prototype);\r\n this.currentFilespace.members.set(simpleName, prototype);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element: prototype,\r\n identifier: declaration.name\r\n });\r\n }\r\n }\r\n\r\n var memberDeclarations = declaration.members;\r\n for (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n\r\n case NodeKind.FIELDDECLARATION: {\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n }\r\n case NodeKind.METHODDECLARATION: {\r\n if (memberDeclaration.isAny(CommonFlags.GET | CommonFlags.SET)) {\r\n this.initializeAccessor(memberDeclaration, prototype);\r\n } else {\r\n this.initializeMethod(memberDeclaration, prototype);\r\n }\r\n break;\r\n }\r\n default: {\r\n throw new Error(\"interface member expected\");\r\n }\r\n }\r\n }\r\n\r\n this.checkGlobal(prototype, declaration);\r\n }\r\n\r\n private initializeNamespace(\r\n declaration: NamespaceDeclaration,\r\n queuedExtends: ClassPrototype[],\r\n queuedImplements: ClassPrototype[],\r\n parentNamespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n var simpleName = declaration.name.text;\r\n var namespace = this.elementsLookup.get(internalName);\r\n if (!namespace) {\r\n namespace = new Namespace(this, simpleName, internalName, declaration);\r\n namespace.parent = parentNamespace;\r\n this.elementsLookup.set(internalName, namespace);\r\n this.checkGlobal(namespace, declaration);\r\n }\r\n\r\n if (parentNamespace) {\r\n if (parentNamespace.members) {\r\n if (parentNamespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n parentNamespace.members = new Map();\r\n }\r\n parentNamespace.members.set(simpleName, namespace);\r\n if (parentNamespace.is(CommonFlags.MODULE_EXPORT) && namespace.is(CommonFlags.EXPORT)) {\r\n namespace.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (namespace.is(CommonFlags.EXPORT)) { // no parent namespace\r\n let existingExport = this.fileLevelExports.get(internalName);\r\n if (existingExport) {\r\n if (!existingExport.is(CommonFlags.EXPORT)) {\r\n this.error(\r\n DiagnosticCode.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local,\r\n declaration.name.range, namespace.internalName\r\n ); // recoverable\r\n }\r\n namespace = existingExport; // join\r\n } else {\r\n this.fileLevelExports.set(internalName, namespace);\r\n }\r\n this.currentFilespace.members.set(simpleName, namespace);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n if (existingExport.element !== namespace) { // not merged\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n this.moduleLevelExports.set(simpleName, {\r\n element: namespace,\r\n identifier: declaration.name\r\n });\r\n }\r\n namespace.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n\r\n var members = declaration.members;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n switch (members[i].kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n this.initializeClass(members[i], queuedExtends, queuedImplements, namespace);\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n this.initializeEnum(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n this.initializeFunction(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n this.initializeInterface(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n this.initializeNamespace(members[i], queuedExtends, queuedImplements, namespace);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n // this.initializeTypeAlias(members[i], namespace);\r\n // TODO: what about namespaced types?\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n members[i].range\r\n );\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n this.initializeVariables(members[i], namespace);\r\n break;\r\n }\r\n default: {\r\n throw new Error(\"namespace member expected\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n private initializeTypeAlias(declaration: TypeDeclaration, namespace: Element | null = null): void {\r\n // type aliases are program globals\r\n // TODO: what about namespaced types?\r\n var name = declaration.name.text;\r\n if (this.typesLookup.has(name) || this.typeAliases.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, name\r\n );\r\n return;\r\n }\r\n var alias = new TypeAlias();\r\n alias.typeParameters = declaration.typeParameters;\r\n alias.type = declaration.type;\r\n this.typeAliases.set(name, alias);\r\n }\r\n\r\n private initializeVariables(statement: VariableStatement, namespace: Element | null = null): void {\r\n var declarations = statement.declarations;\r\n for (let i = 0, k = declarations.length; i < k; ++i) {\r\n let declaration = declarations[i];\r\n let decorators = declaration.decorators;\r\n let internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n continue;\r\n }\r\n let simpleName = declaration.name.text;\r\n let global = new Global(\r\n this,\r\n simpleName,\r\n internalName,\r\n Type.void, // resolved later on\r\n declaration,\r\n decorators\r\n ? this.checkDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.INLINE |\r\n DecoratorFlags.EXTERNAL\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n global.parent = namespace;\r\n this.elementsLookup.set(internalName, global);\r\n\r\n if (global.hasDecorator(DecoratorFlags.INLINE) && !global.is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n assert(findDecorator(DecoratorKind.INLINE, decorators)).range, \"inline\"\r\n );\r\n }\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n continue;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, global);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && global.is(CommonFlags.EXPORT)) {\r\n global.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (global.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n } else {\r\n this.fileLevelExports.set(internalName, global);\r\n }\r\n this.currentFilespace.members.set(simpleName, global);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n continue;\r\n }\r\n global.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element: global,\r\n identifier: declaration.name\r\n });\r\n }\r\n }\r\n this.checkGlobal(global, declaration);\r\n }\r\n }\r\n}\r\n\r\n/** Indicates the specific kind of an {@link Element}. */\r\nexport enum ElementKind {\r\n /** A {@link Global}. */\r\n GLOBAL,\r\n /** A {@link Local}. */\r\n LOCAL,\r\n /** An {@link Enum}. */\r\n ENUM,\r\n /** An {@link EnumValue}. */\r\n ENUMVALUE,\r\n /** A {@link FunctionPrototype}. */\r\n FUNCTION_PROTOTYPE,\r\n /** A {@link Function}. */\r\n FUNCTION,\r\n /** A {@link FunctionTarget}. */\r\n FUNCTION_TARGET,\r\n /** A {@link ClassPrototype}. */\r\n CLASS_PROTOTYPE,\r\n /** A {@link Class}. */\r\n CLASS,\r\n /** An {@link InterfacePrototype}. */\r\n INTERFACE_PROTOTYPE,\r\n /** An {@link Interface}. */\r\n INTERFACE,\r\n /** A {@link FieldPrototype}. */\r\n FIELD_PROTOTYPE,\r\n /** A {@link Field}. */\r\n FIELD,\r\n /** A {@link Property}. */\r\n PROPERTY,\r\n /** A {@link Namespace}. */\r\n NAMESPACE,\r\n /** A {@link Filespace}. */\r\n FILESPACE,\r\n}\r\n\r\nexport enum DecoratorFlags {\r\n /** No flags set. */\r\n NONE = 0,\r\n /** Is a program global. */\r\n GLOBAL = 1 << 0,\r\n /** Is a binary operator overload. */\r\n OPERATOR_BINARY = 1 << 1,\r\n /** Is a unary prefix operator overload. */\r\n OPERATOR_PREFIX = 1 << 2,\r\n /** Is a unary postfix operator overload. */\r\n OPERATOR_POSTFIX = 1 << 3,\r\n /** Is an unmanaged class. */\r\n UNMANAGED = 1 << 4,\r\n /** Is a sealed class. */\r\n SEALED = 1 << 5,\r\n /** Is always inlined. */\r\n INLINE = 1 << 6,\r\n /** Is using a different external name. */\r\n EXTERNAL = 1 << 7,\r\n /** Is a builtin. */\r\n BUILTIN = 1 << 8\r\n}\r\n\r\nexport function decoratorKindToFlag(kind: DecoratorKind): DecoratorFlags {\r\n switch (kind) {\r\n case DecoratorKind.GLOBAL: return DecoratorFlags.GLOBAL;\r\n case DecoratorKind.OPERATOR:\r\n case DecoratorKind.OPERATOR_BINARY: return DecoratorFlags.OPERATOR_BINARY;\r\n case DecoratorKind.OPERATOR_PREFIX: return DecoratorFlags.OPERATOR_PREFIX;\r\n case DecoratorKind.OPERATOR_POSTFIX: return DecoratorFlags.OPERATOR_POSTFIX;\r\n case DecoratorKind.UNMANAGED: return DecoratorFlags.UNMANAGED;\r\n case DecoratorKind.SEALED: return DecoratorFlags.SEALED;\r\n case DecoratorKind.INLINE: return DecoratorFlags.INLINE;\r\n case DecoratorKind.EXTERNAL: return DecoratorFlags.EXTERNAL;\r\n case DecoratorKind.BUILTIN: return DecoratorFlags.BUILTIN;\r\n default: return DecoratorFlags.NONE;\r\n }\r\n}\r\n\r\n/** Base class of all program elements. */\r\nexport abstract class Element {\r\n\r\n /** Specific element kind. */\r\n kind: ElementKind;\r\n /** Containing {@link Program}. */\r\n program: Program;\r\n /** Simple name. */\r\n simpleName: string;\r\n /** Internal name referring to this element. */\r\n internalName: string;\r\n /** Common flags indicating specific traits. */\r\n flags: CommonFlags = CommonFlags.NONE;\r\n /** Decorator flags indicating annotated traits. */\r\n decoratorFlags: DecoratorFlags = DecoratorFlags.NONE;\r\n /** Namespaced member elements. */\r\n members: Map | null = null;\r\n /** Parent element, if applicable. */\r\n parent: Element | null = null;\r\n\r\n /** Constructs a new element, linking it to its containing {@link Program}. */\r\n protected constructor(program: Program, simpleName: string, internalName: string) {\r\n this.program = program;\r\n this.simpleName = simpleName;\r\n this.internalName = internalName;\r\n }\r\n\r\n /** Tests if this element has a specific flag or flags. */\r\n is(flag: CommonFlags): bool { return (this.flags & flag) == flag; }\r\n /** Tests if this element has any of the specified flags. */\r\n isAny(flags: CommonFlags): bool { return (this.flags & flags) != 0; }\r\n /** Sets a specific flag or flags. */\r\n set(flag: CommonFlags): void { this.flags |= flag; }\r\n /** Tests if this element has a specific decorator flag or flags. */\r\n hasDecorator(flag: DecoratorFlags): bool { return (this.decoratorFlags & flag) == flag; }\r\n}\r\n\r\n/** A filespace representing the implicit top-level namespace of a source. */\r\nexport class Filespace extends Element {\r\n\r\n kind = ElementKind.FILESPACE;\r\n\r\n /** File members (externally visible only). */\r\n members: Map; // more specific\r\n\r\n /** Constructs a new filespace. */\r\n constructor(\r\n program: Program,\r\n source: Source\r\n ) {\r\n super(program, source.internalPath, FILESPACE_PREFIX + source.internalPath);\r\n this.members = new Map();\r\n }\r\n}\r\n\r\n/** A namespace that differs from a filespace in being user-declared with a name. */\r\nexport class Namespace extends Element {\r\n\r\n // All elements have namespace semantics. This is an explicitly declared one.\r\n kind = ElementKind.NAMESPACE;\r\n\r\n /** Declaration reference. */\r\n declaration: NamespaceDeclaration; // more specific\r\n\r\n /** Constructs a new namespace. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: NamespaceDeclaration\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n }\r\n}\r\n\r\n/** An enum. */\r\nexport class Enum extends Element {\r\n\r\n kind = ElementKind.ENUM;\r\n\r\n /** Declaration reference. */\r\n declaration: EnumDeclaration;\r\n\r\n /** Constructs a new enum. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: EnumDeclaration\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n }\r\n}\r\n\r\n/** An enum value. */\r\nexport class EnumValue extends Element {\r\n\r\n kind = ElementKind.ENUMVALUE;\r\n\r\n /** Declaration reference. */\r\n declaration: EnumValueDeclaration;\r\n /** Constant value, if applicable. */\r\n constantValue: i32 = 0;\r\n\r\n constructor(\r\n enm: Enum,\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: EnumValueDeclaration\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.parent = enm;\r\n this.declaration = declaration;\r\n }\r\n}\r\n\r\nexport const enum ConstantValueKind {\r\n NONE,\r\n INTEGER,\r\n FLOAT\r\n}\r\n\r\nexport class VariableLikeElement extends Element {\r\n\r\n // kind varies\r\n\r\n /** Declaration reference. */\r\n declaration: VariableLikeDeclarationStatement | null;\r\n /** Variable type. Is {@link Type.void} for type-inferred {@link Global}s before compilation. */\r\n type: Type;\r\n /** Constant value kind. */\r\n constantValueKind: ConstantValueKind = ConstantValueKind.NONE;\r\n /** Constant integer value, if applicable. */\r\n constantIntegerValue: I64;\r\n /** Constant float value, if applicable. */\r\n constantFloatValue: f64;\r\n\r\n protected constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n type: Type,\r\n declaration: VariableLikeDeclarationStatement | null\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.type = type;\r\n this.declaration = declaration;\r\n }\r\n\r\n withConstantIntegerValue(value: I64): this {\r\n this.constantValueKind = ConstantValueKind.INTEGER;\r\n this.constantIntegerValue = value;\r\n this.set(CommonFlags.CONST | CommonFlags.INLINED);\r\n return this;\r\n }\r\n\r\n withConstantFloatValue(value: f64): this {\r\n this.constantValueKind = ConstantValueKind.FLOAT;\r\n this.constantFloatValue = value;\r\n this.set(CommonFlags.CONST | CommonFlags.INLINED);\r\n return this;\r\n }\r\n}\r\n\r\n/** A global variable. */\r\nexport class Global extends VariableLikeElement {\r\n\r\n kind = ElementKind.GLOBAL;\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n type: Type,\r\n declaration: VariableLikeDeclarationStatement | null,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName, type, declaration);\r\n this.flags = declaration ? declaration.flags : CommonFlags.NONE;\r\n this.decoratorFlags = decoratorFlags;\r\n this.type = type; // resolved later if `void`\r\n }\r\n}\r\n\r\n/** A function parameter. */\r\nexport class Parameter {\r\n\r\n // not an Element on its own\r\n\r\n /** Parameter name. */\r\n name: string;\r\n /** Parameter type. */\r\n type: Type;\r\n /** Parameter initializer. */\r\n initializer: Expression | null;\r\n\r\n /** Constructs a new function parameter. */\r\n constructor(name: string, type: Type, initializer: Expression | null = null) {\r\n this.name = name;\r\n this.type = type;\r\n this.initializer = initializer;\r\n }\r\n}\r\n\r\n/** A function local. */\r\nexport class Local extends VariableLikeElement {\r\n\r\n kind = ElementKind.LOCAL;\r\n\r\n /** Local index. */\r\n index: i32;\r\n /** Respective scoped global, if any. */\r\n scopedGlobal: Global | null = null;\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n index: i32,\r\n type: Type,\r\n declaration: VariableLikeDeclarationStatement | null = null\r\n ) {\r\n super(program, simpleName, simpleName, type, declaration);\r\n this.index = index;\r\n }\r\n}\r\n\r\n/** A yet unresolved function prototype. */\r\nexport class FunctionPrototype extends Element {\r\n\r\n kind = ElementKind.FUNCTION_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: FunctionDeclaration;\r\n /** If an instance method, the class prototype reference. */\r\n classPrototype: ClassPrototype | null;\r\n /** Resolved instances. */\r\n instances: Map = new Map();\r\n /** Class type arguments, if a partially resolved method of a generic class. Not set otherwise. */\r\n classTypeArguments: Type[] | null = null;\r\n /** Operator kind, if an overload. */\r\n operatorKind: OperatorKind = OperatorKind.INVALID;\r\n\r\n /** Constructs a new function prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FunctionDeclaration,\r\n classPrototype: ClassPrototype | null = null,\r\n decoratorFlags: DecoratorFlags = DecoratorFlags.NONE\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n this.classPrototype = classPrototype;\r\n this.decoratorFlags = decoratorFlags;\r\n }\r\n\r\n toString(): string { return this.simpleName; }\r\n}\r\n\r\n/** A resolved function. */\r\nexport class Function extends Element {\r\n\r\n kind = ElementKind.FUNCTION;\r\n\r\n /** Prototype reference. */\r\n prototype: FunctionPrototype;\r\n /** Function signature. */\r\n signature: Signature;\r\n /** Map of locals by name. */\r\n localsByName: Map = new Map();\r\n /** Array of locals by index. */\r\n localsByIndex: Local[] = [];\r\n /** List of additional non-parameter locals. */\r\n additionalLocals: Type[] = [];\r\n /** Current break context label. */\r\n breakContext: string | null = null;\r\n /** Contextual type arguments. */\r\n contextualTypeArguments: Map | null;\r\n /** Current control flow. */\r\n flow: Flow;\r\n /** Remembered debug locations. */\r\n debugLocations: Range[] = [];\r\n /** Function reference, if compiled. */\r\n ref: FunctionRef = 0;\r\n /** Function table index, if any. */\r\n functionTableIndex: i32 = -1;\r\n /** Trampoline function for calling with omitted arguments. */\r\n trampoline: Function | null = null;\r\n /** The outer scope, if a function expression. */\r\n outerScope: Flow | null = null;\r\n\r\n private nextBreakId: i32 = 0;\r\n private breakStack: i32[] | null = null;\r\n nextInlineId: i32 = 0;\r\n\r\n /** Constructs a new concrete function. */\r\n constructor(\r\n prototype: FunctionPrototype,\r\n internalName: string,\r\n signature: Signature,\r\n parent: Element | null = null,\r\n contextualTypeArguments: Map | null = null\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName);\r\n this.prototype = prototype;\r\n this.signature = signature;\r\n this.parent = parent;\r\n this.flags = prototype.flags;\r\n this.decoratorFlags = prototype.decoratorFlags;\r\n this.contextualTypeArguments = contextualTypeArguments;\r\n if (!(prototype.is(CommonFlags.AMBIENT))) {\r\n let localIndex = 0;\r\n if (parent && parent.kind == ElementKind.CLASS) {\r\n assert(this.is(CommonFlags.INSTANCE));\r\n let local = new Local(\r\n prototype.program,\r\n \"this\",\r\n localIndex++,\r\n assert(signature.thisType)\r\n );\r\n this.localsByName.set(\"this\", local);\r\n this.localsByIndex[local.index] = local;\r\n let inheritedTypeArguments = (parent).contextualTypeArguments;\r\n if (inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments.has(inheritedName)) {\r\n this.contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n }\r\n } else {\r\n assert(!this.is(CommonFlags.INSTANCE)); // internal error\r\n }\r\n let parameterTypes = signature.parameterTypes;\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) {\r\n let parameterType = parameterTypes[i];\r\n let parameterName = signature.getParameterName(i);\r\n let local = new Local(\r\n prototype.program,\r\n parameterName,\r\n localIndex++,\r\n parameterType\r\n // FIXME: declaration?\r\n );\r\n this.localsByName.set(parameterName, local);\r\n this.localsByIndex[local.index] = local;\r\n }\r\n }\r\n this.flow = Flow.create(this);\r\n }\r\n\r\n /** Adds a local of the specified type, with an optional name. */\r\n addLocal(type: Type, name: string | null = null, declaration: VariableDeclaration | null = null): Local {\r\n // if it has a name, check previously as this method will throw otherwise\r\n var localIndex = this.signature.parameterTypes.length + this.additionalLocals.length;\r\n if (this.is(CommonFlags.INSTANCE)) ++localIndex;\r\n var local = new Local(\r\n this.prototype.program,\r\n name\r\n ? name\r\n : \"var$\" + localIndex.toString(10),\r\n localIndex,\r\n type,\r\n declaration\r\n );\r\n if (name) {\r\n if (this.localsByName.has(name)) throw new Error(\"duplicate local name\");\r\n this.localsByName.set(name, local);\r\n }\r\n this.localsByIndex[local.index] = local;\r\n this.additionalLocals.push(type);\r\n return local;\r\n }\r\n\r\n private tempI32s: Local[] | null = null;\r\n private tempI64s: Local[] | null = null;\r\n private tempF32s: Local[] | null = null;\r\n private tempF64s: Local[] | null = null;\r\n\r\n /** Gets a free temporary local of the specified type. */\r\n getTempLocal(type: Type, wrapped: bool = false): Local {\r\n var temps: Local[] | null;\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s;\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps && temps.length) {\r\n local = temps.pop();\r\n local.type = type;\r\n local.flags = CommonFlags.NONE;\r\n } else {\r\n local = this.addLocal(type);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\r\n return local;\r\n }\r\n\r\n /** Frees the temporary local for reuse. */\r\n freeTempLocal(local: Local): void {\r\n if (local.is(CommonFlags.INLINED)) return;\r\n assert(local.index >= 0);\r\n var temps: Local[];\r\n assert(local.type != null); // internal error\r\n switch ((local.type).toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n assert(local.index >= 0);\r\n temps.push(local);\r\n }\r\n\r\n /** Gets and immediately frees a temporary local of the specified type. */\r\n getAndFreeTempLocal(type: Type, wrapped: bool): Local {\r\n var temps: Local[];\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps.length) {\r\n local = temps[temps.length - 1];\r\n local.type = type;\r\n } else {\r\n local = this.addLocal(type);\r\n temps.push(local);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\r\n return local;\r\n }\r\n\r\n /** Enters a(nother) break context. */\r\n enterBreakContext(): string {\r\n var id = this.nextBreakId++;\r\n if (!this.breakStack) this.breakStack = [ id ];\r\n else this.breakStack.push(id);\r\n return this.breakContext = id.toString(10);\r\n }\r\n\r\n /** Leaves the current break context. */\r\n leaveBreakContext(): void {\r\n assert(this.breakStack != null);\r\n var length = (this.breakStack).length;\r\n assert(length > 0);\r\n (this.breakStack).pop();\r\n if (length > 1) {\r\n this.breakContext = (this.breakStack)[length - 2].toString(10);\r\n } else {\r\n this.breakContext = null;\r\n this.breakStack = null;\r\n }\r\n }\r\n\r\n /** Finalizes the function once compiled, releasing no longer needed resources. */\r\n finalize(module: Module, ref: FunctionRef): void {\r\n this.ref = ref;\r\n assert(!this.breakStack || !this.breakStack.length); // internal error\r\n this.breakStack = null;\r\n this.breakContext = null;\r\n this.tempI32s = this.tempI64s = this.tempF32s = this.tempF64s = null;\r\n if (this.program.options.sourceMap) {\r\n let debugLocations = this.debugLocations;\r\n for (let i = 0, k = debugLocations.length; i < k; ++i) {\r\n let debugLocation = debugLocations[i];\r\n module.setDebugLocation(\r\n ref,\r\n debugLocation.debugInfoRef,\r\n debugLocation.source.debugInfoIndex,\r\n debugLocation.line,\r\n debugLocation.column\r\n );\r\n }\r\n }\r\n }\r\n\r\n /** Returns the TypeScript representation of this function. */\r\n toString(): string { return this.prototype.simpleName; }\r\n}\r\n\r\n/** A resolved function target, that is a function called indirectly by an index and signature. */\r\nexport class FunctionTarget extends Element {\r\n\r\n kind = ElementKind.FUNCTION_TARGET;\r\n\r\n /** Underlying signature. */\r\n signature: Signature;\r\n /** Function type. */\r\n type: Type;\r\n\r\n /** Constructs a new function target. */\r\n constructor(program: Program, signature: Signature) {\r\n super(program, \"\", \"\");\r\n var simpleName = signature.toSignatureString();\r\n this.simpleName = simpleName;\r\n this.internalName = simpleName;\r\n this.signature = signature;\r\n this.type = Type.u32.asFunction(signature);\r\n }\r\n}\r\n\r\n/** A yet unresolved instance field prototype. */\r\nexport class FieldPrototype extends Element {\r\n\r\n kind = ElementKind.FIELD_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: FieldDeclaration;\r\n /** Parent class prototype. */\r\n classPrototype: ClassPrototype;\r\n\r\n /** Constructs a new field prototype. */\r\n constructor(\r\n classPrototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FieldDeclaration\r\n ) {\r\n super(classPrototype.program, simpleName, internalName);\r\n this.classPrototype = classPrototype;\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n }\r\n}\r\n\r\n/** A resolved instance field. */\r\nexport class Field extends VariableLikeElement {\r\n\r\n kind = ElementKind.FIELD;\r\n\r\n /** Field prototype reference. */\r\n prototype: FieldPrototype;\r\n /** Field memory offset, if an instance field. */\r\n memoryOffset: i32 = -1;\r\n\r\n /** Constructs a new field. */\r\n constructor(\r\n prototype: FieldPrototype,\r\n internalName: string,\r\n type: Type,\r\n declaration: FieldDeclaration,\r\n parent: Class\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName, type, declaration);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.type = type;\r\n this.parent = parent;\r\n }\r\n}\r\n\r\n/** A property comprised of a getter and a setter function. */\r\nexport class Property extends Element {\r\n\r\n kind = ElementKind.PROPERTY;\r\n\r\n /** Parent class prototype. */\r\n parent: ClassPrototype;\r\n /** Getter prototype. */\r\n getterPrototype: FunctionPrototype | null = null;\r\n /** Setter prototype. */\r\n setterPrototype: FunctionPrototype | null = null;\r\n\r\n /** Constructs a new property prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n parent: ClassPrototype\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.parent = parent;\r\n }\r\n}\r\n\r\n/** A yet unresolved class prototype. */\r\nexport class ClassPrototype extends Element {\r\n\r\n kind = ElementKind.CLASS_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: ClassDeclaration;\r\n /** Resolved instances. */\r\n instances: Map = new Map();\r\n /** Instance member prototypes. */\r\n instanceMembers: Map | null = null;\r\n /** Base class prototype, if applicable. */\r\n basePrototype: ClassPrototype | null = null; // set in Program#initialize\r\n /** Constructor prototype. */\r\n constructorPrototype: FunctionPrototype | null = null;\r\n /** Operator overload prototypes. */\r\n overloadPrototypes: Map = new Map();\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: ClassDeclaration,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n this.decoratorFlags = decoratorFlags;\r\n }\r\n\r\n toString(): string {\r\n return this.simpleName;\r\n }\r\n}\r\n\r\n/** A resolved class. */\r\nexport class Class extends Element {\r\n\r\n kind = ElementKind.CLASS;\r\n\r\n /** Prototype reference. */\r\n prototype: ClassPrototype;\r\n /** Resolved type arguments. */\r\n typeArguments: Type[] | null;\r\n /** Resolved class type. */\r\n type: Type;\r\n /** Base class, if applicable. */\r\n base: Class | null;\r\n /** Contextual type arguments for fields and methods. */\r\n contextualTypeArguments: Map | null = null;\r\n /** Current member memory offset. */\r\n currentMemoryOffset: u32 = 0;\r\n /** Constructor instance. */\r\n constructorInstance: Function | null = null;\r\n /** Operator overloads. */\r\n overloads: Map | null = null;\r\n /** Function index of the GC hook. */\r\n gcHookIndex: u32 = -1;\r\n\r\n /** Constructs a new class. */\r\n constructor(\r\n prototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n typeArguments: Type[] | null = null,\r\n base: Class | null = null\r\n ) {\r\n super(prototype.program, simpleName, internalName);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.decoratorFlags = prototype.decoratorFlags;\r\n this.typeArguments = typeArguments;\r\n this.type = prototype.program.options.usizeType.asClass(this);\r\n this.base = base;\r\n\r\n // inherit static members and contextual type arguments from base class\r\n if (base) {\r\n let inheritedTypeArguments = base.contextualTypeArguments;\r\n if (inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [baseName, baseType] of inheritedTypeArguments) {\r\n this.contextualTypeArguments.set(baseName, baseType);\r\n }\r\n }\r\n }\r\n\r\n // apply instance-specific contextual type arguments\r\n var declaration = this.prototype.declaration;\r\n var i: i32, k: i32;\r\n if (declaration) { // irrelevant for built-ins\r\n let typeParameters = declaration.typeParameters;\r\n if (typeArguments) {\r\n if ((k = typeArguments.length) != typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n if (k) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (i = 0; i < k; ++i) {\r\n this.contextualTypeArguments.set(typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n }\r\n } else if (typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n }\r\n }\r\n\r\n /** Tests if a value of this class type is assignable to a target of the specified class type. */\r\n isAssignableTo(target: Class): bool {\r\n var current: Class | null = this;\r\n do if (current == target) return true;\r\n while (current = current.base);\r\n return false;\r\n }\r\n\r\n /** Looks up the operator overload of the specified kind. */\r\n lookupOverload(kind: OperatorKind, unchecked: bool = false): Function | null {\r\n if (unchecked) {\r\n switch (kind) {\r\n case OperatorKind.INDEXED_GET: {\r\n let uncheckedOverload = this.lookupOverload(OperatorKind.UNCHECKED_INDEXED_GET);\r\n if (uncheckedOverload) return uncheckedOverload;\r\n break;\r\n }\r\n case OperatorKind.INDEXED_SET: {\r\n let uncheckedOverload = this.lookupOverload(OperatorKind.UNCHECKED_INDEXED_SET);\r\n if (uncheckedOverload) return uncheckedOverload;\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n var instance: Class | null = this;\r\n do {\r\n let overloads = instance.overloads;\r\n if (overloads) {\r\n let overload = overloads.get(kind);\r\n if (overload) return overload;\r\n }\r\n } while (instance = instance.base);\r\n return null;\r\n }\r\n\r\n offsetof(fieldName: string): u32 {\r\n var members = assert(this.members);\r\n assert(members.has(fieldName));\r\n var field = members.get(fieldName);\r\n assert(field.kind == ElementKind.FIELD);\r\n return (field).memoryOffset;\r\n }\r\n\r\n toString(): string {\r\n return this.simpleName;\r\n }\r\n}\r\n\r\n/** A yet unresolved interface. */\r\nexport class InterfacePrototype extends ClassPrototype {\r\n\r\n kind = ElementKind.INTERFACE_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: InterfaceDeclaration; // more specific\r\n\r\n /** Constructs a new interface prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: InterfaceDeclaration,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName, declaration, decoratorFlags);\r\n }\r\n}\r\n\r\n/** A resolved interface. */\r\nexport class Interface extends Class {\r\n\r\n kind = ElementKind.INTERFACE;\r\n\r\n /** Prototype reference. */\r\n prototype: InterfacePrototype; // more specific\r\n /** Base interface, if applcable. */\r\n base: Interface | null; // more specific\r\n\r\n /** Constructs a new interface. */\r\n constructor(\r\n prototype: InterfacePrototype,\r\n simpleName: string,\r\n internalName: string,\r\n typeArguments: Type[] = [],\r\n base: Interface | null = null\r\n ) {\r\n super(prototype, simpleName, internalName, typeArguments, base);\r\n }\r\n}\r\n\r\n/** Control flow flags indicating specific conditions. */\r\nexport const enum FlowFlags {\r\n /** No specific conditions. */\r\n NONE = 0,\r\n\r\n // categorical\r\n\r\n /** This branch always returns. */\r\n RETURNS = 1 << 0,\r\n /** This branch always returns a wrapped value. */\r\n RETURNS_WRAPPED = 1 << 1,\r\n /** This branch always throws. */\r\n THROWS = 1 << 2,\r\n /** This branch always breaks. */\r\n BREAKS = 1 << 3,\r\n /** This branch always continues. */\r\n CONTINUES = 1 << 4,\r\n /** This branch always allocates. Constructors only. */\r\n ALLOCATES = 1 << 5,\r\n\r\n // conditional\r\n\r\n /** This branch conditionally returns in a child branch. */\r\n CONDITIONALLY_RETURNS = 1 << 6,\r\n /** This branch conditionally throws in a child branch. */\r\n CONDITIONALLY_THROWS = 1 << 7,\r\n /** This branch conditionally breaks in a child branch. */\r\n CONDITIONALLY_BREAKS = 1 << 8,\r\n /** This branch conditionally continues in a child branch. */\r\n CONDITIONALLY_CONTINUES = 1 << 9,\r\n /** This branch conditionally allocates in a child branch. Constructors only. */\r\n CONDITIONALLY_ALLOCATES = 1 << 10,\r\n\r\n // special\r\n\r\n /** This branch is part of inlining a function. */\r\n INLINE_CONTEXT = 1 << 11,\r\n /** This branch explicitly requests no bounds checking. */\r\n UNCHECKED_CONTEXT = 1 << 12,\r\n\r\n // masks\r\n\r\n /** Any terminating flag. */\r\n ANY_TERMINATING = FlowFlags.RETURNS\r\n | FlowFlags.THROWS\r\n | FlowFlags.BREAKS\r\n | FlowFlags.CONTINUES,\r\n\r\n /** Any categorical flag. */\r\n ANY_CATEGORICAL = FlowFlags.RETURNS\r\n | FlowFlags.RETURNS_WRAPPED\r\n | FlowFlags.THROWS\r\n | FlowFlags.BREAKS\r\n | FlowFlags.CONTINUES\r\n | FlowFlags.ALLOCATES,\r\n\r\n /** Any conditional flag. */\r\n ANY_CONDITIONAL = FlowFlags.CONDITIONALLY_RETURNS\r\n | FlowFlags.CONDITIONALLY_THROWS\r\n | FlowFlags.CONDITIONALLY_BREAKS\r\n | FlowFlags.CONDITIONALLY_CONTINUES\r\n | FlowFlags.CONDITIONALLY_ALLOCATES\r\n}\r\n\r\n/** A control flow evaluator. */\r\nexport class Flow {\r\n\r\n /** Parent flow. */\r\n parent: Flow | null;\r\n /** Flow flags indicating specific conditions. */\r\n flags: FlowFlags;\r\n /** Function this flow belongs to. */\r\n currentFunction: Function;\r\n /** The label we break to when encountering a continue statement. */\r\n continueLabel: string | null;\r\n /** The label we break to when encountering a break statement. */\r\n breakLabel: string | null;\r\n /** The label we break to when encountering a return statement, when inlining. */\r\n returnLabel: string | null;\r\n /** The current return type. */\r\n returnType: Type;\r\n /** The current contextual type arguments. */\r\n contextualTypeArguments: Map | null;\r\n /** Scoped local variables. */\r\n scopedLocals: Map | null = null;\r\n /** Local variable wrap states for the first 64 locals. */\r\n wrappedLocals: I64;\r\n /** Local variable wrap states for locals with index >= 64. */\r\n wrappedLocalsExt: I64[] | null;\r\n\r\n /** Creates the parent flow of the specified function. */\r\n static create(currentFunction: Function): Flow {\r\n var parentFlow = new Flow();\r\n parentFlow.parent = null;\r\n parentFlow.flags = FlowFlags.NONE;\r\n parentFlow.currentFunction = currentFunction;\r\n parentFlow.continueLabel = null;\r\n parentFlow.breakLabel = null;\r\n parentFlow.returnLabel = null;\r\n parentFlow.returnType = currentFunction.signature.returnType;\r\n parentFlow.contextualTypeArguments = currentFunction.contextualTypeArguments;\r\n parentFlow.wrappedLocals = i64_new(0);\r\n parentFlow.wrappedLocalsExt = null;\r\n return parentFlow;\r\n }\r\n\r\n private constructor() { }\r\n\r\n /** Tests if this flow has the specified flag or flags. */\r\n is(flag: FlowFlags): bool { return (this.flags & flag) == flag; }\r\n /** Tests if this flow has one of the specified flags. */\r\n isAny(flag: FlowFlags): bool { return (this.flags & flag) != 0; }\r\n /** Sets the specified flag or flags. */\r\n set(flag: FlowFlags): void { this.flags |= flag; }\r\n /** Unsets the specified flag or flags. */\r\n unset(flag: FlowFlags): void { this.flags &= ~flag; }\r\n\r\n /** Forks this flow to a child flow. */\r\n fork(): Flow {\r\n var branch = new Flow();\r\n branch.parent = this;\r\n branch.flags = this.flags;\r\n branch.currentFunction = this.currentFunction;\r\n branch.continueLabel = this.continueLabel;\r\n branch.breakLabel = this.breakLabel;\r\n branch.returnLabel = this.returnLabel;\r\n branch.returnType = this.returnType;\r\n branch.contextualTypeArguments = this.contextualTypeArguments;\r\n branch.wrappedLocals = this.wrappedLocals;\r\n branch.wrappedLocalsExt = this.wrappedLocalsExt ? this.wrappedLocalsExt.slice() : null;\r\n return branch;\r\n }\r\n\r\n /** Frees this flow's scoped variables. */\r\n free(): Flow {\r\n var parent = assert(this.parent);\r\n if (this.scopedLocals) { // free block-scoped locals\r\n for (let scopedLocal of this.scopedLocals.values()) {\r\n if (scopedLocal.is(CommonFlags.SCOPED)) { // otherwise an alias\r\n this.currentFunction.freeTempLocal(scopedLocal);\r\n }\r\n }\r\n this.scopedLocals = null;\r\n }\r\n return parent;\r\n }\r\n\r\n /** Adds a new scoped local of the specified name. */\r\n addScopedLocal(type: Type, name: string, wrapped: bool, declaration?: VariableDeclaration): Local {\r\n var scopedLocal = this.currentFunction.getTempLocal(type, false);\r\n if (!this.scopedLocals) this.scopedLocals = new Map();\r\n else {\r\n let existingLocal = this.scopedLocals.get(name);\r\n if (existingLocal) {\r\n if (declaration) {\r\n this.currentFunction.program.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range\r\n );\r\n } else assert(false);\r\n return existingLocal;\r\n }\r\n }\r\n scopedLocal.set(CommonFlags.SCOPED);\r\n this.scopedLocals.set(name, scopedLocal);\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.setLocalWrapped(scopedLocal.index, wrapped);\r\n }\r\n return scopedLocal;\r\n }\r\n\r\n /** Adds a new scoped alias for the specified local. */\r\n addScopedLocalAlias(index: i32, type: Type, name: string): Local {\r\n if (!this.scopedLocals) this.scopedLocals = new Map();\r\n else {\r\n let existingLocal = this.scopedLocals.get(name);\r\n if (existingLocal) {\r\n let declaration = existingLocal.declaration;\r\n if (declaration) {\r\n this.currentFunction.program.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range\r\n );\r\n } else assert(false);\r\n return existingLocal;\r\n }\r\n }\r\n assert(index < this.currentFunction.localsByIndex.length);\r\n var scopedAlias = new Local( // not SCOPED as an indicator that it isn't automatically free'd\r\n this.currentFunction.program,\r\n name,\r\n index,\r\n type,\r\n null\r\n );\r\n this.scopedLocals.set(name, scopedAlias);\r\n return scopedAlias;\r\n }\r\n\r\n /** Gets the local of the specified name in the current scope. */\r\n getScopedLocal(name: string): Local | null {\r\n var local: Local | null;\r\n var current: Flow | null = this;\r\n do {\r\n if (current.scopedLocals && (local = current.scopedLocals.get(name))) {\r\n return local;\r\n }\r\n } while (current = current.parent);\r\n return this.currentFunction.localsByName.get(name);\r\n }\r\n\r\n /** Tests if the local with the specified index is considered wrapped. */\r\n isLocalWrapped(index: i32): bool {\r\n var map: I64;\r\n var ext: I64[] | null;\r\n if (index < 64) {\r\n if (index < 0) return true; // inlined constant\r\n map = this.wrappedLocals;\r\n } else if (ext = this.wrappedLocalsExt) {\r\n let i = ((index - 64) / 64) | 0;\r\n if (i >= ext.length) return false;\r\n map = ext[i];\r\n index -= (i + 1) * 64;\r\n } else {\r\n return false;\r\n }\r\n return i64_ne(\r\n i64_and(\r\n map,\r\n i64_shl(\r\n i64_one,\r\n i64_new(index)\r\n )\r\n ),\r\n i64_zero\r\n );\r\n }\r\n\r\n /** Sets if the local with the specified index is considered wrapped. */\r\n setLocalWrapped(index: i32, wrapped: bool): void {\r\n var map: I64;\r\n var off: i32 = -1;\r\n if (index < 64) {\r\n if (index < 0) return; // inlined constant\r\n map = this.wrappedLocals;\r\n } else {\r\n let ext = this.wrappedLocalsExt;\r\n off = ((index - 64) / 64) | 0;\r\n if (!ext) {\r\n this.wrappedLocalsExt = ext = new Array(off + 1);\r\n ext.length = 0;\r\n }\r\n while (ext.length <= off) ext.push(i64_new(0));\r\n map = ext[off];\r\n index -= (off + 1) * 64;\r\n }\r\n map = wrapped\r\n ? i64_or(\r\n map,\r\n i64_shl(\r\n i64_one,\r\n i64_new(index)\r\n )\r\n )\r\n : i64_and(\r\n map,\r\n i64_not(\r\n i64_shl(\r\n i64_one,\r\n i64_new(index)\r\n )\r\n )\r\n );\r\n if (off >= 0) (this.wrappedLocalsExt)[off] = map;\r\n else this.wrappedLocals = map;\r\n }\r\n\r\n /** Inherits flags and local wrap states from the specified flow (e.g. blocks). */\r\n inherit(other: Flow): void {\r\n this.flags |= other.flags & (FlowFlags.ANY_CATEGORICAL | FlowFlags.ANY_CONDITIONAL);\r\n this.wrappedLocals = other.wrappedLocals;\r\n this.wrappedLocalsExt = other.wrappedLocalsExt; // no need to slice because other flow is finished\r\n }\r\n\r\n /** Inherits categorical flags as conditional flags from the specified flow (e.g. then without else). */\r\n inheritConditional(other: Flow): void {\r\n if (other.is(FlowFlags.RETURNS)) {\r\n this.set(FlowFlags.CONDITIONALLY_RETURNS);\r\n }\r\n if (other.is(FlowFlags.THROWS)) {\r\n this.set(FlowFlags.CONDITIONALLY_THROWS);\r\n }\r\n if (other.is(FlowFlags.BREAKS) && other.breakLabel == this.breakLabel) {\r\n this.set(FlowFlags.CONDITIONALLY_BREAKS);\r\n }\r\n if (other.is(FlowFlags.CONTINUES) && other.continueLabel == this.continueLabel) {\r\n this.set(FlowFlags.CONDITIONALLY_CONTINUES);\r\n }\r\n if (other.is(FlowFlags.ALLOCATES)) {\r\n this.set(FlowFlags.CONDITIONALLY_ALLOCATES);\r\n }\r\n }\r\n\r\n /** Inherits mutual flags and local wrap states from the specified flows (e.g. then with else). */\r\n inheritMutual(left: Flow, right: Flow): void {\r\n // categorical flags set in both arms\r\n this.flags |= left.flags & right.flags & FlowFlags.ANY_CATEGORICAL;\r\n\r\n // conditional flags set in at least one arm\r\n this.flags |= left.flags & FlowFlags.ANY_CONDITIONAL;\r\n this.flags |= right.flags & FlowFlags.ANY_CONDITIONAL;\r\n\r\n // locals wrapped in both arms\r\n this.wrappedLocals = i64_and(left.wrappedLocals, right.wrappedLocals);\r\n var leftExt = left.wrappedLocalsExt;\r\n var rightExt = right.wrappedLocalsExt;\r\n if (leftExt != null && rightExt != null) {\r\n let thisExt = this.wrappedLocalsExt;\r\n let minLength = min(leftExt.length, rightExt.length);\r\n if (minLength) {\r\n if (!thisExt) thisExt = new Array(minLength);\r\n else while (thisExt.length < minLength) thisExt.push(i64_new(0));\r\n for (let i = 0; i < minLength; ++i) {\r\n thisExt[i] = i64_and(\r\n leftExt[i],\r\n rightExt[i]\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Tests if an expression can possibly overflow in the context of this flow. Assumes that the\r\n * expression might already have overflown and returns `false` only if the operation neglects\r\n * any possibly combination of garbage bits being present.\r\n */\r\n canOverflow(expr: ExpressionRef, type: Type): bool {\r\n // TODO: the following catches most common and a few uncommon cases, but there are additional\r\n // opportunities here, obviously.\r\n assert(type != Type.void);\r\n\r\n // types other than i8, u8, i16, u16 and bool do not overflow\r\n if (!type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) return false;\r\n\r\n var operand: ExpressionRef;\r\n switch (getExpressionId(expr)) {\r\n\r\n // overflows if the local isn't wrapped or the conversion does\r\n case ExpressionId.GetLocal: {\r\n let currentFunction = this.currentFunction;\r\n let local = currentFunction.localsByIndex[getGetLocalIndex(expr)];\r\n return !currentFunction.flow.isLocalWrapped(local.index)\r\n || canConversionOverflow(local.type, type);\r\n }\r\n\r\n // overflows if the value does\r\n case ExpressionId.SetLocal: {\r\n assert(isTeeLocal(expr));\r\n return this.canOverflow(getSetLocalValue(expr), type);\r\n }\r\n\r\n // never overflows because globals are wrapped on set\r\n case ExpressionId.GetGlobal: return false;\r\n\r\n case ExpressionId.Binary: {\r\n switch (getBinaryOp(expr)) {\r\n\r\n // comparisons do not overflow (result is 0 or 1)\r\n case BinaryOp.EqI32:\r\n case BinaryOp.EqI64:\r\n case BinaryOp.EqF32:\r\n case BinaryOp.EqF64:\r\n case BinaryOp.NeI32:\r\n case BinaryOp.NeI64:\r\n case BinaryOp.NeF32:\r\n case BinaryOp.NeF64:\r\n case BinaryOp.LtI32:\r\n case BinaryOp.LtU32:\r\n case BinaryOp.LtI64:\r\n case BinaryOp.LtU64:\r\n case BinaryOp.LtF32:\r\n case BinaryOp.LtF64:\r\n case BinaryOp.LeI32:\r\n case BinaryOp.LeU32:\r\n case BinaryOp.LeI64:\r\n case BinaryOp.LeU64:\r\n case BinaryOp.LeF32:\r\n case BinaryOp.LeF64:\r\n case BinaryOp.GtI32:\r\n case BinaryOp.GtU32:\r\n case BinaryOp.GtI64:\r\n case BinaryOp.GtU64:\r\n case BinaryOp.GtF32:\r\n case BinaryOp.GtF64:\r\n case BinaryOp.GeI32:\r\n case BinaryOp.GeU32:\r\n case BinaryOp.GeI64:\r\n case BinaryOp.GeU64:\r\n case BinaryOp.GeF32:\r\n case BinaryOp.GeF64: return false;\r\n\r\n // result won't overflow if one side is 0 or if one side is 1 and the other wrapped\r\n case BinaryOp.MulI32: {\r\n return !(\r\n (\r\n getExpressionId(operand = getBinaryLeft(expr)) == ExpressionId.Const &&\r\n (\r\n getConstValueI32(operand) == 0 ||\r\n (\r\n getConstValueI32(operand) == 1 &&\r\n !this.canOverflow(getBinaryRight(expr), type)\r\n )\r\n )\r\n ) || (\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n (\r\n getConstValueI32(operand) == 0 ||\r\n (\r\n getConstValueI32(operand) == 1 &&\r\n !this.canOverflow(getBinaryLeft(expr), type)\r\n )\r\n )\r\n )\r\n );\r\n }\r\n\r\n // result won't overflow if one side is a constant less than this type's mask or one side\r\n // is wrapped\r\n case BinaryOp.AndI32: {\r\n // note that computeSmallIntegerMask returns the mask minus the MSB for signed types\r\n // because signed value garbage bits must be guaranteed to be equal to the MSB.\r\n return !(\r\n (\r\n (\r\n getExpressionId(operand = getBinaryLeft(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) <= type.computeSmallIntegerMask(Type.i32)\r\n ) || !this.canOverflow(operand, type)\r\n ) || (\r\n (\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) <= type.computeSmallIntegerMask(Type.i32)\r\n ) || !this.canOverflow(operand, type)\r\n )\r\n );\r\n }\r\n\r\n // overflows if the shift doesn't clear potential garbage bits\r\n case BinaryOp.ShlI32: {\r\n let shift = 32 - type.size;\r\n return getExpressionId(operand = getBinaryRight(expr)) != ExpressionId.Const\r\n || getConstValueI32(operand) < shift;\r\n }\r\n\r\n // overflows if the value does and the shift doesn't clear potential garbage bits\r\n case BinaryOp.ShrI32: {\r\n let shift = 32 - type.size;\r\n return this.canOverflow(getBinaryLeft(expr), type) && (\r\n getExpressionId(operand = getBinaryRight(expr)) != ExpressionId.Const ||\r\n getConstValueI32(operand) < shift\r\n );\r\n }\r\n\r\n // overflows if the shift does not clear potential garbage bits. if an unsigned value is\r\n // wrapped, it can't overflow.\r\n case BinaryOp.ShrU32: {\r\n let shift = 32 - type.size;\r\n return type.is(TypeFlags.SIGNED)\r\n ? !(\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) > shift // must clear MSB\r\n )\r\n : this.canOverflow(getBinaryLeft(expr), type) && !(\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) >= shift // can leave MSB\r\n );\r\n }\r\n\r\n // overflows if any side does\r\n case BinaryOp.DivU32:\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemU32: {\r\n return this.canOverflow(getBinaryLeft(expr), type)\r\n || this.canOverflow(getBinaryRight(expr), type);\r\n }\r\n }\r\n break;\r\n }\r\n\r\n case ExpressionId.Unary: {\r\n switch (getUnaryOp(expr)) {\r\n\r\n // comparisons do not overflow (result is 0 or 1)\r\n case UnaryOp.EqzI32:\r\n case UnaryOp.EqzI64: return false;\r\n\r\n // overflow if the maximum result (32) cannot be represented in the target type\r\n case UnaryOp.ClzI32:\r\n case UnaryOp.CtzI32:\r\n case UnaryOp.PopcntI32: return type.size < 7;\r\n }\r\n break;\r\n }\r\n\r\n // overflows if the value cannot be represented in the target type\r\n case ExpressionId.Const: {\r\n let value: i32 = 0;\r\n switch (getExpressionType(expr)) {\r\n case NativeType.I32: { value = getConstValueI32(expr); break; }\r\n case NativeType.I64: { value = getConstValueI64Low(expr); break; } // discards upper bits\r\n case NativeType.F32: { value = i32(getConstValueF32(expr)); break; }\r\n case NativeType.F64: { value = i32(getConstValueF64(expr)); break; }\r\n default: assert(false);\r\n }\r\n switch (type.kind) {\r\n case TypeKind.I8: return value < i8.MIN_VALUE || value > i8.MAX_VALUE;\r\n case TypeKind.I16: return value < i16.MIN_VALUE || value > i16.MAX_VALUE;\r\n case TypeKind.U8: return value < 0 || value > u8.MAX_VALUE;\r\n case TypeKind.U16: return value < 0 || value > u16.MAX_VALUE;\r\n case TypeKind.BOOL: return (value & ~1) != 0;\r\n }\r\n break;\r\n }\r\n\r\n // overflows if the conversion does\r\n case ExpressionId.Load: {\r\n let fromType: Type;\r\n switch (getLoadBytes(expr)) {\r\n case 1: { fromType = isLoadSigned(expr) ? Type.i8 : Type.u8; break; }\r\n case 2: { fromType = isLoadSigned(expr) ? Type.i16 : Type.u16; break; }\r\n default: { fromType = isLoadSigned(expr) ? Type.i32 : Type.u32; break; }\r\n }\r\n return canConversionOverflow(fromType, type);\r\n }\r\n\r\n // overflows if the result does, which is either\r\n // - the last expression of the block, by contract, if the block doesn't have a label\r\n // - the last expression or the value of an inner br if the block has a label (TODO)\r\n case ExpressionId.Block: {\r\n if (!getBlockName(expr)) {\r\n let size = assert(getBlockChildCount(expr));\r\n let last = getBlockChild(expr, size - 1);\r\n return this.canOverflow(last, type);\r\n }\r\n // actually, brs with a value that'd be handled here is not emitted atm\r\n break;\r\n }\r\n\r\n // overflows if either side does\r\n case ExpressionId.If: {\r\n return this.canOverflow(getIfTrue(expr), type)\r\n || this.canOverflow(assert(getIfFalse(expr)), type);\r\n }\r\n\r\n // overflows if either side does\r\n case ExpressionId.Select: {\r\n return this.canOverflow(getSelectThen(expr), type)\r\n || this.canOverflow(getSelectElse(expr), type);\r\n }\r\n\r\n // overflows if the call does not return a wrapped value or the conversion does\r\n case ExpressionId.Call: {\r\n let program = this.currentFunction.program;\r\n let instance = assert(program.instancesLookup.get(assert(getCallTarget(expr))));\r\n assert(instance.kind == ElementKind.FUNCTION);\r\n let returnType = (instance).signature.returnType;\r\n return !(instance).flow.is(FlowFlags.RETURNS_WRAPPED)\r\n || canConversionOverflow(returnType, type);\r\n }\r\n\r\n // doesn't technically overflow\r\n case ExpressionId.Unreachable: return false;\r\n }\r\n return true;\r\n }\r\n\r\n /** Finalizes this flow. Must be the topmost parent flow of the function. */\r\n finalize(): void {\r\n assert(this.parent == null); // must be the topmost parent flow\r\n this.continueLabel = null;\r\n this.breakLabel = null;\r\n this.returnLabel = null;\r\n this.contextualTypeArguments = null;\r\n }\r\n}\r\n\r\n/** Tests if a conversion from one type to another can technically overflow. */\r\nfunction canConversionOverflow(fromType: Type, toType: Type): bool {\r\n var fromSize = fromType.byteSize;\r\n var toSize = toType.byteSize;\r\n return !fromType.is(TypeFlags.INTEGER) // non-i32 locals or returns\r\n || fromSize > toSize\r\n || fromType.is(TypeFlags.SIGNED) != toType.is(TypeFlags.SIGNED);\r\n}\r\n","/**\r\n * A thin wrapper around Binaryen's C-API.\r\n * @module module\r\n *//***/\r\n\r\nimport {\r\n Target\r\n} from \"./compiler\";\r\n\r\nexport type ModuleRef = usize;\r\nexport type FunctionTypeRef = usize;\r\nexport type FunctionRef = usize;\r\nexport type ExpressionRef = usize;\r\nexport type GlobalRef = usize;\r\nexport type ImportRef = usize;\r\nexport type ExportRef = usize;\r\nexport type Index = u32;\r\n\r\nexport const enum NativeType {\r\n None = 0, // _BinaryenTypeNone(),\r\n I32 = 1, // _BinaryenTypeInt32(),\r\n I64 = 2, // _BinaryenTypeInt64(),\r\n F32 = 3, // _BinaryenTypeFloat32(),\r\n F64 = 4, // _BinaryenTypeFloat64(),\r\n Unreachable = 5, // _BinaryenTypeUnreachable(),\r\n Auto = -1 // _BinaryenTypeAuto()\r\n}\r\n\r\nexport enum ExpressionId {\r\n Invalid = _BinaryenInvalidId(),\r\n Block = _BinaryenBlockId(),\r\n If = _BinaryenIfId(),\r\n Loop = _BinaryenLoopId(),\r\n Break = _BinaryenBreakId(),\r\n Switch = _BinaryenSwitchId(),\r\n Call = _BinaryenCallId(),\r\n CallIndirect = _BinaryenCallIndirectId(),\r\n GetLocal = _BinaryenGetLocalId(),\r\n SetLocal = _BinaryenSetLocalId(),\r\n GetGlobal = _BinaryenGetGlobalId(),\r\n SetGlobal = _BinaryenSetGlobalId(),\r\n Load = _BinaryenLoadId(),\r\n Store = _BinaryenStoreId(),\r\n Const = _BinaryenConstId(),\r\n Unary = _BinaryenUnaryId(),\r\n Binary = _BinaryenBinaryId(),\r\n Select = _BinaryenSelectId(),\r\n Drop = _BinaryenDropId(),\r\n Return = _BinaryenReturnId(),\r\n Host = _BinaryenHostId(),\r\n Nop = _BinaryenNopId(),\r\n Unreachable = _BinaryenUnreachableId(),\r\n AtomicCmpxchg = _BinaryenAtomicCmpxchgId(),\r\n AtomicRMW = _BinaryenAtomicRMWId(),\r\n AtomicWait = _BinaryenAtomicWaitId(),\r\n AtomicWake = _BinaryenAtomicWakeId()\r\n}\r\n\r\nexport enum UnaryOp {\r\n ClzI32 = _BinaryenClzInt32(),\r\n CtzI32 = _BinaryenCtzInt32(),\r\n PopcntI32 = _BinaryenPopcntInt32(),\r\n NegF32 = _BinaryenNegFloat32(),\r\n AbsF32 = _BinaryenAbsFloat32(),\r\n CeilF32 = _BinaryenCeilFloat32(),\r\n FloorF32 = _BinaryenFloorFloat32(),\r\n TruncF32 = _BinaryenTruncFloat32(),\r\n NearestF32 = _BinaryenNearestFloat32(),\r\n SqrtF32 = _BinaryenSqrtFloat32(),\r\n EqzI32 = _BinaryenEqZInt32(),\r\n ClzI64 = _BinaryenClzInt64(),\r\n CtzI64 = _BinaryenCtzInt64(),\r\n PopcntI64 = _BinaryenPopcntInt64(),\r\n NegF64 = _BinaryenNegFloat64(),\r\n AbsF64 = _BinaryenAbsFloat64(),\r\n CeilF64 = _BinaryenCeilFloat64(),\r\n FloorF64 = _BinaryenFloorFloat64(),\r\n TruncF64 = _BinaryenTruncFloat64(),\r\n NearestF64 = _BinaryenNearestFloat64(),\r\n SqrtF64 = _BinaryenSqrtFloat64(),\r\n EqzI64 = _BinaryenEqZInt64(),\r\n ExtendI32 = _BinaryenExtendSInt32(),\r\n ExtendU32 = _BinaryenExtendUInt32(),\r\n WrapI64 = _BinaryenWrapInt64(),\r\n TruncF32ToI32 = _BinaryenTruncSFloat32ToInt32(),\r\n TruncF32ToI64 = _BinaryenTruncSFloat32ToInt64(),\r\n TruncF32ToU32 = _BinaryenTruncUFloat32ToInt32(),\r\n TruncF32ToU64 = _BinaryenTruncUFloat32ToInt64(),\r\n TruncF64ToI32 = _BinaryenTruncSFloat64ToInt32(),\r\n TruncF64ToI64 = _BinaryenTruncSFloat64ToInt64(),\r\n TruncF64ToU32 = _BinaryenTruncUFloat64ToInt32(),\r\n TruncF64ToU64 = _BinaryenTruncUFloat64ToInt64(),\r\n ReinterpretF32 = _BinaryenReinterpretFloat32(),\r\n ReinterpretF64 = _BinaryenReinterpretFloat64(),\r\n ConvertI32ToF32 = _BinaryenConvertSInt32ToFloat32(),\r\n ConvertI32ToF64 = _BinaryenConvertSInt32ToFloat64(),\r\n ConvertU32ToF32 = _BinaryenConvertUInt32ToFloat32(),\r\n ConvertU32ToF64 = _BinaryenConvertUInt32ToFloat64(),\r\n ConvertI64ToF32 = _BinaryenConvertSInt64ToFloat32(),\r\n ConvertI64ToF64 = _BinaryenConvertSInt64ToFloat64(),\r\n ConvertU64ToF32 = _BinaryenConvertUInt64ToFloat32(),\r\n ConvertU64ToF64 = _BinaryenConvertUInt64ToFloat64(),\r\n PromoteF32 = _BinaryenPromoteFloat32(),\r\n DemoteF64 = _BinaryenDemoteFloat64(),\r\n ReinterpretI32 = _BinaryenReinterpretInt32(),\r\n ReinterpretI64 = _BinaryenReinterpretInt64(),\r\n\r\n // see: https://github.com/WebAssembly/sign-extension-ops\r\n ExtendI8ToI32 = _BinaryenExtendS8Int32(),\r\n ExtendI16ToI32 = _BinaryenExtendS16Int32(),\r\n ExtendI8ToI64 = _BinaryenExtendS8Int64(),\r\n ExtendI16ToI64 = _BinaryenExtendS16Int64(),\r\n ExtendI32ToI64 = _BinaryenExtendS32Int64()\r\n\r\n // see: https://github.com/WebAssembly/nontrapping-float-to-int-conversions\r\n // TruncF32ToI32Sat\r\n // TruncF32ToU32Sat\r\n // TruncF64ToI32Sat\r\n // TruncF64ToU32Sat\r\n // TruncF32ToI64Sat\r\n // TruncF32ToU64Sat\r\n // TruncF64ToI64Sat\r\n // TruncF64ToU64Sat\r\n}\r\n\r\nexport enum BinaryOp {\r\n AddI32 = _BinaryenAddInt32(),\r\n SubI32 = _BinaryenSubInt32(),\r\n MulI32 = _BinaryenMulInt32(),\r\n DivI32 = _BinaryenDivSInt32(),\r\n DivU32 = _BinaryenDivUInt32(),\r\n RemI32 = _BinaryenRemSInt32(),\r\n RemU32 = _BinaryenRemUInt32(),\r\n AndI32 = _BinaryenAndInt32(),\r\n OrI32 = _BinaryenOrInt32(),\r\n XorI32 = _BinaryenXorInt32(),\r\n ShlI32 = _BinaryenShlInt32(),\r\n ShrU32 = _BinaryenShrUInt32(),\r\n ShrI32 = _BinaryenShrSInt32(),\r\n RotlI32 = _BinaryenRotLInt32(),\r\n RotrI32 = _BinaryenRotRInt32(),\r\n EqI32 = _BinaryenEqInt32(),\r\n NeI32 = _BinaryenNeInt32(),\r\n LtI32 = _BinaryenLtSInt32(),\r\n LtU32 = _BinaryenLtUInt32(),\r\n LeI32 = _BinaryenLeSInt32(),\r\n LeU32 = _BinaryenLeUInt32(),\r\n GtI32 = _BinaryenGtSInt32(),\r\n GtU32 = _BinaryenGtUInt32(),\r\n GeI32 = _BinaryenGeSInt32(),\r\n GeU32 = _BinaryenGeUInt32(),\r\n AddI64 = _BinaryenAddInt64(),\r\n SubI64 = _BinaryenSubInt64(),\r\n MulI64 = _BinaryenMulInt64(),\r\n DivI64 = _BinaryenDivSInt64(),\r\n DivU64 = _BinaryenDivUInt64(),\r\n RemI64 = _BinaryenRemSInt64(),\r\n RemU64 = _BinaryenRemUInt64(),\r\n AndI64 = _BinaryenAndInt64(),\r\n OrI64 = _BinaryenOrInt64(),\r\n XorI64 = _BinaryenXorInt64(),\r\n ShlI64 = _BinaryenShlInt64(),\r\n ShrU64 = _BinaryenShrUInt64(),\r\n ShrI64 = _BinaryenShrSInt64(),\r\n RotlI64 = _BinaryenRotLInt64(),\r\n RotrI64 = _BinaryenRotRInt64(),\r\n EqI64 = _BinaryenEqInt64(),\r\n NeI64 = _BinaryenNeInt64(),\r\n LtI64 = _BinaryenLtSInt64(),\r\n LtU64 = _BinaryenLtUInt64(),\r\n LeI64 = _BinaryenLeSInt64(),\r\n LeU64 = _BinaryenLeUInt64(),\r\n GtI64 = _BinaryenGtSInt64(),\r\n GtU64 = _BinaryenGtUInt64(),\r\n GeI64 = _BinaryenGeSInt64(),\r\n GeU64 = _BinaryenGeUInt64(),\r\n AddF32 = _BinaryenAddFloat32(),\r\n SubF32 = _BinaryenSubFloat32(),\r\n MulF32 = _BinaryenMulFloat32(),\r\n DivF32 = _BinaryenDivFloat32(),\r\n CopysignF32 = _BinaryenCopySignFloat32(),\r\n MinF32 = _BinaryenMinFloat32(),\r\n MaxF32 = _BinaryenMaxFloat32(),\r\n EqF32 = _BinaryenEqFloat32(),\r\n NeF32 = _BinaryenNeFloat32(),\r\n LtF32 = _BinaryenLtFloat32(),\r\n LeF32 = _BinaryenLeFloat32(),\r\n GtF32 = _BinaryenGtFloat32(),\r\n GeF32 = _BinaryenGeFloat32(),\r\n AddF64 = _BinaryenAddFloat64(),\r\n SubF64 = _BinaryenSubFloat64(),\r\n MulF64 = _BinaryenMulFloat64(),\r\n DivF64 = _BinaryenDivFloat64(),\r\n CopysignF64 = _BinaryenCopySignFloat64(),\r\n MinF64 = _BinaryenMinFloat64(),\r\n MaxF64 = _BinaryenMaxFloat64(),\r\n EqF64 = _BinaryenEqFloat64(),\r\n NeF64 = _BinaryenNeFloat64(),\r\n LtF64 = _BinaryenLtFloat64(),\r\n LeF64 = _BinaryenLeFloat64(),\r\n GtF64 = _BinaryenGtFloat64(),\r\n GeF64 = _BinaryenGeFloat64()\r\n}\r\n\r\nexport enum HostOp {\r\n CurrentMemory = _BinaryenCurrentMemory(),\r\n GrowMemory = _BinaryenGrowMemory(),\r\n\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n // MoveMemory\r\n // SetMemory\r\n}\r\n\r\nexport enum AtomicRMWOp {\r\n Add = _BinaryenAtomicRMWAdd(),\r\n Sub = _BinaryenAtomicRMWSub(),\r\n And = _BinaryenAtomicRMWAnd(),\r\n Or = _BinaryenAtomicRMWOr(),\r\n Xor = _BinaryenAtomicRMWXor(),\r\n Xchg = _BinaryenAtomicRMWXchg()\r\n}\r\n\r\nexport class MemorySegment {\r\n\r\n buffer: Uint8Array;\r\n offset: I64;\r\n\r\n static create(buffer: Uint8Array, offset: I64): MemorySegment {\r\n var segment = new MemorySegment();\r\n segment.buffer = buffer;\r\n segment.offset = offset;\r\n return segment;\r\n }\r\n}\r\n\r\nexport class Module {\r\n\r\n ref: ModuleRef;\r\n\r\n private cachedByValue: usize;\r\n\r\n static create(): Module {\r\n var module = new Module();\r\n module.ref = _BinaryenModuleCreate();\r\n module.cachedByValue = memory.allocate(16);\r\n return module;\r\n }\r\n\r\n static createFrom(buffer: Uint8Array): Module {\r\n var cArr = allocU8Array(buffer);\r\n try {\r\n let module = new Module();\r\n module.ref = _BinaryenModuleRead(cArr, buffer.length);\r\n module.cachedByValue = memory.allocate(3 * 8); // LLVM C-ABI, max used is 3 * usize\r\n return module;\r\n } finally {\r\n memory.free(changetype(cArr));\r\n }\r\n }\r\n\r\n private constructor() { }\r\n\r\n // types\r\n\r\n addFunctionType(\r\n name: string,\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenAddFunctionType(this.ref, cStr, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n getFunctionTypeBySignature(\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionTypeRef {\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenGetFunctionTypeBySignature(this.ref, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n removeFunctionType(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunctionType(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n // constants\r\n\r\n createI32(value: i32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createI64(valueLow: i32, valueHigh: i32 = 0): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt64(out, valueLow, valueHigh);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF32(value: f32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF64(value: f64): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat64(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n // expressions\r\n\r\n createUnary(\r\n op: UnaryOp,\r\n expr: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenUnary(this.ref, op, expr);\r\n }\r\n\r\n createBinary(\r\n op: BinaryOp,\r\n left: ExpressionRef,\r\n right: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenBinary(this.ref, op, left, right);\r\n }\r\n\r\n createHost(\r\n op: HostOp,\r\n name: string | null = null,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenHost(this.ref, op, cStr, cArr, operands ? (operands).length : 0);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createGetLocal(\r\n index: i32,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenGetLocal(this.ref, index, type);\r\n }\r\n\r\n createTeeLocal(\r\n index: i32,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenTeeLocal(this.ref, index, value);\r\n }\r\n\r\n createGetGlobal(\r\n name: string,\r\n type: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenGetGlobal(this.ref, cStr, type);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createLoad(\r\n bytes: Index,\r\n signed: bool,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenLoad(this.ref, bytes, signed ? 1 : 0, offset, /* always aligned */ bytes, type, ptr);\r\n }\r\n\r\n createStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenStore(this.ref, bytes, offset, /* always aligned */ bytes, ptr, value, type);\r\n }\r\n\r\n createAtomicLoad(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicLoad(this.ref, bytes, offset, type, ptr);\r\n }\r\n\r\n createAtomicStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicStore(this.ref, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicRMW(\r\n op: AtomicRMWOp,\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicRMW(this.ref, op, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicCmpxchg(\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n replacement: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicCmpxchg(this.ref, bytes, offset, ptr, expected, replacement, type);\r\n }\r\n\r\n createAtomicWait(\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n timeout: ExpressionRef,\r\n expectedType: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWait(this.ref, ptr, expected, timeout, expectedType);\r\n }\r\n\r\n createAtomicWake(\r\n ptr: ExpressionRef,\r\n wakeCount: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWake(this.ref, ptr, wakeCount);\r\n }\r\n\r\n // statements\r\n\r\n createSetLocal(\r\n index: Index,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSetLocal(this.ref, index, value);\r\n }\r\n\r\n createSetGlobal(\r\n name: string,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenSetGlobal(this.ref, cStr, value);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createBlock(\r\n label: string | null,\r\n children: ExpressionRef[],\r\n type: NativeType = NativeType.None\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n var cArr = allocPtrArray(children);\r\n try {\r\n return _BinaryenBlock(this.ref, cStr, cArr, children.length, type);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createBreak(\r\n label: string | null,\r\n condition: ExpressionRef = 0,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenBreak(this.ref, cStr, condition, value);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createDrop(\r\n expression: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenDrop(this.ref, expression);\r\n }\r\n\r\n createLoop(\r\n label: string | null,\r\n body: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenLoop(this.ref, cStr, body);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createIf(\r\n condition: ExpressionRef,\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenIf(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createNop(): ExpressionRef {\r\n return _BinaryenNop(this.ref);\r\n }\r\n\r\n createReturn(\r\n expression: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenReturn(this.ref, expression);\r\n }\r\n\r\n createSelect(\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef,\r\n condition: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSelect(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createSwitch(\r\n names: string[],\r\n defaultName: string | null,\r\n condition: ExpressionRef,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numNames = names.length;\r\n var strs = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n strs[i] = allocString(names[i]);\r\n }\r\n var cArr = allocI32Array(strs);\r\n var cStr = allocString(defaultName);\r\n try {\r\n return _BinaryenSwitch(this.ref, cArr, numNames, cStr, condition, value);\r\n } finally {\r\n memory.free(cStr);\r\n memory.free(cArr);\r\n for (let i = numNames - 1; i >= 0; --i) memory.free(strs[i]);\r\n }\r\n }\r\n\r\n createCall(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenCall(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createCallIndirect(\r\n index: ExpressionRef,\r\n operands: ExpressionRef[] | null,\r\n typeName: string\r\n ): ExpressionRef {\r\n var cArr = allocPtrArray(operands);\r\n var cStr = allocString(typeName);\r\n try {\r\n return _BinaryenCallIndirect(this.ref, index, cArr, operands && operands.length || 0, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n createUnreachable(): ExpressionRef {\r\n return _BinaryenUnreachable(this.ref);\r\n }\r\n\r\n // meta\r\n\r\n addGlobal(\r\n name: string,\r\n type: NativeType,\r\n mutable: bool,\r\n initializer: ExpressionRef\r\n ): GlobalRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenAddGlobal(this.ref, cStr, type, mutable ? 1 : 0, initializer);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n removeGlobal(\r\n name: string\r\n ): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveGlobal(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n addFunction(\r\n name: string,\r\n type: FunctionTypeRef,\r\n varTypes: NativeType[] | null,\r\n body: ExpressionRef\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(varTypes);\r\n try {\r\n return _BinaryenAddFunction(this.ref, cStr, type, cArr, varTypes ? varTypes.length : 0, body);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n removeFunction(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunction(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n private cachedTemporaryName: usize = 0;\r\n private hasTemporaryFunction: bool = false;\r\n\r\n addTemporaryFunction(result: NativeType, paramTypes: NativeType[] | null, body: ExpressionRef): FunctionRef {\r\n this.hasTemporaryFunction = assert(!this.hasTemporaryFunction);\r\n var tempName = this.cachedTemporaryName;\r\n if (!tempName) this.cachedTemporaryName = tempName = allocString(\"\"); // works because strings are interned\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n let typeRef = _BinaryenAddFunctionType(this.ref, tempName, result, cArr, paramTypes ? paramTypes.length : 0);\r\n return _BinaryenAddFunction(this.ref, tempName, typeRef, 0, 0, body);\r\n } finally {\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n removeTemporaryFunction(): void {\r\n this.hasTemporaryFunction = !assert(this.hasTemporaryFunction);\r\n var tempName = assert(this.cachedTemporaryName);\r\n _BinaryenRemoveFunction(this.ref, tempName);\r\n _BinaryenRemoveFunctionType(this.ref, tempName);\r\n }\r\n\r\n addFunctionExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddFunctionExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addTableExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddTableExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addMemoryExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddMemoryExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addGlobalExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddGlobalExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n removeExport(externalName: string): void {\r\n var cStr = allocString(externalName);\r\n try {\r\n _BinaryenRemoveExport(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n addFunctionImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n functionType: FunctionTypeRef\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddFunctionImport(this.ref, cStr1, cStr2, cStr3, functionType);\r\n } finally {\r\n memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addTableImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddTableImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addMemoryImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddMemoryImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addGlobalImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n globalType: NativeType\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddGlobalImport(this.ref, cStr1, cStr2, cStr3, globalType);\r\n } finally {\r\n memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n /** Unlimited memory constant. */\r\n static readonly UNLIMITED_MEMORY: Index = -1;\r\n\r\n setMemory(\r\n initial: Index,\r\n maximum: Index,\r\n segments: MemorySegment[],\r\n target: Target,\r\n exportName: string | null = null\r\n ): void {\r\n var cStr = allocString(exportName);\r\n var k = segments.length;\r\n var segs = new Array(k);\r\n var offs = new Array(k);\r\n var sizs = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let buffer = segments[i].buffer;\r\n let offset = segments[i].offset;\r\n segs[i] = allocU8Array(buffer);\r\n offs[i] = target == Target.WASM64\r\n ? this.createI64(i64_low(offset), i64_high(offset))\r\n : this.createI32(i64_low(offset));\r\n sizs[i] = buffer.length;\r\n }\r\n var cArr1 = allocI32Array(segs);\r\n var cArr2 = allocI32Array(offs);\r\n var cArr3 = allocI32Array(sizs);\r\n try {\r\n _BinaryenSetMemory(this.ref, initial, maximum, cStr, cArr1, cArr2, cArr3, k);\r\n } finally {\r\n memory.free(cArr3);\r\n memory.free(cArr2);\r\n memory.free(cArr1);\r\n for (let i = k - 1; i >= 0; --i) memory.free(segs[i]);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n setFunctionTable(\r\n initial: Index,\r\n maximum: Index,\r\n funcs: string[]\r\n ): void {\r\n var numNames = funcs.length;\r\n var names = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n names[i] = allocString(funcs[i]);\r\n }\r\n var cArr = allocI32Array(names);\r\n try {\r\n _BinaryenSetFunctionTable(this.ref, initial, maximum, cArr, numNames);\r\n } finally {\r\n memory.free(cArr);\r\n for (let i = numNames; i >= 0; --i) memory.free(names[i]);\r\n }\r\n }\r\n\r\n setStart(func: FunctionRef): void {\r\n _BinaryenSetStart(this.ref, func);\r\n }\r\n\r\n getOptimizeLevel(): i32 {\r\n return _BinaryenGetOptimizeLevel();\r\n }\r\n\r\n setOptimizeLevel(level: i32 = 2): void {\r\n _BinaryenSetOptimizeLevel(level);\r\n }\r\n\r\n getShrinkLevel(): i32 {\r\n return _BinaryenGetShrinkLevel();\r\n }\r\n\r\n setShrinkLevel(level: i32 = 1): void {\r\n _BinaryenSetShrinkLevel(level);\r\n }\r\n\r\n setDebugInfo(on: bool = false): void {\r\n _BinaryenSetDebugInfo(on);\r\n }\r\n\r\n optimize(func: FunctionRef = 0): void {\r\n if (func) {\r\n _BinaryenFunctionOptimize(func, this.ref);\r\n } else {\r\n _BinaryenModuleOptimize(this.ref);\r\n }\r\n }\r\n\r\n runPasses(passes: string[], func: FunctionRef = 0): void {\r\n var numNames = passes.length;\r\n var names = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n names[i] = allocString(passes[i]);\r\n }\r\n var cArr = allocI32Array(names);\r\n try {\r\n if (func) {\r\n _BinaryenFunctionRunPasses(func, this.ref, cArr, numNames);\r\n } else {\r\n _BinaryenModuleRunPasses(this.ref, cArr, numNames);\r\n }\r\n } finally {\r\n memory.free(cArr);\r\n for (let i = numNames; i >= 0; --i) memory.free(names[i]);\r\n }\r\n }\r\n\r\n private cachedPrecomputeName: usize = 0; // for free'ing\r\n private cachedPrecomputeNames: usize = 0;\r\n\r\n precomputeExpression(expr: ExpressionRef): ExpressionRef {\r\n // remember the previous optimize levels and set to max instead, to be sure\r\n var previousOptimizeLevel = _BinaryenGetOptimizeLevel();\r\n var previousShrinkLevel = _BinaryenGetShrinkLevel();\r\n var previousDebugInfo = _BinaryenGetDebugInfo();\r\n _BinaryenSetOptimizeLevel(4);\r\n _BinaryenSetShrinkLevel(0);\r\n _BinaryenSetDebugInfo(false);\r\n\r\n // wrap the expression in a temp. function and run the precompute pass on it\r\n var type = _BinaryenExpressionGetType(expr);\r\n var func = this.addTemporaryFunction(type, null, expr);\r\n var names = this.cachedPrecomputeNames;\r\n if (!names) {\r\n let name = allocString(\"precompute\");\r\n this.cachedPrecomputeName = name;\r\n this.cachedPrecomputeNames = names = allocI32Array([ name ]);\r\n }\r\n _BinaryenFunctionRunPasses(func, this.ref, names, 1);\r\n expr = _BinaryenFunctionGetBody(func);\r\n this.removeTemporaryFunction();\r\n\r\n // reset optimize levels to previous\r\n _BinaryenSetOptimizeLevel(previousOptimizeLevel);\r\n _BinaryenSetShrinkLevel(previousShrinkLevel);\r\n _BinaryenSetDebugInfo(previousDebugInfo);\r\n return expr;\r\n }\r\n\r\n validate(): bool {\r\n return _BinaryenModuleValidate(this.ref) == 1;\r\n }\r\n\r\n interpret(): void {\r\n _BinaryenModuleInterpret(this.ref);\r\n }\r\n\r\n toBinary(sourceMapUrl: string | null): BinaryModule {\r\n var out = this.cachedByValue;\r\n var cStr = allocString(sourceMapUrl);\r\n var binaryPtr: usize = 0;\r\n var sourceMapPtr: usize = 0;\r\n try {\r\n _BinaryenModuleAllocateAndWrite(out, this.ref, cStr);\r\n binaryPtr = readInt(out);\r\n let binaryBytes = readInt(out + 4);\r\n sourceMapPtr = readInt(out + 4 * 2);\r\n let ret = new BinaryModule();\r\n ret.output = readBuffer(binaryPtr, binaryBytes);\r\n ret.sourceMap = readString(sourceMapPtr);\r\n return ret;\r\n } finally {\r\n if (cStr) memory.free(cStr);\r\n if (binaryPtr) memory.free(binaryPtr);\r\n if (sourceMapPtr) memory.free(sourceMapPtr);\r\n }\r\n }\r\n\r\n toText(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n toAsmjs(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n dispose(): void {\r\n assert(this.ref);\r\n memory.free(this.cachedByValue);\r\n memory.free(this.cachedTemporaryName);\r\n memory.free(this.cachedPrecomputeName);\r\n memory.free(this.cachedPrecomputeNames);\r\n _BinaryenModuleDispose(this.ref);\r\n this.ref = 0;\r\n }\r\n\r\n createRelooper(): Relooper {\r\n return Relooper.create(this);\r\n }\r\n\r\n cloneExpression(\r\n expr: ExpressionRef,\r\n noSideEffects: bool = false,\r\n maxDepth: i32 = i32.MAX_VALUE\r\n ): ExpressionRef { // currently supports side effect free expressions only\r\n if (maxDepth < 0) return 0;\r\n maxDepth -= 1;\r\n\r\n var nested1: ExpressionRef,\r\n nested2: ExpressionRef;\r\n\r\n switch (_BinaryenExpressionGetId(expr)) {\r\n case ExpressionId.Const: {\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32: {\r\n return this.createI32(_BinaryenConstGetValueI32(expr));\r\n }\r\n case NativeType.I64: {\r\n return this.createI64(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n }\r\n case NativeType.F32: {\r\n return this.createF32(_BinaryenConstGetValueF32(expr));\r\n }\r\n case NativeType.F64: {\r\n return this.createF64(_BinaryenConstGetValueF64(expr));\r\n }\r\n default: {\r\n throw new Error(\"concrete type expected\");\r\n }\r\n }\r\n }\r\n case ExpressionId.GetLocal: {\r\n return _BinaryenGetLocal(this.ref,\r\n _BinaryenGetLocalGetIndex(expr),\r\n _BinaryenExpressionGetType(expr)\r\n );\r\n }\r\n case ExpressionId.GetGlobal: {\r\n let globalName = _BinaryenGetGlobalGetName(expr);\r\n if (!globalName) break;\r\n return _BinaryenGetGlobal(this.ref, globalName, _BinaryenExpressionGetType(expr));\r\n }\r\n case ExpressionId.Load: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenLoadGetPtr(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return (\r\n _BinaryenLoadIsAtomic(expr)\r\n ? _BinaryenAtomicLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n : _BinaryenLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadIsSigned(expr) ? 1 : 0,\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenLoadGetAlign(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n );\r\n }\r\n case ExpressionId.Unary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenUnaryGetValue(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenUnary(this.ref, _BinaryenUnaryGetOp(expr), nested1);\r\n }\r\n case ExpressionId.Binary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenBinaryGetLeft(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n if (!(nested2 = this.cloneExpression(_BinaryenBinaryGetRight(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenBinary(this.ref, _BinaryenBinaryGetOp(expr), nested1, nested2);\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n // source map generation\r\n\r\n addDebugInfoFile(name: string): Index {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenModuleAddDebugInfoFileName(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n getDebugInfoFile(index: Index): string | null {\r\n return readString(_BinaryenModuleGetDebugInfoFileName(this.ref, index));\r\n }\r\n\r\n setDebugLocation(\r\n func: FunctionRef,\r\n expr: ExpressionRef,\r\n fileIndex: Index,\r\n lineNumber: Index,\r\n columnNumber: Index\r\n ): void {\r\n _BinaryenFunctionSetDebugLocation(func, expr, fileIndex, lineNumber, columnNumber);\r\n }\r\n}\r\n\r\n// expressions\r\n\r\nexport function getExpressionId(expr: ExpressionRef): ExpressionId {\r\n return _BinaryenExpressionGetId(expr);\r\n}\r\n\r\nexport function getExpressionType(expr: ExpressionRef): NativeType {\r\n return _BinaryenExpressionGetType(expr);\r\n}\r\n\r\nexport function getConstValueI32(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI32(expr);\r\n}\r\n\r\nexport function getConstValueI64Low(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64Low(expr);\r\n}\r\n\r\nexport function getConstValueI64High(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64High(expr);\r\n}\r\n\r\nexport function getConstValueF32(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF32(expr);\r\n}\r\n\r\nexport function getConstValueF64(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF64(expr);\r\n}\r\n\r\nexport function getGetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenGetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenSetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSetLocalGetValue(expr);\r\n}\r\n\r\nexport function isTeeLocal(expr: ExpressionRef): bool {\r\n return _BinaryenSetLocalIsTee(expr);\r\n}\r\n\r\nexport function getBinaryOp(expr: ExpressionRef): BinaryOp {\r\n return _BinaryenBinaryGetOp(expr);\r\n}\r\n\r\nexport function getBinaryLeft(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetLeft(expr);\r\n}\r\n\r\nexport function getBinaryRight(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetRight(expr);\r\n}\r\n\r\nexport function getUnaryOp(expr: ExpressionRef): UnaryOp {\r\n return _BinaryenUnaryGetOp(expr);\r\n}\r\n\r\nexport function getUnaryValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenUnaryGetValue(expr);\r\n}\r\n\r\nexport function getLoadBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetBytes(expr);\r\n}\r\n\r\nexport function getLoadOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetOffset(expr);\r\n}\r\n\r\nexport function getLoadPtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoadGetPtr(expr);\r\n}\r\n\r\nexport function isLoadSigned(expr: ExpressionRef): bool {\r\n return _BinaryenLoadIsSigned(expr);\r\n}\r\n\r\nexport function getStoreBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetBytes(expr);\r\n}\r\n\r\nexport function getStoreOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetOffset(expr);\r\n}\r\n\r\nexport function getStorePtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetPtr(expr);\r\n}\r\n\r\nexport function getStoreValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetValue(expr);\r\n}\r\n\r\nexport function getBlockName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBlockGetName(expr));\r\n}\r\n\r\nexport function getBlockChildCount(expr: ExpressionRef): Index {\r\n return _BinaryenBlockGetNumChildren(expr);\r\n}\r\n\r\nexport function getBlockChild(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenBlockGetChild(expr, index);\r\n}\r\n\r\nexport function getIfCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetCondition(expr);\r\n}\r\n\r\nexport function getIfTrue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfTrue(expr);\r\n}\r\n\r\nexport function getIfFalse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfFalse(expr);\r\n}\r\n\r\nexport function getLoopName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenLoopGetName(expr));\r\n}\r\n\r\nexport function getLoopBody(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoopGetBody(expr);\r\n}\r\n\r\nexport function getBreakName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBreakGetName(expr));\r\n}\r\n\r\nexport function getBreakCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBreakGetCondition(expr);\r\n}\r\n\r\nexport function getSelectThen(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfTrue(expr);\r\n}\r\n\r\nexport function getSelectElse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfFalse(expr);\r\n}\r\n\r\nexport function getSelectCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetCondition(expr);\r\n}\r\n\r\nexport function getDropValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenDropGetValue(expr);\r\n}\r\n\r\nexport function getReturnValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenReturnGetValue(expr);\r\n}\r\n\r\nexport function getCallTarget(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenCallGetTarget(expr));\r\n}\r\n\r\nexport function getHostOp(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenHostGetOp(expr);\r\n}\r\n\r\nexport function getHostOperandCount(expr: ExpressionRef): Index {\r\n return _BinaryenHostGetNumOperands(expr);\r\n}\r\n\r\nexport function getHostOperand(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenHostGetOperand(expr, index);\r\n}\r\n\r\nexport function getHostName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenHostGetNameOperand(expr));\r\n}\r\n\r\n// functions\r\n\r\nexport function getFunctionBody(func: FunctionRef): ExpressionRef {\r\n return _BinaryenFunctionGetBody(func);\r\n}\r\n\r\nexport function getFunctionName(func: FunctionRef): string | null {\r\n return readString(_BinaryenFunctionGetName(func));\r\n}\r\n\r\nexport function getFunctionParamCount(func: FunctionRef): Index {\r\n return _BinaryenFunctionGetNumParams(func);\r\n}\r\n\r\nexport function getFunctionParamType(func: FunctionRef, index: Index): NativeType {\r\n return _BinaryenFunctionGetParam(func, index);\r\n}\r\n\r\nexport function getFunctionResultType(func: FunctionRef): NativeType {\r\n return _BinaryenFunctionGetResult(func);\r\n}\r\n\r\nexport class Relooper {\r\n\r\n module: Module;\r\n ref: RelooperRef;\r\n\r\n static create(module: Module): Relooper {\r\n var relooper = new Relooper();\r\n relooper.module = module;\r\n relooper.ref = _RelooperCreate();\r\n return relooper;\r\n }\r\n\r\n private constructor() {}\r\n\r\n addBlock(code: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlock(this.ref, code);\r\n }\r\n\r\n addBranch(from: RelooperBlockRef, to: RelooperBlockRef, condition: ExpressionRef = 0, code: ExpressionRef = 0): void {\r\n _RelooperAddBranch(from, to, condition, code);\r\n }\r\n\r\n addBlockWithSwitch(code: ExpressionRef, condition: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlockWithSwitch(this.ref, code, condition);\r\n }\r\n\r\n addBranchForSwitch(from: RelooperBlockRef, to: RelooperBlockRef, indexes: i32[], code: ExpressionRef = 0): void {\r\n var cArr = allocI32Array(indexes);\r\n try {\r\n _RelooperAddBranchForSwitch(from, to, cArr, indexes.length, code);\r\n } finally {\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n renderAndDispose(entry: RelooperBlockRef, labelHelper: Index): ExpressionRef {\r\n return _RelooperRenderAndDispose(this.ref, entry, labelHelper, this.module.ref);\r\n }\r\n}\r\n\r\n// export function hasSideEffects(expr: ExpressionRef): bool {\r\n// switch (_BinaryenExpressionGetId(expr = getPtr(expr))) {\r\n// case ExpressionId.GetLocal:\r\n// case ExpressionId.GetGlobal:\r\n// case ExpressionId.Const:\r\n// case ExpressionId.Nop:\r\n// case ExpressionId.Unreachable: {\r\n// return false;\r\n// }\r\n// case ExpressionId.Block: {\r\n// for (let i = 0, k = _BinaryenBlockGetNumChildren(expr); i < k; ++i) {\r\n// if (hasSideEffects(_BinaryenBlockGetChild(expr, i))) return true;\r\n// }\r\n// return false;\r\n// }\r\n// case ExpressionId.If: {\r\n// return hasSideEffects(_BinaryenIfGetCondition(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfFalse(expr));\r\n// }\r\n// case ExpressionId.Unary: {\r\n// return hasSideEffects(_BinaryenUnaryGetValue(expr));\r\n// }\r\n// case ExpressionId.Binary: {\r\n// return hasSideEffects(_BinaryenBinaryGetLeft(expr))\r\n// || hasSideEffects(_BinaryenBinaryGetRight(expr));\r\n// }\r\n// case ExpressionId.Drop: {\r\n// return hasSideEffects(_BinaryenDropGetValue(expr));\r\n// }\r\n// case ExpressionId.Select: {\r\n// return hasSideEffects(_BinaryenSelectGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenSelectGetIfFalse(expr))\r\n// || hasSideEffects(_BinaryenSelectGetCondition(expr));\r\n// }\r\n// }\r\n// return true;\r\n// }\r\n\r\n// helpers\r\n// can't do stack allocation here: STACKTOP is a global in WASM but a hidden variable in asm.js\r\n\r\nfunction allocU8Array(u8s: Uint8Array | null): usize {\r\n if (!u8s) return 0;\r\n var numValues = u8s.length;\r\n var ptr = memory.allocate(numValues);\r\n var idx = ptr;\r\n for (let i = 0; i < numValues; ++i) {\r\n store(idx++, u8s[i]);\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocI32Array(i32s: i32[] | null): usize {\r\n if (!i32s) return 0;\r\n var ptr = memory.allocate(i32s.length << 2);\r\n var idx = ptr;\r\n for (let i = 0, k = i32s.length; i < k; ++i) {\r\n let val = i32s[i];\r\n // store(idx, val) is not portable\r\n store(idx , ( val & 0xff) as u8);\r\n store(idx + 1, ((val >> 8) & 0xff) as u8);\r\n store(idx + 2, ((val >> 16) & 0xff) as u8);\r\n store(idx + 3, ( val >>> 24 ) as u8);\r\n idx += 4;\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocPtrArray(ptrs: usize[] | null): usize {\r\n return allocI32Array(ptrs); // TODO: WASM64 one day\r\n}\r\n\r\nfunction stringLengthUTF8(str: string): usize {\r\n var len = 0;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n ++len;\r\n } else if (u <= 0x7FF) {\r\n len += 2;\r\n } else if (u <= 0xFFFF) {\r\n len += 3;\r\n } else if (u <= 0x1FFFFF) {\r\n len += 4;\r\n } else if (u <= 0x3FFFFFF) {\r\n len += 5;\r\n } else {\r\n len += 6;\r\n }\r\n }\r\n return len;\r\n}\r\n\r\nfunction allocString(str: string | null): usize {\r\n if (str == null) return 0;\r\n var ptr = memory.allocate(stringLengthUTF8(str) + 1);\r\n // the following is based on Emscripten's stringToUTF8Array\r\n var idx = ptr;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n store(idx++, u as u8);\r\n } else if (u <= 0x7FF) {\r\n store(idx++, (0xC0 | (u >>> 6) ) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0xFFFF) {\r\n store(idx++, (0xE0 | (u >>> 12) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x1FFFFF) {\r\n store(idx++, (0xF0 | (u >>> 18) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x3FFFFFF) {\r\n store(idx++, (0xF8 | (u >>> 24) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else {\r\n store(idx++, (0xFC | (u >>> 30) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 24) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n }\r\n }\r\n store(idx, 0);\r\n return ptr;\r\n}\r\n\r\nfunction readInt(ptr: usize): i32 {\r\n return (\r\n load(ptr ) |\r\n (load(ptr + 1) << 8) |\r\n (load(ptr + 2) << 16) |\r\n (load(ptr + 3) << 24)\r\n );\r\n}\r\n\r\nfunction readBuffer(ptr: usize, length: usize): Uint8Array {\r\n var ret = new Uint8Array(length);\r\n for (let i: usize = 0; i < length; ++i) {\r\n ret[i] = load(ptr + i);\r\n }\r\n return ret;\r\n}\r\n\r\nexport function readString(ptr: usize): string | null {\r\n if (!ptr) return null;\r\n var arr = new Array();\r\n // the following is based on Emscripten's UTF8ArrayToString\r\n var cp: u32;\r\n var u1: u32, u2: u32, u3: u32, u4: u32, u5: u32;\r\n while (cp = load(ptr++)) {\r\n if (!(cp & 0x80)) {\r\n arr.push(cp);\r\n continue;\r\n }\r\n u1 = load(ptr++) & 63;\r\n if ((cp & 0xE0) == 0xC0) {\r\n arr.push(((cp & 31) << 6) | u1);\r\n continue;\r\n }\r\n u2 = load(ptr++) & 63;\r\n if ((cp & 0xF0) == 0xE0) {\r\n cp = ((cp & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u3 = load(ptr++) & 63;\r\n if ((cp & 0xF8) == 0xF0) {\r\n cp = ((cp & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;\r\n } else {\r\n u4 = load(ptr++) & 63;\r\n if ((cp & 0xFC) == 0xF8) {\r\n cp = ((cp & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;\r\n } else {\r\n u5 = load(ptr++) & 63;\r\n cp = ((cp & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;\r\n }\r\n }\r\n }\r\n arr.push(cp);\r\n // if (cp < 0x10000) {\r\n // arr.push(cp);\r\n // } else {\r\n // var ch = cp - 0x10000;\r\n // arr.push(0xD800 | (ch >> 10));\r\n // arr.push(0xDC00 | (ch & 0x3FF));\r\n // }\r\n }\r\n // return String.fromCharCodes(arr);\r\n return String.fromCodePoints(arr);\r\n}\r\n\r\n/** Result structure of {@link Module#toBinary}. */\r\nexport class BinaryModule {\r\n /** WebAssembly binary. */\r\n output: Uint8Array;\r\n /** Source map, if generated. */\r\n sourceMap: string | null;\r\n}\r\n\r\n/** Tests if an expression needs an explicit 'unreachable' when it is the terminating statement. */\r\nexport function needsExplicitUnreachable(expr: ExpressionRef): bool {\r\n // not applicable if pushing a value to the stack\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32:\r\n case NativeType.I64:\r\n case NativeType.F32:\r\n case NativeType.F64: return false;\r\n }\r\n switch (_BinaryenExpressionGetId(expr)) {\r\n case ExpressionId.Unreachable:\r\n case ExpressionId.Return: return false;\r\n case ExpressionId.Break: return _BinaryenBreakGetCondition(expr) != 0;\r\n case ExpressionId.Block: {\r\n if (!_BinaryenBlockGetName(expr)) { // can't break out of it\r\n let numChildren = _BinaryenBlockGetNumChildren(expr); // last child needs unreachable\r\n return numChildren > 0 && needsExplicitUnreachable(_BinaryenBlockGetChild(expr, numChildren - 1));\r\n }\r\n }\r\n }\r\n return true;\r\n}\r\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/**\r\n * Mappings from AssemblyScript types to WebAssembly types.\r\n * @module types\r\n *//***/\r\n\r\nimport {\r\n Class,\r\n FunctionTarget,\r\n Program,\r\n DecoratorFlags\r\n} from \"./program\";\r\n\r\nimport {\r\n NativeType,\r\n ExpressionRef,\r\n Module\r\n} from \"./module\";\r\n\r\n/** Indicates the kind of a type. */\r\nexport const enum TypeKind {\r\n\r\n // signed integers\r\n\r\n /** An 8-bit signed integer. */\r\n I8,\r\n /** A 16-bit signed integer. */\r\n I16,\r\n /** A 32-bit signed integer. */\r\n I32,\r\n /** A 64-bit signed integer. */\r\n I64,\r\n /** A 32-bit/64-bit signed integer, depending on the target. */\r\n ISIZE,\r\n\r\n // unsigned integers\r\n\r\n /** An 8-bit unsigned integer. */\r\n U8,\r\n /** A 16-bit unsigned integer. */\r\n U16,\r\n /** A 32-bit unsigned integer. Also the base of function types. */\r\n U32,\r\n /** A 64-bit unsigned integer. */\r\n U64,\r\n /** A 32-bit/64-bit unsigned integer, depending on the target. Also the base of class types. */\r\n USIZE,\r\n /** A 1-bit unsigned integer. */\r\n BOOL, // sic\r\n\r\n // floats\r\n\r\n /** A 32-bit float. */\r\n F32,\r\n /** A 64-bit double. */\r\n F64,\r\n\r\n // other\r\n\r\n /** No return type. */\r\n VOID\r\n}\r\n\r\n/** Indicates capabilities of a type. */\r\nexport const enum TypeFlags {\r\n NONE = 0,\r\n /** Is a signed type that can represent negative values. */\r\n SIGNED = 1 << 0,\r\n /** Is an unsigned type that cannot represent negative values. */\r\n UNSIGNED = 1 << 1,\r\n /** Is an integer type. */\r\n INTEGER = 1 << 2,\r\n /** Is a floating point type. */\r\n FLOAT = 1 << 3,\r\n /** Is a pointer type. */\r\n POINTER = 1 << 4,\r\n /** Is smaller than 32-bits. */\r\n SHORT = 1 << 5,\r\n /** Is larger than 32-bits. */\r\n LONG = 1 << 6,\r\n /** Is a value type. */\r\n VALUE = 1 << 7,\r\n /** Is a reference type. */\r\n REFERENCE = 1 << 8,\r\n /** Is a nullable type. */\r\n NULLABLE = 1 << 9\r\n}\r\n\r\n/** Represents a resolved type. */\r\nexport class Type {\r\n\r\n /** Type kind. */\r\n kind: TypeKind;\r\n /** Type flags. */\r\n flags: TypeFlags;\r\n /** Size in bits. */\r\n size: u32;\r\n /** Size in bytes. */\r\n byteSize: i32;\r\n /** Underlying class reference, if a class type. */\r\n classReference: Class | null;\r\n /** Underlying signature reference, if a function type. */\r\n signatureReference: Signature | null;\r\n /** Respective non-nullable type, if nullable. */\r\n nonNullableType: Type;\r\n /** Cached nullable type, if non-nullable. */\r\n private cachedNullableType: Type | null = null;\r\n\r\n /** Constructs a new resolved type. */\r\n constructor(kind: TypeKind, flags: TypeFlags, size: u32) {\r\n this.kind = kind;\r\n this.flags = flags;\r\n this.size = size;\r\n this.byteSize = ceil(size / 8);\r\n this.classReference = null;\r\n this.signatureReference = null;\r\n this.nonNullableType = this;\r\n }\r\n\r\n /** Returns the closest int type representing this type. */\r\n get intType(): Type {\r\n switch (this.kind) {\r\n case TypeKind.I8: return Type.i8;\r\n case TypeKind.I16: return Type.i16;\r\n case TypeKind.F32:\r\n case TypeKind.I32: return Type.i32;\r\n case TypeKind.F64:\r\n case TypeKind.I64: return Type.i64;\r\n case TypeKind.ISIZE: return this.size == 64 ? Type.isize64 : Type.isize32;\r\n case TypeKind.U8: return Type.u8;\r\n case TypeKind.U16: return Type.u16;\r\n case TypeKind.U32: return Type.u32;\r\n case TypeKind.U64: return Type.u64;\r\n case TypeKind.USIZE: return this.size == 64 ? Type.usize64 : Type.usize32;\r\n case TypeKind.BOOL:\r\n default: return Type.i32;\r\n }\r\n }\r\n\r\n /** Tests if this is a managed type that needs GC hooks. */\r\n isManaged(program: Program): bool {\r\n if (program.hasGC) {\r\n let classReference = this.classReference;\r\n return classReference !== null && !classReference.hasDecorator(DecoratorFlags.UNMANAGED);\r\n }\r\n return false;\r\n }\r\n\r\n /** Computes the sign-extending shift in the target type. */\r\n computeSmallIntegerShift(targetType: Type): u32 {\r\n return targetType.size - this.size;\r\n }\r\n\r\n /** Computes the truncating mask in the target type. */\r\n computeSmallIntegerMask(targetType: Type): u32 {\r\n var size = this.is(TypeFlags.UNSIGNED) ? this.size : this.size - 1;\r\n return ~0 >>> (targetType.size - size);\r\n }\r\n\r\n /** Tests if this type has (all of) the specified flags. */\r\n is(flags: TypeFlags): bool { return (this.flags & flags) == flags; }\r\n /** Tests if this type has any of the specified flags. */\r\n isAny(flags: TypeFlags): bool { return (this.flags & flags) != 0; }\r\n\r\n /** Composes a class type from this type and a class. */\r\n asClass(classType: Class): Type {\r\n assert(this.kind == TypeKind.USIZE && !this.classReference);\r\n var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size);\r\n ret.classReference = classType;\r\n return ret;\r\n }\r\n\r\n /** Composes a function type from this type and a function. */\r\n asFunction(signature: Signature): Type {\r\n assert(this.kind == TypeKind.U32 && !this.signatureReference);\r\n var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size);\r\n ret.signatureReference = signature;\r\n return ret;\r\n }\r\n\r\n /** Composes the respective nullable type of this type. */\r\n asNullable(): Type {\r\n assert(this.is(TypeFlags.REFERENCE));\r\n if (!this.cachedNullableType) {\r\n assert(!this.is(TypeFlags.NULLABLE));\r\n this.cachedNullableType = new Type(this.kind, this.flags | TypeFlags.NULLABLE, this.size);\r\n this.cachedNullableType.nonNullableType = this;\r\n this.cachedNullableType.classReference = this.classReference; // either a class reference\r\n this.cachedNullableType.signatureReference = this.signatureReference; // or a function reference\r\n }\r\n return this.cachedNullableType;\r\n }\r\n\r\n /** Tests if a value of this type is assignable to a target of the specified type. */\r\n isAssignableTo(target: Type, signednessIsRelevant: bool = false): bool {\r\n var currentClass: Class | null;\r\n var targetClass: Class | null;\r\n var currentFunction: Signature | null;\r\n var targetFunction: Signature | null;\r\n if (this.is(TypeFlags.REFERENCE)) {\r\n if (target.is(TypeFlags.REFERENCE)) {\r\n if (!this.is(TypeFlags.NULLABLE) || target.is(TypeFlags.NULLABLE)) {\r\n if (currentClass = this.classReference) {\r\n if (targetClass = target.classReference) {\r\n return currentClass.isAssignableTo(targetClass);\r\n }\r\n } else if (currentFunction = this.signatureReference) {\r\n if (targetFunction = target.signatureReference) {\r\n return currentFunction.isAssignableTo(targetFunction);\r\n }\r\n }\r\n }\r\n }\r\n } else if (!target.is(TypeFlags.REFERENCE)) {\r\n if (this.is(TypeFlags.INTEGER)) {\r\n if (target.is(TypeFlags.INTEGER)) {\r\n if (\r\n !signednessIsRelevant ||\r\n this == Type.bool || // a bool (0 or 1) can be safely assigned to all sorts of integers\r\n this.is(TypeFlags.SIGNED) == target.is(TypeFlags.SIGNED)\r\n ) {\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:\r\n case Token.VOID: return true;\r\n default: return false;\r\n }\r\n}\r\n\r\nexport function operatorTokenToString(token: Token): string {\r\n switch (token) {\r\n case Token.DELETE: return \"delete\";\r\n case Token.IN: return \"in\";\r\n case Token.INSTANCEOF: return \"instanceof\";\r\n case Token.NEW: return \"new\";\r\n case Token.TYPEOF: return \"typeof\";\r\n case Token.VOID: return \"void\";\r\n case Token.YIELD: return \"yield\";\r\n case Token.DOT_DOT_DOT: return \"...\";\r\n case Token.COMMA: return \",\";\r\n case Token.LESSTHAN: return \"<\";\r\n case Token.GREATERTHAN: return \">\";\r\n case Token.LESSTHAN_EQUALS: return \"<=\";\r\n case Token.GREATERTHAN_EQUALS: return \">=\";\r\n case Token.EQUALS_EQUALS: return \"==\";\r\n case Token.EXCLAMATION_EQUALS: return \"!=\";\r\n case Token.EQUALS_EQUALS_EQUALS: return \"===\";\r\n case Token.EXCLAMATION_EQUALS_EQUALS: return \"!==\";\r\n case Token.PLUS: return \"+\";\r\n case Token.MINUS: return \"-\";\r\n case Token.ASTERISK_ASTERISK: return \"**\";\r\n case Token.ASTERISK: return \"*\";\r\n case Token.SLASH: return \"/\";\r\n case Token.PERCENT: return \"%\";\r\n case Token.PLUS_PLUS: return \"++\";\r\n case Token.MINUS_MINUS: return \"--\";\r\n case Token.LESSTHAN_LESSTHAN: return \"<<\";\r\n case Token.GREATERTHAN_GREATERTHAN: return \">>\";\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: return \">>>\";\r\n case Token.AMPERSAND: return \"&\";\r\n case Token.BAR: return \"|\";\r\n case Token.CARET: return \"^\";\r\n case Token.EXCLAMATION: return \"!\";\r\n case Token.TILDE: return \"~\";\r\n case Token.AMPERSAND_AMPERSAND: return \"&&\";\r\n case Token.BAR_BAR: return \"||\";\r\n case Token.EQUALS: return \"=\";\r\n case Token.PLUS_EQUALS: return \"+=\";\r\n case Token.MINUS_EQUALS: return \"-=\";\r\n case Token.ASTERISK_EQUALS: return \"*=\";\r\n case Token.ASTERISK_ASTERISK_EQUALS: return \"**=\";\r\n case Token.SLASH_EQUALS: return \"/=\";\r\n case Token.PERCENT_EQUALS: return \"%=\";\r\n case Token.LESSTHAN_LESSTHAN_EQUALS: return \"<<=\";\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS: return \">>=\";\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS: return \">>>=\";\r\n case Token.AMPERSAND_EQUALS: return \"&=\";\r\n case Token.BAR_EQUALS: return \"|=\";\r\n case Token.CARET_EQUALS: return \"^=\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\nexport class Range {\r\n\r\n source: Source;\r\n start: i32;\r\n end: i32;\r\n\r\n // TODO: set these while tokenizing\r\n // line: i32;\r\n // column: i32;\r\n\r\n constructor(source: Source, start: i32, end: i32) {\r\n this.source = source;\r\n this.start = start;\r\n this.end = end;\r\n }\r\n\r\n static join(a: Range, b: Range): Range {\r\n if (a.source != b.source) throw new Error(\"source mismatch\");\r\n return new Range(a.source,\r\n a.start < b.start ? a.start : b.start,\r\n a.end > b.end ? a.end : b.end\r\n );\r\n }\r\n\r\n get atStart(): Range {\r\n return new Range(this.source, this.start, this.start);\r\n }\r\n get atEnd(): Range {\r\n return new Range(this.source, this.end, this.end);\r\n }\r\n\r\n get line(): i32 {\r\n var text = this.source.text;\r\n var line = 1;\r\n for (let pos = this.start; pos >= 0; --pos) {\r\n if (text.charCodeAt(pos) == CharCode.LINEFEED) line++;\r\n }\r\n return line;\r\n }\r\n\r\n get column(): i32 {\r\n var text = this.source.text;\r\n var column = 0;\r\n for (let pos = this.start - 1; pos >= 0; --pos) {\r\n if (text.charCodeAt(pos) == CharCode.LINEFEED) break;\r\n ++column;\r\n }\r\n return column;\r\n }\r\n\r\n toString(): string {\r\n return this.source.text.substring(this.start, this.end);\r\n }\r\n\r\n debugInfoRef: usize = 0;\r\n}\r\n\r\ndeclare function parseFloat(str: string): f64;\r\n\r\n/** Handler for intercepting comments while tokenizing. */\r\nexport type CommentHandler = (kind: CommentKind, text: string, range: Range) => void;\r\n\r\n/** Tokenizes a source to individual {@link Token}s. */\r\nexport class Tokenizer extends DiagnosticEmitter {\r\n\r\n source: Source;\r\n end: i32 = 0;\r\n\r\n pos: i32 = 0;\r\n token: Token = -1;\r\n tokenPos: i32 = 0;\r\n\r\n nextToken: Token = -1;\r\n nextTokenPos: i32 = 0;\r\n nextTokenOnNewLine: bool = false;\r\n\r\n onComment: CommentHandler | null = null;\r\n\r\n /** Constructs a new tokenizer. */\r\n constructor(source: Source, diagnostics: DiagnosticMessage[] | null = null) {\r\n super(diagnostics);\r\n this.source = source;\r\n this.pos = 0;\r\n this.end = source.text.length;\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n\r\n var text = source.text;\r\n\r\n // skip bom\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.BYTEORDERMARK\r\n ) {\r\n ++this.pos;\r\n }\r\n\r\n // skip shebang\r\n if (\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.HASH &&\r\n text.charCodeAt(this.pos + 1) == CharCode.EXCLAMATION\r\n ) {\r\n this.pos += 2;\r\n while (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) != CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n // 'next' now starts at lf or eof\r\n }\r\n }\r\n\r\n next(identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT): Token {\r\n this.nextToken = -1;\r\n return this.token = this.unsafeNext(identifierHandling);\r\n }\r\n\r\n private unsafeNext(\r\n identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT,\r\n maxTokenLength: i32 = i32.MAX_VALUE\r\n ): Token {\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n this.tokenPos = this.pos;\r\n let c = text.charCodeAt(this.pos);\r\n switch (c) {\r\n case CharCode.CARRIAGERETURN: {\r\n if (!(\r\n ++this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.LINEFEED\r\n )) break;\r\n // otherwise fall-through\r\n }\r\n case CharCode.LINEFEED:\r\n case CharCode.TAB:\r\n case CharCode.VERTICALTAB:\r\n case CharCode.FORMFEED:\r\n case CharCode.SPACE: {\r\n ++this.pos;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.EXCLAMATION_EQUALS_EQUALS;\r\n }\r\n return Token.EXCLAMATION_EQUALS;\r\n }\r\n return Token.EXCLAMATION;\r\n }\r\n case CharCode.DOUBLEQUOTE:\r\n case CharCode.SINGLEQUOTE:\r\n case CharCode.BACKTICK: { // TODO\r\n return Token.STRINGLITERAL; // expects a call to readString\r\n }\r\n case CharCode.PERCENT: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.PERCENT_EQUALS;\r\n }\r\n return Token.PERCENT;\r\n }\r\n case CharCode.AMPERSAND: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.AMPERSAND) {\r\n ++this.pos;\r\n return Token.AMPERSAND_AMPERSAND;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.AMPERSAND_EQUALS;\r\n }\r\n }\r\n return Token.AMPERSAND;\r\n }\r\n case CharCode.OPENPAREN: {\r\n ++this.pos;\r\n return Token.OPENPAREN;\r\n }\r\n case CharCode.CLOSEPAREN: {\r\n ++this.pos;\r\n return Token.CLOSEPAREN;\r\n }\r\n case CharCode.ASTERISK: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.ASTERISK_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.ASTERISK_ASTERISK_EQUALS;\r\n }\r\n return Token.ASTERISK_ASTERISK;\r\n }\r\n }\r\n return Token.ASTERISK;\r\n }\r\n case CharCode.PLUS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.PLUS) {\r\n ++this.pos;\r\n return Token.PLUS_PLUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.PLUS_EQUALS;\r\n }\r\n }\r\n return Token.PLUS;\r\n }\r\n case CharCode.COMMA: {\r\n ++this.pos;\r\n return Token.COMMA;\r\n }\r\n case CharCode.MINUS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.MINUS) {\r\n ++this.pos;\r\n return Token.MINUS_MINUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.MINUS_EQUALS;\r\n }\r\n }\r\n return Token.MINUS;\r\n }\r\n case CharCode.DOT: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (isDecimalDigit(text.charCodeAt(this.pos))) {\r\n --this.pos;\r\n return Token.FLOATLITERAL; // expects a call to readFloat\r\n }\r\n if (\r\n maxTokenLength > 2 && this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.DOT &&\r\n text.charCodeAt(this.pos + 1) == CharCode.DOT\r\n ) {\r\n this.pos += 2;\r\n return Token.DOT_DOT_DOT;\r\n }\r\n }\r\n return Token.DOT;\r\n }\r\n case CharCode.SLASH: {\r\n let commentStartPos = this.pos;\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.SLASH) { // single-line\r\n let commentKind = CommentKind.LINE;\r\n if (\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n ) {\r\n ++this.pos;\r\n commentKind = CommentKind.TRIPLE;\r\n }\r\n while (++this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.LINEFEED) {\r\n ++this.pos;\r\n break;\r\n }\r\n }\r\n if (this.onComment) {\r\n this.onComment(\r\n commentKind,\r\n text.substring(commentStartPos, this.pos),\r\n this.range(commentStartPos, this.pos)\r\n );\r\n }\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) { // multi-line\r\n let closed = false;\r\n while (++this.pos < this.end) {\r\n c = text.charCodeAt(this.pos);\r\n if (\r\n c == CharCode.ASTERISK &&\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n ) {\r\n this.pos += 2;\r\n closed = true;\r\n break;\r\n }\r\n }\r\n if (!closed) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n this.range(this.pos), \"*/\"\r\n );\r\n } else if (this.onComment) {\r\n this.onComment(\r\n CommentKind.BLOCK,\r\n text.substring(commentStartPos, this.pos),\r\n this.range(commentStartPos, this.pos)\r\n );\r\n }\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.SLASH_EQUALS;\r\n }\r\n }\r\n return Token.SLASH;\r\n }\r\n case CharCode._0:\r\n case CharCode._1:\r\n case CharCode._2:\r\n case CharCode._3:\r\n case CharCode._4:\r\n case CharCode._5:\r\n case CharCode._6:\r\n case CharCode._7:\r\n case CharCode._8:\r\n case CharCode._9: {\r\n return this.testInteger()\r\n ? Token.INTEGERLITERAL // expects a call to readInteger\r\n : Token.FLOATLITERAL; // expects a call to readFloat\r\n }\r\n case CharCode.COLON: {\r\n ++this.pos;\r\n return Token.COLON;\r\n }\r\n case CharCode.SEMICOLON: {\r\n ++this.pos;\r\n return Token.SEMICOLON;\r\n }\r\n case CharCode.LESSTHAN: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.LESSTHAN) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 &&\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.LESSTHAN_LESSTHAN_EQUALS;\r\n }\r\n return Token.LESSTHAN_LESSTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.LESSTHAN_EQUALS;\r\n }\r\n }\r\n return Token.LESSTHAN;\r\n }\r\n case CharCode.EQUALS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 &&\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.EQUALS_EQUALS_EQUALS;\r\n }\r\n return Token.EQUALS_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n return Token.EQUALS_GREATERTHAN;\r\n }\r\n }\r\n return Token.EQUALS;\r\n }\r\n case CharCode.GREATERTHAN: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n if (maxTokenLength > 2 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 3 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS;\r\n }\r\n return Token.GREATERTHAN_GREATERTHAN_GREATERTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_GREATERTHAN_EQUALS;\r\n }\r\n }\r\n return Token.GREATERTHAN_GREATERTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_EQUALS;\r\n }\r\n }\r\n return Token.GREATERTHAN;\r\n }\r\n case CharCode.QUESTION: {\r\n ++this.pos;\r\n return Token.QUESTION;\r\n }\r\n case CharCode.OPENBRACKET: {\r\n ++this.pos;\r\n return Token.OPENBRACKET;\r\n }\r\n case CharCode.CLOSEBRACKET: {\r\n ++this.pos;\r\n return Token.CLOSEBRACKET;\r\n }\r\n case CharCode.CARET: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.CARET_EQUALS;\r\n }\r\n return Token.CARET;\r\n }\r\n case CharCode.OPENBRACE: {\r\n ++this.pos;\r\n return Token.OPENBRACE;\r\n }\r\n case CharCode.BAR: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.BAR) {\r\n ++this.pos;\r\n return Token.BAR_BAR;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.BAR_EQUALS;\r\n }\r\n }\r\n return Token.BAR;\r\n }\r\n case CharCode.CLOSEBRACE: {\r\n ++this.pos;\r\n return Token.CLOSEBRACE;\r\n }\r\n case CharCode.TILDE: {\r\n ++this.pos;\r\n return Token.TILDE;\r\n }\r\n case CharCode.AT: {\r\n ++this.pos;\r\n return Token.AT;\r\n }\r\n default: {\r\n if (isIdentifierStart(c)) {\r\n if (isKeywordCharacter(c)) {\r\n let posBefore = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(c = text.charCodeAt(this.pos))\r\n ) {\r\n if (!isKeywordCharacter(c)) {\r\n this.pos = posBefore;\r\n return Token.IDENTIFIER;\r\n }\r\n }\r\n let keywordText = text.substring(posBefore, this.pos);\r\n let keywordToken = tokenFromKeyword(keywordText);\r\n if (\r\n keywordToken != Token.INVALID &&\r\n identifierHandling !== IdentifierHandling.ALWAYS &&\r\n !(\r\n identifierHandling === IdentifierHandling.PREFER &&\r\n tokenIsAlsoIdentifier(keywordToken)\r\n )\r\n ) {\r\n return keywordToken;\r\n }\r\n this.pos = posBefore;\r\n }\r\n return Token.IDENTIFIER; // expects a call to readIdentifier\r\n } else if (isWhiteSpace(c)) {\r\n ++this.pos;\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Invalid_character,\r\n this.range(this.pos, this.pos + 1)\r\n );\r\n ++this.pos;\r\n return Token.INVALID;\r\n }\r\n }\r\n }\r\n return Token.ENDOFFILE;\r\n }\r\n\r\n peek(\r\n checkOnNewLine: bool = false,\r\n identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT,\r\n maxCompoundLength: i32 = i32.MAX_VALUE\r\n ): Token {\r\n var text = this.source.text;\r\n if (this.nextToken < 0) {\r\n let posBefore = this.pos;\r\n let tokenBefore = this.token;\r\n let tokenPosBefore = this.tokenPos;\r\n this.nextToken = this.unsafeNext(identifierHandling, maxCompoundLength);\r\n this.nextTokenPos = this.tokenPos;\r\n if (checkOnNewLine) {\r\n this.nextTokenOnNewLine = false;\r\n for (let pos = posBefore, end = this.nextTokenPos; pos < end; ++pos) {\r\n if (isLineBreak(text.charCodeAt(pos))) {\r\n this.nextTokenOnNewLine = true;\r\n break;\r\n }\r\n }\r\n }\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n }\r\n return this.nextToken;\r\n }\r\n\r\n skipIdentifier(identifierHandling: IdentifierHandling = IdentifierHandling.PREFER): bool {\r\n return this.skip(Token.IDENTIFIER, identifierHandling);\r\n }\r\n\r\n skip(token: Token, identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT): bool {\r\n var posBefore = this.pos;\r\n var tokenBefore = this.token;\r\n var tokenPosBefore = this.tokenPos;\r\n var maxCompoundLength = i32.MAX_VALUE;\r\n switch (token) {\r\n case Token.GREATERTHAN: { // where parsing type arguments\r\n maxCompoundLength = 1;\r\n break;\r\n }\r\n }\r\n this.token = this.unsafeNext(identifierHandling, maxCompoundLength);\r\n if (this.token == token) {\r\n this.nextToken = -1;\r\n return true;\r\n } else {\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n return false;\r\n }\r\n }\r\n\r\n mark(): State {\r\n var state: State;\r\n if (reusableState) {\r\n state = reusableState;\r\n reusableState = null;\r\n } else {\r\n state = new State();\r\n }\r\n state.pos = this.pos;\r\n state.token = this.token;\r\n state.tokenPos = this.tokenPos;\r\n return state;\r\n }\r\n\r\n discard(state: State): void {\r\n reusableState = state;\r\n }\r\n\r\n reset(state: State): void {\r\n this.pos = state.pos;\r\n this.token = state.token;\r\n this.tokenPos = state.tokenPos;\r\n this.nextToken = -1;\r\n }\r\n\r\n range(start: i32 = -1, end: i32 = -1): Range {\r\n if (start < 0) {\r\n start = this.tokenPos;\r\n end = this.pos;\r\n } else if (end < 0) {\r\n end = start;\r\n }\r\n return new Range(this.source, start, end);\r\n }\r\n\r\n readIdentifier(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(text.charCodeAt(this.pos))\r\n );\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readString(): string {\r\n var text = this.source.text;\r\n var quote = text.charCodeAt(this.pos++);\r\n var start = this.pos;\r\n var result = \"\";\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.end)\r\n );\r\n break;\r\n }\r\n let c = text.charCodeAt(this.pos);\r\n if (c == quote) {\r\n result += text.substring(start, this.pos++);\r\n break;\r\n }\r\n if (c == CharCode.BACKSLASH) {\r\n result += text.substring(start, this.pos);\r\n result += this.readEscapeSequence();\r\n start = this.pos;\r\n continue;\r\n }\r\n if (isLineBreak(c)) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n return result;\r\n }\r\n\r\n readEscapeSequence(): string {\r\n if (++this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.end)\r\n );\r\n return \"\";\r\n }\r\n\r\n var text = this.source.text;\r\n var c = text.charCodeAt(this.pos++);\r\n switch (c) {\r\n case CharCode._0: return \"\\0\";\r\n case CharCode.b: return \"\\b\";\r\n case CharCode.t: return \"\\t\";\r\n case CharCode.n: return \"\\n\";\r\n case CharCode.v: return \"\\v\";\r\n case CharCode.f: return \"\\f\";\r\n case CharCode.r: return \"\\r\";\r\n case CharCode.SINGLEQUOTE: return \"'\";\r\n case CharCode.DOUBLEQUOTE: return \"\\\"\";\r\n case CharCode.u: {\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.OPENBRACE\r\n ) {\r\n ++this.pos;\r\n return this.readExtendedUnicodeEscape(); // \\u{DDDDDDDD}\r\n }\r\n return this.readUnicodeEscape(); // \\uDDDD\r\n }\r\n case CharCode.CARRIAGERETURN: {\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n // fall through\r\n }\r\n case CharCode.LINEFEED:\r\n case CharCode.LINESEPARATOR:\r\n case CharCode.PARAGRAPHSEPARATOR: return \"\";\r\n default: return String.fromCharCode(c);\r\n }\r\n }\r\n\r\n readRegexpPattern(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var escaped = false;\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.end)\r\n );\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.BACKSLASH) {\r\n ++this.pos;\r\n escaped = true;\r\n continue;\r\n }\r\n let c = text.charCodeAt(this.pos);\r\n if (c == CharCode.SLASH && !escaped) break;\r\n if (isLineBreak(c)) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n escaped = false;\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readRegexpFlags(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var flags = 0;\r\n while (this.pos < this.end) {\r\n let c: i32 = text.charCodeAt(this.pos);\r\n if (!isIdentifierPart(c)) break;\r\n ++this.pos;\r\n\r\n // make sure each supported flag is unique\r\n switch (c) {\r\n case CharCode.g: {\r\n flags |= flags & 1 ? -1 : 1;\r\n break;\r\n }\r\n case CharCode.i: {\r\n flags |= flags & 2 ? -1 : 2;\r\n break;\r\n }\r\n case CharCode.m: {\r\n flags |= flags & 4 ? -1 : 4;\r\n break;\r\n }\r\n default: {\r\n flags = -1;\r\n break;\r\n }\r\n }\r\n }\r\n if (flags == -1) {\r\n this.error(\r\n DiagnosticCode.Invalid_regular_expression_flags,\r\n this.range(start, this.pos)\r\n );\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n testInteger(): bool {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 1 < this.end) {\r\n switch (text.charCodeAt(this.pos + 2)) {\r\n case CharCode.X:\r\n case CharCode.x:\r\n case CharCode.B:\r\n case CharCode.b:\r\n case CharCode.O:\r\n case CharCode.o: return true;\r\n }\r\n }\r\n var pos = this.pos;\r\n while (pos < this.end) {\r\n let c = text.charCodeAt(pos);\r\n if (c == CharCode.DOT || c == CharCode.E || c == CharCode.e) {\r\n return false;\r\n }\r\n if ((c < CharCode._0 || c > CharCode._9) && c != CharCode._) break;\r\n // does not validate separator placement (this is done in readXYInteger)\r\n pos++;\r\n }\r\n return true;\r\n }\r\n\r\n readInteger(): I64 {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 2 < this.end) {\r\n switch (text.charCodeAt(this.pos + 1)) {\r\n case CharCode.X:\r\n case CharCode.x: {\r\n this.pos += 2;\r\n return this.readHexInteger();\r\n }\r\n case CharCode.B:\r\n case CharCode.b: {\r\n this.pos += 2;\r\n return this.readBinaryInteger();\r\n }\r\n case CharCode.O:\r\n case CharCode.o: {\r\n this.pos += 2;\r\n return this.readOctalInteger();\r\n }\r\n }\r\n if (isOctalDigit(text.charCodeAt(this.pos + 1))) {\r\n let start = this.pos;\r\n ++this.pos;\r\n let value = this.readOctalInteger();\r\n this.error(\r\n DiagnosticCode.Octal_literals_are_not_allowed_in_strict_mode,\r\n this.range(start, this.pos)\r\n );\r\n return value;\r\n }\r\n }\r\n return this.readDecimalInteger();\r\n }\r\n\r\n readHexInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_16 = i64_new(16, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 16 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n // value = value * 16 + 10 + c - CharCode.A;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.A, 0)\r\n );\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n // value = value * 16 + 10 + c - CharCode.a;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.a, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readDecimalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_10 = i64_new(10, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 10 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_10),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readOctalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_8 = i64_new(8, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._7) {\r\n // value = value * 8 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_8),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Octal_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readBinaryInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_2 = i64_new(2, 0);\r\n var i64_1 = i64_new(1, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c == CharCode._0) {\r\n // value = value * 2;\r\n value = i64_mul(\r\n value,\r\n i64_2\r\n );\r\n } else if (c == CharCode._1) {\r\n // value = value * 2 + 1;\r\n value = i64_add(\r\n i64_mul(value, i64_2),\r\n i64_1\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Binary_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readFloat(): f64 {\r\n // var text = this.source.text;\r\n // if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 2 < this.end) {\r\n // switch (text.charCodeAt(this.pos + 1)) {\r\n // case CharCode.X:\r\n // case CharCode.x: {\r\n // this.pos += 2;\r\n // return this.readHexFloat();\r\n // }\r\n // }\r\n // }\r\n return this.readDecimalFloat();\r\n }\r\n\r\n readDecimalFloat(): f64 {\r\n // TODO: numeric separators (parseFloat can't handle these)\r\n var start = this.pos;\r\n var text = this.source.text;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n if (this.pos < this.end && text.charCodeAt(this.pos) == CharCode.DOT) {\r\n ++this.pos;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n if (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos);\r\n if (c == CharCode.E || c == CharCode.e) {\r\n if (\r\n ++this.pos < this.end && (\r\n text.charCodeAt(this.pos) == CharCode.MINUS ||\r\n text.charCodeAt(this.pos) == CharCode.PLUS\r\n ) &&\r\n isDecimalDigit(text.charCodeAt(this.pos + 1))\r\n ) {\r\n ++this.pos;\r\n }\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n }\r\n return parseFloat(text.substring(start, this.pos));\r\n }\r\n\r\n readHexFloat(): f64 {\r\n throw new Error(\"not implemented\"); // TBD\r\n }\r\n\r\n readUnicodeEscape(): string {\r\n var remain = 4;\r\n var value = 0;\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos++);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n value = value * 16 + c - CharCode._0;\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n value = value * 16 + 10 + c - CharCode.A;\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n value = value * 16 + 10 + c - CharCode.a;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(this.pos - 1, this.pos)\r\n );\r\n return \"\";\r\n }\r\n if (--remain == 0) break;\r\n }\r\n if (remain) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.pos)\r\n );\r\n return \"\";\r\n }\r\n return String.fromCharCode(value);\r\n }\r\n\r\n private readExtendedUnicodeEscape(): string {\r\n var start = this.pos;\r\n var value = this.readHexInteger();\r\n var value32 = i64_low(value);\r\n var invalid = false;\r\n\r\n assert(!i64_high(value));\r\n if (value32 > 0x10FFFF) {\r\n this.error(\r\n DiagnosticCode.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n var text = this.source.text;\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(start, this.end)\r\n );\r\n invalid = true;\r\n } else if (text.charCodeAt(this.pos) == CharCode.CLOSEBRACE) {\r\n ++this.pos;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Unterminated_Unicode_escape_sequence,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n if (invalid) return \"\";\r\n return value32 < 65536\r\n ? String.fromCharCode(value32)\r\n : String.fromCharCode(\r\n (((value32 - 65536) / 1024 | 0) + 0xD800) as i32,\r\n ( (value32 - 65536) % 1024 + 0xDC00) as i32\r\n );\r\n }\r\n\r\n finish(): void {\r\n }\r\n}\r\n\r\n/** Tokenizer state as returned by {@link Tokenizer#mark} and consumed by {@link Tokenizer#reset}. */\r\nexport class State {\r\n /** Current position. */\r\n pos: i32;\r\n /** Current token. */\r\n token: Token;\r\n /** Current token's position. */\r\n tokenPos: i32;\r\n}\r\n\r\n// Reusable state object to reduce allocations\r\nvar reusableState: State | null = null;\r\n","/**\r\n * The AssemblyScript compiler.\r\n * @module compiler\r\n *//***/\r\n\r\nimport {\r\n compileCall as compileBuiltinCall,\r\n compileAllocate,\r\n compileAbort,\r\n compileIterateRoots,\r\n ensureGCHook\r\n} from \"./builtins\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Module,\r\n MemorySegment,\r\n ExpressionRef,\r\n UnaryOp,\r\n BinaryOp,\r\n NativeType,\r\n FunctionRef,\r\n ExpressionId,\r\n FunctionTypeRef,\r\n GlobalRef,\r\n getExpressionId,\r\n getExpressionType,\r\n getConstValueI32,\r\n getConstValueI64Low,\r\n getConstValueI64High,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getGetLocalIndex,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getBlockName,\r\n needsExplicitUnreachable\r\n} from \"./module\";\r\n\r\nimport {\r\n CommonFlags,\r\n PATH_DELIMITER,\r\n INNER_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n STATIC_DELIMITER,\r\n GETTER_PREFIX,\r\n SETTER_PREFIX\r\n} from \"./common\";\r\n\r\nimport {\r\n Program,\r\n ClassPrototype,\r\n Class,\r\n Element,\r\n ElementKind,\r\n Enum,\r\n Field,\r\n FunctionPrototype,\r\n Function,\r\n FunctionTarget,\r\n Global,\r\n Local,\r\n Namespace,\r\n EnumValue,\r\n Property,\r\n VariableLikeElement,\r\n FlowFlags,\r\n ConstantValueKind,\r\n Flow,\r\n OperatorKind,\r\n DecoratorFlags\r\n} from \"./program\";\r\n\r\nimport {\r\n Resolver, ReportMode\r\n} from \"./resolver\";\r\n\r\nimport {\r\n Token,\r\n operatorTokenToString\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n TypeNode,\r\n Source,\r\n Range,\r\n DecoratorKind,\r\n\r\n Statement,\r\n BlockStatement,\r\n BreakStatement,\r\n ClassDeclaration,\r\n ContinueStatement,\r\n DeclarationStatement,\r\n DoStatement,\r\n EmptyStatement,\r\n EnumDeclaration,\r\n ExportStatement,\r\n ExpressionStatement,\r\n FunctionDeclaration,\r\n ForStatement,\r\n IfStatement,\r\n ImportStatement,\r\n InstanceOfExpression,\r\n InterfaceDeclaration,\r\n NamespaceDeclaration,\r\n ReturnStatement,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n VariableDeclaration,\r\n VariableStatement,\r\n VoidStatement,\r\n WhileStatement,\r\n\r\n Expression,\r\n AssertionExpression,\r\n BinaryExpression,\r\n CallExpression,\r\n CommaExpression,\r\n ElementAccessExpression,\r\n FloatLiteralExpression,\r\n FunctionExpression,\r\n IdentifierExpression,\r\n IntegerLiteralExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n NewExpression,\r\n ObjectLiteralExpression,\r\n ParenthesizedExpression,\r\n PropertyAccessExpression,\r\n TernaryExpression,\r\n ArrayLiteralExpression,\r\n StringLiteralExpression,\r\n UnaryPostfixExpression,\r\n UnaryPrefixExpression,\r\n FieldDeclaration,\r\n\r\n nodeIsConstantValue,\r\n isLastStatement,\r\n findDecorator\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags,\r\n Signature,\r\n\r\n typesToNativeTypes\r\n} from \"./types\";\r\n\r\nimport {\r\n writeI8,\r\n writeI16,\r\n writeI32,\r\n writeI64,\r\n writeF32,\r\n writeF64\r\n} from \"./util\";\r\n\r\n/** Compilation target. */\r\nexport enum Target {\r\n /** WebAssembly with 32-bit pointers. */\r\n WASM32,\r\n /** WebAssembly with 64-bit pointers. Experimental and not supported by any runtime yet. */\r\n WASM64\r\n}\r\n\r\n/** Compiler options. */\r\nexport class Options {\r\n\r\n /** WebAssembly target. Defaults to {@link Target.WASM32}. */\r\n target: Target = Target.WASM32;\r\n /** If true, compiles everything instead of just reachable code. */\r\n noTreeShaking: bool = false;\r\n /** If true, replaces assertions with nops. */\r\n noAssert: bool = false;\r\n /** If true, imports the memory provided by the embedder. */\r\n importMemory: bool = false;\r\n /** If true, imports the function table provided by the embedder. */\r\n importTable: bool = false;\r\n /** If true, generates information necessary for source maps. */\r\n sourceMap: bool = false;\r\n /** Static memory start offset. */\r\n memoryBase: i32 = 0;\r\n /** Global aliases. */\r\n globalAliases: Map | null = null;\r\n /** Additional features to activate. */\r\n features: Feature = Feature.NONE;\r\n\r\n /** Hinted optimize level. Not applied by the compiler itself. */\r\n optimizeLevelHint: i32 = 0;\r\n /** Hinted shrink level. Not applied by the compiler itself. */\r\n shrinkLevelHint: i32 = 0;\r\n\r\n /** Tests if the target is WASM64 or, otherwise, WASM32. */\r\n get isWasm64(): bool {\r\n return this.target == Target.WASM64;\r\n }\r\n\r\n /** Gets the unsigned size type matching the target. */\r\n get usizeType(): Type {\r\n return this.target == Target.WASM64 ? Type.usize64 : Type.usize32;\r\n }\r\n\r\n /** Gets the signed size type matching the target. */\r\n get isizeType(): Type {\r\n return this.target == Target.WASM64 ? Type.isize64 : Type.isize32;\r\n }\r\n\r\n /** Gets the native size type matching the target. */\r\n get nativeSizeType(): NativeType {\r\n return this.target == Target.WASM64 ? NativeType.I64 : NativeType.I32;\r\n }\r\n\r\n /** Tests if a specific feature is activated. */\r\n hasFeature(feature: Feature): bool {\r\n return (this.features & feature) != 0;\r\n }\r\n}\r\n\r\n/** Indicates specific features to activate. */\r\nexport const enum Feature {\r\n /** No additional features. */\r\n NONE = 0,\r\n /** Sign extension operations. */\r\n SIGN_EXTENSION = 1 << 0, // see: https://github.com/WebAssembly/sign-extension-ops\r\n /** Mutable global imports and exports. */\r\n MUTABLE_GLOBAL = 1 << 1 // see: https://github.com/WebAssembly/mutable-global\r\n}\r\n\r\n/** Indicates the desired kind of a conversion. */\r\nexport const enum ConversionKind {\r\n /** No conversion. */\r\n NONE,\r\n /** Implicit conversion. */\r\n IMPLICIT,\r\n /** Explicit conversion. */\r\n EXPLICIT\r\n}\r\n\r\n/** Indicates the desired wrap mode of a conversion. */\r\nexport const enum WrapMode {\r\n /** No wrapping. */\r\n NONE,\r\n /** Wrap small integer values. */\r\n WRAP\r\n}\r\n\r\n/** Compiler interface. */\r\nexport class Compiler extends DiagnosticEmitter {\r\n\r\n /** Program reference. */\r\n program: Program;\r\n /** Resolver reference. */\r\n resolver: Resolver;\r\n /** Provided options. */\r\n options: Options;\r\n /** Module instance being compiled. */\r\n module: Module;\r\n /** Current function in compilation. */\r\n currentFunction: Function;\r\n /** Current outer function in compilation, if compiling a function expression. */\r\n currentOuterFunction: Function | null = null;\r\n /** Current inline functions stack. */\r\n currentInlineFunctions: Function[] = [];\r\n /** Current enum in compilation. */\r\n currentEnum: Enum | null = null;\r\n /** Current type in compilation. */\r\n currentType: Type = Type.void;\r\n /** Start function being compiled. */\r\n startFunctionInstance: Function;\r\n /** Start function statements. */\r\n startFunctionBody: ExpressionRef[];\r\n /** Counting memory offset. */\r\n memoryOffset: I64;\r\n /** Memory segments being compiled. */\r\n memorySegments: MemorySegment[] = [];\r\n /** Map of already compiled static string segments. */\r\n stringSegments: Map = new Map();\r\n /** Function table being compiled. */\r\n functionTable: string[] = [ \"null\" ];\r\n /** Argument count helper global. */\r\n argcVar: GlobalRef = 0;\r\n /** Argument count helper setter. */\r\n argcSet: FunctionRef = 0;\r\n /** Indicates whether the iterateRoots function must be generated. */\r\n needsIterateRoots: bool = false;\r\n\r\n /** Compiles a {@link Program} to a {@link Module} using the specified options. */\r\n static compile(program: Program, options: Options | null = null): Module {\r\n return new Compiler(program, options).compile();\r\n }\r\n\r\n /** Constructs a new compiler for a {@link Program} using the specified options. */\r\n constructor(program: Program, options: Options | null = null) {\r\n super(program.diagnostics);\r\n this.program = program;\r\n this.resolver = program.resolver;\r\n if (!options) options = new Options();\r\n this.options = options;\r\n this.memoryOffset = i64_new(\r\n // leave space for `null`. also functions as a sentinel for erroneous stores at offset 0.\r\n // note that Binaryen's asm.js output utilizes the first 8 bytes for reinterpretations (#1547)\r\n max(options.memoryBase, 8)\r\n );\r\n this.module = Module.create();\r\n }\r\n\r\n /** Performs compilation of the underlying {@link Program} to a {@link Module}. */\r\n compile(): Module {\r\n var options = this.options;\r\n var module = this.module;\r\n var program = this.program;\r\n\r\n // initialize lookup maps, built-ins, imports, exports, etc.\r\n program.initialize(options);\r\n\r\n // set up the start function\r\n var startFunctionInstance = new Function(program.startFunction, \"start\", new Signature([], Type.void));\r\n this.startFunctionInstance = startFunctionInstance;\r\n var startFunctionBody = new Array();\r\n this.startFunctionBody = startFunctionBody;\r\n this.currentFunction = startFunctionInstance;\r\n\r\n // add a mutable heap base dummy\r\n if (options.isWasm64) {\r\n module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I64,\r\n true,\r\n module.createI64(0, 0)\r\n );\r\n } else {\r\n module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I32,\r\n false,\r\n module.createI32(0)\r\n );\r\n }\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 // update 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 module.removeGlobal(\"HEAP_BASE\");\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 Module.UNLIMITED_MEMORY,\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 module.setFunctionTable(functionTable.length, 0xffffffff, functionTable);\r\n module.addTableExport(\"0\", \"table\");\r\n module.addFunction(\"null\", this.ensureFunctionType(null, Type.void), null, module.createBlock(null, []));\r\n\r\n // import table if requested (default table is named '0' by Binaryen)\r\n if (options.importTable) module.addTableImport(\"0\", \"env\", \"table\");\r\n\r\n // set up module exports\r\n for (let [name, moduleExport] of program.moduleLevelExports) {\r\n this.makeModuleExport(name, moduleExport.element);\r\n }\r\n\r\n // set up gc\r\n if (this.needsIterateRoots) compileIterateRoots(this);\r\n\r\n return module;\r\n }\r\n\r\n /** Applies the respective module export(s) for the specified element. */\r\n private makeModuleExport(name: string, element: Element, prefix: string = \"\"): void {\r\n\r\n // traverse members\r\n var members = element.members;\r\n if (members) {\r\n let subPrefix = prefix + name + (element.kind == ElementKind.CLASS\r\n ? INSTANCE_DELIMITER\r\n : STATIC_DELIMITER\r\n );\r\n if (element.kind == ElementKind.NAMESPACE) {\r\n for (let member of members.values()) {\r\n if (!member.is(CommonFlags.EXPORT)) continue;\r\n this.makeModuleExport(member.simpleName, member, subPrefix);\r\n }\r\n } else {\r\n for (let member of members.values()) {\r\n if (member.is(CommonFlags.PRIVATE)) continue;\r\n this.makeModuleExport(member.simpleName, member, subPrefix);\r\n }\r\n }\r\n }\r\n\r\n switch (element.kind) {\r\n\r\n // export global\r\n case ElementKind.GLOBAL: {\r\n let isConst = element.is(CommonFlags.CONST) || element.is(CommonFlags.STATIC | CommonFlags.READONLY);\r\n if (!isConst && !this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n let declaration = (element).declaration;\r\n if (declaration) {\r\n this.error(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n this.module.addGlobalExport(element.internalName, prefix + name);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUMVALUE: {\r\n if (!assert(element.parent).is(CommonFlags.CONST) && !this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n let declaration = (element).declaration;\r\n if (declaration) {\r\n this.error(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n this.module.addGlobalExport(element.internalName, prefix + name);\r\n }\r\n break;\r\n }\r\n\r\n // export function\r\n case ElementKind.FUNCTION: {\r\n let instance = element;\r\n let signature = instance.signature;\r\n if (signature.requiredParameters < signature.parameterTypes.length) {\r\n // utilize trampoline to fill in omitted arguments\r\n instance = this.ensureTrampoline(instance);\r\n this.ensureArgcSet();\r\n }\r\n if (instance.is(CommonFlags.COMPILED)) this.module.addFunctionExport(instance.internalName, prefix + name);\r\n break;\r\n }\r\n\r\n // export getter and setter\r\n case ElementKind.PROPERTY: {\r\n let getter = assert((element).getterPrototype);\r\n this.makeModuleExport(GETTER_PREFIX + name, getter, prefix);\r\n let setter = (element).setterPrototype;\r\n if (setter) this.makeModuleExport(SETTER_PREFIX + name, setter, prefix);\r\n break;\r\n }\r\n\r\n // export a getter and a setter\r\n case ElementKind.FIELD: {\r\n let module = this.module;\r\n let type = (element).type;\r\n let nativeType = type.toNativeType();\r\n let offset = (element).memoryOffset;\r\n let usizeType = this.options.usizeType;\r\n let nativeSizeType = this.options.nativeSizeType;\r\n\r\n // make a getter\r\n let getterName = prefix + GETTER_PREFIX + name;\r\n module.addFunction(\r\n getterName,\r\n this.ensureFunctionType(null, type, usizeType),\r\n null,\r\n module.createLoad(\r\n type.byteSize,\r\n type.is(TypeFlags.SIGNED),\r\n module.createGetLocal(0, nativeSizeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(getterName, getterName);\r\n\r\n // make a setter\r\n if (!element.is(CommonFlags.READONLY)) {\r\n let setterName = prefix + SETTER_PREFIX + name;\r\n module.addFunction(\r\n setterName,\r\n this.ensureFunctionType([ type ], Type.void, usizeType),\r\n null,\r\n module.createStore(\r\n type.byteSize,\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createGetLocal(1, nativeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(setterName, setterName);\r\n }\r\n break;\r\n }\r\n\r\n // skip prototype and export instances\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n for (let instance of (element).instances.values()) {\r\n let instanceName = name;\r\n if (instance.is(CommonFlags.GENERIC)) {\r\n let fullName = instance.internalName;\r\n instanceName += fullName.substring(fullName.lastIndexOf(\"<\"));\r\n }\r\n this.makeModuleExport(instanceName, instance, prefix);\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n for (let instance of (element).instances.values()) {\r\n let instanceName = name;\r\n if (instance.is(CommonFlags.GENERIC)) {\r\n let fullName = instance.internalName;\r\n instanceName += fullName.substring(fullName.lastIndexOf(\"<\"));\r\n }\r\n let ctor = instance.constructorInstance;\r\n if (ctor) this.makeModuleExport(instanceName + INSTANCE_DELIMITER + ctor.simpleName, ctor, prefix);\r\n this.makeModuleExport(instanceName, instance, prefix);\r\n }\r\n break;\r\n }\r\n\r\n // all possible members already handled above\r\n case ElementKind.ENUM:\r\n case ElementKind.CLASS:\r\n case ElementKind.NAMESPACE: break;\r\n\r\n default: assert(false);\r\n }\r\n }\r\n\r\n // sources\r\n\r\n /** Compiles a source by looking it up by path first. */\r\n compileSourceByPath(normalizedPathWithoutExtension: string, reportNode: Node): void {\r\n var source = this.program.lookupSourceByPath(normalizedPathWithoutExtension);\r\n if (source) this.compileSource(source);\r\n else {\r\n this.error(\r\n DiagnosticCode.File_0_not_found,\r\n reportNode.range, normalizedPathWithoutExtension\r\n );\r\n }\r\n }\r\n\r\n /** Compiles a source. */\r\n compileSource(source: Source): void {\r\n if (source.is(CommonFlags.COMPILED)) return;\r\n source.set(CommonFlags.COMPILED);\r\n\r\n // compile top-level statements\r\n var noTreeShaking = this.options.noTreeShaking;\r\n var isEntry = source.isEntry;\r\n var startFunctionInstance = this.startFunctionInstance;\r\n var startFunctionBody = this.startFunctionBody;\r\n var statements = source.statements;\r\n for (let i = 0, k = statements.length; i < k; ++i) {\r\n let statement = statements[i];\r\n switch (statement.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) &&\r\n !(statement).isGeneric\r\n ) {\r\n this.compileClassDeclaration(statement, [], null);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: break;\r\n case NodeKind.ENUMDECLARATION: {\r\n if (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) {\r\n this.compileEnumDeclaration(statement);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n if (\r\n (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) &&\r\n !(statement).isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(statement, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.IMPORT: {\r\n this.compileSourceByPath(\r\n (statement).normalizedPath,\r\n (statement).path\r\n );\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n if (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) {\r\n this.compileNamespaceDeclaration(statement);\r\n }\r\n break;\r\n }\r\n case NodeKind.VARIABLE: { // global, always compiled as initializers might have side effects\r\n let variableInit = this.compileVariableStatement(statement);\r\n if (variableInit) startFunctionBody.push(variableInit);\r\n break;\r\n }\r\n case NodeKind.EXPORT: {\r\n if ((statement).normalizedPath != null) {\r\n this.compileSourceByPath(\r\n (statement).normalizedPath,\r\n (statement).path\r\n );\r\n }\r\n if (noTreeShaking || isEntry) {\r\n this.compileExportStatement(statement);\r\n }\r\n break;\r\n }\r\n default: { // otherwise a top-level statement that is part of the start function's body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = startFunctionInstance;\r\n startFunctionBody.push(this.compileStatement(statement));\r\n this.currentFunction = previousFunction;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // globals\r\n\r\n compileGlobalDeclaration(declaration: VariableDeclaration): Global | null {\r\n // look up the initialized program element\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.GLOBAL);\r\n if (!this.compileGlobal(element)) return null; // reports\r\n return element;\r\n }\r\n\r\n compileGlobal(global: Global): bool {\r\n if (global.is(CommonFlags.COMPILED)) return true;\r\n global.set(CommonFlags.COMPILED);\r\n\r\n var module = this.module;\r\n var declaration = global.declaration;\r\n var initExpr: ExpressionRef = 0;\r\n\r\n if (global.type == Type.void) { // type is void if not yet resolved or not annotated\r\n if (declaration) {\r\n\r\n // resolve now if annotated\r\n if (declaration.type) {\r\n let resolvedType = this.resolver.resolveType(declaration.type); // reports\r\n if (!resolvedType) return false;\r\n if (resolvedType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.type.range\r\n );\r\n return false;\r\n }\r\n global.type = resolvedType;\r\n\r\n // infer from initializer if not annotated\r\n } else if (declaration.initializer) { // infer type using void/NONE for literal inference\r\n initExpr = this.compileExpressionRetainType( // reports\r\n declaration.initializer,\r\n Type.void,\r\n WrapMode.WRAP\r\n );\r\n if (this.currentType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.initializer.range, this.currentType.toString(), \"\"\r\n );\r\n return false;\r\n }\r\n global.type = this.currentType;\r\n\r\n // must either be annotated or have an initializer\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.name.range.atEnd\r\n );\r\n return false;\r\n }\r\n } else {\r\n assert(false); // must have a declaration if 'void' (and thus resolved later on)\r\n }\r\n }\r\n\r\n // ambient builtins like 'HEAP_BASE' need to be resolved but are added explicitly\r\n if (global.is(CommonFlags.AMBIENT) && global.hasDecorator(DecoratorFlags.BUILTIN)) return true;\r\n\r\n var nativeType = global.type.toNativeType();\r\n var isDeclaredConstant = global.is(CommonFlags.CONST) || global.is(CommonFlags.STATIC | CommonFlags.READONLY);\r\n\r\n // handle imports\r\n if (global.is(CommonFlags.AMBIENT)) {\r\n\r\n // constant global\r\n if (isDeclaredConstant || this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n global.set(CommonFlags.MODULE_IMPORT);\r\n if (declaration) {\r\n mangleImportName(global, declaration);\r\n } else {\r\n mangleImportName_moduleName = \"env\";\r\n mangleImportName_elementName = global.simpleName;\r\n }\r\n module.addGlobalImport(\r\n global.internalName,\r\n mangleImportName_moduleName,\r\n mangleImportName_elementName,\r\n nativeType\r\n );\r\n global.set(CommonFlags.COMPILED);\r\n return true;\r\n\r\n // importing mutable globals is not supported in the MVP\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n assert(declaration).range\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n // the MVP does not yet support initializer expressions other than constant values (and constant\r\n // get_globals), hence such initializations must be performed in the start function for now.\r\n var initializeInStart = false;\r\n\r\n // evaluate initializer if present\r\n if (declaration !== null && declaration.initializer !== null) {\r\n if (!initExpr) {\r\n initExpr = this.compileExpression(\r\n declaration.initializer,\r\n global.type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n );\r\n }\r\n\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (isDeclaredConstant) {\r\n initExpr = module.precomputeExpression(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n declaration.range\r\n );\r\n initializeInStart = true;\r\n }\r\n } else {\r\n initializeInStart = true;\r\n }\r\n }\r\n\r\n // explicitly inline if annotated\r\n if (global.hasDecorator(DecoratorFlags.INLINE)) {\r\n if (!initializeInStart) { // reported above\r\n assert(getExpressionId(initExpr) == ExpressionId.Const);\r\n let exprType = getExpressionType(initExpr);\r\n switch (exprType) {\r\n case NativeType.I32: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(getConstValueI32(initExpr), 0);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(\r\n getConstValueI64Low(initExpr),\r\n getConstValueI64High(initExpr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF32(initExpr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF64(initExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return false;\r\n }\r\n }\r\n global.set(CommonFlags.INLINED); // inline the value from now on\r\n }\r\n }\r\n\r\n // initialize to zero if there's no initializer\r\n } else {\r\n initExpr = global.type.toNativeZero(module);\r\n }\r\n\r\n var internalName = global.internalName;\r\n\r\n if (initializeInStart) { // initialize to mutable zero and set the actual value in start\r\n module.addGlobal(internalName, nativeType, true, global.type.toNativeZero(module));\r\n this.startFunctionBody.push(module.createSetGlobal(internalName, initExpr));\r\n\r\n } else { // compile normally\r\n module.addGlobal(internalName, nativeType, !isDeclaredConstant, initExpr);\r\n }\r\n return true;\r\n }\r\n\r\n // enums\r\n\r\n compileEnumDeclaration(declaration: EnumDeclaration): Enum | null {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(element)) return null;\r\n return element;\r\n }\r\n\r\n compileEnum(element: Enum): bool {\r\n if (element.is(CommonFlags.COMPILED)) return true;\r\n element.set(CommonFlags.COMPILED);\r\n\r\n var module = this.module;\r\n this.currentEnum = element;\r\n var previousValue: EnumValue | null = null;\r\n var previousValueIsMut = false;\r\n\r\n if (element.members) {\r\n for (let member of element.members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) continue; // happens if an enum is also a namespace\r\n let initInStart = false;\r\n let val = member;\r\n let valueDeclaration = val.declaration;\r\n val.set(CommonFlags.COMPILED);\r\n let initExpr: ExpressionRef;\r\n if (valueDeclaration.value) {\r\n initExpr = this.compileExpression(\r\n valueDeclaration.value,\r\n Type.i32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (element.is(CommonFlags.CONST)) {\r\n initExpr = module.precomputeExpression(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n this.error(\r\n DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,\r\n valueDeclaration.value.range\r\n );\r\n initInStart = true;\r\n }\r\n } else {\r\n initInStart = true;\r\n }\r\n }\r\n } else if (previousValue == null) {\r\n initExpr = module.createI32(0);\r\n } else {\r\n if (previousValueIsMut) {\r\n this.error(\r\n DiagnosticCode.Enum_member_must_have_initializer,\r\n valueDeclaration.range\r\n );\r\n }\r\n initExpr = module.createBinary(BinaryOp.AddI32,\r\n module.createGetGlobal(previousValue.internalName, NativeType.I32),\r\n module.createI32(1)\r\n );\r\n initExpr = module.precomputeExpression(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (element.is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,\r\n valueDeclaration.range\r\n );\r\n }\r\n initInStart = true;\r\n }\r\n }\r\n if (initInStart) {\r\n module.addGlobal(val.internalName, NativeType.I32, true, module.createI32(0));\r\n this.startFunctionBody.push(module.createSetGlobal(val.internalName, initExpr));\r\n previousValueIsMut = true;\r\n } else {\r\n module.addGlobal(val.internalName, NativeType.I32, !element.is(CommonFlags.CONST), initExpr);\r\n previousValueIsMut = false;\r\n }\r\n previousValue = val;\r\n }\r\n }\r\n this.currentEnum = null;\r\n return true;\r\n }\r\n\r\n // functions\r\n\r\n /** Compiles a top-level function given its declaration. */\r\n compileFunctionDeclaration(\r\n declaration: FunctionDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null\r\n ): Function | null {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return this.compileFunctionUsingTypeArguments( // reports\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n null, // no outer scope (is top level)\r\n (element).declaration.name\r\n );\r\n }\r\n\r\n /** Resolves the specified type arguments prior to compiling the resulting function instance. */\r\n compileFunctionUsingTypeArguments(\r\n prototype: FunctionPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null,\r\n outerScope: Flow | null,\r\n reportNode: Node\r\n ): Function | null {\r\n var instance = this.resolver.resolveFunctionInclTypeArguments(\r\n prototype,\r\n typeArguments,\r\n contextualTypeArguments,\r\n reportNode\r\n );\r\n if (!instance) return null;\r\n instance.outerScope = outerScope;\r\n if (!this.compileFunction(instance)) return null; // reports\r\n return instance;\r\n }\r\n\r\n /** Either reuses or creates the function type matching the specified signature. */\r\n ensureFunctionType(\r\n parameterTypes: Type[] | null,\r\n returnType: Type,\r\n thisType: Type | null = null\r\n ): FunctionTypeRef {\r\n var numParameters = parameterTypes ? parameterTypes.length : 0;\r\n var paramTypes: NativeType[];\r\n var index = 0;\r\n if (thisType) {\r\n paramTypes = new Array(1 + numParameters);\r\n paramTypes[0] = thisType.toNativeType();\r\n index = 1;\r\n } else {\r\n paramTypes = new Array(numParameters);\r\n }\r\n if (parameterTypes) {\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n paramTypes[index] = parameterTypes[i].toNativeType();\r\n }\r\n }\r\n var resultType = returnType.toNativeType();\r\n var module = this.module;\r\n var typeRef = module.getFunctionTypeBySignature(resultType, paramTypes);\r\n if (!typeRef) {\r\n let name = Signature.makeSignatureString(parameterTypes, returnType, thisType);\r\n typeRef = module.addFunctionType(name, resultType, paramTypes);\r\n }\r\n return typeRef;\r\n }\r\n\r\n /** Compiles a readily resolved function instance. */\r\n compileFunction(instance: Function): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n assert(!(instance.is(CommonFlags.AMBIENT) && instance.hasDecorator(DecoratorFlags.BUILTIN)));\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n // check that modifiers are matching\r\n var declaration = instance.prototype.declaration;\r\n var body = declaration.body;\r\n if (body) {\r\n if (instance.is(CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n if (!instance.is(CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n declaration.name.range\r\n );\r\n }\r\n }\r\n\r\n var ref: FunctionRef;\r\n var signature = instance.signature;\r\n var typeRef = this.ensureFunctionType(signature.parameterTypes, signature.returnType, signature.thisType);\r\n var module = this.module;\r\n if (body) {\r\n let isConstructor = instance.is(CommonFlags.CONSTRUCTOR);\r\n let returnType = instance.signature.returnType;\r\n\r\n // compile body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = instance;\r\n let flow = instance.flow;\r\n let stmt: ExpressionRef;\r\n if (body.kind == NodeKind.EXPRESSION) { // () => expression\r\n assert(!instance.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.GET | CommonFlags.SET | CommonFlags.MAIN));\r\n assert(instance.is(CommonFlags.ARROW));\r\n stmt = this.compileExpression(\r\n (body).expression,\r\n returnType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n flow.set(FlowFlags.RETURNS);\r\n if (!flow.canOverflow(stmt, returnType)) flow.set(FlowFlags.RETURNS_WRAPPED);\r\n flow.finalize();\r\n } else {\r\n assert(body.kind == NodeKind.BLOCK);\r\n let stmts = this.compileStatements((body).statements);\r\n if (instance.is(CommonFlags.MAIN)) {\r\n module.addGlobal(\"~started\", NativeType.I32, true, module.createI32(0));\r\n stmts.unshift(\r\n module.createIf(\r\n module.createUnary(\r\n UnaryOp.EqzI32,\r\n module.createGetGlobal(\"~started\", NativeType.I32)\r\n ),\r\n module.createBlock(null, [\r\n module.createCall(\"start\", null, NativeType.None),\r\n module.createSetGlobal(\"~started\", module.createI32(1))\r\n ])\r\n )\r\n );\r\n }\r\n flow.finalize();\r\n if (isConstructor) {\r\n let nativeSizeType = this.options.nativeSizeType;\r\n assert(instance.is(CommonFlags.INSTANCE));\r\n\r\n // implicitly return `this` if the constructor doesn't always return on its own\r\n if (!flow.is(FlowFlags.RETURNS)) {\r\n\r\n // if all branches are guaranteed to allocate, skip the final conditional allocation\r\n if (flow.is(FlowFlags.ALLOCATES)) {\r\n stmts.push(module.createGetLocal(0, nativeSizeType));\r\n\r\n // if not all branches are guaranteed to allocate, also append a conditional allocation\r\n } else {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n stmts.push(module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, declaration.name)\r\n ));\r\n }\r\n }\r\n\r\n // make sure all branches return\r\n } else if (returnType != Type.void && !flow.is(FlowFlags.RETURNS)) {\r\n this.error(\r\n DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,\r\n declaration.signature.returnType.range\r\n );\r\n }\r\n stmt = !stmts.length\r\n ? module.createNop()\r\n : stmts.length == 1\r\n ? stmts[0]\r\n : module.createBlock(null, stmts, returnType.toNativeType());\r\n }\r\n this.currentFunction = previousFunction;\r\n\r\n // create the function\r\n ref = module.addFunction(\r\n instance.internalName,\r\n typeRef,\r\n typesToNativeTypes(instance.additionalLocals),\r\n stmt\r\n );\r\n\r\n // concrete functions cannot have an annotated external name\r\n if (instance.hasDecorator(DecoratorFlags.EXTERNAL)) {\r\n let decorator = assert(findDecorator(DecoratorKind.EXTERNAL, declaration.decorators));\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n decorator.range\r\n );\r\n }\r\n\r\n } else {\r\n instance.set(CommonFlags.MODULE_IMPORT);\r\n mangleImportName(instance, declaration); // TODO: check for duplicates\r\n\r\n // create the function import\r\n ref = module.addFunctionImport(\r\n instance.internalName,\r\n mangleImportName_moduleName,\r\n mangleImportName_elementName,\r\n typeRef\r\n );\r\n }\r\n\r\n instance.finalize(module, ref);\r\n return true;\r\n }\r\n\r\n // namespaces\r\n\r\n compileNamespaceDeclaration(declaration: NamespaceDeclaration): void {\r\n var members = declaration.members;\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n switch (member.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileClassDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileInterfaceDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileEnumDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileNamespaceDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n let variableInit = this.compileVariableStatement(member, true);\r\n if (variableInit) this.startFunctionBody.push(variableInit);\r\n }\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n }\r\n\r\n compileNamespace(ns: Namespace): void {\r\n if (!ns.members) return;\r\n\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let element of ns.members.values()) {\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking ||\r\n (element).is(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n this.compileEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking || (element).is(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n if (element.hasDecorator(DecoratorFlags.BUILTIN)) break;\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // exports\r\n\r\n compileExportStatement(statement: ExportStatement): void {\r\n var fileLevelExports = this.program.fileLevelExports;\r\n var members = statement.members;\r\n if (!members) return; // filespace\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n let element = fileLevelExports.get(\r\n statement.range.source.internalPath + PATH_DELIMITER + member.externalName.text\r\n );\r\n if (!element) continue; // reported in Program#initialize\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (!(element).is(CommonFlags.GENERIC)) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n this.compileEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC) &&\r\n statement.range.source.isEntry\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // classes\r\n\r\n compileClassDeclaration(\r\n declaration: ClassDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null\r\n ): void {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.compileClassUsingTypeArguments(\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n declaration\r\n );\r\n }\r\n\r\n compileClassUsingTypeArguments(\r\n prototype: ClassPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n var instance = this.resolver.resolveClassInclTypeArguments(\r\n prototype,\r\n typeArguments,\r\n contextualTypeArguments,\r\n alternativeReportNode || prototype.declaration\r\n );\r\n if (!instance) return;\r\n this.compileClass(instance);\r\n }\r\n\r\n compileClass(instance: Class): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n var staticMembers = instance.prototype.members;\r\n if (staticMembers) {\r\n for (let element of staticMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [], null, null,\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], null, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], null, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n var ctorInstance = instance.constructorInstance;\r\n if (ctorInstance) this.compileFunction(ctorInstance);\r\n var instanceMembers = instance.members;\r\n if (instanceMembers) {\r\n for (let element of instanceMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n instance.contextualTypeArguments,\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n element.set(CommonFlags.COMPILED);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], instance.contextualTypeArguments, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], instance.contextualTypeArguments, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n compileInterfaceDeclaration(\r\n declaration: InterfaceDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n // TODO\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n declaration.range\r\n );\r\n }\r\n\r\n // memory\r\n\r\n /** Adds a static memory segment with the specified data. */\r\n addMemorySegment(buffer: Uint8Array, alignment: i32 = 8): MemorySegment {\r\n var memoryOffset = i64_align(this.memoryOffset, alignment);\r\n var segment = MemorySegment.create(buffer, memoryOffset);\r\n this.memorySegments.push(segment);\r\n this.memoryOffset = i64_add(memoryOffset, i64_new(buffer.length, 0));\r\n return segment;\r\n }\r\n\r\n // function table\r\n\r\n /** Ensures that a table entry exists for the specified function and returns its index. */\r\n ensureFunctionTableEntry(func: Function): i32 {\r\n assert(func.is(CommonFlags.COMPILED));\r\n if (func.functionTableIndex >= 0) {\r\n return func.functionTableIndex;\r\n }\r\n var functionTable = this.functionTable;\r\n var index = functionTable.length;\r\n if (!func.is(CommonFlags.TRAMPOLINE) && func.signature.requiredParameters < func.signature.parameterTypes.length) {\r\n // insert the trampoline if the function has optional parameters\r\n func = this.ensureTrampoline(func);\r\n }\r\n functionTable.push(func.internalName);\r\n func.functionTableIndex = index;\r\n return index;\r\n }\r\n\r\n // statements\r\n\r\n compileStatement(statement: Statement): ExpressionRef {\r\n var module = this.module;\r\n var stmt: ExpressionRef;\r\n switch (statement.kind) {\r\n case NodeKind.BLOCK: {\r\n stmt = this.compileBlockStatement(statement);\r\n break;\r\n }\r\n case NodeKind.BREAK: {\r\n stmt = this.compileBreakStatement(statement);\r\n break;\r\n }\r\n case NodeKind.CONTINUE: {\r\n stmt = this.compileContinueStatement(statement);\r\n break;\r\n }\r\n case NodeKind.DO: {\r\n stmt = this.compileDoStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EMPTY: {\r\n stmt = this.compileEmptyStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EXPRESSION: {\r\n stmt = this.compileExpressionStatement(statement);\r\n break;\r\n }\r\n case NodeKind.FOR: {\r\n stmt = this.compileForStatement(statement);\r\n break;\r\n }\r\n case NodeKind.IF: {\r\n stmt = this.compileIfStatement(statement);\r\n break;\r\n }\r\n case NodeKind.RETURN: {\r\n stmt = this.compileReturnStatement(statement);\r\n break;\r\n }\r\n case NodeKind.SWITCH: {\r\n stmt = this.compileSwitchStatement(statement);\r\n break;\r\n }\r\n case NodeKind.THROW: {\r\n stmt = this.compileThrowStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TRY: {\r\n stmt = this.compileTryStatement(statement);\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n stmt = this.compileVariableStatement(statement);\r\n if (!stmt) stmt = module.createNop();\r\n break;\r\n }\r\n case NodeKind.VOID: {\r\n stmt = this.compileVoidStatement(statement);\r\n break;\r\n }\r\n case NodeKind.WHILE: {\r\n stmt = this.compileWhileStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n // type declarations must be top-level because function bodies are evaluated when\r\n // reachaable only.\r\n if (this.currentFunction == this.startFunctionInstance) {\r\n return module.createNop();\r\n }\r\n // otherwise fall-through\r\n }\r\n default: {\r\n assert(false);\r\n stmt = module.createUnreachable();\r\n }\r\n }\r\n if (this.options.sourceMap) this.addDebugLocation(stmt, statement.range);\r\n return stmt;\r\n }\r\n\r\n compileStatements(statements: Statement[]): ExpressionRef[] {\r\n var numStatements = statements.length;\r\n var stmts = new Array(numStatements);\r\n stmts.length = 0;\r\n var flow = this.currentFunction.flow;\r\n for (let i = 0; i < numStatements; ++i) {\r\n let stmt = this.compileStatement(statements[i]);\r\n switch (getExpressionId(stmt)) {\r\n case ExpressionId.Block: {\r\n if (!getBlockName(stmt)) {\r\n for (let j = 0, k = getBlockChildCount(stmt); j < k; ++j) stmts.push(getBlockChild(stmt, j));\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: stmts.push(stmt);\r\n case ExpressionId.Nop:\r\n }\r\n if (flow.isAny(FlowFlags.ANY_TERMINATING)) {\r\n if (needsExplicitUnreachable(stmt)) stmts.push(this.module.createUnreachable());\r\n break;\r\n }\r\n }\r\n return stmts;\r\n }\r\n\r\n compileBlockStatement(statement: BlockStatement): ExpressionRef {\r\n var statements = statement.statements;\r\n var parentFlow = this.currentFunction.flow;\r\n var flow = parentFlow.fork();\r\n this.currentFunction.flow = flow;\r\n\r\n var stmts = this.compileStatements(statements);\r\n var stmt = stmts.length == 0\r\n ? this.module.createNop()\r\n : stmts.length == 1\r\n ? stmts[0]\r\n : this.module.createBlock(null, stmts,getExpressionType(stmts[stmts.length - 1]));\r\n\r\n this.currentFunction.flow = flow.free();\r\n parentFlow.inherit(flow);\r\n return stmt;\r\n }\r\n\r\n compileBreakStatement(statement: BreakStatement): ExpressionRef {\r\n var module = this.module;\r\n if (statement.label) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.label.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n var flow = this.currentFunction.flow;\r\n var breakLabel = flow.breakLabel;\r\n if (breakLabel == null) {\r\n this.error(\r\n DiagnosticCode.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement,\r\n statement.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n flow.set(FlowFlags.BREAKS);\r\n return module.createBreak(breakLabel);\r\n }\r\n\r\n compileContinueStatement(statement: ContinueStatement): ExpressionRef {\r\n var module = this.module;\r\n var label = statement.label;\r\n if (label) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n label.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // Check if 'continue' is allowed here\r\n var flow = this.currentFunction.flow;\r\n var continueLabel = flow.continueLabel;\r\n if (continueLabel == null) {\r\n this.error(\r\n DiagnosticCode.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement,\r\n statement.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n flow.set(FlowFlags.CONTINUES);\r\n return module.createBreak(continueLabel);\r\n }\r\n\r\n compileDoStatement(statement: DoStatement): ExpressionRef {\r\n var currentFunction = this.currentFunction;\r\n var module = this.module;\r\n\r\n var label = currentFunction.enterBreakContext();\r\n var parentFlow = currentFunction.flow;\r\n var flow = parentFlow.fork();\r\n currentFunction.flow = flow;\r\n var breakLabel = \"break|\" + label;\r\n flow.breakLabel = breakLabel;\r\n var continueLabel = \"continue|\" + label;\r\n flow.continueLabel = continueLabel;\r\n\r\n var body = this.compileStatement(statement.statement);\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE, WrapMode.NONE),\r\n this.currentType\r\n );\r\n // TODO: check if condition is always false and if so, omit it (just a block)\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.free();\r\n currentFunction.leaveBreakContext();\r\n var terminated = flow.isAny(FlowFlags.ANY_TERMINATING);\r\n flow.unset(\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONDITIONALLY_BREAKS |\r\n FlowFlags.CONTINUES |\r\n FlowFlags.CONDITIONALLY_CONTINUES\r\n );\r\n parentFlow.inherit(flow);\r\n\r\n var block: ExpressionRef[] = [\r\n module.createLoop(continueLabel,\r\n terminated\r\n ? body // skip trailing continue if unnecessary\r\n : module.createBlock(null, [\r\n body,\r\n module.createBreak(continueLabel, condExpr)\r\n ], NativeType.None)\r\n )\r\n ];\r\n if (terminated) block.push(module.createUnreachable());\r\n return module.createBlock(breakLabel, block);\r\n }\r\n\r\n compileEmptyStatement(statement: EmptyStatement): ExpressionRef {\r\n return this.module.createNop();\r\n }\r\n\r\n compileExpressionStatement(statement: ExpressionStatement): ExpressionRef {\r\n var expr = this.compileExpression(statement.expression, Type.void, ConversionKind.NONE, WrapMode.NONE);\r\n if (this.currentType != Type.void) {\r\n expr = this.module.createDrop(expr);\r\n this.currentType = Type.void;\r\n }\r\n return expr;\r\n }\r\n\r\n compileForStatement(statement: ForStatement): ExpressionRef {\r\n // A for statement initiates a new branch with its own scoped variables\r\n // possibly declared in its initializer, and break context.\r\n var currentFunction = this.currentFunction;\r\n var label = currentFunction.enterBreakContext();\r\n var parentFlow = currentFunction.flow;\r\n var flow = parentFlow.fork();\r\n currentFunction.flow = flow;\r\n var breakLabel = flow.breakLabel = \"break|\" + label;\r\n flow.breakLabel = breakLabel;\r\n var continueLabel = \"continue|\" + label;\r\n flow.continueLabel = continueLabel;\r\n var repeatLabel = \"repeat|\" + label;\r\n\r\n // Compile in correct order\r\n var module = this.module;\r\n var initExpr = statement.initializer\r\n ? this.compileStatement(statement.initializer)\r\n : 0;\r\n var condExpr: ExpressionRef = 0;\r\n var alwaysTrue = false;\r\n if (statement.condition) {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n // check if the condition is always true\r\n let condPre = module.precomputeExpression(condExpr);\r\n if (getExpressionId(condPre) == ExpressionId.Const) {\r\n assert(getExpressionType(condPre) == NativeType.I32);\r\n if (getConstValueI32(condPre) != 0) alwaysTrue = true;\r\n // TODO: could skip compilation if the condition is always false here, but beware that the\r\n // initializer could still declare new 'var's that are used later on.\r\n }\r\n // recompile to original\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n } else {\r\n // omitted condition is always true\r\n condExpr = module.createI32(1);\r\n alwaysTrue = true;\r\n }\r\n var incrExpr = statement.incrementor\r\n ? this.compileExpression(statement.incrementor, Type.void, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : 0;\r\n var bodyStatement = statement.statement;\r\n var bodyExpr = bodyStatement.kind == NodeKind.BLOCK && (bodyStatement).statements.length == 1\r\n ? this.compileStatement((bodyStatement).statements[0])\r\n : this.compileStatement(bodyStatement);\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.free();\r\n currentFunction.leaveBreakContext();\r\n var usesContinue = flow.isAny(FlowFlags.CONTINUES | FlowFlags.CONDITIONALLY_CONTINUES);\r\n flow.unset(\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONDITIONALLY_BREAKS |\r\n FlowFlags.CONTINUES |\r\n FlowFlags.CONDITIONALLY_CONTINUES\r\n );\r\n if (alwaysTrue) parentFlow.inherit(flow);\r\n else parentFlow.inheritConditional(flow);\r\n\r\n var breakBlock = new Array(); // outer 'break' block\r\n if (initExpr) breakBlock.push(initExpr);\r\n\r\n var repeatBlock = new Array(); // block repeating the loop\r\n if (usesContinue) {\r\n repeatBlock.push(\r\n module.createBlock(continueLabel, [ // inner 'continue' block\r\n module.createBreak(breakLabel, module.createUnary(UnaryOp.EqzI32, condExpr)),\r\n bodyExpr\r\n ], NativeType.None)\r\n );\r\n } else { // can omit the 'continue' block\r\n repeatBlock.push(\r\n module.createBreak(breakLabel, module.createUnary(UnaryOp.EqzI32, condExpr))\r\n );\r\n repeatBlock.push(bodyExpr);\r\n }\r\n if (incrExpr) repeatBlock.push(incrExpr);\r\n repeatBlock.push(\r\n module.createBreak(repeatLabel)\r\n );\r\n\r\n breakBlock.push(\r\n module.createLoop(repeatLabel, module.createBlock(null, repeatBlock, NativeType.None))\r\n );\r\n\r\n return module.createBlock(breakLabel, breakBlock);\r\n }\r\n\r\n compileIfStatement(statement: IfStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var ifTrue = statement.ifTrue;\r\n var ifFalse = statement.ifFalse;\r\n\r\n // The condition doesn't initiate a branch yet\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n\r\n if (\r\n !this.options.noTreeShaking ||\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT)\r\n ) {\r\n // Try to eliminate unnecesssary branches if the condition is constant\r\n let condExprPrecomp = module.precomputeExpression(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n return getConstValueI32(condExprPrecomp)\r\n ? this.compileStatement(ifTrue)\r\n : ifFalse\r\n ? this.compileStatement(ifFalse)\r\n : module.createNop();\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n // Each arm initiates a branch\r\n var parentFlow = currentFunction.flow;\r\n var ifTrueFlow = parentFlow.fork();\r\n currentFunction.flow = ifTrueFlow;\r\n var ifTrueExpr = this.compileStatement(ifTrue);\r\n currentFunction.flow = ifTrueFlow.free();\r\n\r\n var ifFalseExpr: ExpressionRef = 0;\r\n if (ifFalse) {\r\n let ifFalseFlow = parentFlow.fork();\r\n currentFunction.flow = ifFalseFlow;\r\n ifFalseExpr = this.compileStatement(ifFalse);\r\n currentFunction.flow = ifFalseFlow.free();\r\n parentFlow.inheritMutual(ifTrueFlow, ifFalseFlow);\r\n } else {\r\n parentFlow.inheritConditional(ifTrueFlow);\r\n }\r\n return module.createIf(condExpr, ifTrueExpr, ifFalseExpr);\r\n }\r\n\r\n compileReturnStatement(statement: ReturnStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var expr: ExpressionRef = 0;\r\n var flow = currentFunction.flow;\r\n\r\n // Remember that this flow returns\r\n flow.set(FlowFlags.RETURNS);\r\n\r\n if (statement.value) {\r\n let returnType = flow.returnType;\r\n if (returnType == Type.void) {\r\n this.compileExpressionRetainType(statement.value, returnType, WrapMode.NONE);\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n statement.value.range, this.currentType.toString(), returnType.toString()\r\n );\r\n this.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n expr = this.compileExpression(\r\n statement.value,\r\n returnType,\r\n ConversionKind.IMPLICIT,\r\n currentFunction.is(CommonFlags.MODULE_EXPORT)\r\n ? WrapMode.WRAP\r\n : WrapMode.NONE\r\n );\r\n\r\n // Remember whether returning a properly wrapped value\r\n if (!flow.canOverflow(expr, returnType)) flow.set(FlowFlags.RETURNS_WRAPPED);\r\n }\r\n\r\n // If the last statement anyway, make it the block's return value\r\n if (isLastStatement(statement)) return expr ? expr : module.createNop();\r\n\r\n // When inlining, break to the end of the inlined function's block (no need to wrap)\r\n return flow.is(FlowFlags.INLINE_CONTEXT)\r\n ? module.createBreak(assert(flow.returnLabel), 0, expr)\r\n : module.createReturn(expr);\r\n }\r\n\r\n compileSwitchStatement(statement: SwitchStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n var cases = statement.cases;\r\n var numCases = cases.length;\r\n if (!numCases) {\r\n return this.compileExpression(statement.condition, Type.void, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n }\r\n\r\n // Everything within a switch uses the same break context\r\n var context = currentFunction.enterBreakContext();\r\n var parentFlow = currentFunction.flow;\r\n\r\n // introduce a local for evaluating the condition (exactly once)\r\n var tempLocal = currentFunction.getTempLocal(Type.u32, false);\r\n var tempLocalIndex = tempLocal.index;\r\n\r\n // Prepend initializer to inner block. Does not initiate a new branch, yet.\r\n var breaks = new Array(1 + numCases);\r\n breaks[0] = module.createSetLocal( // initializer\r\n tempLocalIndex,\r\n this.compileExpression(statement.condition, Type.u32, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n );\r\n\r\n // make one br_if per (possibly dynamic) labeled case (binaryen optimizes to br_table where possible)\r\n var breakIndex = 1;\r\n var defaultIndex = -1;\r\n for (let i = 0; i < numCases; ++i) {\r\n let case_ = cases[i];\r\n let label = case_.label;\r\n if (label) {\r\n breaks[breakIndex++] = module.createBreak(\"case\" + i.toString(10) + \"|\" + context,\r\n module.createBinary(BinaryOp.EqI32,\r\n module.createGetLocal(tempLocalIndex, NativeType.I32),\r\n this.compileExpression(label, Type.u32, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n )\r\n );\r\n } else {\r\n defaultIndex = i;\r\n }\r\n }\r\n\r\n currentFunction.freeTempLocal(tempLocal);\r\n\r\n // otherwise br to default respectively out of the switch if there is no default case\r\n breaks[breakIndex] = module.createBreak((defaultIndex >= 0\r\n ? \"case\" + defaultIndex.toString(10)\r\n : \"break\"\r\n ) + \"|\" + context);\r\n\r\n // nest blocks in order\r\n var currentBlock = module.createBlock(\"case0|\" + context, breaks, NativeType.None);\r\n var alwaysReturns = true;\r\n var alwaysReturnsWrapped = true;\r\n var alwaysThrows = true;\r\n var alwaysAllocates = true;\r\n for (let i = 0; i < numCases; ++i) {\r\n let case_ = cases[i];\r\n let statements = case_.statements;\r\n let numStatements = statements.length;\r\n\r\n // Each switch case initiates a new branch\r\n let flow = parentFlow.fork();\r\n currentFunction.flow = flow;\r\n let breakLabel = \"break|\" + context;\r\n flow.breakLabel = breakLabel;\r\n\r\n let isLast = i == numCases - 1;\r\n let nextLabel = isLast ? breakLabel : \"case\" + (i + 1).toString(10) + \"|\" + context;\r\n let stmts = new Array(1 + numStatements);\r\n stmts[0] = currentBlock;\r\n let count = 1;\r\n let terminated = false;\r\n for (let j = 0; j < numStatements; ++j) {\r\n let stmt = this.compileStatement(statements[j]);\r\n if (getExpressionId(stmt) != ExpressionId.Nop) {\r\n stmts[count++] = stmt;\r\n if (flow.isAny(FlowFlags.ANY_TERMINATING)) {\r\n terminated = true;\r\n break;\r\n }\r\n }\r\n }\r\n stmts.length = count;\r\n if (terminated || isLast) {\r\n if (!flow.is(FlowFlags.RETURNS)) alwaysReturns = false;\r\n if (!flow.is(FlowFlags.RETURNS_WRAPPED)) alwaysReturnsWrapped = false;\r\n if (!flow.is(FlowFlags.THROWS)) alwaysThrows = false;\r\n if (!flow.is(FlowFlags.ALLOCATES)) alwaysAllocates = false;\r\n }\r\n\r\n // Switch back to the parent flow\r\n flow.unset(\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONDITIONALLY_BREAKS\r\n );\r\n currentFunction.flow = flow.free();\r\n currentBlock = module.createBlock(nextLabel, stmts, NativeType.None); // must be a labeled block\r\n }\r\n currentFunction.leaveBreakContext();\r\n\r\n // If the switch has a default (guaranteed to handle any value), propagate common flags\r\n if (defaultIndex >= 0) {\r\n if (alwaysReturns) parentFlow.set(FlowFlags.RETURNS);\r\n if (alwaysReturnsWrapped) parentFlow.set(FlowFlags.RETURNS_WRAPPED);\r\n if (alwaysThrows) parentFlow.set(FlowFlags.THROWS);\r\n if (alwaysAllocates) parentFlow.set(FlowFlags.ALLOCATES);\r\n }\r\n return currentBlock;\r\n }\r\n\r\n compileThrowStatement(statement: ThrowStatement): ExpressionRef {\r\n var flow = this.currentFunction.flow;\r\n\r\n // Remember that this branch throws\r\n flow.set(FlowFlags.THROWS);\r\n\r\n // FIXME: without try-catch it is safe to assume RETURNS as well for now\r\n flow.set(FlowFlags.RETURNS);\r\n\r\n // TODO: requires exception-handling spec.\r\n return compileAbort(this, null, statement);\r\n }\r\n\r\n compileTryStatement(statement: TryStatement): ExpressionRef {\r\n // TODO\r\n // can't yet support something like: try { return ... } finally { ... }\r\n // worthwhile to investigate lowering returns to block results (here)?\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n /**\r\n * Compiles a variable statement. Returns `0` if an initializer is not\r\n * necessary.\r\n */\r\n compileVariableStatement(statement: VariableStatement, isKnownGlobal: bool = false): ExpressionRef {\r\n var program = this.program;\r\n var currentFunction = this.currentFunction;\r\n var declarations = statement.declarations;\r\n var numDeclarations = declarations.length;\r\n\r\n // top-level variables and constants become globals\r\n if (isKnownGlobal || (\r\n currentFunction == this.startFunctionInstance &&\r\n statement.parent && statement.parent.kind == NodeKind.SOURCE\r\n )) {\r\n // NOTE that the above condition also covers top-level variables declared with 'let', even\r\n // though such variables could also become start function locals if, and only if, not used\r\n // within any function declared in the same source, which is unknown at this point. the only\r\n // efficient way to deal with this would be to keep track of all occasions it is used and\r\n // replace these instructions afterwards, dynamically. (TOOD: what about a Binaryen pass?)\r\n for (let i = 0; i < numDeclarations; ++i) {\r\n this.compileGlobalDeclaration(declarations[i]);\r\n }\r\n return 0;\r\n }\r\n\r\n // other variables become locals\r\n var initializers = new Array();\r\n var flow = this.currentFunction.flow;\r\n var resolver = this.resolver;\r\n for (let i = 0; i < numDeclarations; ++i) {\r\n let declaration = declarations[i];\r\n let name = declaration.name.text;\r\n let type: Type | null = null;\r\n let initExpr: ExpressionRef = 0;\r\n if (declaration.type) {\r\n type = resolver.resolveType( // reports\r\n declaration.type,\r\n flow.contextualTypeArguments\r\n );\r\n if (!type) continue;\r\n if (declaration.initializer) {\r\n initExpr = this.compileExpression( // reports\r\n declaration.initializer,\r\n type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n } else if (declaration.initializer) { // infer type using void/NONE for proper literal inference\r\n initExpr = this.compileExpressionRetainType( // reports\r\n declaration.initializer,\r\n Type.void,\r\n WrapMode.NONE\r\n );\r\n if (this.currentType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.range, this.currentType.toString(), \"\"\r\n );\r\n continue;\r\n }\r\n type = this.currentType;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.name.range.atEnd\r\n );\r\n continue;\r\n }\r\n let isInlined = false;\r\n if (declaration.is(CommonFlags.CONST)) {\r\n if (initExpr) {\r\n initExpr = this.module.precomputeExpression(initExpr);\r\n if (getExpressionId(initExpr) == ExpressionId.Const) {\r\n let local = new Local(program, name, -1, type);\r\n switch (getExpressionType(initExpr)) {\r\n case NativeType.I32: {\r\n local = local.withConstantIntegerValue(\r\n i64_new(\r\n getConstValueI32(initExpr),\r\n 0\r\n )\r\n );\r\n break;\r\n }\r\n case NativeType.I64: {\r\n local = local.withConstantIntegerValue(\r\n i64_new(\r\n getConstValueI64Low(initExpr),\r\n getConstValueI64High(initExpr)\r\n )\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n local = local.withConstantFloatValue(getConstValueF32(initExpr));\r\n break;\r\n }\r\n case NativeType.F64: {\r\n local = local.withConstantFloatValue(getConstValueF64(initExpr));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n // Create a virtual local that doesn't actually exist in WebAssembly\r\n let scopedLocals = currentFunction.flow.scopedLocals;\r\n if (!scopedLocals) currentFunction.flow.scopedLocals = scopedLocals = new Map();\r\n else if (scopedLocals.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, name\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n scopedLocals.set(name, local);\r\n isInlined = true;\r\n } else {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n declaration.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._const_declarations_must_be_initialized,\r\n declaration.range\r\n );\r\n }\r\n }\r\n if (!isInlined) {\r\n let local: Local;\r\n if (\r\n declaration.isAny(CommonFlags.LET | CommonFlags.CONST) ||\r\n flow.is(FlowFlags.INLINE_CONTEXT)\r\n ) { // here: not top-level\r\n local = flow.addScopedLocal(type, name, false, declaration); // reports\r\n } else {\r\n local = currentFunction.addLocal(type, name, declaration); // reports\r\n }\r\n if (initExpr) {\r\n initializers.push(this.compileAssignmentWithValue(declaration.name, initExpr));\r\n if (local.type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped(local.index, !flow.canOverflow(initExpr, type));\r\n }\r\n } else if (local.type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped(local.index, true); // zero\r\n }\r\n }\r\n }\r\n return initializers.length // we can unwrap these here because the\r\n ? initializers.length == 1 // source didn't tell us exactly what to do\r\n ? initializers[0]\r\n : this.module.createBlock(null, initializers, NativeType.None)\r\n : 0;\r\n }\r\n\r\n compileVoidStatement(statement: VoidStatement): ExpressionRef {\r\n return this.compileExpression(statement.expression, Type.void, ConversionKind.EXPLICIT, WrapMode.NONE);\r\n }\r\n\r\n compileWhileStatement(statement: WhileStatement): ExpressionRef {\r\n var module = this.module;\r\n\r\n // The condition does not yet initialize a branch\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n\r\n if (\r\n !this.options.noTreeShaking ||\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT)\r\n ) {\r\n // Try to eliminate unnecesssary loops if the condition is constant\r\n let condExprPrecomp = module.precomputeExpression(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n if (!getConstValueI32(condExprPrecomp)) return module.createNop();\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n // Statements initiate a new branch with its own break context\r\n var currentFunction = this.currentFunction;\r\n var label = currentFunction.enterBreakContext();\r\n var parentFlow = currentFunction.flow;\r\n var flow = parentFlow.fork();\r\n currentFunction.flow = flow;\r\n var breakLabel = \"break|\" + label;\r\n flow.breakLabel = breakLabel;\r\n var continueLabel = \"continue|\" + label;\r\n flow.continueLabel = continueLabel;\r\n\r\n var body = this.compileStatement(statement.statement);\r\n var alwaysTrue = false; // TODO\r\n var terminated = flow.isAny(FlowFlags.ANY_TERMINATING);\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.free();\r\n currentFunction.leaveBreakContext();\r\n flow.unset(\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONDITIONALLY_BREAKS |\r\n FlowFlags.CONTINUES |\r\n FlowFlags.CONDITIONALLY_CONTINUES\r\n );\r\n if (alwaysTrue) parentFlow.inherit(flow);\r\n else parentFlow.inheritConditional(flow);\r\n\r\n return module.createBlock(breakLabel, [\r\n module.createLoop(continueLabel,\r\n module.createIf(condExpr,\r\n terminated\r\n ? body // skip trailing continue if unnecessary\r\n : module.createBlock(null, [\r\n body,\r\n module.createBreak(continueLabel)\r\n ], NativeType.None)\r\n )\r\n )\r\n ]);\r\n }\r\n\r\n // expressions\r\n\r\n /**\r\n * Compiles the value of an inlined constant element.\r\n * @param retainType If true, the annotated type of the constant is retained. Otherwise, the value\r\n * is precomputed according to context.\r\n */\r\n compileInlineConstant(\r\n element: VariableLikeElement,\r\n contextualType: Type,\r\n retainType: bool\r\n ): ExpressionRef {\r\n assert(element.is(CommonFlags.INLINED));\r\n var type = element.type;\r\n switch (\r\n !retainType &&\r\n type.is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n type.size < contextualType.size\r\n ? (this.currentType = contextualType).kind // essentially precomputes a (sign-)extension\r\n : (this.currentType = type).kind\r\n ) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n let shift = type.computeSmallIntegerShift(Type.i32);\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue) << shift >> shift\r\n : 0\r\n ); // recognized by canOverflow\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n let mask = element.type.computeSmallIntegerMask(Type.i32);\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue) & mask\r\n : 0\r\n ); // recognized by canOverflow\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue)\r\n : 0\r\n );\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n if (!element.program.options.isWasm64) {\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue)\r\n : 0\r\n );\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return element.constantValueKind == ConstantValueKind.INTEGER\r\n ? this.module.createI64(\r\n i64_low(element.constantIntegerValue),\r\n i64_high(element.constantIntegerValue)\r\n )\r\n : this.module.createI64(0);\r\n }\r\n case TypeKind.F64: {\r\n // monkey-patch for converting built-in floats to f32 implicitly\r\n if (!(element.hasDecorator(DecoratorFlags.BUILTIN) && contextualType == Type.f32)) {\r\n return this.module.createF64((element).constantFloatValue);\r\n }\r\n // otherwise fall-through: basically precomputes f32.demote/f64 of NaN / Infinity\r\n this.currentType = Type.f32;\r\n }\r\n case TypeKind.F32: {\r\n return this.module.createF32((element).constantFloatValue);\r\n }\r\n default: {\r\n assert(false);\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n }\r\n\r\n compileExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n this.currentType = contextualType;\r\n\r\n var expr: ExpressionRef;\r\n switch (expression.kind) {\r\n case NodeKind.ASSERTION: {\r\n expr = this.compileAssertionExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.BINARY: {\r\n expr = this.compileBinaryExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.CALL: {\r\n expr = this.compileCallExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.COMMA: {\r\n expr = this.compileCommaExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.ELEMENTACCESS: {\r\n expr = this.compileElementAccessExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.FUNCTION: {\r\n expr = this.compileFunctionExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.FALSE:\r\n case NodeKind.NULL:\r\n case NodeKind.THIS:\r\n case NodeKind.SUPER:\r\n case NodeKind.TRUE: {\r\n expr = this.compileIdentifierExpression(\r\n expression,\r\n contextualType,\r\n conversionKind == ConversionKind.NONE // retain type of inlined constants\r\n );\r\n break;\r\n }\r\n case NodeKind.INSTANCEOF: {\r\n expr = this.compileInstanceOfExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.LITERAL: {\r\n expr = this.compileLiteralExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.NEW: {\r\n expr = this.compileNewExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.PARENTHESIZED: {\r\n expr = this.compileParenthesizedExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.PROPERTYACCESS: {\r\n expr = this.compilePropertyAccessExpression(\r\n expression,\r\n contextualType,\r\n conversionKind == ConversionKind.NONE // retain type of inlined constants\r\n );\r\n break;\r\n }\r\n case NodeKind.TERNARY: {\r\n expr = this.compileTernaryExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.UNARYPOSTFIX: {\r\n expr = this.compileUnaryPostfixExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.UNARYPREFIX: {\r\n expr = this.compileUnaryPrefixExpression(expression, contextualType);\r\n break;\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = this.module.createUnreachable();\r\n }\r\n }\r\n\r\n var currentType = this.currentType;\r\n if (conversionKind != ConversionKind.NONE && currentType != contextualType) {\r\n expr = this.convertExpression(expr, currentType, contextualType, conversionKind, wrapMode, expression);\r\n this.currentType = contextualType;\r\n } else if (wrapMode == WrapMode.WRAP) {\r\n expr = this.ensureSmallIntegerWrap(expr, currentType);\r\n }\r\n\r\n if (this.options.sourceMap) this.addDebugLocation(expr, expression.range);\r\n return expr;\r\n }\r\n\r\n compileExpressionRetainType(\r\n expression: Expression,\r\n contextualType: Type,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n return this.compileExpression(\r\n expression,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n wrapMode\r\n );\r\n }\r\n\r\n precomputeExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n return this.module.precomputeExpression(\r\n this.compileExpression(expression, contextualType, conversionKind, wrapMode)\r\n );\r\n }\r\n\r\n convertExpression(\r\n expr: ExpressionRef,\r\n fromType: Type,\r\n toType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n assert(conversionKind != ConversionKind.NONE);\r\n var module = this.module;\r\n\r\n // void to any\r\n if (fromType.kind == TypeKind.VOID) {\r\n assert(toType.kind != TypeKind.VOID); // convertExpression should not be called with void -> void\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n reportNode.range, fromType.toString(), toType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // any to void\r\n if (toType.kind == TypeKind.VOID) return module.createDrop(expr);\r\n\r\n if (!fromType.isAssignableTo(toType)) {\r\n if (conversionKind == ConversionKind.IMPLICIT) {\r\n this.error(\r\n DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast,\r\n reportNode.range, fromType.toString(), toType.toString()\r\n ); // recoverable\r\n }\r\n }\r\n\r\n if (fromType.is(TypeFlags.FLOAT)) {\r\n\r\n // float to float\r\n if (toType.is(TypeFlags.FLOAT)) {\r\n if (fromType.kind == TypeKind.F32) {\r\n\r\n // f32 to f64\r\n if (toType.kind == TypeKind.F64) {\r\n expr = module.createUnary(UnaryOp.PromoteF32, expr);\r\n }\r\n\r\n // otherwise f32 to f32\r\n\r\n // f64 to f32\r\n } else if (toType.kind == TypeKind.F32) {\r\n expr = module.createUnary(UnaryOp.DemoteF64, expr);\r\n }\r\n\r\n // otherwise f64 to f64\r\n\r\n // float to int\r\n } else if (toType.is(TypeFlags.INTEGER)) {\r\n\r\n // f32 to int\r\n if (fromType.kind == TypeKind.F32) {\r\n if (toType.is(TypeFlags.SIGNED)) {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF32ToI64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF32ToI32, expr);\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF32ToU64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF32ToU32, expr);\r\n }\r\n }\r\n\r\n // f64 to int\r\n } else {\r\n if (toType.is(TypeFlags.SIGNED)) {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF64ToI64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF64ToI32, expr);\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF64ToU64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF64ToU32, expr);\r\n }\r\n }\r\n }\r\n\r\n // float to void\r\n } else {\r\n assert(toType.flags == TypeFlags.NONE, \"void type expected\");\r\n expr = module.createDrop(expr);\r\n }\r\n\r\n // int to float\r\n } else if (fromType.is(TypeFlags.INTEGER) && toType.is(TypeFlags.FLOAT)) {\r\n\r\n // int to f32\r\n if (toType.kind == TypeKind.F32) {\r\n if (fromType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI64ToF32\r\n : UnaryOp.ConvertU64ToF32,\r\n expr\r\n );\r\n } else {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI32ToF32\r\n : UnaryOp.ConvertU32ToF32,\r\n expr\r\n );\r\n }\r\n\r\n // int to f64\r\n } else {\r\n if (fromType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI64ToF64\r\n : UnaryOp.ConvertU64ToF64,\r\n expr\r\n );\r\n } else {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI32ToF64\r\n : UnaryOp.ConvertU32ToF64,\r\n expr\r\n );\r\n }\r\n }\r\n\r\n // int to int\r\n } else {\r\n // i64 to ...\r\n if (fromType.is(TypeFlags.LONG)) {\r\n\r\n // i64 to i32 or smaller\r\n if (!toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.WrapI64, expr); // discards upper bits\r\n }\r\n\r\n // i32 or smaller to i64\r\n } else if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED) ? UnaryOp.ExtendI32 : UnaryOp.ExtendU32,\r\n this.ensureSmallIntegerWrap(expr, fromType) // must clear garbage bits\r\n );\r\n wrapMode = WrapMode.NONE;\r\n\r\n // i32 to i32\r\n } else {\r\n // small i32 to ...\r\n if (fromType.is(TypeFlags.SHORT)) {\r\n // small i32 to larger i32\r\n if (fromType.size < toType.size) {\r\n expr = this.ensureSmallIntegerWrap(expr, fromType); // must clear garbage bits\r\n wrapMode = WrapMode.NONE;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.currentType = toType;\r\n return wrapMode == WrapMode.WRAP\r\n ? this.ensureSmallIntegerWrap(expr, toType)\r\n : expr;\r\n }\r\n\r\n compileAssertionExpression(expression: AssertionExpression, contextualType: Type): ExpressionRef {\r\n var toType = this.resolver.resolveType( // reports\r\n expression.toType,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!toType) return this.module.createUnreachable();\r\n return this.compileExpression(expression.expression, toType, ConversionKind.EXPLICIT, WrapMode.NONE);\r\n }\r\n\r\n private f32ModInstance: Function | null = null;\r\n private f64ModInstance: Function | null = null;\r\n private f32PowInstance: Function | null = null;\r\n private f64PowInstance: Function | null = null;\r\n\r\n compileBinaryExpression(\r\n expression: BinaryExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var left = expression.left;\r\n var right = expression.right;\r\n\r\n var leftExpr: ExpressionRef;\r\n var leftType: Type;\r\n var rightExpr: ExpressionRef;\r\n var rightType: Type;\r\n var commonType: Type | null;\r\n\r\n var expr: ExpressionRef;\r\n var compound = false;\r\n\r\n var operator = expression.operator;\r\n switch (operator) {\r\n case Token.LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.LT);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"<\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.LtI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.LtI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtI64\r\n : BinaryOp.LtI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.LtU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtU64\r\n : BinaryOp.LtU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.LtU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.LtF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.LtF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.GT);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \">\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.GtI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.GtI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.GtU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtU64\r\n : BinaryOp.GtU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.GtU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.GtF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.GtF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.LESSTHAN_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.LE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"<=\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.LeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeI64\r\n : BinaryOp.LeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.LeI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.LeU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeU64\r\n : BinaryOp.LeU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.LeU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.LeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.LeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.GREATERTHAN_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.GE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \">=\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.GeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeI64\r\n : BinaryOp.GeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.GeI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.GeU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeU64\r\n : BinaryOp.GeU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.GeU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.GeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.GeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n\r\n case Token.EQUALS_EQUALS_EQUALS:\r\n case Token.EQUALS_EQUALS: {\r\n\r\n // NOTE that this favors correctness, in terms of emitting a binary expression, over\r\n // checking for a possible use of unary EQZ. while the most classic of all optimizations,\r\n // that's not what the source told us to do. for reference, `!left` emits unary EQZ.\r\n\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (operator == Token.EQUALS_EQUALS && this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.EQ);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n // still allow '==' with references\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, operatorTokenToString(expression.operator), leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.EqI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.EqI64\r\n : BinaryOp.EqI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.EqI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.EqF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.EqF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.EXCLAMATION_EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (operator == Token.EXCLAMATION_EQUALS && this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.NE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n // still allow '!=' with references\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, operatorTokenToString(expression.operator), leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.NeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.NeI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.NeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.NeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.EQUALS: {\r\n return this.compileAssignment(left, right, contextualType);\r\n }\r\n case Token.PLUS_EQUALS: compound = true;\r\n case Token.PLUS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.ADD);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"+\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // addition might overflow\r\n case TypeKind.I16: // ^\r\n case TypeKind.U8: // ^\r\n case TypeKind.U16: // ^\r\n case TypeKind.BOOL: // ^\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.AddI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AddI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.AddF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.AddF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_EQUALS: compound = true;\r\n case Token.MINUS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.SUB);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"-\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // subtraction might overflow\r\n case TypeKind.I16: // ^\r\n case TypeKind.U8: // ^\r\n case TypeKind.U16: // ^\r\n case TypeKind.BOOL: // ^\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.SubI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.SubF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.SubF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.ASTERISK_EQUALS: compound = true;\r\n case Token.ASTERISK: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.MUL);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"*\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.MulI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.MulI64\r\n : BinaryOp.MulI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.MulI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.MulF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.MulF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.ASTERISK_ASTERISK_EQUALS: compound = true;\r\n case Token.ASTERISK_ASTERISK: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.POW);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n let instance: Function | null;\r\n\r\n // Mathf.pow if lhs is f32 (result is f32)\r\n if (this.currentType.kind == TypeKind.F32) {\r\n rightExpr = this.compileExpression(right, Type.f32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (!(instance = this.f32PowInstance)) {\r\n let namespace = this.program.elementsLookup.get(\"Mathf\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"pow\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf.pow\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f32PowInstance = instance = this.resolver.resolveFunction(prototype, null);\r\n }\r\n\r\n // Math.pow otherwise (result is f64)\r\n // TODO: should the result be converted back?\r\n } else {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n this.currentType,\r\n Type.f64,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(\r\n right,\r\n Type.f64,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n rightType = this.currentType;\r\n if (!(instance = this.f64PowInstance)) {\r\n let namespace = this.program.elementsLookup.get(\"Math\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"pow\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math.pow\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f64PowInstance = instance = this.resolver.resolveFunction(prototype, null);\r\n }\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n case Token.SLASH_EQUALS: compound = true;\r\n case Token.SLASH: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.DIV);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"/\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // signed div on signed small integers might overflow, e.g. -128/-1\r\n case TypeKind.I16: // ^\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.DivI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivI64\r\n : BinaryOp.DivI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.DivI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.DivU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.DivU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivU64\r\n : BinaryOp.DivU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.DivU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.DivF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.DivF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.PERCENT_EQUALS: compound = true;\r\n case Token.PERCENT: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.REM);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"%\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n expr = module.createBinary(BinaryOp.RemI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.RemI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemI64\r\n : BinaryOp.RemI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.RemI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.RemU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.RemU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemU64\r\n : BinaryOp.RemU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.RemU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n let instance = this.f32ModInstance;\r\n if (!instance) {\r\n let namespace = this.program.elementsLookup.get(\"Mathf\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"mod\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf.mod\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f32ModInstance = instance = this.resolver.resolveFunction(prototype, null);\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n let instance = this.f64ModInstance;\r\n if (!instance) {\r\n let namespace = this.program.elementsLookup.get(\"Math\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"mod\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math.mod\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f64ModInstance = instance = this.resolver.resolveFunction(prototype, null);\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.LESSTHAN_LESSTHAN_EQUALS: compound = true;\r\n case Token.LESSTHAN_LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHL);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShlI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShlI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShlI64\r\n : BinaryOp.ShlI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS: compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType); // must clear garbage bits\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n expr = module.createBinary(BinaryOp.ShrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.ShrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.ShrI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrI64\r\n : BinaryOp.ShrI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShrU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS: compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHR_U);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType); // must clear garbage bits\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: { // assumes that unsigned shr on unsigned small integers does not overflow\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n }\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShrU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.AMPERSAND_EQUALS: compound = true;\r\n case Token.AMPERSAND: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overloadd\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_AND);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"&\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.AndI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AndI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AndI64\r\n : BinaryOp.AndI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.BAR_EQUALS: compound = true;\r\n case Token.BAR: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_OR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"|\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.OrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.OrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.OrI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.OrI64\r\n : BinaryOp.OrI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.CARET_EQUALS: compound = true;\r\n case Token.CARET: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_XOR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"^\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.XorI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.XorI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.XorI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n\r\n // logical (no overloading)\r\n\r\n case Token.AMPERSAND_AMPERSAND: { // left && right\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n\r\n // simplify if cloning left without side effects is possible\r\n if (expr = module.cloneExpression(leftExpr, true, 0)) {\r\n this.makeIsTrueish(leftExpr, this.currentType);\r\n expr = module.createIf(\r\n this.makeIsTrueish(leftExpr, this.currentType),\r\n rightExpr,\r\n expr\r\n );\r\n\r\n // if not possible, tee left to a temp. local\r\n } else {\r\n let flow = this.currentFunction.flow;\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(\r\n this.currentType,\r\n !flow.canOverflow(leftExpr, this.currentType)\r\n );\r\n expr = module.createIf(\r\n this.makeIsTrueish(\r\n module.createTeeLocal(tempLocal.index, leftExpr),\r\n this.currentType\r\n ),\r\n rightExpr,\r\n module.createGetLocal(\r\n assert(tempLocal).index, // to be sure\r\n this.currentType.toNativeType()\r\n )\r\n );\r\n }\r\n break;\r\n }\r\n case Token.BAR_BAR: { // left || right\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n\r\n // simplify if cloning left without side effects is possible\r\n if (expr = this.module.cloneExpression(leftExpr, true, 0)) {\r\n expr = this.module.createIf(\r\n this.makeIsTrueish(leftExpr, this.currentType),\r\n expr,\r\n rightExpr\r\n );\r\n\r\n // if not possible, tee left to a temp. local\r\n } else {\r\n let flow = this.currentFunction.flow;\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(\r\n this.currentType,\r\n !flow.canOverflow(leftExpr, this.currentType)\r\n );\r\n expr = module.createIf(\r\n this.makeIsTrueish(\r\n module.createTeeLocal(tempLocal.index, leftExpr),\r\n this.currentType\r\n ),\r\n module.createGetLocal(\r\n assert(tempLocal).index, // to be sure\r\n this.currentType.toNativeType()\r\n ),\r\n rightExpr\r\n );\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = this.module.createUnreachable();\r\n }\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(left, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n\r\n compileUnaryOverload(\r\n operatorInstance: Function,\r\n value: Expression,\r\n valueExpr: ExpressionRef,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n var argumentExpressions: Expression[];\r\n var thisArg: ExpressionRef = 0;\r\n if (operatorInstance.is(CommonFlags.INSTANCE)) {\r\n thisArg = valueExpr; // can reuse the previously evaluated expr as the this value here\r\n argumentExpressions = [];\r\n } else {\r\n argumentExpressions = [ value ]; // annotated type might differ -> recompile\r\n }\r\n return this.compileCallDirect(\r\n operatorInstance,\r\n argumentExpressions,\r\n reportNode,\r\n thisArg,\r\n operatorInstance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n }\r\n\r\n compileBinaryOverload(\r\n operatorInstance: Function,\r\n left: Expression,\r\n leftExpr: ExpressionRef,\r\n right: Expression,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n var argumentExpressions: Expression[];\r\n var thisArg: ExpressionRef = 0;\r\n if (operatorInstance.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(operatorInstance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n thisArg = leftExpr; // can reuse the previously evaluated leftExpr as the this value here\r\n argumentExpressions = [ right ];\r\n } else {\r\n argumentExpressions = [ left, right ]; // annotated type of LHS might differ -> recompile\r\n }\r\n var ret = this.compileCallDirect(\r\n operatorInstance,\r\n argumentExpressions,\r\n reportNode,\r\n thisArg,\r\n operatorInstance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n return ret;\r\n }\r\n\r\n compileAssignment(expression: Expression, valueExpression: Expression, contextualType: Type): ExpressionRef {\r\n var program = this.program;\r\n var resolver = program.resolver;\r\n var currentFunction = this.currentFunction;\r\n var target = resolver.resolveExpression(expression, currentFunction); // reports\r\n if (!target) return this.module.createUnreachable();\r\n\r\n // to compile just the value, we need to know the target's type\r\n var targetType: Type;\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field compiled as a global\r\n return this.module.createUnreachable();\r\n }\r\n assert((target).type != Type.void); // compileGlobal must guarantee this\r\n // fall-through\r\n }\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n targetType = (target).type;\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let setterPrototype = (target).setterPrototype;\r\n if (setterPrototype) {\r\n let instance = this.resolver.resolveFunction(setterPrototype, null);\r\n if (!instance) return this.module.createUnreachable();\r\n assert(instance.signature.parameterTypes.length == 1); // parser must guarantee this\r\n targetType = instance.signature.parameterTypes[0];\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n case ElementKind.CLASS: {\r\n if (resolver.currentElementExpression) { // indexed access\r\n let isUnchecked = currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);\r\n if (!indexedSet) {\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, (target).internalName\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, (target).internalName\r\n );\r\n }\r\n return this.module.createUnreachable();\r\n }\r\n assert(indexedSet.signature.parameterTypes.length == 2); // parser must guarantee this\r\n targetType = indexedSet.signature.parameterTypes[1]; // 2nd parameter is the element\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n\r\n // compile the value and do the assignment\r\n assert(targetType != Type.void);\r\n var valueExpr = this.compileExpression(valueExpression, targetType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n return this.compileAssignmentWithValue(\r\n expression,\r\n valueExpr,\r\n contextualType != Type.void\r\n );\r\n }\r\n\r\n compileAssignmentWithValue(\r\n expression: Expression,\r\n valueWithCorrectType: ExpressionRef,\r\n tee: bool = false\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var target = this.resolver.resolveExpression(expression, this.currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.LOCAL: {\r\n let type = (target).type;\r\n assert(type != Type.void);\r\n this.currentType = tee ? type : Type.void;\r\n if ((target).is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let flow = this.currentFunction.flow;\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped((target).index, !flow.canOverflow(valueWithCorrectType, type));\r\n }\r\n return tee\r\n ? module.createTeeLocal((target).index, valueWithCorrectType)\r\n : module.createSetLocal((target).index, valueWithCorrectType);\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) return module.createUnreachable();\r\n let type = (target).type;\r\n assert(type != Type.void);\r\n this.currentType = tee ? type : Type.void;\r\n if ((target).is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range,\r\n target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n valueWithCorrectType = this.ensureSmallIntegerWrap(valueWithCorrectType, type); // guaranteed\r\n if (tee) {\r\n let nativeType = type.toNativeType();\r\n let internalName = target.internalName;\r\n return module.createBlock(null, [ // emulated teeGlobal\r\n module.createSetGlobal(internalName, valueWithCorrectType),\r\n module.createGetGlobal(internalName, nativeType)\r\n ], nativeType);\r\n } else {\r\n return module.createSetGlobal(target.internalName, valueWithCorrectType);\r\n }\r\n }\r\n case ElementKind.FIELD: {\r\n const declaration = (target).declaration;\r\n if (\r\n (target).is(CommonFlags.READONLY) &&\r\n !(\r\n this.currentFunction.is(CommonFlags.CONSTRUCTOR) ||\r\n declaration == null ||\r\n declaration.initializer != null\r\n )\r\n ) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, (target).internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let thisExpression = assert(this.resolver.currentThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let type = (target).type;\r\n this.currentType = tee ? type : Type.void;\r\n let nativeType = type.toNativeType();\r\n if (type.kind == TypeKind.BOOL) {\r\n // make sure bools are wrapped (usually are) when storing as 8 bits\r\n valueWithCorrectType = this.ensureSmallIntegerWrap(valueWithCorrectType, type);\r\n }\r\n if (tee) {\r\n let currentFunction = this.currentFunction;\r\n let flow = currentFunction.flow;\r\n let tempLocal = currentFunction.getAndFreeTempLocal(\r\n type,\r\n !flow.canOverflow(valueWithCorrectType, type)\r\n );\r\n let tempLocalIndex = tempLocal.index;\r\n // TODO: simplify if valueWithCorrectType has no side effects\r\n // TODO: call __gc_link here if a GC is present\r\n return module.createBlock(null, [\r\n module.createSetLocal(tempLocalIndex, valueWithCorrectType),\r\n module.createStore(\r\n type.byteSize,\r\n thisExpr,\r\n module.createGetLocal(tempLocalIndex, nativeType),\r\n nativeType,\r\n (target).memoryOffset\r\n ),\r\n module.createGetLocal(tempLocalIndex, nativeType)\r\n ], nativeType);\r\n } else {\r\n // TODO: call __gc_link here if a GC is present\r\n return module.createStore(\r\n type.byteSize,\r\n thisExpr,\r\n valueWithCorrectType,\r\n nativeType,\r\n (target).memoryOffset\r\n );\r\n }\r\n }\r\n case ElementKind.PROPERTY: {\r\n let setterPrototype = (target).setterPrototype;\r\n if (setterPrototype) {\r\n let setterInstance = this.resolver.resolveFunction(setterPrototype, null);\r\n if (!setterInstance) return module.createUnreachable();\r\n\r\n // call just the setter if the return value isn't of interest\r\n if (!tee) {\r\n if (setterInstance.is(CommonFlags.INSTANCE)) {\r\n let thisExpression = assert(this.resolver.currentThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n return this.makeCallDirect(setterInstance, [ thisExpr, valueWithCorrectType ]);\r\n } else {\r\n return this.makeCallDirect(setterInstance, [ valueWithCorrectType ]);\r\n }\r\n }\r\n\r\n // otherwise call the setter first, then the getter\r\n let getterPrototype = (target).getterPrototype;\r\n assert(getterPrototype != null); // must have one if there is a setter\r\n let getterInstance = this.resolver.resolveFunction(getterPrototype, null);\r\n if (!getterInstance) return module.createUnreachable();\r\n let returnType = getterInstance.signature.returnType;\r\n let nativeReturnType = returnType.toNativeType();\r\n if (setterInstance.is(CommonFlags.INSTANCE)) {\r\n let thisExpression = assert(this.resolver.currentThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(returnType, false);\r\n let tempLocalIndex = tempLocal.index;\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ // set and remember the target\r\n module.createTeeLocal(tempLocalIndex, thisExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(getterInstance, [ // get from remembered target\r\n module.createGetLocal(tempLocalIndex, nativeReturnType)\r\n ])\r\n ], nativeReturnType);\r\n } else {\r\n // note that this must be performed here because `resolved` is shared\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ valueWithCorrectType ]),\r\n this.makeCallDirect(getterInstance)\r\n ], nativeReturnType);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, target.internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n case ElementKind.CLASS: {\r\n let elementExpression = this.resolver.currentElementExpression;\r\n if (elementExpression) {\r\n let isUnchecked = this.currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);\r\n if (!indexedSet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, target.internalName\r\n );\r\n this.currentType = tee ? indexedGet.signature.returnType : Type.void;\r\n return module.createUnreachable();\r\n }\r\n let targetType = (target).type;\r\n let thisExpression = assert(this.resolver.currentThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let elementExpr = this.compileExpression(\r\n elementExpression,\r\n Type.i32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (tee) {\r\n let currentFunction = this.currentFunction;\r\n let tempLocalTarget = currentFunction.getTempLocal(targetType, false);\r\n let tempLocalElement = currentFunction.getAndFreeTempLocal(this.currentType, false);\r\n let returnType = indexedGet.signature.returnType;\r\n this.currentFunction.freeTempLocal(tempLocalTarget);\r\n return module.createBlock(null, [\r\n this.makeCallDirect(indexedSet, [\r\n module.createTeeLocal(tempLocalTarget.index, thisExpr),\r\n module.createTeeLocal(tempLocalElement.index, elementExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(indexedGet, [\r\n module.createGetLocal(tempLocalTarget.index, tempLocalTarget.type.toNativeType()),\r\n module.createGetLocal(tempLocalElement.index, tempLocalElement.type.toNativeType())\r\n ])\r\n ], returnType.toNativeType());\r\n } else {\r\n return this.makeCallDirect(indexedSet, [\r\n thisExpr,\r\n elementExpr,\r\n valueWithCorrectType\r\n ]);\r\n }\r\n }\r\n // fall-through\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n compileCallExpression(expression: CallExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var target = this.resolver.resolveExpression(expression.expression, currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n var signature: Signature | null;\r\n var indexArg: ExpressionRef;\r\n switch (target.kind) {\r\n\r\n // direct call: concrete function\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let prototype = target;\r\n let typeArguments = expression.typeArguments;\r\n\r\n // builtins handle present respectively omitted type arguments on their own\r\n if (prototype.hasDecorator(DecoratorFlags.BUILTIN)) {\r\n return this.compileCallExpressionBuiltin(prototype, expression, contextualType);\r\n }\r\n\r\n let instance: Function | null = null;\r\n\r\n // resolve generic call if type arguments have been provided\r\n if (typeArguments) {\r\n if (!prototype.is(CommonFlags.GENERIC)) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n expression.expression.range, prototype.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n instance = this.resolver.resolveFunctionInclTypeArguments(\r\n prototype,\r\n typeArguments,\r\n this.currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n\r\n // infer generic call if type arguments have been omitted\r\n } else if (prototype.is(CommonFlags.GENERIC)) {\r\n let inferredTypes = new Map();\r\n let typeParameters = assert(prototype.declaration.typeParameters);\r\n let numTypeParameters = typeParameters.length;\r\n for (let i = 0; i < numTypeParameters; ++i) {\r\n inferredTypes.set(typeParameters[i].name.text, null);\r\n }\r\n // let numInferred = 0;\r\n let parameterTypes = prototype.declaration.signature.parameters;\r\n let numParameterTypes = parameterTypes.length;\r\n let argumentExpressions = expression.arguments;\r\n let numArguments = argumentExpressions.length;\r\n let argumentExprs = new Array(numArguments);\r\n for (let i = 0; i < numParameterTypes; ++i) {\r\n let typeNode = parameterTypes[i].type;\r\n let name = typeNode.kind == NodeKind.TYPE ? (typeNode).name.text : null;\r\n let argumentExpression = i < numArguments\r\n ? argumentExpressions[i]\r\n : prototype.declaration.signature.parameters[i].initializer;\r\n if (!argumentExpression) { // missing initializer -> too few arguments\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n expression.range, numParameterTypes.toString(10), numArguments.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (name !== null && inferredTypes.has(name)) {\r\n let inferredType = inferredTypes.get(name);\r\n if (inferredType) {\r\n argumentExprs[i] = this.compileExpressionRetainType(argumentExpression, inferredType, WrapMode.NONE);\r\n let commonType: Type | null;\r\n if (!(commonType = Type.commonCompatible(inferredType, this.currentType, true))) {\r\n if (!(commonType = Type.commonCompatible(inferredType, this.currentType, false))) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n parameterTypes[i].type.range, this.currentType.toString(), inferredType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n inferredType = commonType;\r\n } else {\r\n argumentExprs[i] = this.compileExpressionRetainType(argumentExpression, Type.i32, WrapMode.NONE);\r\n inferredType = this.currentType;\r\n // ++numInferred;\r\n }\r\n inferredTypes.set(name, inferredType);\r\n } else {\r\n let concreteType = this.resolver.resolveType(\r\n parameterTypes[i].type,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!concreteType) return module.createUnreachable();\r\n argumentExprs[i] = this.compileExpression(\r\n argumentExpression,\r\n concreteType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n }\r\n let resolvedTypeArguments = new Array(numTypeParameters);\r\n for (let i = 0; i < numTypeParameters; ++i) {\r\n let inferredType = assert(inferredTypes.get(typeParameters[i].name.text)); // TODO\r\n resolvedTypeArguments[i] = inferredType;\r\n }\r\n instance = this.resolver.resolveFunction(\r\n prototype,\r\n resolvedTypeArguments,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n return this.makeCallDirect(instance, argumentExprs);\r\n // TODO: this skips inlining because inlining requires compiling its temporary locals in\r\n // the scope of the inlined flow. might need another mechanism to lock temp. locals early,\r\n // so inlining can be performed in `makeCallDirect` instead?\r\n\r\n // otherwise resolve the non-generic call as usual\r\n } else {\r\n instance = this.resolver.resolveFunction(\r\n prototype,\r\n null,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n }\r\n if (!instance) return this.module.createUnreachable();\r\n\r\n // compile 'this' expression if an instance method\r\n let thisExpr: ExpressionRef = 0;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n thisExpr = this.compileExpressionRetainType(\r\n assert(this.resolver.currentThisExpression),\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n }\r\n\r\n return this.compileCallDirect(\r\n instance,\r\n expression.arguments,\r\n expression,\r\n thisExpr,\r\n instance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n }\r\n\r\n // indirect call: index argument with signature (non-generic, can't be inlined)\r\n case ElementKind.LOCAL: {\r\n if (signature = (target).type.signatureReference) {\r\n if ((target).is(CommonFlags.INLINED)) {\r\n indexArg = module.createI32(i64_low((target).constantIntegerValue));\r\n } else {\r\n indexArg = module.createGetLocal((target).index, NativeType.I32);\r\n }\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (signature = (target).type.signatureReference) {\r\n indexArg = module.createGetGlobal((target).internalName, (target).type.toNativeType());\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FIELD: {\r\n let type = (target).type;\r\n if (signature = type.signatureReference) {\r\n let thisExpression = assert(this.resolver.currentThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n indexArg = module.createLoad(\r\n 4,\r\n false,\r\n thisExpr,\r\n NativeType.I32,\r\n (target).memoryOffset\r\n );\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FUNCTION_TARGET: {\r\n signature = (target).signature;\r\n indexArg = this.compileExpression(\r\n expression.expression,\r\n (target).type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n break;\r\n }\r\n\r\n case ElementKind.PROPERTY: {\r\n indexArg = this.compileGetter(target, expression.expression);\r\n let type = this.currentType;\r\n signature = type.signatureReference;\r\n if (!signature) {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n break;\r\n }\r\n\r\n // not supported\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n return this.compileCallIndirect(\r\n signature,\r\n indexArg,\r\n expression.arguments,\r\n expression\r\n );\r\n }\r\n\r\n private compileCallExpressionBuiltin(\r\n prototype: FunctionPrototype,\r\n expression: CallExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var typeArguments: Type[] | null = null;\r\n\r\n // builtins handle omitted type arguments on their own. if present, however, resolve them here\r\n // and pass them to the builtin, even if it's still up to the builtin how to handle them.\r\n var typeArgumentNodes = expression.typeArguments;\r\n if (expression.typeArguments) {\r\n if (!prototype.is(CommonFlags.GENERIC)) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n expression.range, prototype.internalName\r\n );\r\n }\r\n typeArguments = this.resolver.resolveTypeArguments(\r\n assert(prototype.declaration.typeParameters),\r\n typeArgumentNodes,\r\n this.currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n }\r\n\r\n // now compile the builtin, which usually returns a block of code that replaces the call.\r\n var expr = compileBuiltinCall(\r\n this,\r\n prototype,\r\n typeArguments,\r\n expression.arguments,\r\n contextualType,\r\n expression\r\n );\r\n if (!expr) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n return expr;\r\n }\r\n\r\n /**\r\n * Checks that a call with the given number as arguments can be performed according to the\r\n * specified signature.\r\n */\r\n checkCallSignature(\r\n signature: Signature,\r\n numArguments: i32,\r\n hasThis: bool,\r\n reportNode: Node\r\n ): bool {\r\n\r\n // cannot call an instance method without a `this` argument (TODO: `.call`?)\r\n var thisType = signature.thisType;\r\n if (hasThis != (thisType != null)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported, // TODO: better message?\r\n reportNode.range\r\n );\r\n return false;\r\n }\r\n\r\n // not yet implemented (TODO: maybe some sort of an unmanaged/lightweight array?)\r\n var hasRest = signature.hasRest;\r\n if (hasRest) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return false;\r\n }\r\n\r\n var minimum = signature.requiredParameters;\r\n var maximum = signature.parameterTypes.length;\r\n\r\n // must at least be called with required arguments\r\n if (numArguments < minimum) {\r\n this.error(\r\n minimum < maximum\r\n ? DiagnosticCode.Expected_at_least_0_arguments_but_got_1\r\n : DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, minimum.toString(), numArguments.toString()\r\n );\r\n return false;\r\n }\r\n\r\n // must not be called with more than the maximum arguments\r\n if (numArguments > maximum && !hasRest) {\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, maximum.toString(), numArguments.toString()\r\n );\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** Compiles a direct call to a concrete function. */\r\n compileCallDirect(\r\n instance: Function,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0,\r\n inline: bool = false\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n var signature = instance.signature;\r\n\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n numArguments,\r\n thisArg != 0,\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n // Inline if explicitly requested\r\n if (inline) {\r\n assert(!instance.is(CommonFlags.TRAMPOLINE)); // doesn't make sense\r\n if (this.currentInlineFunctions.includes(instance)) {\r\n this.warning(\r\n DiagnosticCode.Function_0_cannot_be_inlined_into_itself,\r\n reportNode.range, instance.internalName\r\n );\r\n } else {\r\n this.currentInlineFunctions.push(instance);\r\n let expr = this.compileCallInlineUnchecked(instance, argumentExpressions, reportNode, thisArg);\r\n this.currentInlineFunctions.pop();\r\n return expr;\r\n }\r\n }\r\n\r\n // Otherwise compile to just a call\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallDirect(instance, operands);\r\n }\r\n\r\n // Depends on being pre-checked in compileCallDirect\r\n private compileCallInlineUnchecked(\r\n instance: Function,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n var signature = instance.signature;\r\n var currentFunction = this.currentFunction;\r\n var module = this.module;\r\n var declaration = instance.prototype.declaration;\r\n\r\n // Create an empty child flow with its own scope and mark it for inlining\r\n var previousFlow = currentFunction.flow;\r\n var returnLabel = instance.internalName + \"|inlined.\" + (instance.nextInlineId++).toString(10);\r\n var returnType = instance.signature.returnType;\r\n var flow = Flow.create(currentFunction);\r\n flow.set(FlowFlags.INLINE_CONTEXT);\r\n flow.returnLabel = returnLabel;\r\n flow.returnType = returnType;\r\n flow.contextualTypeArguments = instance.contextualTypeArguments;\r\n\r\n // Convert provided call arguments to temporary locals. It is important that these are compiled\r\n // here, with their respective locals being blocked. There is no 'makeCallInline'.\r\n var body = [];\r\n if (thisArg) {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n if (getExpressionId(thisArg) == ExpressionId.GetLocal) {\r\n flow.addScopedLocalAlias(\r\n getGetLocalIndex(thisArg),\r\n (parent).type,\r\n \"this\"\r\n );\r\n } else {\r\n let thisLocal = flow.addScopedLocal((parent).type, \"this\", false);\r\n body.push(\r\n module.createSetLocal(thisLocal.index, thisArg)\r\n );\r\n }\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i) {\r\n let paramExpr = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(paramExpr) == ExpressionId.GetLocal) {\r\n flow.addScopedLocalAlias(\r\n getGetLocalIndex(paramExpr),\r\n parameterTypes[i],\r\n signature.getParameterName(i)\r\n );\r\n // inherits wrap status\r\n } else {\r\n let argumentLocal = flow.addScopedLocal(\r\n parameterTypes[i],\r\n signature.getParameterName(i),\r\n !flow.canOverflow(paramExpr, parameterTypes[i])\r\n );\r\n body.push(\r\n module.createSetLocal(argumentLocal.index, paramExpr)\r\n );\r\n }\r\n }\r\n\r\n // Compile optional parameter initializers in the scope of the inlined flow\r\n currentFunction.flow = flow;\r\n var numParameters = signature.parameterTypes.length;\r\n for (let i = numArguments; i < numParameters; ++i) {\r\n let initExpr = this.compileExpression(\r\n assert(declaration.signature.parameters[i].initializer),\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n );\r\n let argumentLocal = flow.addScopedLocal(\r\n parameterTypes[i],\r\n signature.getParameterName(i),\r\n !flow.canOverflow(initExpr, parameterTypes[i])\r\n );\r\n body.push(\r\n module.createSetLocal(argumentLocal.index, initExpr)\r\n );\r\n }\r\n\r\n // Compile the called function's body in the scope of the inlined flow\r\n var bodyStatement = assert(declaration.body);\r\n if (bodyStatement.kind == NodeKind.BLOCK) {\r\n let statements = (bodyStatement).statements;\r\n for (let i = 0, k = statements.length; i < k; ++i) {\r\n let stmt = this.compileStatement(statements[i]);\r\n if (getExpressionId(stmt) != ExpressionId.Nop) {\r\n body.push(stmt);\r\n if (flow.isAny(FlowFlags.ANY_TERMINATING)) break;\r\n }\r\n }\r\n } else {\r\n body.push(this.compileStatement(bodyStatement));\r\n }\r\n\r\n // Free any new scoped locals and reset to the original flow\r\n var scopedLocals = flow.scopedLocals;\r\n if (scopedLocals) {\r\n for (let scopedLocal of scopedLocals.values()) {\r\n if (scopedLocal.is(CommonFlags.SCOPED)) { // otherwise an alias\r\n currentFunction.freeTempLocal(scopedLocal);\r\n }\r\n }\r\n flow.scopedLocals = null;\r\n }\r\n flow.finalize();\r\n this.currentFunction.flow = previousFlow;\r\n this.currentType = returnType;\r\n\r\n // Check that all branches are terminated\r\n if (returnType != Type.void && !flow.isAny(FlowFlags.ANY_TERMINATING)) {\r\n this.error(\r\n DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,\r\n declaration.signature.returnType.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n return flow.is(FlowFlags.RETURNS)\r\n ? module.createBlock(returnLabel, body, returnType.toNativeType())\r\n : body.length > 1\r\n ? module.createBlock(null, body, returnType.toNativeType())\r\n : body.length\r\n ? body[0]\r\n : module.createNop();\r\n }\r\n\r\n /** Gets the trampoline for the specified function. */\r\n ensureTrampoline(original: Function): Function {\r\n // A trampoline is a function that takes a fixed amount of operands with some of them possibly\r\n // being zeroed. It takes one additional argument denoting the number of actual operands\r\n // provided to the call, and takes appropriate steps to initialize zeroed operands to their\r\n // default values using the optional parameter initializers of the original function. Doing so\r\n // allows calls to functions with optional parameters to circumvent the trampoline when all\r\n // parameters are provided as a fast route, respectively setting up omitted operands in a proper\r\n // context otherwise.\r\n var trampoline = original.trampoline;\r\n if (trampoline) return trampoline;\r\n\r\n var originalSignature = original.signature;\r\n var originalName = original.internalName;\r\n var originalParameterTypes = originalSignature.parameterTypes;\r\n var originalParameterDeclarations = original.prototype.declaration.signature.parameters;\r\n var commonReturnType = originalSignature.returnType;\r\n var commonThisType = originalSignature.thisType;\r\n var isInstance = original.is(CommonFlags.INSTANCE);\r\n\r\n // arguments excl. `this`, operands incl. `this`\r\n var minArguments = originalSignature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = originalParameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (isInstance) {\r\n ++minOperands;\r\n ++maxOperands;\r\n }\r\n var numOptional = assert(maxOperands - minOperands);\r\n\r\n var forwardedOperands = new Array(minOperands);\r\n var operandIndex = 0;\r\n\r\n // forward `this` if applicable\r\n var module = this.module;\r\n if (isInstance) {\r\n forwardedOperands[0] = module.createGetLocal(0, this.options.nativeSizeType);\r\n operandIndex = 1;\r\n }\r\n\r\n // forward required arguments\r\n for (let i = 0; i < minArguments; ++i, ++operandIndex) {\r\n forwardedOperands[operandIndex] = module.createGetLocal(operandIndex, originalParameterTypes[i].toNativeType());\r\n }\r\n assert(operandIndex == minOperands);\r\n\r\n // create the trampoline element\r\n var trampolineSignature = new Signature(originalParameterTypes, commonReturnType, commonThisType);\r\n var trampolineName = originalName + \"|trampoline\";\r\n trampolineSignature.requiredParameters = maxArguments;\r\n trampoline = new Function(\r\n original.prototype,\r\n trampolineName,\r\n trampolineSignature,\r\n original.parent,\r\n original.contextualTypeArguments\r\n );\r\n trampoline.set(original.flags | CommonFlags.TRAMPOLINE | CommonFlags.COMPILED);\r\n original.trampoline = trampoline;\r\n\r\n // compile initializers of omitted arguments in scope of the trampoline function\r\n // this is necessary because initializers might need additional locals and a proper this context\r\n var previousFunction = this.currentFunction;\r\n this.currentFunction = trampoline;\r\n\r\n // create a br_table switching over the number of optional parameters provided\r\n var numNames = numOptional + 1; // incl. outer block\r\n var names = new Array(numNames);\r\n var ofN = \"of\" + numOptional.toString(10);\r\n for (let i = 0; i < numNames; ++i) {\r\n let label = i.toString(10) + ofN;\r\n names[i] = label;\r\n }\r\n var body = module.createBlock(names[0], [\r\n module.createBlock(\"outOfRange\", [\r\n module.createSwitch(names, \"outOfRange\",\r\n // condition is number of provided optional arguments, so subtract required arguments\r\n minArguments\r\n ? module.createBinary(\r\n BinaryOp.SubI32,\r\n module.createGetGlobal(\"~argc\", NativeType.I32),\r\n module.createI32(minArguments)\r\n )\r\n : module.createGetGlobal(\"~argc\", NativeType.I32)\r\n )\r\n ]),\r\n module.createUnreachable()\r\n ]);\r\n for (let i = 0; i < numOptional; ++i, ++operandIndex) {\r\n let type = originalParameterTypes[minArguments + i];\r\n let declaration = originalParameterDeclarations[minArguments + i];\r\n let initializer = declaration.initializer;\r\n let initExpr: ExpressionRef;\r\n if (initializer) {\r\n initExpr = module.createSetLocal(operandIndex,\r\n this.compileExpression(\r\n initializer,\r\n type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n )\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Optional_parameter_must_have_an_initializer,\r\n declaration.range\r\n );\r\n initExpr = module.createUnreachable();\r\n }\r\n body = module.createBlock(names[i + 1], [\r\n body,\r\n initExpr,\r\n ]);\r\n forwardedOperands[operandIndex] = module.createGetLocal(operandIndex, type.toNativeType());\r\n }\r\n this.currentFunction = previousFunction;\r\n assert(operandIndex == maxOperands);\r\n\r\n var funcRef = module.addFunction(\r\n trampolineName,\r\n this.ensureFunctionType(\r\n trampolineSignature.parameterTypes,\r\n trampolineSignature.returnType,\r\n trampolineSignature.thisType\r\n ),\r\n typesToNativeTypes(trampoline.additionalLocals),\r\n module.createBlock(null, [\r\n body,\r\n module.createCall(\r\n originalName,\r\n forwardedOperands,\r\n commonReturnType.toNativeType()\r\n )\r\n ], commonReturnType.toNativeType())\r\n );\r\n trampoline.finalize(module, funcRef);\r\n return trampoline;\r\n }\r\n\r\n /** Makes sure that the argument count helper global is present and returns its name. */\r\n private ensureArgcVar(): string {\r\n var internalName = \"~argc\";\r\n if (!this.argcVar) {\r\n let module = this.module;\r\n this.argcVar = module.addGlobal(\r\n internalName,\r\n NativeType.I32,\r\n true,\r\n module.createI32(0)\r\n );\r\n }\r\n return internalName;\r\n }\r\n\r\n /** Makes sure that the argument count helper setter is present and returns its name. */\r\n private ensureArgcSet(): string {\r\n var internalName = \"~setargc\";\r\n if (!this.argcSet) {\r\n let module = this.module;\r\n this.argcSet = module.addFunction(internalName,\r\n this.ensureFunctionType([ Type.u32 ], Type.void),\r\n null,\r\n module.createSetGlobal(this.ensureArgcVar(),\r\n module.createGetLocal(0, NativeType.I32)\r\n )\r\n );\r\n module.addFunctionExport(internalName, \"_setargc\");\r\n }\r\n return internalName;\r\n }\r\n\r\n /** Creates a direct call to the specified function. */\r\n makeCallDirect(\r\n instance: Function,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var numOperands = operands ? operands.length : 0;\r\n var numArguments = numOperands;\r\n var minArguments = instance.signature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = instance.signature.parameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n ++minOperands;\r\n ++maxOperands;\r\n --numArguments;\r\n }\r\n assert(numOperands >= minOperands);\r\n\r\n var module = this.module;\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n var returnType = instance.signature.returnType;\r\n var isCallImport = instance.is(CommonFlags.MODULE_IMPORT);\r\n\r\n // fill up omitted arguments with their initializers, if constant, otherwise with zeroes.\r\n if (numOperands < maxOperands) {\r\n if (!operands) {\r\n operands = new Array(maxOperands);\r\n operands.length = 0;\r\n }\r\n let parameterTypes = instance.signature.parameterTypes;\r\n let parameterNodes = instance.prototype.declaration.signature.parameters;\r\n let allOptionalsAreConstant = true;\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n let initializer = parameterNodes[i].initializer;\r\n if (!(initializer !== null && nodeIsConstantValue(initializer.kind))) {\r\n allOptionalsAreConstant = false;\r\n break;\r\n }\r\n }\r\n if (allOptionalsAreConstant) { // inline into the call\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(\r\n this.compileExpression(\r\n parameterNodes[i].initializer,\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n )\r\n );\r\n }\r\n } else { // otherwise fill up with zeroes and call the trampoline\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(parameterTypes[i].toNativeZero(module));\r\n }\r\n if (!isCallImport) {\r\n let original = instance;\r\n instance = this.ensureTrampoline(instance);\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n instance.flow.flags = original.flow.flags;\r\n this.program.instancesLookup.set(instance.internalName, instance); // so canOverflow can find it\r\n let nativeReturnType = returnType.toNativeType();\r\n this.currentType = returnType;\r\n return module.createBlock(null, [\r\n module.createSetGlobal(this.ensureArgcVar(), module.createI32(numArguments)),\r\n module.createCall(instance.internalName, operands, nativeReturnType)\r\n ], nativeReturnType);\r\n }\r\n }\r\n }\r\n\r\n // otherwise just call through\r\n this.currentType = returnType;\r\n return module.createCall(instance.internalName, operands, returnType.toNativeType());\r\n }\r\n\r\n /** Compiles an indirect call using an index argument and a signature. */\r\n compileCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n numArguments,\r\n thisArg != 0,\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallIndirect(signature, indexArg, operands);\r\n }\r\n\r\n /** Creates an indirect call to the function at `indexArg` in the function table. */\r\n makeCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var numOperands = operands ? operands.length : 0;\r\n var numArguments = numOperands;\r\n var minArguments = signature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = signature.parameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (signature.thisType) {\r\n ++minOperands;\r\n ++maxOperands;\r\n --numArguments;\r\n }\r\n assert(numOperands >= minOperands);\r\n\r\n this.ensureFunctionType(signature.parameterTypes, signature.returnType, signature.thisType);\r\n var module = this.module;\r\n\r\n // fill up omitted arguments with zeroes\r\n if (numOperands < maxOperands) {\r\n if (!operands) {\r\n operands = new Array(maxOperands);\r\n operands.length = 0;\r\n }\r\n let parameterTypes = signature.parameterTypes;\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(parameterTypes[i].toNativeZero(module));\r\n }\r\n }\r\n\r\n var returnType = signature.returnType;\r\n this.currentType = returnType;\r\n return module.createBlock(null, [\r\n module.createSetGlobal(this.ensureArgcVar(), // might still be calling a trampoline\r\n module.createI32(numArguments)\r\n ),\r\n module.createCallIndirect(indexArg, operands, signature.toSignatureString())\r\n ], returnType.toNativeType()); // not necessarily wrapped\r\n }\r\n\r\n compileCommaExpression(expression: CommaExpression, contextualType: Type): ExpressionRef {\r\n var expressions = expression.expressions;\r\n var numExpressions = expressions.length;\r\n var exprs = new Array(numExpressions--);\r\n for (let i = 0; i < numExpressions; ++i) {\r\n exprs[i] = this.compileExpression(\r\n expressions[i],\r\n Type.void, // drop all\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n exprs[numExpressions] = this.compileExpression(\r\n expressions[numExpressions],\r\n contextualType, // except last\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n return this.module.createBlock(null, exprs, this.currentType.toNativeType());\r\n }\r\n\r\n compileElementAccessExpression(expression: ElementAccessExpression, contextualType: Type): ExpressionRef {\r\n var target = this.resolver.resolveElementAccess(expression, this.currentFunction); // reports\r\n if (!target) return this.module.createUnreachable();\r\n switch (target.kind) {\r\n case ElementKind.CLASS: {\r\n let isUnchecked = this.currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.expression.range, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n let thisArg = this.compileExpression(\r\n expression.expression,\r\n (target).type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n return this.compileCallDirect(indexedGet, [\r\n expression.elementExpression\r\n ], expression, thisArg);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileFunctionExpression(expression: FunctionExpression, contextualType: Type): ExpressionRef {\r\n var declaration = expression.declaration;\r\n var name = declaration.name;\r\n var simpleName = (name.text.length\r\n ? name.text\r\n : \"anonymous\") + \"|\" + this.functionTable.length.toString(10);\r\n var currentFunction = this.currentFunction;\r\n var prototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n currentFunction.internalName + INNER_DELIMITER + simpleName,\r\n declaration,\r\n null,\r\n DecoratorFlags.NONE\r\n );\r\n var flow = currentFunction.flow;\r\n var instance = this.compileFunctionUsingTypeArguments(\r\n prototype,\r\n [],\r\n flow.contextualTypeArguments,\r\n flow,\r\n declaration\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n this.currentType = instance.signature.type; // TODO: get cached type?\r\n // NOTE that, in order to make this work in every case, the function must be represented by a\r\n // value, so we add it and rely on the optimizer to figure out where it can be called directly.\r\n var index = this.ensureFunctionTableEntry(instance); // reports\r\n return index < 0\r\n ? this.module.createUnreachable()\r\n : this.module.createI32(index);\r\n }\r\n\r\n /**\r\n * Compiles an identifier in the specified context.\r\n * @param retainConstantType Retains the type of inlined constants if `true`, otherwise\r\n * precomputes them according to context.\r\n */\r\n compileIdentifierExpression(\r\n expression: IdentifierExpression,\r\n contextualType: Type,\r\n retainConstantType: bool\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // check special keywords first\r\n switch (expression.kind) {\r\n case NodeKind.NULL: {\r\n let options = this.options;\r\n if (!contextualType.classReference) {\r\n this.currentType = options.usizeType;\r\n }\r\n return options.isWasm64\r\n ? module.createI64(0)\r\n : module.createI32(0);\r\n }\r\n case NodeKind.TRUE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(1);\r\n }\r\n case NodeKind.FALSE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(0);\r\n }\r\n case NodeKind.THIS: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n this.currentType = scopedThis.type;\r\n return module.createGetLocal(scopedThis.index, scopedThis.type.toNativeType());\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let thisType = (parent).type;\r\n if (currentFunction.is(CommonFlags.CONSTRUCTOR)) {\r\n if (!flow.is(FlowFlags.ALLOCATES)) {\r\n flow.set(FlowFlags.ALLOCATES);\r\n // must be conditional because `this` could have been provided by a derived class\r\n this.currentType = thisType;\r\n return module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, expression)\r\n );\r\n }\r\n }\r\n this.currentType = thisType;\r\n return module.createGetLocal(0, thisType.toNativeType());\r\n }\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n case NodeKind.SUPER: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n let scopedThisClass = assert(scopedThis.type.classReference);\r\n let base = scopedThisClass.base;\r\n if (base) {\r\n this.currentType = base.type;\r\n return module.createGetLocal(scopedThis.index, base.type.toNativeType());\r\n }\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let base = (parent).base;\r\n if (base) {\r\n let superType = base.type;\r\n this.currentType = superType;\r\n return module.createGetLocal(0, superType.toNativeType());\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise resolve\r\n var target = this.resolver.resolveIdentifier( // reports\r\n expression,\r\n this.currentEnum || currentFunction\r\n );\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.LOCAL: {\r\n let localType = (target).type;\r\n assert(localType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n let localIndex = (target).index;\r\n assert(localIndex >= 0);\r\n this.currentType = localType;\r\n return this.module.createGetLocal(localIndex, localType.toNativeType());\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field\r\n return this.module.createUnreachable();\r\n }\r\n let globalType = (target).type;\r\n assert(globalType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return this.module.createGetGlobal((target).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // here: if referenced from within the same enum\r\n if (!target.is(CommonFlags.COMPILED)) {\r\n this.error(\r\n DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,\r\n expression.range\r\n );\r\n this.currentType = Type.i32;\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.module.createI32((target).constantValue);\r\n }\r\n return this.module.createGetGlobal((target).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let instance = this.resolver.resolveFunction(\r\n target,\r\n null,\r\n currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!(instance && this.compileFunction(instance))) return module.createUnreachable();\r\n let index = this.ensureFunctionTableEntry(instance);\r\n this.currentType = instance.signature.type;\r\n return this.module.createI32(index);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileInstanceOfExpression(\r\n expression: InstanceOfExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n // NOTE that this differs from TypeScript in that the rhs is a type, not an expression. at the\r\n // time of implementation, this seemed more useful because dynamic rhs expressions are not\r\n // possible in AS anyway.\r\n var expr = this.compileExpressionRetainType(expression.expression, this.options.usizeType, WrapMode.NONE);\r\n var type = this.currentType;\r\n var isType = this.resolver.resolveType(expression.isType);\r\n this.currentType = Type.bool;\r\n if (!isType) return module.createUnreachable();\r\n return type.is(TypeFlags.NULLABLE) && !isType.is(TypeFlags.NULLABLE)\r\n ? type.nonNullableType.isAssignableTo(isType)\r\n ? module.createBinary( // not precomputeable\r\n type.is(TypeFlags.LONG)\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n expr,\r\n type.toNativeZero(module)\r\n )\r\n : module.createI32(0)\r\n : module.createI32(type.isAssignableTo(isType, true) ? 1 : 0);\r\n }\r\n\r\n compileLiteralExpression(\r\n expression: LiteralExpression,\r\n contextualType: Type,\r\n implicitNegate: bool = false\r\n ): ExpressionRef {\r\n var module = this.module;\r\n\r\n switch (expression.literalKind) {\r\n case LiteralKind.ARRAY: {\r\n assert(!implicitNegate);\r\n let classType = contextualType.classReference;\r\n if (\r\n classType &&\r\n classType.prototype == this.program.arrayPrototype\r\n ) {\r\n return this.compileArrayLiteral(\r\n assert(classType.typeArguments)[0],\r\n (expression).elementExpressions,\r\n false, // TODO: isConst?\r\n expression\r\n );\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n case LiteralKind.FLOAT: {\r\n let floatValue = (expression).value;\r\n if (implicitNegate) {\r\n floatValue = -floatValue;\r\n }\r\n if (contextualType == Type.f32) {\r\n return module.createF32(floatValue);\r\n }\r\n this.currentType = Type.f64;\r\n return module.createF64(floatValue);\r\n }\r\n case LiteralKind.INTEGER: {\r\n let intValue = (expression).value;\r\n if (implicitNegate) {\r\n intValue = i64_sub(\r\n i64_new(0),\r\n intValue\r\n );\r\n }\r\n switch (contextualType.kind) {\r\n\r\n // compile to contextualType if matching\r\n\r\n case TypeKind.I8: {\r\n if (i64_is_i8(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U8: {\r\n if (i64_is_u8(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.I16: {\r\n if (i64_is_i16(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U16: {\r\n if (i64_is_u16(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n if (i64_is_i32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n if (i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.BOOL: {\r\n if (i64_is_bool(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n if (!this.options.isWasm64) {\r\n if (i64_is_i32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.USIZE: {\r\n if (!this.options.isWasm64) {\r\n if (i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.F32: {\r\n if (i64_is_f32(intValue)) return module.createF32(i64_to_f32(intValue));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n if (i64_is_f64(intValue)) return module.createF64(i64_to_f64(intValue));\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n break; // compiles to best fitting type below, being dropped\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise compile to best fitting native type\r\n\r\n if (i64_is_i32(intValue)) {\r\n this.currentType = Type.i32;\r\n return module.createI32(i64_low(intValue));\r\n } else if (i64_is_u32(intValue)) {\r\n this.currentType = Type.u32;\r\n return module.createI32(i64_low(intValue));\r\n } else {\r\n this.currentType = Type.i64;\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n }\r\n case LiteralKind.STRING: {\r\n assert(!implicitNegate);\r\n return this.compileStringLiteral(expression);\r\n }\r\n case LiteralKind.OBJECT: {\r\n assert(!implicitNegate);\r\n return this.compileObjectLiteral(expression, contextualType);\r\n }\r\n // case LiteralKind.REGEXP:\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n\r\n /** Ensures that the specified string exists in static memory and returns a pointer to it. */\r\n ensureStaticString(stringValue: string): ExpressionRef {\r\n var program = this.program;\r\n var hasGC = program.hasGC;\r\n var gcHeaderSize = program.gcHeaderSize;\r\n\r\n var stringInstance = assert(program.stringInstance);\r\n var stringSegment: MemorySegment;\r\n\r\n // if the string already exists, reuse it\r\n var segments = this.stringSegments;\r\n if (segments.has(stringValue)) {\r\n stringSegment = segments.get(stringValue);\r\n\r\n // otherwise create it\r\n } else {\r\n let length = stringValue.length;\r\n let headerSize = (stringInstance.currentMemoryOffset + 1) & ~1;\r\n let totalSize = headerSize + length * 2;\r\n\r\n let buf: Uint8Array;\r\n let pos: u32;\r\n\r\n if (hasGC) {\r\n buf = new Uint8Array(gcHeaderSize + totalSize);\r\n pos = gcHeaderSize;\r\n writeI32(ensureGCHook(this, stringInstance), buf, program.gcHookOffset);\r\n } else {\r\n buf = new Uint8Array(totalSize);\r\n pos = 0;\r\n }\r\n writeI32(length, buf, pos + stringInstance.offsetof(\"length\"));\r\n pos += headerSize;\r\n for (let i = 0; i < length; ++i) {\r\n writeI16(stringValue.charCodeAt(i), buf, pos + (i << 1));\r\n }\r\n stringSegment = this.addMemorySegment(buf);\r\n segments.set(stringValue, stringSegment);\r\n }\r\n var stringOffset = stringSegment.offset;\r\n if (hasGC) stringOffset = i64_add(stringOffset, i64_new(gcHeaderSize));\r\n\r\n this.currentType = stringInstance.type;\r\n if (this.options.isWasm64) {\r\n return this.module.createI64(i64_low(stringOffset), i64_high(stringOffset));\r\n } else {\r\n assert(i64_is_u32(stringOffset));\r\n return this.module.createI32(i64_low(stringOffset));\r\n }\r\n }\r\n\r\n compileStringLiteral(expression: StringLiteralExpression): ExpressionRef {\r\n return this.ensureStaticString(expression.value);\r\n }\r\n\r\n /** Ensures that the specified array exists in static memory and returns a pointer to it. */\r\n ensureStaticArray(elementType: Type, values: ExpressionRef[]): ExpressionRef {\r\n var program = this.program;\r\n var hasGC = program.hasGC;\r\n var gcHeaderSize = program.gcHeaderSize;\r\n\r\n var length = values.length;\r\n var byteSize = elementType.byteSize;\r\n var byteLength = length * byteSize;\r\n var usizeTypeSize = this.options.usizeType.byteSize;\r\n\r\n var buf: Uint8Array;\r\n var pos: u32;\r\n\r\n // create the backing ArrayBuffer segment\r\n var bufferInstance = assert(program.arrayBufferInstance);\r\n var bufferHeaderSize = (bufferInstance.currentMemoryOffset + 7) & ~7;\r\n var bufferTotalSize = 1 << (32 - clz(bufferHeaderSize + byteLength - 1));\r\n if (hasGC) {\r\n buf = new Uint8Array(gcHeaderSize + bufferTotalSize);\r\n pos = gcHeaderSize;\r\n writeI32(ensureGCHook(this, bufferInstance), buf, program.gcHookOffset);\r\n } else {\r\n buf = new Uint8Array(bufferTotalSize);\r\n pos = 0;\r\n }\r\n writeI32(byteLength, buf, pos + bufferInstance.offsetof(\"byteLength\"));\r\n pos += bufferHeaderSize;\r\n var nativeType = elementType.toNativeType();\r\n switch (nativeType) {\r\n case NativeType.I32: {\r\n switch (byteSize) {\r\n case 1: {\r\n for (let i = 0; i < length; ++i) {\r\n let value = values[i];\r\n assert(getExpressionType(value) == nativeType);\r\n assert(getExpressionId(value) == ExpressionId.Const);\r\n writeI8(getConstValueI32(value), buf, pos);\r\n pos += 1;\r\n }\r\n break;\r\n }\r\n case 2: {\r\n for (let i = 0; i < length; ++i) {\r\n let value = values[i];\r\n assert(getExpressionType(value) == nativeType);\r\n assert(getExpressionId(value) == ExpressionId.Const);\r\n writeI16(getConstValueI32(value), buf, pos);\r\n pos += 2;\r\n }\r\n break;\r\n }\r\n case 4: {\r\n for (let i = 0; i < length; ++i) {\r\n let value = values[i];\r\n assert(getExpressionType(value) == nativeType);\r\n assert(getExpressionId(value) == ExpressionId.Const);\r\n writeI32(getConstValueI32(value), buf, pos);\r\n pos += 4;\r\n }\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n break;\r\n }\r\n case NativeType.I64: {\r\n for (let i = 0; i < length; ++i) {\r\n let value = values[i];\r\n assert(getExpressionType(value) == nativeType);\r\n assert(getExpressionId(value) == ExpressionId.Const);\r\n writeI64(i64_new(getConstValueI64Low(value), getConstValueI64High(value)), buf, pos);\r\n pos += 8;\r\n }\r\n break;\r\n }\r\n case NativeType.F32: {\r\n for (let i = 0; i < length; ++i) {\r\n let value = values[i];\r\n assert(getExpressionType(value) == nativeType);\r\n assert(getExpressionId(value) == ExpressionId.Const);\r\n writeF32(getConstValueF32(value), buf, pos);\r\n pos += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.F64: {\r\n for (let i = 0; i < length; ++i) {\r\n let value = values[i];\r\n assert(getExpressionType(value) == nativeType);\r\n assert(getExpressionId(value) == ExpressionId.Const);\r\n writeF64(getConstValueF64(value), buf, pos);\r\n pos += 8;\r\n }\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n var bufferSegment = this.addMemorySegment(buf);\r\n var bufferOffset = bufferSegment.offset;\r\n if (hasGC) bufferOffset = i64_add(bufferOffset, i64_new(gcHeaderSize));\r\n\r\n // create the Array segment and return a pointer to it\r\n var arrayPrototype = assert(program.arrayPrototype);\r\n var arrayInstance = assert(this.resolver.resolveClass(arrayPrototype, [ elementType ]));\r\n var arrayHeaderSize = (arrayInstance.currentMemoryOffset + 7) & ~7;\r\n if (hasGC) {\r\n buf = new Uint8Array(gcHeaderSize + arrayHeaderSize);\r\n pos = gcHeaderSize;\r\n writeI32(ensureGCHook(this, arrayInstance), buf, program.gcHookOffset);\r\n } else {\r\n buf = new Uint8Array(arrayHeaderSize);\r\n pos = 0;\r\n }\r\n var arraySegment = this.addMemorySegment(buf);\r\n var arrayOffset = arraySegment.offset;\r\n if (hasGC) arrayOffset = i64_add(arrayOffset, i64_new(gcHeaderSize));\r\n this.currentType = arrayInstance.type;\r\n if (usizeTypeSize == 8) {\r\n writeI64(bufferOffset, buf, pos + arrayInstance.offsetof(\"buffer_\"));\r\n writeI32(length, buf, pos + arrayInstance.offsetof(\"length_\"));\r\n return this.module.createI64(i64_low(arrayOffset), i64_high(arrayOffset));\r\n } else {\r\n assert(i64_is_u32(bufferOffset));\r\n writeI32(i64_low(bufferOffset), buf, pos + arrayInstance.offsetof(\"buffer_\"));\r\n writeI32(length, buf, pos + arrayInstance.offsetof(\"length_\"));\r\n assert(i64_is_u32(arrayOffset));\r\n return this.module.createI32(i64_low(arrayOffset));\r\n }\r\n }\r\n\r\n compileArrayLiteral(\r\n elementType: Type,\r\n expressions: (Expression | null)[],\r\n isConst: bool,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n var module = this.module;\r\n\r\n // find out whether all elements are constant (array is static)\r\n var length = expressions.length;\r\n var compiledValues = new Array(length);\r\n var constantValues = new Array(length);\r\n var nativeElementType = elementType.toNativeType();\r\n var isStatic = true;\r\n for (let i = 0; i < length; ++i) {\r\n let expr = expressions[i]\r\n ? this.compileExpression(expressions[i], elementType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : elementType.toNativeZero(module);\r\n compiledValues[i] = expr;\r\n if (isStatic) {\r\n expr = module.precomputeExpression(compiledValues[i]);\r\n if (getExpressionId(expr) == ExpressionId.Const) {\r\n assert(getExpressionType(expr) == nativeElementType);\r\n constantValues[i] = expr;\r\n } else {\r\n if (isConst) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n reportNode.range\r\n );\r\n }\r\n isStatic = false;\r\n }\r\n }\r\n }\r\n\r\n // make a static array if possible\r\n if (isStatic) return this.ensureStaticArray(elementType, constantValues);\r\n\r\n // otherwise obtain the array type\r\n var arrayPrototype = assert(this.program.arrayPrototype);\r\n if (!arrayPrototype || arrayPrototype.kind != ElementKind.CLASS_PROTOTYPE) return module.createUnreachable();\r\n var arrayInstance = this.resolver.resolveClass(arrayPrototype, [ elementType ]);\r\n if (!arrayInstance) return module.createUnreachable();\r\n var arrayType = arrayInstance.type;\r\n\r\n // and compile an explicit instantiation\r\n this.currentType = arrayType;\r\n var setter = arrayInstance.lookupOverload(OperatorKind.INDEXED_SET, true);\r\n if (!setter) {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n reportNode.range, arrayInstance.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n var nativeArrayType = arrayType.toNativeType();\r\n var currentFunction = this.currentFunction;\r\n var tempLocal = currentFunction.addLocal(arrayType); // can't reuse a temp (used in compiledValues)\r\n var stmts = new Array(2 + length);\r\n var index = 0;\r\n stmts[index++] = module.createSetLocal(tempLocal.index,\r\n this.makeCallDirect(assert(arrayInstance.constructorInstance), [\r\n module.createI32(0), // this\r\n module.createI32(length)\r\n ])\r\n );\r\n for (let i = 0; i < length; ++i) {\r\n stmts[index++] = this.makeCallDirect(setter, [\r\n module.createGetLocal(tempLocal.index, nativeArrayType), // this\r\n module.createI32(i),\r\n compiledValues[i]\r\n ]);\r\n }\r\n assert(index + 1 == stmts.length);\r\n stmts[index] = module.createGetLocal(tempLocal.index, nativeArrayType);\r\n currentFunction.freeTempLocal(tempLocal); // but can be reused now\r\n this.currentType = arrayType;\r\n return module.createBlock(null, stmts, nativeArrayType);\r\n }\r\n\r\n compileObjectLiteral(expression: ObjectLiteralExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n\r\n // contextual type must be a class\r\n var classReference = contextualType.classReference;\r\n if (!classReference || classReference.is(CommonFlags.ABSTRACT)) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n expression.range, \"\", contextualType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // if present, check that the constructor is compatible with object literals\r\n var ctor = classReference.constructorInstance;\r\n if (ctor) {\r\n // TODO: if the constructor requires parameters, check whether these are given as part of the\r\n // object literal and use them to call the ctor while not generating a store.\r\n if (ctor.signature.requiredParameters) {\r\n this.error(\r\n DiagnosticCode.Constructor_of_class_0_must_not_require_any_arguments,\r\n expression.range, classReference.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (ctor.is(CommonFlags.PRIVATE)) {\r\n this.error(\r\n DiagnosticCode.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration,\r\n expression.range, classReference.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (ctor.is(CommonFlags.PROTECTED)) {\r\n this.error(\r\n DiagnosticCode.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration,\r\n expression.range, classReference.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // check and compile field values\r\n var names = expression.names;\r\n var numNames = names.length;\r\n var values = expression.values;\r\n var members = classReference.members;\r\n var hasErrors = false;\r\n var exprs = new Array(numNames + 2);\r\n var tempLocal = this.currentFunction.getTempLocal(this.options.usizeType);\r\n assert(numNames == values.length);\r\n for (let i = 0, k = numNames; i < k; ++i) {\r\n let member = members ? members.get(names[i].text) : null;\r\n if (!member || member.kind != ElementKind.FIELD) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n names[i].range, names[i].text, classReference.toString()\r\n );\r\n hasErrors = true;\r\n continue;\r\n }\r\n let type = (member).type;\r\n exprs[i + 1] = this.module.createStore( // TODO: handle setters as well\r\n type.byteSize,\r\n this.module.createGetLocal(tempLocal.index, this.options.nativeSizeType),\r\n this.compileExpression(values[i], (member).type, ConversionKind.IMPLICIT, WrapMode.NONE),\r\n type.toNativeType(),\r\n (member).memoryOffset\r\n );\r\n }\r\n this.currentType = classReference.type.nonNullableType;\r\n if (hasErrors) return module.createUnreachable();\r\n\r\n // allocate a new instance first and assign 'this' to the temp. local\r\n exprs[0] = module.createSetLocal(\r\n tempLocal.index,\r\n compileAllocate(this, classReference, expression)\r\n );\r\n\r\n // once all field values have been set, return 'this'\r\n exprs[exprs.length - 1] = module.createGetLocal(tempLocal.index, this.options.nativeSizeType);\r\n\r\n return module.createBlock(null, exprs, this.options.nativeSizeType);\r\n }\r\n\r\n compileNewExpression(expression: NewExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var options = this.options;\r\n var currentFunction = this.currentFunction;\r\n\r\n // obtain the class being instantiated\r\n var target = this.resolver.resolveExpression( // reports\r\n expression.expression,\r\n currentFunction\r\n );\r\n if (!target) return module.createUnreachable();\r\n if (target.kind != ElementKind.CLASS_PROTOTYPE) {\r\n this.error(\r\n DiagnosticCode.Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature,\r\n expression.expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n var classPrototype = target;\r\n var classInstance: Class | null = null;\r\n var typeArguments = expression.typeArguments;\r\n var classReference: Class | null;\r\n if (\r\n !typeArguments &&\r\n (classReference = contextualType.classReference) !== null &&\r\n classReference.is(CommonFlags.GENERIC)\r\n ) {\r\n classInstance = this.resolver.resolveClass(\r\n classPrototype,\r\n classReference.typeArguments,\r\n currentFunction.flow.contextualTypeArguments\r\n );\r\n } else {\r\n classInstance = this.resolver.resolveClassInclTypeArguments(\r\n classPrototype,\r\n typeArguments,\r\n currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n }\r\n if (!classInstance) return module.createUnreachable();\r\n\r\n var expr: ExpressionRef;\r\n\r\n // traverse to the top-most visible constructor\r\n var currentClassInstance: Class | null = classInstance;\r\n var constructorInstance: Function | null = null;\r\n do {\r\n constructorInstance = currentClassInstance.constructorInstance;\r\n if (constructorInstance) break; // TODO: check visibility\r\n } while (currentClassInstance = currentClassInstance.base);\r\n\r\n // if a constructor is present, call it with a zero `this`\r\n if (constructorInstance) {\r\n expr = this.compileCallDirect(constructorInstance, expression.arguments, expression,\r\n options.usizeType.toNativeZero(module)\r\n );\r\n\r\n // otherwise simply allocate a new instance and initialize its fields\r\n } else {\r\n expr = this.makeAllocate(classInstance, expression);\r\n }\r\n\r\n this.currentType = classInstance.type;\r\n return expr;\r\n }\r\n\r\n compileParenthesizedExpression(\r\n expression: ParenthesizedExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n // does not change types, just order\r\n return this.compileExpression(\r\n expression.expression,\r\n contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n }\r\n\r\n /**\r\n * Compiles a property access in the specified context.\r\n * @param retainConstantType Retains the type of inlined constants if `true`, otherwise\r\n * precomputes them according to context.\r\n */\r\n compilePropertyAccessExpression(\r\n propertyAccess: PropertyAccessExpression,\r\n contextualType: Type,\r\n retainConstantType: bool\r\n ): ExpressionRef {\r\n var module = this.module;\r\n\r\n var target = this.resolver.resolvePropertyAccess(propertyAccess, this.currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL: { // static property\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field\r\n return module.createUnreachable();\r\n }\r\n let globalType = (target).type;\r\n assert(globalType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return module.createGetGlobal((target).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // enum value\r\n let parent = (target).parent;\r\n assert(parent !== null && parent.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(parent)) {\r\n this.currentType = Type.i32;\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return module.createI32((target).constantValue);\r\n }\r\n return module.createGetGlobal((target).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FIELD: { // instance field\r\n let thisExpression = assert(this.resolver.currentThisExpression);\r\n assert((target).memoryOffset >= 0);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n this.currentType = (target).type;\r\n return module.createLoad(\r\n (target).type.byteSize,\r\n (target).type.is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n thisExpr,\r\n (target).type.toNativeType(),\r\n (target).memoryOffset\r\n );\r\n }\r\n case ElementKind.PROPERTY: {// instance property (here: getter)\r\n return this.compileGetter(target, propertyAccess);\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n this.error(\r\n DiagnosticCode.Cannot_access_method_0_without_calling_it_as_it_requires_this_to_be_set,\r\n propertyAccess.range, (target).simpleName\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n propertyAccess.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n private compileGetter(target: Property, reportNode: Node): ExpressionRef {\r\n var prototype = target.getterPrototype;\r\n if (prototype) {\r\n let instance = this.resolver.resolveFunction(prototype, null);\r\n if (!instance) return this.module.createUnreachable();\r\n let signature = instance.signature;\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n 0,\r\n instance.is(CommonFlags.INSTANCE),\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n let inline = (instance.decoratorFlags & DecoratorFlags.INLINE) != 0;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let thisExpression = assert(this.resolver.currentThisExpression); //!!!\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], reportNode, thisExpr, inline);\r\n } else {\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], reportNode, 0, inline);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n reportNode.range, (target).simpleName, (target).parent.toString()\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n\r\n compileTernaryExpression(expression: TernaryExpression, contextualType: Type): ExpressionRef {\r\n var ifThen = expression.ifThen;\r\n var ifElse = expression.ifElse;\r\n var currentFunction = this.currentFunction;\r\n var parentFlow = currentFunction.flow;\r\n\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(expression.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n\r\n if (\r\n !this.options.noTreeShaking ||\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT)\r\n ) {\r\n // Try to eliminate unnecesssary branches if the condition is constant\r\n let condExprPrecomp = this.module.precomputeExpression(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n return getConstValueI32(condExprPrecomp)\r\n ? this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE)\r\n : this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(expression.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n var ifThenFlow = parentFlow.fork();\r\n currentFunction.flow = ifThenFlow;\r\n var ifThenExpr = this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE);\r\n var ifThenType = this.currentType;\r\n ifThenFlow.free();\r\n\r\n var ifElseFlow = parentFlow.fork();\r\n currentFunction.flow = ifElseFlow;\r\n var ifElseExpr = this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n var ifElseType = this.currentType;\r\n currentFunction.flow = ifElseFlow.free();\r\n\r\n parentFlow.inheritMutual(ifThenFlow, ifElseFlow);\r\n\r\n var commonType = Type.commonCompatible(ifThenType, ifElseType, false);\r\n if (!commonType) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n expression.range, ifThenType.toString(), ifElseType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n ifThenExpr = this.convertExpression(\r\n ifThenExpr,\r\n ifThenType,\r\n commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n ifThen\r\n );\r\n ifElseExpr = this.convertExpression(\r\n ifElseExpr,\r\n ifElseType,\r\n commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n ifElse\r\n );\r\n this.currentType = commonType;\r\n return this.module.createIf(condExpr, ifThenExpr, ifElseExpr);\r\n }\r\n\r\n compileUnaryPostfixExpression(expression: UnaryPostfixExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // make a getter for the expression (also obtains the type)\r\n var getValue = this.compileExpression( // reports\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // shortcut if compiling the getter already failed\r\n if (getExpressionId(getValue) == ExpressionId.Unreachable) return getValue;\r\n\r\n var currentType = this.currentType;\r\n\r\n // if the value isn't dropped, a temp. local is required to remember the original value\r\n var tempLocal: Local | null = null;\r\n if (contextualType != Type.void) {\r\n tempLocal = currentFunction.getTempLocal(currentType, false);\r\n getValue = module.createTeeLocal(\r\n tempLocal.index,\r\n getValue\r\n );\r\n }\r\n\r\n var calcValue: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS_PLUS: {\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 calcValue = module.createBinary(\r\n BinaryOp.AddI32,\r\n getValue,\r\n module.createI32(1)\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\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.POSTFIX_INC);\r\n if (overload) {\r\n calcValue = this.compileUnaryOverload(overload, expression.operand, getValue, 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 case TypeKind.ISIZE: {\r\n let options = this.options;\r\n calcValue = module.createBinary(\r\n options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n getValue,\r\n currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n calcValue = module.createBinary(\r\n BinaryOp.AddI64,\r\n getValue,\r\n module.createI64(1)\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n calcValue = module.createBinary(\r\n BinaryOp.AddF32,\r\n getValue,\r\n module.createF32(1)\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n calcValue = module.createBinary(\r\n BinaryOp.AddF64,\r\n getValue,\r\n module.createF64(1)\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 break;\r\n }\r\n case Token.MINUS_MINUS: {\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 calcValue = module.createBinary(\r\n BinaryOp.SubI32,\r\n getValue,\r\n module.createI32(1)\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\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.POSTFIX_DEC);\r\n if (overload) {\r\n calcValue = this.compileUnaryOverload(overload, expression.operand, getValue, 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 case TypeKind.ISIZE: {\r\n let options = this.options;\r\n calcValue = module.createBinary(\r\n options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n getValue,\r\n currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n calcValue = module.createBinary(\r\n BinaryOp.SubI64,\r\n getValue,\r\n module.createI64(1)\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n calcValue = module.createBinary(\r\n BinaryOp.SubF32,\r\n getValue,\r\n module.createF32(1)\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n calcValue = module.createBinary(\r\n BinaryOp.SubF64,\r\n getValue,\r\n module.createF64(1)\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 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 (!tempLocal) {\r\n this.currentType = Type.void;\r\n return this.compileAssignmentWithValue(expression.operand,\r\n calcValue,\r\n false\r\n );\r\n }\r\n\r\n // otherwise use the temp. local for the intermediate value (always possibly overflows)\r\n var setValue = this.compileAssignmentWithValue(expression.operand,\r\n calcValue, // also tees getValue to tempLocal\r\n false\r\n );\r\n\r\n this.currentType = tempLocal.type;\r\n currentFunction.freeTempLocal(tempLocal);\r\n var nativeType = tempLocal.type.toNativeType();\r\n\r\n return module.createBlock(null, [\r\n setValue,\r\n module.createGetLocal(tempLocal.index, nativeType)\r\n ], nativeType); // result of 'x++' / 'x--' might overflow\r\n }\r\n\r\n compileUnaryPrefixExpression(\r\n expression: UnaryPrefixExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var compound = false;\r\n var expr: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PLUS);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // nop\r\n break;\r\n }\r\n case Token.MINUS: {\r\n if (expression.operand.kind == NodeKind.LITERAL && (\r\n (expression.operand).literalKind == LiteralKind.INTEGER ||\r\n (expression.operand).literalKind == LiteralKind.FLOAT\r\n )) {\r\n // implicitly negate integer and float literals. also enables proper checking of literal ranges.\r\n expr = this.compileLiteralExpression(expression.operand, contextualType, true);\r\n // compileExpression normally does this:\r\n if (this.options.sourceMap) this.addDebugLocation(expr, expression.range);\r\n break;\r\n }\r\n\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.MINUS);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.SubI32, module.createI32(0), expr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n this.currentType.toNativeZero(module),\r\n expr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, module.createI64(0), expr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createUnary(UnaryOp.NegF32, expr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createUnary(UnaryOp.NegF64, expr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.PLUS_PLUS: {\r\n compound = true;\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PREFIX_INC);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.AddI32, expr, this.module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n expr,\r\n this.currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AddI64, expr, module.createI64(1));\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.AddF32, expr, module.createF32(1));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.AddF64, expr, module.createF64(1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n compound = true;\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PREFIX_DEC);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.SubI32, expr, module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n expr,\r\n this.currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, expr, module.createI64(1));\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.SubF32, expr, module.createF32(1));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.SubF64, expr, module.createF64(1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.EXCLAMATION: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.NOT);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n // allow '!' for references even without an overload\r\n }\r\n\r\n expr = this.makeIsFalseish(expr, this.currentType);\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.TILDE: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType.is(TypeFlags.FLOAT)\r\n ? Type.i64\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_NOT);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n } else {\r\n expr = this.convertExpression(\r\n expr,\r\n this.currentType, this.currentType.intType,\r\n ConversionKind.IMPLICIT, WrapMode.NONE,\r\n expression.operand\r\n );\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.XorI32, expr, module.createI32(-1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n expr,\r\n this.currentType.toNativeNegOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.XorI64, expr, module.createI64(-1, -1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.TYPEOF: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(expression.operand, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n\r\n /** Makes sure that a 32-bit integer value is wrapped to a valid value of the specified type. */\r\n ensureSmallIntegerWrap(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n var flow = this.currentFunction.flow;\r\n switch (type.kind) {\r\n case TypeKind.I8: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = this.options.hasFeature(Feature.SIGN_EXTENSION)\r\n ? module.createUnary(UnaryOp.ExtendI8ToI32, expr)\r\n : module.createBinary(BinaryOp.ShrI32,\r\n module.createBinary(BinaryOp.ShlI32,\r\n expr,\r\n module.createI32(24)\r\n ),\r\n module.createI32(24)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.I16: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = this.options.hasFeature(Feature.SIGN_EXTENSION)\r\n ? module.createUnary(UnaryOp.ExtendI16ToI32, expr)\r\n : module.createBinary(BinaryOp.ShrI32,\r\n module.createBinary(BinaryOp.ShlI32,\r\n expr,\r\n module.createI32(16)\r\n ),\r\n module.createI32(16)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.U8: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xff)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.U16: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xffff)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.BOOL: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0x1)\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n return expr;\r\n }\r\n\r\n /** Creates a comparison whether an expression is 'false' in a broader sense. */\r\n makeIsFalseish(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n switch (type.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = this.ensureSmallIntegerWrap(expr, type);\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return module.createUnary(UnaryOp.EqzI32, expr);\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createUnary(UnaryOp.EqzI64, expr);\r\n }\r\n case TypeKind.USIZE: // TODO: strings?\r\n case TypeKind.ISIZE: {\r\n return module.createUnary(type.size == 64 ? UnaryOp.EqzI64 : UnaryOp.EqzI32, expr);\r\n }\r\n case TypeKind.F32: {\r\n return module.createBinary(BinaryOp.EqF32, expr, module.createF32(0));\r\n }\r\n case TypeKind.F64: {\r\n return module.createBinary(BinaryOp.EqF64, expr, module.createF64(0));\r\n }\r\n default: {\r\n assert(false);\r\n return module.createI32(1);\r\n }\r\n }\r\n }\r\n\r\n /** Creates a comparison whether an expression is 'true' in a broader sense. */\r\n makeIsTrueish(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n switch (type.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = this.ensureSmallIntegerWrap(expr, type);\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return expr;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createBinary(BinaryOp.NeI64, expr, module.createI64(0));\r\n }\r\n case TypeKind.USIZE: // TODO: strings?\r\n case TypeKind.ISIZE: {\r\n return type.size == 64\r\n ? module.createBinary(BinaryOp.NeI64, expr, module.createI64(0))\r\n : expr;\r\n }\r\n case TypeKind.F32: {\r\n return module.createBinary(BinaryOp.NeF32, expr, module.createF32(0));\r\n }\r\n case TypeKind.F64: {\r\n return module.createBinary(BinaryOp.NeF64, expr, module.createF64(0));\r\n }\r\n default: {\r\n assert(false);\r\n return module.createI32(0);\r\n }\r\n }\r\n }\r\n\r\n /** Makes an allocation expression for an instance of the specified class. */\r\n makeAllocate(classInstance: Class, reportNode: Node): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var nativeSizeType = this.options.nativeSizeType;\r\n\r\n // allocate the necessary memory and tee the pointer to a temp. local for reuse\r\n var tempLocal = currentFunction.getTempLocal(classInstance.type, false);\r\n var initializers = new Array();\r\n initializers.push(\r\n module.createSetLocal(tempLocal.index,\r\n compileAllocate(this, classInstance, reportNode)\r\n )\r\n );\r\n\r\n // apply field initializers\r\n if (classInstance.members) {\r\n for (let member of classInstance.members.values()) {\r\n if (member.kind == ElementKind.FIELD) {\r\n let field = member;\r\n let fieldType = field.type;\r\n let nativeFieldType = fieldType.toNativeType();\r\n let fieldDeclaration = field.prototype.declaration;\r\n assert(!field.isAny(CommonFlags.CONST));\r\n if (fieldDeclaration.initializer) { // use initializer\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n this.compileExpression( // reports\r\n fieldDeclaration.initializer,\r\n fieldType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n ),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n } else { // initialize with zero\r\n // TODO: might be unnecessary if the ctor initializes the field\r\n let parameterIndex = (field.prototype.declaration).parameterIndex;\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n parameterIndex >= 0 // initialized via parameter\r\n ? module.createGetLocal(1 + parameterIndex, nativeFieldType)\r\n : fieldType.toNativeZero(module),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n }\r\n }\r\n }\r\n }\r\n\r\n // return `this`\r\n initializers.push(\r\n module.createGetLocal(tempLocal.index, nativeSizeType)\r\n );\r\n\r\n currentFunction.freeTempLocal(tempLocal);\r\n this.currentType = classInstance.type;\r\n return module.createBlock(null, initializers, nativeSizeType);\r\n }\r\n\r\n /** Makes a conditional allocation expression inside of the constructor of the specified class. */\r\n makeConditionalAllocate(classInstance: Class, reportNode: Node): ExpressionRef {\r\n // requires that `this` is the first local\r\n var module = this.module;\r\n var nativeSizeType = this.options.nativeSizeType;\r\n this.currentType = classInstance.type;\r\n return module.createIf(\r\n nativeSizeType == NativeType.I64\r\n ? module.createBinary(\r\n BinaryOp.NeI64,\r\n module.createGetLocal(0, NativeType.I64),\r\n module.createI64(0)\r\n )\r\n : module.createGetLocal(0, NativeType.I32),\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createTeeLocal(0,\r\n this.makeAllocate(classInstance, reportNode)\r\n )\r\n );\r\n }\r\n\r\n /** Adds the debug location of the specified expression at the specified range to the source map. */\r\n addDebugLocation(expr: ExpressionRef, range: Range): void {\r\n var currentFunction = this.currentFunction;\r\n var source = range.source;\r\n if (source.debugInfoIndex < 0) source.debugInfoIndex = this.module.addDebugInfoFile(source.normalizedPath);\r\n range.debugInfoRef = expr;\r\n currentFunction.debugLocations.push(range);\r\n }\r\n}\r\n\r\n// helpers\r\n\r\nfunction mangleImportName(\r\n element: Element,\r\n declaration: DeclarationStatement\r\n): void {\r\n // by default, use the file name as the module name\r\n mangleImportName_moduleName = declaration.range.source.simplePath;\r\n // and the internal name of the element within that file as the element name\r\n mangleImportName_elementName = declaration.programLevelInternalName;\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 one argument is given, override just the element name\r\n // if two arguments are given, override both module and element name\r\n if (arg.kind == NodeKind.LITERAL && (arg).literalKind == LiteralKind.STRING) {\r\n mangleImportName_elementName = (arg).value;\r\n if (args.length >= 2) {\r\n arg = args[1];\r\n if (arg.kind == NodeKind.LITERAL && (arg).literalKind == LiteralKind.STRING) {\r\n mangleImportName_moduleName = mangleImportName_elementName;\r\n mangleImportName_elementName = (arg).value;\r\n if (args.length > 2) {\r\n program.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n decorator.range, \"2\", args.length.toString()\r\n );\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.String_literal_expected,\r\n arg.range\r\n );\r\n }\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.String_literal_expected,\r\n arg.range\r\n );\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n decorator.range, \"1\", \"0\"\r\n );\r\n }\r\n}\r\n\r\nvar mangleImportName_moduleName: string;\r\nvar mangleImportName_elementName: string;\r\n","/**\r\n * Generated from diagnosticsMessages.json. Do not edit.\r\n * @module diagnostics\r\n *//***/\r\n\r\n/* tslint:disable:max-line-length */\r\n\r\n/** Enum of available diagnostic codes. */\r\nexport enum DiagnosticCode {\r\n Operation_not_supported = 100,\r\n Operation_is_unsafe = 101,\r\n User_defined_0 = 102,\r\n Conversion_from_type_0_to_1_requires_an_explicit_cast = 200,\r\n Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit = 201,\r\n Type_0_cannot_be_changed_to_type_1 = 202,\r\n Type_0_cannot_be_reinterpreted_as_type_1 = 203,\r\n Basic_type_0_cannot_be_nullable = 204,\r\n Cannot_export_a_mutable_global = 205,\r\n Compiling_constant_with_non_constant_initializer_as_mutable = 206,\r\n Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa = 207,\r\n Unmanaged_classes_cannot_implement_interfaces = 208,\r\n Invalid_regular_expression_flags = 209,\r\n Implementation_0_must_match_the_signature_1 = 210,\r\n Class_0_is_sealed_and_cannot_be_extended = 211,\r\n Decorator_0_is_not_valid_here = 212,\r\n Duplicate_decorator = 213,\r\n An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf = 214,\r\n Optional_parameter_must_have_an_initializer = 215,\r\n Constructor_of_class_0_must_not_require_any_arguments = 216,\r\n Function_0_cannot_be_inlined_into_itself = 217,\r\n Cannot_access_method_0_without_calling_it_as_it_requires_this_to_be_set = 218,\r\n Optional_properties_are_not_supported = 219,\r\n Unterminated_string_literal = 1002,\r\n Identifier_expected = 1003,\r\n _0_expected = 1005,\r\n A_file_cannot_have_a_reference_to_itself = 1006,\r\n Trailing_comma_not_allowed = 1009,\r\n Unexpected_token = 1012,\r\n A_rest_parameter_must_be_last_in_a_parameter_list = 1014,\r\n Parameter_cannot_have_question_mark_and_initializer = 1015,\r\n A_required_parameter_cannot_follow_an_optional_parameter = 1016,\r\n Statements_are_not_allowed_in_ambient_contexts = 1036,\r\n Initializers_are_not_allowed_in_ambient_contexts = 1039,\r\n _0_modifier_cannot_be_used_here = 1042,\r\n A_rest_parameter_cannot_be_optional = 1047,\r\n A_rest_parameter_cannot_have_an_initializer = 1048,\r\n A_set_accessor_must_have_exactly_one_parameter = 1049,\r\n A_set_accessor_parameter_cannot_have_an_initializer = 1052,\r\n A_get_accessor_cannot_have_parameters = 1054,\r\n Enum_member_must_have_initializer = 1061,\r\n Type_parameters_cannot_appear_on_a_constructor_declaration = 1092,\r\n Type_annotation_cannot_appear_on_a_constructor_declaration = 1093,\r\n An_accessor_cannot_have_type_parameters = 1094,\r\n A_set_accessor_cannot_have_a_return_type_annotation = 1095,\r\n Type_parameter_list_cannot_be_empty = 1098,\r\n A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement = 1104,\r\n A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement = 1105,\r\n A_return_statement_can_only_be_used_within_a_function_body = 1108,\r\n Expression_expected = 1109,\r\n Type_expected = 1110,\r\n A_default_clause_cannot_appear_more_than_once_in_a_switch_statement = 1113,\r\n Duplicate_label_0 = 1114,\r\n Octal_literals_are_not_allowed_in_strict_mode = 1121,\r\n Digit_expected = 1124,\r\n Hexadecimal_digit_expected = 1125,\r\n Unexpected_end_of_text = 1126,\r\n Invalid_character = 1127,\r\n _case_or_default_expected = 1130,\r\n A_declare_modifier_cannot_be_used_in_an_already_ambient_context = 1038,\r\n Type_argument_expected = 1140,\r\n String_literal_expected = 1141,\r\n Line_break_not_permitted_here = 1142,\r\n Declaration_expected = 1146,\r\n _const_declarations_must_be_initialized = 1155,\r\n Unterminated_regular_expression_literal = 1161,\r\n Interface_declaration_cannot_have_implements_clause = 1176,\r\n Binary_digit_expected = 1177,\r\n Octal_digit_expected = 1178,\r\n An_implementation_cannot_be_declared_in_ambient_contexts = 1183,\r\n An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive = 1198,\r\n Unterminated_Unicode_escape_sequence = 1199,\r\n Decorators_are_not_valid_here = 1206,\r\n _abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration = 1242,\r\n Method_0_cannot_have_an_implementation_because_it_is_marked_abstract = 1245,\r\n A_definite_assignment_assertion_is_not_permitted_in_this_context = 1255,\r\n A_class_may_only_extend_another_class = 1311,\r\n A_parameter_property_cannot_be_declared_using_a_rest_parameter = 1317,\r\n Duplicate_identifier_0 = 2300,\r\n Cannot_find_name_0 = 2304,\r\n Module_0_has_no_exported_member_1 = 2305,\r\n Generic_type_0_requires_1_type_argument_s = 2314,\r\n Type_0_is_not_generic = 2315,\r\n Type_0_is_not_assignable_to_type_1 = 2322,\r\n Index_signature_is_missing_in_type_0 = 2329,\r\n _this_cannot_be_referenced_in_current_location = 2332,\r\n _super_can_only_be_referenced_in_a_derived_class = 2335,\r\n Property_0_does_not_exist_on_type_1 = 2339,\r\n Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures = 2349,\r\n Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature = 2351,\r\n A_function_whose_declared_type_is_not_void_must_return_a_value = 2355,\r\n The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access = 2357,\r\n The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access = 2364,\r\n Operator_0_cannot_be_applied_to_types_1_and_2 = 2365,\r\n _get_and_set_accessor_must_have_the_same_type = 2380,\r\n Constructor_implementation_is_missing = 2390,\r\n Function_implementation_is_missing_or_not_immediately_following_the_declaration = 2391,\r\n Multiple_constructor_implementations_are_not_allowed = 2392,\r\n Duplicate_function_implementation = 2393,\r\n Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local = 2395,\r\n Type_0_has_no_property_1 = 2460,\r\n The_0_operator_cannot_be_applied_to_type_1 = 2469,\r\n In_const_enum_declarations_member_initializer_must_be_constant_expression = 2474,\r\n Export_declaration_conflicts_with_exported_declaration_of_0 = 2484,\r\n Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property = 2540,\r\n The_target_of_an_assignment_must_be_a_variable_or_a_property_access = 2541,\r\n Index_signature_in_type_0_only_permits_reading = 2542,\r\n Expected_0_arguments_but_got_1 = 2554,\r\n Expected_at_least_0_arguments_but_got_1 = 2555,\r\n Expected_0_type_arguments_but_got_1 = 2558,\r\n A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums = 2651,\r\n Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration = 2673,\r\n Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration = 2674,\r\n Namespace_0_has_no_exported_member_1 = 2694,\r\n File_0_not_found = 6054,\r\n Numeric_separators_are_not_allowed_here = 6188,\r\n Multiple_consecutive_numeric_separators_are_not_permitted = 6189\r\n}\r\n\r\n/** Translates a diagnostic code to its respective string. */\r\nexport function diagnosticCodeToString(code: DiagnosticCode): string {\r\n switch (code) {\r\n case 100: return \"Operation not supported.\";\r\n case 101: return \"Operation is unsafe.\";\r\n case 102: return \"User-defined: {0}\";\r\n case 200: return \"Conversion from type '{0}' to '{1}' requires an explicit cast.\";\r\n case 201: return \"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.\";\r\n case 202: return \"Type '{0}' cannot be changed to type '{1}'.\";\r\n case 203: return \"Type '{0}' cannot be reinterpreted as type '{1}'.\";\r\n case 204: return \"Basic type '{0}' cannot be nullable.\";\r\n case 205: return \"Cannot export a mutable global.\";\r\n case 206: return \"Compiling constant with non-constant initializer as mutable.\";\r\n case 207: return \"Unmanaged classes cannot extend managed classes and vice-versa.\";\r\n case 208: return \"Unmanaged classes cannot implement interfaces.\";\r\n case 209: return \"Invalid regular expression flags.\";\r\n case 210: return \"Implementation '{0}' must match the signature '{1}'.\";\r\n case 211: return \"Class '{0}' is sealed and cannot be extended.\";\r\n case 212: return \"Decorator '{0}' is not valid here.\";\r\n case 213: return \"Duplicate decorator.\";\r\n case 214: return \"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.\";\r\n case 215: return \"Optional parameter must have an initializer.\";\r\n case 216: return \"Constructor of class '{0}' must not require any arguments.\";\r\n case 217: return \"Function '{0}' cannot be inlined into itself.\";\r\n case 218: return \"Cannot access method '{0}' without calling it as it requires 'this' to be set.\";\r\n case 219: return \"Optional properties are not supported.\";\r\n case 1002: return \"Unterminated string literal.\";\r\n case 1003: return \"Identifier expected.\";\r\n case 1005: return \"'{0}' expected.\";\r\n case 1006: return \"A file cannot have a reference to itself.\";\r\n case 1009: return \"Trailing comma not allowed.\";\r\n case 1012: return \"Unexpected token.\";\r\n case 1014: return \"A rest parameter must be last in a parameter list.\";\r\n case 1015: return \"Parameter cannot have question mark and initializer.\";\r\n case 1016: return \"A required parameter cannot follow an optional parameter.\";\r\n case 1036: return \"Statements are not allowed in ambient contexts.\";\r\n case 1039: return \"Initializers are not allowed in ambient contexts.\";\r\n case 1042: return \"'{0}' modifier cannot be used here.\";\r\n case 1047: return \"A rest parameter cannot be optional.\";\r\n case 1048: return \"A rest parameter cannot have an initializer.\";\r\n case 1049: return \"A 'set' accessor must have exactly one parameter.\";\r\n case 1052: return \"A 'set' accessor parameter cannot have an initializer.\";\r\n case 1054: return \"A 'get' accessor cannot have parameters.\";\r\n case 1061: return \"Enum member must have initializer.\";\r\n case 1092: return \"Type parameters cannot appear on a constructor declaration.\";\r\n case 1093: return \"Type annotation cannot appear on a constructor declaration.\";\r\n case 1094: return \"An accessor cannot have type parameters.\";\r\n case 1095: return \"A 'set' accessor cannot have a return type annotation.\";\r\n case 1098: return \"Type parameter list cannot be empty.\";\r\n case 1104: return \"A 'continue' statement can only be used within an enclosing iteration statement.\";\r\n case 1105: return \"A 'break' statement can only be used within an enclosing iteration or switch statement.\";\r\n case 1108: return \"A 'return' statement can only be used within a function body.\";\r\n case 1109: return \"Expression expected.\";\r\n case 1110: return \"Type expected.\";\r\n case 1113: return \"A 'default' clause cannot appear more than once in a 'switch' statement.\";\r\n case 1114: return \"Duplicate label '{0}'.\";\r\n case 1121: return \"Octal literals are not allowed in strict mode.\";\r\n case 1124: return \"Digit expected.\";\r\n case 1125: return \"Hexadecimal digit expected.\";\r\n case 1126: return \"Unexpected end of text.\";\r\n case 1127: return \"Invalid character.\";\r\n case 1130: return \"'case' or 'default' expected.\";\r\n case 1038: return \"A 'declare' modifier cannot be used in an already ambient context.\";\r\n case 1140: return \"Type argument expected.\";\r\n case 1141: return \"String literal expected.\";\r\n case 1142: return \"Line break not permitted here.\";\r\n case 1146: return \"Declaration expected.\";\r\n case 1155: return \"'const' declarations must be initialized.\";\r\n case 1161: return \"Unterminated regular expression literal.\";\r\n case 1176: return \"Interface declaration cannot have 'implements' clause.\";\r\n case 1177: return \"Binary digit expected.\";\r\n case 1178: return \"Octal digit expected.\";\r\n case 1183: return \"An implementation cannot be declared in ambient contexts.\";\r\n case 1198: return \"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.\";\r\n case 1199: return \"Unterminated Unicode escape sequence.\";\r\n case 1206: return \"Decorators are not valid here.\";\r\n case 1242: return \"'abstract' modifier can only appear on a class, method, or property declaration.\";\r\n case 1245: return \"Method '{0}' cannot have an implementation because it is marked abstract.\";\r\n case 1255: return \"A definite assignment assertion '!' is not permitted in this context.\";\r\n case 1311: return \"A class may only extend another class.\";\r\n case 1317: return \"A parameter property cannot be declared using a rest parameter.\";\r\n case 2300: return \"Duplicate identifier '{0}'.\";\r\n case 2304: return \"Cannot find name '{0}'.\";\r\n case 2305: return \"Module '{0}' has no exported member '{1}'.\";\r\n case 2314: return \"Generic type '{0}' requires {1} type argument(s).\";\r\n case 2315: return \"Type '{0}' is not generic.\";\r\n case 2322: return \"Type '{0}' is not assignable to type '{1}'.\";\r\n case 2329: return \"Index signature is missing in type '{0}'.\";\r\n case 2332: return \"'this' cannot be referenced in current location.\";\r\n case 2335: return \"'super' can only be referenced in a derived class.\";\r\n case 2339: return \"Property '{0}' does not exist on type '{1}'.\";\r\n case 2349: return \"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.\";\r\n case 2351: return \"Cannot use 'new' with an expression whose type lacks a construct signature.\";\r\n case 2355: return \"A function whose declared type is not 'void' must return a value.\";\r\n case 2357: return \"The operand of an increment or decrement operator must be a variable or a property access.\";\r\n case 2364: return \"The left-hand side of an assignment expression must be a variable or a property access.\";\r\n case 2365: return \"Operator '{0}' cannot be applied to types '{1}' and '{2}'.\";\r\n case 2380: return \"'get' and 'set' accessor must have the same type.\";\r\n case 2390: return \"Constructor implementation is missing.\";\r\n case 2391: return \"Function implementation is missing or not immediately following the declaration.\";\r\n case 2392: return \"Multiple constructor implementations are not allowed.\";\r\n case 2393: return \"Duplicate function implementation.\";\r\n case 2395: return \"Individual declarations in merged declaration '{0}' must be all exported or all local.\";\r\n case 2460: return \"Type '{0}' has no property '{1}'.\";\r\n case 2469: return \"The '{0}' operator cannot be applied to type '{1}'.\";\r\n case 2474: return \"In 'const' enum declarations member initializer must be constant expression.\";\r\n case 2484: return \"Export declaration conflicts with exported declaration of '{0}'.\";\r\n case 2540: return \"Cannot assign to '{0}' because it is a constant or a read-only property.\";\r\n case 2541: return \"The target of an assignment must be a variable or a property access.\";\r\n case 2542: return \"Index signature in type '{0}' only permits reading.\";\r\n case 2554: return \"Expected {0} arguments, but got {1}.\";\r\n case 2555: return \"Expected at least {0} arguments, but got {1}.\";\r\n case 2558: return \"Expected {0} type arguments, but got {1}.\";\r\n case 2651: return \"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.\";\r\n case 2673: return \"Constructor of class '{0}' is private and only accessible within the class declaration.\";\r\n case 2674: return \"Constructor of class '{0}' is protected and only accessible within the class declaration.\";\r\n case 2694: return \"Namespace '{0}' has no exported member '{1}'.\";\r\n case 6054: return \"File '{0}' not found.\";\r\n case 6188: return \"Numeric separators are not allowed here.\";\r\n case 6189: return \"Multiple consecutive numeric separators are not permitted.\";\r\n default: return \"\";\r\n }\r\n}\r\n","/**\r\n * Resolve infrastructure to obtain types and elements.\r\n * @module resolver\r\n *//***/\r\n\r\nimport {\r\n DiagnosticEmitter,\r\n DiagnosticCode\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Program,\r\n ElementKind,\r\n OperatorKind,\r\n FlowFlags,\r\n\r\n Element,\r\n Class,\r\n ClassPrototype,\r\n Function,\r\n FunctionTarget,\r\n FunctionPrototype,\r\n VariableLikeElement,\r\n Property,\r\n DecoratorFlags,\r\n FieldPrototype,\r\n Field\r\n} from \"./program\";\r\n\r\nimport {\r\n SignatureNode,\r\n ParameterKind,\r\n CommonTypeNode,\r\n NodeKind,\r\n TypeNode,\r\n TypeParameterNode,\r\n Node,\r\n Range,\r\n IdentifierExpression,\r\n CallExpression,\r\n ElementAccessExpression,\r\n PropertyAccessExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n ParenthesizedExpression,\r\n AssertionExpression,\r\n Expression\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n Signature,\r\n typesToString\r\n} from \"./types\";\r\n\r\nimport {\r\n PATH_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n CommonFlags\r\n} from \"./common\";\r\n\r\n/** Indicates whether errors are reported or not. */\r\nexport enum ReportMode {\r\n /** Report errors. */\r\n REPORT,\r\n /** Swallow errors. */\r\n SWALLOW\r\n}\r\n\r\n/** Provides tools to resolve types and expressions. */\r\nexport class Resolver extends DiagnosticEmitter {\r\n\r\n /** The program this resolver belongs to. */\r\n program: Program;\r\n\r\n /** Target expression of the previously resolved property or element access. */\r\n currentThisExpression: Expression | null = null;\r\n /** Element expression of the previously resolved element access. */\r\n currentElementExpression : Expression | null = null;\r\n\r\n /** Constructs the resolver for the specified program. */\r\n constructor(program: Program) {\r\n super(program.diagnostics);\r\n this.program = program;\r\n }\r\n\r\n /** Resolves a {@link CommonTypeNode} to a concrete {@link Type}. */\r\n resolveType(\r\n node: CommonTypeNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportMode = ReportMode.REPORT\r\n ): Type | null {\r\n\r\n // handle signatures specifically\r\n if (node.kind == NodeKind.SIGNATURE) {\r\n let signature = this.resolveSignature(node, contextualTypeArguments, reportMode);\r\n if (!signature) return null;\r\n return node.isNullable ? signature.type.asNullable() : signature.type;\r\n }\r\n\r\n // now dealing with TypeNode\r\n assert(node.kind == NodeKind.TYPE);\r\n var typeNode = node;\r\n var simpleName = typeNode.name.text;\r\n var globalName = simpleName;\r\n var localName = typeNode.range.source.internalPath + PATH_DELIMITER + simpleName; // TODO cache\r\n\r\n // check file-global / program-global enum or class\r\n {\r\n let elementsLookup = this.program.elementsLookup;\r\n let element: Element | null;\r\n if (\r\n (element = elementsLookup.get(localName)) || // file-global\r\n (element = elementsLookup.get(globalName)) // program-global\r\n ) {\r\n switch (element.kind) {\r\n case ElementKind.ENUM: {\r\n if (typeNode.typeArguments !== null && typeNode.typeArguments.length) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n node.range, element.internalName\r\n );\r\n }\r\n return null;\r\n }\r\n return Type.i32;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n let instance = this.resolveClassInclTypeArguments(\r\n element,\r\n typeNode.typeArguments,\r\n contextualTypeArguments,\r\n node\r\n ); // reports\r\n if (!instance) return null;\r\n return node.isNullable ? instance.type.asNullable() : instance.type;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // check (global) type alias\r\n {\r\n let alias = this.program.typeAliases.get(simpleName);\r\n if (alias) return this.resolveType(alias.type, contextualTypeArguments, reportMode);\r\n }\r\n\r\n // resolve parameters\r\n {\r\n let typeArgumentNodes = typeNode.typeArguments;\r\n if (typeArgumentNodes) {\r\n let numTypeArguments = typeArgumentNodes.length;\r\n let paramTypes = new Array(numTypeArguments);\r\n for (let i = 0; i < numTypeArguments; ++i) {\r\n let paramType = this.resolveType( // reports\r\n typeArgumentNodes[i],\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n if (!paramType) return null;\r\n paramTypes[i] = paramType;\r\n }\r\n if (numTypeArguments) { // can't be a placeholder if it has parameters\r\n let instanceKey = typesToString(paramTypes);\r\n if (instanceKey.length) {\r\n localName += \"<\" + instanceKey + \">\";\r\n globalName += \"<\" + instanceKey + \">\";\r\n }\r\n } else if (contextualTypeArguments) {\r\n let placeholderType = contextualTypeArguments.get(globalName);\r\n if (placeholderType) return placeholderType;\r\n }\r\n }\r\n }\r\n\r\n // check file-global / program-global type\r\n {\r\n let typesLookup = this.program.typesLookup;\r\n let type: Type | null;\r\n if (\r\n (type = typesLookup.get(localName)) ||\r\n (type = typesLookup.get(globalName))\r\n ) {\r\n return type;\r\n }\r\n }\r\n\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n typeNode.name.range, globalName\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /** Resolves a {@link SignatureNode} to a concrete {@link Signature}. */\r\n resolveSignature(\r\n node: SignatureNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Signature | null {\r\n var explicitThisType = node.explicitThisType;\r\n var thisType: Type | null = null;\r\n if (explicitThisType) {\r\n thisType = this.resolveType(explicitThisType, contextualTypeArguments, reportMode);\r\n if (!thisType) return null;\r\n }\r\n var parameterTypeNodes = node.parameters;\r\n var numParameters = parameterTypeNodes.length;\r\n var parameterTypes = new Array(numParameters);\r\n var parameterNames = new Array(numParameters);\r\n var requiredParameters = 0;\r\n var hasRest = false;\r\n for (let i = 0; i < numParameters; ++i) {\r\n let parameterTypeNode = parameterTypeNodes[i];\r\n switch (parameterTypeNode.parameterKind) {\r\n case ParameterKind.DEFAULT: {\r\n requiredParameters = i + 1;\r\n break;\r\n }\r\n case ParameterKind.REST: {\r\n assert(i == numParameters);\r\n hasRest = true;\r\n break;\r\n }\r\n }\r\n let parameterType = this.resolveType(\r\n assert(parameterTypeNode.type),\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n if (!parameterType) return null;\r\n parameterTypes[i] = parameterType;\r\n parameterNames[i] = parameterTypeNode.name.text;\r\n }\r\n var returnTypeNode = node.returnType;\r\n var returnType: Type | null;\r\n if (returnTypeNode) {\r\n returnType = this.resolveType(returnTypeNode, contextualTypeArguments, reportMode);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Type.void;\r\n }\r\n var signature = new Signature(parameterTypes, returnType, thisType);\r\n signature.parameterNames = parameterNames;\r\n signature.requiredParameters = requiredParameters;\r\n signature.hasRest = hasRest;\r\n return signature;\r\n }\r\n\r\n /** Resolves an array of type arguments to concrete types. */\r\n resolveTypeArguments(\r\n typeParameters: TypeParameterNode[],\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Type[] | null {\r\n var parameterCount = typeParameters.length;\r\n var argumentCount = typeArgumentNodes ? typeArgumentNodes.length : 0;\r\n if (parameterCount != argumentCount) {\r\n if (argumentCount) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n Range.join(\r\n (typeArgumentNodes)[0].range,\r\n (typeArgumentNodes)[argumentCount - 1].range\r\n ),\r\n parameterCount.toString(10), argumentCount.toString(10)\r\n );\r\n } else if (alternativeReportNode) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n alternativeReportNode.range.atEnd, parameterCount.toString(10), \"0\"\r\n );\r\n }\r\n return null;\r\n }\r\n var typeArguments = new Array(parameterCount);\r\n for (let i = 0; i < parameterCount; ++i) {\r\n let type = this.resolveType( // reports\r\n (typeArgumentNodes)[i],\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n if (!type) return null;\r\n // TODO: check extendsType\r\n typeArguments[i] = type;\r\n }\r\n return typeArguments;\r\n }\r\n\r\n /** Resolves an identifier to the element it refers to. */\r\n resolveIdentifier(\r\n identifier: IdentifierExpression,\r\n context: Element | null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Element | null {\r\n var name = identifier.text;\r\n var element: Element | null;\r\n\r\n if (context) {\r\n\r\n switch (context.kind) {\r\n case ElementKind.FUNCTION: { // search locals, use prototype\r\n element = (context).flow.getScopedLocal(name);\r\n if (element) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return element;\r\n }\r\n context = (context).prototype.parent;\r\n break;\r\n }\r\n case ElementKind.CLASS: { // use prototype\r\n context = (context).prototype.parent;\r\n break;\r\n }\r\n }\r\n\r\n // search context\r\n while (context) {\r\n let members = context.members;\r\n if (members) {\r\n if (element = members.get(name)) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return element;\r\n }\r\n }\r\n context = context.parent;\r\n }\r\n }\r\n\r\n // search current file\r\n var elementsLookup = this.program.elementsLookup;\r\n if (element = elementsLookup.get(identifier.range.source.internalPath + PATH_DELIMITER + name)) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\r\n }\r\n\r\n // search global scope\r\n if (element = elementsLookup.get(name)) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\r\n }\r\n\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n identifier.range, name\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /** Resolves a property access to the element it refers to. */\r\n resolvePropertyAccess(\r\n propertyAccess: PropertyAccessExpression,\r\n contextualFunction: Function,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Element | null {\r\n // start by resolving the lhs target (expression before the last dot)\r\n var targetExpression = propertyAccess.expression;\r\n var target = this.resolveExpression(targetExpression, contextualFunction, reportMode); // reports\r\n if (!target) return null;\r\n\r\n // at this point we know exactly what the target is, so look up the element within\r\n var propertyName = propertyAccess.property.text;\r\n\r\n // Resolve variable-likes to the class type they reference first\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n let type = (target).type;\r\n assert(type != Type.void);\r\n let classReference = type.classReference;\r\n if (!classReference) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, (target).type.toString()\r\n );\r\n return null;\r\n }\r\n target = classReference;\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = this.resolveFunction(\r\n assert((target).getterPrototype),\r\n null,\r\n null,\r\n reportMode\r\n );\r\n if (!getter) return null;\r\n let classReference = getter.signature.returnType.classReference;\r\n if (!classReference) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, getter.signature.returnType.toString()\r\n );\r\n return null;\r\n }\r\n target = classReference;\r\n break;\r\n }\r\n case ElementKind.CLASS: {\r\n let elementExpression = this.currentElementExpression;\r\n if (elementExpression) {\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n elementExpression.range, (target).internalName\r\n );\r\n return null;\r\n }\r\n let returnType = indexedGet.signature.returnType;\r\n if (!(target = returnType.classReference)) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, returnType.toString()\r\n );\r\n return null;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // Look up the member within\r\n switch (target.kind) {\r\n case ElementKind.CLASS_PROTOTYPE:\r\n case ElementKind.CLASS: {\r\n do {\r\n let members = target.members;\r\n let member: Element | null;\r\n if (members && (member = members.get(propertyName))) {\r\n this.currentThisExpression = targetExpression;\r\n this.currentElementExpression = null;\r\n return member; // instance FIELD, static GLOBAL, FUNCTION_PROTOTYPE...\r\n }\r\n // traverse inherited static members on the base prototype if target is a class prototype\r\n if (target.kind == ElementKind.CLASS_PROTOTYPE) {\r\n if ((target).basePrototype) {\r\n target = (target).basePrototype;\r\n } else {\r\n break;\r\n }\r\n // traverse inherited instance members on the base class if target is a class instance\r\n } else if (target.kind == ElementKind.CLASS) {\r\n if ((target).base) {\r\n target = (target).base;\r\n } else {\r\n break;\r\n }\r\n } else {\r\n break;\r\n }\r\n } while (true);\r\n break;\r\n }\r\n default: { // enums or other namespace-like elements\r\n let members = target.members;\r\n if (members) {\r\n let member = members.get(propertyName);\r\n if (member) {\r\n this.currentThisExpression = targetExpression;\r\n this.currentElementExpression = null;\r\n return member; // static ENUMVALUE, static GLOBAL, static FUNCTION_PROTOTYPE...\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, target.internalName\r\n );\r\n return null;\r\n }\r\n\r\n resolveElementAccess(\r\n elementAccess: ElementAccessExpression,\r\n contextualFunction: Function,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Element | null {\r\n var targetExpression = elementAccess.expression;\r\n var target = this.resolveExpression(targetExpression, contextualFunction, reportMode);\r\n if (!target) return null;\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n let type = (target).type;\r\n if (target = type.classReference) {\r\n this.currentThisExpression = targetExpression;\r\n this.currentElementExpression = elementAccess.elementExpression;\r\n return target;\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS: { // element access on element access\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET);\r\n if (!indexedGet) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n elementAccess.range, (target).internalName\r\n );\r\n }\r\n return null;\r\n }\r\n let returnType = indexedGet.signature.returnType;\r\n if (target = returnType.classReference) {\r\n this.currentThisExpression = targetExpression;\r\n this.currentElementExpression = elementAccess.elementExpression;\r\n return target;\r\n }\r\n break;\r\n }\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n targetExpression.range\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n resolveExpression(\r\n expression: Expression,\r\n contextualFunction: Function,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Element | null {\r\n while (expression.kind == NodeKind.PARENTHESIZED) {\r\n expression = (expression).expression;\r\n }\r\n switch (expression.kind) {\r\n case NodeKind.ASSERTION: {\r\n let type = this.resolveType(\r\n (expression).toType,\r\n contextualFunction.flow.contextualTypeArguments,\r\n reportMode\r\n );\r\n if (type) {\r\n let classType = type.classReference;\r\n if (classType) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return classType;\r\n }\r\n }\r\n return null;\r\n }\r\n case NodeKind.BINARY: { // TODO: string concatenation, mostly\r\n throw new Error(\"not implemented\");\r\n }\r\n case NodeKind.THIS: { // -> Class / ClassPrototype\r\n if (contextualFunction.flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let explicitLocal = contextualFunction.flow.getScopedLocal(\"this\");\r\n if (explicitLocal) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return explicitLocal;\r\n }\r\n }\r\n let parent = contextualFunction.parent;\r\n if (parent) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return parent;\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n }\r\n return null;\r\n }\r\n case NodeKind.SUPER: { // -> Class\r\n if (contextualFunction.flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let explicitLocal = contextualFunction.flow.getScopedLocal(\"super\");\r\n if (explicitLocal) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return explicitLocal;\r\n }\r\n }\r\n let parent = contextualFunction.parent;\r\n if (parent && parent.kind == ElementKind.CLASS && (parent = (parent).base)) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return parent;\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n }\r\n return null;\r\n }\r\n case NodeKind.IDENTIFIER: {\r\n return this.resolveIdentifier(expression, contextualFunction, reportMode);\r\n }\r\n case NodeKind.LITERAL: {\r\n switch ((expression).literalKind) {\r\n case LiteralKind.STRING: {\r\n this.currentThisExpression = expression;\r\n this.currentElementExpression = null;\r\n return this.program.stringInstance;\r\n }\r\n // case LiteralKind.ARRAY: // TODO\r\n }\r\n break;\r\n }\r\n case NodeKind.PROPERTYACCESS: {\r\n return this.resolvePropertyAccess(\r\n expression,\r\n contextualFunction,\r\n reportMode\r\n );\r\n }\r\n case NodeKind.ELEMENTACCESS: {\r\n return this.resolveElementAccess(\r\n expression,\r\n contextualFunction,\r\n reportMode\r\n );\r\n }\r\n case NodeKind.CALL: {\r\n let targetExpression = (expression).expression;\r\n let target = this.resolveExpression(targetExpression, contextualFunction, reportMode);\r\n if (!target) return null;\r\n if (target.kind == ElementKind.FUNCTION_PROTOTYPE) {\r\n let instance = this.resolveFunctionInclTypeArguments(\r\n target,\r\n (expression).typeArguments,\r\n contextualFunction.flow.contextualTypeArguments,\r\n expression,\r\n reportMode\r\n );\r\n if (!instance) return null;\r\n let returnType = instance.signature.returnType;\r\n let classType = returnType.classReference;\r\n if (classType) {\r\n // reuse resolvedThisExpression (might be property access)\r\n // reuse resolvedElementExpression (might be element access)\r\n return classType;\r\n } else {\r\n let signature = returnType.signatureReference;\r\n if (signature) {\r\n let functionTarget = signature.cachedFunctionTarget;\r\n if (!functionTarget) {\r\n functionTarget = new FunctionTarget(this.program, signature);\r\n signature.cachedFunctionTarget = functionTarget;\r\n }\r\n // reuse resolvedThisExpression (might be property access)\r\n // reuse resolvedElementExpression (might be element access)\r\n return functionTarget;\r\n }\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n targetExpression.range, target.internalName\r\n );\r\n }\r\n return null;\r\n }\r\n break;\r\n }\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /** Resolves a function prototype to an instance using the specified concrete type arguments. */\r\n resolveFunction(\r\n prototype: FunctionPrototype,\r\n typeArguments: Type[] | null,\r\n contextualTypeArguments: Map | null = null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Function | null {\r\n var instanceKey = typeArguments ? typesToString(typeArguments) : \"\";\r\n var instance = prototype.instances.get(instanceKey);\r\n if (instance) return instance;\r\n\r\n var declaration = prototype.declaration;\r\n var isInstance = prototype.is(CommonFlags.INSTANCE);\r\n var classPrototype = prototype.classPrototype;\r\n\r\n // inherit contextual type arguments as provided. might be overridden.\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(\r\n inheritedName,\r\n inheritedType\r\n );\r\n }\r\n }\r\n\r\n // override with class type arguments if a partially resolved instance method\r\n var classTypeArguments = prototype.classTypeArguments;\r\n if (classTypeArguments) { // set only if partially resolved\r\n assert(prototype.is(CommonFlags.INSTANCE));\r\n let classDeclaration = assert(classPrototype).declaration;\r\n let classTypeParameters = classDeclaration.typeParameters;\r\n let numClassTypeParameters = classTypeParameters.length;\r\n assert(numClassTypeParameters == classTypeArguments.length);\r\n for (let i = 0; i < numClassTypeParameters; ++i) {\r\n contextualTypeArguments.set(\r\n classTypeParameters[i].name.text,\r\n classTypeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!classTypeArguments);\r\n }\r\n\r\n // override with function specific type arguments\r\n var signatureNode = declaration.signature;\r\n var functionTypeParameters = declaration.typeParameters;\r\n var numFunctionTypeArguments: i32;\r\n if (typeArguments && (numFunctionTypeArguments = typeArguments.length)) {\r\n assert(functionTypeParameters && numFunctionTypeArguments == functionTypeParameters.length);\r\n for (let i = 0; i < numFunctionTypeArguments; ++i) {\r\n contextualTypeArguments.set(\r\n (functionTypeParameters)[i].name.text,\r\n typeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!functionTypeParameters || functionTypeParameters.length == 0);\r\n }\r\n\r\n // resolve class if an instance method\r\n var classInstance: Class | null = null;\r\n var thisType: Type | null = null;\r\n if (isInstance) {\r\n classInstance = this.resolveClass(\r\n assert(classPrototype),\r\n classTypeArguments,\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n if (!classInstance) return null;\r\n thisType = classInstance.type;\r\n contextualTypeArguments.set(\"this\", thisType);\r\n }\r\n\r\n // resolve signature node\r\n var signatureParameters = signatureNode.parameters;\r\n var signatureParameterCount = signatureParameters.length;\r\n var parameterTypes = new Array(signatureParameterCount);\r\n var parameterNames = new Array(signatureParameterCount);\r\n var requiredParameters = 0;\r\n for (let i = 0; i < signatureParameterCount; ++i) {\r\n let parameterDeclaration = signatureParameters[i];\r\n if (parameterDeclaration.parameterKind == ParameterKind.DEFAULT) {\r\n requiredParameters = i + 1;\r\n }\r\n let typeNode = assert(parameterDeclaration.type);\r\n let parameterType = this.resolveType(typeNode, contextualTypeArguments, reportMode);\r\n if (!parameterType) return null;\r\n parameterTypes[i] = parameterType;\r\n parameterNames[i] = parameterDeclaration.name.text;\r\n }\r\n\r\n var returnType: Type;\r\n if (prototype.is(CommonFlags.SET)) {\r\n returnType = Type.void; // not annotated\r\n } else if (prototype.is(CommonFlags.CONSTRUCTOR)) {\r\n returnType = assert(classInstance).type; // not annotated\r\n } else {\r\n let typeNode = assert(signatureNode.returnType);\r\n let type = this.resolveType(typeNode, contextualTypeArguments, reportMode);\r\n if (!type) return null;\r\n returnType = type;\r\n }\r\n\r\n var signature = new Signature(parameterTypes, returnType, thisType);\r\n signature.parameterNames = parameterNames;\r\n signature.requiredParameters = requiredParameters;\r\n\r\n var internalName = prototype.internalName;\r\n if (instanceKey.length) internalName += \"<\" + instanceKey + \">\";\r\n instance = new Function(\r\n prototype,\r\n internalName,\r\n signature,\r\n classInstance\r\n ? classInstance\r\n : classPrototype,\r\n contextualTypeArguments\r\n );\r\n prototype.instances.set(instanceKey, instance);\r\n this.program.instancesLookup.set(internalName, instance);\r\n return instance;\r\n }\r\n\r\n /** Resolves a function prototype partially by applying the specified type arguments. */\r\n resolveFunctionPartially(\r\n prototype: FunctionPrototype,\r\n typeArguments: Type[] | null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): FunctionPrototype | null {\r\n assert(prototype.is(CommonFlags.INSTANCE));\r\n var classPrototype = assert(prototype.classPrototype);\r\n\r\n if (!(typeArguments && typeArguments.length)) return prototype; // no need to clone\r\n\r\n var simpleName = prototype.simpleName;\r\n var partialKey = typesToString(typeArguments);\r\n var partialPrototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n classPrototype.internalName + \"<\" + partialKey + \">\" + INSTANCE_DELIMITER + simpleName,\r\n prototype.declaration,\r\n classPrototype,\r\n prototype.decoratorFlags\r\n );\r\n partialPrototype.flags = prototype.flags;\r\n partialPrototype.operatorKind = prototype.operatorKind;\r\n partialPrototype.classTypeArguments = typeArguments;\r\n return partialPrototype;\r\n }\r\n\r\n /** Resolves a function prototype to an instance by first resolving the specified type arguments. */\r\n resolveFunctionInclTypeArguments(\r\n prototype: FunctionPrototype,\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n reportNode: Node,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Function | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (prototype.is(CommonFlags.GENERIC)) {\r\n assert(typeArgumentNodes != null && typeArgumentNodes.length != 0);\r\n resolvedTypeArguments = this.resolveTypeArguments( // reports\r\n assert(prototype.declaration.typeParameters),\r\n typeArgumentNodes,\r\n contextualTypeArguments,\r\n reportNode,\r\n reportMode\r\n );\r\n if (!resolvedTypeArguments) return null;\r\n }\r\n return this.resolveFunction(\r\n prototype,\r\n resolvedTypeArguments,\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n }\r\n\r\n /** Resolves a class prototype using the specified concrete type arguments. */\r\n resolveClass(\r\n prototype: ClassPrototype,\r\n typeArguments: Type[] | null,\r\n contextualTypeArguments: Map | null = null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Class | null {\r\n var instanceKey = typeArguments ? typesToString(typeArguments) : \"\";\r\n\r\n // Check if this exact instance has already been resolved\r\n var instance = prototype.instances.get(instanceKey);\r\n if (instance) return instance;\r\n\r\n // Copy contextual type arguments so we don't pollute the original map\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n\r\n // Insert contextual type arguments for this operation. Internally, this method is always\r\n // called with matching type parameter / argument counts.\r\n var declaration = prototype.declaration;\r\n if (typeArguments) {\r\n let typeParameters = declaration.typeParameters;\r\n let expectedTypeArguments = typeParameters.length;\r\n let actualTypeArguments = typeArguments.length;\r\n assert(actualTypeArguments == expectedTypeArguments);\r\n for (let i = 0; i < actualTypeArguments; ++i) {\r\n contextualTypeArguments.set(typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n } else {\r\n assert(declaration.typeParameters.length == 0);\r\n }\r\n\r\n // Resolve base class if applicable\r\n var baseClass: Class | null = null;\r\n if (declaration.extendsType) {\r\n let baseClassType = this.resolveType(\r\n declaration.extendsType,\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n if (!baseClassType) return null;\r\n if (!(baseClass = baseClassType.classReference)) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.program.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n declaration.extendsType.range\r\n );\r\n }\r\n return null;\r\n }\r\n if (baseClass.hasDecorator(DecoratorFlags.SEALED)) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.program.error(\r\n DiagnosticCode.Class_0_is_sealed_and_cannot_be_extended,\r\n declaration.extendsType.range, baseClass.internalName\r\n );\r\n }\r\n return null;\r\n }\r\n if (baseClass.hasDecorator(DecoratorFlags.UNMANAGED) != prototype.hasDecorator(DecoratorFlags.UNMANAGED)) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.program.error(\r\n DiagnosticCode.Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa,\r\n Range.join(declaration.name.range, declaration.extendsType.range)\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n\r\n // Construct the instance and remember that it has been resolved already\r\n var simpleName = prototype.simpleName;\r\n var internalName = prototype.internalName;\r\n if (instanceKey.length) {\r\n simpleName += \"<\" + instanceKey + \">\";\r\n internalName += \"<\" + instanceKey + \">\";\r\n }\r\n instance = new Class(prototype, simpleName, internalName, typeArguments, baseClass);\r\n instance.contextualTypeArguments = contextualTypeArguments;\r\n prototype.instances.set(instanceKey, instance);\r\n this.program.instancesLookup.set(internalName, instance);\r\n\r\n // Inherit base class members and set up the initial memory offset for own fields\r\n var memoryOffset: u32 = 0;\r\n if (baseClass) {\r\n if (baseClass.members) {\r\n if (!instance.members) instance.members = new Map();\r\n for (let inheritedMember of baseClass.members.values()) {\r\n instance.members.set(inheritedMember.simpleName, inheritedMember);\r\n }\r\n }\r\n memoryOffset = baseClass.currentMemoryOffset;\r\n }\r\n\r\n // Resolve constructor by first applying the class type arguments\r\n if (prototype.constructorPrototype) {\r\n let constructorPartial = this.resolveFunctionPartially(\r\n prototype.constructorPrototype,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!constructorPartial) return null;\r\n instance.constructorInstance = this.resolveFunction(constructorPartial, null, null, reportMode);\r\n }\r\n\r\n // Resolve instance members\r\n if (prototype.instanceMembers) {\r\n for (let member of prototype.instanceMembers.values()) {\r\n switch (member.kind) {\r\n\r\n // Lay out fields in advance\r\n case ElementKind.FIELD_PROTOTYPE: {\r\n if (!instance.members) instance.members = new Map();\r\n let fieldDeclaration = (member).declaration;\r\n let fieldType: Type | null = null;\r\n // TODO: handle duplicate non-private fields\r\n if (!fieldDeclaration.type) {\r\n if (baseClass !== null && baseClass.members !== null) {\r\n let baseField = baseClass.members.get((member).simpleName);\r\n if (baseField && !baseField.is(CommonFlags.PRIVATE)) {\r\n assert(baseField.kind == ElementKind.FIELD);\r\n fieldType = (baseField).type;\r\n }\r\n }\r\n if (!fieldType) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n fieldDeclaration.name.range.atEnd\r\n );\r\n }\r\n }\r\n } else {\r\n fieldType = this.resolveType(\r\n fieldDeclaration.type,\r\n instance.contextualTypeArguments,\r\n reportMode\r\n );\r\n }\r\n if (!fieldType) break;\r\n let fieldInstance = new Field(\r\n member,\r\n internalName + INSTANCE_DELIMITER + (member).simpleName,\r\n fieldType,\r\n fieldDeclaration,\r\n instance\r\n );\r\n switch (fieldType.byteSize) { // align\r\n case 1: break;\r\n case 2: { if (memoryOffset & 1) ++memoryOffset; break; }\r\n case 4: { if (memoryOffset & 3) memoryOffset = (memoryOffset | 3) + 1; break; }\r\n case 8: { if (memoryOffset & 7) memoryOffset = (memoryOffset | 7) + 1; break; }\r\n default: assert(false);\r\n }\r\n fieldInstance.memoryOffset = memoryOffset;\r\n memoryOffset += fieldType.byteSize;\r\n instance.members.set(member.simpleName, fieldInstance);\r\n break;\r\n }\r\n\r\n // Partially resolve methods as these might have type arguments on their own\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (!instance.members) instance.members = new Map();\r\n let partialPrototype = this.resolveFunctionPartially(\r\n member,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!partialPrototype) return null;\r\n partialPrototype.internalName = internalName + INSTANCE_DELIMITER + partialPrototype.simpleName;\r\n instance.members.set(member.simpleName, partialPrototype);\r\n break;\r\n }\r\n\r\n // Clone properties and partially resolve the wrapped accessors for consistence with other methods\r\n case ElementKind.PROPERTY: {\r\n if (!instance.members) instance.members = new Map();\r\n let getterPrototype = assert((member).getterPrototype); // must be present\r\n let setterPrototype = (member).setterPrototype; // might be present\r\n let instanceProperty = new Property(\r\n this.program,\r\n member.simpleName,\r\n internalName + INSTANCE_DELIMITER + member.simpleName,\r\n prototype\r\n );\r\n let partialGetterPrototype = this.resolveFunctionPartially(\r\n getterPrototype,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!partialGetterPrototype) return null;\r\n partialGetterPrototype\r\n .internalName = internalName + INSTANCE_DELIMITER + partialGetterPrototype.simpleName;\r\n instanceProperty.getterPrototype = partialGetterPrototype;\r\n if (setterPrototype) {\r\n let partialSetterPrototype = this.resolveFunctionPartially(\r\n setterPrototype,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!partialSetterPrototype) return null;\r\n partialSetterPrototype\r\n .internalName = internalName + INSTANCE_DELIMITER + partialSetterPrototype.simpleName;\r\n instanceProperty.setterPrototype = partialSetterPrototype;\r\n }\r\n instance.members.set(member.simpleName, instanceProperty);\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n }\r\n\r\n // Finalize memory offset\r\n instance.currentMemoryOffset = memoryOffset;\r\n\r\n // Fully resolve operator overloads (don't have type parameters on their own)\r\n for (let [kind, overloadPrototype] of prototype.overloadPrototypes) {\r\n assert(kind != OperatorKind.INVALID);\r\n let operatorInstance: Function | null;\r\n if (overloadPrototype.is(CommonFlags.INSTANCE)) {\r\n let operatorPartial = this.resolveFunctionPartially(\r\n overloadPrototype,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!operatorPartial) continue;\r\n operatorInstance = this.resolveFunction(operatorPartial, null, null, reportMode);\r\n } else {\r\n operatorInstance = this.resolveFunction(overloadPrototype, null, null, reportMode);\r\n }\r\n if (!operatorInstance) continue;\r\n let overloads = instance.overloads;\r\n if (!overloads) instance.overloads = overloads = new Map();\r\n overloads.set(kind, operatorInstance);\r\n }\r\n return instance;\r\n }\r\n\r\n /** Resolves a class prototype by first resolving the specified type arguments. */\r\n resolveClassInclTypeArguments(\r\n prototype: ClassPrototype,\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n reportNode: Node,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Class | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n\r\n // Resolve type arguments if generic\r\n if (prototype.is(CommonFlags.GENERIC)) {\r\n let typeParameterNodes = prototype.declaration.typeParameters;\r\n let expectedTypeArguments = typeParameterNodes.length;\r\n assert(expectedTypeArguments > 0);\r\n let actualTypeArguments = typeArgumentNodes !== null ? typeArgumentNodes.length : 0;\r\n if (expectedTypeArguments != actualTypeArguments) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, expectedTypeArguments.toString(10), actualTypeArguments.toString(10)\r\n );\r\n }\r\n return null;\r\n }\r\n resolvedTypeArguments = this.resolveTypeArguments(\r\n typeParameterNodes,\r\n typeArgumentNodes,\r\n contextualTypeArguments,\r\n reportNode,\r\n reportMode\r\n );\r\n if (!resolvedTypeArguments) return null;\r\n\r\n // Otherwise make sure that no type arguments have been specified\r\n } else {\r\n if (typeArgumentNodes !== null && typeArgumentNodes.length) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n\r\n // Continue with concrete types\r\n return this.resolveClass(\r\n prototype,\r\n resolvedTypeArguments,\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n }\r\n}\r\n","/**\r\n * JavaScript glue code.\r\n * @module glue/js\r\n * @preferred\r\n *//***/\r\n\r\n/// \r\n\r\nimport \"./binaryen\"; // must be first so portable can pick up the memory implementation\r\nimport \"../../../std/portable/index\";\r\nimport \"./float\";\r\nimport \"./i64\";\r\n\r\nimport { Module } from \"../../module\";\r\n\r\nModule.prototype.toText = function(this: Module) {\r\n return new binaryen.Module(this.ref).emitStackIR();\r\n};\r\n\r\nModule.prototype.toAsmjs = function(this: Module) {\r\n return new binaryen.Module(this.ref).emitAsmjs();\r\n};\r\n","// Copy Binaryen exports to global scope\r\n\r\nconst binaryen = global.Binaryen || require(\"binaryen\");\r\nglobal.binaryen = binaryen;\r\n\r\nfor (var key in binaryen) {\r\n if (key.startsWith(\"_Binaryen\") || key.startsWith(\"_Relooper\")) global[key] = binaryen[key];\r\n}\r\n\r\n// Utilize Binaryen's heap\r\n\r\nglobal.__memory_allocate = binaryen._malloc;\r\nglobal.__memory_free = binaryen._free;\r\nglobal.__memory_copy = binaryen._memmove;\r\nglobal.__store = function(ptr, val) { binaryen.HEAPU8[ptr] = val; };\r\nglobal.__load = function(ptr) { return binaryen.HEAPU8[ptr]; };\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__15__;","/** @module std/portable *//***/\r\n\r\nvar globalScope = typeof window !== \"undefined\" && window || typeof global !== \"undefined\" && global || self;\r\n\r\nglobalScope.ASC_TARGET = 0;\r\n\r\nvar F64 = new Float64Array(1);\r\nvar U64 = new Uint32Array(F64.buffer);\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 \"EPSILON\": { value: Math.fround(1.1920929e-07), writable: false },\r\n \"MIN_VALUE\": { value: Math.fround(1.4012985e-45), writable: false },\r\n \"MAX_VALUE\": { value: Math.fround(3.4028235e+38), writable: false },\r\n \"MIN_NORMAL_VALUE\": { value: Math.fround(1.17549435e-38), writable: false },\r\n \"MIN_SAFE_INTEGER\": { value: -16777215, writable: false },\r\n \"MAX_SAFE_INTEGER\": { value: 16777215, writable: false },\r\n \"POSITIVE_INFINITY\": { value: Infinity, writable: false },\r\n \"NEGATIVE_INFINITY\": { value: -Infinity, writable: false },\r\n \"NaN\": { value: NaN, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"f64\"] = function f64(value) { return +value; }\r\n, {\r\n \"EPSILON\": { value: 2.2204460492503131e-16, writable: false },\r\n \"MIN_VALUE\": { value: 5e-324, writable: false },\r\n \"MAX_VALUE\": { value: 1.7976931348623157e+308, writable: false },\r\n \"MIN_NORMAL_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 \"POSITIVE_INFINITY\": { value: Infinity, writable: false },\r\n \"NEGATIVE_INFINITY\": { value: -Infinity, writable: false },\r\n \"NaN\": { value: NaN, 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 unchecked(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\nglobalScope[\"JSMath\"].signbit = function signbit(x) {\r\n F64[0] = x; return Boolean((U64[1] >>> 31) & (x == x));\r\n}\r\n\r\nglobalScope[\"memory\"] = (() => {\r\n var HEAP = new Uint8Array(0);\r\n var HEAP_OFFSET = 0;\r\n return {\r\n allocate: globalScope[\"__memory_allocate\"] || function allocate(size) {\r\n if (!(size >>>= 0)) return 0;\r\n if (HEAP_OFFSET + size > HEAP.length) {\r\n var oldHeap = HEAP;\r\n HEAP = new Uint8Array(Math.max(65536, HEAP.length + size, HEAP.length * 2));\r\n HEAP.set(oldHeap);\r\n }\r\n var ptr = HEAP_OFFSET;\r\n if ((HEAP_OFFSET += size) & 7) HEAP_OFFSET = (HEAP_OFFSET | 7) + 1;\r\n return ptr;\r\n },\r\n free: globalScope[\"__memory_free\"] || function free(ptr) { },\r\n copy: globalScope[\"__memory_copy\"] || function copy(dest, src, size) {\r\n HEAP.copyWithin(dest, src, src + size);\r\n }\r\n };\r\n})();\r\n\r\nglobalScope[\"store\"] = globalScope[\"__store\"] || function store(ptr, value, offset) {\r\n HEAP[ptr + (offset | 0)] = value;\r\n};\r\n\r\nglobalScope[\"load\"] = globalScope[\"__load\"] || function load(ptr, offset) {\r\n return HEAP[ptr + (offset | 0)];\r\n};\r\n","const F64 = new Float64Array(1);\r\nconst F32 = new Float32Array(F64.buffer);\r\nconst I32 = new Int32Array(F64.buffer);\r\n\r\nglobal.f32_as_i32 = function(value) {\r\n F32[0] = value;\r\n return I32[0];\r\n};\r\n\r\nglobal.i32_as_f32 = function(value) {\r\n I32[0] = value;\r\n return F32[0];\r\n};\r\n\r\nglobal.f64_as_i64 = function(value) {\r\n F64[0] = value;\r\n return i64_new(I32[0], I32[1]);\r\n};\r\n\r\nglobal.i64_as_f64 = function(value) {\r\n I32[0] = i64_low(value);\r\n I32[1] = i64_high(value);\r\n return F64[0];\r\n};\r\n","const Long = global.Long || require(\"long\");\r\n\r\nglobal.i64_zero = Long.ZERO;\r\n\r\nglobal.i64_one = Long.ONE;\r\n\r\nglobal.i64_new = function(lo, hi) {\r\n return Long.fromBits(lo, hi);\r\n};\r\n\r\nglobal.i64_low = function(value) {\r\n return value.low;\r\n};\r\n\r\nglobal.i64_high = function(value) {\r\n return value.high;\r\n};\r\n\r\nglobal.i64_add = function(left, right) {\r\n return left.add(right);\r\n};\r\n\r\nglobal.i64_sub = function(left, right) {\r\n return left.sub(right);\r\n};\r\n\r\nglobal.i64_mul = function(left, right) {\r\n return left.mul(right);\r\n};\r\n\r\nglobal.i64_div = function(left, right) {\r\n return left.div(right);\r\n};\r\n\r\nglobal.i64_div_u = function(left, right) {\r\n return left.toUnsigned().div(right.toUnsigned()).toSigned();\r\n};\r\n\r\nglobal.i64_rem = function(left, right) {\r\n return left.mod(right);\r\n};\r\n\r\nglobal.i64_rem_u = function(left, right) {\r\n return left.toUnsigned().mod(right.toUnsigned()).toSigned();\r\n};\r\n\r\nglobal.i64_and = function(left, right) {\r\n return left.and(right);\r\n};\r\n\r\nglobal.i64_or = function(left, right) {\r\n return left.or(right);\r\n};\r\n\r\nglobal.i64_xor = function(left, right) {\r\n return left.xor(right);\r\n};\r\n\r\nglobal.i64_shl = function(left, right) {\r\n return left.shl(right);\r\n};\r\n\r\nglobal.i64_shr = function(left, right) {\r\n return left.shr(right);\r\n};\r\n\r\nglobal.i64_shr_u = function(left, right) {\r\n return left.shru(right);\r\n};\r\n\r\nglobal.i64_not = function(value) {\r\n return value.not();\r\n};\r\n\r\nglobal.i64_eq = function(left, right) {\r\n return left.eq(right);\r\n};\r\n\r\nglobal.i64_ne = function(left, right) {\r\n return left.ne(right);\r\n};\r\n\r\nglobal.i64_align = function(value, alignment) {\r\n assert(alignment && (alignment & (alignment - 1)) == 0);\r\n var mask = Long.fromInt(alignment - 1);\r\n return value.add(mask).and(mask.not());\r\n};\r\n\r\nglobal.i64_is_i8 = function(value) {\r\n return value.high === 0 && (value.low >= 0 && value.low <= i8.MAX_VALUE)\r\n || value.high === -1 && (value.low >= i8.MIN_VALUE && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_i16 = function(value) {\r\n return value.high === 0 && (value.low >= 0 && value.low <= i16.MAX_VALUE)\r\n || value.high === -1 && (value.low >= i16.MIN_VALUE && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_i32 = function(value) {\r\n return (value.high === 0 && value.low >= 0)\r\n || (value.high === -1 && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_u8 = function(value) {\r\n return value.high === 0 && value.low >= 0 && value.low <= u8.MAX_VALUE;\r\n};\r\n\r\nglobal.i64_is_u16 = function(value) {\r\n return value.high === 0 && value.low >= 0 && value.low <= u16.MAX_VALUE;\r\n};\r\n\r\nglobal.i64_is_u32 = function(value) {\r\n return value.high === 0;\r\n};\r\n\r\nglobal.i64_is_bool = function(value) {\r\n return value.high === 0 && (value.low === 0 || value.low === 1);\r\n};\r\n\r\nconst minSafeF32 = Long.fromNumber(f32.MIN_SAFE_INTEGER);\r\nconst maxSafeF32 = Long.fromNumber(f32.MAX_SAFE_INTEGER);\r\n\r\nglobal.i64_is_f32 = function(value) {\r\n return value.gte(minSafeF32) && value.lte(maxSafeF32);\r\n};\r\n\r\nconst minSafeF64 = Long.fromNumber(f64.MIN_SAFE_INTEGER);\r\nconst maxSafeF64 = Long.fromNumber(f64.MAX_SAFE_INTEGER);\r\n\r\nglobal.i64_is_f64 = function(value) {\r\n return value.gte(minSafeF64) && value.lte(maxSafeF64);\r\n};\r\n\r\nglobal.i64_to_f32 = function(value) {\r\n return global.Math.fround(value.toNumber());\r\n};\r\n\r\nglobal.i64_to_f64 = function(value) {\r\n return value.toNumber();\r\n};\r\n\r\nglobal.i64_to_string = function(value, unsigned) {\r\n return (unsigned ? value.toUnsigned() : value).toString(10);\r\n};\r\n","module.exports = Long;\r\n\r\n/**\r\n * wasm optimizations, to do native i64 multiplication and divide\r\n */\r\nvar wasm = null;\r\n\r\ntry {\r\n wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([\r\n 0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11\r\n ])), {}).exports;\r\n} catch (e) {\r\n // no wasm support :(\r\n}\r\n\r\n/**\r\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\r\n * See the from* functions below for more convenient ways of constructing Longs.\r\n * @exports Long\r\n * @class A Long class for representing a 64 bit two's-complement integer value.\r\n * @param {number} low The low (signed) 32 bits of the long\r\n * @param {number} high The high (signed) 32 bits of the long\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @constructor\r\n */\r\nfunction Long(low, high, unsigned) {\r\n\r\n /**\r\n * The low 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.low = low | 0;\r\n\r\n /**\r\n * The high 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.high = high | 0;\r\n\r\n /**\r\n * Whether unsigned or not.\r\n * @type {boolean}\r\n */\r\n this.unsigned = !!unsigned;\r\n}\r\n\r\n// The internal representation of a long is the two given signed, 32-bit values.\r\n// We use 32-bit pieces because these are the size of integers on which\r\n// Javascript performs bit-operations. For operations like addition and\r\n// multiplication, we split each number into 16 bit pieces, which can easily be\r\n// multiplied within Javascript's floating-point representation without overflow\r\n// or change in sign.\r\n//\r\n// In the algorithms below, we frequently reduce the negative case to the\r\n// positive case by negating the input(s) and then post-processing the result.\r\n// Note that we must ALWAYS check specially whether those values are MIN_VALUE\r\n// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\r\n// a positive number, it overflows back into a negative). Not handling this\r\n// case would often result in infinite recursion.\r\n//\r\n// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\r\n// methods on which they depend.\r\n\r\n/**\r\n * An indicator used to reliably determine if an object is a Long or not.\r\n * @type {boolean}\r\n * @const\r\n * @private\r\n */\r\nLong.prototype.__isLong__;\r\n\r\nObject.defineProperty(Long.prototype, \"__isLong__\", { value: true });\r\n\r\n/**\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n * @inner\r\n */\r\nfunction isLong(obj) {\r\n return (obj && obj[\"__isLong__\"]) === true;\r\n}\r\n\r\n/**\r\n * Tests if the specified object is a Long.\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n */\r\nLong.isLong = isLong;\r\n\r\n/**\r\n * A cache of the Long representations of small integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar INT_CACHE = {};\r\n\r\n/**\r\n * A cache of the Long representations of small unsigned integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar UINT_CACHE = {};\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromInt(value, unsigned) {\r\n var obj, cachedObj, cache;\r\n if (unsigned) {\r\n value >>>= 0;\r\n if (cache = (0 <= value && value < 256)) {\r\n cachedObj = UINT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\r\n if (cache)\r\n UINT_CACHE[value] = obj;\r\n return obj;\r\n } else {\r\n value |= 0;\r\n if (cache = (-128 <= value && value < 128)) {\r\n cachedObj = INT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, value < 0 ? -1 : 0, false);\r\n if (cache)\r\n INT_CACHE[value] = obj;\r\n return obj;\r\n }\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given 32 bit integer value.\r\n * @function\r\n * @param {number} value The 32 bit integer in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromInt = fromInt;\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromNumber(value, unsigned) {\r\n if (isNaN(value))\r\n return unsigned ? UZERO : ZERO;\r\n if (unsigned) {\r\n if (value < 0)\r\n return UZERO;\r\n if (value >= TWO_PWR_64_DBL)\r\n return MAX_UNSIGNED_VALUE;\r\n } else {\r\n if (value <= -TWO_PWR_63_DBL)\r\n return MIN_VALUE;\r\n if (value + 1 >= TWO_PWR_63_DBL)\r\n return MAX_VALUE;\r\n }\r\n if (value < 0)\r\n return fromNumber(-value, unsigned).neg();\r\n return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\r\n * @function\r\n * @param {number} value The number in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromNumber = fromNumber;\r\n\r\n/**\r\n * @param {number} lowBits\r\n * @param {number} highBits\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromBits(lowBits, highBits, unsigned) {\r\n return new Long(lowBits, highBits, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\r\n * assumed to use 32 bits.\r\n * @function\r\n * @param {number} lowBits The low 32 bits\r\n * @param {number} highBits The high 32 bits\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromBits = fromBits;\r\n\r\n/**\r\n * @function\r\n * @param {number} base\r\n * @param {number} exponent\r\n * @returns {number}\r\n * @inner\r\n */\r\nvar pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\r\n\r\n/**\r\n * @param {string} str\r\n * @param {(boolean|number)=} unsigned\r\n * @param {number=} radix\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromString(str, unsigned, radix) {\r\n if (str.length === 0)\r\n throw Error('empty string');\r\n if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\")\r\n return ZERO;\r\n if (typeof unsigned === 'number') {\r\n // For goog.math.long compatibility\r\n radix = unsigned,\r\n unsigned = false;\r\n } else {\r\n unsigned = !! unsigned;\r\n }\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n\r\n var p;\r\n if ((p = str.indexOf('-')) > 0)\r\n throw Error('interior hyphen');\r\n else if (p === 0) {\r\n return fromString(str.substring(1), unsigned, radix).neg();\r\n }\r\n\r\n // Do several (8) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 8));\r\n\r\n var result = ZERO;\r\n for (var i = 0; i < str.length; i += 8) {\r\n var size = Math.min(8, str.length - i),\r\n value = parseInt(str.substring(i, i + size), radix);\r\n if (size < 8) {\r\n var power = fromNumber(pow_dbl(radix, size));\r\n result = result.mul(power).add(fromNumber(value));\r\n } else {\r\n result = result.mul(radixToPower);\r\n result = result.add(fromNumber(value));\r\n }\r\n }\r\n result.unsigned = unsigned;\r\n return result;\r\n}\r\n\r\n/**\r\n * Returns a Long representation of the given string, written using the specified radix.\r\n * @function\r\n * @param {string} str The textual representation of the Long\r\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromString = fromString;\r\n\r\n/**\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromValue(val, unsigned) {\r\n if (typeof val === 'number')\r\n return fromNumber(val, unsigned);\r\n if (typeof val === 'string')\r\n return fromString(val, unsigned);\r\n // Throws for non-objects, converts non-instanceof Long:\r\n return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);\r\n}\r\n\r\n/**\r\n * Converts the specified value to a Long using the appropriate from* function for its type.\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long}\r\n */\r\nLong.fromValue = fromValue;\r\n\r\n// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\r\n// no runtime penalty for these.\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_16_DBL = 1 << 16;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24_DBL = 1 << 24;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\r\n\r\n/**\r\n * @type {!Long}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ZERO = fromInt(0);\r\n\r\n/**\r\n * Signed zero.\r\n * @type {!Long}\r\n */\r\nLong.ZERO = ZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UZERO = fromInt(0, true);\r\n\r\n/**\r\n * Unsigned zero.\r\n * @type {!Long}\r\n */\r\nLong.UZERO = UZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ONE = fromInt(1);\r\n\r\n/**\r\n * Signed one.\r\n * @type {!Long}\r\n */\r\nLong.ONE = ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UONE = fromInt(1, true);\r\n\r\n/**\r\n * Unsigned one.\r\n * @type {!Long}\r\n */\r\nLong.UONE = UONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar NEG_ONE = fromInt(-1);\r\n\r\n/**\r\n * Signed negative one.\r\n * @type {!Long}\r\n */\r\nLong.NEG_ONE = NEG_ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);\r\n\r\n/**\r\n * Maximum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_VALUE = MAX_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);\r\n\r\n/**\r\n * Maximum unsigned value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MIN_VALUE = fromBits(0, 0x80000000|0, false);\r\n\r\n/**\r\n * Minimum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MIN_VALUE = MIN_VALUE;\r\n\r\n/**\r\n * @alias Long.prototype\r\n * @inner\r\n */\r\nvar LongPrototype = Long.prototype;\r\n\r\n/**\r\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\r\n * @returns {number}\r\n */\r\nLongPrototype.toInt = function toInt() {\r\n return this.unsigned ? this.low >>> 0 : this.low;\r\n};\r\n\r\n/**\r\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\r\n * @returns {number}\r\n */\r\nLongPrototype.toNumber = function toNumber() {\r\n if (this.unsigned)\r\n return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);\r\n return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\r\n};\r\n\r\n/**\r\n * Converts the Long to a string written in the specified radix.\r\n * @param {number=} radix Radix (2-36), defaults to 10\r\n * @returns {string}\r\n * @override\r\n * @throws {RangeError} If `radix` is out of range\r\n */\r\nLongPrototype.toString = function toString(radix) {\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n if (this.isZero())\r\n return '0';\r\n if (this.isNegative()) { // Unsigned Longs are never negative\r\n if (this.eq(MIN_VALUE)) {\r\n // We need to change the Long value before it can be negated, so we remove\r\n // the bottom-most digit in this base and then recurse to do the rest.\r\n var radixLong = fromNumber(radix),\r\n div = this.div(radixLong),\r\n rem1 = div.mul(radixLong).sub(this);\r\n return div.toString(radix) + rem1.toInt().toString(radix);\r\n } else\r\n return '-' + this.neg().toString(radix);\r\n }\r\n\r\n // Do several (6) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\r\n rem = this;\r\n var result = '';\r\n while (true) {\r\n var remDiv = rem.div(radixToPower),\r\n intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\r\n digits = intval.toString(radix);\r\n rem = remDiv;\r\n if (rem.isZero())\r\n return digits + result;\r\n else {\r\n while (digits.length < 6)\r\n digits = '0' + digits;\r\n result = '' + digits + result;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as a signed integer.\r\n * @returns {number} Signed high bits\r\n */\r\nLongPrototype.getHighBits = function getHighBits() {\r\n return this.high;\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned high bits\r\n */\r\nLongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\r\n return this.high >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as a signed integer.\r\n * @returns {number} Signed low bits\r\n */\r\nLongPrototype.getLowBits = function getLowBits() {\r\n return this.low;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned low bits\r\n */\r\nLongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\r\n return this.low >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the number of bits needed to represent the absolute value of this Long.\r\n * @returns {number}\r\n */\r\nLongPrototype.getNumBitsAbs = function getNumBitsAbs() {\r\n if (this.isNegative()) // Unsigned Longs are never negative\r\n return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\r\n var val = this.high != 0 ? this.high : this.low;\r\n for (var bit = 31; bit > 0; bit--)\r\n if ((val & (1 << bit)) != 0)\r\n break;\r\n return this.high != 0 ? bit + 33 : bit + 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isZero = function isZero() {\r\n return this.high === 0 && this.low === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eqz = LongPrototype.isZero;\r\n\r\n/**\r\n * Tests if this Long's value is negative.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isNegative = function isNegative() {\r\n return !this.unsigned && this.high < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is positive.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isPositive = function isPositive() {\r\n return this.unsigned || this.high >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is odd.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isOdd = function isOdd() {\r\n return (this.low & 1) === 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is even.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isEven = function isEven() {\r\n return (this.low & 1) === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.equals = function equals(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)\r\n return false;\r\n return this.high === other.high && this.low === other.low;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eq = LongPrototype.equals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.notEquals = function notEquals(other) {\r\n return !this.eq(/* validates */ other);\r\n};\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.neq = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ne = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThan = function lessThan(other) {\r\n return this.comp(/* validates */ other) < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lt = LongPrototype.lessThan;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\r\n return this.comp(/* validates */ other) <= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lte = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.le = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThan = function greaterThan(other) {\r\n return this.comp(/* validates */ other) > 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gt = LongPrototype.greaterThan;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\r\n return this.comp(/* validates */ other) >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gte = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ge = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Compares this Long's value with the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.compare = function compare(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.eq(other))\r\n return 0;\r\n var thisNeg = this.isNegative(),\r\n otherNeg = other.isNegative();\r\n if (thisNeg && !otherNeg)\r\n return -1;\r\n if (!thisNeg && otherNeg)\r\n return 1;\r\n // At this point the sign bits are the same\r\n if (!this.unsigned)\r\n return this.sub(other).isNegative() ? -1 : 1;\r\n // Both are positive if at least one is unsigned\r\n return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;\r\n};\r\n\r\n/**\r\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.comp = LongPrototype.compare;\r\n\r\n/**\r\n * Negates this Long's value.\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.negate = function negate() {\r\n if (!this.unsigned && this.eq(MIN_VALUE))\r\n return MIN_VALUE;\r\n return this.not().add(ONE);\r\n};\r\n\r\n/**\r\n * Negates this Long's value. This is an alias of {@link Long#negate}.\r\n * @function\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.neg = LongPrototype.negate;\r\n\r\n/**\r\n * Returns the sum of this and the specified Long.\r\n * @param {!Long|number|string} addend Addend\r\n * @returns {!Long} Sum\r\n */\r\nLongPrototype.add = function add(addend) {\r\n if (!isLong(addend))\r\n addend = fromValue(addend);\r\n\r\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = addend.high >>> 16;\r\n var b32 = addend.high & 0xFFFF;\r\n var b16 = addend.low >>> 16;\r\n var b00 = addend.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 + b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 + b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 + b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 + b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long.\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.subtract = function subtract(subtrahend) {\r\n if (!isLong(subtrahend))\r\n subtrahend = fromValue(subtrahend);\r\n return this.add(subtrahend.neg());\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\r\n * @function\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.sub = LongPrototype.subtract;\r\n\r\n/**\r\n * Returns the product of this and the specified Long.\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.multiply = function multiply(multiplier) {\r\n if (this.isZero())\r\n return ZERO;\r\n if (!isLong(multiplier))\r\n multiplier = fromValue(multiplier);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = wasm.mul(this.low,\r\n this.high,\r\n multiplier.low,\r\n multiplier.high);\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (multiplier.isZero())\r\n return ZERO;\r\n if (this.eq(MIN_VALUE))\r\n return multiplier.isOdd() ? MIN_VALUE : ZERO;\r\n if (multiplier.eq(MIN_VALUE))\r\n return this.isOdd() ? MIN_VALUE : ZERO;\r\n\r\n if (this.isNegative()) {\r\n if (multiplier.isNegative())\r\n return this.neg().mul(multiplier.neg());\r\n else\r\n return this.neg().mul(multiplier).neg();\r\n } else if (multiplier.isNegative())\r\n return this.mul(multiplier.neg()).neg();\r\n\r\n // If both longs are small, use float multiplication\r\n if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\r\n return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);\r\n\r\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\r\n // We can skip products that would overflow.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = multiplier.high >>> 16;\r\n var b32 = multiplier.high & 0xFFFF;\r\n var b16 = multiplier.low >>> 16;\r\n var b00 = multiplier.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 * b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 * b00;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c16 += a00 * b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 * b00;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a16 * b16;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a00 * b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\r\n * @function\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.mul = LongPrototype.multiply;\r\n\r\n/**\r\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\r\n * unsigned if this Long is unsigned.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.divide = function divide(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n if (divisor.isZero())\r\n throw Error('division by zero');\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n // guard against signed division overflow: the largest\r\n // negative number / -1 would be 1 larger than the largest\r\n // positive number, due to two's complement.\r\n if (!this.unsigned &&\r\n this.high === -0x80000000 &&\r\n divisor.low === -1 && divisor.high === -1) {\r\n // be consistent with non-wasm code path\r\n return this;\r\n }\r\n var low = (this.unsigned ? wasm.div_u : wasm.div_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (this.isZero())\r\n return this.unsigned ? UZERO : ZERO;\r\n var approx, rem, res;\r\n if (!this.unsigned) {\r\n // This section is only relevant for signed longs and is derived from the\r\n // closure library as a whole.\r\n if (this.eq(MIN_VALUE)) {\r\n if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\r\n return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\r\n else if (divisor.eq(MIN_VALUE))\r\n return ONE;\r\n else {\r\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\r\n var halfThis = this.shr(1);\r\n approx = halfThis.div(divisor).shl(1);\r\n if (approx.eq(ZERO)) {\r\n return divisor.isNegative() ? ONE : NEG_ONE;\r\n } else {\r\n rem = this.sub(divisor.mul(approx));\r\n res = approx.add(rem.div(divisor));\r\n return res;\r\n }\r\n }\r\n } else if (divisor.eq(MIN_VALUE))\r\n return this.unsigned ? UZERO : ZERO;\r\n if (this.isNegative()) {\r\n if (divisor.isNegative())\r\n return this.neg().div(divisor.neg());\r\n return this.neg().div(divisor).neg();\r\n } else if (divisor.isNegative())\r\n return this.div(divisor.neg()).neg();\r\n res = ZERO;\r\n } else {\r\n // The algorithm below has not been made for unsigned longs. It's therefore\r\n // required to take special care of the MSB prior to running it.\r\n if (!divisor.unsigned)\r\n divisor = divisor.toUnsigned();\r\n if (divisor.gt(this))\r\n return UZERO;\r\n if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\r\n return UONE;\r\n res = UZERO;\r\n }\r\n\r\n // Repeat the following until the remainder is less than other: find a\r\n // floating-point that approximates remainder / other *from below*, add this\r\n // into the result, and subtract it from the remainder. It is critical that\r\n // the approximate value is less than or equal to the real value so that the\r\n // remainder never becomes negative.\r\n rem = this;\r\n while (rem.gte(divisor)) {\r\n // Approximate the result of division. This may be a little greater or\r\n // smaller than the actual value.\r\n approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\r\n\r\n // We will tweak the approximate result by changing it in the 48-th digit or\r\n // the smallest non-fractional digit, whichever is larger.\r\n var log2 = Math.ceil(Math.log(approx) / Math.LN2),\r\n delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),\r\n\r\n // Decrease the approximation until it is smaller than the remainder. Note\r\n // that if it is too large, the product overflows and is negative.\r\n approxRes = fromNumber(approx),\r\n approxRem = approxRes.mul(divisor);\r\n while (approxRem.isNegative() || approxRem.gt(rem)) {\r\n approx -= delta;\r\n approxRes = fromNumber(approx, this.unsigned);\r\n approxRem = approxRes.mul(divisor);\r\n }\r\n\r\n // We know the answer can't be zero... and actually, zero would cause\r\n // infinite recursion since we would make no progress.\r\n if (approxRes.isZero())\r\n approxRes = ONE;\r\n\r\n res = res.add(approxRes);\r\n rem = rem.sub(approxRem);\r\n }\r\n return res;\r\n};\r\n\r\n/**\r\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.div = LongPrototype.divide;\r\n\r\n/**\r\n * Returns this Long modulo the specified.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.modulo = function modulo(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n return this.sub(this.div(divisor).mul(divisor));\r\n};\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.mod = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.rem = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns the bitwise NOT of this Long.\r\n * @returns {!Long}\r\n */\r\nLongPrototype.not = function not() {\r\n return fromBits(~this.low, ~this.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise AND of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.and = function and(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise OR of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.or = function or(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise XOR of this Long and the given one.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.xor = function xor(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftLeft = function shiftLeft(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);\r\n else\r\n return fromBits(0, this.low << (numBits - 32), this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shl = LongPrototype.shiftLeft;\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRight = function shiftRight(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);\r\n else\r\n return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr = LongPrototype.shiftRight;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n numBits &= 63;\r\n if (numBits === 0)\r\n return this;\r\n else {\r\n var high = this.high;\r\n if (numBits < 32) {\r\n var low = this.low;\r\n return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);\r\n } else if (numBits === 32)\r\n return fromBits(high, 0, this.unsigned);\r\n else\r\n return fromBits(high >>> (numBits - 32), 0, this.unsigned);\r\n }\r\n};\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shru = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Converts this Long to signed.\r\n * @returns {!Long} Signed long\r\n */\r\nLongPrototype.toSigned = function toSigned() {\r\n if (!this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, false);\r\n};\r\n\r\n/**\r\n * Converts this Long to unsigned.\r\n * @returns {!Long} Unsigned long\r\n */\r\nLongPrototype.toUnsigned = function toUnsigned() {\r\n if (this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, true);\r\n};\r\n\r\n/**\r\n * Converts this Long to its byte representation.\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {!Array.} Byte representation\r\n */\r\nLongPrototype.toBytes = function toBytes(le) {\r\n return le ? this.toBytesLE() : this.toBytesBE();\r\n};\r\n\r\n/**\r\n * Converts this Long to its little endian byte representation.\r\n * @returns {!Array.} Little endian byte representation\r\n */\r\nLongPrototype.toBytesLE = function toBytesLE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n lo & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo >>> 16 & 0xff,\r\n lo >>> 24 ,\r\n hi & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi >>> 16 & 0xff,\r\n hi >>> 24\r\n ];\r\n};\r\n\r\n/**\r\n * Converts this Long to its big endian byte representation.\r\n * @returns {!Array.} Big endian byte representation\r\n */\r\nLongPrototype.toBytesBE = function toBytesBE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n hi >>> 24 ,\r\n hi >>> 16 & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi & 0xff,\r\n lo >>> 24 ,\r\n lo >>> 16 & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo & 0xff\r\n ];\r\n};\r\n\r\n/**\r\n * Creates a Long from its byte representation.\r\n * @param {!Array.} bytes Byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytes = function fromBytes(bytes, unsigned, le) {\r\n return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);\r\n};\r\n\r\n/**\r\n * Creates a Long from its little endian byte representation.\r\n * @param {!Array.} bytes Little endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesLE = function fromBytesLE(bytes, unsigned) {\r\n return new Long(\r\n bytes[0] |\r\n bytes[1] << 8 |\r\n bytes[2] << 16 |\r\n bytes[3] << 24,\r\n bytes[4] |\r\n bytes[5] << 8 |\r\n bytes[6] << 16 |\r\n bytes[7] << 24,\r\n unsigned\r\n );\r\n};\r\n\r\n/**\r\n * Creates a Long from its big endian byte representation.\r\n * @param {!Array.} bytes Big endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesBE = function fromBytesBE(bytes, unsigned) {\r\n return new Long(\r\n bytes[4] << 24 |\r\n bytes[5] << 16 |\r\n bytes[6] << 8 |\r\n bytes[7],\r\n bytes[0] << 24 |\r\n bytes[1] << 16 |\r\n bytes[2] << 8 |\r\n bytes[3],\r\n unsigned\r\n );\r\n};\r\n","/**\r\n * Built-in elements providing WebAssembly core functionality.\r\n * @module builtins\r\n *//***/\r\n\r\n import {\r\n Compiler,\r\n ConversionKind,\r\n WrapMode\r\n} from \"./compiler\";\r\n\r\nimport {\r\n DiagnosticCode\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Expression,\r\n LiteralKind,\r\n LiteralExpression,\r\n StringLiteralExpression\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags\r\n} from \"./types\";\r\n\r\nimport {\r\n BinaryOp,\r\n UnaryOp,\r\n HostOp,\r\n NativeType,\r\n ExpressionRef,\r\n ExpressionId,\r\n getExpressionId,\r\n getExpressionType,\r\n getConstValueI64High,\r\n getConstValueI64Low,\r\n getConstValueI32\r\n} from \"./module\";\r\n\r\nimport {\r\n ElementKind,\r\n FunctionPrototype,\r\n Class,\r\n Field,\r\n OperatorKind,\r\n FlowFlags,\r\n Global,\r\n DecoratorFlags\r\n} from \"./program\";\r\n\r\nimport {\r\n ReportMode\r\n} from \"./resolver\";\r\n\r\nimport {\r\n CommonFlags\r\n} from \"./common\";\r\n\r\n/** Compiles a call to a built-in function. */\r\nexport function compileCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var module = compiler.module;\r\n\r\n var arg0: ExpressionRef,\r\n arg1: ExpressionRef,\r\n arg2: ExpressionRef,\r\n ret: ExpressionRef;\r\n\r\n // NOTE that some implementations below make use of the select expression where straight-forward.\r\n // whether worth or not should probably be tested once it's known if/how embedders handle it.\r\n // search: createSelect\r\n\r\n switch (prototype.internalName) {\r\n\r\n // types\r\n\r\n case \"isInteger\": { // isInteger() / isInteger(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.INTEGER) && !type.is(TypeFlags.REFERENCE)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isFloat\": { // isFloat() / isFloat(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.FLOAT)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isSigned\": { // isSigned() / isSigned(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.SIGNED)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isReference\": { // isReference() / isReference(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n compiler.currentType = Type.bool;\r\n return type.is(TypeFlags.REFERENCE)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isString\": { // isString() / isString(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n let classType = type.classReference;\r\n if (classType) {\r\n let stringInstance = compiler.program.stringInstance;\r\n if (stringInstance && classType.isAssignableTo(stringInstance)) return module.createI32(1);\r\n }\r\n return module.createI32(0);\r\n }\r\n case \"isArray\": { // isArray() / isArray(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n let classType = type.classReference;\r\n return classType !== null && classType.lookupOverload(OperatorKind.INDEXED_GET) !== null\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isDefined\": { // isDefined(expression) -> bool\r\n compiler.currentType = Type.bool;\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let element = compiler.resolver.resolveExpression(operands[0], compiler.currentFunction, ReportMode.SWALLOW);\r\n return module.createI32(element ? 1 : 0);\r\n }\r\n case \"isConstant\": { // isConstant(expression) -> bool\r\n compiler.currentType = Type.bool;\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let expr = compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n compiler.currentType = Type.bool;\r\n return module.createI32(getExpressionId(expr) == ExpressionId.Const ? 1 : 0);\r\n }\r\n case \"isManaged\": { // isManaged() -> bool\r\n if (!compiler.program.hasGC) {\r\n compiler.currentType = Type.bool;\r\n return module.createI32(0);\r\n }\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n let classType = type.classReference;\r\n return classType !== null && !classType.hasDecorator(DecoratorFlags.UNMANAGED)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n\r\n // math\r\n\r\n case \"clz\": { // clz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ClzI64\r\n : UnaryOp.ClzI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.ClzI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"ctz\": { // ctz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.NONE, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.CtzI64\r\n : UnaryOp.CtzI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.CtzI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"popcnt\": { // popcnt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.PopcntI64\r\n : UnaryOp.PopcntI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.PopcntI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"rotl\": { // rotl(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = compiler.ensureSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotlI32, arg0, arg1),\r\n compiler.currentType\r\n );\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createBinary(BinaryOp.RotlI32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotlI64\r\n : BinaryOp.RotlI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createBinary(BinaryOp.RotlI64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret; // possibly overflows\r\n }\r\n case \"rotr\": { // rotr(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = compiler.ensureSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotrI32, arg0, arg1),\r\n compiler.currentType\r\n );\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createBinary(BinaryOp.RotrI32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotrI64\r\n : BinaryOp.RotrI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createBinary(BinaryOp.RotrI64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret; // possibly overflowws\r\n }\r\n case \"abs\": { // abs(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n // possibly overflows, e.g. abs(-128) == 128\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32, false);\r\n ret = module.createSelect( // x > 0 ? x : 0-x\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(BinaryOp.SubI32, // ifFalse\r\n module.createI32(0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32)\r\n ),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n module.createI32(0)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n compiler.options.usizeType.toNativeZero(module),\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType)\r\n ),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType),\r\n compiler.options.usizeType.toNativeZero(module)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(BinaryOp.SubI64,\r\n module.createI64(0, 0),\r\n module.createGetLocal(tempLocal.index, NativeType.I64),\r\n ),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal.index, NativeType.I64),\r\n module.createI64(0, 0)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.U64:\r\n case TypeKind.BOOL: {\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.AbsF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.AbsF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"max\": { // max(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtU32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtU64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtU64\r\n : BinaryOp.GtU32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.MaxF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.MaxF64, arg0, arg1);\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"min\": { // min(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtU32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtI64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtU64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.LtI64\r\n : BinaryOp.LtI32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.LtU64\r\n : BinaryOp.LtU32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.MinF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.MinF64, arg0, arg1);\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"ceil\": { // ceil(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.CeilF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.CeilF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"floor\": { // floor(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.FloorF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.FloorF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"copysign\": { // copysign(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) { // TODO: does an integer version make sense?\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.CopysignF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.CopysignF64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"nearest\": { // nearest(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.NearestF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.NearestF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"reinterpret\": { // reinterpret(value: *) -> T\r\n if (operands.length != 1) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n switch (typeArguments[0].kind) {\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n arg0 = compiler.compileExpression(operands[0], Type.f32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretF32, arg0);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretF64, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (typeArguments[0].is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.f64\r\n : Type.f32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ReinterpretF64\r\n : UnaryOp.ReinterpretF32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretI32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n arg0 = compiler.compileExpression(operands[0], Type.i64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretI64, arg0);\r\n break;\r\n }\r\n default: { // small integers and void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n compiler.currentType = typeArguments[0];\r\n return ret;\r\n }\r\n case \"sqrt\": { // sqrt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) { // TODO: integer versions (that return f64 or convert)?\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.SqrtF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.SqrtF64, arg0);\r\n break;\r\n }\r\n // case TypeKind.VOID:\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"trunc\": { // trunc(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments && typeArguments.length) {\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n // TODO: truncate to contextual type directly (if not void etc.)?\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.TruncF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.TruncF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n // memory access\r\n\r\n case \"load\": { // load(offset: usize, constantOffset?: usize) -> *\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n let offset = operands.length == 2 ? evaluateConstantOffset(compiler, operands[1]) : 0; // reports\r\n if (offset < 0) { // reported in evaluateConstantOffset\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = typeArguments[0];\r\n return module.createLoad(\r\n typeArguments[0].byteSize,\r\n typeArguments[0].is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n arg0,\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n contextualType.size > typeArguments[0].size\r\n ? (compiler.currentType = contextualType).toNativeType()\r\n : (compiler.currentType = typeArguments[0]).toNativeType(),\r\n offset\r\n );\r\n }\r\n case \"store\": { // store(offset: usize, value: *, constantOffset?: usize) -> void\r\n compiler.currentType = Type.void;\r\n if (operands.length < 2 || operands.length > 3) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n if (operands.length < 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n typeArguments[0],\r\n typeArguments[0].is(TypeFlags.INTEGER)\r\n ? ConversionKind.NONE // no need to convert to small int (but now might result in a float)\r\n : ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n let type: Type;\r\n if (\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n (\r\n !compiler.currentType.is(TypeFlags.INTEGER) || // float to int\r\n compiler.currentType.size < typeArguments[0].size // int to larger int (clear garbage bits)\r\n )\r\n ) {\r\n arg1 = compiler.convertExpression(\r\n arg1,\r\n compiler.currentType, typeArguments[0],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE, // still clears garbage bits\r\n operands[1]\r\n );\r\n type = typeArguments[0];\r\n } else {\r\n type = compiler.currentType;\r\n }\r\n let offset = operands.length == 3 ? evaluateConstantOffset(compiler, operands[2]) : 0; // reports\r\n if (offset < 0) { // reported in evaluateConstantOffset\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = Type.void;\r\n return module.createStore(typeArguments[0].byteSize, arg0, arg1, type.toNativeType(), offset);\r\n }\r\n case \"sizeof\": { // sizeof() -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length != 0) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n let byteSize = (typeArguments)[0].byteSize;\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n ret = module.createI32(byteSize);\r\n } else {\r\n ret = module.createI64(byteSize, 0);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n ret = module.createI64(byteSize, 0);\r\n } else {\r\n ret = module.createI32(byteSize);\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"alignof\": { // alignof() -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length != 0) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n let byteSize = (typeArguments)[0].byteSize;\r\n let alignLog2: i32;\r\n switch (byteSize) {\r\n case 1: { alignLog2 = 0; break; }\r\n case 2: { alignLog2 = 1; break; }\r\n case 4: { alignLog2 = 2; break; }\r\n case 8: { alignLog2 = 3; break; }\r\n default: { assert(false); return module.createUnreachable(); }\r\n }\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n ret = module.createI32(alignLog2);\r\n } else {\r\n ret = module.createI64(alignLog2, 0);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n ret = module.createI64(alignLog2, 0);\r\n } else {\r\n ret = module.createI32(alignLog2);\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"offsetof\": { // offsetof(fieldName?: string) -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length > 1) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n let classType = typeArguments[0].classReference;\r\n if (!classType) {\r\n compiler.error( // TODO: better error\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let offset: i32;\r\n if (operands.length) {\r\n if (\r\n operands[0].kind != NodeKind.LITERAL ||\r\n (operands[0]).literalKind != LiteralKind.STRING\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.String_literal_expected,\r\n operands[0].range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let fieldName = (operands[0]).value;\r\n let field = classType.members ? classType.members.get(fieldName) : null;\r\n if (!(field && field.kind == ElementKind.FIELD)) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_has_no_property_1,\r\n operands[0].range, classType.internalName, fieldName\r\n );\r\n return module.createUnreachable();\r\n }\r\n offset = (field).memoryOffset;\r\n } else {\r\n offset = classType.currentMemoryOffset;\r\n }\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n return module.createI32(offset);\r\n } else {\r\n return module.createI64(offset);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n return module.createI64(offset);\r\n } else {\r\n return module.createI32(offset);\r\n }\r\n }\r\n }\r\n\r\n // control flow\r\n\r\n case \"select\": { // select(ifTrue: T, ifFalse: T, condition: bool) -> T\r\n if (operands.length != 3) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n let type = compiler.currentType;\r\n arg1 = compiler.compileExpression(operands[1], type, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n arg2 = compiler.makeIsTrueish(\r\n compiler.compileExpressionRetainType(operands[2], Type.bool, WrapMode.NONE),\r\n compiler.currentType\r\n );\r\n compiler.currentType = type;\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n }\r\n default: { // any other value type\r\n ret = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"unreachable\": { // unreachable() -> *\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n\r\n // host operations\r\n\r\n case \"memory.size\": { // memory.size() -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.CurrentMemory);\r\n }\r\n case \"memory.grow\": { // memory.grow(pages: i32) -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n arg0 = module.createUnreachable();\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.GrowMemory, null, [ arg0 ]);\r\n }\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n case \"memory.copy\": { // memory.copy(dest: usize, src: usize: n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.MoveMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n case \"memory.fill\": { // memory.fill(dest: usize, value: u8, n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n Type.u32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.SetMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n\r\n // other\r\n\r\n case \"changetype\": { // changetype(value: *) -> T\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpressionRetainType(\r\n operands[0],\r\n typeArguments[0],\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = typeArguments[0];\r\n if (compiler.currentType.size != typeArguments[0].size) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // if (reportNode.range.source.sourceKind != SourceKind.STDLIB)\r\n // compiler.warning(DiagnosticCode.Operation_is_unsafe, reportNode.range);\r\n return arg0; // any usize to any usize\r\n }\r\n case \"assert\": { // assert(isTrueish: T, message?: string) -> T with T != null\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else if (operands.length > 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.bool, WrapMode.WRAP);\r\n }\r\n\r\n let type = compiler.currentType;\r\n compiler.currentType = type.nonNullableType;\r\n\r\n // just return ifTrueish if assertions are disabled, or simplify if dropped anyway\r\n if (compiler.options.noAssert) {\r\n if (contextualType == Type.void) {\r\n compiler.currentType = Type.void;\r\n return module.createNop();\r\n }\r\n return arg0;\r\n }\r\n\r\n let abort = compileAbort(compiler, operands.length == 2 ? operands[1] : null, reportNode);\r\n\r\n compiler.currentType = type.nonNullableType;\r\n\r\n if (contextualType == Type.void) { // simplify if dropped anyway\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n // TODO: also check for NaN in float assertions, as in `Boolean(NaN) -> false`?\r\n case TypeKind.F32: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n arg0,\r\n module.createF32(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n arg0,\r\n module.createF64(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n compiler.currentType = Type.void;\r\n } else {\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n default: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32, false);\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.I64)\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType)\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f32, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF32(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.F32)\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f64, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF64(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.F64)\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"unchecked\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let flow = compiler.currentFunction.flow;\r\n flow.set(FlowFlags.UNCHECKED_CONTEXT);\r\n ret = compiler.compileExpressionRetainType(operands[0], contextualType, WrapMode.NONE);\r\n flow.unset(FlowFlags.UNCHECKED_CONTEXT);\r\n return ret;\r\n }\r\n case \"call_indirect\": { // call_indirect(target: Function | u32, ...args: *[]) -> T\r\n if (operands.length < 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let returnType: Type;\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n returnType = typeArguments[0];\r\n } else {\r\n returnType = contextualType;\r\n }\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.u32, WrapMode.NONE);\r\n if (compiler.currentType.kind != TypeKind.U32) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n operands[0].range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let numOperands = operands.length - 1;\r\n let operandExprs = new Array(numOperands);\r\n let signatureParts = new Array(numOperands + 1);\r\n let nativeReturnType = returnType.toNativeType();\r\n let nativeParamTypes = new Array(numOperands);\r\n for (let i = 0; i < numOperands; ++i) {\r\n operandExprs[i] = compiler.compileExpressionRetainType(operands[1 + i], Type.i32, WrapMode.NONE);\r\n let operandType = compiler.currentType;\r\n signatureParts[i] = operandType.toSignatureString();\r\n nativeParamTypes[i] = operandType.toNativeType();\r\n }\r\n signatureParts[numOperands] = returnType.toSignatureString();\r\n let typeName = signatureParts.join(\"\");\r\n let typeRef = module.getFunctionTypeBySignature(nativeReturnType, nativeParamTypes);\r\n if (!typeRef) typeRef = module.addFunctionType(typeName, nativeReturnType, nativeParamTypes);\r\n compiler.currentType = returnType;\r\n // of course this can easily result in a 'RuntimeError: function signature mismatch' trap and\r\n // thus must be used with care. it exists because it *might* be useful in specific scenarios.\r\n return module.createCallIndirect(arg0, operandExprs, typeName);\r\n }\r\n\r\n // user-defined diagnostic macros\r\n\r\n case \"ERROR\": {\r\n compiler.error(\r\n DiagnosticCode.User_defined_0,\r\n reportNode.range, (operands.length ? operands[0] : reportNode).range.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n case \"WARNING\": {\r\n compiler.warning(\r\n DiagnosticCode.User_defined_0,\r\n reportNode.range, (operands.length ? operands[0] : reportNode).range.toString()\r\n );\r\n return module.createNop();\r\n }\r\n case \"INFO\": {\r\n compiler.info(\r\n DiagnosticCode.User_defined_0,\r\n reportNode.range, (operands.length ? operands[0] : reportNode).range.toString()\r\n );\r\n return module.createNop();\r\n }\r\n\r\n // conversions\r\n\r\n case \"i8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"isize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"usize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"bool\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.bool;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.bool,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"f32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.f32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"f64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.f64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n\r\n // gc\r\n\r\n case \"iterateRoots\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n let expr = compiler.compileExpressionRetainType(operands[0], Type.u32, WrapMode.NONE);\r\n let type = compiler.currentType;\r\n let signatureReference = type.signatureReference;\r\n compiler.currentType = Type.void;\r\n if (\r\n !type.is(TypeFlags.REFERENCE) ||\r\n !signatureReference ||\r\n signatureReference.parameterTypes.length != 1 ||\r\n signatureReference.parameterTypes[0] != compiler.options.usizeType\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n reportNode.range, type.toString(), \"(ref: usize) => void\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = Type.void;\r\n // just emit a call even if the function doesn't yet exist\r\n compiler.needsIterateRoots = true;\r\n return module.createCall(\"~iterateRoots\", [ expr ], NativeType.None);\r\n }\r\n }\r\n var expr = deferASMCall(compiler, prototype, operands, contextualType, reportNode);\r\n if (expr) {\r\n if (typeArguments && typeArguments.length) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return expr;\r\n }\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n}\r\n\r\n/** Defers an inline-assembler-like call to a built-in function. */\r\nfunction deferASMCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n switch (prototype.internalName) {\r\n\r\n // TODO: Operators can't be just deferred (don't have a corresponding generic built-in)\r\n // add, sub, mul, div_s, div_u, rem_s, rem_u\r\n // and, or, xor, shl, shr_u, shr_s\r\n // eq, eqz, ne, lt_s, lt_u, le_s, le_u, gt_s, gt_u, ge_s, ge_u\r\n\r\n case \"i32.clz\": return deferASM(\"clz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.clz\": return deferASM(\"clz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.ctz\": return deferASM(\"ctz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.ctz\": return deferASM(\"ctz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.popcnt\": return deferASM(\"popcnt\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.popcnt\": return deferASM(\"popcnt\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotl\": return deferASM(\"rotl\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotl\": return deferASM(\"rotl\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotr\": return deferASM(\"rotr\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotr\": return deferASM(\"rotr\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.abs\": return deferASM(\"abs\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.abs\": return deferASM(\"abs\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.max\": return deferASM(\"max\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.max\": return deferASM(\"max\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.min\": return deferASM(\"min\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.min\": return deferASM(\"min\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.ceil\": return deferASM(\"ceil\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.ceil\": return deferASM(\"ceil\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.floor\": return deferASM(\"floor\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.floor\": return deferASM(\"floor\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.copysign\": return deferASM(\"copysign\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.copysign\": return deferASM(\"copysign\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.nearest\": return deferASM(\"nearest\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.nearest\": return deferASM(\"nearest\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.reinterpret_f32\": return deferASM(\"reinterpret\", compiler, Type.i32, operands, Type.f32, reportNode);\r\n case \"i64.reinterpret_f64\": return deferASM(\"reinterpret\", compiler, Type.i64, operands, Type.f64, reportNode);\r\n case \"f32.reinterpret_i32\": return deferASM(\"reinterpret\", compiler, Type.f32, operands, Type.i32, reportNode);\r\n case \"f64.reinterpret_i64\": return deferASM(\"reinterpret\", compiler, Type.f64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.sqrt\": return deferASM(\"sqrt\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.sqrt\": return deferASM(\"sqrt\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.trunc\": return deferASM(\"trunc\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.trunc\": return deferASM(\"trunc\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u32, reportNode);\r\n case \"i32.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u32, reportNode);\r\n case \"i32.load\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u64, reportNode);\r\n case \"i64.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u64, reportNode);\r\n case \"i64.load32_s\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.load32_u\": return deferASM(\"load\", compiler, Type.u32, operands, Type.u64, reportNode);\r\n case \"i64.load\": return deferASM(\"load\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.load\": return deferASM(\"load\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.load\": return deferASM(\"load\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.store\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.store32\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.store\": return deferASM(\"store\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.store\": return deferASM(\"store\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.store\": return deferASM(\"store\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n }\r\n return 0;\r\n}\r\n\r\n/** A helper for deferring inline-assembler-like calls to built-in functions. */\r\nfunction deferASM(\r\n name: string,\r\n compiler: Compiler,\r\n typeArgument: Type,\r\n operands: Expression[],\r\n valueType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var prototype = assert(compiler.program.elementsLookup.get(name));\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return compileCall(compiler, prototype, [ typeArgument ], operands, valueType, reportNode);\r\n}\r\n\r\n/** Evaluates the constant type of a type argument *or* expression. */\r\nfunction evaluateConstantType(\r\n compiler: Compiler,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n reportNode: Node\r\n): Type | null {\r\n if (operands.length == 0) { // requires type argument\r\n if (!typeArguments || typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return null;\r\n }\r\n return typeArguments[0];\r\n }\r\n if (operands.length == 1) { // optional type argument\r\n if (typeArguments) {\r\n if (typeArguments.length == 1) {\r\n compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n if (typeArguments.length) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return null;\r\n }\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n } else {\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n return compiler.currentType;\r\n }\r\n if (typeArguments && typeArguments.length > 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return null;\r\n}\r\n\r\n/** Evaluates a `constantOffset` argument.*/\r\nfunction evaluateConstantOffset(compiler: Compiler, expression: Expression): i32 {\r\n var expr: ExpressionRef;\r\n var value: i32;\r\n if (compiler.options.isWasm64) {\r\n expr = compiler.precomputeExpression(expression, Type.usize64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I64 ||\r\n getConstValueI64High(expr) != 0 ||\r\n (value = getConstValueI64Low(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n } else {\r\n expr = compiler.precomputeExpression(expression, Type.usize32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I32 ||\r\n (value = getConstValueI32(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n }\r\n return value;\r\n}\r\n\r\n/** Compiles a memory allocation for an instance of the specified class. */\r\nexport function compileAllocate(\r\n compiler: Compiler,\r\n classInstance: Class,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = compiler.program;\r\n assert(classInstance.program == program);\r\n var module = compiler.module;\r\n var options = compiler.options;\r\n\r\n // __gc_allocate(size, markFn)\r\n if (program.hasGC && classInstance.type.isManaged(program)) {\r\n let allocateInstance = assert(program.gcAllocateInstance);\r\n if (!compiler.compileFunction(allocateInstance)) return module.createUnreachable();\r\n compiler.currentType = classInstance.type;\r\n return module.createCall(\r\n allocateInstance.internalName, [\r\n options.isWasm64\r\n ? module.createI64(classInstance.currentMemoryOffset)\r\n : module.createI32(classInstance.currentMemoryOffset),\r\n module.createI32(\r\n ensureGCHook(compiler, classInstance)\r\n )\r\n ],\r\n options.nativeSizeType\r\n );\r\n\r\n // memory.allocate(size)\r\n } else {\r\n let allocateInstance = program.memoryAllocateInstance;\r\n if (!allocateInstance) {\r\n program.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n reportNode.range, \"memory.allocate\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!compiler.compileFunction(allocateInstance)) return module.createUnreachable();\r\n\r\n compiler.currentType = classInstance.type;\r\n return module.createCall(\r\n allocateInstance.internalName, [\r\n options.isWasm64\r\n ? module.createI64(classInstance.currentMemoryOffset)\r\n : module.createI32(classInstance.currentMemoryOffset)\r\n ],\r\n options.nativeSizeType\r\n );\r\n }\r\n}\r\n\r\n/** Compiles an abort wired to the conditionally imported 'abort' function. */\r\nexport function compileAbort(\r\n compiler: Compiler,\r\n message: Expression | null,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = compiler.program;\r\n var module = compiler.module;\r\n\r\n var stringType = program.typesLookup.get(\"string\");\r\n if (!stringType) return module.createUnreachable();\r\n\r\n var abortInstance = program.abortInstance;\r\n if (!(abortInstance && compiler.compileFunction(abortInstance))) return module.createUnreachable();\r\n\r\n var messageArg = message != null\r\n ? compiler.compileExpression(message, stringType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : stringType.toNativeZero(module);\r\n\r\n var filenameArg = compiler.ensureStaticString(reportNode.range.source.normalizedPath);\r\n\r\n compiler.currentType = Type.void;\r\n return module.createBlock(null, [\r\n module.createCall(\r\n abortInstance.internalName, [\r\n messageArg,\r\n filenameArg,\r\n module.createI32(reportNode.range.line),\r\n module.createI32(reportNode.range.column)\r\n ],\r\n NativeType.None\r\n ),\r\n module.createUnreachable()\r\n ]);\r\n}\r\n\r\n/** Compiles the iterateRoots function if requires. */\r\nexport function compileIterateRoots(compiler: Compiler): void {\r\n var module = compiler.module;\r\n var exprs = new Array();\r\n\r\n for (let element of compiler.program.elementsLookup.values()) {\r\n if (element.kind != ElementKind.GLOBAL) continue;\r\n let global = element;\r\n let classReference = global.type.classReference;\r\n if (\r\n global.is(CommonFlags.COMPILED) &&\r\n classReference !== null &&\r\n !classReference.hasDecorator(DecoratorFlags.UNMANAGED)\r\n ) {\r\n if (global.is(CommonFlags.INLINED)) {\r\n let value = global.constantIntegerValue;\r\n exprs.push(\r\n module.createCallIndirect(\r\n module.createGetLocal(0, NativeType.I32),\r\n [\r\n compiler.options.isWasm64\r\n ? module.createI64(i64_low(value), i64_high(value))\r\n : module.createI32(i64_low(value))\r\n ],\r\n \"iv\"\r\n )\r\n );\r\n } else {\r\n exprs.push(\r\n module.createCallIndirect(\r\n module.createGetLocal(0, NativeType.I32),\r\n [\r\n module.createGetGlobal(\r\n global.internalName,\r\n compiler.options.nativeSizeType\r\n )\r\n ],\r\n \"iv\"\r\n )\r\n );\r\n }\r\n }\r\n }\r\n var typeRef = compiler.ensureFunctionType([ Type.i32 ], Type.void);\r\n module.addFunction(\"~iterateRoots\", typeRef, [],\r\n exprs.length\r\n ? module.createBlock(null, exprs)\r\n : module.createNop()\r\n );\r\n}\r\n\r\n/** Ensures that the specified class's GC hook exists and returns its function table index. */\r\nexport function ensureGCHook(\r\n compiler: Compiler,\r\n classInstance: Class\r\n): u32 {\r\n var program = compiler.program;\r\n assert(classInstance.type.isManaged(program));\r\n\r\n // check if the GC hook has already been created\r\n {\r\n let existingIndex = classInstance.gcHookIndex;\r\n if (existingIndex != -1) return existingIndex;\r\n }\r\n\r\n // check if the class implements a custom GC function (only valid for internals)\r\n var members = classInstance.members;\r\n if (classInstance.prototype.declaration.range.source.isLibrary) {\r\n if (members !== null && members.has(\"__gc\")) {\r\n let gcPrototype = assert(members.get(\"__gc\"));\r\n assert(gcPrototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let gcInstance = assert(program.resolver.resolveFunction(gcPrototype, null));\r\n assert(gcInstance.is(CommonFlags.PRIVATE | CommonFlags.INSTANCE));\r\n assert(!gcInstance.isAny(CommonFlags.AMBIENT | CommonFlags.VIRTUAL));\r\n assert(gcInstance.signature.parameterTypes.length == 0);\r\n assert(gcInstance.signature.returnType == Type.void);\r\n gcInstance.internalName = classInstance.internalName + \"~gc\";\r\n assert(compiler.compileFunction(gcInstance));\r\n let index = compiler.ensureFunctionTableEntry(gcInstance);\r\n classInstance.gcHookIndex = index;\r\n return index;\r\n }\r\n }\r\n\r\n var module = compiler.module;\r\n var options = compiler.options;\r\n var nativeSizeType = options.nativeSizeType;\r\n var nativeSizeSize = options.usizeType.byteSize;\r\n var body = new Array();\r\n\r\n // nothing to mark if 'this' is null\r\n body.push(\r\n module.createIf(\r\n module.createUnary(\r\n options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n module.createGetLocal(0, nativeSizeType)\r\n ),\r\n module.createReturn()\r\n )\r\n );\r\n\r\n // remember the function index so we don't recurse infinitely\r\n var functionTable = compiler.functionTable;\r\n var gcHookIndex = functionTable.length;\r\n functionTable.push(\"\");\r\n classInstance.gcHookIndex = gcHookIndex;\r\n\r\n // if the class extends a base class, call its hook first (calls mark)\r\n var baseInstance = classInstance.base;\r\n if (baseInstance) {\r\n assert(baseInstance.type.isManaged(program));\r\n body.push(\r\n module.createCallIndirect(\r\n module.createI32(\r\n ensureGCHook(compiler, baseInstance.type.classReference)\r\n ),\r\n [\r\n module.createGetLocal(0, nativeSizeType)\r\n ],\r\n nativeSizeType == NativeType.I64 ? \"Iv\" : \"iv\"\r\n )\r\n );\r\n\r\n // if this class is the top-most base class, mark the instance\r\n } else {\r\n body.push(\r\n module.createCall(assert(program.gcMarkInstance).internalName, [\r\n module.createGetLocal(0, nativeSizeType)\r\n ], NativeType.None)\r\n );\r\n }\r\n\r\n // mark instances assigned to own fields that are again references\r\n if (members) {\r\n for (let member of members.values()) {\r\n if (member.kind == ElementKind.FIELD) {\r\n if ((member).parent === classInstance) {\r\n let type = (member).type;\r\n if (type.isManaged(program)) {\r\n let offset = (member).memoryOffset;\r\n assert(offset >= 0);\r\n body.push(\r\n module.createCall(assert(program.gcMarkInstance).internalName, [\r\n module.createLoad(\r\n nativeSizeSize,\r\n false,\r\n module.createGetLocal(0, nativeSizeType),\r\n nativeSizeType,\r\n offset\r\n )\r\n ], NativeType.None)\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // add the function to the module and return its table index\r\n var funcName = classInstance.internalName + \"~gc\";\r\n module.addFunction(\r\n funcName,\r\n compiler.ensureFunctionType(null, Type.void, options.usizeType),\r\n null,\r\n module.createBlock(null, body)\r\n );\r\n functionTable[gcHookIndex] = funcName;\r\n return gcHookIndex;\r\n}\r\n","/** @module util *//***/\r\n\r\n/** An enum of named character codes. */\r\nexport const enum CharCode {\r\n\r\n NULL = 0,\r\n LINEFEED = 0x0A,\r\n CARRIAGERETURN = 0x0D,\r\n LINESEPARATOR = 0x2028,\r\n PARAGRAPHSEPARATOR = 0x2029,\r\n NEXTLINE = 0x0085,\r\n\r\n SPACE = 0x20,\r\n NONBREAKINGSPACE = 0xA0,\r\n ENQUAD = 0x2000,\r\n EMQUAD = 0x2001,\r\n ENSPACE = 0x2002,\r\n EMSPACE = 0x2003,\r\n THREEPEREMSPACE = 0x2004,\r\n FOURPEREMSPACE = 0x2005,\r\n SIXPEREMSPACE = 0x2006,\r\n FIGURESPACE = 0x2007,\r\n PUNCTUATIONSPACE = 0x2008,\r\n THINSPACE = 0x2009,\r\n HAIRSPACE = 0x200A,\r\n ZEROWIDTHSPACE = 0x200B,\r\n NARROWNOBREAKSPACE = 0x202F,\r\n IDEOGRAPHICSPACE = 0x3000,\r\n MATHEMATICALSPACE = 0x205F,\r\n OGHAM = 0x1680,\r\n\r\n _ = 0x5F,\r\n\r\n _0 = 0x30,\r\n _1 = 0x31,\r\n _2 = 0x32,\r\n _3 = 0x33,\r\n _4 = 0x34,\r\n _5 = 0x35,\r\n _6 = 0x36,\r\n _7 = 0x37,\r\n _8 = 0x38,\r\n _9 = 0x39,\r\n\r\n a = 0x61,\r\n b = 0x62,\r\n c = 0x63,\r\n d = 0x64,\r\n e = 0x65,\r\n f = 0x66,\r\n g = 0x67,\r\n h = 0x68,\r\n i = 0x69,\r\n j = 0x6A,\r\n k = 0x6B,\r\n l = 0x6C,\r\n m = 0x6D,\r\n n = 0x6E,\r\n o = 0x6F,\r\n p = 0x70,\r\n q = 0x71,\r\n r = 0x72,\r\n s = 0x73,\r\n t = 0x74,\r\n u = 0x75,\r\n v = 0x76,\r\n w = 0x77,\r\n x = 0x78,\r\n y = 0x79,\r\n z = 0x7A,\r\n\r\n A = 0x41,\r\n B = 0x42,\r\n C = 0x43,\r\n D = 0x44,\r\n E = 0x45,\r\n F = 0x46,\r\n G = 0x47,\r\n H = 0x48,\r\n I = 0x49,\r\n J = 0x4A,\r\n K = 0x4B,\r\n L = 0x4C,\r\n M = 0x4D,\r\n N = 0x4E,\r\n O = 0x4F,\r\n P = 0x50,\r\n Q = 0x51,\r\n R = 0x52,\r\n S = 0x53,\r\n T = 0x54,\r\n U = 0x55,\r\n V = 0x56,\r\n W = 0x57,\r\n X = 0x58,\r\n Y = 0x59,\r\n Z = 0x5a,\r\n\r\n AMPERSAND = 0x26,\r\n ASTERISK = 0x2A,\r\n AT = 0x40,\r\n BACKSLASH = 0x5C,\r\n BACKTICK = 0x60,\r\n BAR = 0x7C,\r\n CARET = 0x5E,\r\n CLOSEBRACE = 0x7D,\r\n CLOSEBRACKET = 0x5D,\r\n CLOSEPAREN = 0x29,\r\n COLON = 0x3A,\r\n COMMA = 0x2C,\r\n DOLLAR = 0x24,\r\n DOT = 0x2E,\r\n DOUBLEQUOTE = 0x22,\r\n EQUALS = 0x3D,\r\n EXCLAMATION = 0x21,\r\n GREATERTHAN = 0x3E,\r\n HASH = 0x23,\r\n LESSTHAN = 0x3C,\r\n MINUS = 0x2D,\r\n OPENBRACE = 0x7B,\r\n OPENBRACKET = 0x5B,\r\n OPENPAREN = 0x28,\r\n PERCENT = 0x25,\r\n PLUS = 0x2B,\r\n QUESTION = 0x3F,\r\n SEMICOLON = 0x3B,\r\n SINGLEQUOTE = 0x27,\r\n SLASH = 0x2F,\r\n TILDE = 0x7E,\r\n\r\n BACKSPACE = 0x08,\r\n FORMFEED = 0x0C,\r\n BYTEORDERMARK = 0xFEFF,\r\n TAB = 0x09,\r\n VERTICALTAB = 0x0B\r\n}\r\n\r\n/** Tests if the specified character code is some sort of line break. */\r\nexport function isLineBreak(c: CharCode): bool {\r\n switch (c) {\r\n case CharCode.LINEFEED:\r\n case CharCode.CARRIAGERETURN:\r\n case CharCode.LINESEPARATOR:\r\n case CharCode.PARAGRAPHSEPARATOR: {\r\n return true;\r\n }\r\n default: {\r\n return false;\r\n }\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is some sort of white space. */\r\nexport function isWhiteSpace(c: i32): bool {\r\n switch (c) {\r\n case CharCode.SPACE:\r\n case CharCode.TAB:\r\n case CharCode.VERTICALTAB:\r\n case CharCode.FORMFEED:\r\n case CharCode.NONBREAKINGSPACE:\r\n case CharCode.NEXTLINE:\r\n case CharCode.OGHAM:\r\n case CharCode.NARROWNOBREAKSPACE:\r\n case CharCode.MATHEMATICALSPACE:\r\n case CharCode.IDEOGRAPHICSPACE:\r\n case CharCode.BYTEORDERMARK: {\r\n return true;\r\n }\r\n default: {\r\n return c >= CharCode.ENQUAD && c <= CharCode.ZEROWIDTHSPACE;\r\n }\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is a valid decimal digit. */\r\nexport function isDecimalDigit(c: i32): bool {\r\n return c >= CharCode._0 && c <= CharCode._9;\r\n}\r\n\r\n/** Tests if the specified character code is a valid octal digit. */\r\nexport function isOctalDigit(c: i32): bool {\r\n return c >= CharCode._0 && c <= CharCode._7;\r\n}\r\n\r\n/** Tests if the specified character code is a valid start of an identifier. */\r\nexport function isIdentifierStart(c: i32): bool {\r\n return c >= CharCode.A && c <= CharCode.Z\r\n || c >= CharCode.a && c <= CharCode.z\r\n || c == CharCode.DOLLAR\r\n || c == CharCode._\r\n || c > 0x7f && isUnicodeIdentifierStart(c);\r\n}\r\n\r\n/** Tests if the specified character code is a valid keyword character. */\r\nexport function isKeywordCharacter(c: i32): bool {\r\n return c >= CharCode.a && c <= CharCode.z;\r\n}\r\n\r\n/** Tests if the specified character code is a valid part of an identifier. */\r\nexport function isIdentifierPart(c: i32): bool {\r\n return c >= CharCode.A && c <= CharCode.Z\r\n || c >= CharCode.a && c <= CharCode.z\r\n || c >= CharCode._0 && c <= CharCode._9\r\n || c == CharCode.DOLLAR\r\n || c == CharCode._\r\n || c > 0x7f && isUnicodeIdentifierPart(c);\r\n}\r\n\r\n// storing as u16 to save memory\r\nconst unicodeIdentifierStart: u16[] = [\r\n 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736,\r\n 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906,\r\n 908, 908, 910, 929, 931,\r\n 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514,\r\n 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774,\r\n 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969,\r\n 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088,\r\n 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384,\r\n 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474,\r\n 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529,\r\n 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613,\r\n 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705,\r\n 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784,\r\n 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873,\r\n 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958,\r\n 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986,\r\n 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125,\r\n 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240,\r\n 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333,\r\n 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455,\r\n 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634,\r\n 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725,\r\n 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757,\r\n 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840,\r\n 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186,\r\n 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293,\r\n 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696,\r\n 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798,\r\n 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992,\r\n 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872,\r\n 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016,\r\n 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389,\r\n 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688,\r\n 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141,\r\n 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424,\r\n 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025,\r\n 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130,\r\n 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188,\r\n 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469,\r\n 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505,\r\n 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584,\r\n 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520,\r\n 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670,\r\n 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720,\r\n 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329,\r\n 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540,\r\n 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893,\r\n 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538,\r\n 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888,\r\n 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015,\r\n 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259,\r\n 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520,\r\n 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695,\r\n 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739,\r\n 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798,\r\n 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243,\r\n 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285,\r\n 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323,\r\n 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019,\r\n 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474,\r\n 65479, 65482, 65487, 65490, 65495, 65498, 65500,\r\n];\r\nconst unicodeIdentifierPart: u16[] = [\r\n 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736,\r\n 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906,\r\n 908, 908, 910, 929, 931,\r\n 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415,\r\n 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520,\r\n 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788,\r\n 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112,\r\n 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423,\r\n 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482,\r\n 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525,\r\n 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602,\r\n 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632,\r\n 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693,\r\n 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757,\r\n 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821,\r\n 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884,\r\n 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929,\r\n 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972,\r\n 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018,\r\n 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088,\r\n 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157,\r\n 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216,\r\n 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285,\r\n 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340,\r\n 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424,\r\n 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515,\r\n 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570,\r\n 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720,\r\n 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751,\r\n 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789,\r\n 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895,\r\n 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028,\r\n 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304,\r\n 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744,\r\n 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808,\r\n 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108,\r\n 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902,\r\n 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099,\r\n 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272,\r\n 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516,\r\n 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783,\r\n 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155,\r\n 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676,\r\n 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027,\r\n 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134,\r\n 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205,\r\n 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417,\r\n 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477,\r\n 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517,\r\n 8521, 8526, 8526, 8544, 8584,\r\n 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559,\r\n 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686,\r\n 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728,\r\n 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335,\r\n 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449,\r\n 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799,\r\n 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512,\r\n 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783,\r\n 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072,\r\n 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309,\r\n 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584,\r\n 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741,\r\n 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808,\r\n 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203,\r\n 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275,\r\n 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321,\r\n 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008,\r\n 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140,\r\n 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382,\r\n 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,\r\n];\r\n\r\nfunction lookupInUnicodeMap(code: u16, map: u16[]): bool {\r\n if (code < map[0]) return false;\r\n\r\n var lo = 0;\r\n var hi = map.length;\r\n var mid: i32;\r\n\r\n while (lo + 1 < hi) {\r\n mid = lo + (hi - lo) / 2;\r\n mid -= mid % 2;\r\n if (map[mid] <= code && code <= map[mid + 1]) {\r\n return true;\r\n }\r\n if (code < map[mid]) {\r\n hi = mid;\r\n } else {\r\n lo = mid + 2;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction isUnicodeIdentifierStart(code: i32): bool {\r\n return code < 0 || code > 0xffff ? false\r\n : lookupInUnicodeMap(code as u16, unicodeIdentifierStart);\r\n}\r\n\r\nfunction isUnicodeIdentifierPart(code: i32): bool {\r\n return code < 0 || code > 0xffff ? false\r\n : lookupInUnicodeMap(code as u16, unicodeIdentifierPart);\r\n}\r\n","/** @module util *//***/\r\n\r\nimport {\r\n CharCode\r\n} from \"./charcode\";\r\n\r\nconst separator = CharCode.SLASH;\r\n\r\n/**\r\n * Normalizes the specified path, removing interior placeholders.\r\n * Expects a posix-compatible relative path (not Windows compatible).\r\n */\r\nexport function normalizePath(path: string): string {\r\n var pos = 0;\r\n var len = path.length;\r\n\r\n // trim leading './'\r\n while (pos + 1 < len &&\r\n path.charCodeAt(pos) == CharCode.DOT &&\r\n path.charCodeAt(pos + 1) == separator\r\n ) {\r\n pos += 2;\r\n }\r\n\r\n if (pos > 0 || len < path.length) {\r\n path = path.substring(pos, len);\r\n len -= pos;\r\n pos = 0;\r\n }\r\n\r\n var atEnd: bool;\r\n while (pos + 1 < len) {\r\n atEnd = false;\r\n\r\n // we are only interested in '/.' sequences ...\r\n if (\r\n path.charCodeAt(pos) == separator &&\r\n path.charCodeAt(pos + 1) == CharCode.DOT\r\n ) {\r\n // '/.' ( '/' | $ )\r\n atEnd = pos + 2 == len;\r\n if (atEnd ||\r\n pos + 2 < len &&\r\n path.charCodeAt(pos + 2) == separator\r\n ) {\r\n path = atEnd\r\n ? path.substring(0, pos)\r\n : path.substring(0, pos) + path.substring(pos + 2);\r\n len -= 2;\r\n continue;\r\n }\r\n\r\n // '/.' ( './' | '.' $ )\r\n atEnd = pos + 3 == len;\r\n if (atEnd && path.charCodeAt(pos + 2) == CharCode.DOT ||\r\n pos + 3 < len &&\r\n path.charCodeAt(pos + 2) == CharCode.DOT &&\r\n path.charCodeAt(pos + 3) == separator\r\n ) {\r\n // find preceeding '/'\r\n let ipos = pos;\r\n while (--ipos >= 0) {\r\n if (path.charCodeAt(ipos) == separator) {\r\n if (pos - ipos != 3 ||\r\n path.charCodeAt(ipos + 1) != CharCode.DOT ||\r\n path.charCodeAt(ipos + 2) != CharCode.DOT\r\n ) { // exclude '..' itself\r\n path = atEnd\r\n ? path.substring(0, ipos)\r\n : path.substring(0, ipos) + path.substring(pos + 3);\r\n len -= pos + 3 - ipos;\r\n pos = ipos - 1; // incremented again at end of loop\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // if there's no preceeding '/', trim start if non-empty\r\n if (ipos < 0 && pos > 0) {\r\n if (pos != 2 ||\r\n path.charCodeAt(0) != CharCode.DOT ||\r\n path.charCodeAt(1) != CharCode.DOT\r\n ) { // exclude '..' itself\r\n path = path.substring(pos + 4);\r\n len = path.length;\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n pos++;\r\n }\r\n return len > 0 ? path : \".\";\r\n}\r\n\r\n/** Resolves the specified path relative to the specified origin. */\r\nexport function resolvePath(normalizedPath: string, origin: string): string {\r\n if (normalizedPath.startsWith(\"std/\")) {\r\n return normalizedPath;\r\n }\r\n return normalizePath(\r\n dirname(origin) + String.fromCharCode(separator) + normalizedPath\r\n );\r\n}\r\n\r\n/** Obtains the directory portion of a normalized path. */\r\nexport function dirname(normalizedPath: string): string {\r\n var pos = normalizedPath.length;\r\n while (--pos > 0) {\r\n if (normalizedPath.charCodeAt(pos) == separator) {\r\n return normalizedPath.substring(0, pos);\r\n }\r\n }\r\n return \".\";\r\n}\r\n","/** @module util *//***/\r\n\r\nconst indentX1 = \" \";\r\nconst indentX2 = \" \";\r\nconst indentX4 = \" \";\r\n\r\n/** Creates an indentation matching the number of specified levels. */\r\nexport function indent(sb: string[], level: i32): void {\r\n while (level >= 4) {\r\n sb.push(indentX4);\r\n level -= 4;\r\n }\r\n if (level >= 2) {\r\n sb.push(indentX2);\r\n level -= 2;\r\n }\r\n if (level) {\r\n sb.push(indentX1);\r\n }\r\n}\r\n","/** @module util *//***/\r\n\r\n/** Reads an 8-bit integer from the specified buffer. */\r\nexport function readI8(buffer: Uint8Array, offset: i32): i32 {\r\n return buffer[offset];\r\n}\r\n\r\n/** Writes an 8-bit integer to the specified buffer. */\r\nexport function writeI8(value: i32, buffer: Uint8Array, offset: i32): void {\r\n buffer[offset] = value;\r\n}\r\n\r\n/** Reads a 16-bit integer from the specified buffer. */\r\nexport function readI16(buffer: Uint8Array, offset: i32): i32 {\r\n return buffer[offset ]\r\n | buffer[offset + 1] << 8;\r\n}\r\n\r\n/** Writes a 16-bit integer to the specified buffer. */\r\nexport function writeI16(value: i32, buffer: Uint8Array, offset: i32): void {\r\n buffer[offset ] = value;\r\n buffer[offset + 1] = value >>> 8;\r\n}\r\n\r\n/** Reads a 32-bit integer from the specified buffer. */\r\nexport function readI32(buffer: Uint8Array, offset: i32): i32 {\r\n return buffer[offset ]\r\n | buffer[offset + 1] << 8\r\n | buffer[offset + 2] << 16\r\n | buffer[offset + 3] << 24;\r\n}\r\n\r\n/** Writes a 32-bit integer to the specified buffer. */\r\nexport function writeI32(value: i32, buffer: Uint8Array, offset: i32): void {\r\n buffer[offset ] = value;\r\n buffer[offset + 1] = value >>> 8;\r\n buffer[offset + 2] = value >>> 16;\r\n buffer[offset + 3] = value >>> 24;\r\n}\r\n\r\n/** Reads a 64-bit integer from the specified buffer. */\r\nexport function readI64(buffer: Uint8Array, offset: i32): I64 {\r\n var lo = readI32(buffer, offset);\r\n var hi = readI32(buffer, offset + 4);\r\n return i64_new(lo, hi);\r\n}\r\n\r\n/** Writes a 64-bit integer to the specified buffer. */\r\nexport function writeI64(value: I64, buffer: Uint8Array, offset: i32): void {\r\n writeI32(i64_low(value), buffer, offset);\r\n writeI32(i64_high(value), buffer, offset + 4);\r\n}\r\n\r\n/** Reads a 32-bit float from the specified buffer. */\r\nexport function readF32(buffer: Uint8Array, offset: i32): f32 {\r\n return i32_as_f32(readI32(buffer, offset));\r\n}\r\n\r\n/** Writes a 32-bit float to the specified buffer. */\r\nexport function writeF32(value: f32, buffer: Uint8Array, offset: i32): void {\r\n writeI32(f32_as_i32(value), buffer, offset);\r\n}\r\n\r\n/** Reads a 64-bit float from the specified buffer. */\r\nexport function readF64(buffer: Uint8Array, offset: i32): f64 {\r\n return i64_as_f64(readI64(buffer, offset));\r\n}\r\n\r\n/** Writes a 64-bit float to the specified buffer. */\r\nexport function writeF64(value: f64, buffer: Uint8Array, offset: i32): void {\r\n var valueI64 = f64_as_i64(value);\r\n writeI32(i64_low(valueI64), buffer, offset);\r\n writeI32(i64_high(valueI64), buffer, offset + 4);\r\n}\r\n","/**\r\n * Low-level C-like compiler API.\r\n * @module index\r\n *//***/\r\n\r\nimport {\r\n Compiler,\r\n Options,\r\n Target,\r\n Feature\r\n} from \"./compiler\";\r\n\r\nimport {\r\n Decompiler\r\n} from \"./decompiler\";\r\n\r\nimport {\r\n IDLBuilder,\r\n TSDBuilder\r\n} from \"./definitions\";\r\n\r\nimport {\r\n DiagnosticMessage,\r\n DiagnosticCategory,\r\n formatDiagnosticMessage\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Module\r\n} from \"./module\";\r\n\r\nimport {\r\n Parser\r\n} from \"./parser\";\r\n\r\nimport {\r\n Program\r\n} from \"./program\";\r\n\r\n/** Parses a source file. If `parser` has been omitted a new one is created. */\r\nexport function parseFile(text: string, path: string, isEntry: bool = false,\r\n parser: Parser | null = null\r\n): Parser {\r\n if (!parser) parser = new Parser();\r\n parser.parseFile(text, path, isEntry);\r\n return parser;\r\n}\r\n\r\n/** Obtains the next required file's path. Returns `null` once complete. */\r\nexport function nextFile(parser: Parser): string | null {\r\n return parser.nextFile();\r\n}\r\n\r\n/** Obtains the next diagnostic message. Returns `null` once complete. */\r\nexport function nextDiagnostic(parser: Parser): DiagnosticMessage | null {\r\n var program = parser.program;\r\n return program.diagnosticsOffset < program.diagnostics.length\r\n ? program.diagnostics[program.diagnosticsOffset++]\r\n : null;\r\n}\r\n\r\n/** Formats a diagnostic message to a string. */\r\nexport { formatDiagnosticMessage as formatDiagnostic };\r\n\r\n/** Tests whether a diagnostic is informatory. */\r\nexport function isInfo(message: DiagnosticMessage): bool {\r\n return message.category == DiagnosticCategory.INFO;\r\n}\r\n\r\n/** Tests whether a diagnostic is a warning. */\r\nexport function isWarning(message: DiagnosticMessage): bool {\r\n return message.category == DiagnosticCategory.WARNING;\r\n}\r\n\r\n/** Tests whether a diagnostic is an error. */\r\nexport function isError(message: DiagnosticMessage): bool {\r\n return message.category == DiagnosticCategory.ERROR;\r\n}\r\n\r\n/** Creates a new set of compiler options. */\r\nexport function createOptions(): Options {\r\n return new Options();\r\n}\r\n\r\n/** Sets the `target` option. */\r\nexport function setTarget(options: Options, target: Target): void {\r\n options.target = target;\r\n}\r\n\r\n/** Sets the `noTreeShaking` option. */\r\nexport function setNoTreeShaking(options: Options, noTreeShaking: bool): void {\r\n options.noTreeShaking = noTreeShaking;\r\n}\r\n\r\n/** Sets the `noAssert` option. */\r\nexport function setNoAssert(options: Options, noAssert: bool): void {\r\n options.noAssert = noAssert;\r\n}\r\n\r\n/** Sets the `importMemory` option. */\r\nexport function setImportMemory(options: Options, importMemory: bool): void {\r\n options.importMemory = importMemory;\r\n}\r\n\r\n/** Sets the `importTable` option. */\r\nexport function setImportTable(options: Options, importTable: bool): void {\r\n options.importTable = importTable;\r\n}\r\n\r\n/** Sets the `sourceMap` option. */\r\nexport function setSourceMap(options: Options, sourceMap: bool): void {\r\n options.sourceMap = sourceMap;\r\n}\r\n\r\n/** Sets the `memoryBase` option. */\r\nexport function setMemoryBase(options: Options, memoryBase: u32): void {\r\n options.memoryBase = memoryBase;\r\n}\r\n\r\n/** Sets a 'globalAliases' value. */\r\nexport function setGlobalAlias(options: Options, name: string, alias: string): void {\r\n var globalAliases = options.globalAliases;\r\n if (!globalAliases) options.globalAliases = globalAliases = new Map();\r\n globalAliases.set(name, alias);\r\n}\r\n\r\n/** Sign extension operations. */\r\nexport const FEATURE_SIGN_EXTENSION = Feature.SIGN_EXTENSION;\r\n/** Mutable global imports and exports. */\r\nexport const FEATURE_MUTABLE_GLOBAL = Feature.MUTABLE_GLOBAL;\r\n\r\n/** Enables a specific feature. */\r\nexport function enableFeature(options: Options, feature: Feature): void {\r\n options.features |= feature;\r\n}\r\n\r\n/** Gives the compiler a hint at the optimize levels that will be used later on. */\r\nexport function setOptimizeLevelHints(options: Options, optimizeLevel: i32, shrinkLevel: i32): void {\r\n options.optimizeLevelHint = optimizeLevel;\r\n options.shrinkLevelHint = shrinkLevel;\r\n}\r\n\r\n/** Finishes parsing. */\r\nexport function finishParsing(parser: Parser): Program {\r\n return parser.finish();\r\n}\r\n\r\n/** Compiles the sources computed by the parser to a module. */\r\nexport function compileProgram(program: Program, options: Options | null = null): Module {\r\n return new Compiler(program, options).compile();\r\n}\r\n\r\n/** Decompiles a module to its (low level) source. */\r\nexport function decompileModule(module: Module): string {\r\n var decompiler = new Decompiler();\r\n decompiler.decompile(module);\r\n return decompiler.finish();\r\n}\r\n\r\n/** Builds WebIDL definitions for the specified program. */\r\nexport function buildIDL(program: Program): string {\r\n return IDLBuilder.build(program);\r\n}\r\n\r\n/** Builds TypeScript definitions for the specified program. */\r\nexport function buildTSD(program: Program): string {\r\n return TSDBuilder.build(program);\r\n}\r\n\r\n/** Prefix indicating a library file. */\r\nexport { LIBRARY_PREFIX } from \"./common\";\r\n","/**\r\n * A decompiler that generates low-level AssemblyScript from WebAssembly binaries.\r\n * @module decompiler\r\n *//***/\r\n\r\nimport {\r\n Module,\r\n NativeType,\r\n ExpressionId,\r\n UnaryOp,\r\n BinaryOp,\r\n HostOp,\r\n FunctionRef,\r\n ExpressionRef,\r\n Index,\r\n getFunctionName,\r\n getFunctionBody,\r\n getFunctionParamCount,\r\n getFunctionParamType,\r\n getFunctionResultType,\r\n getExpressionId,\r\n getExpressionType,\r\n getBlockName,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getIfCondition,\r\n getIfTrue,\r\n getIfFalse,\r\n getLoopName,\r\n getLoopBody,\r\n getBreakName,\r\n getBreakCondition,\r\n getGetLocalIndex,\r\n getSetLocalIndex,\r\n getSetLocalValue,\r\n getLoadOffset,\r\n getLoadPtr,\r\n getStoreOffset,\r\n getStorePtr,\r\n getStoreValue,\r\n getConstValueI32,\r\n getConstValueI64Low,\r\n getConstValueI64High,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getUnaryOp,\r\n getUnaryValue,\r\n getBinaryOp,\r\n getBinaryLeft,\r\n getBinaryRight,\r\n getSelectThen,\r\n getSelectElse,\r\n getSelectCondition,\r\n getDropValue,\r\n getReturnValue,\r\n getHostOp,\r\n getHostOperand\r\n} from \"./module\";\r\n\r\n// TODO :-)\r\n\r\nexport class Decompiler {\r\n\r\n static decompile(module: Module): string {\r\n var decompiler = new Decompiler();\r\n decompiler.decompile(module);\r\n return decompiler.finish();\r\n }\r\n\r\n text: string[] = [];\r\n functionId: i32 = 0;\r\n\r\n constructor() { }\r\n\r\n /** Decompiles a module to an AST that can then be serialized. */\r\n decompile(module: Module): void {\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n decompileFunction(func: FunctionRef): void {\r\n var name = getFunctionName(func) || \"$\" + this.functionId.toString(10);\r\n var body = getFunctionBody(func);\r\n this.push(\"function \");\r\n this.push(name);\r\n this.push(\"(\");\r\n for (let i: Index = 0, k: Index = getFunctionParamCount(func); i < k; ++i) {\r\n if (i > 0) this.push(\", \");\r\n this.push(\"$\");\r\n this.push(i.toString(10));\r\n this.push(\": \");\r\n this.push(nativeTypeToType(getFunctionParamType(func, i)));\r\n }\r\n this.push(\"): \");\r\n this.push(nativeTypeToType(getFunctionResultType(func)));\r\n this.push(\" \");\r\n if (getExpressionId(body) != ExpressionId.Block) {\r\n this.push(\"{\\n\");\r\n }\r\n this.decompileExpression(body);\r\n if (getExpressionId(body) != ExpressionId.Block) {\r\n this.push(\"\\n}\\n\");\r\n }\r\n ++this.functionId;\r\n }\r\n\r\n decompileExpression(expr: ExpressionRef): void {\r\n var id = getExpressionId(expr);\r\n var type = getExpressionType(expr);\r\n\r\n var nested: ExpressionRef;\r\n var string: string | null;\r\n var i: Index, k: Index;\r\n\r\n switch (id) {\r\n case ExpressionId.Block: { // TODO: magic\r\n if ((string = getBlockName(expr)) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"{\\n\");\r\n k = getBlockChildCount(expr);\r\n for (i = 0; i < k; ++i) {\r\n this.decompileExpression(getBlockChild(expr, i));\r\n }\r\n this.push(\"}\\n\");\r\n return;\r\n }\r\n case ExpressionId.If: {\r\n if (type == NativeType.None) {\r\n this.push(\"if (\");\r\n this.decompileExpression(getIfCondition(expr));\r\n this.push(\") \");\r\n this.decompileExpression(getIfTrue(expr));\r\n if (nested = getIfFalse(expr)) {\r\n this.push(\" else \");\r\n this.decompileExpression(nested);\r\n }\r\n } else {\r\n this.decompileExpression(getIfCondition(expr));\r\n this.push(\" ? \");\r\n this.decompileExpression(getIfTrue(expr));\r\n this.push(\" : \");\r\n this.decompileExpression(getIfFalse(expr));\r\n }\r\n return;\r\n }\r\n case ExpressionId.Loop: {\r\n if ((string = getLoopName(expr)) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"do \");\r\n this.decompileExpression(getLoopBody(expr));\r\n this.push(\"while (0);\\n\");\r\n }\r\n case ExpressionId.Break: {\r\n if (nested = getBreakCondition(expr)) {\r\n this.push(\"if (\");\r\n this.decompileExpression(nested);\r\n this.push(\") \");\r\n }\r\n if ((string = getBreakName(expr)) != null) {\r\n this.push(\"break \");\r\n this.push(string);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"break;\\n\");\r\n }\r\n return;\r\n }\r\n case ExpressionId.Switch:\r\n case ExpressionId.Call:\r\n case ExpressionId.CallIndirect: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.GetLocal: {\r\n this.push(\"$\");\r\n this.push(getGetLocalIndex(expr).toString(10));\r\n return;\r\n }\r\n case ExpressionId.SetLocal: {\r\n this.push(\"$\");\r\n this.push(getSetLocalIndex(expr).toString(10));\r\n this.push(\" = \");\r\n this.decompileExpression(getSetLocalValue(expr));\r\n return;\r\n }\r\n case ExpressionId.GetGlobal:\r\n case ExpressionId.SetGlobal: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.Load: {\r\n this.push(\"load<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(getLoadOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getLoadPtr(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Store: {\r\n this.push(\"store<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(getStoreOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getStorePtr(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getStoreValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Const: {\r\n switch (type) {\r\n case NativeType.I32: {\r\n this.push(getConstValueI32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.I64: {\r\n this.push(\r\n i64_to_string(\r\n i64_new(\r\n getConstValueI64Low(expr),\r\n getConstValueI64High(expr)\r\n )\r\n )\r\n );\r\n return;\r\n }\r\n case NativeType.F32: {\r\n this.push(getConstValueF32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.F64: {\r\n this.push(getConstValueF64(expr).toString(10));\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Unary: {\r\n switch (getUnaryOp(expr)) {\r\n case UnaryOp.ClzI32: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI32: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI32: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NegF32:\r\n case UnaryOp.NegF64: {\r\n this.push(\"-\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.AbsF32: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF32: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF32: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF32: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF32: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF32: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.EqzI32:\r\n case UnaryOp.EqzI64: {\r\n this.push(\"!\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ClzI64: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI64: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI64: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.AbsF64: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF64: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF64: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF64: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF64: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF64: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ExtendI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ExtendU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.WrapI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.PromoteF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.DemoteF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Binary: { // TODO: precedence\r\n switch (getBinaryOp(expr)) {\r\n case BinaryOp.AddI32:\r\n case BinaryOp.AddI64:\r\n case BinaryOp.AddF32:\r\n case BinaryOp.AddF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" + \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.SubI32:\r\n case BinaryOp.SubI64:\r\n case BinaryOp.SubF32:\r\n case BinaryOp.SubF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" - \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.MulI32:\r\n case BinaryOp.MulI64:\r\n case BinaryOp.MulF32:\r\n case BinaryOp.MulF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" * \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivI32:\r\n case BinaryOp.DivI64:\r\n case BinaryOp.DivF32:\r\n case BinaryOp.DivF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.AndI32:\r\n case BinaryOp.AndI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" & \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.OrI32:\r\n case BinaryOp.OrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" | \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.XorI32:\r\n case BinaryOp.XorI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" ^ \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShlI32:\r\n case BinaryOp.ShlI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" << \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrU32:\r\n case BinaryOp.ShrU64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >>> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrI32:\r\n case BinaryOp.ShrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI32: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI32: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.EqI32:\r\n case BinaryOp.EqI64:\r\n case BinaryOp.EqF32:\r\n case BinaryOp.EqF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" == \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.NeI32:\r\n case BinaryOp.NeI64:\r\n case BinaryOp.NeF32:\r\n case BinaryOp.NeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" != \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtI32:\r\n case BinaryOp.LtI64:\r\n case BinaryOp.LtF32:\r\n case BinaryOp.LtF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeI32:\r\n case BinaryOp.LeI64:\r\n case BinaryOp.LeF32:\r\n case BinaryOp.LeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtI32:\r\n case BinaryOp.GtI64:\r\n case BinaryOp.GtF32:\r\n case BinaryOp.GtF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeI32:\r\n case BinaryOp.GeI64:\r\n case BinaryOp.GeF32:\r\n case BinaryOp.GeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI64: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI64: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.LtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.CopysignF32: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF32: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF32: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.CopysignF64: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF64: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF64: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n return;\r\n }\r\n case ExpressionId.Select: {\r\n this.push(\"select<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.decompileExpression(getSelectThen(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectElse(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectCondition(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Drop: {\r\n this.decompileExpression(getDropValue(expr));\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Return: {\r\n if (nested = getReturnValue(expr)) {\r\n this.push(\"return \");\r\n this.decompileExpression(nested);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"return;\\n\");\r\n }\r\n return;\r\n }\r\n case ExpressionId.Host: {\r\n switch (getHostOp(expr)) {\r\n case HostOp.CurrentMemory: {\r\n this.push(\"memory.size()\");\r\n return;\r\n }\r\n case HostOp.GrowMemory: {\r\n this.push(\"memory.grow(\");\r\n this.decompileExpression(getHostOperand(expr, 0));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Nop: {\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Unreachable: {\r\n this.push(\"unreachable()\");\r\n return;\r\n }\r\n case ExpressionId.AtomicCmpxchg:\r\n case ExpressionId.AtomicRMW:\r\n case ExpressionId.AtomicWait:\r\n case ExpressionId.AtomicWake:\r\n }\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n private push(text: string): void {\r\n // mostly here so we can add debugging if necessary\r\n this.text.push(text);\r\n }\r\n\r\n finish(): string {\r\n var ret = this.text.join(\"\");\r\n this.text = [];\r\n return ret;\r\n }\r\n}\r\n\r\nfunction nativeTypeToType(type: NativeType): string {\r\n switch (type) {\r\n case NativeType.None: return \"void\";\r\n case NativeType.I32: return \"i32\";\r\n case NativeType.I64: return \"i64\";\r\n case NativeType.F32: return \"f32\";\r\n case NativeType.F64: return \"f64\";\r\n case NativeType.Unreachable: throw new Error(\"unreachable type\");\r\n case NativeType.Auto: throw new Error(\"auto type\");\r\n default: throw new Error(\"unexpected type\");\r\n }\r\n}\r\n","/**\r\n * Definition builders for WebIDL and TypeScript.\r\n * @module definitions\r\n *//***/\r\n\r\nimport {\r\n CommonFlags\r\n} from \"./common\";\r\n\r\nimport {\r\n Program,\r\n Element,\r\n ElementKind,\r\n Global,\r\n Enum,\r\n EnumValue,\r\n Field,\r\n Function,\r\n FunctionPrototype,\r\n Class,\r\n ClassPrototype,\r\n Namespace,\r\n ConstantValueKind,\r\n Interface,\r\n Property\r\n} from \"./program\";\r\n\r\nimport {\r\n Type,\r\n TypeKind\r\n} from \"./types\";\r\n\r\nimport {\r\n indent\r\n} from \"./util\";\r\n\r\n/** Walker base class. */\r\nabstract class ExportsWalker {\r\n\r\n /** Program reference. */\r\n program: Program;\r\n /** Whether to include private members */\r\n includePrivate: bool;\r\n /** Elements still to do. */\r\n todo: Element[] = [];\r\n /** Already seen elements. */\r\n seen: Set = new Set();\r\n\r\n /** Constructs a new Element walker. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n this.program = program;\r\n this.includePrivate;\r\n }\r\n\r\n /** Walks all exports and calls the respective handlers. */\r\n walk(): void {\r\n for (let moduleExport of this.program.moduleLevelExports.values()) {\r\n // FIXME: doesn't honor the actual externally visible name\r\n this.visitElement(moduleExport.element);\r\n }\r\n var todo = this.todo;\r\n for (let i = 0; i < todo.length; ) this.visitElement(todo[i]);\r\n }\r\n\r\n /** Visits an element.*/\r\n visitElement(element: Element): void {\r\n if (element.is(CommonFlags.PRIVATE) && !this.includePrivate) return;\r\n if (this.seen.has(element)) return;\r\n this.seen.add(element);\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitGlobal(element);\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n this.visitFunctionInstances(element);\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n this.visitClassInstances(element);\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n if ((element).is(CommonFlags.COMPILED)) this.visitField(element);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let prop = element;\r\n let getter = prop.getterPrototype;\r\n if (getter) this.visitFunctionInstances(getter);\r\n let setter = prop.setterPrototype;\r\n if (setter) this.visitFunctionInstances(setter);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n if (hasCompiledMember(element)) this.visitNamespace(element);\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n\r\n private visitFunctionInstances(element: FunctionPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitFunction(instance);\r\n }\r\n }\r\n\r\n private visitClassInstances(element: ClassPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitClass(instance);\r\n }\r\n }\r\n\r\n abstract visitGlobal(element: Global): void;\r\n abstract visitEnum(element: Enum): void;\r\n abstract visitFunction(element: Function): void;\r\n abstract visitClass(element: Class): void;\r\n abstract visitInterface(element: Interface): void;\r\n abstract visitField(element: Field): void;\r\n abstract visitNamespace(element: Element): void;\r\n}\r\n\r\n/** A WebIDL definitions builder. */\r\nexport class IDLBuilder extends ExportsWalker {\r\n\r\n /** Builds WebIDL definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new IDLBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n if (isConst) {\r\n switch (element.constantValueKind) {\r\n case ConstantValueKind.INTEGER: {\r\n sb.push(\" = \");\r\n sb.push(i64_to_string(element.constantIntegerValue));\r\n break;\r\n }\r\n case ConstantValueKind.FLOAT: {\r\n sb.push(\" = \");\r\n sb.push(element.constantFloatValue.toString());\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n let isConst = (member).is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"readonly \");\r\n sb.push(\"unsigned long \");\r\n sb.push(name);\r\n if (isConst) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n }\r\n for (let member of members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) this.visitElement(member);\r\n }\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(this.typeToString(parameters[i]));\r\n sb.push(\" \");\r\n sb.push(signature.getParameterName(i));\r\n }\r\n sb.push(\");\\n\");\r\n var members = element.members;\r\n if (members && members.size) {\r\n indent(sb, this.indentLevel);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n // TODO\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n // TODO\r\n }\r\n\r\n visitNamespace(element: Namespace): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.kind) {\r\n case TypeKind.I8: return \"byte\";\r\n case TypeKind.I16: return \"short\";\r\n case TypeKind.I32: return \"long\";\r\n case TypeKind.I64: return \"long long\";\r\n case TypeKind.ISIZE: return this.program.options.isWasm64 ? \"long long\" : \"long\";\r\n case TypeKind.U8: return \"octet\";\r\n case TypeKind.U16: return \"unsigned short\";\r\n case TypeKind.U32: return \"unsigned long\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"unsigned long long\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"unsigned long long\" : \"unsigned long\";\r\n // ^ TODO: class types\r\n case TypeKind.BOOL: return \"boolean\";\r\n case TypeKind.F32: return \"unrestricted float\";\r\n case TypeKind.F64: return \"unrestricted double\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"interface ASModule {\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n return sb.join(\"\");\r\n }\r\n}\r\n\r\n/** A TypeScript definitions builder. */\r\nexport class TSDBuilder extends ExportsWalker {\r\n\r\n /** Builds TypeScript definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new TSDBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.STATIC)) {\r\n if (isConst) sb.push(\"static readonly \");\r\n else sb.push(\"static \");\r\n } else {\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"var \");\r\n }\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"enum \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n let numMembers = members.size;\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n indent(sb, this.indentLevel);\r\n sb.push(name);\r\n if (member.is(CommonFlags.INLINED)) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\",\\n\");\r\n --numMembers;\r\n }\r\n }\r\n if (numMembers) this.visitNamespace(element);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n if (element.isAny(CommonFlags.PRIVATE | CommonFlags.SET)) return;\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.GET)) {\r\n sb.push(element.prototype.declaration.name.text); // 'get:funcName' internally\r\n sb.push(\": \");\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\";\\n\");\r\n return;\r\n } else {\r\n if (!element.isAny(CommonFlags.STATIC | CommonFlags.INSTANCE)) sb.push(\"function \");\r\n sb.push(element.simpleName);\r\n }\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(signature.getParameterName(i));\r\n sb.push(\": \");\r\n sb.push(this.typeToString(parameters[i]));\r\n }\r\n if (element.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.SET)) {\r\n sb.push(\")\");\r\n } else {\r\n sb.push(\"): \");\r\n sb.push(this.typeToString(signature.returnType));\r\n }\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n var isInterface = element.kind == ElementKind.INTERFACE;\r\n indent(sb, this.indentLevel++);\r\n if (isInterface) {\r\n sb.push(\"interface \");\r\n } else {\r\n if (element.is(CommonFlags.ABSTRACT)) sb.push(\"abstract \");\r\n sb.push(\"class \");\r\n }\r\n sb.push(element.simpleName);\r\n var base = element.base;\r\n if (base && base.is(CommonFlags.COMPILED | CommonFlags.MODULE_EXPORT)) {\r\n sb.push(\" extends \");\r\n sb.push(base.simpleName); // TODO: fqn\r\n }\r\n sb.push(\" {\\n\");\r\n var members = element.prototype.members; // static\r\n if (members) {\r\n for (let member of members.values()) {\r\n this.visitElement(member);\r\n }\r\n }\r\n var ctor = element.constructorInstance;\r\n if (ctor) this.visitFunction(ctor);\r\n members = element.members; // instance\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n if (element.is(CommonFlags.PRIVATE)) return;\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.READONLY)) sb.push(\"readonly \");\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitNamespace(element: Element): void {\r\n var members = element.members;\r\n if (members && members.size) {\r\n let sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"namespace \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.kind) {\r\n case TypeKind.I8: return \"i8\";\r\n case TypeKind.I16: return \"i16\";\r\n case TypeKind.I32: return \"i32\";\r\n case TypeKind.I64: return \"I64\";\r\n case TypeKind.ISIZE: return this.program.options.isWasm64 ? \"I64\" : \"i32\";\r\n case TypeKind.U8: return \"u8\";\r\n case TypeKind.U16: return \"u16\";\r\n case TypeKind.U32: return \"u32\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"U64\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"U64\" : \"u32\";\r\n // ^ TODO: class types\r\n case TypeKind.BOOL: return \"bool\";\r\n case TypeKind.F32: return \"f32\";\r\n case TypeKind.F64: return \"f64\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"declare module ASModule {\\n\");\r\n sb.push(\" type i8 = number;\\n\");\r\n sb.push(\" type i16 = number;\\n\");\r\n sb.push(\" type i32 = number;\\n\");\r\n sb.push(\" type u8 = number;\\n\");\r\n sb.push(\" type u16 = number;\\n\");\r\n sb.push(\" type u32 = number;\\n\");\r\n sb.push(\" type f32 = number;\\n\");\r\n sb.push(\" type f64 = number;\\n\");\r\n sb.push(\" type bool = any;\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n sb.push(\"export default ASModule;\\n\");\r\n return this.sb.join(\"\");\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n/** Tests if a namespace-like element has at least one compiled member. */\r\nfunction hasCompiledMember(element: Element): bool {\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) {\r\n switch (member.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n default: {\r\n if (member.is(CommonFlags.COMPILED) || hasCompiledMember(member)) return true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n","/**\r\n * A TypeScript parser for the AssemblyScript subset.\r\n * @module parser\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n LIBRARY_PREFIX,\r\n PATH_DELIMITER\r\n} from \"./common\";\r\n\r\nimport {\r\n Program\r\n} from \"./program\";\r\n\r\nimport {\r\n Tokenizer,\r\n Token,\r\n Range,\r\n CommentHandler,\r\n IdentifierHandling\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n normalizePath\r\n} from \"./util\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Source,\r\n SourceKind,\r\n CommonTypeNode,\r\n TypeNode,\r\n SignatureNode,\r\n\r\n Expression,\r\n AssertionKind,\r\n CallExpression,\r\n ClassExpression,\r\n FunctionExpression,\r\n IdentifierExpression,\r\n StringLiteralExpression,\r\n\r\n Statement,\r\n BlockStatement,\r\n BreakStatement,\r\n ClassDeclaration,\r\n ContinueStatement,\r\n DeclarationStatement,\r\n DecoratorNode,\r\n DoStatement,\r\n EnumDeclaration,\r\n EnumValueDeclaration,\r\n ExportImportStatement,\r\n ExportMember,\r\n ExportStatement,\r\n ExpressionStatement,\r\n ForStatement,\r\n FunctionDeclaration,\r\n IfStatement,\r\n ImportDeclaration,\r\n ImportStatement,\r\n NamespaceDeclaration,\r\n ParameterNode,\r\n ParameterKind,\r\n ReturnStatement,\r\n SwitchCase,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n TypeDeclaration,\r\n TypeParameterNode,\r\n VariableStatement,\r\n VariableDeclaration,\r\n VoidStatement,\r\n WhileStatement,\r\n\r\n mangleInternalPath,\r\n nodeIsCallable,\r\n nodeIsGenericCallable\r\n} from \"./ast\";\r\n\r\n/** Parser interface. */\r\nexport class Parser extends DiagnosticEmitter {\r\n\r\n /** Program being created. */\r\n program: Program;\r\n /** Source file names to be requested next. */\r\n backlog: string[] = new Array();\r\n /** Source file names already seen, that is processed or backlogged. */\r\n seenlog: Set = new Set();\r\n /** Source file names already completely processed. */\r\n donelog: Set = new Set();\r\n /** Optional handler to intercept comments while tokenizing. */\r\n onComment: CommentHandler | null = null;\r\n\r\n /** Constructs a new parser. */\r\n constructor() {\r\n super();\r\n this.program = new Program(this.diagnostics);\r\n }\r\n\r\n /** Parses a file and adds its definitions to the program. */\r\n parseFile(\r\n text: string,\r\n path: string,\r\n isEntry: bool\r\n ): void {\r\n var normalizedPath = normalizePath(path);\r\n var internalPath = mangleInternalPath(normalizedPath);\r\n\r\n // check if already processed\r\n if (this.donelog.has(internalPath)) return;\r\n this.donelog.add(internalPath); // do not parse again\r\n this.seenlog.add(internalPath); // do not request again\r\n\r\n // create the source element\r\n var source = new Source(\r\n normalizedPath,\r\n text,\r\n isEntry\r\n ? SourceKind.ENTRY\r\n : path.startsWith(LIBRARY_PREFIX) && path.indexOf(PATH_DELIMITER, LIBRARY_PREFIX.length) < 0\r\n ? SourceKind.LIBRARY\r\n : SourceKind.DEFAULT\r\n );\r\n var program = this.program;\r\n program.sources.push(source);\r\n\r\n // tokenize and parse\r\n var tn = new Tokenizer(source, program.diagnostics);\r\n tn.onComment = this.onComment;\r\n source.tokenizer = tn;\r\n var statements = source.statements;\r\n while (!tn.skip(Token.ENDOFFILE)) {\r\n let statement = this.parseTopLevelStatement(tn);\r\n if (statement) {\r\n statement.parent = source;\r\n statements.push(statement);\r\n }\r\n }\r\n tn.finish();\r\n }\r\n\r\n /** Parses a top-level statement. */\r\n parseTopLevelStatement(\r\n tn: Tokenizer,\r\n namespace: Node | null = null\r\n ): Statement | null {\r\n var flags = CommonFlags.NONE;\r\n var startPos: i32 = -1;\r\n\r\n // check decorators\r\n var decorators: DecoratorNode[] | null = null;\r\n while (tn.skip(Token.AT)) {\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n let decorator = this.parseDecorator(tn);\r\n if (!decorator) {\r\n this.skipStatement(tn);\r\n continue;\r\n }\r\n if (!decorators) decorators = [];\r\n decorators.push(decorator);\r\n }\r\n\r\n // check modifiers\r\n var exportStart: i32 = 0;\r\n var exportEnd: i32 = 0;\r\n if (tn.skip(Token.EXPORT)) {\r\n if (tn.skip(Token.DEFAULT)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n flags |= CommonFlags.EXPORT;\r\n exportStart = tn.tokenPos;\r\n exportEnd = tn.pos;\r\n }\r\n\r\n var declareStart: i32 = 0;\r\n var declareEnd: i32 = 0;\r\n var contextIsAmbient = namespace != null && namespace.is(CommonFlags.AMBIENT);\r\n if (tn.skip(Token.DECLARE)) {\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n if (contextIsAmbient) {\r\n this.error(\r\n DiagnosticCode.A_declare_modifier_cannot_be_used_in_an_already_ambient_context,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n flags |= CommonFlags.DECLARE | CommonFlags.AMBIENT;\r\n } else if (contextIsAmbient) {\r\n flags |= CommonFlags.AMBIENT;\r\n }\r\n\r\n // parse the statement\r\n var statement: Statement | null = null;\r\n\r\n // handle declarations\r\n var first = tn.peek();\r\n if (startPos < 0) startPos = tn.nextTokenPos;\r\n switch (first) {\r\n case Token.CONST: {\r\n tn.next();\r\n flags |= CommonFlags.CONST;\r\n if (tn.skip(Token.ENUM)) {\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n break;\r\n } else {\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n }\r\n break;\r\n }\r\n case Token.LET: flags |= CommonFlags.LET;\r\n case Token.VAR: {\r\n tn.next();\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ENUM: {\r\n tn.next();\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.FUNCTION: {\r\n tn.next();\r\n statement = this.parseFunction(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ABSTRACT: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (!tn.skip(Token.CLASS)) {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n break;\r\n } else {\r\n tn.discard(state);\r\n }\r\n flags |= CommonFlags.ABSTRACT;\r\n // fall through\r\n }\r\n case Token.CLASS:\r\n case Token.INTERFACE: {\r\n tn.next();\r\n statement = this.parseClassOrInterface(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.NAMESPACE: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseNamespace(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n case Token.IMPORT: {\r\n tn.next();\r\n flags |= CommonFlags.IMPORT;\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExportImport(tn, startPos);\r\n } else {\r\n statement = this.parseImport(tn);\r\n }\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseTypeDeclaration(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n default: {\r\n\r\n // handle plain exports\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExport(tn, flags, startPos);\r\n\r\n // handle non-declaration statements\r\n } else {\r\n if (exportEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(exportStart, exportEnd), \"export\"\r\n ); // recoverable\r\n }\r\n if (declareEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(declareStart, declareEnd), \"declare\"\r\n ); // recoverable\r\n }\r\n if (!namespace) {\r\n statement = this.parseStatement(tn, true);\r\n } // TODO: else?\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // check for decorators that weren't consumed\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n this.error(\r\n DiagnosticCode.Decorators_are_not_valid_here,\r\n decorators[i].range\r\n );\r\n }\r\n }\r\n return statement;\r\n }\r\n\r\n /** Obtains the next file to parse. */\r\n nextFile(): string | null {\r\n var backlog = this.backlog;\r\n return backlog.length ? backlog.shift() : null;\r\n }\r\n\r\n /** Finishes parsing and returns the program. */\r\n finish(): Program {\r\n if (this.backlog.length) throw new Error(\"backlog is not empty\");\r\n this.backlog = [];\r\n this.seenlog.clear();\r\n this.donelog.clear();\r\n return this.program;\r\n }\r\n\r\n /** Parses a type. */\r\n parseType(\r\n tn: Tokenizer,\r\n acceptParenthesized: bool = true,\r\n suppressErrors: bool = false\r\n ): CommonTypeNode | null {\r\n\r\n // NOTE: this parses our limited subset\r\n var token = tn.next();\r\n var startPos = tn.tokenPos;\r\n\r\n var type: CommonTypeNode;\r\n\r\n // '(' ...\r\n if (token == Token.OPENPAREN) {\r\n\r\n // '(' FunctionSignature ')' '|' 'null'?\r\n let isNullableSignature = tn.skip(Token.OPENPAREN);\r\n // FunctionSignature?\r\n let signature = this.tryParseSignature(tn);\r\n if (signature) {\r\n if (isNullableSignature) {\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.BAR)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"|\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.NULL)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"null\"\r\n );\r\n }\r\n signature.isNullable = true;\r\n }\r\n return signature;\r\n } else if (isNullableSignature || this.tryParseSignatureIsSignature) {\r\n this.error(\r\n DiagnosticCode.Unexpected_token,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n // Type (',' Type)* ')'\r\n if (acceptParenthesized) {\r\n let innerType = this.parseType(tn, false, suppressErrors);\r\n if (!innerType) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"}\"\r\n );\r\n }\r\n return null;\r\n }\r\n type = innerType;\r\n type.range.start = startPos;\r\n type.range.end = tn.pos;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Unexpected_token,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n // 'void'\r\n } else if (token == Token.VOID) {\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"void\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // 'this'\r\n } else if (token == Token.THIS) {\r\n type = Node.createType(\r\n Node.createThisExpression(tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // 'true'\r\n } else if (token == Token.TRUE || token == Token.FALSE) {\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"bool\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // StringLiteral\r\n } else if (token == Token.STRINGLITERAL) {\r\n tn.readString();\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"string\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // Identifier\r\n } else if (token == Token.IDENTIFIER) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let parameters = new Array();\r\n let nullable = false;\r\n\r\n // Name\r\n if (tn.skip(Token.LESSTHAN)) {\r\n do {\r\n let parameter = this.parseType(tn, true, suppressErrors);\r\n if (!parameter) return null;\r\n parameters.push(parameter);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \">\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n // ... | null\r\n if (tn.skip(Token.BAR)) {\r\n if (tn.skip(Token.NULL)) {\r\n nullable = true;\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"null\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n type = Node.createType(identifier, parameters, nullable, tn.range(startPos, tn.pos));\r\n\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n // ... [][]\r\n while (tn.skip(Token.OPENBRACKET)) {\r\n let bracketStart = tn.tokenPos;\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n }\r\n return null;\r\n }\r\n let bracketRange = tn.range(bracketStart, tn.pos);\r\n\r\n // ...[] | null\r\n let nullable = false;\r\n if (tn.skip(Token.BAR)) {\r\n if (tn.skip(Token.NULL)) {\r\n nullable = true;\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"null\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"Array\", bracketRange),\r\n [ type ],\r\n nullable,\r\n tn.range(startPos, tn.pos)\r\n );\r\n if (nullable) break;\r\n }\r\n\r\n return type;\r\n }\r\n\r\n // Indicates whether tryParseSignature determined that it is handling a Signature\r\n private tryParseSignatureIsSignature: bool = false;\r\n\r\n /** Parses a function signature, as used in type declarations. */\r\n tryParseSignature(\r\n tn: Tokenizer\r\n ): SignatureNode | null {\r\n\r\n // at '(': ('...'? Identifier '?'? ':' Type (',' '...'? Identifier '?'? ':' Type)* )? ')' '=>' Type\r\n\r\n var state = tn.mark();\r\n var startPos = tn.tokenPos;\r\n var parameters: ParameterNode[] | null = null;\r\n var thisType: TypeNode | null = null;\r\n var isSignature: bool = false;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n parameters = [];\r\n\r\n } else {\r\n isSignature = false; // not yet known\r\n do {\r\n let kind = ParameterKind.DEFAULT;\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n kind = ParameterKind.REST;\r\n }\r\n if (tn.skip(Token.THIS)) {\r\n if (tn.skip(Token.COLON)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n let t = this.parseType(tn, false);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n this.tryParseSignatureIsSignature = true;\r\n return null;\r\n }\r\n thisType = t;\r\n } else {\r\n tn.reset(state);\r\n this.tryParseSignatureIsSignature = false;\r\n return null;\r\n }\r\n } else if (tn.skipIdentifier()) {\r\n let name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range(tn.tokenPos, tn.pos));\r\n if (tn.skip(Token.QUESTION)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n if (kind == ParameterKind.REST) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n tn.range()\r\n ); // recoverable\r\n } else {\r\n kind = ParameterKind.OPTIONAL;\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n let type = this.parseType(tn); // not suppressing errors because known\r\n if (!type) {\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n let param = new ParameterNode();\r\n param.parameterKind = kind;\r\n param.name = name;\r\n param.type = type;\r\n if (!parameters) parameters = [ param ];\r\n else parameters.push(param);\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n }\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n }\r\n\r\n var returnType: CommonTypeNode | null;\r\n if (tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n returnType = this.parseType(tn);\r\n if (!returnType) {\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=>\"\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n this.tryParseSignatureIsSignature = true;\r\n return Node.createSignature(\r\n parameters || [],\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n\r\n // statements\r\n\r\n parseDecorator(\r\n tn: Tokenizer\r\n ): DecoratorNode | null {\r\n\r\n // at '@': Identifier ('.' Identifier)* '(' Arguments\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skipIdentifier()) {\r\n let name = tn.readIdentifier();\r\n let expression: Expression = Node.createIdentifierExpression(name, tn.range(startPos, tn.pos));\r\n while (tn.skip(Token.DOT)) {\r\n if (tn.skipIdentifier()) {\r\n name = tn.readIdentifier();\r\n expression = Node.createPropertyAccessExpression(\r\n expression,\r\n Node.createIdentifierExpression(name, tn.range()),\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n let args: Expression[] | null;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n args = this.parseArguments(tn);\r\n if (args) {\r\n return Node.createDecorator(expression, args, tn.range(startPos, tn.pos));\r\n }\r\n } else {\r\n return Node.createDecorator(expression, null, tn.range(startPos, tn.pos));\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseVariable(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): VariableStatement | null {\r\n\r\n // at ('const' | 'let' | 'var'): VariableDeclaration (',' VariableDeclaration)* ';'?\r\n\r\n var members = new Array();\r\n do {\r\n let member = this.parseVariableDeclaration(tn, flags, decorators);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (tn.skip(Token.COMMA));\r\n\r\n var ret = Node.createVariableStatement(members, decorators, flags, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseVariableDeclaration(\r\n tn: Tokenizer,\r\n parentFlags: CommonFlags,\r\n parentDecorators: DecoratorNode[] | null\r\n ): VariableDeclaration | null {\r\n\r\n // before: Identifier (':' Type)? ('=' Expression)?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var flags = parentFlags;\r\n if (tn.skip(Token.EXCLAMATION)) {\r\n flags |= CommonFlags.DEFINITE_ASSIGNMENT;\r\n }\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 var range = Range.join(identifier.range, tn.range());\r\n if ((flags & CommonFlags.DEFINITE_ASSIGNMENT) && initializer) {\r\n this.error(\r\n DiagnosticCode.A_definite_assignment_assertion_is_not_permitted_in_this_context,\r\n range);\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\r\n );\r\n }\r\n\r\n parseEnum(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): EnumDeclaration | null {\r\n\r\n // at 'enum': Identifier '{' (EnumValueDeclaration (',' EnumValueDeclaration )*)? '}' ';'?\r\n\r\n if (tn.next() != Token.IDENTIFIER) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.next() != Token.OPENBRACE) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n var members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseEnumValue(tn, CommonFlags.NONE);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n var ret = Node.createEnumDeclaration(\r\n identifier,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseEnumValue(\r\n tn: Tokenizer,\r\n parentFlags: CommonFlags\r\n ): EnumValueDeclaration | null {\r\n\r\n // before: Identifier ('=' Expression)?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var value: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n value = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!value) return null;\r\n }\r\n return Node.createEnumValueDeclaration(\r\n identifier,\r\n value,\r\n parentFlags,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n }\r\n\r\n parseReturn(\r\n tn: Tokenizer\r\n ): ReturnStatement | null {\r\n\r\n // at 'return': Expression | (';' | '}' | ...'\\n')\r\n\r\n var expr: Expression | null = null;\r\n if (\r\n tn.peek(true) != Token.SEMICOLON &&\r\n tn.nextToken != Token.CLOSEBRACE &&\r\n !tn.nextTokenOnNewLine\r\n ) {\r\n if (!(expr = this.parseExpression(tn))) return null;\r\n }\r\n\r\n var ret = Node.createReturnStatement(expr, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseTypeParameters(\r\n tn: Tokenizer\r\n ): TypeParameterNode[] | null {\r\n\r\n // at '<': TypeParameter (',' TypeParameter)* '>'\r\n\r\n var typeParameters = new Array();\r\n while (!tn.skip(Token.GREATERTHAN)) {\r\n let typeParameter = this.parseTypeParameter(tn);\r\n if (!typeParameter) return null;\r\n typeParameters.push(typeParameter);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.GREATERTHAN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n if (typeParameters.length === 0) {\r\n this.error(\r\n DiagnosticCode.Type_parameter_list_cannot_be_empty,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n return typeParameters;\r\n }\r\n\r\n parseTypeParameter(\r\n tn: Tokenizer\r\n ): TypeParameterNode | null {\r\n\r\n // before: Identifier ('extends' Type)?\r\n\r\n if (tn.next() == Token.IDENTIFIER) {\r\n let identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n let extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\r\n }\r\n return Node.createTypeParameter(\r\n identifier,\r\n extendsType,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n private parseParametersThis: TypeNode | null = null;\r\n\r\n parseParameters(\r\n tn: Tokenizer,\r\n isConstructor: bool = false\r\n ): ParameterNode[] | null {\r\n\r\n // at '(': (Parameter (',' Parameter)*)? ')'\r\n\r\n var parameters = new Array();\r\n var seenRest: ParameterNode | null = null;\r\n var seenOptional = false;\r\n var reportedRest = false;\r\n var thisType: CommonTypeNode | null = null;\r\n\r\n // check if there is a leading `this` parameter\r\n this.parseParametersThis = null;\r\n if (tn.skip(Token.THIS)) {\r\n if (tn.skip(Token.COLON)) {\r\n thisType = this.parseType(tn); // reports\r\n if (!thisType) return null;\r\n if (thisType.kind == NodeKind.TYPE) {\r\n this.parseParametersThis = thisType;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n thisType.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n return parameters;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n while (!tn.skip(Token.CLOSEPAREN)) {\r\n let param = this.parseParameter(tn, isConstructor); // reports\r\n if (!param) return null;\r\n if (seenRest && !reportedRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,\r\n seenRest.name.range\r\n );\r\n reportedRest = true;\r\n }\r\n switch (param.parameterKind) {\r\n default: {\r\n if (seenOptional) {\r\n this.error(\r\n DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,\r\n param.name.range\r\n );\r\n }\r\n break;\r\n }\r\n case ParameterKind.OPTIONAL: {\r\n seenOptional = true;\r\n break;\r\n }\r\n case ParameterKind.REST: {\r\n seenRest = param;\r\n break;\r\n }\r\n }\r\n parameters.push(param);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return parameters;\r\n }\r\n\r\n parseParameter(\r\n tn: Tokenizer,\r\n isConstructor: bool = false\r\n ): ParameterNode | null {\r\n\r\n // before: ('public' | 'private' | 'protected' | '...')? Identifier '?'? (':' Type)? ('=' Expression)?\r\n\r\n var isRest = false;\r\n var isOptional = false;\r\n var startRange: Range | null = null;\r\n var accessFlags: CommonFlags = CommonFlags.NONE;\r\n if (isConstructor) {\r\n if (tn.skip(Token.PUBLIC)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PROTECTED;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PRIVATE;\r\n }\r\n if (tn.peek() == Token.READONLY) {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek() != Token.COLON) { // modifier\r\n tn.discard(state);\r\n if (!startRange) startRange = tn.range();\r\n accessFlags |= CommonFlags.READONLY;\r\n } else { // identifier\r\n tn.reset(state);\r\n }\r\n }\r\n }\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n if (accessFlags) {\r\n this.error(\r\n DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,\r\n tn.range()\r\n );\r\n } else {\r\n startRange = tn.range();\r\n }\r\n isRest = true;\r\n }\r\n if (tn.skipIdentifier()) {\r\n if (!isRest) startRange = tn.range();\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let type: CommonTypeNode | null = null;\r\n if (isOptional = tn.skip(Token.QUESTION)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n identifier.range\r\n );\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n } else {\r\n type = Node.createOmittedType(tn.range(tn.pos));\r\n }\r\n let initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,\r\n identifier.range\r\n );\r\n }\r\n if (isOptional) {\r\n this.error(\r\n DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,\r\n identifier.range\r\n );\r\n } else {\r\n isOptional = true;\r\n }\r\n initializer = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!initializer) return null;\r\n }\r\n let param = Node.createParameter(\r\n identifier,\r\n type,\r\n initializer,\r\n isRest\r\n ? ParameterKind.REST\r\n : isOptional\r\n ? ParameterKind.OPTIONAL\r\n : ParameterKind.DEFAULT,\r\n Range.join(startRange, tn.range())\r\n );\r\n param.flags |= accessFlags;\r\n return param;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseFunction(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): FunctionDeclaration | null {\r\n\r\n // at 'function':\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // '(' Parameters (':' Type)?\r\n // '{' Statement* '}'\r\n // ';'?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range(tn.pos)\r\n );\r\n return null;\r\n }\r\n\r\n var name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var signatureStart: i32 = -1;\r\n\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n signatureStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n if (signatureStart < 0) {\r\n signatureStart = tn.tokenPos;\r\n }\r\n\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n var thisType = this.parseParametersThis;\r\n\r\n var isSetter = (flags & CommonFlags.SET) != 0;\r\n if (isSetter) {\r\n if (parameters.length != 1) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,\r\n name.range\r\n ); // recoverable\r\n }\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,\r\n name.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n if (flags & CommonFlags.GET) {\r\n if (parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n name.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn, true, isSetter);\r\n if (!returnType) return null;\r\n }\r\n\r\n if (!returnType) {\r\n returnType = Node.createOmittedType(\r\n tn.range(tn.pos)\r\n );\r\n if (!isSetter) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n var body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body) return null;\r\n } else if (!(flags & CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n tn.range(tn.pos)\r\n );\r\n }\r\n\r\n var ret = Node.createFunctionDeclaration(\r\n name,\r\n typeParameters,\r\n signature,\r\n body,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseFunctionExpression(tn: Tokenizer): FunctionExpression | null {\r\n var startPos = tn.tokenPos;\r\n var name: IdentifierExpression;\r\n var isArrow = false;\r\n\r\n // either at 'function':\r\n // Identifier?\r\n // '(' Parameters (':' Type)?\r\n // Statement\r\n\r\n if (tn.token == Token.FUNCTION) {\r\n if (tn.skipIdentifier()) {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else { // empty name\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.pos));\r\n }\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n // or at '(' of arrow function:\r\n // Parameters (':' Type)?\r\n // Statement\r\n\r\n } else {\r\n isArrow = true;\r\n assert(tn.token == Token.OPENPAREN);\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.tokenPos));\r\n }\r\n\r\n // TODO: type parameters? doesn't seem worth it.\r\n\r\n var signatureStart = tn.pos;\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n return this.parseFunctionExpressionCommon(tn, name, parameters, isArrow, startPos, signatureStart);\r\n }\r\n\r\n private parseFunctionExpressionCommon(\r\n tn: Tokenizer,\r\n name: IdentifierExpression,\r\n parameters: ParameterNode[],\r\n isArrow: bool,\r\n startPos: i32 = -1,\r\n signatureStart: i32 = -1\r\n ): FunctionExpression | null {\r\n if (startPos < 0) startPos = name.range.start;\r\n if (signatureStart < 0) signatureStart = startPos;\r\n\r\n var returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n\r\n if (isArrow) {\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"=>\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n var signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n null, // TODO?\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n var body: Statement | null;\r\n if (isArrow) {\r\n body = this.parseStatement(tn, false);\r\n } else {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"{\"\r\n );\r\n return null;\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n }\r\n if (!body) return null;\r\n\r\n var declaration = Node.createFunctionDeclaration(\r\n name,\r\n null,\r\n signature,\r\n body,\r\n null,\r\n isArrow ? CommonFlags.ARROW : CommonFlags.NONE,\r\n tn.range(startPos, tn.pos)\r\n );\r\n return Node.createFunctionExpression(declaration);\r\n }\r\n\r\n parseClassOrInterface(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): ClassDeclaration | null {\r\n\r\n // at ('class' | 'interface'):\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // ('extends' Type)?\r\n // ('implements' Type (',' Type)*)?\r\n // '{' ClassMember* '}'\r\n\r\n var isInterface = tn.token == Token.INTERFACE;\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n var identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n\r\n var typeParameters: TypeParameterNode[] | null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n } else {\r\n typeParameters = [];\r\n }\r\n\r\n var extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\r\n }\r\n\r\n var implementsTypes: TypeNode[] | null = null;\r\n if (tn.skip(Token.IMPLEMENTS)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode.Interface_declaration_cannot_have_implements_clause,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n do {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n if (!isInterface) {\r\n if (!implementsTypes) implementsTypes = [];\r\n implementsTypes.push(type);\r\n }\r\n } while (tn.skip(Token.COMMA));\r\n }\r\n\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n\r\n var members = new Array();\r\n var declaration: ClassDeclaration;\r\n if (isInterface) {\r\n assert(!implementsTypes);\r\n declaration = Node.createInterfaceDeclaration(\r\n identifier,\r\n typeParameters,\r\n extendsType,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n declaration = Node.createClassDeclaration(\r\n identifier,\r\n typeParameters,\r\n extendsType,\r\n implementsTypes,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseClassMember(tn, declaration);\r\n if (!member) return null;\r\n member.parent = declaration;\r\n members.push(member);\r\n } while (!tn.skip(Token.CLOSEBRACE));\r\n }\r\n return declaration;\r\n }\r\n\r\n parseClassExpression(tn: Tokenizer): ClassExpression | null {\r\n\r\n // at 'class': Identifier? '{' ... '}'\r\n\r\n var startPos = tn.tokenPos;\r\n var name: IdentifierExpression;\r\n\r\n if (tn.skipIdentifier()) {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.pos));\r\n }\r\n\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"{\"\r\n );\r\n return null;\r\n }\r\n\r\n var members = new Array();\r\n var declaration = Node.createClassDeclaration(\r\n name,\r\n [],\r\n null,\r\n null,\r\n members,\r\n null,\r\n CommonFlags.NONE,\r\n tn.range(startPos, tn.pos)\r\n );\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseClassMember(tn, declaration);\r\n if (!member) return null;\r\n member.parent = declaration;\r\n members.push(member);\r\n } while (!tn.skip(Token.CLOSEBRACE));\r\n }\r\n return Node.createClassExpression(declaration);\r\n }\r\n\r\n parseClassMember(\r\n tn: Tokenizer,\r\n parent: ClassDeclaration\r\n ): DeclarationStatement | null {\r\n\r\n // before:\r\n // ('public' | 'private' | 'protected')?\r\n // ('static' | 'abstract')?\r\n // 'readonly'?\r\n // ('get' | 'set')?\r\n // Identifier ...\r\n\r\n var startPos = tn.pos;\r\n var isInterface = parent.kind == NodeKind.INTERFACEDECLARATION;\r\n\r\n var decorators = new Array();\r\n while (tn.skip(Token.AT)) {\r\n let decorator = this.parseDecorator(tn);\r\n if (!decorator) break;\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode.Decorators_are_not_valid_here,\r\n decorator.range\r\n );\r\n }\r\n decorators.push(decorator);\r\n }\r\n\r\n // inherit ambient status\r\n var flags = parent.flags & CommonFlags.AMBIENT;\r\n\r\n // implemented methods are virtual\r\n if (isInterface) flags |= CommonFlags.VIRTUAL;\r\n\r\n if (tn.skip(Token.PUBLIC)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"public\"\r\n );\r\n }\r\n flags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"private\"\r\n );\r\n }\r\n flags |= CommonFlags.PRIVATE;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"protected\"\r\n );\r\n }\r\n flags |= CommonFlags.PROTECTED;\r\n }\r\n\r\n var staticStart: i32 = 0;\r\n var staticEnd: i32 = 0;\r\n var abstractStart: i32 = 0;\r\n var abstractEnd: i32 = 0;\r\n if (tn.skip(Token.STATIC)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"static\"\r\n );\r\n }\r\n flags |= CommonFlags.STATIC;\r\n staticStart = tn.tokenPos;\r\n staticEnd = tn.pos;\r\n } else {\r\n flags |= CommonFlags.INSTANCE;\r\n if (tn.skip(Token.ABSTRACT)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"abstract\"\r\n );\r\n }\r\n flags |= CommonFlags.ABSTRACT;\r\n abstractStart = tn.tokenPos;\r\n abstractEnd = tn.pos;\r\n }\r\n if (parent.flags & CommonFlags.GENERIC) {\r\n flags |= CommonFlags.GENERIC_CONTEXT;\r\n }\r\n }\r\n\r\n var readonlyStart: i32 = 0;\r\n var readonlyEnd: i32 = 0;\r\n if (tn.skip(Token.READONLY)) {\r\n flags |= CommonFlags.READONLY;\r\n readonlyStart = tn.tokenPos;\r\n readonlyEnd = tn.pos;\r\n }\r\n\r\n // check if accessor: ('get' | 'set') ^\\n Identifier\r\n var state = tn.mark();\r\n var isConstructor = false;\r\n var isGetter = false;\r\n var getStart: i32 = 0;\r\n var getEnd: i32 = 0;\r\n var isSetter = false;\r\n var setStart: i32 = 0;\r\n var setEnd: i32 = 0;\r\n if (!isInterface) {\r\n if (tn.skip(Token.GET)) {\r\n if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n flags |= CommonFlags.GET;\r\n isGetter = true;\r\n setStart = tn.tokenPos;\r\n setEnd = tn.pos;\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n } else {\r\n tn.reset(state);\r\n }\r\n } else if (tn.skip(Token.SET)) {\r\n if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n flags |= CommonFlags.SET | CommonFlags.SET;\r\n isSetter = true;\r\n setStart = tn.tokenPos;\r\n setEnd = tn.pos;\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n } else {\r\n tn.reset(state);\r\n }\r\n } else if (tn.skip(Token.CONSTRUCTOR)) {\r\n flags |= CommonFlags.CONSTRUCTOR;\r\n isConstructor = true;\r\n if (flags & CommonFlags.STATIC) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(staticStart, staticEnd), \"static\"\r\n ); // recoverable\r\n }\r\n if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(abstractStart, abstractEnd), \"abstract\"\r\n ); // recoverable\r\n }\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n }\r\n }\r\n\r\n if (!isConstructor && !tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n var name = isConstructor\r\n ? Node.createConstructorExpression(tn.range())\r\n : Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n let typeParametersStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,\r\n tn.range(typeParametersStart, tn.pos)\r\n ); // recoverable\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.An_accessor_cannot_have_type_parameters,\r\n tn.range(typeParametersStart, tn.pos)\r\n ); // recoverable\r\n } else {\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n }\r\n\r\n // method: '(' Parameters (':' Type)? '{' Statement* '}' ';'?\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let signatureStart = tn.tokenPos;\r\n let parameters = this.parseParameters(tn, isConstructor);\r\n if (!parameters) return null;\r\n let thisType = this.parseParametersThis;\r\n if (isConstructor) {\r\n for (let i = 0, k = parameters.length; i < k; ++i) {\r\n let parameter = parameters[i];\r\n if (parameter.isAny(\r\n CommonFlags.PUBLIC |\r\n CommonFlags.PROTECTED |\r\n CommonFlags.PRIVATE |\r\n CommonFlags.READONLY\r\n )) {\r\n let implicitFieldDeclaration = Node.createFieldDeclaration(\r\n parameter.name,\r\n parameter.type,\r\n null, // initialized via parameter\r\n null,\r\n parameter.flags | CommonFlags.INSTANCE,\r\n parameter.range\r\n );\r\n implicitFieldDeclaration.parameterIndex = i;\r\n implicitFieldDeclaration.parent = parent;\r\n parameter.implicitFieldDeclaration = implicitFieldDeclaration;\r\n parent.members.push(implicitFieldDeclaration);\r\n }\r\n }\r\n } else if (isGetter) {\r\n if (parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n name.range\r\n );\r\n }\r\n } else if (isSetter) {\r\n if (parameters.length != 1) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,\r\n name.range\r\n );\r\n }\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,\r\n name.range\r\n );\r\n }\r\n }\r\n\r\n let returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n if (name.kind == NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration,\r\n tn.range()\r\n );\r\n } else if (isSetter) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_cannot_have_a_return_type_annotation,\r\n tn.range()\r\n );\r\n }\r\n returnType = this.parseType(tn, name.kind == NodeKind.CONSTRUCTOR || isSetter);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n if (!isSetter && name.kind != NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n let signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n let body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n } else if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract,\r\n tn.range(), name.text\r\n ); // recoverable\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body) return null;\r\n } else if (!(flags & CommonFlags.AMBIENT) && !isInterface) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n let retMethod = Node.createMethodDeclaration(\r\n name,\r\n typeParameters,\r\n signature,\r\n body,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retMethod;\r\n\r\n } else if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Constructor_implementation_is_missing,\r\n name.range\r\n );\r\n\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n name.range\r\n );\r\n\r\n // field: (':' Type)? ('=' Expression)? ';'?\r\n } else {\r\n if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(abstractStart, abstractEnd), \"abstract\"\r\n ); // recoverable\r\n }\r\n\r\n if (flags & CommonFlags.GET) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(getStart, getEnd), \"get\"\r\n ); // recoverable\r\n }\r\n\r\n if (flags & CommonFlags.SET) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(setStart, setEnd), \"set\"\r\n ); // recoverable\r\n }\r\n\r\n let type: CommonTypeNode | null = null;\r\n if (tn.skip(Token.QUESTION)) {\r\n this.error(\r\n DiagnosticCode.Optional_properties_are_not_supported,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n if (tn.skip(Token.EXCLAMATION)) {\r\n flags |= CommonFlags.DEFINITE_ASSIGNMENT;\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 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 range = tn.range(startPos, tn.pos);\r\n if ((flags & CommonFlags.DEFINITE_ASSIGNMENT) && ((flags & CommonFlags.STATIC) || isInterface || initializer)) {\r\n this.error(\r\n DiagnosticCode.A_definite_assignment_assertion_is_not_permitted_in_this_context,\r\n range\r\n );\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 range\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.skipIdentifier(IdentifierHandling.ALWAYS)) {\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.skipIdentifier(IdentifierHandling.ALWAYS)) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifier()) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createImportDeclaration(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportImport(\r\n tn: Tokenizer,\r\n startPos: i32\r\n ): ExportImportStatement | null {\r\n\r\n // at 'export' 'import': Identifier ('=' Identifier)? ';'?\r\n\r\n if (tn.skipIdentifier()) {\r\n let asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let ret = Node.createExportImportStatement(identifier, asIdentifier, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseStatement(\r\n tn: Tokenizer,\r\n topLevel: bool = false\r\n ): Statement | null {\r\n\r\n // at previous token\r\n\r\n var state = tn.mark();\r\n var token = tn.next();\r\n var statement: Statement | null = null;\r\n switch (token) {\r\n case Token.BREAK: {\r\n statement = this.parseBreak(tn);\r\n break;\r\n }\r\n case Token.CONST: {\r\n statement = this.parseVariable(tn, CommonFlags.CONST, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.CONTINUE: {\r\n statement = this.parseContinue(tn);\r\n break;\r\n }\r\n case Token.DO: {\r\n statement = this.parseDoStatement(tn);\r\n break;\r\n }\r\n case Token.FOR: {\r\n statement = this.parseForStatement(tn);\r\n break;\r\n }\r\n case Token.IF: {\r\n statement = this.parseIfStatement(tn);\r\n break;\r\n }\r\n case Token.LET: {\r\n statement = this.parseVariable(tn, CommonFlags.LET, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.VAR: {\r\n statement = this.parseVariable(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.OPENBRACE: {\r\n statement = this.parseBlockStatement(tn, topLevel);\r\n break;\r\n }\r\n case Token.RETURN: {\r\n if (topLevel) {\r\n this.error(\r\n DiagnosticCode.A_return_statement_can_only_be_used_within_a_function_body,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n statement = this.parseReturn(tn);\r\n break;\r\n }\r\n case Token.SEMICOLON: {\r\n return Node.createEmptyStatement(tn.range(tn.tokenPos));\r\n }\r\n case Token.SWITCH: {\r\n statement = this.parseSwitchStatement(tn);\r\n break;\r\n }\r\n case Token.THROW: {\r\n statement = this.parseThrowStatement(tn);\r\n break;\r\n }\r\n case Token.TRY: {\r\n statement = this.parseTryStatement(tn);\r\n break;\r\n }\r\n case Token.VOID: {\r\n statement = this.parseVoidStatement(tn);\r\n break;\r\n }\r\n case Token.WHILE: {\r\n statement = this.parseWhileStatement(tn);\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n statement = this.parseTypeDeclaration(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: {\r\n tn.reset(state);\r\n statement = this.parseExpressionStatement(tn);\r\n break;\r\n }\r\n }\r\n if (!statement) { // has been reported\r\n tn.reset(state);\r\n this.skipStatement(tn);\r\n } else {\r\n tn.discard(state);\r\n }\r\n return statement;\r\n }\r\n\r\n parseBlockStatement(\r\n tn: Tokenizer,\r\n topLevel: bool\r\n ): BlockStatement | null {\r\n\r\n // at '{': Statement* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let state = tn.mark();\r\n let statement = this.parseStatement(tn, topLevel);\r\n if (!statement) {\r\n if (tn.token == Token.ENDOFFILE) return null;\r\n tn.reset(state);\r\n this.skipStatement(tn);\r\n } else {\r\n tn.discard(state);\r\n statements.push(statement);\r\n }\r\n }\r\n var ret = Node.createBlockStatement(statements, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseBreak(\r\n tn: Tokenizer\r\n ): BreakStatement | null {\r\n\r\n // at 'break': Identifier? ';'?\r\n\r\n var identifier: IdentifierExpression | null = null;\r\n if (tn.peek(true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(IdentifierHandling.PREFER);\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = Node.createBreakStatement(identifier, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseContinue(\r\n tn: Tokenizer\r\n ): ContinueStatement | null {\r\n\r\n // at 'continue': Identifier? ';'?\r\n\r\n var identifier: IdentifierExpression | null = null;\r\n if (tn.peek(true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(IdentifierHandling.PREFER);\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = Node.createContinueStatement(identifier, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseDoStatement(\r\n tn: Tokenizer\r\n ): DoStatement | null {\r\n\r\n // at 'do': Statement 'while' '(' Expression ')' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n if (tn.skip(Token.WHILE)) {\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let ret = Node.createDoStatement(statement, condition, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"while\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExpressionStatement(\r\n tn: Tokenizer\r\n ): ExpressionStatement | null {\r\n\r\n // at previous token\r\n\r\n var expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n\r\n var ret = Node.createExpressionStatement(expr);\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseForStatement(\r\n tn: Tokenizer\r\n ): ForStatement | null {\r\n\r\n // at 'for': '(' Statement? Expression? ';' Expression? ')' Statement\r\n\r\n var startPos = tn.tokenPos;\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let initializer: Statement | null = null;\r\n\r\n if (tn.skip(Token.CONST)) {\r\n initializer = this.parseVariable(tn, CommonFlags.CONST, null, tn.tokenPos);\r\n } else if (tn.skip(Token.LET)) {\r\n initializer = this.parseVariable(tn, CommonFlags.LET, null, tn.tokenPos);\r\n } else if (tn.skip(Token.VAR)) {\r\n initializer = this.parseVariable(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n\r\n } else if (!tn.skip(Token.SEMICOLON)) {\r\n initializer = this.parseExpressionStatement(tn);\r\n if (!initializer) return null;\r\n }\r\n\r\n if (tn.token == Token.SEMICOLON) {\r\n let condition: ExpressionStatement | null = null;\r\n if (!tn.skip(Token.SEMICOLON)) {\r\n condition = this.parseExpressionStatement(tn);\r\n if (!condition) return null;\r\n }\r\n\r\n if (tn.token == Token.SEMICOLON) {\r\n let incrementor: Expression | null = null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n incrementor = this.parseExpression(tn);\r\n if (!incrementor) return null;\r\n\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n return Node.createForStatement(\r\n initializer,\r\n condition\r\n ? condition.expression\r\n : null,\r\n incrementor,\r\n statement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseIfStatement(\r\n tn: Tokenizer\r\n ): IfStatement | null {\r\n\r\n // at 'if': '(' Expression ')' Statement ('else' Statement)?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let elseStatement: Statement | null = null;\r\n if (tn.skip(Token.ELSE)) {\r\n elseStatement = this.parseStatement(tn);\r\n if (!elseStatement) return null;\r\n }\r\n return Node.createIfStatement(\r\n condition,\r\n statement,\r\n elseStatement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchStatement(\r\n tn: Tokenizer\r\n ): SwitchStatement | null {\r\n\r\n // at 'switch': '(' Expression ')' '{' SwitchCase* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let cases = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let case_ = this.parseSwitchCase(tn);\r\n if (!case_) return null;\r\n cases.push(case_);\r\n }\r\n let ret = Node.createSwitchStatement(condition, cases, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchCase(\r\n tn: Tokenizer\r\n ): SwitchCase | null {\r\n\r\n var startPos = tn.tokenPos;\r\n var statements: Statement[],\r\n statement: Statement | null;\r\n\r\n // 'case' Expression ':' Statement*\r\n\r\n if (tn.skip(Token.CASE)) {\r\n let label = this.parseExpression(tn);\r\n if (!label) return null;\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(label, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n\r\n // 'default' ':' Statement*\r\n\r\n } else if (tn.skip(Token.DEFAULT)) {\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(null, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._case_or_default_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseThrowStatement(\r\n tn: Tokenizer\r\n ): ThrowStatement | null {\r\n\r\n // at 'throw': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n var ret = Node.createThrowStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseTryStatement(\r\n tn: Tokenizer\r\n ): TryStatement | null {\r\n\r\n // at 'try':\r\n // '{' Statement* '}'\r\n // ('catch' '(' VariableMember ')' '{' Statement* '}')?\r\n // ('finally' '{' Statement* '}'? ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var stmt: Statement | null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n statements.push(stmt);\r\n }\r\n let catchVariable: IdentifierExpression | null = null;\r\n let catchStatements: Statement[] | null = null;\r\n let finallyStatements: Statement[] | null = null;\r\n if (tn.skip(Token.CATCH)) {\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n catchVariable = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n catchStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n catchStatements.push(stmt);\r\n }\r\n }\r\n if (tn.skip(Token.FINALLY)) {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n finallyStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n finallyStatements.push(stmt);\r\n }\r\n }\r\n if (!(catchStatements || finallyStatements)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"catch\"\r\n );\r\n return null;\r\n }\r\n let ret = Node.createTryStatement(\r\n statements,\r\n catchVariable,\r\n catchStatements,\r\n finallyStatements,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseTypeDeclaration(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): TypeDeclaration | null {\r\n\r\n // at 'type': Identifier ('<' TypeParameters '>')? '=' Type ';'?\r\n\r\n if (tn.skipIdentifier()) {\r\n let name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n if (tn.skip(Token.EQUALS)) {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n let ret = Node.createTypeDeclaration(\r\n name,\r\n typeParameters,\r\n type,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseVoidStatement(\r\n tn: Tokenizer\r\n ): VoidStatement | null {\r\n\r\n // at 'void': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn, Precedence.GROUPING);\r\n if (!expression) return null;\r\n var ret = Node.createVoidStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseWhileStatement(\r\n tn: Tokenizer\r\n ): WhileStatement | null {\r\n\r\n // at 'while': '(' Expression ')' Statement ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let ret = Node.createWhileStatement(expression, statement, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n // expressions\r\n // see: http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm#climbing\r\n\r\n parseExpressionStart(\r\n tn: Tokenizer\r\n ): Expression | null {\r\n\r\n var token = tn.next(IdentifierHandling.PREFER);\r\n var startPos = tn.tokenPos;\r\n var precedence = determinePrecedenceStart(token);\r\n if (precedence != Precedence.NONE) {\r\n let operand: Expression | null;\r\n\r\n // TODO: SpreadExpression, YieldExpression (currently become unsupported UnaryPrefixExpressions)\r\n\r\n // NewExpression\r\n if (token == Token.NEW) {\r\n operand = this.parseExpression(tn, Precedence.CALL);\r\n if (!operand) return null;\r\n if (operand.kind == NodeKind.CALL) {\r\n return Node.createNewExpression(\r\n (operand).expression,\r\n (operand).typeArguments,\r\n (operand).arguments,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n } else {\r\n operand = this.parseExpression(tn, precedence);\r\n if (!operand) return null;\r\n }\r\n\r\n // UnaryPrefixExpression\r\n if (token == Token.PLUS_PLUS || token == Token.MINUS_MINUS) {\r\n if (\r\n operand.kind != NodeKind.IDENTIFIER &&\r\n operand.kind != NodeKind.ELEMENTACCESS &&\r\n operand.kind != NodeKind.PROPERTYACCESS\r\n ) {\r\n this.error(\r\n DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,\r\n operand.range\r\n );\r\n }\r\n }\r\n return Node.createUnaryPrefixExpression(token, operand, tn.range(startPos, tn.pos));\r\n }\r\n\r\n var expr: Expression | null = null;\r\n switch (token) {\r\n\r\n case Token.NULL: return Node.createNullExpression(tn.range());\r\n case Token.TRUE: return Node.createTrueExpression(tn.range());\r\n case Token.FALSE: return Node.createFalseExpression(tn.range());\r\n\r\n // ParenthesizedExpression\r\n // FunctionExpression\r\n case Token.OPENPAREN: {\r\n\r\n // determine whether this is a function expression\r\n if (tn.skip(Token.CLOSEPAREN)) { // must be a function expression (fast route)\r\n return this.parseFunctionExpressionCommon(\r\n tn,\r\n Node.createEmptyIdentifierExpression(tn.range(startPos)),\r\n [],\r\n true\r\n );\r\n }\r\n let state = tn.mark();\r\n let again = true;\r\n do {\r\n switch (tn.next(IdentifierHandling.PREFER)) {\r\n\r\n // function expression\r\n case Token.DOT_DOT_DOT: {\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n switch (tn.next()) {\r\n\r\n // if we got here, check for arrow\r\n case Token.CLOSEPAREN: {\r\n if (\r\n !tn.skip(Token.COLON) &&\r\n !tn.skip(Token.EQUALS_GREATERTHAN)\r\n ) {\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 // optional parameter or parenthesized\r\n case Token.QUESTION: {\r\n if (\r\n tn.skip(Token.COLON) || // optional parameter with type\r\n tn.skip(Token.COMMA) || // optional parameter without type\r\n tn.skip(Token.CLOSEPAREN) // last optional parameter without type\r\n ) {\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n again = false; // parenthesized\r\n break;\r\n }\r\n case Token.COMMA: {\r\n break; // continue\r\n }\r\n // parenthesized expression\r\n // case Token.EQUALS: // missing type annotation for simplicity\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n // parenthesized expression\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n } while (again);\r\n tn.reset(state);\r\n\r\n // parse parenthesized\r\n expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n return Node.createParenthesizedExpression(expr, tn.range(startPos, tn.pos));\r\n }\r\n // ArrayLiteralExpression\r\n case Token.OPENBRACKET: {\r\n let elementExpressions = new Array();\r\n while (!tn.skip(Token.CLOSEBRACKET)) {\r\n if (tn.peek() == Token.COMMA) {\r\n expr = null; // omitted\r\n } else {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n }\r\n elementExpressions.push(expr);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACKET)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return Node.createArrayLiteralExpression(elementExpressions, tn.range(startPos, tn.pos));\r\n }\r\n // ObjectLiteralExpression\r\n case Token.OPENBRACE: {\r\n let startPos = tn.tokenPos;\r\n let names = new Array();\r\n let values = new Array();\r\n let name: IdentifierExpression;\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n if (!tn.skipIdentifier()) {\r\n if (!tn.skip(Token.STRINGLITERAL)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range(),\r\n );\r\n return null;\r\n }\r\n name = Node.createIdentifierExpression(tn.readString(), tn.range());\r\n name.set(CommonFlags.QUOTED);\r\n } else {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n names.push(name);\r\n if (tn.skip(Token.COLON)) {\r\n let value = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!value) return null;\r\n values.push(value);\r\n } else if (!name.is(CommonFlags.QUOTED)) {\r\n values.push(name);\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return Node.createObjectLiteralExpression(names, values, tn.range(startPos, tn.pos));\r\n }\r\n // AssertionExpression (unary prefix)\r\n case Token.LESSTHAN: {\r\n let toType = this.parseType(tn);\r\n if (!toType) return null;\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n expr = this.parseExpression(tn, Precedence.CALL);\r\n if (!expr) return null;\r\n return Node.createAssertionExpression(\r\n AssertionKind.PREFIX,\r\n expr,\r\n toType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n case Token.IDENTIFIER: {\r\n return Node.createIdentifierExpression(tn.readIdentifier(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.THIS: {\r\n return Node.createThisExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.CONSTRUCTOR: {\r\n return Node.createConstructorExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.SUPER: {\r\n return Node.createSuperExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.STRINGLITERAL: {\r\n return Node.createStringLiteralExpression(tn.readString(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.INTEGERLITERAL: {\r\n return Node.createIntegerLiteralExpression(tn.readInteger(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.FLOATLITERAL: {\r\n return Node.createFloatLiteralExpression(tn.readFloat(), tn.range(startPos, tn.pos));\r\n }\r\n // RegexpLiteralExpression\r\n // note that this also continues on invalid ones so the surrounding AST remains intact\r\n case Token.SLASH: {\r\n let regexpPattern = tn.readRegexpPattern(); // also reports\r\n if (!tn.skip(Token.SLASH)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"/\"\r\n );\r\n return null;\r\n }\r\n return Node.createRegexpLiteralExpression(\r\n regexpPattern,\r\n tn.readRegexpFlags(), // also reports\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n case Token.FUNCTION: {\r\n return this.parseFunctionExpression(tn);\r\n }\r\n case Token.CLASS: {\r\n return this.parseClassExpression(tn);\r\n }\r\n default: {\r\n if (token == Token.ENDOFFILE) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n tn.range(startPos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Expression_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n tryParseTypeArgumentsBeforeArguments(\r\n tn: Tokenizer\r\n ): CommonTypeNode[] | null {\r\n\r\n // at '<': Type (',' Type)* '>' '('\r\n\r\n var state = tn.mark();\r\n if (!tn.skip(Token.LESSTHAN)) return null;\r\n var typeArguments = new Array();\r\n do {\r\n if (tn.peek() === Token.GREATERTHAN) {\r\n break;\r\n }\r\n let type = this.parseType(tn, true, true);\r\n if (!type) {\r\n tn.reset(state);\r\n return null;\r\n }\r\n typeArguments.push(type);\r\n } while (tn.skip(Token.COMMA));\r\n if (tn.skip(Token.GREATERTHAN) && tn.skip(Token.OPENPAREN)) {\r\n return typeArguments;\r\n }\r\n tn.reset(state);\r\n return null;\r\n }\r\n\r\n parseArguments(\r\n tn: Tokenizer\r\n ): Expression[] | null {\r\n\r\n // at '(': (Expression (',' Expression)*)? ')'\r\n\r\n var args = new Array();\r\n while (!tn.skip(Token.CLOSEPAREN)) {\r\n let expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n args.push(expr);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return args;\r\n }\r\n\r\n parseExpression(\r\n tn: Tokenizer,\r\n precedence: Precedence = Precedence.COMMA\r\n ): Expression | null {\r\n assert(precedence != Precedence.NONE);\r\n\r\n var expr = this.parseExpressionStart(tn);\r\n if (!expr) return null;\r\n expr = this.maybeParseCallExpression(tn, expr); // simple call like on an Identifier\r\n\r\n var startPos = expr.range.start;\r\n var token: Token;\r\n var next: Expression | null = null;\r\n var nextPrecedence: Precedence;\r\n while (\r\n (nextPrecedence = determinePrecedence(token = tn.peek())) >= precedence\r\n ) { // precedence climbing\r\n tn.next();\r\n switch (token) {\r\n // AssertionExpression\r\n case Token.AS: {\r\n let toType = this.parseType(tn); // reports\r\n if (!toType) return null;\r\n expr = Node.createAssertionExpression(\r\n AssertionKind.AS,\r\n expr,\r\n toType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // InstanceOfExpression\r\n case Token.INSTANCEOF: {\r\n let isType = this.parseType(tn); // reports\r\n if (!isType) return null;\r\n expr = Node.createInstanceOfExpression(\r\n expr,\r\n isType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // ElementAccessExpression\r\n case Token.OPENBRACKET: {\r\n next = this.parseExpression(tn); // reports\r\n if (!next) return null;\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n expr = Node.createElementAccessExpression(\r\n expr,\r\n next,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // UnaryPostfixExpression\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS: {\r\n if (\r\n expr.kind != NodeKind.IDENTIFIER &&\r\n expr.kind != NodeKind.ELEMENTACCESS &&\r\n expr.kind != NodeKind.PROPERTYACCESS\r\n ) {\r\n this.error(\r\n DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,\r\n expr.range\r\n );\r\n }\r\n expr = Node.createUnaryPostfixExpression(\r\n token,\r\n expr,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // TernaryExpression\r\n case Token.QUESTION: {\r\n let ifThen = this.parseExpression(tn);\r\n if (!ifThen) return null;\r\n if (!tn.skip(Token.COLON)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n let ifElse = this.parseExpression(tn, precedence > Precedence.COMMA\r\n ? Precedence.COMMA + 1\r\n : Precedence.COMMA\r\n );\r\n if (!ifElse) return null;\r\n expr = Node.createTernaryExpression(\r\n expr,\r\n ifThen,\r\n ifElse,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // CommaExpression\r\n case Token.COMMA: {\r\n let commaExprs: Expression[] = [ expr ];\r\n do {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n commaExprs.push(expr);\r\n } while (tn.skip(Token.COMMA));\r\n expr = Node.createCommaExpression(commaExprs, tn.range(startPos, tn.pos));\r\n break;\r\n }\r\n default: {\r\n\r\n // PropertyAccessExpression\r\n if (token == Token.DOT) {\r\n if (tn.skipIdentifier()) {\r\n next = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\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 if (next.kind == NodeKind.IDENTIFIER) { // expr '.' 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) { // expr '.' CallExpression\r\n expr = this.joinPropertyCall(tn, startPos, expr, next);\r\n if (!expr) return null;\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 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 expr = Node.createBinaryExpression(token, expr, next, tn.range(startPos, tn.pos));\r\n }\r\n break;\r\n }\r\n }\r\n expr = this.maybeParseCallExpression(tn, expr); // compound call like on an ElementAccess\r\n }\r\n return expr;\r\n }\r\n\r\n private joinPropertyCall(\r\n tn: Tokenizer,\r\n startPos: i32,\r\n expr: Expression,\r\n call: CallExpression\r\n ): Expression | null {\r\n var callee = call.expression;\r\n switch (callee.kind) {\r\n case NodeKind.IDENTIFIER: { // join property access and use as call target\r\n call.expression = Node.createPropertyAccessExpression(\r\n expr,\r\n callee,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n case NodeKind.CALL: { // join call target und wrap the original call around it\r\n let inner = this.joinPropertyCall(tn, startPos, expr, callee);\r\n if (!inner) return null;\r\n call.expression = inner;\r\n call.range = tn.range(startPos, tn.pos);\r\n break;\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n call.range\r\n );\r\n return null;\r\n }\r\n }\r\n return call;\r\n }\r\n\r\n private maybeParseCallExpression(\r\n tn: Tokenizer,\r\n expr: Expression\r\n ): Expression {\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) break;\r\n expr = Node.createCallExpression( // is again callable\r\n expr,\r\n typeArguments,\r\n args,\r\n tn.range(expr.range.start, tn.pos)\r\n );\r\n }\r\n }\r\n return expr;\r\n }\r\n\r\n /** Skips over a statement on errors in an attempt to reduce unnecessary diagnostic noise. */\r\n skipStatement(tn: Tokenizer): void {\r\n tn.peek(true);\r\n if (tn.nextTokenOnNewLine) tn.next(); // if reset() to the previous line\r\n do {\r\n let nextToken = tn.peek(true);\r\n if (\r\n nextToken == Token.ENDOFFILE || // next step should handle this\r\n nextToken == Token.SEMICOLON // end of the statement for sure\r\n ) {\r\n tn.next();\r\n break;\r\n }\r\n if (tn.nextTokenOnNewLine) break; // end of the statement maybe\r\n switch (tn.next()) {\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n break;\r\n }\r\n case Token.STRINGLITERAL: {\r\n tn.readString();\r\n break;\r\n }\r\n case Token.INTEGERLITERAL: {\r\n tn.readInteger();\r\n break;\r\n }\r\n case Token.FLOATLITERAL: {\r\n tn.readFloat();\r\n break;\r\n }\r\n }\r\n } while (true);\r\n }\r\n\r\n /** Skips over a block on errors in an attempt to reduce unnecessary diagnostic noise. */\r\n skipBlock(tn: Tokenizer): void {\r\n // at '{': ... '}'\r\n var depth = 1;\r\n var again = true;\r\n do {\r\n switch (tn.next()) {\r\n case Token.ENDOFFILE: {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n again = false;\r\n break;\r\n }\r\n case Token.OPENBRACE: {\r\n ++depth;\r\n break;\r\n }\r\n case Token.CLOSEBRACE: {\r\n --depth;\r\n if (!depth) again = false;\r\n break;\r\n }\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n break;\r\n }\r\n case Token.STRINGLITERAL: {\r\n tn.readString();\r\n break;\r\n }\r\n case Token.INTEGERLITERAL: {\r\n tn.readInteger();\r\n break;\r\n }\r\n case Token.FLOATLITERAL: {\r\n tn.readFloat();\r\n break;\r\n }\r\n }\r\n } while (again);\r\n }\r\n}\r\n\r\n/** Operator precedence from least to largest. */\r\nexport const enum Precedence {\r\n NONE,\r\n COMMA,\r\n SPREAD,\r\n YIELD,\r\n ASSIGNMENT,\r\n CONDITIONAL,\r\n LOGICAL_OR,\r\n LOGICAL_AND,\r\n BITWISE_OR,\r\n BITWISE_XOR,\r\n BITWISE_AND,\r\n EQUALITY,\r\n RELATIONAL,\r\n SHIFT,\r\n ADDITIVE,\r\n MULTIPLICATIVE,\r\n EXPONENTIATED,\r\n UNARY_PREFIX,\r\n UNARY_POSTFIX,\r\n CALL,\r\n MEMBERACCESS,\r\n GROUPING\r\n}\r\n\r\n/** Determines the precedence of a starting token. */\r\nfunction determinePrecedenceStart(kind: Token): Precedence {\r\n switch (kind) {\r\n case Token.DOT_DOT_DOT: return Precedence.SPREAD;\r\n case Token.YIELD: return Precedence.YIELD;\r\n case Token.EXCLAMATION:\r\n case Token.TILDE:\r\n case Token.PLUS:\r\n case Token.MINUS:\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS:\r\n case Token.TYPEOF:\r\n case Token.VOID:\r\n case Token.DELETE: return Precedence.UNARY_PREFIX;\r\n case Token.NEW: return Precedence.MEMBERACCESS;\r\n }\r\n return Precedence.NONE;\r\n}\r\n\r\n/** Determines the precende of a non-starting token. */\r\nfunction determinePrecedence(kind: Token): Precedence {\r\n switch (kind) {\r\n case Token.COMMA: return Precedence.COMMA;\r\n case Token.EQUALS:\r\n case Token.PLUS_EQUALS:\r\n case Token.MINUS_EQUALS:\r\n case Token.ASTERISK_ASTERISK_EQUALS:\r\n case Token.ASTERISK_EQUALS:\r\n case Token.SLASH_EQUALS:\r\n case Token.PERCENT_EQUALS:\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.AMPERSAND_EQUALS:\r\n case Token.CARET_EQUALS:\r\n case Token.BAR_EQUALS: return Precedence.ASSIGNMENT;\r\n case Token.QUESTION: return Precedence.CONDITIONAL;\r\n case Token.BAR_BAR: return Precedence.LOGICAL_OR;\r\n case Token.AMPERSAND_AMPERSAND: return Precedence.LOGICAL_AND;\r\n case Token.BAR: return Precedence.BITWISE_OR;\r\n case Token.CARET: return Precedence.BITWISE_XOR;\r\n case Token.AMPERSAND: return Precedence.BITWISE_AND;\r\n case Token.EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS:\r\n case Token.EQUALS_EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS_EQUALS: return Precedence.EQUALITY;\r\n case Token.AS:\r\n case Token.IN:\r\n case Token.INSTANCEOF:\r\n case Token.LESSTHAN:\r\n case Token.GREATERTHAN:\r\n case Token.LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_EQUALS: return Precedence.RELATIONAL;\r\n case Token.LESSTHAN_LESSTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: return Precedence.SHIFT;\r\n case Token.PLUS:\r\n case Token.MINUS: return Precedence.ADDITIVE;\r\n case Token.ASTERISK:\r\n case Token.SLASH:\r\n case Token.PERCENT: return Precedence.MULTIPLICATIVE;\r\n case Token.ASTERISK_ASTERISK: return Precedence.EXPONENTIATED;\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS: return Precedence.UNARY_POSTFIX;\r\n case Token.DOT:\r\n case Token.NEW:\r\n case Token.OPENBRACKET: return Precedence.MEMBERACCESS;\r\n }\r\n return Precedence.NONE;\r\n}\r\n\r\n/** Determines whether a non-starting token is right associative. */\r\nfunction isRightAssociative(kind: Token): bool {\r\n switch (kind) {\r\n case Token.EQUALS:\r\n case Token.PLUS_EQUALS:\r\n case Token.MINUS_EQUALS:\r\n case Token.ASTERISK_ASTERISK_EQUALS:\r\n case Token.ASTERISK_EQUALS:\r\n case Token.SLASH_EQUALS:\r\n case Token.PERCENT_EQUALS:\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.AMPERSAND_EQUALS:\r\n case Token.CARET_EQUALS:\r\n case Token.BAR_EQUALS:\r\n case Token.QUESTION:\r\n case Token.ASTERISK_ASTERISK: return true;\r\n default: return false;\r\n }\r\n}\r\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://assemblyscript/webpack/universalModuleDefinition","webpack://assemblyscript/webpack/bootstrap","webpack://assemblyscript/./src/common.ts","webpack://assemblyscript/./src/diagnostics.ts","webpack://assemblyscript/./src/util/index.ts","webpack://assemblyscript/./src/ast.ts","webpack://assemblyscript/./src/program.ts","webpack://assemblyscript/./src/module.ts","webpack://assemblyscript/(webpack)/buildin/global.js","webpack://assemblyscript/./src/types.ts","webpack://assemblyscript/./src/tokenizer.ts","webpack://assemblyscript/./src/compiler.ts","webpack://assemblyscript/./src/diagnosticMessages.generated.ts","webpack://assemblyscript/./src/resolver.ts","webpack://assemblyscript/./src/glue/js/index.ts","webpack://assemblyscript/./src/glue/js/binaryen.js","webpack://assemblyscript/external \"binaryen\"","webpack://assemblyscript/./std/portable/index.js","webpack://assemblyscript/./src/glue/js/float.js","webpack://assemblyscript/./src/glue/js/i64.js","webpack://assemblyscript/./node_modules/long/src/long.js","webpack://assemblyscript/./src/builtins.ts","webpack://assemblyscript/./src/util/charcode.ts","webpack://assemblyscript/./src/util/path.ts","webpack://assemblyscript/./src/util/text.ts","webpack://assemblyscript/./src/util/binary.ts","webpack://assemblyscript/./src/index.ts","webpack://assemblyscript/./src/decompiler.ts","webpack://assemblyscript/./src/definitions.ts","webpack://assemblyscript/./src/parser.ts"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__15__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","CommonFlags","PATH_DELIMITER","PARENT_SUBST","GETTER_PREFIX","SETTER_PREFIX","INSTANCE_DELIMITER","STATIC_DELIMITER","INNER_DELIMITER","LIBRARY_SUBST","LIBRARY_PREFIX","FILESPACE_PREFIX","DiagnosticCategory","diagnosticMessages_generated_1","util_1","diagnosticMessages_generated_2","diagnosticCategoryToString","category","INFO","WARNING","ERROR","assert","diagnosticCategoryToColor","COLOR_BLUE","COLOR_YELLOW","COLOR_RED","DiagnosticCode","diagnosticCodeToString","COLOR_RESET","DiagnosticMessage","code","message","range","arg0","arg1","arg2","replace","createInfo","createWarning","createError","withRange","toString","source","normalizedPath","line","column","formatDiagnosticContext","useColors","text","len","length","start","end","isLineBreak","charCodeAt","sb","substring","push","join","formatDiagnosticMessage","showContext","DiagnosticEmitter","diagnostics","Array","emitDiagnostic","info","warning","error","__export","common_1","tokenizer_1","Token","Range","NodeKind","nodeIsConstantValue","kind","LITERAL","NULL","TRUE","FALSE","nodeIsCallable","IDENTIFIER","CALL","ELEMENTACCESS","PROPERTYACCESS","PARENTHESIZED","nodeIsGenericCallable","Node","parent","flags","NONE","is","flag","isAny","set","createType","typeArguments","isNullable","type","TypeNode","setParent","createOmittedType","createIdentifierExpression","createTypeParameter","extendsType","elem","TypeParameterNode","createParameter","initializer","ParameterNode","parameterKind","createSignature","parameters","returnType","explicitThisType","sig","SignatureNode","createDecorator","args","stmt","DecoratorNode","arguments","decoratorKind","decoratorNameToKind","createComment","node","CommentNode","commentKind","expr","IdentifierExpression","createEmptyIdentifierExpression","createArrayLiteralExpression","elements","ArrayLiteralExpression","elementExpressions","nodes","k","setParentIfNotNull","createAssertionExpression","assertionKind","expression","toType","AssertionExpression","createBinaryExpression","operator","left","right","BinaryExpression","createCallExpression","typeArgs","CallExpression","createClassExpression","declaration","ClassExpression","createCommaExpression","expressions","CommaExpression","createConstructorExpression","ConstructorExpression","createElementAccessExpression","element","ElementAccessExpression","elementExpression","createFalseExpression","FalseExpression","createFloatLiteralExpression","FloatLiteralExpression","createFunctionExpression","FunctionExpression","ARROW","createInstanceOfExpression","isType","InstanceOfExpression","createIntegerLiteralExpression","IntegerLiteralExpression","createNewExpression","NewExpression","createNullExpression","NullExpression","createObjectLiteralExpression","names","values","ObjectLiteralExpression","createParenthesizedExpression","ParenthesizedExpression","createPropertyAccessExpression","PropertyAccessExpression","createRegexpLiteralExpression","pattern","RegexpLiteralExpression","patternFlags","createTernaryExpression","condition","ifThen","ifElse","TernaryExpression","createStringLiteralExpression","StringLiteralExpression","createSuperExpression","SuperExpression","createThisExpression","ThisExpression","createTrueExpression","TrueExpression","createUnaryPostfixExpression","operand","UnaryPostfixExpression","createUnaryPrefixExpression","UnaryPrefixExpression","createBlockStatement","statements","BlockStatement","createBreakStatement","label","BreakStatement","createClassDeclaration","identifier","typeParameters","implementsTypes","members","decorators","ClassDeclaration","createContinueStatement","ContinueStatement","createDoStatement","statement","DoStatement","createEmptyStatement","EmptyStatement","createEnumDeclaration","EnumDeclaration","createEnumValueDeclaration","EnumValueDeclaration","createExportStatement","path","ExportStatement","normalizePath","startsWith","resolvePath","internalPath","mangleInternalPath","createExportImportStatement","externalName","ExportImportStatement","createExportMember","ExportMember","createExpressionStatement","ExpressionStatement","createIfStatement","ifTrue","ifFalse","IfStatement","createImportStatement","decls","ImportStatement","declarations","namespaceName","createImportStatementWithWildcard","createImportDeclaration","ImportDeclaration","createInterfaceDeclaration","InterfaceDeclaration","createFieldDeclaration","FieldDeclaration","createForStatement","incrementor","ForStatement","createFunctionDeclaration","signature","body","FunctionDeclaration","createMethodDeclaration","MethodDeclaration","createNamespaceDeclaration","NamespaceDeclaration","createReturnStatement","ReturnStatement","createSwitchStatement","cases","SwitchStatement","createSwitchCase","SwitchCase","createThrowStatement","ThrowStatement","createTryStatement","catchVariable","catchStatements","finallyStatements","TryStatement","createTypeDeclaration","alias","TypeDeclaration","createVariableStatement","VariableStatement","createVariableDeclaration","VariableDeclaration","createVoidStatement","VoidStatement","createWhileStatement","WhileStatement","CommonTypeNode","_super","__extends","_this","apply","TYPE","TYPEPARAMETER","ParameterKind","PARAMETER","implicitFieldDeclaration","DecoratorKind","SIGNATURE","nameStr","BUILTIN","EXTERNAL","GLOBAL","INLINE","OPERATOR","SEALED","UNMANAGED","propStr","OPERATOR_BINARY","OPERATOR_PREFIX","OPERATOR_POSTFIX","CUSTOM","DECORATOR","CommentKind","COMMENT","Expression","LiteralKind","LiteralExpression","literalKind","ARRAY","AssertionKind","ASSERTION","BINARY","CLASS","COMMA","CONSTRUCTOR","FLOAT","FUNCTION","INSTANCEOF","INTEGER","NEW","OBJECT","REGEXP","TERNARY","STRING","SUPER","THIS","UnaryExpression","UNARYPOSTFIX","UNARYPREFIX","isLastStatement","BLOCK","FUNCTIONDECLARATION","METHODDECLARATION","SourceKind","Statement","Source","SOURCE","tokenizer","debugInfoIndex","exportPaths","sourceKind","pos","lastIndexOf","simplePath","ENTRY","LIBRARY","DeclarationStatement","cachedProgramLevelInternalName","cachedFileLevelInternalName","mangleInternalName","VARIABLE","NAMESPACEDECLARATION","EXPORT","isTopLevelExport","CLASSDECLARATION","STATIC","needsExplicitExport","member","VariableLikeDeclarationStatement","BREAK","CONTINUE","DO","EMPTY","ENUMDECLARATION","ENUMVALUEDECLARATION","EXPORTIMPORT","EXPORTMEMBER","EXPRESSION","FIELDDECLARATION","parameterIndex","FOR","IF","IMPORTDECLARATION","IMPORT","INTERFACEDECLARATION","RETURN","SWITCHCASE","SWITCH","THROW","TRY","TYPEDECLARATION","VARIABLEDECLARATION","VOID","WHILE","asGlobal","endsWith","findDecorator","decorator","OperatorKind","diagnostics_1","types_1","ast_1","module_1","resolver_1","QueuedImport","QueuedExport","TypeAlias","operatorKindFromDecorator","arg","INDEXED_GET","INDEXED_SET","UNCHECKED_INDEXED_GET","UNCHECKED_INDEXED_SET","ADD","SUB","MUL","POW","DIV","REM","BITWISE_AND","BITWISE_OR","BITWISE_XOR","EQ","NE","GT","GE","BITWISE_SHR","BITWISE_SHR_U","LT","LE","BITWISE_SHL","PLUS","PREFIX_INC","MINUS","PREFIX_DEC","NOT","BITWISE_NOT","POSTFIX_INC","POSTFIX_DEC","INVALID","ElementKind","DecoratorFlags","noTypesYet","Map","Program","diagnosticsOffset","elementsLookup","instancesLookup","typesLookup","typeAliases","fileLevelExports","moduleLevelExports","arrayBufferInstance","arrayPrototype","stringInstance","mainFunction","abortInstance","memoryAllocateInstance","hasGC","gcAllocateInstance","gcLinkInstance","gcMarkInstance","gcHeaderSize","gcHookOffset","resolver","Resolver","sources","getSource","lookupSourceByPath","normalizedPathWithoutExtension","tmp","initialize","options","Type","i8","i16","i32","i64","isizeType","u8","u16","u32","u64","usizeType","bool","f32","f64","void","setConstantInteger","i64_new","isWasm64","noTreeShaking","noAssert","memoryBase","optimizeLevelHint","shrinkLevelHint","hasFeature","queuedImports","queuedExports","queuedExtends","queuedImplements","filespace","Filespace","internalName","currentFilespace","j","initializeClass","initializeEnum","initializeExports","initializeFunction","initializeImports","initializeInterface","initializeNamespace","initializeTypeAlias","initializeVariables","queuedImport","tryLocateImport","localName","splice","externalNameAlt","Module_0_has_no_exported_member_1","queuedExports_1","__values","queuedExports_1_1","next","done","_c","__read","exportName","queuedExport","currentExport","isReExport","setExportAndCheckLibrary","Cannot_find_name_0","derivedPrototype","derivedDeclaration","derivedType","baseElement","resolveIdentifier","CLASS_PROTOTYPE","basePrototype","A_class_may_only_extend_another_class","globalAliases","globalAliases_1","globalAliases_1_1","_d","Error","has","resolveClass","instance","Duplicate_identifier_0","programLevelInternalName","FUNCTION_PROTOTYPE","startFunction","GENERIC","AMBIENT","MAIN","resolveFunction","parameterTypes","signatureReference","byteSize","globalName","Global","withConstantIntegerValue","setConstantFloat","withConstantFloatValue","queuedNamedExports","checkDecorators","acceptedFlags","presentFlags","decoratorKindToFlag","isLibrary","Decorator_0_is_not_valid_here","Duplicate_decorator","checkGlobal","parentNode","hasDecorator","namespace","fileLevelInternalName","simpleName","ClassPrototype","numImplementsTypes","Unmanaged_classes_cannot_implement_interfaces","Operation_not_supported","MODULE_EXPORT","Export_declaration_conflicts_with_exported_declaration_of_0","isEntry","existingExport","memberDeclarations","memberDeclaration","initializeField","GET","SET","initializeAccessor","initializeMethod","classPrototype","isInterface","INTERFACE_PROTOTYPE","staticField","READONLY","ABSTRACT","instanceMembers","instanceField","FieldPrototype","decoratorFlags","FunctionPrototype","constructorPrototype","Multiple_constructor_implementations_are_not_allowed","checkOperatorOverloads","numArgs","firstArg","overloads","overloadPrototypes","Duplicate_function_implementation","operatorKind","String_literal_expected","Expected_0_arguments_but_got_1","internalPropertyName","propertyElement","isGetter","isNew","PROPERTY","getterPrototype","setterPrototype","Property","baseName","staticName","staticPrototype","instanceName","instancePrototype","Enum","initializeEnumValue","enm","EnumValue","initializeExport","externalIdentifier","prefix","FILESPACE","referencedName","referencedElement","seen","Set","add","initializeImport","indexPart","InterfacePrototype","parentNamespace","Namespace","Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local","existingExport_1","global_1","CONST","Element","program","NAMESPACE","ENUM","ENUMVALUE","constantValue","ConstantValueKind","VariableLikeElement","constantValueKind","constantIntegerValue","INLINED","constantFloatValue","Parameter","Local","index","LOCAL","scopedGlobal","instances","classTypeArguments","Function","contextualTypeArguments","localsByName","localsByIndex","additionalLocals","breakContext","debugLocations","ref","functionTableIndex","trampoline","outerScope","nextBreakId","breakStack","nextInlineId","tempI32s","tempI64s","tempF32s","tempF64s","localIndex","INSTANCE","local","thisType","inheritedTypeArguments","inheritedTypeArguments_1","inheritedTypeArguments_1_1","_b","inheritedName","inheritedType","parameterType","parameterName","getParameterName","flow","Flow","addLocal","getTempLocal","wrapped","temps","toNativeType","pop","setLocalWrapped","freeTempLocal","getAndFreeTempLocal","enterBreakContext","id","leaveBreakContext","finalize","sourceMap","debugLocation","setDebugLocation","debugInfoRef","FunctionTarget","FUNCTION_TARGET","toSignatureString","asFunction","FIELD_PROTOTYPE","Field","FIELD","memoryOffset","Class","base","currentMemoryOffset","constructorInstance","gcHookIndex","asClass","inheritedTypeArguments_2","inheritedTypeArguments_2_1","baseType","isAssignableTo","target","current","lookupOverload","unchecked","uncheckedOverload","overload","offsetof","fieldName","field","Interface","INTERFACE","FlowFlags","scopedLocals","currentFunction","parentFlow","continueLabel","breakLabel","returnLabel","wrappedLocals","wrappedLocalsExt","unset","fork","branch","slice","free","scopedLocal","SCOPED","addScopedLocal","existingLocal","addScopedLocalAlias","scopedAlias","getScopedLocal","isLocalWrapped","map","ext","i64_ne","i64_and","i64_shl","i64_one","i64_zero","off","i64_or","i64_not","inherit","other","inheritConditional","inheritMutual","leftExt","rightExt","thisExt","minLength","min","canOverflow","getExpressionId","ExpressionId","GetLocal","getGetLocalIndex","canConversionOverflow","SetLocal","isTeeLocal","getSetLocalValue","GetGlobal","Binary","getBinaryOp","BinaryOp","EqI32","EqI64","EqF32","EqF64","NeI32","NeI64","NeF32","NeF64","LtI32","LtU32","LtI64","LtU64","LtF32","LtF64","LeI32","LeU32","LeI64","LeU64","LeF32","LeF64","GtI32","GtU32","GtI64","GtU64","GtF32","GtF64","GeI32","GeU32","GeI64","GeU64","GeF32","GeF64","MulI32","getBinaryLeft","Const","getConstValueI32","getBinaryRight","AndI32","computeSmallIntegerMask","ShlI32","shift","size","ShrI32","ShrU32","DivU32","RemI32","RemU32","Unary","getUnaryOp","UnaryOp","EqzI32","EqzI64","ClzI32","CtzI32","PopcntI32","getExpressionType","getConstValueI64Low","getConstValueF32","getConstValueF64","MIN_VALUE","MAX_VALUE","Load","fromType","getLoadBytes","isLoadSigned","Block","getBlockName","getBlockChildCount","last","getBlockChild","If","getIfTrue","getIfFalse","Select","getSelectThen","getSelectElse","Call","getCallTarget","Unreachable","fromSize","toSize","compiler_1","NativeType","_BinaryenInvalidId","_BinaryenBlockId","_BinaryenIfId","_BinaryenLoopId","_BinaryenBreakId","_BinaryenSwitchId","_BinaryenCallId","_BinaryenCallIndirectId","_BinaryenGetLocalId","_BinaryenSetLocalId","_BinaryenGetGlobalId","_BinaryenSetGlobalId","_BinaryenLoadId","_BinaryenStoreId","_BinaryenConstId","_BinaryenUnaryId","_BinaryenBinaryId","_BinaryenSelectId","_BinaryenDropId","_BinaryenReturnId","_BinaryenHostId","_BinaryenNopId","_BinaryenUnreachableId","_BinaryenAtomicCmpxchgId","_BinaryenAtomicRMWId","_BinaryenAtomicWaitId","_BinaryenAtomicWakeId","_BinaryenClzInt32","_BinaryenCtzInt32","_BinaryenPopcntInt32","_BinaryenNegFloat32","_BinaryenAbsFloat32","_BinaryenCeilFloat32","_BinaryenFloorFloat32","_BinaryenTruncFloat32","_BinaryenNearestFloat32","_BinaryenSqrtFloat32","_BinaryenEqZInt32","_BinaryenClzInt64","_BinaryenCtzInt64","_BinaryenPopcntInt64","_BinaryenNegFloat64","_BinaryenAbsFloat64","_BinaryenCeilFloat64","_BinaryenFloorFloat64","_BinaryenTruncFloat64","_BinaryenNearestFloat64","_BinaryenSqrtFloat64","_BinaryenEqZInt64","_BinaryenExtendSInt32","_BinaryenExtendUInt32","_BinaryenWrapInt64","_BinaryenTruncSFloat32ToInt32","_BinaryenTruncSFloat32ToInt64","_BinaryenTruncUFloat32ToInt32","_BinaryenTruncUFloat32ToInt64","_BinaryenTruncSFloat64ToInt32","_BinaryenTruncSFloat64ToInt64","_BinaryenTruncUFloat64ToInt32","_BinaryenTruncUFloat64ToInt64","_BinaryenReinterpretFloat32","_BinaryenReinterpretFloat64","_BinaryenConvertSInt32ToFloat32","_BinaryenConvertSInt32ToFloat64","_BinaryenConvertUInt32ToFloat32","_BinaryenConvertUInt32ToFloat64","_BinaryenConvertSInt64ToFloat32","_BinaryenConvertSInt64ToFloat64","_BinaryenConvertUInt64ToFloat32","_BinaryenConvertUInt64ToFloat64","_BinaryenPromoteFloat32","_BinaryenDemoteFloat64","_BinaryenReinterpretInt32","_BinaryenReinterpretInt64","_BinaryenExtendS8Int32","_BinaryenExtendS16Int32","_BinaryenExtendS8Int64","_BinaryenExtendS16Int64","_BinaryenExtendS32Int64","_BinaryenAddInt32","_BinaryenSubInt32","_BinaryenMulInt32","_BinaryenDivSInt32","_BinaryenDivUInt32","_BinaryenRemSInt32","_BinaryenRemUInt32","_BinaryenAndInt32","_BinaryenOrInt32","_BinaryenXorInt32","_BinaryenShlInt32","_BinaryenShrUInt32","_BinaryenShrSInt32","_BinaryenRotLInt32","_BinaryenRotRInt32","_BinaryenEqInt32","_BinaryenNeInt32","_BinaryenLtSInt32","_BinaryenLtUInt32","_BinaryenLeSInt32","_BinaryenLeUInt32","_BinaryenGtSInt32","_BinaryenGtUInt32","_BinaryenGeSInt32","_BinaryenGeUInt32","_BinaryenAddInt64","_BinaryenSubInt64","_BinaryenMulInt64","_BinaryenDivSInt64","_BinaryenDivUInt64","_BinaryenRemSInt64","_BinaryenRemUInt64","_BinaryenAndInt64","_BinaryenOrInt64","_BinaryenXorInt64","_BinaryenShlInt64","_BinaryenShrUInt64","_BinaryenShrSInt64","_BinaryenRotLInt64","_BinaryenRotRInt64","_BinaryenEqInt64","_BinaryenNeInt64","_BinaryenLtSInt64","_BinaryenLtUInt64","_BinaryenLeSInt64","_BinaryenLeUInt64","_BinaryenGtSInt64","_BinaryenGtUInt64","_BinaryenGeSInt64","_BinaryenGeUInt64","_BinaryenAddFloat32","_BinaryenSubFloat32","_BinaryenMulFloat32","_BinaryenDivFloat32","_BinaryenCopySignFloat32","_BinaryenMinFloat32","_BinaryenMaxFloat32","_BinaryenEqFloat32","_BinaryenNeFloat32","_BinaryenLtFloat32","_BinaryenLeFloat32","_BinaryenGtFloat32","_BinaryenGeFloat32","_BinaryenAddFloat64","_BinaryenSubFloat64","_BinaryenMulFloat64","_BinaryenDivFloat64","_BinaryenCopySignFloat64","_BinaryenMinFloat64","_BinaryenMaxFloat64","_BinaryenEqFloat64","_BinaryenNeFloat64","_BinaryenLtFloat64","_BinaryenLeFloat64","_BinaryenGtFloat64","_BinaryenGeFloat64","HostOp","_BinaryenCurrentMemory","_BinaryenGrowMemory","AtomicRMWOp","_BinaryenAtomicRMWAdd","_BinaryenAtomicRMWSub","_BinaryenAtomicRMWAnd","_BinaryenAtomicRMWOr","_BinaryenAtomicRMWXor","_BinaryenAtomicRMWXchg","MemorySegment","buffer","offset","segment","Module","cachedTemporaryName","hasTemporaryFunction","cachedPrecomputeName","cachedPrecomputeNames","_BinaryenModuleCreate","cachedByValue","memory","allocate","createFrom","cArr","allocU8Array","_BinaryenModuleRead","changetype","addFunctionType","result","paramTypes","cStr","allocString","allocI32Array","_BinaryenAddFunctionType","getFunctionTypeBySignature","_BinaryenGetFunctionTypeBySignature","removeFunctionType","_BinaryenRemoveFunctionType","createI32","out","_BinaryenLiteralInt32","_BinaryenConst","createI64","valueLow","valueHigh","_BinaryenLiteralInt64","createF32","_BinaryenLiteralFloat32","createF64","_BinaryenLiteralFloat64","createUnary","op","_BinaryenUnary","createBinary","_BinaryenBinary","createHost","operands","allocPtrArray","_BinaryenHost","createGetLocal","_BinaryenGetLocal","createTeeLocal","_BinaryenTeeLocal","createGetGlobal","_BinaryenGetGlobal","createLoad","bytes","signed","ptr","_BinaryenLoad","createStore","_BinaryenStore","createAtomicLoad","_BinaryenAtomicLoad","createAtomicStore","_BinaryenAtomicStore","createAtomicRMW","_BinaryenAtomicRMW","createAtomicCmpxchg","expected","replacement","_BinaryenAtomicCmpxchg","createAtomicWait","timeout","expectedType","_BinaryenAtomicWait","createAtomicWake","wakeCount","_BinaryenAtomicWake","createSetLocal","_BinaryenSetLocal","createSetGlobal","_BinaryenSetGlobal","createBlock","children","_BinaryenBlock","createBreak","_BinaryenBreak","createDrop","_BinaryenDrop","createLoop","_BinaryenLoop","createIf","_BinaryenIf","createNop","_BinaryenNop","createReturn","_BinaryenReturn","createSelect","_BinaryenSelect","createSwitch","defaultName","numNames","strs","_BinaryenSwitch","createCall","_BinaryenCall","createCallIndirect","typeName","_BinaryenCallIndirect","createUnreachable","_BinaryenUnreachable","addGlobal","mutable","_BinaryenAddGlobal","removeGlobal","_BinaryenRemoveGlobal","addFunction","varTypes","_BinaryenAddFunction","removeFunction","_BinaryenRemoveFunction","addTemporaryFunction","tempName","typeRef","removeTemporaryFunction","addFunctionExport","cStr1","cStr2","_BinaryenAddFunctionExport","addTableExport","_BinaryenAddTableExport","addMemoryExport","_BinaryenAddMemoryExport","addGlobalExport","_BinaryenAddGlobalExport","removeExport","_BinaryenRemoveExport","addFunctionImport","externalModuleName","externalBaseName","functionType","cStr3","_BinaryenAddFunctionImport","addTableImport","_BinaryenAddTableImport","addMemoryImport","_BinaryenAddMemoryImport","addGlobalImport","globalType","_BinaryenAddGlobalImport","setMemory","initial","maximum","segments","segs","offs","sizs","Target","WASM64","i64_low","i64_high","cArr1","cArr2","cArr3","_BinaryenSetMemory","setFunctionTable","funcs","_BinaryenSetFunctionTable","setStart","func","_BinaryenSetStart","getOptimizeLevel","_BinaryenGetOptimizeLevel","setOptimizeLevel","level","_BinaryenSetOptimizeLevel","getShrinkLevel","_BinaryenGetShrinkLevel","setShrinkLevel","_BinaryenSetShrinkLevel","setDebugInfo","on","_BinaryenSetDebugInfo","optimize","_BinaryenFunctionOptimize","_BinaryenModuleOptimize","runPasses","passes","_BinaryenFunctionRunPasses","_BinaryenModuleRunPasses","precomputeExpression","previousOptimizeLevel","previousShrinkLevel","previousDebugInfo","_BinaryenGetDebugInfo","_BinaryenExpressionGetType","_BinaryenFunctionGetBody","validate","_BinaryenModuleValidate","interpret","_BinaryenModuleInterpret","toBinary","sourceMapUrl","binaryPtr","sourceMapPtr","_BinaryenModuleAllocateAndWrite","readInt","binaryBytes","ret","BinaryModule","output","Uint8Array","load","readBuffer","readString","toText","toAsmjs","dispose","_BinaryenModuleDispose","createRelooper","Relooper","cloneExpression","noSideEffects","maxDepth","nested1","nested2","_BinaryenExpressionGetId","_BinaryenConstGetValueI32","_BinaryenConstGetValueI64Low","_BinaryenConstGetValueI64High","_BinaryenConstGetValueF32","_BinaryenConstGetValueF64","_BinaryenGetLocalGetIndex","_BinaryenGetGlobalGetName","_BinaryenLoadGetPtr","_BinaryenLoadIsAtomic","_BinaryenLoadGetBytes","_BinaryenLoadGetOffset","_BinaryenLoadIsSigned","_BinaryenLoadGetAlign","_BinaryenUnaryGetValue","_BinaryenUnaryGetOp","_BinaryenBinaryGetLeft","_BinaryenBinaryGetRight","_BinaryenBinaryGetOp","addDebugInfoFile","_BinaryenModuleAddDebugInfoFileName","getDebugInfoFile","_BinaryenModuleGetDebugInfoFileName","fileIndex","lineNumber","columnNumber","_BinaryenFunctionSetDebugLocation","UNLIMITED_MEMORY","getConstValueI64High","getSetLocalIndex","_BinaryenSetLocalGetIndex","_BinaryenSetLocalGetValue","_BinaryenSetLocalIsTee","getUnaryValue","getLoadOffset","getLoadPtr","getStoreBytes","_BinaryenStoreGetBytes","getStoreOffset","_BinaryenStoreGetOffset","getStorePtr","_BinaryenStoreGetPtr","getStoreValue","_BinaryenStoreGetValue","_BinaryenBlockGetName","_BinaryenBlockGetNumChildren","_BinaryenBlockGetChild","getIfCondition","_BinaryenIfGetCondition","_BinaryenIfGetIfTrue","_BinaryenIfGetIfFalse","getLoopName","_BinaryenLoopGetName","getLoopBody","_BinaryenLoopGetBody","getBreakName","_BinaryenBreakGetName","getBreakCondition","_BinaryenBreakGetCondition","_BinaryenSelectGetIfTrue","_BinaryenSelectGetIfFalse","getSelectCondition","_BinaryenSelectGetCondition","getDropValue","_BinaryenDropGetValue","getReturnValue","_BinaryenReturnGetValue","_BinaryenCallGetTarget","getHostOp","_BinaryenHostGetOp","getHostOperandCount","_BinaryenHostGetNumOperands","getHostOperand","_BinaryenHostGetOperand","getHostName","_BinaryenHostGetNameOperand","getFunctionBody","getFunctionName","_BinaryenFunctionGetName","getFunctionParamCount","_BinaryenFunctionGetNumParams","getFunctionParamType","_BinaryenFunctionGetParam","getFunctionResultType","_BinaryenFunctionGetResult","relooper","_RelooperCreate","addBlock","_RelooperAddBlock","addBranch","from","to","_RelooperAddBranch","addBlockWithSwitch","_RelooperAddBlockWithSwitch","addBranchForSwitch","indexes","_RelooperAddBranchForSwitch","renderAndDispose","entry","labelHelper","_RelooperRenderAndDispose","u8s","numValues","idx","store","i32s","val","ptrs","str","u","stringLengthUTF8","cp","u1","u2","u3","u4","arr","String","fromCodePoints","needsExplicitUnreachable","Return","Break","numChildren","g","eval","e","window","program_1","TypeKind","TypeFlags","cachedNullableType","ceil","classReference","nonNullableType","isize64","isize32","usize64","usize32","isManaged","computeSmallIntegerShift","targetType","classType","asNullable","signednessIsRelevant","currentClass","targetClass","targetFunction","commonCompatible","signednessIsImportant","kindOnly","toNativeZero","toNativeOne","toNativeNegOne","typesToNativeTypes","types","numTypes","typesToString","Signature","cachedFunctionTarget","parameterNames","requiredParameters","hasRest","getDefaultParameterName","thisThisType","targetThisType","thisParameterTypes","targetParameterTypes","numParameters","thisParameterType","targetParameterType","thisReturnType","targetReturnType","makeSignatureString","includeThis","optionalStart","restIndex","cachedDefaultParameterNames","IdentifierHandling","tokenFromKeyword","AS","ASYNC","AWAIT","CASE","CATCH","DEBUGGER","DECLARE","DEFAULT","DELETE","ELSE","EXTENDS","FINALLY","FROM","IMPLEMENTS","IN","IS","KEYOF","LET","MODULE","OF","PACKAGE","PRIVATE","PROTECTED","PUBLIC","TYPEOF","VAR","WITH","YIELD","tokenIsAlsoIdentifier","token","operatorTokenToString","DOT_DOT_DOT","LESSTHAN","GREATERTHAN","LESSTHAN_EQUALS","GREATERTHAN_EQUALS","EQUALS_EQUALS","EXCLAMATION_EQUALS","EQUALS_EQUALS_EQUALS","EXCLAMATION_EQUALS_EQUALS","ASTERISK_ASTERISK","ASTERISK","SLASH","PERCENT","PLUS_PLUS","MINUS_MINUS","LESSTHAN_LESSTHAN","GREATERTHAN_GREATERTHAN","GREATERTHAN_GREATERTHAN_GREATERTHAN","AMPERSAND","BAR","CARET","EXCLAMATION","TILDE","AMPERSAND_AMPERSAND","BAR_BAR","EQUALS","PLUS_EQUALS","MINUS_EQUALS","ASTERISK_EQUALS","ASTERISK_ASTERISK_EQUALS","SLASH_EQUALS","PERCENT_EQUALS","LESSTHAN_LESSTHAN_EQUALS","GREATERTHAN_GREATERTHAN_EQUALS","GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS","AMPERSAND_EQUALS","BAR_EQUALS","CARET_EQUALS","a","b","Tokenizer","tokenPos","nextToken","nextTokenPos","nextTokenOnNewLine","onComment","identifierHandling","unsafeNext","maxTokenLength","STRINGLITERAL","OPENPAREN","CLOSEPAREN","isDecimalDigit","FLOATLITERAL","DOT","commentStartPos","LINE","TRIPLE","closed","_0_expected","testInteger","INTEGERLITERAL","COLON","SEMICOLON","EQUALS_GREATERTHAN","QUESTION","OPENBRACKET","CLOSEBRACKET","OPENBRACE","CLOSEBRACE","AT","isIdentifierStart","isKeywordCharacter","posBefore","isIdentifierPart","keywordToken","ALWAYS","PREFER","isWhiteSpace","Invalid_character","ENDOFFILE","peek","checkOnNewLine","maxCompoundLength","tokenBefore","tokenPosBefore","skipIdentifier","skip","mark","state","reusableState","State","discard","reset","readIdentifier","quote","Unterminated_string_literal","readEscapeSequence","Unexpected_end_of_text","readExtendedUnicodeEscape","readUnicodeEscape","fromCharCode","readRegexpPattern","escaped","Unterminated_regular_expression_literal","readRegexpFlags","Invalid_regular_expression_flags","readInteger","readHexInteger","readBinaryInteger","readOctalInteger","isOctalDigit","Octal_literals_are_not_allowed_in_strict_mode","readDecimalInteger","i64_16","sepEnd","i64_add","i64_mul","Numeric_separators_are_not_allowed_here","Multiple_consecutive_numeric_separators_are_not_permitted","Hexadecimal_digit_expected","i64_10","Digit_expected","i64_8","Octal_digit_expected","i64_2","i64_1","Binary_digit_expected","readFloat","readDecimalFloat","parseFloat","readHexFloat","remain","value32","invalid","An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive","Unterminated_Unicode_escape_sequence","finish","builtins_1","Options","WASM32","importMemory","importTable","features","feature","Feature","ConversionKind","WrapMode","mangleImportName_moduleName","mangleImportName_elementName","Compiler","currentOuterFunction","currentInlineFunctions","currentEnum","currentType","memorySegments","stringSegments","functionTable","argcVar","argcSet","needsIterateRoots","f32ModInstance","f64ModInstance","f32PowInstance","f64PowInstance","max","compile","startFunctionInstance","startFunctionBody","compileSource","funcRef","ensureFunctionType","i64_align","numPages","i64_shr_u","moduleExport","makeModuleExport","compileIterateRoots","subPrefix","_e","_f","_g","_h","Cannot_export_a_mutable_global","ensureTrampoline","ensureArgcSet","COMPILED","setter","nativeType","nativeSizeType","getterName","setterName","_j","_k","fullName","_l","_m","ctor","compileSourceByPath","reportNode","File_0_not_found","isGeneric","compileClassDeclaration","compileEnumDeclaration","compileFunctionDeclaration","compileNamespaceDeclaration","variableInit","compileVariableStatement","compileExportStatement","previousFunction","compileStatement","compileGlobalDeclaration","compileGlobal","global","initExpr","resolvedType","resolveType","Type_expected","atEnd","compileExpressionRetainType","Type_0_is_not_assignable_to_type_1","isDeclaredConstant","MODULE_IMPORT","mangleImportName","initializeInStart","compileExpression","Compiling_constant_with_non_constant_initializer_as_mutable","compileEnum","previousValue","previousValueIsMut","initInStart","valueDeclaration","In_const_enum_declarations_member_initializer_must_be_constant_expression","Enum_member_must_have_initializer","AddI32","compileFunctionUsingTypeArguments","resolveFunctionInclTypeArguments","compileFunction","resultType","An_implementation_cannot_be_declared_in_ambient_contexts","Function_implementation_is_missing_or_not_immediately_following_the_declaration","isConstructor","stmts","compileStatements","unshift","makeConditionalAllocate","A_function_whose_declared_type_is_not_void_must_return_a_value","compileInterfaceDeclaration","compileNamespace","compileClassUsingTypeArguments","alternativeReportNode","resolveClassInclTypeArguments","compileClass","staticMembers","ctorInstance","addMemorySegment","alignment","ensureFunctionTableEntry","TRAMPOLINE","compileBlockStatement","compileBreakStatement","compileContinueStatement","compileDoStatement","compileEmptyStatement","compileExpressionStatement","compileForStatement","compileIfStatement","compileReturnStatement","compileSwitchStatement","compileThrowStatement","compileTryStatement","compileVoidStatement","compileWhileStatement","addDebugLocation","numStatements","Nop","A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement","A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement","condExpr","makeIsTrueish","terminated","block","repeatLabel","alwaysTrue","condPre","incrExpr","bodyStatement","bodyExpr","usesContinue","breakBlock","repeatBlock","GENERIC_CONTEXT","condExprPrecomp","ifTrueFlow","ifTrueExpr","ifFalseExpr","ifFalseFlow","numCases","context","tempLocal","tempLocalIndex","breaks","breakIndex","defaultIndex","currentBlock","alwaysReturns","alwaysReturnsWrapped","alwaysThrows","alwaysAllocates","isLast","nextLabel","count","compileAbort","isKnownGlobal","numDeclarations","initializers","isInlined","_const_declarations_must_be_initialized","compileAssignmentWithValue","compileInlineConstant","contextualType","retainType","mask","conversionKind","wrapMode","compileAssertionExpression","compileBinaryExpression","compileCallExpression","compileCommaExpression","compileElementAccessExpression","compileFunctionExpression","compileIdentifierExpression","compileInstanceOfExpression","compileLiteralExpression","compileNewExpression","compileParenthesizedExpression","compilePropertyAccessExpression","compileTernaryExpression","compileUnaryPostfixExpression","compileUnaryPrefixExpression","convertExpression","ensureSmallIntegerWrap","Conversion_from_type_0_to_1_requires_an_explicit_cast","PromoteF32","DemoteF64","TruncF32ToI64","TruncF32ToI32","TruncF32ToU64","TruncF32ToU32","TruncF64ToI64","TruncF64ToI32","TruncF64ToU64","TruncF64ToU32","ConvertI64ToF32","ConvertU64ToF32","ConvertI32ToF32","ConvertU32ToF32","ConvertI64ToF64","ConvertU64ToF64","ConvertI32ToF64","ConvertU32ToF64","WrapI64","ExtendI32","ExtendU32","leftExpr","leftType","rightExpr","rightType","commonType","compound","compileBinaryOverload","Operator_0_cannot_be_applied_to_types_1_and_2","compileAssignment","AddI64","AddF32","AddF64","SubI32","SubI64","SubF32","SubF64","MulI64","MulF32","MulF64","makeCallDirect","DivI32","DivI64","DivU64","DivF32","DivF64","RemI64","RemU64","intType","ShlI64","The_0_operator_cannot_be_applied_to_type_1","ShrI64","ShrU64","AndI64","OrI32","OrI64","XorI32","XorI64","compileUnaryOverload","operatorInstance","valueExpr","argumentExpressions","thisArg","compileCallDirect","valueExpression","resolveExpression","Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property","currentElementExpression","isUnchecked","indexedSet","Index_signature_in_type_0_only_permits_reading","Index_signature_is_missing_in_type_0","valueWithCorrectType","tee","thisExpression","currentThisExpression","thisExpr","setterInstance","getterInstance","nativeReturnType","indexedGet","elementExpr","tempLocalTarget","tempLocalElement","indexArg","compileCallExpressionBuiltin","Type_0_is_not_generic","inferredTypes","numTypeParameters","numParameterTypes","numArguments","argumentExprs","typeNode","argumentExpression","inferredType","concreteType","resolvedTypeArguments","Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures","compileGetter","compileCallIndirect","typeArgumentNodes","resolveTypeArguments","compileCall","checkCallSignature","hasThis","minimum","Expected_at_least_0_arguments_but_got_1","inline","includes","compileCallInlineUnchecked","Function_0_cannot_be_inlined_into_itself","numArgumentsInclThis","previousFlow","thisLocal","paramExpr","argumentLocal","original","originalSignature","originalName","originalParameterTypes","originalParameterDeclarations","commonReturnType","commonThisType","isInstance","minArguments","minOperands","maxArguments","maxOperands","numOptional","forwardedOperands","operandIndex","trampolineSignature","trampolineName","ofN","Optional_parameter_must_have_an_initializer","ensureArgcVar","numOperands","isCallImport","parameterNodes","allOptionalsAreConstant","makeCallIndirect","numExpressions","exprs","resolveElementAccess","retainConstantType","scopedThis","_this_cannot_be_referenced_in_current_location","superType","_super_can_only_be_referenced_in_a_derived_class","localType","A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums","implicitNegate","compileArrayLiteral","floatValue","intValue","i64_sub","i64_is_i8","i64_is_u8","i64_is_i16","i64_is_u16","i64_is_i32","i64_is_u32","i64_is_bool","i64_is_f32","i64_to_f32","i64_is_f64","i64_to_f64","compileStringLiteral","compileObjectLiteral","ensureStaticString","stringValue","stringSegment","headerSize","totalSize","buf","writeI32","ensureGCHook","writeI16","stringOffset","ensureStaticArray","elementType","byteLength","usizeTypeSize","bufferInstance","bufferHeaderSize","bufferTotalSize","clz","writeI8","writeI64","writeF32","writeF64","bufferOffset","arrayInstance","arrayHeaderSize","arrayOffset","isConst","compiledValues","constantValues","nativeElementType","isStatic","arrayType","nativeArrayType","Constructor_of_class_0_must_not_require_any_arguments","Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration","Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration","hasErrors","Property_0_does_not_exist_on_type_1","compileAllocate","Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature","classInstance","currentClassInstance","makeAllocate","propertyAccess","resolvePropertyAccess","Cannot_access_method_0_without_calling_it_as_it_requires_this_to_be_set","ifThenFlow","ifThenExpr","ifThenType","ifElseFlow","ifElseExpr","ifElseType","getValue","calcValue","setValue","NegF32","NegF64","makeIsFalseish","ExtendI8ToI32","ExtendI16ToI32","fieldType","nativeFieldType","fieldDeclaration","ReportMode","reportMode","REPORT","resolveSignature","numTypeArguments","paramType","instanceKey","placeholderType","parameterTypeNodes","parameterTypeNode","REST","returnTypeNode","parameterCount","argumentCount","Expected_0_type_arguments_but_got_1","contextualFunction","targetExpression","propertyName","elementAccess","explicitLocal","functionTarget","classTypeParameters","numClassTypeParameters","numFunctionTypeArguments","signatureNode","functionTypeParameters","signatureParameters","signatureParameterCount","parameterDeclaration","resolveFunctionPartially","partialKey","partialPrototype","expectedTypeArguments","actualTypeArguments","baseClass","baseClassType","Class_0_is_sealed_and_cannot_be_extended","Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa","inheritedMember","constructorPartial","baseField","fieldInstance","instanceProperty","partialGetterPrototype","partialSetterPrototype","overloadPrototype","operatorPartial","typeParameterNodes","binaryen","wrapModule","emitStackIR","emitAsmjs","Binaryen","__memory_allocate","_malloc","__memory_free","_free","__memory_copy","_memmove","__store","HEAPU8","__load","globalScope","ASC_TARGET","F64","Float64Array","U64","Uint32Array","UnreachableError","captureStackTrace","stack","AssertionError","defineProperties","writable","Math","fround","EPSILON","MIN_NORMAL_VALUE","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","POSITIVE_INFINITY","Infinity","NEGATIVE_INFINITY","NaN","clz32","abs","floor","trunc","round","sqrt","x","y","sign","isTrueish","radix","parseInt","undefined","fromCodePoint","Number","isInteger","isArray","signbit","Boolean","HEAP","HEAP_OFFSET","oldHeap","copy","dest","src","copyWithin","F32","Float32Array","I32","Int32Array","f32_as_i32","i32_as_f32","f64_as_i64","i64_as_f64","Long","ZERO","ONE","lo","hi","fromBits","low","high","sub","mul","i64_div","div","i64_div_u","toUnsigned","toSigned","i64_rem","mod","i64_rem_u","and","or","i64_xor","xor","shl","i64_shr","shr","shru","not","i64_eq","eq","ne","fromInt","minSafeF32","fromNumber","maxSafeF32","gte","lte","minSafeF64","maxSafeF64","toNumber","i64_to_string","unsigned","wasm","WebAssembly","Instance","isLong","obj","__isLong__","INT_CACHE","UINT_CACHE","cachedObj","cache","isNaN","UZERO","TWO_PWR_64_DBL","MAX_UNSIGNED_VALUE","TWO_PWR_63_DBL","neg","TWO_PWR_32_DBL","lowBits","highBits","pow_dbl","pow","fromString","RangeError","indexOf","radixToPower","power","fromValue","TWO_PWR_16_DBL","TWO_PWR_24","UONE","NEG_ONE","LongPrototype","toInt","isZero","isNegative","radixLong","rem1","rem","remDiv","digits","getHighBits","getHighBitsUnsigned","getLowBits","getLowBitsUnsigned","getNumBitsAbs","bit","eqz","isPositive","isOdd","isEven","equals","notEquals","neq","lessThan","comp","lt","lessThanOrEqual","le","greaterThan","gt","greaterThanOrEqual","ge","compare","thisNeg","otherNeg","negate","addend","a48","a32","a16","a00","b48","b32","b16","c48","c32","c16","c00","subtract","subtrahend","multiply","multiplier","get_high","b00","divide","divisor","approx","res","div_u","div_s","log2","log","LN2","delta","approxRes","approxRem","modulo","rem_u","rem_s","shiftLeft","numBits","shiftRight","shiftRightUnsigned","shr_u","toBytes","toBytesLE","toBytesBE","fromBytes","fromBytesLE","fromBytesBE","compiler","evaluateConstantType","SWALLOW","expr_1","ClzI64","CtzI64","PopcntI64","RotlI32","RotlI64","RotrI32","RotrI64","AbsF32","AbsF64","tempLocal0","tempLocal1","MaxF32","MaxF64","MinF32","MinF64","CeilF32","CeilF64","FloorF32","FloorF64","CopysignF32","CopysignF64","NearestF32","NearestF64","ReinterpretF32","ReinterpretF64","ReinterpretI32","ReinterpretI64","SqrtF32","SqrtF64","TruncF32","TruncF64","evaluateConstantOffset","alignLog2","Type_0_has_no_property_1","CurrentMemory","GrowMemory","abort","operandExprs","signatureParts","nativeParamTypes","operandType","User_defined_0","expr_2","deferASM","deferASMCall","typeArgument","valueType","stringType","messageArg","filenameArg","existingIndex","gcPrototype","gcInstance","VIRTUAL","nativeSizeSize","baseInstance","funcName","allocateInstance","CharCode","lookupInUnicodeMap","unicodeIdentifierStart","isUnicodeIdentifierStart","unicodeIdentifierPart","isUnicodeIdentifierPart","mid","separator","ipos","dirname","origin","indentX1","indentX2","indentX4","indent","readI32","readI64","readI8","readI16","readF32","readF64","valueI64","decompiler_1","definitions_1","formatDiagnostic","parser_1","parseFile","parser","Parser","nextFile","nextDiagnostic","isInfo","isWarning","isError","createOptions","setTarget","setNoTreeShaking","setNoAssert","setImportMemory","setImportTable","setSourceMap","setMemoryBase","setGlobalAlias","FEATURE_SIGN_EXTENSION","FEATURE_MUTABLE_GLOBAL","enableFeature","setOptimizeLevelHints","optimizeLevel","shrinkLevel","finishParsing","compileProgram","decompileModule","decompiler","Decompiler","decompile","buildIDL","IDLBuilder","build","buildTSD","TSDBuilder","functionId","decompileFunction","nativeTypeToType","decompileExpression","nested","string","Loop","Switch","CallIndirect","SetGlobal","Store","Drop","Host","AtomicCmpxchg","AtomicRMW","AtomicWait","AtomicWake","ExportsWalker","includePrivate","todo","walk","visitElement","visitGlobal","visitEnum","visitFunctionInstances","visitClassInstances","visitField","prop","hasCompiledMember","visitNamespace","visitFunction","visitClass","indentLevel","typeToString","members_1","members_1_1","visitInterface","numMembers","members_2","members_2_1","backlog","seenlog","donelog","tryParseSignatureIsSignature","parseParametersThis","tn","parseTopLevelStatement","startPos","parseDecorator","skipStatement","exportStart","exportEnd","contextIsAmbient","A_declare_modifier_cannot_be_used_in_an_already_ambient_context","first","parseEnum","parseVariable","parseFunction","parseStatement","parseClassOrInterface","parseNamespace","parseExportImport","parseImport","parseTypeDeclaration","parseExport","_0_modifier_cannot_be_used_here","Decorators_are_not_valid_here","clear","parseType","acceptParenthesized","suppressErrors","isNullableSignature","tryParseSignature","Unexpected_token","innerType","Identifier_expected","nullable","parameter","bracketStart","bracketRange","isSignature","A_rest_parameter_cannot_be_optional","OPTIONAL","param","parseArguments","parseVariableDeclaration","parentFlags","parentDecorators","DEFINITE_ASSIGNMENT","Initializers_are_not_allowed_in_ambient_contexts","parseExpression","A_definite_assignment_assertion_is_not_permitted_in_this_context","parseEnumValue","parseReturn","parseTypeParameters","typeParameter","parseTypeParameter","Type_parameter_list_cannot_be_empty","parseParameters","seenRest","seenOptional","reportedRest","parseParameter","A_rest_parameter_must_be_last_in_a_parameter_list","A_required_parameter_cannot_follow_an_optional_parameter","isRest","isOptional","startRange","accessFlags","A_parameter_property_cannot_be_declared_using_a_rest_parameter","A_rest_parameter_cannot_have_an_initializer","Parameter_cannot_have_question_mark_and_initializer","signatureStart","isSetter","A_set_accessor_must_have_exactly_one_parameter","A_set_accessor_parameter_cannot_have_an_initializer","A_get_accessor_cannot_have_parameters","parseBlockStatement","parseFunctionExpression","isArrow","parseFunctionExpressionCommon","Interface_declaration_cannot_have_implements_clause","parseClassMember","parseClassExpression","staticStart","staticEnd","abstractStart","abstractEnd","readonlyStart","readonlyEnd","setEnd","typeParametersStart","Type_parameters_cannot_appear_on_a_constructor_declaration","An_accessor_cannot_have_type_parameters","Type_annotation_cannot_appear_on_a_constructor_declaration","A_set_accessor_cannot_have_a_return_type_annotation","Method_0_cannot_have_an_implementation_because_it_is_marked_abstract","retMethod","Constructor_implementation_is_missing","Optional_properties_are_not_supported","retField","parseExportMember","asIdentifier","skipFrom","parseImportDeclaration","topLevel","parseBreak","parseContinue","parseDoStatement","parseForStatement","parseIfStatement","A_return_statement_can_only_be_used_within_a_function_body","parseSwitchStatement","parseThrowStatement","parseTryStatement","parseVoidStatement","parseWhileStatement","parseExpressionStatement","elseStatement","case_","parseSwitchCase","_case_or_default_expected","parseExpressionStart","precedence","determinePrecedenceStart","The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access","again","startPos_1","QUOTED","PREFIX","regexpPattern","Expression_expected","tryParseTypeArgumentsBeforeArguments","nextPrecedence","maybeParseCallExpression","determinePrecedence","commaExprs","isRightAssociative","joinPropertyCall","callee","inner","skipBlock","depth","Precedence"],"mappings":"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E,IAI7C,IAAMu4E,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,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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","file":"assemblyscript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"binaryen\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"binaryen\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"assemblyscript\"] = factory(require(\"binaryen\"));\n\telse\n\t\troot[\"assemblyscript\"] = factory(root[\"binaryen\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE__15__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 12);\n","/**\r\n * Common constants.\r\n * @module common\r\n *//***/\r\n\r\n/** Indicates traits of a {@link Node} or {@link Element}. */\r\nexport enum CommonFlags {\r\n /** No flags set. */\r\n NONE = 0,\r\n\r\n // Basic modifiers\r\n\r\n /** Has an `import` modifier. */\r\n IMPORT = 1 << 0,\r\n /** Has an `export` modifier. */\r\n EXPORT = 1 << 1,\r\n /** Has a `declare` modifier. */\r\n DECLARE = 1 << 2,\r\n /** Has a `const` modifier. */\r\n CONST = 1 << 3,\r\n /** Has a `let` modifier. */\r\n LET = 1 << 4,\r\n /** Has a `static` modifier. */\r\n STATIC = 1 << 5,\r\n /** Has a `readonly` modifier. */\r\n READONLY = 1 << 6,\r\n /** Has an `abstract` modifier. */\r\n ABSTRACT = 1 << 7,\r\n /** Has a `public` modifier. */\r\n PUBLIC = 1 << 8,\r\n /** Has a `private` modifier. */\r\n PRIVATE = 1 << 9,\r\n /** Has a `protected` modifier. */\r\n PROTECTED = 1 << 10,\r\n /** Has a `get` modifier. */\r\n GET = 1 << 11,\r\n /** Has a `set` modifier. */\r\n SET = 1 << 12,\r\n /** Has a definite assignment assertion `!` as in `x!: i32;`. */\r\n DEFINITE_ASSIGNMENT = 1 << 13,\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 << 14,\r\n /** Is generic. */\r\n GENERIC = 1 << 15,\r\n /** Is part of a generic context. */\r\n GENERIC_CONTEXT = 1 << 16,\r\n /** Is an instance member. */\r\n INSTANCE = 1 << 17,\r\n /** Is a constructor. */\r\n CONSTRUCTOR = 1 << 18,\r\n /** Is an arrow function. */\r\n ARROW = 1 << 19,\r\n /** Is a module export. */\r\n MODULE_EXPORT = 1 << 20,\r\n /** Is a module import. */\r\n MODULE_IMPORT = 1 << 21,\r\n\r\n // Compilation states\r\n\r\n /** Is compiled. */\r\n COMPILED = 1 << 22,\r\n /** Has a constant value and is therefore inlined. */\r\n INLINED = 1 << 23,\r\n /** Is scoped. */\r\n SCOPED = 1 << 24,\r\n /** Is a trampoline. */\r\n TRAMPOLINE = 1 << 25,\r\n /** Is a virtual method. */\r\n VIRTUAL = 1 << 26,\r\n /** Is the main function. */\r\n MAIN = 1 << 27,\r\n\r\n // Other\r\n\r\n QUOTED = 1 << 28\r\n}\r\n\r\n/** Path delimiter inserted between file system levels. */\r\nexport const PATH_DELIMITER = \"/\";\r\n/** Substitution used to indicate the parent directory. */\r\nexport const PARENT_SUBST = \"..\";\r\n/** Function name prefix used for getters. */\r\nexport const GETTER_PREFIX = \"get:\";\r\n/** Function name prefix used for setters. */\r\nexport const SETTER_PREFIX = \"set:\";\r\n/** Delimiter used between class names and instance members. */\r\nexport const INSTANCE_DELIMITER = \"#\";\r\n/** Delimiter used between class and namespace names and static members. */\r\nexport const STATIC_DELIMITER = \".\";\r\n/** Delimiter used between a function and its inner elements. */\r\nexport const INNER_DELIMITER = \"~\";\r\n/** Substitution used to indicate a library directory. */\r\nexport const LIBRARY_SUBST = \"~lib\";\r\n/** Library directory prefix. */\r\nexport const LIBRARY_PREFIX = LIBRARY_SUBST + PATH_DELIMITER;\r\n/** Prefix used to indicate a filespace element. */\r\nexport const FILESPACE_PREFIX = \"file:\";\r\n","/**\r\n * Shared diagnostic handling inherited by the parser and the compiler.\r\n * @module diagnostics\r\n * @preferred\r\n *//***/\r\n\r\nimport {\r\n Range\r\n} from \"./ast\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\nimport {\r\n isLineBreak\r\n} from \"./util\";\r\n\r\nexport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\n/** Indicates the category of a {@link DiagnosticMessage}. */\r\nexport enum DiagnosticCategory {\r\n /** Informatory message. */\r\n INFO,\r\n /** Warning message. */\r\n WARNING,\r\n /** Error message. */\r\n ERROR\r\n}\r\n\r\n/** Returns the string representation of the specified diagnostic category. */\r\nexport function diagnosticCategoryToString(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return \"INFO\";\r\n case DiagnosticCategory.WARNING: return \"WARNING\";\r\n case DiagnosticCategory.ERROR: return \"ERROR\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\n/** ANSI escape sequence for blue foreground. */\r\nexport const COLOR_BLUE: string = \"\\u001b[96m\";\r\n/** ANSI escape sequence for yellow foreground. */\r\nexport const COLOR_YELLOW: string = \"\\u001b[93m\";\r\n/** ANSI escape sequence for red foreground. */\r\nexport const COLOR_RED: string = \"\\u001b[91m\";\r\n/** ANSI escape sequence to reset the foreground color. */\r\nexport const COLOR_RESET: string = \"\\u001b[0m\";\r\n\r\n/** Returns the ANSI escape sequence for the specified category. */\r\nexport function diagnosticCategoryToColor(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return COLOR_BLUE;\r\n case DiagnosticCategory.WARNING: return COLOR_YELLOW;\r\n case DiagnosticCategory.ERROR: return COLOR_RED;\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\n/** Represents a diagnostic message. */\r\nexport class DiagnosticMessage {\r\n\r\n /** Message code. */\r\n code: i32;\r\n /** Message category. */\r\n category: DiagnosticCategory;\r\n /** Message text. */\r\n message: string;\r\n /** Respective source range, if any. */\r\n range: Range | null = null;\r\n\r\n /** Constructs a new diagnostic message. */\r\n private constructor(code: i32, category: DiagnosticCategory, message: string) {\r\n this.code = code;\r\n this.category = category;\r\n this.message = message;\r\n }\r\n\r\n /** Creates a new diagnostic message of the specified category. */\r\n static create(\r\n code: DiagnosticCode,\r\n category: DiagnosticCategory,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): DiagnosticMessage {\r\n var message = diagnosticCodeToString(code);\r\n if (arg0 != null) message = message.replace(\"{0}\", arg0);\r\n if (arg1 != null) message = message.replace(\"{1}\", arg1);\r\n if (arg2 != null) message = message.replace(\"{2}\", arg2);\r\n return new DiagnosticMessage(code, category, message);\r\n }\r\n\r\n /** Creates a new informatory diagnostic message. */\r\n static createInfo(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.INFO, arg0, arg1);\r\n }\r\n\r\n /** Creates a new warning diagnostic message. */\r\n static createWarning(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.WARNING, arg0, arg1);\r\n }\r\n\r\n /** Creates a new error diagnostic message. */\r\n static createError(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.ERROR, arg0, arg1);\r\n }\r\n\r\n /** Adds a source range to this message. */\r\n withRange(range: Range): this {\r\n this.range = range;\r\n return this;\r\n }\r\n\r\n /** Converts this message to a string. */\r\n toString(): string {\r\n if (this.range) {\r\n return (\r\n diagnosticCategoryToString(this.category) +\r\n \" \" +\r\n this.code.toString(10) +\r\n \": \\\"\" +\r\n this.message +\r\n \"\\\" in \" +\r\n this.range.source.normalizedPath +\r\n \":\" +\r\n this.range.line.toString(10) +\r\n \":\" +\r\n this.range.column.toString(10)\r\n );\r\n }\r\n return (\r\n diagnosticCategoryToString(this.category) +\r\n \" \" +\r\n this.code.toString(10) +\r\n \": \" +\r\n this.message\r\n );\r\n }\r\n}\r\n\r\n/** Formats a diagnostic message, optionally with terminal colors and source context. */\r\nexport function formatDiagnosticMessage(\r\n message: DiagnosticMessage,\r\n useColors: bool = false,\r\n showContext: bool = false\r\n): string {\r\n\r\n // general information\r\n var sb: string[] = [];\r\n if (useColors) sb.push(diagnosticCategoryToColor(message.category));\r\n sb.push(diagnosticCategoryToString(message.category));\r\n if (useColors) sb.push(COLOR_RESET);\r\n sb.push(message.code < 1000 ? \" AS\" : \" TS\");\r\n sb.push(message.code.toString(10));\r\n sb.push(\": \");\r\n sb.push(message.message);\r\n\r\n // include range information if available\r\n if (message.range) {\r\n\r\n // include context information if requested\r\n let range = message.range;\r\n if (showContext) {\r\n sb.push(\"\\n\");\r\n sb.push(formatDiagnosticContext(message.range, useColors));\r\n }\r\n\r\n sb.push(\"\\n\");\r\n sb.push(\" in \");\r\n sb.push(range.source.normalizedPath);\r\n sb.push(\"(\");\r\n sb.push(range.line.toString(10));\r\n sb.push(\",\");\r\n sb.push(range.column.toString(10));\r\n sb.push(\")\");\r\n }\r\n return sb.join(\"\");\r\n}\r\n\r\n/** Formats the diagnostic context for the specified range, optionally with terminal colors. */\r\nexport function formatDiagnosticContext(range: Range, useColors: bool = false): string {\r\n var text = range.source.text;\r\n var len = text.length;\r\n var start = range.start;\r\n var end = range.end;\r\n while (start > 0 && !isLineBreak(text.charCodeAt(start - 1))) start--;\r\n while (end < len && !isLineBreak(text.charCodeAt(end))) end++;\r\n var sb: string[] = [\r\n \"\\n \",\r\n text.substring(start, end),\r\n \"\\n \"\r\n ];\r\n while (start < range.start) {\r\n sb.push(\" \");\r\n start++;\r\n }\r\n if (useColors) sb.push(COLOR_RED);\r\n if (range.start == range.end) {\r\n sb.push(\"^\");\r\n } else {\r\n while (start++ < range.end) sb.push(\"~\");\r\n }\r\n if (useColors) sb.push(COLOR_RESET);\r\n return sb.join(\"\");\r\n}\r\n\r\n/** Base class of all diagnostic emitters. */\r\nexport abstract class DiagnosticEmitter {\r\n\r\n /** Diagnostic messages emitted so far. */\r\n diagnostics: DiagnosticMessage[];\r\n\r\n /** Initializes this diagnostic emitter. */\r\n protected constructor(diagnostics: DiagnosticMessage[] | null = null) {\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n }\r\n\r\n /** Emits a diagnostic message of the specified category. */\r\n emitDiagnostic(\r\n code: DiagnosticCode,\r\n category: DiagnosticCategory,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n var message = DiagnosticMessage.create(code, category, arg0, arg1, arg2).withRange(range);\r\n this.diagnostics.push(message);\r\n // console.log(formatDiagnosticMessage(message, true, true) + \"\\n\"); // temporary\r\n // console.log(new Error(\"stack\").stack);\r\n }\r\n\r\n /** Emits an informatory diagnostic message. */\r\n info(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.INFO, range, arg0, arg1, arg2);\r\n }\r\n\r\n /** Emits a warning diagnostic message. */\r\n warning(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.WARNING, range, arg0, arg1, arg2);\r\n }\r\n\r\n /** Emits an error diagnostic message. */\r\n error(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.ERROR, range, arg0, arg1, arg2);\r\n }\r\n}\r\n","/**\r\n * Various compiler utilities.\r\n * @module util\r\n * @preferred\r\n *//***/\r\n\r\nexport * from \"./charcode\";\r\nexport * from \"./path\";\r\nexport * from \"./text\";\r\nexport * from \"./binary\";\r\n","/**\r\n * Abstract syntax tree representing a source file once parsed.\r\n * @module ast\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n PATH_DELIMITER,\r\n STATIC_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n LIBRARY_PREFIX\r\n} from \"./common\";\r\n\r\nimport {\r\n Token,\r\n Tokenizer,\r\n Range\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n normalizePath,\r\n resolvePath,\r\n CharCode\r\n} from \"./util\";\r\n\r\nexport { Token, Range };\r\n\r\n/** Indicates the kind of a node. */\r\nexport enum NodeKind {\r\n\r\n SOURCE,\r\n\r\n // types\r\n TYPE,\r\n TYPEPARAMETER,\r\n PARAMETER,\r\n SIGNATURE,\r\n\r\n // expressions\r\n IDENTIFIER,\r\n ASSERTION,\r\n BINARY,\r\n CALL,\r\n CLASS,\r\n COMMA,\r\n ELEMENTACCESS,\r\n FALSE,\r\n FUNCTION,\r\n INSTANCEOF,\r\n LITERAL,\r\n NEW,\r\n NULL,\r\n PARENTHESIZED,\r\n PROPERTYACCESS,\r\n TERNARY,\r\n SUPER,\r\n THIS,\r\n TRUE,\r\n CONSTRUCTOR,\r\n UNARYPOSTFIX,\r\n UNARYPREFIX,\r\n\r\n // statements\r\n BLOCK,\r\n BREAK,\r\n CONTINUE,\r\n DO,\r\n EMPTY,\r\n EXPORT,\r\n EXPORTIMPORT,\r\n EXPRESSION,\r\n FOR,\r\n IF,\r\n IMPORT,\r\n RETURN,\r\n SWITCH,\r\n THROW,\r\n TRY,\r\n VARIABLE,\r\n VOID,\r\n WHILE,\r\n\r\n // declaration statements\r\n CLASSDECLARATION,\r\n ENUMDECLARATION,\r\n ENUMVALUEDECLARATION,\r\n FIELDDECLARATION,\r\n FUNCTIONDECLARATION,\r\n IMPORTDECLARATION,\r\n INTERFACEDECLARATION,\r\n METHODDECLARATION,\r\n NAMESPACEDECLARATION,\r\n TYPEDECLARATION,\r\n VARIABLEDECLARATION,\r\n\r\n // special\r\n DECORATOR,\r\n EXPORTMEMBER,\r\n SWITCHCASE,\r\n COMMENT\r\n}\r\n\r\n/** Checks if a node represents a constant value. */\r\nexport function nodeIsConstantValue(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.LITERAL:\r\n case NodeKind.NULL:\r\n case NodeKind.TRUE:\r\n case NodeKind.FALSE: return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Checks if a node might be callable. */\r\nexport function nodeIsCallable(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.CALL:\r\n case NodeKind.ELEMENTACCESS:\r\n case NodeKind.PROPERTYACCESS:\r\n case NodeKind.PARENTHESIZED: return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Checks if a node might be callable with generic arguments. */\r\nexport function nodeIsGenericCallable(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.PROPERTYACCESS: return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Base class of all nodes. */\r\nexport abstract class Node {\r\n\r\n /** Node kind indicator. */\r\n kind: NodeKind;\r\n /** Source range. */\r\n range: Range;\r\n /** Parent node. */\r\n parent: Node | null = null;\r\n /** Common flags indicating specific traits. */\r\n flags: CommonFlags = CommonFlags.NONE;\r\n\r\n /** Tests if this node has the specified flag or flags. */\r\n is(flag: CommonFlags): bool { return (this.flags & flag) == flag; }\r\n /** Tests if this node has one of the specified flags. */\r\n isAny(flag: CommonFlags): bool { return (this.flags & flag) != 0; }\r\n /** Sets a specific flag or flags. */\r\n set(flag: CommonFlags): void { this.flags |= flag; }\r\n\r\n // types\r\n\r\n static createType(\r\n name: IdentifierExpression,\r\n typeArguments: CommonTypeNode[] | null,\r\n isNullable: bool,\r\n range: Range\r\n ): TypeNode {\r\n var type = new TypeNode();\r\n type.range = range;\r\n type.name = name; name.parent = type;\r\n type.typeArguments = typeArguments; if (typeArguments) setParent(typeArguments, type);\r\n type.isNullable = isNullable;\r\n return type;\r\n }\r\n\r\n static createOmittedType(\r\n range: Range\r\n ): TypeNode {\r\n return Node.createType(\r\n Node.createIdentifierExpression(\"\", range),\r\n null,\r\n false,\r\n range\r\n );\r\n }\r\n\r\n static createTypeParameter(\r\n name: IdentifierExpression,\r\n extendsType: TypeNode | null,\r\n range: Range\r\n ): TypeParameterNode {\r\n var elem = new TypeParameterNode();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n elem.extendsType = extendsType; if (extendsType) extendsType.parent = elem;\r\n return elem;\r\n }\r\n\r\n static createParameter(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode,\r\n initializer: Expression | null,\r\n kind: ParameterKind,\r\n range: Range\r\n ): ParameterNode {\r\n var elem = new ParameterNode();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n elem.type = type; if (type) type.parent = elem;\r\n elem.initializer = initializer; if (initializer) initializer.parent = elem;\r\n elem.parameterKind = kind;\r\n return elem;\r\n }\r\n\r\n static createSignature(\r\n parameters: ParameterNode[],\r\n returnType: CommonTypeNode,\r\n explicitThisType: TypeNode | null,\r\n isNullable: bool,\r\n range: Range\r\n ): SignatureNode {\r\n var sig = new SignatureNode();\r\n sig.range = range;\r\n sig.parameters = parameters; setParent(parameters, sig);\r\n sig.returnType = returnType; returnType.parent = sig;\r\n sig.explicitThisType = explicitThisType; if (explicitThisType) explicitThisType.parent = sig;\r\n sig.isNullable = isNullable;\r\n return sig;\r\n }\r\n\r\n // special\r\n\r\n static createDecorator(\r\n name: Expression,\r\n args: Expression[] | null,\r\n range: Range\r\n ): DecoratorNode {\r\n var stmt = new DecoratorNode();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.arguments = args; if (args) setParent(args, stmt);\r\n stmt.decoratorKind = decoratorNameToKind(name);\r\n return stmt;\r\n }\r\n\r\n static createComment(\r\n text: string,\r\n kind: CommentKind,\r\n range: Range\r\n ): CommentNode {\r\n var node = new CommentNode();\r\n node.range = range;\r\n node.commentKind = kind;\r\n node.text = text;\r\n return node;\r\n }\r\n\r\n // expressions\r\n\r\n static createIdentifierExpression(\r\n name: string,\r\n range: Range\r\n ): IdentifierExpression {\r\n var expr = new IdentifierExpression();\r\n expr.range = range;\r\n expr.text = name;\r\n return expr;\r\n }\r\n\r\n static createEmptyIdentifierExpression(\r\n range: Range\r\n ): IdentifierExpression {\r\n var expr = new IdentifierExpression();\r\n expr.range = range;\r\n expr.text = \"\";\r\n return expr;\r\n }\r\n\r\n static createArrayLiteralExpression(\r\n elements: (Expression | null)[],\r\n range: Range\r\n ): ArrayLiteralExpression {\r\n var expr = new ArrayLiteralExpression();\r\n expr.range = range;\r\n expr.elementExpressions = elements; setParentIfNotNull(elements, expr);\r\n return expr;\r\n }\r\n\r\n static createAssertionExpression(\r\n assertionKind: AssertionKind,\r\n expression: Expression,\r\n toType: CommonTypeNode,\r\n range: Range\r\n ): AssertionExpression {\r\n var expr = new AssertionExpression();\r\n expr.range = range;\r\n expr.assertionKind = assertionKind;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.toType = toType; toType.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createBinaryExpression(\r\n operator: Token,\r\n left: Expression,\r\n right: Expression,\r\n range: Range\r\n ): BinaryExpression {\r\n var expr = new BinaryExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.left = left; left.parent = expr;\r\n expr.right = right; right.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createCallExpression(\r\n expression: Expression,\r\n typeArgs: CommonTypeNode[] | null,\r\n args: Expression[],\r\n range: Range\r\n ): CallExpression {\r\n var expr = new CallExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.typeArguments = typeArgs; if (typeArgs) setParent(typeArgs, expr);\r\n expr.arguments = args; setParent(args, expr);\r\n return expr;\r\n }\r\n\r\n static createClassExpression(\r\n declaration: ClassDeclaration\r\n ): ClassExpression {\r\n var expr = new ClassExpression();\r\n expr.range = declaration.range;\r\n expr.declaration = declaration;\r\n return expr;\r\n }\r\n\r\n static createCommaExpression(\r\n expressions: Expression[],\r\n range: Range\r\n ): CommaExpression {\r\n var expr = new CommaExpression();\r\n expr.range = range;\r\n expr.expressions = expressions; setParent(expressions, expr);\r\n return expr;\r\n }\r\n\r\n static createConstructorExpression(\r\n range: Range\r\n ): ConstructorExpression {\r\n var expr = new ConstructorExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createElementAccessExpression(\r\n expression: Expression,\r\n element: Expression,\r\n range: Range\r\n ): ElementAccessExpression {\r\n var expr = new ElementAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.elementExpression = element; element.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createFalseExpression(\r\n range: Range\r\n ): FalseExpression {\r\n var expr = new FalseExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createFloatLiteralExpression(\r\n value: f64,\r\n range: Range\r\n ): FloatLiteralExpression {\r\n var expr = new FloatLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createFunctionExpression(\r\n declaration: FunctionDeclaration\r\n ): FunctionExpression {\r\n var expr = new FunctionExpression();\r\n expr.flags = declaration.flags & CommonFlags.ARROW;\r\n expr.range = declaration.range;\r\n expr.declaration = declaration;\r\n return expr;\r\n }\r\n\r\n static createInstanceOfExpression(\r\n expression: Expression,\r\n isType: CommonTypeNode,\r\n range: Range\r\n ): InstanceOfExpression {\r\n var expr = new InstanceOfExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.isType = isType; isType.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createIntegerLiteralExpression(\r\n value: I64,\r\n range: Range\r\n ): IntegerLiteralExpression {\r\n var expr = new IntegerLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createNewExpression(\r\n expression: Expression,\r\n typeArgs: CommonTypeNode[] | null,\r\n args: Expression[],\r\n range: Range\r\n ): NewExpression {\r\n var expr = new NewExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.typeArguments = typeArgs; if (typeArgs) setParent(typeArgs, expr);\r\n expr.arguments = args; setParent(args, expr);\r\n return expr;\r\n }\r\n\r\n static createNullExpression(\r\n range: Range\r\n ): NullExpression {\r\n var expr = new NullExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createObjectLiteralExpression(\r\n names: IdentifierExpression[],\r\n values: Expression[],\r\n range: Range\r\n ): ObjectLiteralExpression {\r\n var expr = new ObjectLiteralExpression();\r\n expr.range = range;\r\n expr.names = names;\r\n expr.values = values;\r\n return expr;\r\n }\r\n\r\n static createParenthesizedExpression(\r\n expression: Expression,\r\n range: Range\r\n ): ParenthesizedExpression {\r\n var expr = new ParenthesizedExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createPropertyAccessExpression(\r\n expression: Expression,\r\n property: IdentifierExpression,\r\n range: Range\r\n ): PropertyAccessExpression {\r\n var expr = new PropertyAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.property = property; property.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createRegexpLiteralExpression(\r\n pattern: string,\r\n flags: string,\r\n range: Range\r\n ): RegexpLiteralExpression {\r\n var expr = new RegexpLiteralExpression();\r\n expr.range = range;\r\n expr.pattern = pattern;\r\n expr.patternFlags = flags;\r\n return expr;\r\n }\r\n\r\n static createTernaryExpression(\r\n condition: Expression,\r\n ifThen: Expression,\r\n ifElse: Expression,\r\n range: Range\r\n ): TernaryExpression {\r\n var expr = new TernaryExpression();\r\n expr.range = range;\r\n expr.condition = condition; condition.parent = expr;\r\n expr.ifThen = ifThen; ifThen.parent = expr;\r\n expr.ifElse = ifElse; ifElse.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createStringLiteralExpression(\r\n value: string,\r\n range: Range\r\n ): StringLiteralExpression {\r\n var expr = new StringLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createSuperExpression(\r\n range: Range\r\n ): SuperExpression {\r\n var expr = new SuperExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createThisExpression(\r\n range: Range\r\n ): ThisExpression {\r\n var expr = new ThisExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createTrueExpression(\r\n range: Range\r\n ): TrueExpression {\r\n var expr = new TrueExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createUnaryPostfixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPostfixExpression {\r\n var expr = new UnaryPostfixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createUnaryPrefixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPrefixExpression {\r\n var expr = new UnaryPrefixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n // statements\r\n\r\n static createBlockStatement(\r\n statements: Statement[],\r\n range: Range\r\n ): BlockStatement {\r\n var stmt = new BlockStatement();\r\n stmt.range = range;\r\n stmt.statements = statements; setParent(statements, stmt);\r\n return stmt;\r\n }\r\n\r\n static createBreakStatement(\r\n label: IdentifierExpression | null,\r\n range: Range\r\n ): BreakStatement {\r\n var stmt = new BreakStatement();\r\n stmt.range = range;\r\n stmt.label = label; if (label) label.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createClassDeclaration(\r\n identifier: IdentifierExpression,\r\n typeParameters: TypeParameterNode[],\r\n extendsType: TypeNode | null, // can't be a function\r\n implementsTypes: TypeNode[] | null, // can't be functions\r\n members: DeclarationStatement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): ClassDeclaration {\r\n var stmt = new ClassDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = identifier; identifier.parent = stmt;\r\n stmt.typeParameters = typeParameters; setParent(typeParameters, stmt);\r\n stmt.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.implementsTypes = implementsTypes; if (implementsTypes) setParent(implementsTypes, stmt);\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createContinueStatement(\r\n label: IdentifierExpression | null,\r\n range: Range\r\n ): ContinueStatement {\r\n var stmt = new ContinueStatement();\r\n stmt.range = range;\r\n stmt.label = label; if (label) label.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createDoStatement(\r\n statement: Statement,\r\n condition: Expression,\r\n range: Range\r\n ): DoStatement {\r\n var stmt = new DoStatement();\r\n stmt.range = range;\r\n stmt.statement = statement; statement.parent = stmt;\r\n stmt.condition = condition; condition.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createEmptyStatement(\r\n range: Range\r\n ): EmptyStatement {\r\n var stmt = new EmptyStatement();\r\n stmt.range = range;\r\n return stmt;\r\n }\r\n\r\n static createEnumDeclaration(\r\n name: IdentifierExpression,\r\n members: EnumValueDeclaration[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): EnumDeclaration {\r\n var stmt = new EnumDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.values = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createEnumValueDeclaration(\r\n name: IdentifierExpression,\r\n value: Expression | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): EnumValueDeclaration {\r\n var stmt = new EnumValueDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.value = value; if (value) value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createExportStatement(\r\n members: ExportMember[] | null,\r\n path: StringLiteralExpression | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): ExportStatement {\r\n var stmt = new ExportStatement();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.members = members; if (members) setParent(members, stmt);\r\n stmt.path = path;\r\n if (path) {\r\n let normalizedPath = normalizePath(path.value);\r\n if (path.value.startsWith(\".\")) { // relative\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n } else {\r\n stmt.normalizedPath = null;\r\n stmt.internalPath = null;\r\n }\r\n return stmt;\r\n }\r\n\r\n static createExportImportStatement(\r\n name: IdentifierExpression,\r\n externalName: IdentifierExpression,\r\n range: Range\r\n ): ExportImportStatement {\r\n var stmt = new ExportImportStatement();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.externalName = externalName; externalName.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createExportMember(\r\n name: IdentifierExpression,\r\n externalName: IdentifierExpression | null,\r\n range: Range\r\n ): ExportMember {\r\n var elem = new ExportMember();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n if (!externalName) {\r\n externalName = name;\r\n } else {\r\n externalName.parent = elem;\r\n }\r\n elem.externalName = externalName;\r\n return elem;\r\n }\r\n\r\n static createExpressionStatement(\r\n expression: Expression\r\n ): ExpressionStatement {\r\n var stmt = new ExpressionStatement();\r\n stmt.range = expression.range;\r\n stmt.expression = expression; expression.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createIfStatement(\r\n condition: Expression,\r\n ifTrue: Statement,\r\n ifFalse: Statement | null,\r\n range: Range\r\n ): IfStatement {\r\n var stmt = new IfStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.ifTrue = ifTrue; ifTrue.parent = stmt;\r\n stmt.ifFalse = ifFalse; if (ifFalse) ifFalse.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createImportStatement(\r\n decls: ImportDeclaration[] | null,\r\n path: StringLiteralExpression,\r\n range: Range\r\n ): ImportStatement {\r\n var stmt = new ImportStatement();\r\n stmt.range = range;\r\n stmt.declarations = decls; if (decls) setParent(decls, stmt);\r\n stmt.namespaceName = null;\r\n stmt.path = path;\r\n var normalizedPath = normalizePath(path.value);\r\n if (path.value.startsWith(\".\")) { // relative in project\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute in library\r\n if (!normalizedPath.startsWith(LIBRARY_PREFIX)) {\r\n normalizedPath = LIBRARY_PREFIX + normalizedPath;\r\n }\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n return stmt;\r\n }\r\n\r\n static createImportStatementWithWildcard(\r\n identifier: IdentifierExpression,\r\n path: StringLiteralExpression,\r\n range: Range\r\n ): ImportStatement {\r\n var stmt = new ImportStatement();\r\n stmt.range = range;\r\n stmt.declarations = null;\r\n stmt.namespaceName = identifier;\r\n stmt.path = path;\r\n stmt.normalizedPath = resolvePath(\r\n normalizePath(path.value),\r\n range.source.normalizedPath\r\n );\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n return stmt;\r\n }\r\n\r\n static createImportDeclaration(\r\n externalName: IdentifierExpression,\r\n name: IdentifierExpression | null,\r\n range: Range\r\n ): ImportDeclaration {\r\n var elem = new ImportDeclaration();\r\n elem.range = range;\r\n elem.externalName = externalName; externalName.parent = elem;\r\n if (!name) {\r\n name = externalName;\r\n } else {\r\n name.parent = elem;\r\n }\r\n elem.name = name;\r\n return elem;\r\n }\r\n\r\n static createInterfaceDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[],\r\n extendsType: TypeNode | null, // can't be a function\r\n members: DeclarationStatement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): InterfaceDeclaration {\r\n var stmt = new InterfaceDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createFieldDeclaration(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): FieldDeclaration {\r\n var stmt = new FieldDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.type = type; if (type) type.parent = stmt;\r\n stmt.initializer = initializer; if (initializer) initializer.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createForStatement(\r\n initializer: Statement | null,\r\n condition: Expression | null,\r\n incrementor: Expression | null,\r\n statement: Statement,\r\n range: Range\r\n ): ForStatement {\r\n var stmt = new ForStatement();\r\n stmt.range = range;\r\n stmt.initializer = initializer; if (initializer) initializer.parent = stmt;\r\n stmt.condition = condition; if (condition) condition.parent = stmt;\r\n stmt.incrementor = incrementor; if (incrementor) incrementor.parent = stmt;\r\n stmt.statement = statement; statement.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createFunctionDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): FunctionDeclaration {\r\n var stmt = new FunctionDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.signature = signature; signature.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createMethodDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): MethodDeclaration {\r\n var stmt = new MethodDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.signature = signature; signature.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createNamespaceDeclaration(\r\n name: IdentifierExpression,\r\n members: Statement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): NamespaceDeclaration {\r\n var stmt = new NamespaceDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createReturnStatement(\r\n value: Expression | null,\r\n range: Range\r\n ): ReturnStatement {\r\n var stmt = new ReturnStatement();\r\n stmt.range = range;\r\n stmt.value = value; if (value) value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createSwitchStatement(\r\n condition: Expression,\r\n cases: SwitchCase[],\r\n range: Range\r\n ): SwitchStatement {\r\n var stmt = new SwitchStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.cases = cases; setParent(cases, stmt);\r\n return stmt;\r\n }\r\n\r\n static createSwitchCase(\r\n label: Expression | null,\r\n statements: Statement[],\r\n range: Range\r\n ): SwitchCase {\r\n var elem = new SwitchCase();\r\n elem.range = range;\r\n elem.label = label; if (label) label.parent = elem;\r\n elem.statements = statements; setParent(statements, elem);\r\n return elem;\r\n }\r\n\r\n static createThrowStatement(\r\n value: Expression,\r\n range: Range\r\n ): ThrowStatement {\r\n var stmt = new ThrowStatement();\r\n stmt.range = range;\r\n stmt.value = value; value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createTryStatement(\r\n statements: Statement[],\r\n catchVariable: IdentifierExpression | null,\r\n catchStatements: Statement[] | null,\r\n finallyStatements: Statement[] | null,\r\n range: Range\r\n ): TryStatement {\r\n var stmt = new TryStatement();\r\n stmt.range = range;\r\n stmt.statements = statements; setParent(statements, stmt);\r\n stmt.catchVariable = catchVariable;\r\n if (catchVariable) catchVariable.parent = stmt;\r\n stmt.catchStatements = catchStatements;\r\n if (catchStatements) setParent(catchStatements, stmt);\r\n stmt.finallyStatements = finallyStatements;\r\n if (finallyStatements) setParent(finallyStatements, stmt);\r\n return stmt;\r\n }\r\n\r\n static createTypeDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n alias: CommonTypeNode,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): TypeDeclaration {\r\n var stmt = new TypeDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.type = alias; alias.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createVariableStatement(\r\n declarations: VariableDeclaration[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): VariableStatement {\r\n var stmt = new VariableStatement();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.declarations = declarations; setParent(declarations, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createVariableDeclaration(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): VariableDeclaration {\r\n var elem = new VariableDeclaration();\r\n elem.range = range;\r\n elem.flags = flags;\r\n elem.name = name; name.parent = elem;\r\n elem.type = type; if (type) type.parent = elem;\r\n elem.initializer = initializer; if (initializer) initializer.parent = elem;\r\n elem.decorators = decorators; // inherited\r\n return elem;\r\n }\r\n\r\n static createVoidStatement(\r\n expression: Expression,\r\n range: Range\r\n ): VoidStatement {\r\n var stmt = new VoidStatement();\r\n stmt.range = range;\r\n stmt.expression = expression;\r\n return stmt;\r\n }\r\n\r\n static createWhileStatement(\r\n condition: Expression,\r\n statement: Statement,\r\n range: Range\r\n ): WhileStatement {\r\n var stmt = new WhileStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.statement = statement; statement.parent = stmt;\r\n return stmt;\r\n }\r\n}\r\n\r\n// types\r\n\r\nexport abstract class CommonTypeNode extends Node {\r\n // kind varies\r\n\r\n /** Whether nullable or not. */\r\n isNullable: bool;\r\n}\r\n\r\n/** Represents a type annotation. */\r\nexport class TypeNode extends CommonTypeNode {\r\n kind = NodeKind.TYPE;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Type argument references. */\r\n typeArguments: CommonTypeNode[] | null;\r\n}\r\n\r\n/** Represents a type parameter. */\r\nexport class TypeParameterNode extends Node {\r\n kind = NodeKind.TYPEPARAMETER;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Extended type reference, if any. */\r\n extendsType: TypeNode | null; // can't be a function\r\n}\r\n\r\n/** Represents the kind of a parameter. */\r\nexport enum ParameterKind {\r\n /** No specific flags. */\r\n DEFAULT,\r\n /** Is an optional parameter. */\r\n OPTIONAL,\r\n /** Is a rest parameter. */\r\n REST\r\n}\r\n\r\n/** Represents a function parameter. */\r\nexport class ParameterNode extends Node {\r\n kind = NodeKind.PARAMETER;\r\n\r\n /** Parameter kind. */\r\n parameterKind: ParameterKind;\r\n /** Parameter name. */\r\n name: IdentifierExpression;\r\n /** Parameter type. */\r\n type: CommonTypeNode;\r\n /** Initializer expression, if present. */\r\n initializer: Expression | null;\r\n /** Implicit field declaration, if applicable. */\r\n implicitFieldDeclaration: FieldDeclaration | null = null;\r\n}\r\n\r\n/** Represents a function signature. */\r\nexport class SignatureNode extends CommonTypeNode {\r\n kind = NodeKind.SIGNATURE;\r\n\r\n /** Accepted parameters. */\r\n parameters: ParameterNode[];\r\n /** Return type. */\r\n returnType: CommonTypeNode;\r\n /** Explicitly provided this type, if any. */\r\n explicitThisType: TypeNode | null; // can't be a function\r\n}\r\n\r\n// special\r\n\r\n/** Built-in decorator kinds. */\r\nexport enum DecoratorKind {\r\n CUSTOM,\r\n GLOBAL,\r\n OPERATOR,\r\n OPERATOR_BINARY,\r\n OPERATOR_PREFIX,\r\n OPERATOR_POSTFIX,\r\n UNMANAGED,\r\n SEALED,\r\n INLINE,\r\n EXTERNAL,\r\n BUILTIN\r\n}\r\n\r\n/** Returns the kind of the specified decorator. Defaults to {@link DecoratorKind.CUSTOM}. */\r\nexport function decoratorNameToKind(name: Expression): DecoratorKind {\r\n // @global, @inline, @operator, @sealed, @unmanaged\r\n if (name.kind == NodeKind.IDENTIFIER) {\r\n let nameStr = (name).text;\r\n assert(nameStr.length);\r\n switch (nameStr.charCodeAt(0)) {\r\n case CharCode.b: {\r\n if (nameStr == \"builtin\") return DecoratorKind.BUILTIN;\r\n break;\r\n }\r\n case CharCode.e: {\r\n if (nameStr == \"external\") return DecoratorKind.EXTERNAL;\r\n break;\r\n }\r\n case CharCode.g: {\r\n if (nameStr == \"global\") return DecoratorKind.GLOBAL;\r\n break;\r\n }\r\n case CharCode.i: {\r\n if (nameStr == \"inline\") return DecoratorKind.INLINE;\r\n break;\r\n }\r\n case CharCode.o: {\r\n if (nameStr == \"operator\") return DecoratorKind.OPERATOR;\r\n break;\r\n }\r\n case CharCode.s: {\r\n if (nameStr == \"sealed\") return DecoratorKind.SEALED;\r\n break;\r\n }\r\n case CharCode.u: {\r\n if (nameStr == \"unmanaged\") return DecoratorKind.UNMANAGED;\r\n break;\r\n }\r\n }\r\n } else if (\r\n name.kind == NodeKind.PROPERTYACCESS &&\r\n (name).expression.kind == NodeKind.IDENTIFIER\r\n ) {\r\n let nameStr = ((name).expression).text;\r\n assert(nameStr.length);\r\n let propStr = (name).property.text;\r\n assert(propStr.length);\r\n // @operator.binary, @operator.prefix, @operator.postfix\r\n if (nameStr == \"operator\") {\r\n switch (propStr.charCodeAt(0)) {\r\n case CharCode.b: {\r\n if (propStr == \"binary\") return DecoratorKind.OPERATOR_BINARY;\r\n break;\r\n }\r\n case CharCode.p: {\r\n switch (propStr) {\r\n case \"prefix\": return DecoratorKind.OPERATOR_PREFIX;\r\n case \"postfix\": return DecoratorKind.OPERATOR_POSTFIX;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return DecoratorKind.CUSTOM;\r\n}\r\n\r\n/** Represents a decorator. */\r\nexport class DecoratorNode extends Node {\r\n kind = NodeKind.DECORATOR;\r\n\r\n /** Built-in kind, if applicable. */\r\n decoratorKind: DecoratorKind;\r\n /** Name expression. */\r\n name: Expression;\r\n /** Argument expressions. */\r\n arguments: Expression[] | null;\r\n}\r\n\r\n/** Comment kinds. */\r\nexport enum CommentKind {\r\n /** Line comment. */\r\n LINE,\r\n /** Triple-slash comment. */\r\n TRIPLE,\r\n /** Block comment. */\r\n BLOCK\r\n}\r\n\r\n/** Represents a comment. */\r\nexport class CommentNode extends Node {\r\n kind = NodeKind.COMMENT;\r\n\r\n /** Comment kind. */\r\n commentKind: CommentKind;\r\n /** Comment text. */\r\n text: string;\r\n}\r\n\r\n// expressions\r\n\r\n/** Base class of all expression nodes. */\r\nexport abstract class Expression extends Node { }\r\n\r\n/** Represents an identifier expression. */\r\nexport class IdentifierExpression extends Expression {\r\n kind = NodeKind.IDENTIFIER;\r\n\r\n /** Textual name. */\r\n text: string;\r\n}\r\n\r\n/** Indicates the kind of a literal. */\r\nexport enum LiteralKind {\r\n FLOAT,\r\n INTEGER,\r\n STRING,\r\n REGEXP,\r\n ARRAY,\r\n OBJECT\r\n}\r\n\r\n/** Base class of all literal expressions. */\r\nexport abstract class LiteralExpression extends Expression {\r\n kind = NodeKind.LITERAL;\r\n\r\n /** Specific literal kind. */\r\n literalKind: LiteralKind;\r\n}\r\n\r\n/** Represents an `[]` literal expression. */\r\nexport class ArrayLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.ARRAY;\r\n\r\n /** Nested element expressions. */\r\n elementExpressions: (Expression | null)[];\r\n}\r\n\r\n/** Indicates the kind of an assertion. */\r\nexport enum AssertionKind {\r\n PREFIX,\r\n AS\r\n}\r\n\r\n/** Represents an assertion expression. */\r\nexport class AssertionExpression extends Expression {\r\n kind = NodeKind.ASSERTION;\r\n\r\n /** Specific kind of this assertion. */\r\n assertionKind: AssertionKind;\r\n /** Expression being asserted. */\r\n expression: Expression;\r\n /** Target type. */\r\n toType: CommonTypeNode;\r\n}\r\n\r\n/** Represents a binary expression. */\r\nexport class BinaryExpression extends Expression {\r\n kind = NodeKind.BINARY;\r\n\r\n /** Operator token. */\r\n operator: Token;\r\n /** Left-hand side expression */\r\n left: Expression;\r\n /** Right-hand side expression. */\r\n right: Expression;\r\n}\r\n\r\n/** Represents a call expression. */\r\nexport class CallExpression extends Expression {\r\n kind = NodeKind.CALL;\r\n\r\n /** Called expression. Usually an identifier or property access expression. */\r\n expression: Expression;\r\n /** Provided type arguments. */\r\n typeArguments: CommonTypeNode[] | null;\r\n /** Provided arguments. */\r\n arguments: Expression[];\r\n}\r\n\r\n/** Represents a class expression using the 'class' keyword. */\r\nexport class ClassExpression extends Expression {\r\n kind = NodeKind.CLASS;\r\n\r\n /** Inline class declaration. */\r\n declaration: ClassDeclaration;\r\n}\r\n\r\n/** Represents a comma expression composed of multiple expressions. */\r\nexport class CommaExpression extends Expression {\r\n kind = NodeKind.COMMA;\r\n\r\n /** Sequential expressions. */\r\n expressions: Expression[];\r\n}\r\n\r\n/** Represents a `constructor` expression. */\r\nexport class ConstructorExpression extends IdentifierExpression {\r\n kind = NodeKind.CONSTRUCTOR;\r\n text = \"constructor\";\r\n}\r\n\r\n/** Represents an element access expression, e.g., array access. */\r\nexport class ElementAccessExpression extends Expression {\r\n kind = NodeKind.ELEMENTACCESS;\r\n\r\n /** Expression being accessed. */\r\n expression: Expression;\r\n /** Element of the expression being accessed. */\r\n elementExpression: Expression;\r\n}\r\n\r\n/** Represents a float literal expression. */\r\nexport class FloatLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.FLOAT;\r\n\r\n /** Float value. */\r\n value: f64;\r\n}\r\n\r\n/** Represents a function expression using the 'function' keyword. */\r\nexport class FunctionExpression extends Expression {\r\n kind = NodeKind.FUNCTION;\r\n\r\n /** Inline function declaration. */\r\n declaration: FunctionDeclaration;\r\n}\r\n\r\n/** Represents an `instanceof` expression. */\r\nexport class InstanceOfExpression extends Expression {\r\n kind = NodeKind.INSTANCEOF;\r\n\r\n /** Expression being asserted. */\r\n expression: Expression;\r\n /** Type to test for. */\r\n isType: CommonTypeNode;\r\n}\r\n\r\n/** Represents an integer literal expression. */\r\nexport class IntegerLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.INTEGER;\r\n\r\n /** Integer value. */\r\n value: I64;\r\n}\r\n\r\n/** Represents a `new` expression. Like a call but with its own kind. */\r\nexport class NewExpression extends CallExpression {\r\n kind = NodeKind.NEW;\r\n}\r\n\r\n/** Represents a `null` expression. */\r\nexport class NullExpression extends IdentifierExpression {\r\n kind = NodeKind.NULL;\r\n text = \"null\";\r\n}\r\n\r\n/** Represents an object literal expression. */\r\nexport class ObjectLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.OBJECT;\r\n\r\n /** Field names. */\r\n names: IdentifierExpression[];\r\n /** Field values. */\r\n values: Expression[];\r\n}\r\n\r\n/** Represents a parenthesized expression. */\r\nexport class ParenthesizedExpression extends Expression {\r\n kind = NodeKind.PARENTHESIZED;\r\n\r\n /** Expression in parenthesis. */\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a property access expression. */\r\nexport class PropertyAccessExpression extends Expression {\r\n kind = NodeKind.PROPERTYACCESS;\r\n\r\n /** Expression being accessed. */\r\n expression: Expression;\r\n /** Property of the expression being accessed. */\r\n property: IdentifierExpression;\r\n}\r\n\r\n/** Represents a regular expression literal expression. */\r\nexport class RegexpLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.REGEXP;\r\n\r\n /** Regular expression pattern. */\r\n pattern: string;\r\n /** Regular expression flags. */\r\n patternFlags: string;\r\n}\r\n\r\n/** Represents a ternary expression, i.e., short if notation. */\r\nexport class TernaryExpression extends Expression {\r\n kind = NodeKind.TERNARY;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Expression executed when condition is `true`. */\r\n ifThen: Expression;\r\n /** Expression executed when condition is `false`. */\r\n ifElse: Expression;\r\n}\r\n\r\n/** Represents a string literal expression. */\r\nexport class StringLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.STRING;\r\n\r\n /** String value without quotes. */\r\n value: string;\r\n}\r\n\r\n/** Represents a `super` expression. */\r\nexport class SuperExpression extends IdentifierExpression {\r\n kind = NodeKind.SUPER;\r\n text = \"super\";\r\n}\r\n\r\n/** Represents a `this` expression. */\r\nexport class ThisExpression extends IdentifierExpression {\r\n kind = NodeKind.THIS;\r\n text = \"this\";\r\n}\r\n\r\n/** Represents a `true` expression. */\r\nexport class TrueExpression extends IdentifierExpression {\r\n kind = NodeKind.TRUE;\r\n text = \"true\";\r\n}\r\n\r\n/** Represents a `false` expression. */\r\nexport class FalseExpression extends IdentifierExpression {\r\n kind = NodeKind.FALSE;\r\n text = \"false\";\r\n}\r\n\r\n/** Base class of all unary expressions. */\r\nexport abstract class UnaryExpression extends Expression {\r\n\r\n /** Operator token. */\r\n operator: Token;\r\n /** Operand expression. */\r\n operand: Expression;\r\n}\r\n\r\n/** Represents a unary postfix expression, e.g. a postfix increment. */\r\nexport class UnaryPostfixExpression extends UnaryExpression {\r\n kind = NodeKind.UNARYPOSTFIX;\r\n}\r\n\r\n/** Represents a unary prefix expression, e.g. a negation. */\r\nexport class UnaryPrefixExpression extends UnaryExpression {\r\n kind = NodeKind.UNARYPREFIX;\r\n}\r\n\r\n// statements\r\n\r\nexport function isLastStatement(statement: Statement): bool {\r\n var parent = assert(statement.parent);\r\n if (parent.kind == NodeKind.BLOCK) {\r\n let statements = (parent).statements;\r\n if (statements[statements.length - 1] === statement) {\r\n switch (assert(parent.parent).kind) {\r\n case NodeKind.FUNCTIONDECLARATION:\r\n case NodeKind.METHODDECLARATION: return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n/** Base class of all statement nodes. */\r\nexport abstract class Statement extends Node { }\r\n\r\n/** Indicates the specific kind of a source. */\r\nexport enum SourceKind {\r\n /** Default source. Usually imported from an entry file. */\r\n DEFAULT,\r\n /** Entry file. */\r\n ENTRY,\r\n /** Library file. */\r\n LIBRARY\r\n}\r\n\r\n/** A top-level source node. */\r\nexport class Source extends Node {\r\n kind = NodeKind.SOURCE;\r\n parent = null;\r\n\r\n /** Source kind. */\r\n sourceKind: SourceKind;\r\n /** Normalized path. */\r\n normalizedPath: string;\r\n /** Path used internally. */\r\n internalPath: string;\r\n /** Simple path (last part without extension). */\r\n simplePath: string;\r\n /** Contained statements. */\r\n statements: Statement[];\r\n /** Full source text. */\r\n text: string;\r\n /** Tokenizer reference. */\r\n tokenizer: Tokenizer | null = null;\r\n /** Source map index. */\r\n debugInfoIndex: i32 = -1;\r\n /** Re-exported sources. */\r\n exportPaths: Set | null = null;\r\n\r\n /** Constructs a new source node. */\r\n constructor(normalizedPath: string, text: string, kind: SourceKind) {\r\n super();\r\n this.sourceKind = kind;\r\n this.normalizedPath = normalizedPath;\r\n var internalPath = mangleInternalPath(this.normalizedPath);\r\n this.internalPath = internalPath;\r\n var pos = internalPath.lastIndexOf(PATH_DELIMITER);\r\n this.simplePath = pos >= 0 ? internalPath.substring(pos + 1) : internalPath;\r\n this.statements = new Array();\r\n this.range = new Range(this, 0, text.length);\r\n this.text = text;\r\n }\r\n\r\n /** Tests if this source is an entry file. */\r\n get isEntry(): bool { return this.sourceKind == SourceKind.ENTRY; }\r\n /** Tests if this source is a stdlib file. */\r\n get isLibrary(): bool { return this.sourceKind == SourceKind.LIBRARY; }\r\n}\r\n\r\n/** Base class of all declaration statements. */\r\nexport abstract class DeclarationStatement extends Statement {\r\n\r\n /** Simple name being declared. */\r\n name: IdentifierExpression;\r\n /** Array of decorators. */\r\n decorators: DecoratorNode[] | null = null;\r\n\r\n protected cachedProgramLevelInternalName: string | null = null;\r\n protected cachedFileLevelInternalName: string | null = null;\r\n\r\n /** Gets the mangled program-level internal name of this declaration. */\r\n get programLevelInternalName(): string {\r\n if (!this.cachedProgramLevelInternalName) {\r\n this.cachedProgramLevelInternalName = mangleInternalName(this, true);\r\n }\r\n return this.cachedProgramLevelInternalName;\r\n }\r\n\r\n /** Gets the mangled file-level internal name of this declaration. */\r\n get fileLevelInternalName(): string {\r\n if (!this.cachedFileLevelInternalName) {\r\n this.cachedFileLevelInternalName = mangleInternalName(this, false);\r\n }\r\n return this.cachedFileLevelInternalName;\r\n }\r\n\r\n /** Tests if this is a top-level declaration within its source file. */\r\n get isTopLevel(): bool {\r\n var parent = this.parent;\r\n if (!parent) {\r\n return false;\r\n }\r\n if (parent.kind == NodeKind.VARIABLE && !(parent = parent.parent)) {\r\n return false;\r\n }\r\n return parent.kind == NodeKind.SOURCE;\r\n }\r\n\r\n /** Tests if this declaration is a top-level export within its source file. */\r\n get isTopLevelExport(): bool {\r\n var parent = this.parent;\r\n if (!parent || (parent.kind == NodeKind.VARIABLE && !(parent = parent.parent))) {\r\n return false;\r\n }\r\n if (parent.kind == NodeKind.NAMESPACEDECLARATION) {\r\n return this.is(CommonFlags.EXPORT) && (parent).isTopLevelExport;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return this.is(CommonFlags.STATIC) && (parent).isTopLevelExport;\r\n }\r\n return parent.kind == NodeKind.SOURCE && this.is(CommonFlags.EXPORT);\r\n }\r\n\r\n /** Tests if this declaration needs an explicit export. */\r\n needsExplicitExport(member: ExportMember): bool {\r\n // This is necessary because module-level exports are automatically created\r\n // for top level declarations of all sorts. This function essentially tests\r\n // that there isn't a otherwise duplicate top-level export already.\r\n return (\r\n member.name.text != member.externalName.text || // if aliased\r\n this.range.source != member.range.source || // if a re-export\r\n !this.isTopLevelExport // if not top-level\r\n );\r\n }\r\n}\r\n\r\n/** Base class of all variable-like declaration statements. */\r\nexport abstract class VariableLikeDeclarationStatement extends DeclarationStatement {\r\n\r\n /** Variable type. */\r\n type: CommonTypeNode | null;\r\n /** Variable initializer. */\r\n initializer: Expression | null;\r\n}\r\n\r\n/** Represents a block statement. */\r\nexport class BlockStatement extends Statement {\r\n kind = NodeKind.BLOCK;\r\n\r\n /** Contained statements. */\r\n statements: Statement[];\r\n}\r\n\r\n/** Represents a `break` statement. */\r\nexport class BreakStatement extends Statement {\r\n kind = NodeKind.BREAK;\r\n\r\n /** Target label, if applicable. */\r\n label: IdentifierExpression | null;\r\n}\r\n\r\n/** Represents a `class` declaration. */\r\nexport class ClassDeclaration extends DeclarationStatement {\r\n kind = NodeKind.CLASSDECLARATION;\r\n\r\n /** Accepted type parameters. */\r\n typeParameters: TypeParameterNode[];\r\n /** Base class type being extended, if any. */\r\n extendsType: TypeNode | null; // can't be a function\r\n /** Interface types being implemented, if any. */\r\n implementsTypes: TypeNode[] | null; // can't be functions\r\n /** Class member declarations. */\r\n members: DeclarationStatement[];\r\n\r\n get isGeneric(): bool {\r\n var typeParameters = this.typeParameters;\r\n return typeParameters != null && typeParameters.length > 0;\r\n }\r\n}\r\n\r\n/** Represents a `continue` statement. */\r\nexport class ContinueStatement extends Statement {\r\n kind = NodeKind.CONTINUE;\r\n\r\n /** Target label, if applicable. */\r\n label: IdentifierExpression | null;\r\n}\r\n\r\n/** Represents a `do` statement. */\r\nexport class DoStatement extends Statement {\r\n kind = NodeKind.DO;\r\n\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n /** Condition when to repeat. */\r\n condition: Expression;\r\n}\r\n\r\n/** Represents an empty statement, i.e., a semicolon terminating nothing. */\r\nexport class EmptyStatement extends Statement {\r\n kind = NodeKind.EMPTY;\r\n}\r\n\r\n/** Represents an `enum` declaration. */\r\nexport class EnumDeclaration extends DeclarationStatement {\r\n kind = NodeKind.ENUMDECLARATION;\r\n\r\n /** Enum value declarations. */\r\n values: EnumValueDeclaration[];\r\n}\r\n\r\n/** Represents a value of an `enum` declaration. */\r\nexport class EnumValueDeclaration extends DeclarationStatement {\r\n kind = NodeKind.ENUMVALUEDECLARATION;\r\n // name is inherited\r\n\r\n /** Value expression. */\r\n value: Expression | null;\r\n}\r\n\r\n/** Represents an `export import` statement of an interface. */\r\nexport class ExportImportStatement extends Node {\r\n kind = NodeKind.EXPORTIMPORT;\r\n\r\n /** Identifier being imported. */\r\n name: IdentifierExpression;\r\n /** Identifier being exported. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents a member of an `export` statement. */\r\nexport class ExportMember extends Node {\r\n kind = NodeKind.EXPORTMEMBER;\r\n\r\n /** Identifier being exported. */\r\n name: IdentifierExpression;\r\n /** Identifier seen when imported again. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents an `export` statement. */\r\nexport class ExportStatement extends Statement {\r\n kind = NodeKind.EXPORT;\r\n\r\n /** Array of members if a set of named exports, or `null` if a filespace export. */\r\n members: ExportMember[] | null;\r\n /** Path being exported from, if applicable. */\r\n path: StringLiteralExpression | null;\r\n /** Normalized path, if `path` is set. */\r\n normalizedPath: string | null;\r\n /** Mangled internal path being referenced, if `path` is set. */\r\n internalPath: string | null;\r\n}\r\n\r\n/** Represents an expression that is used as a statement. */\r\nexport class ExpressionStatement extends Statement {\r\n kind = NodeKind.EXPRESSION;\r\n\r\n /** Expression being used as a statement.*/\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a field declaration within a `class`. */\r\nexport class FieldDeclaration extends VariableLikeDeclarationStatement {\r\n kind = NodeKind.FIELDDECLARATION;\r\n\r\n /** Parameter index within the constructor, if applicable. */\r\n parameterIndex: i32 = -1;\r\n}\r\n\r\n/** Represents a `for` statement. */\r\nexport class ForStatement extends Statement {\r\n kind = NodeKind.FOR;\r\n\r\n /**\r\n * Initializer statement, if present.\r\n * Either a {@link VariableStatement} or {@link ExpressionStatement}.\r\n */\r\n initializer: Statement | null;\r\n /** Condition expression, if present. */\r\n condition: Expression | null;\r\n /** Incrementor expression, if present. */\r\n incrementor: Expression | null;\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n}\r\n\r\n/** Represents a `function` declaration. */\r\nexport class FunctionDeclaration extends DeclarationStatement {\r\n kind = NodeKind.FUNCTIONDECLARATION;\r\n\r\n /** Type parameters, if any. */\r\n typeParameters: TypeParameterNode[] | null;\r\n /** Function signature. */\r\n signature: SignatureNode;\r\n /** Body statement. Usually a block. */\r\n body: Statement | null;\r\n\r\n get isGeneric(): bool {\r\n var typeParameters = this.typeParameters;\r\n return typeParameters != null && typeParameters.length > 0;\r\n }\r\n}\r\n\r\n/** Represents an `if` statement. */\r\nexport class IfStatement extends Statement {\r\n kind = NodeKind.IF;\r\n\r\n /** Condition. */\r\n condition: Expression;\r\n /** Statement executed when condition is `true`. */\r\n ifTrue: Statement;\r\n /** Statement executed when condition is `false`. */\r\n ifFalse: Statement | null;\r\n}\r\n\r\n/** Represents an `import` declaration part of an {@link ImportStatement}. */\r\nexport class ImportDeclaration extends DeclarationStatement {\r\n kind = NodeKind.IMPORTDECLARATION;\r\n\r\n /** Identifier being imported. */\r\n externalName: IdentifierExpression;\r\n}\r\n\r\n/** Represents an `import` statement. */\r\nexport class ImportStatement extends Statement {\r\n kind = NodeKind.IMPORT;\r\n\r\n /** Array of member declarations or `null` if an asterisk import. */\r\n declarations: ImportDeclaration[] | null;\r\n /** Name of the local namespace, if an asterisk import. */\r\n namespaceName: IdentifierExpression | null;\r\n /** Path being imported from. */\r\n path: StringLiteralExpression;\r\n /** Normalized path. */\r\n normalizedPath: string;\r\n /** Mangled internal path being referenced. */\r\n internalPath: string;\r\n}\r\n\r\n/** Represents an `interfarce` declaration. */\r\nexport class InterfaceDeclaration extends ClassDeclaration {\r\n kind = NodeKind.INTERFACEDECLARATION;\r\n}\r\n\r\n/** Represents a method declaration within a `class`. */\r\nexport class MethodDeclaration extends FunctionDeclaration {\r\n kind = NodeKind.METHODDECLARATION;\r\n}\r\n\r\n/** Represents a `namespace` declaration. */\r\nexport class NamespaceDeclaration extends DeclarationStatement {\r\n kind = NodeKind.NAMESPACEDECLARATION;\r\n\r\n /** Array of namespace members. */\r\n members: Statement[];\r\n}\r\n\r\n/** Represents a `return` statement. */\r\nexport class ReturnStatement extends Statement {\r\n kind = NodeKind.RETURN;\r\n\r\n /** Value expression being returned, if present. */\r\n value: Expression | null;\r\n}\r\n\r\n/** Represents a single `case` within a `switch` statement. */\r\nexport class SwitchCase extends Node {\r\n kind = NodeKind.SWITCHCASE;\r\n\r\n /** Label expression. `null` indicates the default case. */\r\n label: Expression | null;\r\n /** Contained statements. */\r\n statements: Statement[];\r\n}\r\n\r\n/** Represents a `switch` statement. */\r\nexport class SwitchStatement extends Statement {\r\n kind = NodeKind.SWITCH;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Contained cases. */\r\n cases: SwitchCase[];\r\n}\r\n\r\n/** Represents a `throw` statement. */\r\nexport class ThrowStatement extends Statement {\r\n kind = NodeKind.THROW;\r\n\r\n /** Value expression being thrown. */\r\n value: Expression;\r\n}\r\n\r\n/** Represents a `try` statement. */\r\nexport class TryStatement extends Statement {\r\n kind = NodeKind.TRY;\r\n\r\n /** Contained statements. */\r\n statements: Statement[];\r\n /** Exception variable name, if a `catch` clause is present. */\r\n catchVariable: IdentifierExpression | null;\r\n /** Statements being executed on catch, if a `catch` clause is present. */\r\n catchStatements: Statement[] | null;\r\n /** Statements being executed afterwards, if a `finally` clause is present. */\r\n finallyStatements: Statement[] | null;\r\n}\r\n\r\n/** Represents a `type` declaration. */\r\nexport class TypeDeclaration extends DeclarationStatement {\r\n kind = NodeKind.TYPEDECLARATION;\r\n\r\n /** Type parameters, if any. */\r\n typeParameters: TypeParameterNode[] | null;\r\n /** Type being aliased. */\r\n type: CommonTypeNode;\r\n}\r\n\r\n/** Represents a variable declaration part of a {@link VariableStatement}. */\r\nexport class VariableDeclaration extends VariableLikeDeclarationStatement {\r\n kind = NodeKind.VARIABLEDECLARATION;\r\n}\r\n\r\n/** Represents a variable statement wrapping {@link VariableDeclaration}s. */\r\nexport class VariableStatement extends Statement {\r\n kind = NodeKind.VARIABLE;\r\n\r\n /** Array of decorators. */\r\n decorators: DecoratorNode[] | null;\r\n /** Array of member declarations. */\r\n declarations: VariableDeclaration[];\r\n}\r\n\r\n/** Represents a void statement dropping an expression's value. */\r\nexport class VoidStatement extends Statement {\r\n kind = NodeKind.VOID;\r\n\r\n /** Expression being dropped. */\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a `while` statement. */\r\nexport class WhileStatement extends Statement {\r\n kind = NodeKind.WHILE;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n}\r\n\r\n/** Finds the first decorator matching the specified kind. */\r\nexport function findDecorator(kind: DecoratorKind, decorators: DecoratorNode[] | null): DecoratorNode | null {\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n if (decorator.decoratorKind == kind) return decorator;\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/** Mangles a declaration's name to an internal name. */\r\nexport function mangleInternalName(declaration: DeclarationStatement, asGlobal: bool = false): string {\r\n var name = declaration.name.text;\r\n var parent = declaration.parent;\r\n if (!parent) return name;\r\n if (\r\n declaration.kind == NodeKind.VARIABLEDECLARATION &&\r\n parent.kind == NodeKind.VARIABLE\r\n ) { // skip over\r\n if (!(parent = parent.parent)) return name;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return mangleInternalName(parent, asGlobal) + (\r\n declaration.is(CommonFlags.STATIC)\r\n ? STATIC_DELIMITER\r\n : INSTANCE_DELIMITER\r\n ) + name;\r\n }\r\n if (\r\n parent.kind == NodeKind.NAMESPACEDECLARATION ||\r\n parent.kind == NodeKind.ENUMDECLARATION\r\n ) {\r\n return mangleInternalName(parent, asGlobal) +\r\n STATIC_DELIMITER + name;\r\n }\r\n return asGlobal\r\n ? name\r\n : declaration.range.source.internalPath + PATH_DELIMITER + name;\r\n}\r\n\r\n/** Mangles an external to an internal path. */\r\nexport function mangleInternalPath(path: string): string {\r\n if (path.endsWith(\".ts\")) path = path.substring(0, path.length - 3);\r\n return path;\r\n}\r\n\r\n// Helpers\r\n\r\n/** Sets the parent node on an array of nodes. */\r\nfunction setParent(nodes: Node[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n nodes[i].parent = parent;\r\n }\r\n}\r\n\r\n/** Sets the parent node on an array of nullable nodes. */\r\nfunction setParentIfNotNull(nodes: (Node | null)[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n let node = nodes[i];\r\n if (node) node.parent = parent;\r\n }\r\n}\r\n","/**\r\n * AssemblyScript's intermediate representation describing a program's elements.\r\n * @module program\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n PATH_DELIMITER,\r\n STATIC_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n LIBRARY_PREFIX,\r\n GETTER_PREFIX,\r\n SETTER_PREFIX,\r\n FILESPACE_PREFIX\r\n} from \"./common\";\r\n\r\nimport {\r\n Options,\r\n Feature\r\n} from \"./compiler\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticMessage,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags,\r\n Signature\r\n} from \"./types\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Source,\r\n Range,\r\n CommonTypeNode,\r\n TypeParameterNode,\r\n DecoratorNode,\r\n DecoratorKind,\r\n\r\n Expression,\r\n IdentifierExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n StringLiteralExpression,\r\n\r\n ClassDeclaration,\r\n DeclarationStatement,\r\n EnumDeclaration,\r\n EnumValueDeclaration,\r\n ExportMember,\r\n ExportStatement,\r\n FieldDeclaration,\r\n FunctionDeclaration,\r\n ImportDeclaration,\r\n ImportStatement,\r\n InterfaceDeclaration,\r\n MethodDeclaration,\r\n NamespaceDeclaration,\r\n TypeDeclaration,\r\n VariableDeclaration,\r\n VariableLikeDeclarationStatement,\r\n VariableStatement,\r\n\r\n decoratorNameToKind,\r\n findDecorator\r\n} from \"./ast\";\r\n\r\nimport {\r\n Module,\r\n NativeType,\r\n FunctionRef,\r\n ExpressionRef,\r\n ExpressionId,\r\n BinaryOp,\r\n UnaryOp,\r\n\r\n getExpressionId,\r\n getGetLocalIndex,\r\n isTeeLocal,\r\n getSetLocalValue,\r\n getBinaryOp,\r\n getConstValueI32,\r\n getBinaryLeft,\r\n getBinaryRight,\r\n getUnaryOp,\r\n getExpressionType,\r\n getLoadBytes,\r\n isLoadSigned,\r\n getIfTrue,\r\n getIfFalse,\r\n getSelectThen,\r\n getSelectElse,\r\n getCallTarget,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getBlockName,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getConstValueI64Low\r\n} from \"./module\";\r\n\r\nimport {\r\n CharCode\r\n} from \"./util\";\r\n\r\nimport {\r\n Resolver\r\n} from \"./resolver\";\r\n\r\n/** Represents a yet unresolved import. */\r\nclass QueuedImport {\r\n localName: string;\r\n externalName: string;\r\n externalNameAlt: string;\r\n declaration: ImportDeclaration | null; // not set if a filespace\r\n}\r\n\r\n/** Represents a yet unresolved export. */\r\nclass QueuedExport {\r\n externalName: string;\r\n isReExport: bool;\r\n member: ExportMember;\r\n}\r\n\r\n/** Represents a type alias. */\r\nclass TypeAlias {\r\n typeParameters: TypeParameterNode[] | null;\r\n type: CommonTypeNode;\r\n}\r\n\r\n/** Represents a module-level export. */\r\nclass ModuleExport {\r\n element: Element;\r\n identifier: IdentifierExpression;\r\n}\r\n\r\n/** Represents the kind of an operator overload. */\r\nexport enum OperatorKind {\r\n INVALID,\r\n\r\n // indexed access\r\n INDEXED_GET, // a[]\r\n INDEXED_SET, // a[]=b\r\n UNCHECKED_INDEXED_GET, // unchecked(a[])\r\n UNCHECKED_INDEXED_SET, // unchecked(a[]=b)\r\n\r\n // binary\r\n ADD, // a + b\r\n SUB, // a - b\r\n MUL, // a * b\r\n DIV, // a / b\r\n REM, // a % b\r\n POW, // a ** b\r\n BITWISE_AND, // a & b\r\n BITWISE_OR, // a | b\r\n BITWISE_XOR, // a ^ b\r\n BITWISE_SHL, // a << b\r\n BITWISE_SHR, // a >> b\r\n BITWISE_SHR_U, // a >>> b\r\n EQ, // a == b\r\n NE, // a != b\r\n GT, // a > b\r\n GE, // a >= b\r\n LT, // a < b\r\n LE, // a <= b\r\n\r\n // unary prefix\r\n PLUS, // +a\r\n MINUS, // -a\r\n NOT, // !a\r\n BITWISE_NOT, // ~a\r\n PREFIX_INC, // ++a\r\n PREFIX_DEC, // --a\r\n\r\n // unary postfix\r\n POSTFIX_INC, // a++\r\n POSTFIX_DEC // a--\r\n\r\n // not overridable:\r\n // IDENTITY // a === b\r\n // LOGICAL_AND // a && b\r\n // LOGICAL_OR // a || b\r\n}\r\n\r\n/** Returns the operator kind represented by the specified decorator and string argument. */\r\nfunction operatorKindFromDecorator(decoratorKind: DecoratorKind, arg: string): OperatorKind {\r\n assert(arg.length);\r\n switch (decoratorKind) {\r\n case DecoratorKind.OPERATOR:\r\n case DecoratorKind.OPERATOR_BINARY: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.OPENBRACKET: {\r\n if (arg == \"[]\") return OperatorKind.INDEXED_GET;\r\n if (arg == \"[]=\") return OperatorKind.INDEXED_SET;\r\n break;\r\n }\r\n case CharCode.OPENBRACE: {\r\n if (arg == \"{}\") return OperatorKind.UNCHECKED_INDEXED_GET;\r\n if (arg == \"{}=\") return OperatorKind.UNCHECKED_INDEXED_SET;\r\n break;\r\n }\r\n case CharCode.PLUS: {\r\n if (arg == \"+\") return OperatorKind.ADD;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"-\") return OperatorKind.SUB;\r\n break;\r\n }\r\n case CharCode.ASTERISK: {\r\n if (arg == \"*\") return OperatorKind.MUL;\r\n if (arg == \"**\") return OperatorKind.POW;\r\n break;\r\n }\r\n case CharCode.SLASH: {\r\n if (arg == \"/\") return OperatorKind.DIV;\r\n break;\r\n }\r\n case CharCode.PERCENT: {\r\n if (arg == \"%\") return OperatorKind.REM;\r\n break;\r\n }\r\n case CharCode.AMPERSAND: {\r\n if (arg == \"&\") return OperatorKind.BITWISE_AND;\r\n break;\r\n }\r\n case CharCode.BAR: {\r\n if (arg == \"|\") return OperatorKind.BITWISE_OR;\r\n break;\r\n }\r\n case CharCode.CARET: {\r\n if (arg == \"^\") return OperatorKind.BITWISE_XOR;\r\n break;\r\n }\r\n case CharCode.EQUALS: {\r\n if (arg == \"==\") return OperatorKind.EQ;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n if (arg == \"!=\") return OperatorKind.NE;\r\n break;\r\n }\r\n case CharCode.GREATERTHAN: {\r\n if (arg == \">\") return OperatorKind.GT;\r\n if (arg == \">=\") return OperatorKind.GE;\r\n if (arg == \">>\") return OperatorKind.BITWISE_SHR;\r\n if (arg == \">>>\") return OperatorKind.BITWISE_SHR_U;\r\n break;\r\n }\r\n case CharCode.LESSTHAN: {\r\n if (arg == \"<\") return OperatorKind.LT;\r\n if (arg == \"<=\") return OperatorKind.LE;\r\n if (arg == \"<<\") return OperatorKind.BITWISE_SHL;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case DecoratorKind.OPERATOR_PREFIX: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.PLUS: {\r\n if (arg == \"+\") return OperatorKind.PLUS;\r\n if (arg == \"++\") return OperatorKind.PREFIX_INC;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"-\") return OperatorKind.MINUS;\r\n if (arg == \"--\") return OperatorKind.PREFIX_DEC;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n if (arg == \"!\") return OperatorKind.NOT;\r\n break;\r\n }\r\n case CharCode.TILDE: {\r\n if (arg == \"~\") return OperatorKind.BITWISE_NOT;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case DecoratorKind.OPERATOR_POSTFIX: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.PLUS: {\r\n if (arg == \"++\") return OperatorKind.POSTFIX_INC;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"--\") return OperatorKind.POSTFIX_DEC;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n return OperatorKind.INVALID;\r\n}\r\n\r\nconst noTypesYet = new Map();\r\n\r\n/** Represents an AssemblyScript program. */\r\nexport class Program extends DiagnosticEmitter {\r\n\r\n /** Array of source files. */\r\n sources: Source[];\r\n /** Resolver instance. */\r\n resolver: Resolver;\r\n /** Diagnostic offset used where successively obtaining the next diagnostic. */\r\n diagnosticsOffset: i32 = 0;\r\n /** Compiler options. */\r\n options: Options;\r\n\r\n /** Elements by internal name. */\r\n elementsLookup: Map = new Map();\r\n /** Class and function instances by internal name. */\r\n instancesLookup: Map = new Map();\r\n /** Types by internal name. */\r\n typesLookup: Map = noTypesYet;\r\n /** Declared type aliases. */\r\n typeAliases: Map = new Map();\r\n /** File-level exports by exported name. */\r\n fileLevelExports: Map = new Map();\r\n /** Module-level exports by exported name. */\r\n moduleLevelExports: Map = new Map();\r\n\r\n /** ArrayBuffer instance reference. */\r\n arrayBufferInstance: Class | null = null;\r\n /** Array prototype reference. */\r\n arrayPrototype: ClassPrototype | null = null;\r\n /** String instance reference. */\r\n stringInstance: Class | null = null;\r\n /** Start function reference. */\r\n startFunction: FunctionPrototype;\r\n /** Main function reference, if present. */\r\n mainFunction: FunctionPrototype | null = null;\r\n /** Abort function reference, if present. */\r\n abortInstance: Function | null = null;\r\n /** Memory allocation function. */\r\n memoryAllocateInstance: Function | null = null;\r\n\r\n /** Whether a garbage collector is present or not. */\r\n hasGC: bool = false;\r\n /** Garbage collector allocation function. */\r\n gcAllocateInstance: Function | null = null;\r\n /** Garbage collector link function called when a managed object is referenced from a parent. */\r\n gcLinkInstance: Function | null = null;\r\n /** Garbage collector mark function called to on reachable managed objects. */\r\n gcMarkInstance: Function | null = null;\r\n /** Size of a managed object header. */\r\n gcHeaderSize: u32 = 0;\r\n /** Offset of the GC hook. */\r\n gcHookOffset: u32 = 0;\r\n\r\n /** Currently processing filespace. */\r\n currentFilespace: Filespace;\r\n\r\n /** Constructs a new program, optionally inheriting parser diagnostics. */\r\n constructor(diagnostics: DiagnosticMessage[] | null = null) {\r\n super(diagnostics);\r\n this.resolver = new Resolver(this);\r\n this.sources = [];\r\n }\r\n\r\n /** Gets a source by its exact path. */\r\n getSource(normalizedPath: string): Source | null {\r\n var sources = this.sources;\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n let source = sources[i];\r\n if (source.normalizedPath == normalizedPath) return source;\r\n }\r\n return null;\r\n }\r\n\r\n /** Looks up the source for the specified possibly ambiguous path. */\r\n lookupSourceByPath(normalizedPathWithoutExtension: string): Source | null {\r\n var tmp: string;\r\n return (\r\n this.getSource(normalizedPathWithoutExtension + \".ts\") ||\r\n this.getSource(normalizedPathWithoutExtension + \"/index.ts\") ||\r\n this.getSource((tmp = LIBRARY_PREFIX + normalizedPathWithoutExtension) + \".ts\") ||\r\n this.getSource( tmp + \"/index.ts\")\r\n );\r\n }\r\n\r\n /** Initializes the program and its elements prior to compilation. */\r\n initialize(options: Options): void {\r\n this.options = options;\r\n\r\n // add built-in types\r\n this.typesLookup = new Map([\r\n [\"i8\", Type.i8],\r\n [\"i16\", Type.i16],\r\n [\"i32\", Type.i32],\r\n [\"i64\", Type.i64],\r\n [\"isize\", options.isizeType],\r\n [\"u8\", Type.u8],\r\n [\"u16\", Type.u16],\r\n [\"u32\", Type.u32],\r\n [\"u64\", Type.u64],\r\n [\"usize\", options.usizeType],\r\n [\"bool\", Type.bool],\r\n [\"f32\", Type.f32],\r\n [\"f64\", Type.f64],\r\n [\"void\", Type.void],\r\n [\"number\", Type.f64],\r\n [\"boolean\", Type.bool]\r\n ]);\r\n\r\n // add compiler hints\r\n this.setConstantInteger(\"ASC_TARGET\", Type.i32,\r\n i64_new(options.isWasm64 ? 2 : 1));\r\n this.setConstantInteger(\"ASC_NO_TREESHAKING\", Type.bool,\r\n i64_new(options.noTreeShaking ? 1 : 0, 0));\r\n this.setConstantInteger(\"ASC_NO_ASSERT\", Type.bool,\r\n i64_new(options.noAssert ? 1 : 0, 0));\r\n this.setConstantInteger(\"ASC_MEMORY_BASE\", Type.i32,\r\n i64_new(options.memoryBase, 0));\r\n this.setConstantInteger(\"ASC_OPTIMIZE_LEVEL\", Type.i32,\r\n i64_new(options.optimizeLevelHint, 0));\r\n this.setConstantInteger(\"ASC_SHRINK_LEVEL\", Type.i32,\r\n i64_new(options.shrinkLevelHint, 0));\r\n this.setConstantInteger(\"ASC_FEATURE_MUTABLE_GLOBAL\", Type.bool,\r\n i64_new(options.hasFeature(Feature.MUTABLE_GLOBAL) ? 1 : 0, 0));\r\n this.setConstantInteger(\"ASC_FEATURE_SIGN_EXTENSION\", Type.bool,\r\n i64_new(options.hasFeature(Feature.SIGN_EXTENSION) ? 1 : 0, 0));\r\n\r\n // remember deferred elements\r\n var queuedImports = new Array();\r\n var queuedExports = new Map();\r\n var queuedExtends = new Array();\r\n var queuedImplements = new Array();\r\n\r\n // build initial lookup maps of internal names to declarations\r\n for (let i = 0, k = this.sources.length; i < k; ++i) {\r\n let source = this.sources[i];\r\n\r\n // create one filespace per source\r\n let filespace = new Filespace(this, source);\r\n this.elementsLookup.set(filespace.internalName, filespace);\r\n this.currentFilespace = filespace;\r\n\r\n // process this source's statements\r\n let statements = source.statements;\r\n for (let j = 0, l = statements.length; j < l; ++j) {\r\n let statement = statements[j];\r\n switch (statement.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n this.initializeClass(statement, queuedExtends, queuedImplements);\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n this.initializeEnum(statement);\r\n break;\r\n }\r\n case NodeKind.EXPORT: {\r\n this.initializeExports(statement, queuedExports);\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n this.initializeFunction(statement);\r\n break;\r\n }\r\n case NodeKind.IMPORT: {\r\n this.initializeImports(statement, queuedExports, queuedImports);\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n this.initializeInterface(statement);\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n this.initializeNamespace(statement, queuedExtends, queuedImplements);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n this.initializeTypeAlias(statement);\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n this.initializeVariables(statement);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // queued imports should be resolvable now through traversing exports and queued exports\r\n for (let i = 0; i < queuedImports.length;) {\r\n let queuedImport = queuedImports[i];\r\n let declaration = queuedImport.declaration;\r\n if (declaration) { // named\r\n let element = this.tryLocateImport(queuedImport.externalName, queuedExports);\r\n if (element) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n if (element = this.tryLocateImport(queuedImport.externalNameAlt, queuedExports)) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Module_0_has_no_exported_member_1,\r\n declaration.range,\r\n (declaration.parent).path.value,\r\n declaration.externalName.text\r\n );\r\n ++i;\r\n }\r\n }\r\n } else { // filespace\r\n let element = this.elementsLookup.get(queuedImport.externalName);\r\n if (element) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n if (element = this.elementsLookup.get(queuedImport.externalNameAlt)) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n assert(false); // already reported by the parser not finding the file\r\n ++i;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // queued exports should be resolvable now that imports are finalized\r\n for (let [exportName, queuedExport] of queuedExports) {\r\n let currentExport: QueuedExport | null = queuedExport; // nullable below\r\n let element: Element | null;\r\n do {\r\n if (currentExport.isReExport) {\r\n if (element = this.fileLevelExports.get(currentExport.externalName)) {\r\n this.setExportAndCheckLibrary(\r\n exportName,\r\n element,\r\n queuedExport.member.externalName\r\n );\r\n break;\r\n }\r\n currentExport = queuedExports.get(currentExport.externalName);\r\n if (!currentExport) {\r\n this.error(\r\n DiagnosticCode.Module_0_has_no_exported_member_1,\r\n queuedExport.member.externalName.range,\r\n ((queuedExport.member.parent).path).value,\r\n queuedExport.member.externalName.text\r\n );\r\n }\r\n } else {\r\n if (\r\n // normal export\r\n (element = this.elementsLookup.get(currentExport.externalName)) ||\r\n // library re-export\r\n (element = this.elementsLookup.get(currentExport.member.name.text))\r\n ) {\r\n this.setExportAndCheckLibrary(\r\n exportName,\r\n element,\r\n queuedExport.member.externalName\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n queuedExport.member.range, queuedExport.member.name.text\r\n );\r\n }\r\n break;\r\n }\r\n } while (currentExport);\r\n }\r\n\r\n // resolve base prototypes of derived classes\r\n var resolver = this.resolver;\r\n for (let i = 0, k = queuedExtends.length; i < k; ++i) {\r\n let derivedPrototype = queuedExtends[i];\r\n let derivedDeclaration = derivedPrototype.declaration;\r\n let derivedType = assert(derivedDeclaration.extendsType);\r\n let baseElement = resolver.resolveIdentifier(derivedType.name, null); // reports\r\n if (!baseElement) continue;\r\n if (baseElement.kind == ElementKind.CLASS_PROTOTYPE) {\r\n let basePrototype = baseElement;\r\n derivedPrototype.basePrototype = basePrototype;\r\n } else {\r\n this.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n derivedType.range\r\n );\r\n }\r\n }\r\n\r\n // set up global aliases\r\n {\r\n let globalAliases = options.globalAliases;\r\n if (globalAliases) {\r\n for (let [alias, name] of globalAliases) {\r\n if (!name.length) continue; // explicitly disabled\r\n let element = this.elementsLookup.get(name);\r\n if (element) this.elementsLookup.set(alias, element);\r\n else throw new Error(\"element not found: \" + name);\r\n }\r\n }\r\n }\r\n\r\n // register 'ArrayBuffer'\r\n if (this.elementsLookup.has(\"ArrayBuffer\")) {\r\n let element = assert(this.elementsLookup.get(\"ArrayBuffer\"));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.arrayBufferInstance = resolver.resolveClass(element, null);\r\n }\r\n\r\n // register 'Array'\r\n if (this.elementsLookup.has(\"Array\")) {\r\n let element = assert(this.elementsLookup.get(\"Array\"));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.arrayPrototype = element;\r\n }\r\n\r\n // register 'String'\r\n if (this.elementsLookup.has(\"String\")) {\r\n let element = assert(this.elementsLookup.get(\"String\"));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n let instance = resolver.resolveClass(element, null);\r\n if (instance) {\r\n if (this.typesLookup.has(\"string\")) {\r\n let declaration = (element).declaration;\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, declaration.programLevelInternalName\r\n );\r\n } else {\r\n this.stringInstance = instance;\r\n this.typesLookup.set(\"string\", instance.type);\r\n }\r\n }\r\n }\r\n\r\n // register 'start'\r\n {\r\n let element = assert(this.elementsLookup.get(\"start\"));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.startFunction = element;\r\n }\r\n\r\n // register 'main' if present\r\n if (this.moduleLevelExports.has(\"main\")) {\r\n let element = (this.moduleLevelExports.get(\"main\")).element;\r\n if (\r\n element.kind == ElementKind.FUNCTION_PROTOTYPE &&\r\n !(element).isAny(CommonFlags.GENERIC | CommonFlags.AMBIENT)\r\n ) {\r\n (element).set(CommonFlags.MAIN);\r\n this.mainFunction = element;\r\n }\r\n }\r\n\r\n // register 'abort' if present\r\n if (this.elementsLookup.has(\"abort\")) {\r\n let element = this.elementsLookup.get(\"abort\");\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let instance = this.resolver.resolveFunction(element, null);\r\n if (instance) this.abortInstance = instance;\r\n }\r\n\r\n // register 'memory.allocate' if present\r\n if (this.elementsLookup.has(\"memory\")) {\r\n let element = this.elementsLookup.get(\"memory\");\r\n let members = element.members;\r\n if (members) {\r\n if (members.has(\"allocate\")) {\r\n element = assert(members.get(\"allocate\"));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let instance = this.resolver.resolveFunction(element, null);\r\n if (instance) this.memoryAllocateInstance = instance;\r\n }\r\n }\r\n }\r\n\r\n // register GC hooks if present\r\n if (\r\n this.elementsLookup.has(\"__gc_allocate\") &&\r\n this.elementsLookup.has(\"__gc_link\") &&\r\n this.elementsLookup.has(\"__gc_mark\")\r\n ) {\r\n // __gc_allocate(usize, (ref: usize) => void): usize\r\n let element = this.elementsLookup.get(\"__gc_allocate\");\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let gcAllocateInstance = assert(this.resolver.resolveFunction(element, null));\r\n let signature = gcAllocateInstance.signature;\r\n assert(signature.parameterTypes.length == 2);\r\n assert(signature.parameterTypes[0] == this.options.usizeType);\r\n assert(signature.parameterTypes[1].signatureReference);\r\n assert(signature.returnType == this.options.usizeType);\r\n\r\n // __gc_link(usize, usize): void\r\n element = this.elementsLookup.get(\"__gc_link\");\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let gcLinkInstance = assert(this.resolver.resolveFunction(element, null));\r\n signature = gcLinkInstance.signature;\r\n assert(signature.parameterTypes.length == 2);\r\n assert(signature.parameterTypes[0] == this.options.usizeType);\r\n assert(signature.parameterTypes[1] == this.options.usizeType);\r\n assert(signature.returnType == Type.void);\r\n\r\n // __gc_mark(usize): void\r\n element = this.elementsLookup.get(\"__gc_mark\");\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let gcMarkInstance = assert(this.resolver.resolveFunction(element, null));\r\n signature = gcMarkInstance.signature;\r\n assert(signature.parameterTypes.length == 1);\r\n assert(signature.parameterTypes[0] == this.options.usizeType);\r\n assert(signature.returnType == Type.void);\r\n\r\n this.gcAllocateInstance = gcAllocateInstance;\r\n this.gcLinkInstance = gcLinkInstance;\r\n this.gcMarkInstance = gcMarkInstance;\r\n let gcHookOffset = 2 * options.usizeType.byteSize; // .next + .prev\r\n this.gcHookOffset = gcHookOffset;\r\n this.gcHeaderSize = (gcHookOffset + 4 + 7) & ~7; // + .hook index + alignment\r\n this.hasGC = true;\r\n }\r\n }\r\n\r\n /** Sets a constant integer value. */\r\n setConstantInteger(globalName: string, type: Type, value: I64): void {\r\n assert(type.is(TypeFlags.INTEGER));\r\n this.elementsLookup.set(globalName,\r\n new Global(this, globalName, globalName, type, null, DecoratorFlags.NONE)\r\n .withConstantIntegerValue(value)\r\n );\r\n }\r\n\r\n /** Sets a constant float value. */\r\n setConstantFloat(globalName: string, type: Type, value: f64): void {\r\n assert(type.is(TypeFlags.FLOAT));\r\n this.elementsLookup.set(globalName,\r\n new Global(this, globalName, globalName, type, null, DecoratorFlags.NONE)\r\n .withConstantFloatValue(value)\r\n );\r\n }\r\n\r\n /** Tries to locate an import by traversing exports and queued exports. */\r\n private tryLocateImport(\r\n externalName: string,\r\n queuedNamedExports: Map\r\n ): Element | null {\r\n var element: Element | null;\r\n var fileLevelExports = this.fileLevelExports;\r\n do {\r\n if (element = fileLevelExports.get(externalName)) return element;\r\n let queuedExport = queuedNamedExports.get(externalName);\r\n if (!queuedExport) break;\r\n if (queuedExport.isReExport) {\r\n externalName = queuedExport.externalName;\r\n continue;\r\n }\r\n return this.elementsLookup.get(queuedExport.externalName);\r\n } while (true);\r\n return null;\r\n }\r\n\r\n /** Checks that only supported decorators are present. */\r\n private checkDecorators(\r\n decorators: DecoratorNode[],\r\n acceptedFlags: DecoratorFlags\r\n ): DecoratorFlags {\r\n var presentFlags = DecoratorFlags.NONE;\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n let kind = decoratorNameToKind(decorator.name);\r\n let flag = decoratorKindToFlag(kind);\r\n if (flag) {\r\n if (flag == DecoratorFlags.BUILTIN) {\r\n if (decorator.range.source.isLibrary) {\r\n presentFlags |= flag;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n decorator.range, decorator.name.range.toString()\r\n );\r\n }\r\n } else if (!(acceptedFlags & flag)) {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n decorator.range, decorator.name.range.toString()\r\n );\r\n } else if (presentFlags & flag) {\r\n this.error(\r\n DiagnosticCode.Duplicate_decorator,\r\n decorator.range, decorator.name.range.toString()\r\n );\r\n } else {\r\n presentFlags |= flag;\r\n }\r\n }\r\n }\r\n return presentFlags;\r\n }\r\n\r\n /** Checks and sets up global options of an element. */\r\n private checkGlobal(\r\n element: Element,\r\n declaration: DeclarationStatement\r\n ): void {\r\n var parentNode = declaration.parent;\r\n // alias globally if explicitly annotated @global or exported from a top-level library file\r\n if (\r\n (element.hasDecorator(DecoratorFlags.GLOBAL)) ||\r\n (\r\n declaration.range.source.isLibrary &&\r\n element.is(CommonFlags.EXPORT) &&\r\n (\r\n assert(parentNode).kind == NodeKind.SOURCE ||\r\n (\r\n parentNode).kind == NodeKind.VARIABLE &&\r\n assert((parentNode).parent).kind == NodeKind.SOURCE\r\n )\r\n )\r\n ) {\r\n let globalName = declaration.programLevelInternalName;\r\n if (this.elementsLookup.has(globalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, element.internalName\r\n );\r\n } else {\r\n this.elementsLookup.set(globalName, element);\r\n }\r\n }\r\n // builtins use the global name directly\r\n if (element.hasDecorator(DecoratorFlags.BUILTIN)) {\r\n element.internalName = declaration.programLevelInternalName;\r\n }\r\n }\r\n\r\n /** Initializes a class declaration. */\r\n private initializeClass(\r\n declaration: ClassDeclaration,\r\n queuedExtends: ClassPrototype[],\r\n queuedImplements: ClassPrototype[],\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var simpleName = declaration.name.text;\r\n var prototype = new ClassPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n decorators\r\n ? this.checkDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.SEALED |\r\n DecoratorFlags.UNMANAGED\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n var implementsTypes = declaration.implementsTypes;\r\n if (implementsTypes) {\r\n let numImplementsTypes = implementsTypes.length;\r\n if (prototype.hasDecorator(DecoratorFlags.UNMANAGED)) {\r\n if (numImplementsTypes) {\r\n this.error(\r\n DiagnosticCode.Unmanaged_classes_cannot_implement_interfaces,\r\n Range.join(\r\n declaration.name.range,\r\n implementsTypes[numImplementsTypes - 1].range\r\n )\r\n );\r\n }\r\n\r\n // remember classes that implement interfaces\r\n } else if (numImplementsTypes) {\r\n for (let i = 0; i < numImplementsTypes; ++i) {\r\n this.warning( // TODO\r\n DiagnosticCode.Operation_not_supported,\r\n implementsTypes[i].range\r\n );\r\n }\r\n queuedImplements.push(prototype);\r\n }\r\n }\r\n\r\n // remember classes that extend another one\r\n if (declaration.extendsType) queuedExtends.push(prototype);\r\n\r\n // add as namespace member if applicable\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // otherwise add to file-level exports if exported\r\n } else if (prototype.is(CommonFlags.EXPORT)) {\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, prototype);\r\n this.currentFilespace.members.set(simpleName, prototype);\r\n if (prototype.is(CommonFlags.EXPORT) && declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element: prototype,\r\n identifier: declaration.name\r\n });\r\n }\r\n }\r\n\r\n // initialize members\r\n var memberDeclarations = declaration.members;\r\n for (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n case NodeKind.FIELDDECLARATION: {\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n }\r\n case NodeKind.METHODDECLARATION: {\r\n if (memberDeclaration.isAny(CommonFlags.GET | CommonFlags.SET)) {\r\n this.initializeAccessor(memberDeclaration, prototype);\r\n } else {\r\n this.initializeMethod(memberDeclaration, prototype);\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false); // should have been reported while parsing\r\n return;\r\n }\r\n }\r\n }\r\n\r\n this.checkGlobal(prototype, declaration);\r\n }\r\n\r\n /** Initializes a field of a class or interface. */\r\n private initializeField(\r\n declaration: FieldDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n var decorators = declaration.decorators;\r\n var isInterface = classPrototype.kind == ElementKind.INTERFACE_PROTOTYPE;\r\n\r\n // static fields become global variables\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n if (isInterface) {\r\n // should have been reported while parsing\r\n assert(false);\r\n }\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n let staticField = new Global(\r\n this,\r\n name,\r\n internalName,\r\n Type.void, // resolved later on\r\n declaration,\r\n decorators\r\n ? this.checkDecorators(decorators, DecoratorFlags.INLINE)\r\n : DecoratorFlags.NONE\r\n );\r\n staticField.parent = classPrototype;\r\n classPrototype.members.set(name, staticField);\r\n this.elementsLookup.set(internalName, staticField);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n staticField.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n if (staticField.hasDecorator(DecoratorFlags.INLINE) && !staticField.is(CommonFlags.READONLY)) {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n assert(findDecorator(DecoratorKind.INLINE, decorators)).range, \"inline\"\r\n );\r\n }\r\n\r\n // instance fields are remembered until resolved\r\n } else {\r\n if (isInterface) {\r\n // should have been reported while parsing\r\n assert(!declaration.isAny(CommonFlags.ABSTRACT | CommonFlags.GET | CommonFlags.SET));\r\n }\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n let instanceField = new FieldPrototype(\r\n classPrototype,\r\n name,\r\n internalName,\r\n declaration\r\n );\r\n if (decorators) this.checkDecorators(decorators, DecoratorFlags.NONE);\r\n classPrototype.instanceMembers.set(name, instanceField);\r\n }\r\n }\r\n\r\n /** Initializes a method of a class or interface. */\r\n private initializeMethod(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var simpleName = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n var prototype: FunctionPrototype | null = null;\r\n\r\n var decorators = declaration.decorators;\r\n var decoratorFlags = DecoratorFlags.NONE;\r\n if (decorators) {\r\n decoratorFlags = this.checkDecorators(decorators,\r\n DecoratorFlags.OPERATOR_BINARY |\r\n DecoratorFlags.OPERATOR_PREFIX |\r\n DecoratorFlags.OPERATOR_POSTFIX |\r\n DecoratorFlags.INLINE\r\n );\r\n }\r\n\r\n // static methods become global functions\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n assert(declaration.name.kind != NodeKind.CONSTRUCTOR);\r\n\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0, declaration.name.range,\r\n internalName\r\n );\r\n return;\r\n }\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n classPrototype.members.set(simpleName, prototype);\r\n this.elementsLookup.set(internalName, prototype);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance methods are remembered until resolved\r\n } else {\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n // if (classPrototype.isUnmanaged && instancePrototype.isAbstract) {\r\n // this.error( Unmanaged classes cannot declare abstract methods. );\r\n // }\r\n if (declaration.name.kind == NodeKind.CONSTRUCTOR) {\r\n if (classPrototype.constructorPrototype) {\r\n this.error(\r\n DiagnosticCode.Multiple_constructor_implementations_are_not_allowed,\r\n declaration.name.range\r\n );\r\n } else {\r\n prototype.set(CommonFlags.CONSTRUCTOR);\r\n classPrototype.constructorPrototype = prototype;\r\n }\r\n } else {\r\n classPrototype.instanceMembers.set(simpleName, prototype);\r\n }\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n\r\n this.checkOperatorOverloads(declaration.decorators, prototype, classPrototype);\r\n }\r\n\r\n private checkOperatorOverloads(\r\n decorators: DecoratorNode[] | null,\r\n prototype: FunctionPrototype,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n switch (decorator.decoratorKind) {\r\n case DecoratorKind.OPERATOR:\r\n case DecoratorKind.OPERATOR_BINARY:\r\n case DecoratorKind.OPERATOR_PREFIX:\r\n case DecoratorKind.OPERATOR_POSTFIX: {\r\n let numArgs = decorator.arguments && decorator.arguments.length || 0;\r\n if (numArgs == 1) {\r\n let firstArg = (decorator.arguments)[0];\r\n if (\r\n firstArg.kind == NodeKind.LITERAL &&\r\n (firstArg).literalKind == LiteralKind.STRING\r\n ) {\r\n let kind = operatorKindFromDecorator(\r\n decorator.decoratorKind,\r\n (firstArg).value\r\n );\r\n if (kind == OperatorKind.INVALID) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n firstArg.range\r\n );\r\n } else {\r\n let overloads = classPrototype.overloadPrototypes;\r\n if (overloads.has(kind)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_function_implementation,\r\n firstArg.range\r\n );\r\n } else {\r\n prototype.operatorKind = kind;\r\n overloads.set(kind, prototype);\r\n }\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n firstArg.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n decorator.range, \"1\", numArgs.toString(0)\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private initializeAccessor(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var simpleName = declaration.name.text;\r\n var internalPropertyName = declaration.fileLevelInternalName;\r\n var propertyElement = this.elementsLookup.get(internalPropertyName);\r\n var isGetter = declaration.is(CommonFlags.GET);\r\n var isNew = false;\r\n if (propertyElement) {\r\n if (\r\n propertyElement.kind != ElementKind.PROPERTY ||\r\n (isGetter\r\n ? (propertyElement).getterPrototype\r\n : (propertyElement).setterPrototype\r\n ) != null\r\n ) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalPropertyName\r\n );\r\n return;\r\n }\r\n } else {\r\n propertyElement = new Property(\r\n this,\r\n simpleName,\r\n internalPropertyName,\r\n classPrototype\r\n );\r\n isNew = true;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var decoratorFlags = DecoratorFlags.NONE;\r\n if (decorators) {\r\n decoratorFlags = this.checkDecorators(decorators,\r\n DecoratorFlags.INLINE\r\n );\r\n }\r\n\r\n var baseName = (isGetter ? GETTER_PREFIX : SETTER_PREFIX) + simpleName;\r\n\r\n // static accessors become global functions\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n let staticName = classPrototype.internalName + STATIC_DELIMITER + baseName;\r\n if (this.elementsLookup.has(staticName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, staticName\r\n );\r\n return;\r\n }\r\n let staticPrototype = new FunctionPrototype(\r\n this,\r\n baseName,\r\n staticName,\r\n declaration,\r\n null,\r\n decoratorFlags\r\n );\r\n if (isGetter) {\r\n (propertyElement).getterPrototype = staticPrototype;\r\n } else {\r\n (propertyElement).setterPrototype = staticPrototype;\r\n }\r\n if (isNew) {\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, staticName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n classPrototype.members.set(simpleName, propertyElement); // check above\r\n } else {\r\n assert(classPrototype.members && classPrototype.members.has(simpleName));\r\n }\r\n this.elementsLookup.set(internalPropertyName, propertyElement);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n propertyElement.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance accessors are remembered until resolved\r\n } else {\r\n let instanceName = classPrototype.internalName + INSTANCE_DELIMITER + baseName;\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(baseName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalPropertyName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n let instancePrototype = new FunctionPrototype(\r\n this,\r\n baseName,\r\n instanceName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n if (isGetter) {\r\n (propertyElement).getterPrototype = instancePrototype;\r\n } else {\r\n (propertyElement).setterPrototype = instancePrototype;\r\n }\r\n classPrototype.instanceMembers.set(baseName, propertyElement);\r\n this.elementsLookup.set(internalPropertyName, propertyElement);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n propertyElement.set(CommonFlags.MODULE_EXPORT);\r\n instancePrototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n }\r\n\r\n private initializeEnum(\r\n declaration: EnumDeclaration,\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n var simpleName = declaration.name.text;\r\n var element = new Enum(this, simpleName, internalName, declaration);\r\n element.parent = namespace;\r\n this.elementsLookup.set(internalName, element);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, element);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && element.is(CommonFlags.EXPORT)) {\r\n element.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (element.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, element);\r\n this.currentFilespace.members.set(simpleName, element);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n element.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element,\r\n identifier: declaration.name\r\n });\r\n }\r\n }\r\n\r\n var values = declaration.values;\r\n for (let i = 0, k = values.length; i < k; ++i) {\r\n this.initializeEnumValue(values[i], element);\r\n }\r\n\r\n this.checkGlobal(element, declaration);\r\n }\r\n\r\n private initializeEnumValue(\r\n declaration: EnumValueDeclaration,\r\n enm: Enum\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n if (enm.members) {\r\n if (enm.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n enm.members = new Map();\r\n }\r\n var value = new EnumValue(enm, this, name, internalName, declaration);\r\n enm.members.set(name, value);\r\n if (enm.is(CommonFlags.MODULE_EXPORT)) {\r\n value.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n\r\n private initializeExports(\r\n statement: ExportStatement,\r\n queuedExports: Map\r\n ): void {\r\n var members = statement.members;\r\n if (members) { // named\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n this.initializeExport(members[i], statement.internalPath, queuedExports);\r\n }\r\n } else { // TODO: filespace\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n }\r\n }\r\n\r\n private setExportAndCheckLibrary(\r\n internalName: string,\r\n element: Element,\r\n externalIdentifier: IdentifierExpression\r\n ): void {\r\n // add to file-level exports\r\n this.fileLevelExports.set(internalName, element);\r\n\r\n // add to filespace\r\n var internalPath = externalIdentifier.range.source.internalPath;\r\n var prefix = FILESPACE_PREFIX + internalPath;\r\n var filespace = this.elementsLookup.get(prefix);\r\n if (!filespace) filespace = assert(this.elementsLookup.get(prefix + PATH_DELIMITER + \"index\"));\r\n assert(filespace.kind == ElementKind.FILESPACE);\r\n var simpleName = externalIdentifier.text;\r\n (filespace).members.set(simpleName, element);\r\n\r\n // add global alias if a top-level export of a library file\r\n var source = externalIdentifier.range.source;\r\n if (source.isLibrary) {\r\n if (this.elementsLookup.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n externalIdentifier.range, simpleName\r\n );\r\n } else {\r\n element.internalName = simpleName;\r\n this.elementsLookup.set(simpleName, element);\r\n }\r\n\r\n // add module level export if a top-level export of an entry file\r\n } else if (source.isEntry) {\r\n this.moduleLevelExports.set(externalIdentifier.text, {\r\n element,\r\n identifier: externalIdentifier\r\n });\r\n }\r\n }\r\n\r\n private initializeExport(\r\n member: ExportMember,\r\n internalPath: string | null,\r\n queuedExports: Map\r\n ): void {\r\n var externalName = member.range.source.internalPath + PATH_DELIMITER + member.externalName.text;\r\n if (this.fileLevelExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n var referencedName: string;\r\n var referencedElement: Element | null;\r\n var queuedExport: QueuedExport | null;\r\n\r\n // export local element\r\n if (internalPath == null) {\r\n referencedName = member.range.source.internalPath + PATH_DELIMITER + member.name.text;\r\n\r\n // resolve right away if the element exists\r\n if (this.elementsLookup.has(referencedName)) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n this.elementsLookup.get(referencedName),\r\n member.externalName\r\n );\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n if (queuedExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n queuedExport = new QueuedExport();\r\n queuedExport.isReExport = false;\r\n queuedExport.externalName = referencedName; // -> here: local name\r\n queuedExport.member = member;\r\n queuedExports.set(externalName, queuedExport);\r\n\r\n // export external element\r\n } else {\r\n referencedName = internalPath + PATH_DELIMITER + member.name.text;\r\n\r\n // resolve right away if the export exists\r\n referencedElement = this.elementsLookup.get(referencedName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n\r\n // walk already known queued exports\r\n let seen = new Set();\r\n while (queuedExport = queuedExports.get(referencedName)) {\r\n if (queuedExport.isReExport) {\r\n referencedElement = this.fileLevelExports.get(queuedExport.externalName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n referencedName = queuedExport.externalName;\r\n if (seen.has(queuedExport)) break;\r\n seen.add(queuedExport);\r\n } else {\r\n referencedElement = this.elementsLookup.get(queuedExport.externalName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // otherwise queue it\r\n if (queuedExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n queuedExport = new QueuedExport();\r\n queuedExport.isReExport = true;\r\n queuedExport.externalName = referencedName; // -> here: external name\r\n queuedExport.member = member;\r\n queuedExports.set(externalName, queuedExport);\r\n }\r\n }\r\n\r\n private initializeFunction(\r\n declaration: FunctionDeclaration,\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n var simpleName = declaration.name.text;\r\n var decorators = declaration.decorators;\r\n var prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n null,\r\n decorators\r\n ? this.checkDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.INLINE |\r\n DecoratorFlags.EXTERNAL\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.parent = namespace;\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (prototype.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, prototype);\r\n this.currentFilespace.members.set(simpleName, prototype);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element: prototype,\r\n identifier: declaration.name\r\n });\r\n }\r\n }\r\n\r\n this.checkGlobal(prototype, declaration);\r\n }\r\n\r\n private initializeImports(\r\n statement: ImportStatement,\r\n queuedExports: Map,\r\n queuedImports: QueuedImport[]\r\n ): void {\r\n var declarations = statement.declarations;\r\n if (declarations) {\r\n for (let i = 0, k = declarations.length; i < k; ++i) {\r\n this.initializeImport(\r\n declarations[i],\r\n statement.internalPath,\r\n queuedExports, queuedImports\r\n );\r\n }\r\n } else if (statement.namespaceName) { // import * as simpleName from \"file\"\r\n let simpleName = statement.namespaceName.text;\r\n let internalName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n simpleName\r\n );\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n statement.namespaceName.range,\r\n internalName\r\n );\r\n return;\r\n }\r\n\r\n // resolve right away if the exact filespace exists\r\n let filespace = this.elementsLookup.get(statement.internalPath);\r\n if (filespace) {\r\n this.elementsLookup.set(internalName, filespace);\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n let queuedImport = new QueuedImport();\r\n queuedImport.localName = internalName;\r\n let externalName = FILESPACE_PREFIX + statement.internalPath;\r\n queuedImport.externalName = externalName;\r\n queuedImport.externalNameAlt = externalName + PATH_DELIMITER + \"index\";\r\n queuedImport.declaration = null; // filespace\r\n queuedImports.push(queuedImport);\r\n }\r\n }\r\n\r\n private initializeImport(\r\n declaration: ImportDeclaration,\r\n internalPath: string,\r\n queuedNamedExports: Map,\r\n queuedImports: QueuedImport[]\r\n ): void {\r\n var localName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(localName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, localName\r\n );\r\n return;\r\n }\r\n\r\n var externalName = internalPath + PATH_DELIMITER + declaration.externalName.text;\r\n\r\n // resolve right away if the exact export exists\r\n var element: Element | null;\r\n if (element = this.fileLevelExports.get(externalName)) {\r\n this.elementsLookup.set(localName, element);\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n const indexPart = PATH_DELIMITER + \"index\";\r\n var queuedImport = new QueuedImport();\r\n queuedImport.localName = localName;\r\n if (internalPath.endsWith(indexPart)) {\r\n queuedImport.externalName = externalName; // try exact first\r\n queuedImport.externalNameAlt = (\r\n internalPath.substring(0, internalPath.length - indexPart.length + 1) +\r\n declaration.externalName.text\r\n );\r\n } else {\r\n queuedImport.externalName = externalName; // try exact first\r\n queuedImport.externalNameAlt = (\r\n internalPath +\r\n indexPart +\r\n PATH_DELIMITER +\r\n declaration.externalName.text\r\n );\r\n }\r\n queuedImport.declaration = declaration; // named\r\n queuedImports.push(queuedImport);\r\n }\r\n\r\n private initializeInterface(declaration: InterfaceDeclaration, namespace: Element | null = null): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var simpleName = declaration.name.text;\r\n var prototype = new InterfacePrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n decorators\r\n ? this.checkDecorators(decorators, DecoratorFlags.GLOBAL)\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(prototype.internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(prototype.internalName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (prototype.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, prototype);\r\n this.currentFilespace.members.set(simpleName, prototype);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element: prototype,\r\n identifier: declaration.name\r\n });\r\n }\r\n }\r\n\r\n var memberDeclarations = declaration.members;\r\n for (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n\r\n case NodeKind.FIELDDECLARATION: {\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n }\r\n case NodeKind.METHODDECLARATION: {\r\n if (memberDeclaration.isAny(CommonFlags.GET | CommonFlags.SET)) {\r\n this.initializeAccessor(memberDeclaration, prototype);\r\n } else {\r\n this.initializeMethod(memberDeclaration, prototype);\r\n }\r\n break;\r\n }\r\n default: {\r\n throw new Error(\"interface member expected\");\r\n }\r\n }\r\n }\r\n\r\n this.checkGlobal(prototype, declaration);\r\n }\r\n\r\n private initializeNamespace(\r\n declaration: NamespaceDeclaration,\r\n queuedExtends: ClassPrototype[],\r\n queuedImplements: ClassPrototype[],\r\n parentNamespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n var simpleName = declaration.name.text;\r\n var namespace = this.elementsLookup.get(internalName);\r\n if (!namespace) {\r\n namespace = new Namespace(this, simpleName, internalName, declaration);\r\n namespace.parent = parentNamespace;\r\n this.elementsLookup.set(internalName, namespace);\r\n this.checkGlobal(namespace, declaration);\r\n }\r\n\r\n if (parentNamespace) {\r\n if (parentNamespace.members) {\r\n if (parentNamespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n parentNamespace.members = new Map();\r\n }\r\n parentNamespace.members.set(simpleName, namespace);\r\n if (parentNamespace.is(CommonFlags.MODULE_EXPORT) && namespace.is(CommonFlags.EXPORT)) {\r\n namespace.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (namespace.is(CommonFlags.EXPORT)) { // no parent namespace\r\n let existingExport = this.fileLevelExports.get(internalName);\r\n if (existingExport) {\r\n if (!existingExport.is(CommonFlags.EXPORT)) {\r\n this.error(\r\n DiagnosticCode.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local,\r\n declaration.name.range, namespace.internalName\r\n ); // recoverable\r\n }\r\n namespace = existingExport; // join\r\n } else {\r\n this.fileLevelExports.set(internalName, namespace);\r\n }\r\n this.currentFilespace.members.set(simpleName, namespace);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n if (existingExport.element !== namespace) { // not merged\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n this.moduleLevelExports.set(simpleName, {\r\n element: namespace,\r\n identifier: declaration.name\r\n });\r\n }\r\n namespace.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n\r\n var members = declaration.members;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n switch (members[i].kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n this.initializeClass(members[i], queuedExtends, queuedImplements, namespace);\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n this.initializeEnum(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n this.initializeFunction(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n this.initializeInterface(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n this.initializeNamespace(members[i], queuedExtends, queuedImplements, namespace);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n // this.initializeTypeAlias(members[i], namespace);\r\n // TODO: what about namespaced types?\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n members[i].range\r\n );\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n this.initializeVariables(members[i], namespace);\r\n break;\r\n }\r\n default: {\r\n throw new Error(\"namespace member expected\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n private initializeTypeAlias(declaration: TypeDeclaration, namespace: Element | null = null): void {\r\n // type aliases are program globals\r\n // TODO: what about namespaced types?\r\n var name = declaration.name.text;\r\n if (this.typesLookup.has(name) || this.typeAliases.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, name\r\n );\r\n return;\r\n }\r\n var alias = new TypeAlias();\r\n alias.typeParameters = declaration.typeParameters;\r\n alias.type = declaration.type;\r\n this.typeAliases.set(name, alias);\r\n }\r\n\r\n private initializeVariables(statement: VariableStatement, namespace: Element | null = null): void {\r\n var declarations = statement.declarations;\r\n for (let i = 0, k = declarations.length; i < k; ++i) {\r\n let declaration = declarations[i];\r\n let decorators = declaration.decorators;\r\n let internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n continue;\r\n }\r\n let simpleName = declaration.name.text;\r\n let global = new Global(\r\n this,\r\n simpleName,\r\n internalName,\r\n Type.void, // resolved later on\r\n declaration,\r\n decorators\r\n ? this.checkDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.INLINE |\r\n DecoratorFlags.EXTERNAL\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n global.parent = namespace;\r\n this.elementsLookup.set(internalName, global);\r\n\r\n if (global.hasDecorator(DecoratorFlags.INLINE) && !global.is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n assert(findDecorator(DecoratorKind.INLINE, decorators)).range, \"inline\"\r\n );\r\n }\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n continue;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, global);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && global.is(CommonFlags.EXPORT)) {\r\n global.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (global.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n } else {\r\n this.fileLevelExports.set(internalName, global);\r\n }\r\n this.currentFilespace.members.set(simpleName, global);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(simpleName)) {\r\n let existingExport = this.moduleLevelExports.get(simpleName);\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, existingExport.element.internalName\r\n );\r\n continue;\r\n }\r\n global.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(simpleName, {\r\n element: global,\r\n identifier: declaration.name\r\n });\r\n }\r\n }\r\n this.checkGlobal(global, declaration);\r\n }\r\n }\r\n}\r\n\r\n/** Indicates the specific kind of an {@link Element}. */\r\nexport enum ElementKind {\r\n /** A {@link Global}. */\r\n GLOBAL,\r\n /** A {@link Local}. */\r\n LOCAL,\r\n /** An {@link Enum}. */\r\n ENUM,\r\n /** An {@link EnumValue}. */\r\n ENUMVALUE,\r\n /** A {@link FunctionPrototype}. */\r\n FUNCTION_PROTOTYPE,\r\n /** A {@link Function}. */\r\n FUNCTION,\r\n /** A {@link FunctionTarget}. */\r\n FUNCTION_TARGET,\r\n /** A {@link ClassPrototype}. */\r\n CLASS_PROTOTYPE,\r\n /** A {@link Class}. */\r\n CLASS,\r\n /** An {@link InterfacePrototype}. */\r\n INTERFACE_PROTOTYPE,\r\n /** An {@link Interface}. */\r\n INTERFACE,\r\n /** A {@link FieldPrototype}. */\r\n FIELD_PROTOTYPE,\r\n /** A {@link Field}. */\r\n FIELD,\r\n /** A {@link Property}. */\r\n PROPERTY,\r\n /** A {@link Namespace}. */\r\n NAMESPACE,\r\n /** A {@link Filespace}. */\r\n FILESPACE,\r\n}\r\n\r\nexport enum DecoratorFlags {\r\n /** No flags set. */\r\n NONE = 0,\r\n /** Is a program global. */\r\n GLOBAL = 1 << 0,\r\n /** Is a binary operator overload. */\r\n OPERATOR_BINARY = 1 << 1,\r\n /** Is a unary prefix operator overload. */\r\n OPERATOR_PREFIX = 1 << 2,\r\n /** Is a unary postfix operator overload. */\r\n OPERATOR_POSTFIX = 1 << 3,\r\n /** Is an unmanaged class. */\r\n UNMANAGED = 1 << 4,\r\n /** Is a sealed class. */\r\n SEALED = 1 << 5,\r\n /** Is always inlined. */\r\n INLINE = 1 << 6,\r\n /** Is using a different external name. */\r\n EXTERNAL = 1 << 7,\r\n /** Is a builtin. */\r\n BUILTIN = 1 << 8\r\n}\r\n\r\nexport function decoratorKindToFlag(kind: DecoratorKind): DecoratorFlags {\r\n switch (kind) {\r\n case DecoratorKind.GLOBAL: return DecoratorFlags.GLOBAL;\r\n case DecoratorKind.OPERATOR:\r\n case DecoratorKind.OPERATOR_BINARY: return DecoratorFlags.OPERATOR_BINARY;\r\n case DecoratorKind.OPERATOR_PREFIX: return DecoratorFlags.OPERATOR_PREFIX;\r\n case DecoratorKind.OPERATOR_POSTFIX: return DecoratorFlags.OPERATOR_POSTFIX;\r\n case DecoratorKind.UNMANAGED: return DecoratorFlags.UNMANAGED;\r\n case DecoratorKind.SEALED: return DecoratorFlags.SEALED;\r\n case DecoratorKind.INLINE: return DecoratorFlags.INLINE;\r\n case DecoratorKind.EXTERNAL: return DecoratorFlags.EXTERNAL;\r\n case DecoratorKind.BUILTIN: return DecoratorFlags.BUILTIN;\r\n default: return DecoratorFlags.NONE;\r\n }\r\n}\r\n\r\n/** Base class of all program elements. */\r\nexport abstract class Element {\r\n\r\n /** Specific element kind. */\r\n kind: ElementKind;\r\n /** Containing {@link Program}. */\r\n program: Program;\r\n /** Simple name. */\r\n simpleName: string;\r\n /** Internal name referring to this element. */\r\n internalName: string;\r\n /** Common flags indicating specific traits. */\r\n flags: CommonFlags = CommonFlags.NONE;\r\n /** Decorator flags indicating annotated traits. */\r\n decoratorFlags: DecoratorFlags = DecoratorFlags.NONE;\r\n /** Namespaced member elements. */\r\n members: Map | null = null;\r\n /** Parent element, if applicable. */\r\n parent: Element | null = null;\r\n\r\n /** Constructs a new element, linking it to its containing {@link Program}. */\r\n protected constructor(program: Program, simpleName: string, internalName: string) {\r\n this.program = program;\r\n this.simpleName = simpleName;\r\n this.internalName = internalName;\r\n }\r\n\r\n /** Tests if this element has a specific flag or flags. */\r\n is(flag: CommonFlags): bool { return (this.flags & flag) == flag; }\r\n /** Tests if this element has any of the specified flags. */\r\n isAny(flags: CommonFlags): bool { return (this.flags & flags) != 0; }\r\n /** Sets a specific flag or flags. */\r\n set(flag: CommonFlags): void { this.flags |= flag; }\r\n /** Tests if this element has a specific decorator flag or flags. */\r\n hasDecorator(flag: DecoratorFlags): bool { return (this.decoratorFlags & flag) == flag; }\r\n}\r\n\r\n/** A filespace representing the implicit top-level namespace of a source. */\r\nexport class Filespace extends Element {\r\n\r\n kind = ElementKind.FILESPACE;\r\n\r\n /** File members (externally visible only). */\r\n members: Map; // more specific\r\n\r\n /** Constructs a new filespace. */\r\n constructor(\r\n program: Program,\r\n source: Source\r\n ) {\r\n super(program, source.internalPath, FILESPACE_PREFIX + source.internalPath);\r\n this.members = new Map();\r\n }\r\n}\r\n\r\n/** A namespace that differs from a filespace in being user-declared with a name. */\r\nexport class Namespace extends Element {\r\n\r\n // All elements have namespace semantics. This is an explicitly declared one.\r\n kind = ElementKind.NAMESPACE;\r\n\r\n /** Declaration reference. */\r\n declaration: NamespaceDeclaration; // more specific\r\n\r\n /** Constructs a new namespace. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: NamespaceDeclaration\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n }\r\n}\r\n\r\n/** An enum. */\r\nexport class Enum extends Element {\r\n\r\n kind = ElementKind.ENUM;\r\n\r\n /** Declaration reference. */\r\n declaration: EnumDeclaration;\r\n\r\n /** Constructs a new enum. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: EnumDeclaration\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n }\r\n}\r\n\r\n/** An enum value. */\r\nexport class EnumValue extends Element {\r\n\r\n kind = ElementKind.ENUMVALUE;\r\n\r\n /** Declaration reference. */\r\n declaration: EnumValueDeclaration;\r\n /** Constant value, if applicable. */\r\n constantValue: i32 = 0;\r\n\r\n constructor(\r\n enm: Enum,\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: EnumValueDeclaration\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.parent = enm;\r\n this.declaration = declaration;\r\n }\r\n}\r\n\r\nexport const enum ConstantValueKind {\r\n NONE,\r\n INTEGER,\r\n FLOAT\r\n}\r\n\r\nexport class VariableLikeElement extends Element {\r\n\r\n // kind varies\r\n\r\n /** Declaration reference. */\r\n declaration: VariableLikeDeclarationStatement | null;\r\n /** Variable type. Is {@link Type.void} for type-inferred {@link Global}s before compilation. */\r\n type: Type;\r\n /** Constant value kind. */\r\n constantValueKind: ConstantValueKind = ConstantValueKind.NONE;\r\n /** Constant integer value, if applicable. */\r\n constantIntegerValue: I64;\r\n /** Constant float value, if applicable. */\r\n constantFloatValue: f64;\r\n\r\n protected constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n type: Type,\r\n declaration: VariableLikeDeclarationStatement | null\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.type = type;\r\n this.declaration = declaration;\r\n }\r\n\r\n withConstantIntegerValue(value: I64): this {\r\n this.constantValueKind = ConstantValueKind.INTEGER;\r\n this.constantIntegerValue = value;\r\n this.set(CommonFlags.CONST | CommonFlags.INLINED);\r\n return this;\r\n }\r\n\r\n withConstantFloatValue(value: f64): this {\r\n this.constantValueKind = ConstantValueKind.FLOAT;\r\n this.constantFloatValue = value;\r\n this.set(CommonFlags.CONST | CommonFlags.INLINED);\r\n return this;\r\n }\r\n}\r\n\r\n/** A global variable. */\r\nexport class Global extends VariableLikeElement {\r\n\r\n kind = ElementKind.GLOBAL;\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n type: Type,\r\n declaration: VariableLikeDeclarationStatement | null,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName, type, declaration);\r\n this.flags = declaration ? declaration.flags : CommonFlags.NONE;\r\n this.decoratorFlags = decoratorFlags;\r\n this.type = type; // resolved later if `void`\r\n }\r\n}\r\n\r\n/** A function parameter. */\r\nexport class Parameter {\r\n\r\n // not an Element on its own\r\n\r\n /** Parameter name. */\r\n name: string;\r\n /** Parameter type. */\r\n type: Type;\r\n /** Parameter initializer. */\r\n initializer: Expression | null;\r\n\r\n /** Constructs a new function parameter. */\r\n constructor(name: string, type: Type, initializer: Expression | null = null) {\r\n this.name = name;\r\n this.type = type;\r\n this.initializer = initializer;\r\n }\r\n}\r\n\r\n/** A function local. */\r\nexport class Local extends VariableLikeElement {\r\n\r\n kind = ElementKind.LOCAL;\r\n\r\n /** Local index. */\r\n index: i32;\r\n /** Respective scoped global, if any. */\r\n scopedGlobal: Global | null = null;\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n index: i32,\r\n type: Type,\r\n declaration: VariableLikeDeclarationStatement | null = null\r\n ) {\r\n super(program, simpleName, simpleName, type, declaration);\r\n this.index = index;\r\n }\r\n}\r\n\r\n/** A yet unresolved function prototype. */\r\nexport class FunctionPrototype extends Element {\r\n\r\n kind = ElementKind.FUNCTION_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: FunctionDeclaration;\r\n /** If an instance method, the class prototype reference. */\r\n classPrototype: ClassPrototype | null;\r\n /** Resolved instances. */\r\n instances: Map = new Map();\r\n /** Class type arguments, if a partially resolved method of a generic class. Not set otherwise. */\r\n classTypeArguments: Type[] | null = null;\r\n /** Operator kind, if an overload. */\r\n operatorKind: OperatorKind = OperatorKind.INVALID;\r\n\r\n /** Constructs a new function prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FunctionDeclaration,\r\n classPrototype: ClassPrototype | null = null,\r\n decoratorFlags: DecoratorFlags = DecoratorFlags.NONE\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n this.classPrototype = classPrototype;\r\n this.decoratorFlags = decoratorFlags;\r\n }\r\n\r\n toString(): string { return this.simpleName; }\r\n}\r\n\r\n/** A resolved function. */\r\nexport class Function extends Element {\r\n\r\n kind = ElementKind.FUNCTION;\r\n\r\n /** Prototype reference. */\r\n prototype: FunctionPrototype;\r\n /** Function signature. */\r\n signature: Signature;\r\n /** Map of locals by name. */\r\n localsByName: Map = new Map();\r\n /** Array of locals by index. */\r\n localsByIndex: Local[] = [];\r\n /** List of additional non-parameter locals. */\r\n additionalLocals: Type[] = [];\r\n /** Current break context label. */\r\n breakContext: string | null = null;\r\n /** Contextual type arguments. */\r\n contextualTypeArguments: Map | null;\r\n /** Current control flow. */\r\n flow: Flow;\r\n /** Remembered debug locations. */\r\n debugLocations: Range[] = [];\r\n /** Function reference, if compiled. */\r\n ref: FunctionRef = 0;\r\n /** Function table index, if any. */\r\n functionTableIndex: i32 = -1;\r\n /** Trampoline function for calling with omitted arguments. */\r\n trampoline: Function | null = null;\r\n /** The outer scope, if a function expression. */\r\n outerScope: Flow | null = null;\r\n\r\n private nextBreakId: i32 = 0;\r\n private breakStack: i32[] | null = null;\r\n nextInlineId: i32 = 0;\r\n\r\n /** Constructs a new concrete function. */\r\n constructor(\r\n prototype: FunctionPrototype,\r\n internalName: string,\r\n signature: Signature,\r\n parent: Element | null = null,\r\n contextualTypeArguments: Map | null = null\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName);\r\n this.prototype = prototype;\r\n this.signature = signature;\r\n this.parent = parent;\r\n this.flags = prototype.flags;\r\n this.decoratorFlags = prototype.decoratorFlags;\r\n this.contextualTypeArguments = contextualTypeArguments;\r\n if (!(prototype.is(CommonFlags.AMBIENT))) {\r\n let localIndex = 0;\r\n if (parent && parent.kind == ElementKind.CLASS) {\r\n assert(this.is(CommonFlags.INSTANCE));\r\n let local = new Local(\r\n prototype.program,\r\n \"this\",\r\n localIndex++,\r\n assert(signature.thisType)\r\n );\r\n this.localsByName.set(\"this\", local);\r\n this.localsByIndex[local.index] = local;\r\n let inheritedTypeArguments = (parent).contextualTypeArguments;\r\n if (inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments.has(inheritedName)) {\r\n this.contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n }\r\n } else {\r\n assert(!this.is(CommonFlags.INSTANCE)); // internal error\r\n }\r\n let parameterTypes = signature.parameterTypes;\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) {\r\n let parameterType = parameterTypes[i];\r\n let parameterName = signature.getParameterName(i);\r\n let local = new Local(\r\n prototype.program,\r\n parameterName,\r\n localIndex++,\r\n parameterType\r\n // FIXME: declaration?\r\n );\r\n this.localsByName.set(parameterName, local);\r\n this.localsByIndex[local.index] = local;\r\n }\r\n }\r\n this.flow = Flow.create(this);\r\n }\r\n\r\n /** Adds a local of the specified type, with an optional name. */\r\n addLocal(type: Type, name: string | null = null, declaration: VariableDeclaration | null = null): Local {\r\n // if it has a name, check previously as this method will throw otherwise\r\n var localIndex = this.signature.parameterTypes.length + this.additionalLocals.length;\r\n if (this.is(CommonFlags.INSTANCE)) ++localIndex;\r\n var local = new Local(\r\n this.prototype.program,\r\n name\r\n ? name\r\n : \"var$\" + localIndex.toString(10),\r\n localIndex,\r\n type,\r\n declaration\r\n );\r\n if (name) {\r\n if (this.localsByName.has(name)) throw new Error(\"duplicate local name\");\r\n this.localsByName.set(name, local);\r\n }\r\n this.localsByIndex[local.index] = local;\r\n this.additionalLocals.push(type);\r\n return local;\r\n }\r\n\r\n private tempI32s: Local[] | null = null;\r\n private tempI64s: Local[] | null = null;\r\n private tempF32s: Local[] | null = null;\r\n private tempF64s: Local[] | null = null;\r\n\r\n /** Gets a free temporary local of the specified type. */\r\n getTempLocal(type: Type, wrapped: bool = false): Local {\r\n var temps: Local[] | null;\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s;\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps && temps.length) {\r\n local = temps.pop();\r\n local.type = type;\r\n local.flags = CommonFlags.NONE;\r\n } else {\r\n local = this.addLocal(type);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\r\n return local;\r\n }\r\n\r\n /** Frees the temporary local for reuse. */\r\n freeTempLocal(local: Local): void {\r\n if (local.is(CommonFlags.INLINED)) return;\r\n assert(local.index >= 0);\r\n var temps: Local[];\r\n assert(local.type != null); // internal error\r\n switch ((local.type).toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n assert(local.index >= 0);\r\n temps.push(local);\r\n }\r\n\r\n /** Gets and immediately frees a temporary local of the specified type. */\r\n getAndFreeTempLocal(type: Type, wrapped: bool): Local {\r\n var temps: Local[];\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps.length) {\r\n local = temps[temps.length - 1];\r\n local.type = type;\r\n } else {\r\n local = this.addLocal(type);\r\n temps.push(local);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\r\n return local;\r\n }\r\n\r\n /** Enters a(nother) break context. */\r\n enterBreakContext(): string {\r\n var id = this.nextBreakId++;\r\n if (!this.breakStack) this.breakStack = [ id ];\r\n else this.breakStack.push(id);\r\n return this.breakContext = id.toString(10);\r\n }\r\n\r\n /** Leaves the current break context. */\r\n leaveBreakContext(): void {\r\n assert(this.breakStack != null);\r\n var length = (this.breakStack).length;\r\n assert(length > 0);\r\n (this.breakStack).pop();\r\n if (length > 1) {\r\n this.breakContext = (this.breakStack)[length - 2].toString(10);\r\n } else {\r\n this.breakContext = null;\r\n this.breakStack = null;\r\n }\r\n }\r\n\r\n /** Finalizes the function once compiled, releasing no longer needed resources. */\r\n finalize(module: Module, ref: FunctionRef): void {\r\n this.ref = ref;\r\n assert(!this.breakStack || !this.breakStack.length); // internal error\r\n this.breakStack = null;\r\n this.breakContext = null;\r\n this.tempI32s = this.tempI64s = this.tempF32s = this.tempF64s = null;\r\n if (this.program.options.sourceMap) {\r\n let debugLocations = this.debugLocations;\r\n for (let i = 0, k = debugLocations.length; i < k; ++i) {\r\n let debugLocation = debugLocations[i];\r\n module.setDebugLocation(\r\n ref,\r\n debugLocation.debugInfoRef,\r\n debugLocation.source.debugInfoIndex,\r\n debugLocation.line,\r\n debugLocation.column\r\n );\r\n }\r\n }\r\n }\r\n\r\n /** Returns the TypeScript representation of this function. */\r\n toString(): string { return this.prototype.simpleName; }\r\n}\r\n\r\n/** A resolved function target, that is a function called indirectly by an index and signature. */\r\nexport class FunctionTarget extends Element {\r\n\r\n kind = ElementKind.FUNCTION_TARGET;\r\n\r\n /** Underlying signature. */\r\n signature: Signature;\r\n /** Function type. */\r\n type: Type;\r\n\r\n /** Constructs a new function target. */\r\n constructor(program: Program, signature: Signature) {\r\n super(program, \"\", \"\");\r\n var simpleName = signature.toSignatureString();\r\n this.simpleName = simpleName;\r\n this.internalName = simpleName;\r\n this.signature = signature;\r\n this.type = Type.u32.asFunction(signature);\r\n }\r\n}\r\n\r\n/** A yet unresolved instance field prototype. */\r\nexport class FieldPrototype extends Element {\r\n\r\n kind = ElementKind.FIELD_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: FieldDeclaration;\r\n /** Parent class prototype. */\r\n classPrototype: ClassPrototype;\r\n\r\n /** Constructs a new field prototype. */\r\n constructor(\r\n classPrototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FieldDeclaration\r\n ) {\r\n super(classPrototype.program, simpleName, internalName);\r\n this.classPrototype = classPrototype;\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n }\r\n}\r\n\r\n/** A resolved instance field. */\r\nexport class Field extends VariableLikeElement {\r\n\r\n kind = ElementKind.FIELD;\r\n\r\n /** Field prototype reference. */\r\n prototype: FieldPrototype;\r\n /** Field memory offset, if an instance field. */\r\n memoryOffset: i32 = -1;\r\n\r\n /** Constructs a new field. */\r\n constructor(\r\n prototype: FieldPrototype,\r\n internalName: string,\r\n type: Type,\r\n declaration: FieldDeclaration,\r\n parent: Class\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName, type, declaration);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.type = type;\r\n this.parent = parent;\r\n }\r\n}\r\n\r\n/** A property comprised of a getter and a setter function. */\r\nexport class Property extends Element {\r\n\r\n kind = ElementKind.PROPERTY;\r\n\r\n /** Parent class prototype. */\r\n parent: ClassPrototype;\r\n /** Getter prototype. */\r\n getterPrototype: FunctionPrototype | null = null;\r\n /** Setter prototype. */\r\n setterPrototype: FunctionPrototype | null = null;\r\n\r\n /** Constructs a new property prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n parent: ClassPrototype\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.parent = parent;\r\n }\r\n}\r\n\r\n/** A yet unresolved class prototype. */\r\nexport class ClassPrototype extends Element {\r\n\r\n kind = ElementKind.CLASS_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: ClassDeclaration;\r\n /** Resolved instances. */\r\n instances: Map = new Map();\r\n /** Instance member prototypes. */\r\n instanceMembers: Map | null = null;\r\n /** Base class prototype, if applicable. */\r\n basePrototype: ClassPrototype | null = null; // set in Program#initialize\r\n /** Constructor prototype. */\r\n constructorPrototype: FunctionPrototype | null = null;\r\n /** Operator overload prototypes. */\r\n overloadPrototypes: Map = new Map();\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: ClassDeclaration,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n this.decoratorFlags = decoratorFlags;\r\n }\r\n\r\n toString(): string {\r\n return this.simpleName;\r\n }\r\n}\r\n\r\n/** A resolved class. */\r\nexport class Class extends Element {\r\n\r\n kind = ElementKind.CLASS;\r\n\r\n /** Prototype reference. */\r\n prototype: ClassPrototype;\r\n /** Resolved type arguments. */\r\n typeArguments: Type[] | null;\r\n /** Resolved class type. */\r\n type: Type;\r\n /** Base class, if applicable. */\r\n base: Class | null;\r\n /** Contextual type arguments for fields and methods. */\r\n contextualTypeArguments: Map | null = null;\r\n /** Current member memory offset. */\r\n currentMemoryOffset: u32 = 0;\r\n /** Constructor instance. */\r\n constructorInstance: Function | null = null;\r\n /** Operator overloads. */\r\n overloads: Map | null = null;\r\n /** Function index of the GC hook. */\r\n gcHookIndex: u32 = -1;\r\n\r\n /** Constructs a new class. */\r\n constructor(\r\n prototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n typeArguments: Type[] | null = null,\r\n base: Class | null = null\r\n ) {\r\n super(prototype.program, simpleName, internalName);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.decoratorFlags = prototype.decoratorFlags;\r\n this.typeArguments = typeArguments;\r\n this.type = prototype.program.options.usizeType.asClass(this);\r\n this.base = base;\r\n\r\n // inherit static members and contextual type arguments from base class\r\n if (base) {\r\n let inheritedTypeArguments = base.contextualTypeArguments;\r\n if (inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [baseName, baseType] of inheritedTypeArguments) {\r\n this.contextualTypeArguments.set(baseName, baseType);\r\n }\r\n }\r\n }\r\n\r\n // apply instance-specific contextual type arguments\r\n var declaration = this.prototype.declaration;\r\n var i: i32, k: i32;\r\n if (declaration) { // irrelevant for built-ins\r\n let typeParameters = declaration.typeParameters;\r\n if (typeArguments) {\r\n if ((k = typeArguments.length) != typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n if (k) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (i = 0; i < k; ++i) {\r\n this.contextualTypeArguments.set(typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n }\r\n } else if (typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n }\r\n }\r\n\r\n /** Tests if a value of this class type is assignable to a target of the specified class type. */\r\n isAssignableTo(target: Class): bool {\r\n var current: Class | null = this;\r\n do if (current == target) return true;\r\n while (current = current.base);\r\n return false;\r\n }\r\n\r\n /** Looks up the operator overload of the specified kind. */\r\n lookupOverload(kind: OperatorKind, unchecked: bool = false): Function | null {\r\n if (unchecked) {\r\n switch (kind) {\r\n case OperatorKind.INDEXED_GET: {\r\n let uncheckedOverload = this.lookupOverload(OperatorKind.UNCHECKED_INDEXED_GET);\r\n if (uncheckedOverload) return uncheckedOverload;\r\n break;\r\n }\r\n case OperatorKind.INDEXED_SET: {\r\n let uncheckedOverload = this.lookupOverload(OperatorKind.UNCHECKED_INDEXED_SET);\r\n if (uncheckedOverload) return uncheckedOverload;\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n var instance: Class | null = this;\r\n do {\r\n let overloads = instance.overloads;\r\n if (overloads) {\r\n let overload = overloads.get(kind);\r\n if (overload) return overload;\r\n }\r\n } while (instance = instance.base);\r\n return null;\r\n }\r\n\r\n offsetof(fieldName: string): u32 {\r\n var members = assert(this.members);\r\n assert(members.has(fieldName));\r\n var field = members.get(fieldName);\r\n assert(field.kind == ElementKind.FIELD);\r\n return (field).memoryOffset;\r\n }\r\n\r\n toString(): string {\r\n return this.simpleName;\r\n }\r\n}\r\n\r\n/** A yet unresolved interface. */\r\nexport class InterfacePrototype extends ClassPrototype {\r\n\r\n kind = ElementKind.INTERFACE_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: InterfaceDeclaration; // more specific\r\n\r\n /** Constructs a new interface prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: InterfaceDeclaration,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName, declaration, decoratorFlags);\r\n }\r\n}\r\n\r\n/** A resolved interface. */\r\nexport class Interface extends Class {\r\n\r\n kind = ElementKind.INTERFACE;\r\n\r\n /** Prototype reference. */\r\n prototype: InterfacePrototype; // more specific\r\n /** Base interface, if applcable. */\r\n base: Interface | null; // more specific\r\n\r\n /** Constructs a new interface. */\r\n constructor(\r\n prototype: InterfacePrototype,\r\n simpleName: string,\r\n internalName: string,\r\n typeArguments: Type[] = [],\r\n base: Interface | null = null\r\n ) {\r\n super(prototype, simpleName, internalName, typeArguments, base);\r\n }\r\n}\r\n\r\n/** Control flow flags indicating specific conditions. */\r\nexport const enum FlowFlags {\r\n /** No specific conditions. */\r\n NONE = 0,\r\n\r\n // categorical\r\n\r\n /** This branch always returns. */\r\n RETURNS = 1 << 0,\r\n /** This branch always returns a wrapped value. */\r\n RETURNS_WRAPPED = 1 << 1,\r\n /** This branch always throws. */\r\n THROWS = 1 << 2,\r\n /** This branch always breaks. */\r\n BREAKS = 1 << 3,\r\n /** This branch always continues. */\r\n CONTINUES = 1 << 4,\r\n /** This branch always allocates. Constructors only. */\r\n ALLOCATES = 1 << 5,\r\n\r\n // conditional\r\n\r\n /** This branch conditionally returns in a child branch. */\r\n CONDITIONALLY_RETURNS = 1 << 6,\r\n /** This branch conditionally throws in a child branch. */\r\n CONDITIONALLY_THROWS = 1 << 7,\r\n /** This branch conditionally breaks in a child branch. */\r\n CONDITIONALLY_BREAKS = 1 << 8,\r\n /** This branch conditionally continues in a child branch. */\r\n CONDITIONALLY_CONTINUES = 1 << 9,\r\n /** This branch conditionally allocates in a child branch. Constructors only. */\r\n CONDITIONALLY_ALLOCATES = 1 << 10,\r\n\r\n // special\r\n\r\n /** This branch is part of inlining a function. */\r\n INLINE_CONTEXT = 1 << 11,\r\n /** This branch explicitly requests no bounds checking. */\r\n UNCHECKED_CONTEXT = 1 << 12,\r\n\r\n // masks\r\n\r\n /** Any terminating flag. */\r\n ANY_TERMINATING = FlowFlags.RETURNS\r\n | FlowFlags.THROWS\r\n | FlowFlags.BREAKS\r\n | FlowFlags.CONTINUES,\r\n\r\n /** Any categorical flag. */\r\n ANY_CATEGORICAL = FlowFlags.RETURNS\r\n | FlowFlags.RETURNS_WRAPPED\r\n | FlowFlags.THROWS\r\n | FlowFlags.BREAKS\r\n | FlowFlags.CONTINUES\r\n | FlowFlags.ALLOCATES,\r\n\r\n /** Any conditional flag. */\r\n ANY_CONDITIONAL = FlowFlags.CONDITIONALLY_RETURNS\r\n | FlowFlags.CONDITIONALLY_THROWS\r\n | FlowFlags.CONDITIONALLY_BREAKS\r\n | FlowFlags.CONDITIONALLY_CONTINUES\r\n | FlowFlags.CONDITIONALLY_ALLOCATES\r\n}\r\n\r\n/** A control flow evaluator. */\r\nexport class Flow {\r\n\r\n /** Parent flow. */\r\n parent: Flow | null;\r\n /** Flow flags indicating specific conditions. */\r\n flags: FlowFlags;\r\n /** Function this flow belongs to. */\r\n currentFunction: Function;\r\n /** The label we break to when encountering a continue statement. */\r\n continueLabel: string | null;\r\n /** The label we break to when encountering a break statement. */\r\n breakLabel: string | null;\r\n /** The label we break to when encountering a return statement, when inlining. */\r\n returnLabel: string | null;\r\n /** The current return type. */\r\n returnType: Type;\r\n /** The current contextual type arguments. */\r\n contextualTypeArguments: Map | null;\r\n /** Scoped local variables. */\r\n scopedLocals: Map | null = null;\r\n /** Local variable wrap states for the first 64 locals. */\r\n wrappedLocals: I64;\r\n /** Local variable wrap states for locals with index >= 64. */\r\n wrappedLocalsExt: I64[] | null;\r\n\r\n /** Creates the parent flow of the specified function. */\r\n static create(currentFunction: Function): Flow {\r\n var parentFlow = new Flow();\r\n parentFlow.parent = null;\r\n parentFlow.flags = FlowFlags.NONE;\r\n parentFlow.currentFunction = currentFunction;\r\n parentFlow.continueLabel = null;\r\n parentFlow.breakLabel = null;\r\n parentFlow.returnLabel = null;\r\n parentFlow.returnType = currentFunction.signature.returnType;\r\n parentFlow.contextualTypeArguments = currentFunction.contextualTypeArguments;\r\n parentFlow.wrappedLocals = i64_new(0);\r\n parentFlow.wrappedLocalsExt = null;\r\n return parentFlow;\r\n }\r\n\r\n private constructor() { }\r\n\r\n /** Tests if this flow has the specified flag or flags. */\r\n is(flag: FlowFlags): bool { return (this.flags & flag) == flag; }\r\n /** Tests if this flow has one of the specified flags. */\r\n isAny(flag: FlowFlags): bool { return (this.flags & flag) != 0; }\r\n /** Sets the specified flag or flags. */\r\n set(flag: FlowFlags): void { this.flags |= flag; }\r\n /** Unsets the specified flag or flags. */\r\n unset(flag: FlowFlags): void { this.flags &= ~flag; }\r\n\r\n /** Forks this flow to a child flow. */\r\n fork(): Flow {\r\n var branch = new Flow();\r\n branch.parent = this;\r\n branch.flags = this.flags;\r\n branch.currentFunction = this.currentFunction;\r\n branch.continueLabel = this.continueLabel;\r\n branch.breakLabel = this.breakLabel;\r\n branch.returnLabel = this.returnLabel;\r\n branch.returnType = this.returnType;\r\n branch.contextualTypeArguments = this.contextualTypeArguments;\r\n branch.wrappedLocals = this.wrappedLocals;\r\n branch.wrappedLocalsExt = this.wrappedLocalsExt ? this.wrappedLocalsExt.slice() : null;\r\n return branch;\r\n }\r\n\r\n /** Frees this flow's scoped variables. */\r\n free(): Flow {\r\n var parent = assert(this.parent);\r\n if (this.scopedLocals) { // free block-scoped locals\r\n for (let scopedLocal of this.scopedLocals.values()) {\r\n if (scopedLocal.is(CommonFlags.SCOPED)) { // otherwise an alias\r\n this.currentFunction.freeTempLocal(scopedLocal);\r\n }\r\n }\r\n this.scopedLocals = null;\r\n }\r\n return parent;\r\n }\r\n\r\n /** Adds a new scoped local of the specified name. */\r\n addScopedLocal(type: Type, name: string, wrapped: bool, declaration?: VariableDeclaration): Local {\r\n var scopedLocal = this.currentFunction.getTempLocal(type, false);\r\n if (!this.scopedLocals) this.scopedLocals = new Map();\r\n else {\r\n let existingLocal = this.scopedLocals.get(name);\r\n if (existingLocal) {\r\n if (declaration) {\r\n this.currentFunction.program.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range\r\n );\r\n } else assert(false);\r\n return existingLocal;\r\n }\r\n }\r\n scopedLocal.set(CommonFlags.SCOPED);\r\n this.scopedLocals.set(name, scopedLocal);\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.setLocalWrapped(scopedLocal.index, wrapped);\r\n }\r\n return scopedLocal;\r\n }\r\n\r\n /** Adds a new scoped alias for the specified local. */\r\n addScopedLocalAlias(index: i32, type: Type, name: string): Local {\r\n if (!this.scopedLocals) this.scopedLocals = new Map();\r\n else {\r\n let existingLocal = this.scopedLocals.get(name);\r\n if (existingLocal) {\r\n let declaration = existingLocal.declaration;\r\n if (declaration) {\r\n this.currentFunction.program.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range\r\n );\r\n } else assert(false);\r\n return existingLocal;\r\n }\r\n }\r\n assert(index < this.currentFunction.localsByIndex.length);\r\n var scopedAlias = new Local( // not SCOPED as an indicator that it isn't automatically free'd\r\n this.currentFunction.program,\r\n name,\r\n index,\r\n type,\r\n null\r\n );\r\n this.scopedLocals.set(name, scopedAlias);\r\n return scopedAlias;\r\n }\r\n\r\n /** Gets the local of the specified name in the current scope. */\r\n getScopedLocal(name: string): Local | null {\r\n var local: Local | null;\r\n var current: Flow | null = this;\r\n do {\r\n if (current.scopedLocals && (local = current.scopedLocals.get(name))) {\r\n return local;\r\n }\r\n } while (current = current.parent);\r\n return this.currentFunction.localsByName.get(name);\r\n }\r\n\r\n /** Tests if the local with the specified index is considered wrapped. */\r\n isLocalWrapped(index: i32): bool {\r\n var map: I64;\r\n var ext: I64[] | null;\r\n if (index < 64) {\r\n if (index < 0) return true; // inlined constant\r\n map = this.wrappedLocals;\r\n } else if (ext = this.wrappedLocalsExt) {\r\n let i = ((index - 64) / 64) | 0;\r\n if (i >= ext.length) return false;\r\n map = ext[i];\r\n index -= (i + 1) * 64;\r\n } else {\r\n return false;\r\n }\r\n return i64_ne(\r\n i64_and(\r\n map,\r\n i64_shl(\r\n i64_one,\r\n i64_new(index)\r\n )\r\n ),\r\n i64_zero\r\n );\r\n }\r\n\r\n /** Sets if the local with the specified index is considered wrapped. */\r\n setLocalWrapped(index: i32, wrapped: bool): void {\r\n var map: I64;\r\n var off: i32 = -1;\r\n if (index < 64) {\r\n if (index < 0) return; // inlined constant\r\n map = this.wrappedLocals;\r\n } else {\r\n let ext = this.wrappedLocalsExt;\r\n off = ((index - 64) / 64) | 0;\r\n if (!ext) {\r\n this.wrappedLocalsExt = ext = new Array(off + 1);\r\n ext.length = 0;\r\n }\r\n while (ext.length <= off) ext.push(i64_new(0));\r\n map = ext[off];\r\n index -= (off + 1) * 64;\r\n }\r\n map = wrapped\r\n ? i64_or(\r\n map,\r\n i64_shl(\r\n i64_one,\r\n i64_new(index)\r\n )\r\n )\r\n : i64_and(\r\n map,\r\n i64_not(\r\n i64_shl(\r\n i64_one,\r\n i64_new(index)\r\n )\r\n )\r\n );\r\n if (off >= 0) (this.wrappedLocalsExt)[off] = map;\r\n else this.wrappedLocals = map;\r\n }\r\n\r\n /** Inherits flags and local wrap states from the specified flow (e.g. blocks). */\r\n inherit(other: Flow): void {\r\n this.flags |= other.flags & (FlowFlags.ANY_CATEGORICAL | FlowFlags.ANY_CONDITIONAL);\r\n this.wrappedLocals = other.wrappedLocals;\r\n this.wrappedLocalsExt = other.wrappedLocalsExt; // no need to slice because other flow is finished\r\n }\r\n\r\n /** Inherits categorical flags as conditional flags from the specified flow (e.g. then without else). */\r\n inheritConditional(other: Flow): void {\r\n if (other.is(FlowFlags.RETURNS)) {\r\n this.set(FlowFlags.CONDITIONALLY_RETURNS);\r\n }\r\n if (other.is(FlowFlags.THROWS)) {\r\n this.set(FlowFlags.CONDITIONALLY_THROWS);\r\n }\r\n if (other.is(FlowFlags.BREAKS) && other.breakLabel == this.breakLabel) {\r\n this.set(FlowFlags.CONDITIONALLY_BREAKS);\r\n }\r\n if (other.is(FlowFlags.CONTINUES) && other.continueLabel == this.continueLabel) {\r\n this.set(FlowFlags.CONDITIONALLY_CONTINUES);\r\n }\r\n if (other.is(FlowFlags.ALLOCATES)) {\r\n this.set(FlowFlags.CONDITIONALLY_ALLOCATES);\r\n }\r\n }\r\n\r\n /** Inherits mutual flags and local wrap states from the specified flows (e.g. then with else). */\r\n inheritMutual(left: Flow, right: Flow): void {\r\n // categorical flags set in both arms\r\n this.flags |= left.flags & right.flags & FlowFlags.ANY_CATEGORICAL;\r\n\r\n // conditional flags set in at least one arm\r\n this.flags |= left.flags & FlowFlags.ANY_CONDITIONAL;\r\n this.flags |= right.flags & FlowFlags.ANY_CONDITIONAL;\r\n\r\n // locals wrapped in both arms\r\n this.wrappedLocals = i64_and(left.wrappedLocals, right.wrappedLocals);\r\n var leftExt = left.wrappedLocalsExt;\r\n var rightExt = right.wrappedLocalsExt;\r\n if (leftExt != null && rightExt != null) {\r\n let thisExt = this.wrappedLocalsExt;\r\n let minLength = min(leftExt.length, rightExt.length);\r\n if (minLength) {\r\n if (!thisExt) thisExt = new Array(minLength);\r\n else while (thisExt.length < minLength) thisExt.push(i64_new(0));\r\n for (let i = 0; i < minLength; ++i) {\r\n thisExt[i] = i64_and(\r\n leftExt[i],\r\n rightExt[i]\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Tests if an expression can possibly overflow in the context of this flow. Assumes that the\r\n * expression might already have overflown and returns `false` only if the operation neglects\r\n * any possibly combination of garbage bits being present.\r\n */\r\n canOverflow(expr: ExpressionRef, type: Type): bool {\r\n // TODO: the following catches most common and a few uncommon cases, but there are additional\r\n // opportunities here, obviously.\r\n assert(type != Type.void);\r\n\r\n // types other than i8, u8, i16, u16 and bool do not overflow\r\n if (!type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) return false;\r\n\r\n var operand: ExpressionRef;\r\n switch (getExpressionId(expr)) {\r\n\r\n // overflows if the local isn't wrapped or the conversion does\r\n case ExpressionId.GetLocal: {\r\n let currentFunction = this.currentFunction;\r\n let local = currentFunction.localsByIndex[getGetLocalIndex(expr)];\r\n return !currentFunction.flow.isLocalWrapped(local.index)\r\n || canConversionOverflow(local.type, type);\r\n }\r\n\r\n // overflows if the value does\r\n case ExpressionId.SetLocal: {\r\n assert(isTeeLocal(expr));\r\n return this.canOverflow(getSetLocalValue(expr), type);\r\n }\r\n\r\n // never overflows because globals are wrapped on set\r\n case ExpressionId.GetGlobal: return false;\r\n\r\n case ExpressionId.Binary: {\r\n switch (getBinaryOp(expr)) {\r\n\r\n // comparisons do not overflow (result is 0 or 1)\r\n case BinaryOp.EqI32:\r\n case BinaryOp.EqI64:\r\n case BinaryOp.EqF32:\r\n case BinaryOp.EqF64:\r\n case BinaryOp.NeI32:\r\n case BinaryOp.NeI64:\r\n case BinaryOp.NeF32:\r\n case BinaryOp.NeF64:\r\n case BinaryOp.LtI32:\r\n case BinaryOp.LtU32:\r\n case BinaryOp.LtI64:\r\n case BinaryOp.LtU64:\r\n case BinaryOp.LtF32:\r\n case BinaryOp.LtF64:\r\n case BinaryOp.LeI32:\r\n case BinaryOp.LeU32:\r\n case BinaryOp.LeI64:\r\n case BinaryOp.LeU64:\r\n case BinaryOp.LeF32:\r\n case BinaryOp.LeF64:\r\n case BinaryOp.GtI32:\r\n case BinaryOp.GtU32:\r\n case BinaryOp.GtI64:\r\n case BinaryOp.GtU64:\r\n case BinaryOp.GtF32:\r\n case BinaryOp.GtF64:\r\n case BinaryOp.GeI32:\r\n case BinaryOp.GeU32:\r\n case BinaryOp.GeI64:\r\n case BinaryOp.GeU64:\r\n case BinaryOp.GeF32:\r\n case BinaryOp.GeF64: return false;\r\n\r\n // result won't overflow if one side is 0 or if one side is 1 and the other wrapped\r\n case BinaryOp.MulI32: {\r\n return !(\r\n (\r\n getExpressionId(operand = getBinaryLeft(expr)) == ExpressionId.Const &&\r\n (\r\n getConstValueI32(operand) == 0 ||\r\n (\r\n getConstValueI32(operand) == 1 &&\r\n !this.canOverflow(getBinaryRight(expr), type)\r\n )\r\n )\r\n ) || (\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n (\r\n getConstValueI32(operand) == 0 ||\r\n (\r\n getConstValueI32(operand) == 1 &&\r\n !this.canOverflow(getBinaryLeft(expr), type)\r\n )\r\n )\r\n )\r\n );\r\n }\r\n\r\n // result won't overflow if one side is a constant less than this type's mask or one side\r\n // is wrapped\r\n case BinaryOp.AndI32: {\r\n // note that computeSmallIntegerMask returns the mask minus the MSB for signed types\r\n // because signed value garbage bits must be guaranteed to be equal to the MSB.\r\n return !(\r\n (\r\n (\r\n getExpressionId(operand = getBinaryLeft(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) <= type.computeSmallIntegerMask(Type.i32)\r\n ) || !this.canOverflow(operand, type)\r\n ) || (\r\n (\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) <= type.computeSmallIntegerMask(Type.i32)\r\n ) || !this.canOverflow(operand, type)\r\n )\r\n );\r\n }\r\n\r\n // overflows if the shift doesn't clear potential garbage bits\r\n case BinaryOp.ShlI32: {\r\n let shift = 32 - type.size;\r\n return getExpressionId(operand = getBinaryRight(expr)) != ExpressionId.Const\r\n || getConstValueI32(operand) < shift;\r\n }\r\n\r\n // overflows if the value does and the shift doesn't clear potential garbage bits\r\n case BinaryOp.ShrI32: {\r\n let shift = 32 - type.size;\r\n return this.canOverflow(getBinaryLeft(expr), type) && (\r\n getExpressionId(operand = getBinaryRight(expr)) != ExpressionId.Const ||\r\n getConstValueI32(operand) < shift\r\n );\r\n }\r\n\r\n // overflows if the shift does not clear potential garbage bits. if an unsigned value is\r\n // wrapped, it can't overflow.\r\n case BinaryOp.ShrU32: {\r\n let shift = 32 - type.size;\r\n return type.is(TypeFlags.SIGNED)\r\n ? !(\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) > shift // must clear MSB\r\n )\r\n : this.canOverflow(getBinaryLeft(expr), type) && !(\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) >= shift // can leave MSB\r\n );\r\n }\r\n\r\n // overflows if any side does\r\n case BinaryOp.DivU32:\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemU32: {\r\n return this.canOverflow(getBinaryLeft(expr), type)\r\n || this.canOverflow(getBinaryRight(expr), type);\r\n }\r\n }\r\n break;\r\n }\r\n\r\n case ExpressionId.Unary: {\r\n switch (getUnaryOp(expr)) {\r\n\r\n // comparisons do not overflow (result is 0 or 1)\r\n case UnaryOp.EqzI32:\r\n case UnaryOp.EqzI64: return false;\r\n\r\n // overflow if the maximum result (32) cannot be represented in the target type\r\n case UnaryOp.ClzI32:\r\n case UnaryOp.CtzI32:\r\n case UnaryOp.PopcntI32: return type.size < 7;\r\n }\r\n break;\r\n }\r\n\r\n // overflows if the value cannot be represented in the target type\r\n case ExpressionId.Const: {\r\n let value: i32 = 0;\r\n switch (getExpressionType(expr)) {\r\n case NativeType.I32: { value = getConstValueI32(expr); break; }\r\n case NativeType.I64: { value = getConstValueI64Low(expr); break; } // discards upper bits\r\n case NativeType.F32: { value = i32(getConstValueF32(expr)); break; }\r\n case NativeType.F64: { value = i32(getConstValueF64(expr)); break; }\r\n default: assert(false);\r\n }\r\n switch (type.kind) {\r\n case TypeKind.I8: return value < i8.MIN_VALUE || value > i8.MAX_VALUE;\r\n case TypeKind.I16: return value < i16.MIN_VALUE || value > i16.MAX_VALUE;\r\n case TypeKind.U8: return value < 0 || value > u8.MAX_VALUE;\r\n case TypeKind.U16: return value < 0 || value > u16.MAX_VALUE;\r\n case TypeKind.BOOL: return (value & ~1) != 0;\r\n }\r\n break;\r\n }\r\n\r\n // overflows if the conversion does\r\n case ExpressionId.Load: {\r\n let fromType: Type;\r\n switch (getLoadBytes(expr)) {\r\n case 1: { fromType = isLoadSigned(expr) ? Type.i8 : Type.u8; break; }\r\n case 2: { fromType = isLoadSigned(expr) ? Type.i16 : Type.u16; break; }\r\n default: { fromType = isLoadSigned(expr) ? Type.i32 : Type.u32; break; }\r\n }\r\n return canConversionOverflow(fromType, type);\r\n }\r\n\r\n // overflows if the result does, which is either\r\n // - the last expression of the block, by contract, if the block doesn't have a label\r\n // - the last expression or the value of an inner br if the block has a label (TODO)\r\n case ExpressionId.Block: {\r\n if (!getBlockName(expr)) {\r\n let size = assert(getBlockChildCount(expr));\r\n let last = getBlockChild(expr, size - 1);\r\n return this.canOverflow(last, type);\r\n }\r\n // actually, brs with a value that'd be handled here is not emitted atm\r\n break;\r\n }\r\n\r\n // overflows if either side does\r\n case ExpressionId.If: {\r\n return this.canOverflow(getIfTrue(expr), type)\r\n || this.canOverflow(assert(getIfFalse(expr)), type);\r\n }\r\n\r\n // overflows if either side does\r\n case ExpressionId.Select: {\r\n return this.canOverflow(getSelectThen(expr), type)\r\n || this.canOverflow(getSelectElse(expr), type);\r\n }\r\n\r\n // overflows if the call does not return a wrapped value or the conversion does\r\n case ExpressionId.Call: {\r\n let program = this.currentFunction.program;\r\n let instance = assert(program.instancesLookup.get(assert(getCallTarget(expr))));\r\n assert(instance.kind == ElementKind.FUNCTION);\r\n let returnType = (instance).signature.returnType;\r\n return !(instance).flow.is(FlowFlags.RETURNS_WRAPPED)\r\n || canConversionOverflow(returnType, type);\r\n }\r\n\r\n // doesn't technically overflow\r\n case ExpressionId.Unreachable: return false;\r\n }\r\n return true;\r\n }\r\n\r\n /** Finalizes this flow. Must be the topmost parent flow of the function. */\r\n finalize(): void {\r\n assert(this.parent == null); // must be the topmost parent flow\r\n this.continueLabel = null;\r\n this.breakLabel = null;\r\n this.returnLabel = null;\r\n this.contextualTypeArguments = null;\r\n }\r\n}\r\n\r\n/** Tests if a conversion from one type to another can technically overflow. */\r\nfunction canConversionOverflow(fromType: Type, toType: Type): bool {\r\n var fromSize = fromType.byteSize;\r\n var toSize = toType.byteSize;\r\n return !fromType.is(TypeFlags.INTEGER) // non-i32 locals or returns\r\n || fromSize > toSize\r\n || fromType.is(TypeFlags.SIGNED) != toType.is(TypeFlags.SIGNED);\r\n}\r\n","/**\r\n * A thin wrapper around Binaryen's C-API.\r\n * @module module\r\n *//***/\r\n\r\nimport {\r\n Target\r\n} from \"./compiler\";\r\n\r\nexport type ModuleRef = usize;\r\nexport type FunctionTypeRef = usize;\r\nexport type FunctionRef = usize;\r\nexport type ExpressionRef = usize;\r\nexport type GlobalRef = usize;\r\nexport type ImportRef = usize;\r\nexport type ExportRef = usize;\r\nexport type RelooperRef = usize;\r\nexport type RelooperBlockRef = usize;\r\nexport type Index = u32;\r\n\r\nexport const enum NativeType {\r\n None = 0, // _BinaryenTypeNone(),\r\n I32 = 1, // _BinaryenTypeInt32(),\r\n I64 = 2, // _BinaryenTypeInt64(),\r\n F32 = 3, // _BinaryenTypeFloat32(),\r\n F64 = 4, // _BinaryenTypeFloat64(),\r\n Unreachable = 5, // _BinaryenTypeUnreachable(),\r\n Auto = -1 // _BinaryenTypeAuto()\r\n}\r\n\r\nexport enum ExpressionId {\r\n Invalid = _BinaryenInvalidId(),\r\n Block = _BinaryenBlockId(),\r\n If = _BinaryenIfId(),\r\n Loop = _BinaryenLoopId(),\r\n Break = _BinaryenBreakId(),\r\n Switch = _BinaryenSwitchId(),\r\n Call = _BinaryenCallId(),\r\n CallIndirect = _BinaryenCallIndirectId(),\r\n GetLocal = _BinaryenGetLocalId(),\r\n SetLocal = _BinaryenSetLocalId(),\r\n GetGlobal = _BinaryenGetGlobalId(),\r\n SetGlobal = _BinaryenSetGlobalId(),\r\n Load = _BinaryenLoadId(),\r\n Store = _BinaryenStoreId(),\r\n Const = _BinaryenConstId(),\r\n Unary = _BinaryenUnaryId(),\r\n Binary = _BinaryenBinaryId(),\r\n Select = _BinaryenSelectId(),\r\n Drop = _BinaryenDropId(),\r\n Return = _BinaryenReturnId(),\r\n Host = _BinaryenHostId(),\r\n Nop = _BinaryenNopId(),\r\n Unreachable = _BinaryenUnreachableId(),\r\n AtomicCmpxchg = _BinaryenAtomicCmpxchgId(),\r\n AtomicRMW = _BinaryenAtomicRMWId(),\r\n AtomicWait = _BinaryenAtomicWaitId(),\r\n AtomicWake = _BinaryenAtomicWakeId()\r\n}\r\n\r\nexport enum UnaryOp {\r\n ClzI32 = _BinaryenClzInt32(),\r\n CtzI32 = _BinaryenCtzInt32(),\r\n PopcntI32 = _BinaryenPopcntInt32(),\r\n NegF32 = _BinaryenNegFloat32(),\r\n AbsF32 = _BinaryenAbsFloat32(),\r\n CeilF32 = _BinaryenCeilFloat32(),\r\n FloorF32 = _BinaryenFloorFloat32(),\r\n TruncF32 = _BinaryenTruncFloat32(),\r\n NearestF32 = _BinaryenNearestFloat32(),\r\n SqrtF32 = _BinaryenSqrtFloat32(),\r\n EqzI32 = _BinaryenEqZInt32(),\r\n ClzI64 = _BinaryenClzInt64(),\r\n CtzI64 = _BinaryenCtzInt64(),\r\n PopcntI64 = _BinaryenPopcntInt64(),\r\n NegF64 = _BinaryenNegFloat64(),\r\n AbsF64 = _BinaryenAbsFloat64(),\r\n CeilF64 = _BinaryenCeilFloat64(),\r\n FloorF64 = _BinaryenFloorFloat64(),\r\n TruncF64 = _BinaryenTruncFloat64(),\r\n NearestF64 = _BinaryenNearestFloat64(),\r\n SqrtF64 = _BinaryenSqrtFloat64(),\r\n EqzI64 = _BinaryenEqZInt64(),\r\n ExtendI32 = _BinaryenExtendSInt32(),\r\n ExtendU32 = _BinaryenExtendUInt32(),\r\n WrapI64 = _BinaryenWrapInt64(),\r\n TruncF32ToI32 = _BinaryenTruncSFloat32ToInt32(),\r\n TruncF32ToI64 = _BinaryenTruncSFloat32ToInt64(),\r\n TruncF32ToU32 = _BinaryenTruncUFloat32ToInt32(),\r\n TruncF32ToU64 = _BinaryenTruncUFloat32ToInt64(),\r\n TruncF64ToI32 = _BinaryenTruncSFloat64ToInt32(),\r\n TruncF64ToI64 = _BinaryenTruncSFloat64ToInt64(),\r\n TruncF64ToU32 = _BinaryenTruncUFloat64ToInt32(),\r\n TruncF64ToU64 = _BinaryenTruncUFloat64ToInt64(),\r\n ReinterpretF32 = _BinaryenReinterpretFloat32(),\r\n ReinterpretF64 = _BinaryenReinterpretFloat64(),\r\n ConvertI32ToF32 = _BinaryenConvertSInt32ToFloat32(),\r\n ConvertI32ToF64 = _BinaryenConvertSInt32ToFloat64(),\r\n ConvertU32ToF32 = _BinaryenConvertUInt32ToFloat32(),\r\n ConvertU32ToF64 = _BinaryenConvertUInt32ToFloat64(),\r\n ConvertI64ToF32 = _BinaryenConvertSInt64ToFloat32(),\r\n ConvertI64ToF64 = _BinaryenConvertSInt64ToFloat64(),\r\n ConvertU64ToF32 = _BinaryenConvertUInt64ToFloat32(),\r\n ConvertU64ToF64 = _BinaryenConvertUInt64ToFloat64(),\r\n PromoteF32 = _BinaryenPromoteFloat32(),\r\n DemoteF64 = _BinaryenDemoteFloat64(),\r\n ReinterpretI32 = _BinaryenReinterpretInt32(),\r\n ReinterpretI64 = _BinaryenReinterpretInt64(),\r\n\r\n // see: https://github.com/WebAssembly/sign-extension-ops\r\n ExtendI8ToI32 = _BinaryenExtendS8Int32(),\r\n ExtendI16ToI32 = _BinaryenExtendS16Int32(),\r\n ExtendI8ToI64 = _BinaryenExtendS8Int64(),\r\n ExtendI16ToI64 = _BinaryenExtendS16Int64(),\r\n ExtendI32ToI64 = _BinaryenExtendS32Int64()\r\n\r\n // see: https://github.com/WebAssembly/nontrapping-float-to-int-conversions\r\n // TruncF32ToI32Sat\r\n // TruncF32ToU32Sat\r\n // TruncF64ToI32Sat\r\n // TruncF64ToU32Sat\r\n // TruncF32ToI64Sat\r\n // TruncF32ToU64Sat\r\n // TruncF64ToI64Sat\r\n // TruncF64ToU64Sat\r\n}\r\n\r\nexport enum BinaryOp {\r\n AddI32 = _BinaryenAddInt32(),\r\n SubI32 = _BinaryenSubInt32(),\r\n MulI32 = _BinaryenMulInt32(),\r\n DivI32 = _BinaryenDivSInt32(),\r\n DivU32 = _BinaryenDivUInt32(),\r\n RemI32 = _BinaryenRemSInt32(),\r\n RemU32 = _BinaryenRemUInt32(),\r\n AndI32 = _BinaryenAndInt32(),\r\n OrI32 = _BinaryenOrInt32(),\r\n XorI32 = _BinaryenXorInt32(),\r\n ShlI32 = _BinaryenShlInt32(),\r\n ShrU32 = _BinaryenShrUInt32(),\r\n ShrI32 = _BinaryenShrSInt32(),\r\n RotlI32 = _BinaryenRotLInt32(),\r\n RotrI32 = _BinaryenRotRInt32(),\r\n EqI32 = _BinaryenEqInt32(),\r\n NeI32 = _BinaryenNeInt32(),\r\n LtI32 = _BinaryenLtSInt32(),\r\n LtU32 = _BinaryenLtUInt32(),\r\n LeI32 = _BinaryenLeSInt32(),\r\n LeU32 = _BinaryenLeUInt32(),\r\n GtI32 = _BinaryenGtSInt32(),\r\n GtU32 = _BinaryenGtUInt32(),\r\n GeI32 = _BinaryenGeSInt32(),\r\n GeU32 = _BinaryenGeUInt32(),\r\n AddI64 = _BinaryenAddInt64(),\r\n SubI64 = _BinaryenSubInt64(),\r\n MulI64 = _BinaryenMulInt64(),\r\n DivI64 = _BinaryenDivSInt64(),\r\n DivU64 = _BinaryenDivUInt64(),\r\n RemI64 = _BinaryenRemSInt64(),\r\n RemU64 = _BinaryenRemUInt64(),\r\n AndI64 = _BinaryenAndInt64(),\r\n OrI64 = _BinaryenOrInt64(),\r\n XorI64 = _BinaryenXorInt64(),\r\n ShlI64 = _BinaryenShlInt64(),\r\n ShrU64 = _BinaryenShrUInt64(),\r\n ShrI64 = _BinaryenShrSInt64(),\r\n RotlI64 = _BinaryenRotLInt64(),\r\n RotrI64 = _BinaryenRotRInt64(),\r\n EqI64 = _BinaryenEqInt64(),\r\n NeI64 = _BinaryenNeInt64(),\r\n LtI64 = _BinaryenLtSInt64(),\r\n LtU64 = _BinaryenLtUInt64(),\r\n LeI64 = _BinaryenLeSInt64(),\r\n LeU64 = _BinaryenLeUInt64(),\r\n GtI64 = _BinaryenGtSInt64(),\r\n GtU64 = _BinaryenGtUInt64(),\r\n GeI64 = _BinaryenGeSInt64(),\r\n GeU64 = _BinaryenGeUInt64(),\r\n AddF32 = _BinaryenAddFloat32(),\r\n SubF32 = _BinaryenSubFloat32(),\r\n MulF32 = _BinaryenMulFloat32(),\r\n DivF32 = _BinaryenDivFloat32(),\r\n CopysignF32 = _BinaryenCopySignFloat32(),\r\n MinF32 = _BinaryenMinFloat32(),\r\n MaxF32 = _BinaryenMaxFloat32(),\r\n EqF32 = _BinaryenEqFloat32(),\r\n NeF32 = _BinaryenNeFloat32(),\r\n LtF32 = _BinaryenLtFloat32(),\r\n LeF32 = _BinaryenLeFloat32(),\r\n GtF32 = _BinaryenGtFloat32(),\r\n GeF32 = _BinaryenGeFloat32(),\r\n AddF64 = _BinaryenAddFloat64(),\r\n SubF64 = _BinaryenSubFloat64(),\r\n MulF64 = _BinaryenMulFloat64(),\r\n DivF64 = _BinaryenDivFloat64(),\r\n CopysignF64 = _BinaryenCopySignFloat64(),\r\n MinF64 = _BinaryenMinFloat64(),\r\n MaxF64 = _BinaryenMaxFloat64(),\r\n EqF64 = _BinaryenEqFloat64(),\r\n NeF64 = _BinaryenNeFloat64(),\r\n LtF64 = _BinaryenLtFloat64(),\r\n LeF64 = _BinaryenLeFloat64(),\r\n GtF64 = _BinaryenGtFloat64(),\r\n GeF64 = _BinaryenGeFloat64()\r\n}\r\n\r\nexport enum HostOp {\r\n CurrentMemory = _BinaryenCurrentMemory(),\r\n GrowMemory = _BinaryenGrowMemory(),\r\n\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n // MoveMemory\r\n // SetMemory\r\n}\r\n\r\nexport enum AtomicRMWOp {\r\n Add = _BinaryenAtomicRMWAdd(),\r\n Sub = _BinaryenAtomicRMWSub(),\r\n And = _BinaryenAtomicRMWAnd(),\r\n Or = _BinaryenAtomicRMWOr(),\r\n Xor = _BinaryenAtomicRMWXor(),\r\n Xchg = _BinaryenAtomicRMWXchg()\r\n}\r\n\r\nexport class MemorySegment {\r\n\r\n buffer: Uint8Array;\r\n offset: I64;\r\n\r\n static create(buffer: Uint8Array, offset: I64): MemorySegment {\r\n var segment = new MemorySegment();\r\n segment.buffer = buffer;\r\n segment.offset = offset;\r\n return segment;\r\n }\r\n}\r\n\r\nexport class Module {\r\n\r\n ref: ModuleRef;\r\n\r\n private cachedByValue: usize;\r\n\r\n static create(): Module {\r\n var module = new Module();\r\n module.ref = _BinaryenModuleCreate();\r\n module.cachedByValue = memory.allocate(16);\r\n return module;\r\n }\r\n\r\n static createFrom(buffer: Uint8Array): Module {\r\n var cArr = allocU8Array(buffer);\r\n try {\r\n let module = new Module();\r\n module.ref = _BinaryenModuleRead(cArr, buffer.length);\r\n module.cachedByValue = memory.allocate(3 * 8); // LLVM C-ABI, max used is 3 * usize\r\n return module;\r\n } finally {\r\n memory.free(changetype(cArr));\r\n }\r\n }\r\n\r\n private constructor() { }\r\n\r\n // types\r\n\r\n addFunctionType(\r\n name: string,\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenAddFunctionType(this.ref, cStr, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n getFunctionTypeBySignature(\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionTypeRef {\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenGetFunctionTypeBySignature(this.ref, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n removeFunctionType(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunctionType(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n // constants\r\n\r\n createI32(value: i32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createI64(valueLow: i32, valueHigh: i32 = 0): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt64(out, valueLow, valueHigh);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF32(value: f32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF64(value: f64): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat64(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n // expressions\r\n\r\n createUnary(\r\n op: UnaryOp,\r\n expr: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenUnary(this.ref, op, expr);\r\n }\r\n\r\n createBinary(\r\n op: BinaryOp,\r\n left: ExpressionRef,\r\n right: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenBinary(this.ref, op, left, right);\r\n }\r\n\r\n createHost(\r\n op: HostOp,\r\n name: string | null = null,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenHost(this.ref, op, cStr, cArr, operands ? (operands).length : 0);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createGetLocal(\r\n index: i32,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenGetLocal(this.ref, index, type);\r\n }\r\n\r\n createTeeLocal(\r\n index: i32,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenTeeLocal(this.ref, index, value);\r\n }\r\n\r\n createGetGlobal(\r\n name: string,\r\n type: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenGetGlobal(this.ref, cStr, type);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createLoad(\r\n bytes: Index,\r\n signed: bool,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenLoad(this.ref, bytes, signed ? 1 : 0, offset, /* always aligned */ bytes, type, ptr);\r\n }\r\n\r\n createStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenStore(this.ref, bytes, offset, /* always aligned */ bytes, ptr, value, type);\r\n }\r\n\r\n createAtomicLoad(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicLoad(this.ref, bytes, offset, type, ptr);\r\n }\r\n\r\n createAtomicStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicStore(this.ref, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicRMW(\r\n op: AtomicRMWOp,\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicRMW(this.ref, op, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicCmpxchg(\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n replacement: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicCmpxchg(this.ref, bytes, offset, ptr, expected, replacement, type);\r\n }\r\n\r\n createAtomicWait(\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n timeout: ExpressionRef,\r\n expectedType: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWait(this.ref, ptr, expected, timeout, expectedType);\r\n }\r\n\r\n createAtomicWake(\r\n ptr: ExpressionRef,\r\n wakeCount: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWake(this.ref, ptr, wakeCount);\r\n }\r\n\r\n // statements\r\n\r\n createSetLocal(\r\n index: Index,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSetLocal(this.ref, index, value);\r\n }\r\n\r\n createSetGlobal(\r\n name: string,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenSetGlobal(this.ref, cStr, value);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createBlock(\r\n label: string | null,\r\n children: ExpressionRef[],\r\n type: NativeType = NativeType.None\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n var cArr = allocPtrArray(children);\r\n try {\r\n return _BinaryenBlock(this.ref, cStr, cArr, children.length, type);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createBreak(\r\n label: string | null,\r\n condition: ExpressionRef = 0,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenBreak(this.ref, cStr, condition, value);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createDrop(\r\n expression: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenDrop(this.ref, expression);\r\n }\r\n\r\n createLoop(\r\n label: string | null,\r\n body: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenLoop(this.ref, cStr, body);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createIf(\r\n condition: ExpressionRef,\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenIf(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createNop(): ExpressionRef {\r\n return _BinaryenNop(this.ref);\r\n }\r\n\r\n createReturn(\r\n expression: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenReturn(this.ref, expression);\r\n }\r\n\r\n createSelect(\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef,\r\n condition: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSelect(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createSwitch(\r\n names: string[],\r\n defaultName: string | null,\r\n condition: ExpressionRef,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numNames = names.length;\r\n var strs = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n strs[i] = allocString(names[i]);\r\n }\r\n var cArr = allocI32Array(strs);\r\n var cStr = allocString(defaultName);\r\n try {\r\n return _BinaryenSwitch(this.ref, cArr, numNames, cStr, condition, value);\r\n } finally {\r\n memory.free(cStr);\r\n memory.free(cArr);\r\n for (let i = numNames - 1; i >= 0; --i) memory.free(strs[i]);\r\n }\r\n }\r\n\r\n createCall(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenCall(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createCallIndirect(\r\n index: ExpressionRef,\r\n operands: ExpressionRef[] | null,\r\n typeName: string\r\n ): ExpressionRef {\r\n var cArr = allocPtrArray(operands);\r\n var cStr = allocString(typeName);\r\n try {\r\n return _BinaryenCallIndirect(this.ref, index, cArr, operands && operands.length || 0, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n createUnreachable(): ExpressionRef {\r\n return _BinaryenUnreachable(this.ref);\r\n }\r\n\r\n // meta\r\n\r\n addGlobal(\r\n name: string,\r\n type: NativeType,\r\n mutable: bool,\r\n initializer: ExpressionRef\r\n ): GlobalRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenAddGlobal(this.ref, cStr, type, mutable ? 1 : 0, initializer);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n removeGlobal(\r\n name: string\r\n ): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveGlobal(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n addFunction(\r\n name: string,\r\n type: FunctionTypeRef,\r\n varTypes: NativeType[] | null,\r\n body: ExpressionRef\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(varTypes);\r\n try {\r\n return _BinaryenAddFunction(this.ref, cStr, type, cArr, varTypes ? varTypes.length : 0, body);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n removeFunction(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunction(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n private cachedTemporaryName: usize = 0;\r\n private hasTemporaryFunction: bool = false;\r\n\r\n addTemporaryFunction(result: NativeType, paramTypes: NativeType[] | null, body: ExpressionRef): FunctionRef {\r\n this.hasTemporaryFunction = assert(!this.hasTemporaryFunction);\r\n var tempName = this.cachedTemporaryName;\r\n if (!tempName) this.cachedTemporaryName = tempName = allocString(\"\"); // works because strings are interned\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n let typeRef = _BinaryenAddFunctionType(this.ref, tempName, result, cArr, paramTypes ? paramTypes.length : 0);\r\n return _BinaryenAddFunction(this.ref, tempName, typeRef, 0, 0, body);\r\n } finally {\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n removeTemporaryFunction(): void {\r\n this.hasTemporaryFunction = !assert(this.hasTemporaryFunction);\r\n var tempName = assert(this.cachedTemporaryName);\r\n _BinaryenRemoveFunction(this.ref, tempName);\r\n _BinaryenRemoveFunctionType(this.ref, tempName);\r\n }\r\n\r\n addFunctionExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddFunctionExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addTableExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddTableExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addMemoryExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddMemoryExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addGlobalExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddGlobalExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n removeExport(externalName: string): void {\r\n var cStr = allocString(externalName);\r\n try {\r\n _BinaryenRemoveExport(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n addFunctionImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n functionType: FunctionTypeRef\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddFunctionImport(this.ref, cStr1, cStr2, cStr3, functionType);\r\n } finally {\r\n memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addTableImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddTableImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addMemoryImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddMemoryImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addGlobalImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n globalType: NativeType\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddGlobalImport(this.ref, cStr1, cStr2, cStr3, globalType);\r\n } finally {\r\n memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n /** Unlimited memory constant. */\r\n static readonly UNLIMITED_MEMORY: Index = -1;\r\n\r\n setMemory(\r\n initial: Index,\r\n maximum: Index,\r\n segments: MemorySegment[],\r\n target: Target,\r\n exportName: string | null = null\r\n ): void {\r\n var cStr = allocString(exportName);\r\n var k = segments.length;\r\n var segs = new Array(k);\r\n var offs = new Array(k);\r\n var sizs = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let buffer = segments[i].buffer;\r\n let offset = segments[i].offset;\r\n segs[i] = allocU8Array(buffer);\r\n offs[i] = target == Target.WASM64\r\n ? this.createI64(i64_low(offset), i64_high(offset))\r\n : this.createI32(i64_low(offset));\r\n sizs[i] = buffer.length;\r\n }\r\n var cArr1 = allocI32Array(segs);\r\n var cArr2 = allocI32Array(offs);\r\n var cArr3 = allocI32Array(sizs);\r\n try {\r\n _BinaryenSetMemory(this.ref, initial, maximum, cStr, cArr1, cArr2, cArr3, k);\r\n } finally {\r\n memory.free(cArr3);\r\n memory.free(cArr2);\r\n memory.free(cArr1);\r\n for (let i = k - 1; i >= 0; --i) memory.free(segs[i]);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n setFunctionTable(\r\n initial: Index,\r\n maximum: Index,\r\n funcs: string[]\r\n ): void {\r\n var numNames = funcs.length;\r\n var names = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n names[i] = allocString(funcs[i]);\r\n }\r\n var cArr = allocI32Array(names);\r\n try {\r\n _BinaryenSetFunctionTable(this.ref, initial, maximum, cArr, numNames);\r\n } finally {\r\n memory.free(cArr);\r\n for (let i = numNames; i >= 0; --i) memory.free(names[i]);\r\n }\r\n }\r\n\r\n setStart(func: FunctionRef): void {\r\n _BinaryenSetStart(this.ref, func);\r\n }\r\n\r\n getOptimizeLevel(): i32 {\r\n return _BinaryenGetOptimizeLevel();\r\n }\r\n\r\n setOptimizeLevel(level: i32 = 2): void {\r\n _BinaryenSetOptimizeLevel(level);\r\n }\r\n\r\n getShrinkLevel(): i32 {\r\n return _BinaryenGetShrinkLevel();\r\n }\r\n\r\n setShrinkLevel(level: i32 = 1): void {\r\n _BinaryenSetShrinkLevel(level);\r\n }\r\n\r\n setDebugInfo(on: bool = false): void {\r\n _BinaryenSetDebugInfo(on);\r\n }\r\n\r\n optimize(func: FunctionRef = 0): void {\r\n if (func) {\r\n _BinaryenFunctionOptimize(func, this.ref);\r\n } else {\r\n _BinaryenModuleOptimize(this.ref);\r\n }\r\n }\r\n\r\n runPasses(passes: string[], func: FunctionRef = 0): void {\r\n var numNames = passes.length;\r\n var names = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n names[i] = allocString(passes[i]);\r\n }\r\n var cArr = allocI32Array(names);\r\n try {\r\n if (func) {\r\n _BinaryenFunctionRunPasses(func, this.ref, cArr, numNames);\r\n } else {\r\n _BinaryenModuleRunPasses(this.ref, cArr, numNames);\r\n }\r\n } finally {\r\n memory.free(cArr);\r\n for (let i = numNames; i >= 0; --i) memory.free(names[i]);\r\n }\r\n }\r\n\r\n private cachedPrecomputeName: usize = 0; // for free'ing\r\n private cachedPrecomputeNames: usize = 0;\r\n\r\n precomputeExpression(expr: ExpressionRef): ExpressionRef {\r\n // remember the previous optimize levels and set to max instead, to be sure\r\n var previousOptimizeLevel = _BinaryenGetOptimizeLevel();\r\n var previousShrinkLevel = _BinaryenGetShrinkLevel();\r\n var previousDebugInfo = _BinaryenGetDebugInfo();\r\n _BinaryenSetOptimizeLevel(4);\r\n _BinaryenSetShrinkLevel(0);\r\n _BinaryenSetDebugInfo(false);\r\n\r\n // wrap the expression in a temp. function and run the precompute pass on it\r\n var type = _BinaryenExpressionGetType(expr);\r\n var func = this.addTemporaryFunction(type, null, expr);\r\n var names = this.cachedPrecomputeNames;\r\n if (!names) {\r\n let name = allocString(\"precompute\");\r\n this.cachedPrecomputeName = name;\r\n this.cachedPrecomputeNames = names = allocI32Array([ name ]);\r\n }\r\n _BinaryenFunctionRunPasses(func, this.ref, names, 1);\r\n expr = _BinaryenFunctionGetBody(func);\r\n this.removeTemporaryFunction();\r\n\r\n // reset optimize levels to previous\r\n _BinaryenSetOptimizeLevel(previousOptimizeLevel);\r\n _BinaryenSetShrinkLevel(previousShrinkLevel);\r\n _BinaryenSetDebugInfo(previousDebugInfo);\r\n return expr;\r\n }\r\n\r\n validate(): bool {\r\n return _BinaryenModuleValidate(this.ref) == 1;\r\n }\r\n\r\n interpret(): void {\r\n _BinaryenModuleInterpret(this.ref);\r\n }\r\n\r\n toBinary(sourceMapUrl: string | null): BinaryModule {\r\n var out = this.cachedByValue;\r\n var cStr = allocString(sourceMapUrl);\r\n var binaryPtr: usize = 0;\r\n var sourceMapPtr: usize = 0;\r\n try {\r\n _BinaryenModuleAllocateAndWrite(out, this.ref, cStr);\r\n binaryPtr = readInt(out);\r\n let binaryBytes = readInt(out + 4);\r\n sourceMapPtr = readInt(out + 4 * 2);\r\n let ret = new BinaryModule();\r\n ret.output = readBuffer(binaryPtr, binaryBytes);\r\n ret.sourceMap = readString(sourceMapPtr);\r\n return ret;\r\n } finally {\r\n if (cStr) memory.free(cStr);\r\n if (binaryPtr) memory.free(binaryPtr);\r\n if (sourceMapPtr) memory.free(sourceMapPtr);\r\n }\r\n }\r\n\r\n toText(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n toAsmjs(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n dispose(): void {\r\n assert(this.ref);\r\n memory.free(this.cachedByValue);\r\n memory.free(this.cachedTemporaryName);\r\n memory.free(this.cachedPrecomputeName);\r\n memory.free(this.cachedPrecomputeNames);\r\n _BinaryenModuleDispose(this.ref);\r\n this.ref = 0;\r\n }\r\n\r\n createRelooper(): Relooper {\r\n return Relooper.create(this);\r\n }\r\n\r\n cloneExpression(\r\n expr: ExpressionRef,\r\n noSideEffects: bool = false,\r\n maxDepth: i32 = i32.MAX_VALUE\r\n ): ExpressionRef { // currently supports side effect free expressions only\r\n if (maxDepth < 0) return 0;\r\n maxDepth -= 1;\r\n\r\n var nested1: ExpressionRef,\r\n nested2: ExpressionRef;\r\n\r\n switch (_BinaryenExpressionGetId(expr)) {\r\n case ExpressionId.Const: {\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32: {\r\n return this.createI32(_BinaryenConstGetValueI32(expr));\r\n }\r\n case NativeType.I64: {\r\n return this.createI64(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n }\r\n case NativeType.F32: {\r\n return this.createF32(_BinaryenConstGetValueF32(expr));\r\n }\r\n case NativeType.F64: {\r\n return this.createF64(_BinaryenConstGetValueF64(expr));\r\n }\r\n default: {\r\n throw new Error(\"concrete type expected\");\r\n }\r\n }\r\n }\r\n case ExpressionId.GetLocal: {\r\n return _BinaryenGetLocal(this.ref,\r\n _BinaryenGetLocalGetIndex(expr),\r\n _BinaryenExpressionGetType(expr)\r\n );\r\n }\r\n case ExpressionId.GetGlobal: {\r\n let globalName = _BinaryenGetGlobalGetName(expr);\r\n if (!globalName) break;\r\n return _BinaryenGetGlobal(this.ref, globalName, _BinaryenExpressionGetType(expr));\r\n }\r\n case ExpressionId.Load: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenLoadGetPtr(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return (\r\n _BinaryenLoadIsAtomic(expr)\r\n ? _BinaryenAtomicLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n : _BinaryenLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadIsSigned(expr) ? 1 : 0,\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenLoadGetAlign(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n );\r\n }\r\n case ExpressionId.Unary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenUnaryGetValue(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenUnary(this.ref, _BinaryenUnaryGetOp(expr), nested1);\r\n }\r\n case ExpressionId.Binary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenBinaryGetLeft(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n if (!(nested2 = this.cloneExpression(_BinaryenBinaryGetRight(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenBinary(this.ref, _BinaryenBinaryGetOp(expr), nested1, nested2);\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n // source map generation\r\n\r\n addDebugInfoFile(name: string): Index {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenModuleAddDebugInfoFileName(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n getDebugInfoFile(index: Index): string | null {\r\n return readString(_BinaryenModuleGetDebugInfoFileName(this.ref, index));\r\n }\r\n\r\n setDebugLocation(\r\n func: FunctionRef,\r\n expr: ExpressionRef,\r\n fileIndex: Index,\r\n lineNumber: Index,\r\n columnNumber: Index\r\n ): void {\r\n _BinaryenFunctionSetDebugLocation(func, expr, fileIndex, lineNumber, columnNumber);\r\n }\r\n}\r\n\r\n// expressions\r\n\r\nexport function getExpressionId(expr: ExpressionRef): ExpressionId {\r\n return _BinaryenExpressionGetId(expr);\r\n}\r\n\r\nexport function getExpressionType(expr: ExpressionRef): NativeType {\r\n return _BinaryenExpressionGetType(expr);\r\n}\r\n\r\nexport function getConstValueI32(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI32(expr);\r\n}\r\n\r\nexport function getConstValueI64Low(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64Low(expr);\r\n}\r\n\r\nexport function getConstValueI64High(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64High(expr);\r\n}\r\n\r\nexport function getConstValueF32(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF32(expr);\r\n}\r\n\r\nexport function getConstValueF64(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF64(expr);\r\n}\r\n\r\nexport function getGetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenGetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenSetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSetLocalGetValue(expr);\r\n}\r\n\r\nexport function isTeeLocal(expr: ExpressionRef): bool {\r\n return _BinaryenSetLocalIsTee(expr);\r\n}\r\n\r\nexport function getBinaryOp(expr: ExpressionRef): BinaryOp {\r\n return _BinaryenBinaryGetOp(expr);\r\n}\r\n\r\nexport function getBinaryLeft(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetLeft(expr);\r\n}\r\n\r\nexport function getBinaryRight(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetRight(expr);\r\n}\r\n\r\nexport function getUnaryOp(expr: ExpressionRef): UnaryOp {\r\n return _BinaryenUnaryGetOp(expr);\r\n}\r\n\r\nexport function getUnaryValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenUnaryGetValue(expr);\r\n}\r\n\r\nexport function getLoadBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetBytes(expr);\r\n}\r\n\r\nexport function getLoadOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetOffset(expr);\r\n}\r\n\r\nexport function getLoadPtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoadGetPtr(expr);\r\n}\r\n\r\nexport function isLoadSigned(expr: ExpressionRef): bool {\r\n return _BinaryenLoadIsSigned(expr);\r\n}\r\n\r\nexport function getStoreBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetBytes(expr);\r\n}\r\n\r\nexport function getStoreOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetOffset(expr);\r\n}\r\n\r\nexport function getStorePtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetPtr(expr);\r\n}\r\n\r\nexport function getStoreValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetValue(expr);\r\n}\r\n\r\nexport function getBlockName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBlockGetName(expr));\r\n}\r\n\r\nexport function getBlockChildCount(expr: ExpressionRef): Index {\r\n return _BinaryenBlockGetNumChildren(expr);\r\n}\r\n\r\nexport function getBlockChild(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenBlockGetChild(expr, index);\r\n}\r\n\r\nexport function getIfCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetCondition(expr);\r\n}\r\n\r\nexport function getIfTrue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfTrue(expr);\r\n}\r\n\r\nexport function getIfFalse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfFalse(expr);\r\n}\r\n\r\nexport function getLoopName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenLoopGetName(expr));\r\n}\r\n\r\nexport function getLoopBody(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoopGetBody(expr);\r\n}\r\n\r\nexport function getBreakName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBreakGetName(expr));\r\n}\r\n\r\nexport function getBreakCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBreakGetCondition(expr);\r\n}\r\n\r\nexport function getSelectThen(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfTrue(expr);\r\n}\r\n\r\nexport function getSelectElse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfFalse(expr);\r\n}\r\n\r\nexport function getSelectCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetCondition(expr);\r\n}\r\n\r\nexport function getDropValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenDropGetValue(expr);\r\n}\r\n\r\nexport function getReturnValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenReturnGetValue(expr);\r\n}\r\n\r\nexport function getCallTarget(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenCallGetTarget(expr));\r\n}\r\n\r\nexport function getHostOp(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenHostGetOp(expr);\r\n}\r\n\r\nexport function getHostOperandCount(expr: ExpressionRef): Index {\r\n return _BinaryenHostGetNumOperands(expr);\r\n}\r\n\r\nexport function getHostOperand(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenHostGetOperand(expr, index);\r\n}\r\n\r\nexport function getHostName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenHostGetNameOperand(expr));\r\n}\r\n\r\n// functions\r\n\r\nexport function getFunctionBody(func: FunctionRef): ExpressionRef {\r\n return _BinaryenFunctionGetBody(func);\r\n}\r\n\r\nexport function getFunctionName(func: FunctionRef): string | null {\r\n return readString(_BinaryenFunctionGetName(func));\r\n}\r\n\r\nexport function getFunctionParamCount(func: FunctionRef): Index {\r\n return _BinaryenFunctionGetNumParams(func);\r\n}\r\n\r\nexport function getFunctionParamType(func: FunctionRef, index: Index): NativeType {\r\n return _BinaryenFunctionGetParam(func, index);\r\n}\r\n\r\nexport function getFunctionResultType(func: FunctionRef): NativeType {\r\n return _BinaryenFunctionGetResult(func);\r\n}\r\n\r\nexport class Relooper {\r\n\r\n module: Module;\r\n ref: RelooperRef;\r\n\r\n static create(module: Module): Relooper {\r\n var relooper = new Relooper();\r\n relooper.module = module;\r\n relooper.ref = _RelooperCreate(module.ref);\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(\r\n from: RelooperBlockRef,\r\n to: RelooperBlockRef,\r\n condition: ExpressionRef = 0,\r\n code: ExpressionRef = 0\r\n ): 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(\r\n from: RelooperBlockRef,\r\n to: RelooperBlockRef,\r\n indexes: i32[],\r\n code: ExpressionRef = 0\r\n ): void {\r\n var cArr = allocI32Array(indexes);\r\n try {\r\n _RelooperAddBranchForSwitch(from, to, cArr, indexes.length, code);\r\n } finally {\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n renderAndDispose(entry: RelooperBlockRef, labelHelper: Index): ExpressionRef {\r\n return _RelooperRenderAndDispose(this.ref, entry, labelHelper);\r\n }\r\n}\r\n\r\n// export function hasSideEffects(expr: ExpressionRef): bool {\r\n// switch (_BinaryenExpressionGetId(expr = getPtr(expr))) {\r\n// case ExpressionId.GetLocal:\r\n// case ExpressionId.GetGlobal:\r\n// case ExpressionId.Const:\r\n// case ExpressionId.Nop:\r\n// case ExpressionId.Unreachable: {\r\n// return false;\r\n// }\r\n// case ExpressionId.Block: {\r\n// for (let i = 0, k = _BinaryenBlockGetNumChildren(expr); i < k; ++i) {\r\n// if (hasSideEffects(_BinaryenBlockGetChild(expr, i))) return true;\r\n// }\r\n// return false;\r\n// }\r\n// case ExpressionId.If: {\r\n// return hasSideEffects(_BinaryenIfGetCondition(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfFalse(expr));\r\n// }\r\n// case ExpressionId.Unary: {\r\n// return hasSideEffects(_BinaryenUnaryGetValue(expr));\r\n// }\r\n// case ExpressionId.Binary: {\r\n// return hasSideEffects(_BinaryenBinaryGetLeft(expr))\r\n// || hasSideEffects(_BinaryenBinaryGetRight(expr));\r\n// }\r\n// case ExpressionId.Drop: {\r\n// return hasSideEffects(_BinaryenDropGetValue(expr));\r\n// }\r\n// case ExpressionId.Select: {\r\n// return hasSideEffects(_BinaryenSelectGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenSelectGetIfFalse(expr))\r\n// || hasSideEffects(_BinaryenSelectGetCondition(expr));\r\n// }\r\n// }\r\n// return true;\r\n// }\r\n\r\n// helpers\r\n// can't do stack allocation here: STACKTOP is a global in WASM but a hidden variable in asm.js\r\n\r\nfunction allocU8Array(u8s: Uint8Array | null): usize {\r\n if (!u8s) return 0;\r\n var numValues = u8s.length;\r\n var ptr = memory.allocate(numValues);\r\n var idx = ptr;\r\n for (let i = 0; i < numValues; ++i) {\r\n store(idx++, u8s[i]);\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocI32Array(i32s: i32[] | null): usize {\r\n if (!i32s) return 0;\r\n var ptr = memory.allocate(i32s.length << 2);\r\n var idx = ptr;\r\n for (let i = 0, k = i32s.length; i < k; ++i) {\r\n let val = i32s[i];\r\n // store(idx, val) is not portable\r\n store(idx , ( val & 0xff) as u8);\r\n store(idx + 1, ((val >> 8) & 0xff) as u8);\r\n store(idx + 2, ((val >> 16) & 0xff) as u8);\r\n store(idx + 3, ( val >>> 24 ) as u8);\r\n idx += 4;\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocPtrArray(ptrs: usize[] | null): usize {\r\n return allocI32Array(ptrs); // TODO: WASM64 one day\r\n}\r\n\r\nfunction stringLengthUTF8(str: string): usize {\r\n var len = 0;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n ++len;\r\n } else if (u <= 0x7FF) {\r\n len += 2;\r\n } else if (u <= 0xFFFF) {\r\n len += 3;\r\n } else if (u <= 0x1FFFFF) {\r\n len += 4;\r\n } else if (u <= 0x3FFFFFF) {\r\n len += 5;\r\n } else {\r\n len += 6;\r\n }\r\n }\r\n return len;\r\n}\r\n\r\nfunction allocString(str: string | null): usize {\r\n if (str == null) return 0;\r\n var ptr = memory.allocate(stringLengthUTF8(str) + 1);\r\n // the following is based on Emscripten's stringToUTF8Array\r\n var idx = ptr;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n store(idx++, u as u8);\r\n } else if (u <= 0x7FF) {\r\n store(idx++, (0xC0 | (u >>> 6) ) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0xFFFF) {\r\n store(idx++, (0xE0 | (u >>> 12) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x1FFFFF) {\r\n store(idx++, (0xF0 | (u >>> 18) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x3FFFFFF) {\r\n store(idx++, (0xF8 | (u >>> 24) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else {\r\n store(idx++, (0xFC | (u >>> 30) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 24) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n }\r\n }\r\n store(idx, 0);\r\n return ptr;\r\n}\r\n\r\nfunction readInt(ptr: usize): i32 {\r\n return (\r\n load(ptr ) |\r\n (load(ptr + 1) << 8) |\r\n (load(ptr + 2) << 16) |\r\n (load(ptr + 3) << 24)\r\n );\r\n}\r\n\r\nfunction readBuffer(ptr: usize, length: usize): Uint8Array {\r\n var ret = new Uint8Array(length);\r\n for (let i: usize = 0; i < length; ++i) {\r\n ret[i] = load(ptr + i);\r\n }\r\n return ret;\r\n}\r\n\r\nexport function readString(ptr: usize): string | null {\r\n if (!ptr) return null;\r\n var arr = new Array();\r\n // the following is based on Emscripten's UTF8ArrayToString\r\n var cp: u32;\r\n var u1: u32, u2: u32, u3: u32, u4: u32, u5: u32;\r\n while (cp = load(ptr++)) {\r\n if (!(cp & 0x80)) {\r\n arr.push(cp);\r\n continue;\r\n }\r\n u1 = load(ptr++) & 63;\r\n if ((cp & 0xE0) == 0xC0) {\r\n arr.push(((cp & 31) << 6) | u1);\r\n continue;\r\n }\r\n u2 = load(ptr++) & 63;\r\n if ((cp & 0xF0) == 0xE0) {\r\n cp = ((cp & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u3 = load(ptr++) & 63;\r\n if ((cp & 0xF8) == 0xF0) {\r\n cp = ((cp & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;\r\n } else {\r\n u4 = load(ptr++) & 63;\r\n if ((cp & 0xFC) == 0xF8) {\r\n cp = ((cp & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;\r\n } else {\r\n u5 = load(ptr++) & 63;\r\n cp = ((cp & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;\r\n }\r\n }\r\n }\r\n arr.push(cp);\r\n // if (cp < 0x10000) {\r\n // arr.push(cp);\r\n // } else {\r\n // var ch = cp - 0x10000;\r\n // arr.push(0xD800 | (ch >> 10));\r\n // arr.push(0xDC00 | (ch & 0x3FF));\r\n // }\r\n }\r\n // return String.fromCharCodes(arr);\r\n return String.fromCodePoints(arr);\r\n}\r\n\r\n/** Result structure of {@link Module#toBinary}. */\r\nexport class BinaryModule {\r\n /** WebAssembly binary. */\r\n output: Uint8Array;\r\n /** Source map, if generated. */\r\n sourceMap: string | null;\r\n}\r\n\r\n/** Tests if an expression needs an explicit 'unreachable' when it is the terminating statement. */\r\nexport function needsExplicitUnreachable(expr: ExpressionRef): bool {\r\n // not applicable if pushing a value to the stack\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32:\r\n case NativeType.I64:\r\n case NativeType.F32:\r\n case NativeType.F64: return false;\r\n }\r\n switch (_BinaryenExpressionGetId(expr)) {\r\n case ExpressionId.Unreachable:\r\n case ExpressionId.Return: return false;\r\n case ExpressionId.Break: return _BinaryenBreakGetCondition(expr) != 0;\r\n case ExpressionId.Block: {\r\n if (!_BinaryenBlockGetName(expr)) { // can't break out of it\r\n let numChildren = _BinaryenBlockGetNumChildren(expr); // last child needs unreachable\r\n return numChildren > 0 && needsExplicitUnreachable(_BinaryenBlockGetChild(expr, numChildren - 1));\r\n }\r\n }\r\n }\r\n return true;\r\n}\r\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/**\r\n * Mappings from AssemblyScript types to WebAssembly types.\r\n * @module types\r\n *//***/\r\n\r\nimport {\r\n Class,\r\n FunctionTarget,\r\n Program,\r\n DecoratorFlags\r\n} from \"./program\";\r\n\r\nimport {\r\n NativeType,\r\n ExpressionRef,\r\n Module\r\n} from \"./module\";\r\n\r\n/** Indicates the kind of a type. */\r\nexport const enum TypeKind {\r\n\r\n // signed integers\r\n\r\n /** An 8-bit signed integer. */\r\n I8,\r\n /** A 16-bit signed integer. */\r\n I16,\r\n /** A 32-bit signed integer. */\r\n I32,\r\n /** A 64-bit signed integer. */\r\n I64,\r\n /** A 32-bit/64-bit signed integer, depending on the target. */\r\n ISIZE,\r\n\r\n // unsigned integers\r\n\r\n /** An 8-bit unsigned integer. */\r\n U8,\r\n /** A 16-bit unsigned integer. */\r\n U16,\r\n /** A 32-bit unsigned integer. Also the base of function types. */\r\n U32,\r\n /** A 64-bit unsigned integer. */\r\n U64,\r\n /** A 32-bit/64-bit unsigned integer, depending on the target. Also the base of class types. */\r\n USIZE,\r\n /** A 1-bit unsigned integer. */\r\n BOOL, // sic\r\n\r\n // floats\r\n\r\n /** A 32-bit float. */\r\n F32,\r\n /** A 64-bit double. */\r\n F64,\r\n\r\n // other\r\n\r\n /** No return type. */\r\n VOID\r\n}\r\n\r\n/** Indicates capabilities of a type. */\r\nexport const enum TypeFlags {\r\n NONE = 0,\r\n /** Is a signed type that can represent negative values. */\r\n SIGNED = 1 << 0,\r\n /** Is an unsigned type that cannot represent negative values. */\r\n UNSIGNED = 1 << 1,\r\n /** Is an integer type. */\r\n INTEGER = 1 << 2,\r\n /** Is a floating point type. */\r\n FLOAT = 1 << 3,\r\n /** Is a pointer type. */\r\n POINTER = 1 << 4,\r\n /** Is smaller than 32-bits. */\r\n SHORT = 1 << 5,\r\n /** Is larger than 32-bits. */\r\n LONG = 1 << 6,\r\n /** Is a value type. */\r\n VALUE = 1 << 7,\r\n /** Is a reference type. */\r\n REFERENCE = 1 << 8,\r\n /** Is a nullable type. */\r\n NULLABLE = 1 << 9\r\n}\r\n\r\n/** Represents a resolved type. */\r\nexport class Type {\r\n\r\n /** Type kind. */\r\n kind: TypeKind;\r\n /** Type flags. */\r\n flags: TypeFlags;\r\n /** Size in bits. */\r\n size: u32;\r\n /** Size in bytes. */\r\n byteSize: i32;\r\n /** Underlying class reference, if a class type. */\r\n classReference: Class | null;\r\n /** Underlying signature reference, if a function type. */\r\n signatureReference: Signature | null;\r\n /** Respective non-nullable type, if nullable. */\r\n nonNullableType: Type;\r\n /** Cached nullable type, if non-nullable. */\r\n private cachedNullableType: Type | null = null;\r\n\r\n /** Constructs a new resolved type. */\r\n constructor(kind: TypeKind, flags: TypeFlags, size: u32) {\r\n this.kind = kind;\r\n this.flags = flags;\r\n this.size = size;\r\n this.byteSize = ceil(size / 8);\r\n this.classReference = null;\r\n this.signatureReference = null;\r\n this.nonNullableType = this;\r\n }\r\n\r\n /** Returns the closest int type representing this type. */\r\n get intType(): Type {\r\n switch (this.kind) {\r\n case TypeKind.I8: return Type.i8;\r\n case TypeKind.I16: return Type.i16;\r\n case TypeKind.F32:\r\n case TypeKind.I32: return Type.i32;\r\n case TypeKind.F64:\r\n case TypeKind.I64: return Type.i64;\r\n case TypeKind.ISIZE: return this.size == 64 ? Type.isize64 : Type.isize32;\r\n case TypeKind.U8: return Type.u8;\r\n case TypeKind.U16: return Type.u16;\r\n case TypeKind.U32: return Type.u32;\r\n case TypeKind.U64: return Type.u64;\r\n case TypeKind.USIZE: return this.size == 64 ? Type.usize64 : Type.usize32;\r\n case TypeKind.BOOL:\r\n default: return Type.i32;\r\n }\r\n }\r\n\r\n /** Tests if this is a managed type that needs GC hooks. */\r\n isManaged(program: Program): bool {\r\n if (program.hasGC) {\r\n let classReference = this.classReference;\r\n return classReference !== null && !classReference.hasDecorator(DecoratorFlags.UNMANAGED);\r\n }\r\n return false;\r\n }\r\n\r\n /** Computes the sign-extending shift in the target type. */\r\n computeSmallIntegerShift(targetType: Type): u32 {\r\n return targetType.size - this.size;\r\n }\r\n\r\n /** Computes the truncating mask in the target type. */\r\n computeSmallIntegerMask(targetType: Type): u32 {\r\n var size = this.is(TypeFlags.UNSIGNED) ? this.size : this.size - 1;\r\n return ~0 >>> (targetType.size - size);\r\n }\r\n\r\n /** Tests if this type has (all of) the specified flags. */\r\n is(flags: TypeFlags): bool { return (this.flags & flags) == flags; }\r\n /** Tests if this type has any of the specified flags. */\r\n isAny(flags: TypeFlags): bool { return (this.flags & flags) != 0; }\r\n\r\n /** Composes a class type from this type and a class. */\r\n asClass(classType: Class): Type {\r\n assert(this.kind == TypeKind.USIZE && !this.classReference);\r\n var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size);\r\n ret.classReference = classType;\r\n return ret;\r\n }\r\n\r\n /** Composes a function type from this type and a function. */\r\n asFunction(signature: Signature): Type {\r\n assert(this.kind == TypeKind.U32 && !this.signatureReference);\r\n var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size);\r\n ret.signatureReference = signature;\r\n return ret;\r\n }\r\n\r\n /** Composes the respective nullable type of this type. */\r\n asNullable(): Type {\r\n assert(this.is(TypeFlags.REFERENCE));\r\n if (!this.cachedNullableType) {\r\n assert(!this.is(TypeFlags.NULLABLE));\r\n this.cachedNullableType = new Type(this.kind, this.flags | TypeFlags.NULLABLE, this.size);\r\n this.cachedNullableType.nonNullableType = this;\r\n this.cachedNullableType.classReference = this.classReference; // either a class reference\r\n this.cachedNullableType.signatureReference = this.signatureReference; // or a function reference\r\n }\r\n return this.cachedNullableType;\r\n }\r\n\r\n /** Tests if a value of this type is assignable to a target of the specified type. */\r\n isAssignableTo(target: Type, signednessIsRelevant: bool = false): bool {\r\n var currentClass: Class | null;\r\n var targetClass: Class | null;\r\n var currentFunction: Signature | null;\r\n var targetFunction: Signature | null;\r\n if (this.is(TypeFlags.REFERENCE)) {\r\n if (target.is(TypeFlags.REFERENCE)) {\r\n if (!this.is(TypeFlags.NULLABLE) || target.is(TypeFlags.NULLABLE)) {\r\n if (currentClass = this.classReference) {\r\n if (targetClass = target.classReference) {\r\n return currentClass.isAssignableTo(targetClass);\r\n }\r\n } else if (currentFunction = this.signatureReference) {\r\n if (targetFunction = target.signatureReference) {\r\n return currentFunction.isAssignableTo(targetFunction);\r\n }\r\n }\r\n }\r\n }\r\n } else if (!target.is(TypeFlags.REFERENCE)) {\r\n if (this.is(TypeFlags.INTEGER)) {\r\n if (target.is(TypeFlags.INTEGER)) {\r\n if (\r\n !signednessIsRelevant ||\r\n this == Type.bool || // a bool (0 or 1) can be safely assigned to all sorts of integers\r\n this.is(TypeFlags.SIGNED) == target.is(TypeFlags.SIGNED)\r\n ) {\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:\r\n case Token.VOID: return true;\r\n default: return false;\r\n }\r\n}\r\n\r\nexport function operatorTokenToString(token: Token): string {\r\n switch (token) {\r\n case Token.DELETE: return \"delete\";\r\n case Token.IN: return \"in\";\r\n case Token.INSTANCEOF: return \"instanceof\";\r\n case Token.NEW: return \"new\";\r\n case Token.TYPEOF: return \"typeof\";\r\n case Token.VOID: return \"void\";\r\n case Token.YIELD: return \"yield\";\r\n case Token.DOT_DOT_DOT: return \"...\";\r\n case Token.COMMA: return \",\";\r\n case Token.LESSTHAN: return \"<\";\r\n case Token.GREATERTHAN: return \">\";\r\n case Token.LESSTHAN_EQUALS: return \"<=\";\r\n case Token.GREATERTHAN_EQUALS: return \">=\";\r\n case Token.EQUALS_EQUALS: return \"==\";\r\n case Token.EXCLAMATION_EQUALS: return \"!=\";\r\n case Token.EQUALS_EQUALS_EQUALS: return \"===\";\r\n case Token.EXCLAMATION_EQUALS_EQUALS: return \"!==\";\r\n case Token.PLUS: return \"+\";\r\n case Token.MINUS: return \"-\";\r\n case Token.ASTERISK_ASTERISK: return \"**\";\r\n case Token.ASTERISK: return \"*\";\r\n case Token.SLASH: return \"/\";\r\n case Token.PERCENT: return \"%\";\r\n case Token.PLUS_PLUS: return \"++\";\r\n case Token.MINUS_MINUS: return \"--\";\r\n case Token.LESSTHAN_LESSTHAN: return \"<<\";\r\n case Token.GREATERTHAN_GREATERTHAN: return \">>\";\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: return \">>>\";\r\n case Token.AMPERSAND: return \"&\";\r\n case Token.BAR: return \"|\";\r\n case Token.CARET: return \"^\";\r\n case Token.EXCLAMATION: return \"!\";\r\n case Token.TILDE: return \"~\";\r\n case Token.AMPERSAND_AMPERSAND: return \"&&\";\r\n case Token.BAR_BAR: return \"||\";\r\n case Token.EQUALS: return \"=\";\r\n case Token.PLUS_EQUALS: return \"+=\";\r\n case Token.MINUS_EQUALS: return \"-=\";\r\n case Token.ASTERISK_EQUALS: return \"*=\";\r\n case Token.ASTERISK_ASTERISK_EQUALS: return \"**=\";\r\n case Token.SLASH_EQUALS: return \"/=\";\r\n case Token.PERCENT_EQUALS: return \"%=\";\r\n case Token.LESSTHAN_LESSTHAN_EQUALS: return \"<<=\";\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS: return \">>=\";\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS: return \">>>=\";\r\n case Token.AMPERSAND_EQUALS: return \"&=\";\r\n case Token.BAR_EQUALS: return \"|=\";\r\n case Token.CARET_EQUALS: return \"^=\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\nexport class Range {\r\n\r\n source: Source;\r\n start: i32;\r\n end: i32;\r\n\r\n // TODO: set these while tokenizing\r\n // line: i32;\r\n // column: i32;\r\n\r\n constructor(source: Source, start: i32, end: i32) {\r\n this.source = source;\r\n this.start = start;\r\n this.end = end;\r\n }\r\n\r\n static join(a: Range, b: Range): Range {\r\n if (a.source != b.source) throw new Error(\"source mismatch\");\r\n return new Range(a.source,\r\n a.start < b.start ? a.start : b.start,\r\n a.end > b.end ? a.end : b.end\r\n );\r\n }\r\n\r\n get atStart(): Range {\r\n return new Range(this.source, this.start, this.start);\r\n }\r\n get atEnd(): Range {\r\n return new Range(this.source, this.end, this.end);\r\n }\r\n\r\n get line(): i32 {\r\n var text = this.source.text;\r\n var line = 1;\r\n for (let pos = this.start; pos >= 0; --pos) {\r\n if (text.charCodeAt(pos) == CharCode.LINEFEED) line++;\r\n }\r\n return line;\r\n }\r\n\r\n get column(): i32 {\r\n var text = this.source.text;\r\n var column = 0;\r\n for (let pos = this.start - 1; pos >= 0; --pos) {\r\n if (text.charCodeAt(pos) == CharCode.LINEFEED) break;\r\n ++column;\r\n }\r\n return column;\r\n }\r\n\r\n toString(): string {\r\n return this.source.text.substring(this.start, this.end);\r\n }\r\n\r\n debugInfoRef: usize = 0;\r\n}\r\n\r\ndeclare function parseFloat(str: string): f64;\r\n\r\n/** Handler for intercepting comments while tokenizing. */\r\nexport type CommentHandler = (kind: CommentKind, text: string, range: Range) => void;\r\n\r\n/** Tokenizes a source to individual {@link Token}s. */\r\nexport class Tokenizer extends DiagnosticEmitter {\r\n\r\n source: Source;\r\n end: i32 = 0;\r\n\r\n pos: i32 = 0;\r\n token: Token = -1;\r\n tokenPos: i32 = 0;\r\n\r\n nextToken: Token = -1;\r\n nextTokenPos: i32 = 0;\r\n nextTokenOnNewLine: bool = false;\r\n\r\n onComment: CommentHandler | null = null;\r\n\r\n /** Constructs a new tokenizer. */\r\n constructor(source: Source, diagnostics: DiagnosticMessage[] | null = null) {\r\n super(diagnostics);\r\n this.source = source;\r\n this.pos = 0;\r\n this.end = source.text.length;\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n\r\n var text = source.text;\r\n\r\n // skip bom\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.BYTEORDERMARK\r\n ) {\r\n ++this.pos;\r\n }\r\n\r\n // skip shebang\r\n if (\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.HASH &&\r\n text.charCodeAt(this.pos + 1) == CharCode.EXCLAMATION\r\n ) {\r\n this.pos += 2;\r\n while (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) != CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n // 'next' now starts at lf or eof\r\n }\r\n }\r\n\r\n next(identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT): Token {\r\n this.nextToken = -1;\r\n return this.token = this.unsafeNext(identifierHandling);\r\n }\r\n\r\n private unsafeNext(\r\n identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT,\r\n maxTokenLength: i32 = i32.MAX_VALUE\r\n ): Token {\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n this.tokenPos = this.pos;\r\n let c = text.charCodeAt(this.pos);\r\n switch (c) {\r\n case CharCode.CARRIAGERETURN: {\r\n if (!(\r\n ++this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.LINEFEED\r\n )) break;\r\n // otherwise fall-through\r\n }\r\n case CharCode.LINEFEED:\r\n case CharCode.TAB:\r\n case CharCode.VERTICALTAB:\r\n case CharCode.FORMFEED:\r\n case CharCode.SPACE: {\r\n ++this.pos;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.EXCLAMATION_EQUALS_EQUALS;\r\n }\r\n return Token.EXCLAMATION_EQUALS;\r\n }\r\n return Token.EXCLAMATION;\r\n }\r\n case CharCode.DOUBLEQUOTE:\r\n case CharCode.SINGLEQUOTE:\r\n case CharCode.BACKTICK: { // TODO\r\n return Token.STRINGLITERAL; // expects a call to readString\r\n }\r\n case CharCode.PERCENT: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.PERCENT_EQUALS;\r\n }\r\n return Token.PERCENT;\r\n }\r\n case CharCode.AMPERSAND: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.AMPERSAND) {\r\n ++this.pos;\r\n return Token.AMPERSAND_AMPERSAND;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.AMPERSAND_EQUALS;\r\n }\r\n }\r\n return Token.AMPERSAND;\r\n }\r\n case CharCode.OPENPAREN: {\r\n ++this.pos;\r\n return Token.OPENPAREN;\r\n }\r\n case CharCode.CLOSEPAREN: {\r\n ++this.pos;\r\n return Token.CLOSEPAREN;\r\n }\r\n case CharCode.ASTERISK: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.ASTERISK_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.ASTERISK_ASTERISK_EQUALS;\r\n }\r\n return Token.ASTERISK_ASTERISK;\r\n }\r\n }\r\n return Token.ASTERISK;\r\n }\r\n case CharCode.PLUS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.PLUS) {\r\n ++this.pos;\r\n return Token.PLUS_PLUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.PLUS_EQUALS;\r\n }\r\n }\r\n return Token.PLUS;\r\n }\r\n case CharCode.COMMA: {\r\n ++this.pos;\r\n return Token.COMMA;\r\n }\r\n case CharCode.MINUS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.MINUS) {\r\n ++this.pos;\r\n return Token.MINUS_MINUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.MINUS_EQUALS;\r\n }\r\n }\r\n return Token.MINUS;\r\n }\r\n case CharCode.DOT: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (isDecimalDigit(text.charCodeAt(this.pos))) {\r\n --this.pos;\r\n return Token.FLOATLITERAL; // expects a call to readFloat\r\n }\r\n if (\r\n maxTokenLength > 2 && this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.DOT &&\r\n text.charCodeAt(this.pos + 1) == CharCode.DOT\r\n ) {\r\n this.pos += 2;\r\n return Token.DOT_DOT_DOT;\r\n }\r\n }\r\n return Token.DOT;\r\n }\r\n case CharCode.SLASH: {\r\n let commentStartPos = this.pos;\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.SLASH) { // single-line\r\n let commentKind = CommentKind.LINE;\r\n if (\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n ) {\r\n ++this.pos;\r\n commentKind = CommentKind.TRIPLE;\r\n }\r\n while (++this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.LINEFEED) {\r\n ++this.pos;\r\n break;\r\n }\r\n }\r\n if (this.onComment) {\r\n this.onComment(\r\n commentKind,\r\n text.substring(commentStartPos, this.pos),\r\n this.range(commentStartPos, this.pos)\r\n );\r\n }\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) { // multi-line\r\n let closed = false;\r\n while (++this.pos < this.end) {\r\n c = text.charCodeAt(this.pos);\r\n if (\r\n c == CharCode.ASTERISK &&\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n ) {\r\n this.pos += 2;\r\n closed = true;\r\n break;\r\n }\r\n }\r\n if (!closed) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n this.range(this.pos), \"*/\"\r\n );\r\n } else if (this.onComment) {\r\n this.onComment(\r\n CommentKind.BLOCK,\r\n text.substring(commentStartPos, this.pos),\r\n this.range(commentStartPos, this.pos)\r\n );\r\n }\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.SLASH_EQUALS;\r\n }\r\n }\r\n return Token.SLASH;\r\n }\r\n case CharCode._0:\r\n case CharCode._1:\r\n case CharCode._2:\r\n case CharCode._3:\r\n case CharCode._4:\r\n case CharCode._5:\r\n case CharCode._6:\r\n case CharCode._7:\r\n case CharCode._8:\r\n case CharCode._9: {\r\n return this.testInteger()\r\n ? Token.INTEGERLITERAL // expects a call to readInteger\r\n : Token.FLOATLITERAL; // expects a call to readFloat\r\n }\r\n case CharCode.COLON: {\r\n ++this.pos;\r\n return Token.COLON;\r\n }\r\n case CharCode.SEMICOLON: {\r\n ++this.pos;\r\n return Token.SEMICOLON;\r\n }\r\n case CharCode.LESSTHAN: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.LESSTHAN) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 &&\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.LESSTHAN_LESSTHAN_EQUALS;\r\n }\r\n return Token.LESSTHAN_LESSTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.LESSTHAN_EQUALS;\r\n }\r\n }\r\n return Token.LESSTHAN;\r\n }\r\n case CharCode.EQUALS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 &&\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.EQUALS_EQUALS_EQUALS;\r\n }\r\n return Token.EQUALS_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n return Token.EQUALS_GREATERTHAN;\r\n }\r\n }\r\n return Token.EQUALS;\r\n }\r\n case CharCode.GREATERTHAN: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n if (maxTokenLength > 2 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 3 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS;\r\n }\r\n return Token.GREATERTHAN_GREATERTHAN_GREATERTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_GREATERTHAN_EQUALS;\r\n }\r\n }\r\n return Token.GREATERTHAN_GREATERTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_EQUALS;\r\n }\r\n }\r\n return Token.GREATERTHAN;\r\n }\r\n case CharCode.QUESTION: {\r\n ++this.pos;\r\n return Token.QUESTION;\r\n }\r\n case CharCode.OPENBRACKET: {\r\n ++this.pos;\r\n return Token.OPENBRACKET;\r\n }\r\n case CharCode.CLOSEBRACKET: {\r\n ++this.pos;\r\n return Token.CLOSEBRACKET;\r\n }\r\n case CharCode.CARET: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.CARET_EQUALS;\r\n }\r\n return Token.CARET;\r\n }\r\n case CharCode.OPENBRACE: {\r\n ++this.pos;\r\n return Token.OPENBRACE;\r\n }\r\n case CharCode.BAR: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.BAR) {\r\n ++this.pos;\r\n return Token.BAR_BAR;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.BAR_EQUALS;\r\n }\r\n }\r\n return Token.BAR;\r\n }\r\n case CharCode.CLOSEBRACE: {\r\n ++this.pos;\r\n return Token.CLOSEBRACE;\r\n }\r\n case CharCode.TILDE: {\r\n ++this.pos;\r\n return Token.TILDE;\r\n }\r\n case CharCode.AT: {\r\n ++this.pos;\r\n return Token.AT;\r\n }\r\n default: {\r\n if (isIdentifierStart(c)) {\r\n if (isKeywordCharacter(c)) {\r\n let posBefore = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(c = text.charCodeAt(this.pos))\r\n ) {\r\n if (!isKeywordCharacter(c)) {\r\n this.pos = posBefore;\r\n return Token.IDENTIFIER;\r\n }\r\n }\r\n let keywordText = text.substring(posBefore, this.pos);\r\n let keywordToken = tokenFromKeyword(keywordText);\r\n if (\r\n keywordToken != Token.INVALID &&\r\n identifierHandling !== IdentifierHandling.ALWAYS &&\r\n !(\r\n identifierHandling === IdentifierHandling.PREFER &&\r\n tokenIsAlsoIdentifier(keywordToken)\r\n )\r\n ) {\r\n return keywordToken;\r\n }\r\n this.pos = posBefore;\r\n }\r\n return Token.IDENTIFIER; // expects a call to readIdentifier\r\n } else if (isWhiteSpace(c)) {\r\n ++this.pos;\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Invalid_character,\r\n this.range(this.pos, this.pos + 1)\r\n );\r\n ++this.pos;\r\n return Token.INVALID;\r\n }\r\n }\r\n }\r\n return Token.ENDOFFILE;\r\n }\r\n\r\n peek(\r\n checkOnNewLine: bool = false,\r\n identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT,\r\n maxCompoundLength: i32 = i32.MAX_VALUE\r\n ): Token {\r\n var text = this.source.text;\r\n if (this.nextToken < 0) {\r\n let posBefore = this.pos;\r\n let tokenBefore = this.token;\r\n let tokenPosBefore = this.tokenPos;\r\n this.nextToken = this.unsafeNext(identifierHandling, maxCompoundLength);\r\n this.nextTokenPos = this.tokenPos;\r\n if (checkOnNewLine) {\r\n this.nextTokenOnNewLine = false;\r\n for (let pos = posBefore, end = this.nextTokenPos; pos < end; ++pos) {\r\n if (isLineBreak(text.charCodeAt(pos))) {\r\n this.nextTokenOnNewLine = true;\r\n break;\r\n }\r\n }\r\n }\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n }\r\n return this.nextToken;\r\n }\r\n\r\n skipIdentifier(identifierHandling: IdentifierHandling = IdentifierHandling.PREFER): bool {\r\n return this.skip(Token.IDENTIFIER, identifierHandling);\r\n }\r\n\r\n skip(token: Token, identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT): bool {\r\n var posBefore = this.pos;\r\n var tokenBefore = this.token;\r\n var tokenPosBefore = this.tokenPos;\r\n var maxCompoundLength = i32.MAX_VALUE;\r\n switch (token) {\r\n case Token.GREATERTHAN: { // where parsing type arguments\r\n maxCompoundLength = 1;\r\n break;\r\n }\r\n }\r\n this.token = this.unsafeNext(identifierHandling, maxCompoundLength);\r\n if (this.token == token) {\r\n this.nextToken = -1;\r\n return true;\r\n } else {\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n return false;\r\n }\r\n }\r\n\r\n mark(): State {\r\n var state: State;\r\n if (reusableState) {\r\n state = reusableState;\r\n reusableState = null;\r\n } else {\r\n state = new State();\r\n }\r\n state.pos = this.pos;\r\n state.token = this.token;\r\n state.tokenPos = this.tokenPos;\r\n return state;\r\n }\r\n\r\n discard(state: State): void {\r\n reusableState = state;\r\n }\r\n\r\n reset(state: State): void {\r\n this.pos = state.pos;\r\n this.token = state.token;\r\n this.tokenPos = state.tokenPos;\r\n this.nextToken = -1;\r\n }\r\n\r\n range(start: i32 = -1, end: i32 = -1): Range {\r\n if (start < 0) {\r\n start = this.tokenPos;\r\n end = this.pos;\r\n } else if (end < 0) {\r\n end = start;\r\n }\r\n return new Range(this.source, start, end);\r\n }\r\n\r\n readIdentifier(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(text.charCodeAt(this.pos))\r\n );\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readString(): string {\r\n var text = this.source.text;\r\n var quote = text.charCodeAt(this.pos++);\r\n var start = this.pos;\r\n var result = \"\";\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.end)\r\n );\r\n break;\r\n }\r\n let c = text.charCodeAt(this.pos);\r\n if (c == quote) {\r\n result += text.substring(start, this.pos++);\r\n break;\r\n }\r\n if (c == CharCode.BACKSLASH) {\r\n result += text.substring(start, this.pos);\r\n result += this.readEscapeSequence();\r\n start = this.pos;\r\n continue;\r\n }\r\n if (isLineBreak(c)) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n return result;\r\n }\r\n\r\n readEscapeSequence(): string {\r\n if (++this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.end)\r\n );\r\n return \"\";\r\n }\r\n\r\n var text = this.source.text;\r\n var c = text.charCodeAt(this.pos++);\r\n switch (c) {\r\n case CharCode._0: return \"\\0\";\r\n case CharCode.b: return \"\\b\";\r\n case CharCode.t: return \"\\t\";\r\n case CharCode.n: return \"\\n\";\r\n case CharCode.v: return \"\\v\";\r\n case CharCode.f: return \"\\f\";\r\n case CharCode.r: return \"\\r\";\r\n case CharCode.SINGLEQUOTE: return \"'\";\r\n case CharCode.DOUBLEQUOTE: return \"\\\"\";\r\n case CharCode.u: {\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.OPENBRACE\r\n ) {\r\n ++this.pos;\r\n return this.readExtendedUnicodeEscape(); // \\u{DDDDDDDD}\r\n }\r\n return this.readUnicodeEscape(); // \\uDDDD\r\n }\r\n case CharCode.CARRIAGERETURN: {\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n // fall through\r\n }\r\n case CharCode.LINEFEED:\r\n case CharCode.LINESEPARATOR:\r\n case CharCode.PARAGRAPHSEPARATOR: return \"\";\r\n default: return String.fromCharCode(c);\r\n }\r\n }\r\n\r\n readRegexpPattern(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var escaped = false;\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.end)\r\n );\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.BACKSLASH) {\r\n ++this.pos;\r\n escaped = true;\r\n continue;\r\n }\r\n let c = text.charCodeAt(this.pos);\r\n if (c == CharCode.SLASH && !escaped) break;\r\n if (isLineBreak(c)) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n escaped = false;\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readRegexpFlags(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var flags = 0;\r\n while (this.pos < this.end) {\r\n let c: i32 = text.charCodeAt(this.pos);\r\n if (!isIdentifierPart(c)) break;\r\n ++this.pos;\r\n\r\n // make sure each supported flag is unique\r\n switch (c) {\r\n case CharCode.g: {\r\n flags |= flags & 1 ? -1 : 1;\r\n break;\r\n }\r\n case CharCode.i: {\r\n flags |= flags & 2 ? -1 : 2;\r\n break;\r\n }\r\n case CharCode.m: {\r\n flags |= flags & 4 ? -1 : 4;\r\n break;\r\n }\r\n default: {\r\n flags = -1;\r\n break;\r\n }\r\n }\r\n }\r\n if (flags == -1) {\r\n this.error(\r\n DiagnosticCode.Invalid_regular_expression_flags,\r\n this.range(start, this.pos)\r\n );\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n testInteger(): bool {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 1 < this.end) {\r\n switch (text.charCodeAt(this.pos + 2)) {\r\n case CharCode.X:\r\n case CharCode.x:\r\n case CharCode.B:\r\n case CharCode.b:\r\n case CharCode.O:\r\n case CharCode.o: return true;\r\n }\r\n }\r\n var pos = this.pos;\r\n while (pos < this.end) {\r\n let c = text.charCodeAt(pos);\r\n if (c == CharCode.DOT || c == CharCode.E || c == CharCode.e) {\r\n return false;\r\n }\r\n if ((c < CharCode._0 || c > CharCode._9) && c != CharCode._) break;\r\n // does not validate separator placement (this is done in readXYInteger)\r\n pos++;\r\n }\r\n return true;\r\n }\r\n\r\n readInteger(): I64 {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 2 < this.end) {\r\n switch (text.charCodeAt(this.pos + 1)) {\r\n case CharCode.X:\r\n case CharCode.x: {\r\n this.pos += 2;\r\n return this.readHexInteger();\r\n }\r\n case CharCode.B:\r\n case CharCode.b: {\r\n this.pos += 2;\r\n return this.readBinaryInteger();\r\n }\r\n case CharCode.O:\r\n case CharCode.o: {\r\n this.pos += 2;\r\n return this.readOctalInteger();\r\n }\r\n }\r\n if (isOctalDigit(text.charCodeAt(this.pos + 1))) {\r\n let start = this.pos;\r\n ++this.pos;\r\n let value = this.readOctalInteger();\r\n this.error(\r\n DiagnosticCode.Octal_literals_are_not_allowed_in_strict_mode,\r\n this.range(start, this.pos)\r\n );\r\n return value;\r\n }\r\n }\r\n return this.readDecimalInteger();\r\n }\r\n\r\n readHexInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_16 = i64_new(16, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 16 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n // value = value * 16 + 10 + c - CharCode.A;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.A, 0)\r\n );\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n // value = value * 16 + 10 + c - CharCode.a;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.a, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readDecimalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_10 = i64_new(10, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 10 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_10),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readOctalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_8 = i64_new(8, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._7) {\r\n // value = value * 8 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_8),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Octal_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readBinaryInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_2 = i64_new(2, 0);\r\n var i64_1 = i64_new(1, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c == CharCode._0) {\r\n // value = value * 2;\r\n value = i64_mul(\r\n value,\r\n i64_2\r\n );\r\n } else if (c == CharCode._1) {\r\n // value = value * 2 + 1;\r\n value = i64_add(\r\n i64_mul(value, i64_2),\r\n i64_1\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Binary_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readFloat(): f64 {\r\n // var text = this.source.text;\r\n // if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 2 < this.end) {\r\n // switch (text.charCodeAt(this.pos + 1)) {\r\n // case CharCode.X:\r\n // case CharCode.x: {\r\n // this.pos += 2;\r\n // return this.readHexFloat();\r\n // }\r\n // }\r\n // }\r\n return this.readDecimalFloat();\r\n }\r\n\r\n readDecimalFloat(): f64 {\r\n // TODO: numeric separators (parseFloat can't handle these)\r\n var start = this.pos;\r\n var text = this.source.text;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n if (this.pos < this.end && text.charCodeAt(this.pos) == CharCode.DOT) {\r\n ++this.pos;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n if (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos);\r\n if (c == CharCode.E || c == CharCode.e) {\r\n if (\r\n ++this.pos < this.end && (\r\n text.charCodeAt(this.pos) == CharCode.MINUS ||\r\n text.charCodeAt(this.pos) == CharCode.PLUS\r\n ) &&\r\n isDecimalDigit(text.charCodeAt(this.pos + 1))\r\n ) {\r\n ++this.pos;\r\n }\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n }\r\n return parseFloat(text.substring(start, this.pos));\r\n }\r\n\r\n readHexFloat(): f64 {\r\n throw new Error(\"not implemented\"); // TBD\r\n }\r\n\r\n readUnicodeEscape(): string {\r\n var remain = 4;\r\n var value = 0;\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos++);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n value = value * 16 + c - CharCode._0;\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n value = value * 16 + 10 + c - CharCode.A;\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n value = value * 16 + 10 + c - CharCode.a;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(this.pos - 1, this.pos)\r\n );\r\n return \"\";\r\n }\r\n if (--remain == 0) break;\r\n }\r\n if (remain) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.pos)\r\n );\r\n return \"\";\r\n }\r\n return String.fromCharCode(value);\r\n }\r\n\r\n private readExtendedUnicodeEscape(): string {\r\n var start = this.pos;\r\n var value = this.readHexInteger();\r\n var value32 = i64_low(value);\r\n var invalid = false;\r\n\r\n assert(!i64_high(value));\r\n if (value32 > 0x10FFFF) {\r\n this.error(\r\n DiagnosticCode.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n var text = this.source.text;\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(start, this.end)\r\n );\r\n invalid = true;\r\n } else if (text.charCodeAt(this.pos) == CharCode.CLOSEBRACE) {\r\n ++this.pos;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Unterminated_Unicode_escape_sequence,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n if (invalid) return \"\";\r\n return value32 < 65536\r\n ? String.fromCharCode(value32)\r\n : String.fromCharCode(\r\n (((value32 - 65536) / 1024 | 0) + 0xD800) as i32,\r\n ( (value32 - 65536) % 1024 + 0xDC00) as i32\r\n );\r\n }\r\n\r\n finish(): void {\r\n }\r\n}\r\n\r\n/** Tokenizer state as returned by {@link Tokenizer#mark} and consumed by {@link Tokenizer#reset}. */\r\nexport class State {\r\n /** Current position. */\r\n pos: i32;\r\n /** Current token. */\r\n token: Token;\r\n /** Current token's position. */\r\n tokenPos: i32;\r\n}\r\n\r\n// Reusable state object to reduce allocations\r\nvar reusableState: State | null = null;\r\n","/**\r\n * The AssemblyScript compiler.\r\n * @module compiler\r\n *//***/\r\n\r\nimport {\r\n compileCall as compileBuiltinCall,\r\n compileAllocate,\r\n compileAbort,\r\n compileIterateRoots,\r\n ensureGCHook\r\n} from \"./builtins\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Module,\r\n MemorySegment,\r\n ExpressionRef,\r\n UnaryOp,\r\n BinaryOp,\r\n NativeType,\r\n FunctionRef,\r\n ExpressionId,\r\n FunctionTypeRef,\r\n GlobalRef,\r\n getExpressionId,\r\n getExpressionType,\r\n getConstValueI32,\r\n getConstValueI64Low,\r\n getConstValueI64High,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getGetLocalIndex,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getBlockName,\r\n needsExplicitUnreachable\r\n} from \"./module\";\r\n\r\nimport {\r\n CommonFlags,\r\n PATH_DELIMITER,\r\n INNER_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n STATIC_DELIMITER,\r\n GETTER_PREFIX,\r\n SETTER_PREFIX\r\n} from \"./common\";\r\n\r\nimport {\r\n Program,\r\n ClassPrototype,\r\n Class,\r\n Element,\r\n ElementKind,\r\n Enum,\r\n Field,\r\n FunctionPrototype,\r\n Function,\r\n FunctionTarget,\r\n Global,\r\n Local,\r\n Namespace,\r\n EnumValue,\r\n Property,\r\n VariableLikeElement,\r\n FlowFlags,\r\n ConstantValueKind,\r\n Flow,\r\n OperatorKind,\r\n DecoratorFlags\r\n} from \"./program\";\r\n\r\nimport {\r\n Resolver, ReportMode\r\n} from \"./resolver\";\r\n\r\nimport {\r\n Token,\r\n operatorTokenToString\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n TypeNode,\r\n Source,\r\n Range,\r\n DecoratorKind,\r\n\r\n Statement,\r\n BlockStatement,\r\n BreakStatement,\r\n ClassDeclaration,\r\n ContinueStatement,\r\n DeclarationStatement,\r\n DoStatement,\r\n EmptyStatement,\r\n EnumDeclaration,\r\n ExportStatement,\r\n ExpressionStatement,\r\n FunctionDeclaration,\r\n ForStatement,\r\n IfStatement,\r\n ImportStatement,\r\n InstanceOfExpression,\r\n InterfaceDeclaration,\r\n NamespaceDeclaration,\r\n ReturnStatement,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n VariableDeclaration,\r\n VariableStatement,\r\n VoidStatement,\r\n WhileStatement,\r\n\r\n Expression,\r\n AssertionExpression,\r\n BinaryExpression,\r\n CallExpression,\r\n CommaExpression,\r\n ElementAccessExpression,\r\n FloatLiteralExpression,\r\n FunctionExpression,\r\n IdentifierExpression,\r\n IntegerLiteralExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n NewExpression,\r\n ObjectLiteralExpression,\r\n ParenthesizedExpression,\r\n PropertyAccessExpression,\r\n TernaryExpression,\r\n ArrayLiteralExpression,\r\n StringLiteralExpression,\r\n UnaryPostfixExpression,\r\n UnaryPrefixExpression,\r\n FieldDeclaration,\r\n\r\n nodeIsConstantValue,\r\n isLastStatement,\r\n findDecorator\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags,\r\n Signature,\r\n\r\n typesToNativeTypes\r\n} from \"./types\";\r\n\r\nimport {\r\n writeI8,\r\n writeI16,\r\n writeI32,\r\n writeI64,\r\n writeF32,\r\n writeF64\r\n} from \"./util\";\r\n\r\n/** Compilation target. */\r\nexport enum Target {\r\n /** WebAssembly with 32-bit pointers. */\r\n WASM32,\r\n /** WebAssembly with 64-bit pointers. Experimental and not supported by any runtime yet. */\r\n WASM64\r\n}\r\n\r\n/** Compiler options. */\r\nexport class Options {\r\n\r\n /** WebAssembly target. Defaults to {@link Target.WASM32}. */\r\n target: Target = Target.WASM32;\r\n /** If true, compiles everything instead of just reachable code. */\r\n noTreeShaking: bool = false;\r\n /** If true, replaces assertions with nops. */\r\n noAssert: bool = false;\r\n /** If true, imports the memory provided by the embedder. */\r\n importMemory: bool = false;\r\n /** If true, imports the function table provided by the embedder. */\r\n importTable: bool = false;\r\n /** If true, generates information necessary for source maps. */\r\n sourceMap: bool = false;\r\n /** Static memory start offset. */\r\n memoryBase: i32 = 0;\r\n /** Global aliases. */\r\n globalAliases: Map | null = null;\r\n /** Additional features to activate. */\r\n features: Feature = Feature.NONE;\r\n\r\n /** Hinted optimize level. Not applied by the compiler itself. */\r\n optimizeLevelHint: i32 = 0;\r\n /** Hinted shrink level. Not applied by the compiler itself. */\r\n shrinkLevelHint: i32 = 0;\r\n\r\n /** Tests if the target is WASM64 or, otherwise, WASM32. */\r\n get isWasm64(): bool {\r\n return this.target == Target.WASM64;\r\n }\r\n\r\n /** Gets the unsigned size type matching the target. */\r\n get usizeType(): Type {\r\n return this.target == Target.WASM64 ? Type.usize64 : Type.usize32;\r\n }\r\n\r\n /** Gets the signed size type matching the target. */\r\n get isizeType(): Type {\r\n return this.target == Target.WASM64 ? Type.isize64 : Type.isize32;\r\n }\r\n\r\n /** Gets the native size type matching the target. */\r\n get nativeSizeType(): NativeType {\r\n return this.target == Target.WASM64 ? NativeType.I64 : NativeType.I32;\r\n }\r\n\r\n /** Tests if a specific feature is activated. */\r\n hasFeature(feature: Feature): bool {\r\n return (this.features & feature) != 0;\r\n }\r\n}\r\n\r\n/** Indicates specific features to activate. */\r\nexport const enum Feature {\r\n /** No additional features. */\r\n NONE = 0,\r\n /** Sign extension operations. */\r\n SIGN_EXTENSION = 1 << 0, // see: https://github.com/WebAssembly/sign-extension-ops\r\n /** Mutable global imports and exports. */\r\n MUTABLE_GLOBAL = 1 << 1 // see: https://github.com/WebAssembly/mutable-global\r\n}\r\n\r\n/** Indicates the desired kind of a conversion. */\r\nexport const enum ConversionKind {\r\n /** No conversion. */\r\n NONE,\r\n /** Implicit conversion. */\r\n IMPLICIT,\r\n /** Explicit conversion. */\r\n EXPLICIT\r\n}\r\n\r\n/** Indicates the desired wrap mode of a conversion. */\r\nexport const enum WrapMode {\r\n /** No wrapping. */\r\n NONE,\r\n /** Wrap small integer values. */\r\n WRAP\r\n}\r\n\r\n/** Compiler interface. */\r\nexport class Compiler extends DiagnosticEmitter {\r\n\r\n /** Program reference. */\r\n program: Program;\r\n /** Resolver reference. */\r\n resolver: Resolver;\r\n /** Provided options. */\r\n options: Options;\r\n /** Module instance being compiled. */\r\n module: Module;\r\n /** Current function in compilation. */\r\n currentFunction: Function;\r\n /** Current outer function in compilation, if compiling a function expression. */\r\n currentOuterFunction: Function | null = null;\r\n /** Current inline functions stack. */\r\n currentInlineFunctions: Function[] = [];\r\n /** Current enum in compilation. */\r\n currentEnum: Enum | null = null;\r\n /** Current type in compilation. */\r\n currentType: Type = Type.void;\r\n /** Start function being compiled. */\r\n startFunctionInstance: Function;\r\n /** Start function statements. */\r\n startFunctionBody: ExpressionRef[];\r\n /** Counting memory offset. */\r\n memoryOffset: I64;\r\n /** Memory segments being compiled. */\r\n memorySegments: MemorySegment[] = [];\r\n /** Map of already compiled static string segments. */\r\n stringSegments: Map = new Map();\r\n /** Function table being compiled. */\r\n functionTable: string[] = [ \"null\" ];\r\n /** Argument count helper global. */\r\n argcVar: GlobalRef = 0;\r\n /** Argument count helper setter. */\r\n argcSet: FunctionRef = 0;\r\n /** Indicates whether the iterateRoots function must be generated. */\r\n needsIterateRoots: bool = false;\r\n\r\n /** Compiles a {@link Program} to a {@link Module} using the specified options. */\r\n static compile(program: Program, options: Options | null = null): Module {\r\n return new Compiler(program, options).compile();\r\n }\r\n\r\n /** Constructs a new compiler for a {@link Program} using the specified options. */\r\n constructor(program: Program, options: Options | null = null) {\r\n super(program.diagnostics);\r\n this.program = program;\r\n this.resolver = program.resolver;\r\n if (!options) options = new Options();\r\n this.options = options;\r\n this.memoryOffset = i64_new(\r\n // leave space for `null`. also functions as a sentinel for erroneous stores at offset 0.\r\n // note that Binaryen's asm.js output utilizes the first 8 bytes for reinterpretations (#1547)\r\n max(options.memoryBase, 8)\r\n );\r\n this.module = Module.create();\r\n }\r\n\r\n /** Performs compilation of the underlying {@link Program} to a {@link Module}. */\r\n compile(): Module {\r\n var options = this.options;\r\n var module = this.module;\r\n var program = this.program;\r\n\r\n // initialize lookup maps, built-ins, imports, exports, etc.\r\n program.initialize(options);\r\n\r\n // set up the start function\r\n var startFunctionInstance = new Function(program.startFunction, \"start\", new Signature([], Type.void));\r\n this.startFunctionInstance = startFunctionInstance;\r\n var startFunctionBody = new Array();\r\n this.startFunctionBody = startFunctionBody;\r\n this.currentFunction = startFunctionInstance;\r\n\r\n // add a mutable heap base dummy\r\n if (options.isWasm64) {\r\n module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I64,\r\n true,\r\n module.createI64(0, 0)\r\n );\r\n } else {\r\n module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I32,\r\n false,\r\n module.createI32(0)\r\n );\r\n }\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 // update 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 module.removeGlobal(\"HEAP_BASE\");\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 Module.UNLIMITED_MEMORY,\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 module.setFunctionTable(functionTable.length, 0xffffffff, functionTable);\r\n module.addTableExport(\"0\", \"table\");\r\n module.addFunction(\"null\", this.ensureFunctionType(null, Type.void), null, module.createBlock(null, []));\r\n\r\n // import table if requested (default table is named '0' by Binaryen)\r\n if (options.importTable) module.addTableImport(\"0\", \"env\", \"table\");\r\n\r\n // set up module exports\r\n for (let [name, moduleExport] of program.moduleLevelExports) {\r\n this.makeModuleExport(name, moduleExport.element);\r\n }\r\n\r\n // set up gc\r\n if (this.needsIterateRoots) compileIterateRoots(this);\r\n\r\n return module;\r\n }\r\n\r\n /** Applies the respective module export(s) for the specified element. */\r\n private makeModuleExport(name: string, element: Element, prefix: string = \"\"): void {\r\n\r\n // traverse members\r\n var members = element.members;\r\n if (members) {\r\n let subPrefix = prefix + name + (element.kind == ElementKind.CLASS\r\n ? INSTANCE_DELIMITER\r\n : STATIC_DELIMITER\r\n );\r\n if (element.kind == ElementKind.NAMESPACE) {\r\n for (let member of members.values()) {\r\n if (!member.is(CommonFlags.EXPORT)) continue;\r\n this.makeModuleExport(member.simpleName, member, subPrefix);\r\n }\r\n } else {\r\n for (let member of members.values()) {\r\n if (member.is(CommonFlags.PRIVATE)) continue;\r\n this.makeModuleExport(member.simpleName, member, subPrefix);\r\n }\r\n }\r\n }\r\n\r\n switch (element.kind) {\r\n\r\n // export global\r\n case ElementKind.GLOBAL: {\r\n let isConst = element.is(CommonFlags.CONST) || element.is(CommonFlags.STATIC | CommonFlags.READONLY);\r\n if (!isConst && !this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n let declaration = (element).declaration;\r\n if (declaration) {\r\n this.error(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n this.module.addGlobalExport(element.internalName, prefix + name);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUMVALUE: {\r\n if (!assert(element.parent).is(CommonFlags.CONST) && !this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n let declaration = (element).declaration;\r\n if (declaration) {\r\n this.error(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n this.module.addGlobalExport(element.internalName, prefix + name);\r\n }\r\n break;\r\n }\r\n\r\n // export function\r\n case ElementKind.FUNCTION: {\r\n let instance = element;\r\n let signature = instance.signature;\r\n if (signature.requiredParameters < signature.parameterTypes.length) {\r\n // utilize trampoline to fill in omitted arguments\r\n instance = this.ensureTrampoline(instance);\r\n this.ensureArgcSet();\r\n }\r\n if (instance.is(CommonFlags.COMPILED)) this.module.addFunctionExport(instance.internalName, prefix + name);\r\n break;\r\n }\r\n\r\n // export getter and setter\r\n case ElementKind.PROPERTY: {\r\n let getter = assert((element).getterPrototype);\r\n this.makeModuleExport(GETTER_PREFIX + name, getter, prefix);\r\n let setter = (element).setterPrototype;\r\n if (setter) this.makeModuleExport(SETTER_PREFIX + name, setter, prefix);\r\n break;\r\n }\r\n\r\n // export a getter and a setter\r\n case ElementKind.FIELD: {\r\n let module = this.module;\r\n let type = (element).type;\r\n let nativeType = type.toNativeType();\r\n let offset = (element).memoryOffset;\r\n let usizeType = this.options.usizeType;\r\n let nativeSizeType = this.options.nativeSizeType;\r\n\r\n // make a getter\r\n let getterName = prefix + GETTER_PREFIX + name;\r\n module.addFunction(\r\n getterName,\r\n this.ensureFunctionType(null, type, usizeType),\r\n null,\r\n module.createLoad(\r\n type.byteSize,\r\n type.is(TypeFlags.SIGNED),\r\n module.createGetLocal(0, nativeSizeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(getterName, getterName);\r\n\r\n // make a setter\r\n if (!element.is(CommonFlags.READONLY)) {\r\n let setterName = prefix + SETTER_PREFIX + name;\r\n module.addFunction(\r\n setterName,\r\n this.ensureFunctionType([ type ], Type.void, usizeType),\r\n null,\r\n module.createStore(\r\n type.byteSize,\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createGetLocal(1, nativeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(setterName, setterName);\r\n }\r\n break;\r\n }\r\n\r\n // skip prototype and export instances\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n for (let instance of (element).instances.values()) {\r\n let instanceName = name;\r\n if (instance.is(CommonFlags.GENERIC)) {\r\n let fullName = instance.internalName;\r\n instanceName += fullName.substring(fullName.lastIndexOf(\"<\"));\r\n }\r\n this.makeModuleExport(instanceName, instance, prefix);\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n for (let instance of (element).instances.values()) {\r\n let instanceName = name;\r\n if (instance.is(CommonFlags.GENERIC)) {\r\n let fullName = instance.internalName;\r\n instanceName += fullName.substring(fullName.lastIndexOf(\"<\"));\r\n }\r\n let ctor = instance.constructorInstance;\r\n if (ctor) this.makeModuleExport(instanceName + INSTANCE_DELIMITER + ctor.simpleName, ctor, prefix);\r\n this.makeModuleExport(instanceName, instance, prefix);\r\n }\r\n break;\r\n }\r\n\r\n // all possible members already handled above\r\n case ElementKind.ENUM:\r\n case ElementKind.CLASS:\r\n case ElementKind.NAMESPACE: break;\r\n\r\n default: assert(false);\r\n }\r\n }\r\n\r\n // sources\r\n\r\n /** Compiles a source by looking it up by path first. */\r\n compileSourceByPath(normalizedPathWithoutExtension: string, reportNode: Node): void {\r\n var source = this.program.lookupSourceByPath(normalizedPathWithoutExtension);\r\n if (source) this.compileSource(source);\r\n else {\r\n this.error(\r\n DiagnosticCode.File_0_not_found,\r\n reportNode.range, normalizedPathWithoutExtension\r\n );\r\n }\r\n }\r\n\r\n /** Compiles a source. */\r\n compileSource(source: Source): void {\r\n if (source.is(CommonFlags.COMPILED)) return;\r\n source.set(CommonFlags.COMPILED);\r\n\r\n // compile top-level statements\r\n var noTreeShaking = this.options.noTreeShaking;\r\n var isEntry = source.isEntry;\r\n var startFunctionInstance = this.startFunctionInstance;\r\n var startFunctionBody = this.startFunctionBody;\r\n var statements = source.statements;\r\n for (let i = 0, k = statements.length; i < k; ++i) {\r\n let statement = statements[i];\r\n switch (statement.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) &&\r\n !(statement).isGeneric\r\n ) {\r\n this.compileClassDeclaration(statement, [], null);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: break;\r\n case NodeKind.ENUMDECLARATION: {\r\n if (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) {\r\n this.compileEnumDeclaration(statement);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n if (\r\n (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) &&\r\n !(statement).isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(statement, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.IMPORT: {\r\n this.compileSourceByPath(\r\n (statement).normalizedPath,\r\n (statement).path\r\n );\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n if (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) {\r\n this.compileNamespaceDeclaration(statement);\r\n }\r\n break;\r\n }\r\n case NodeKind.VARIABLE: { // global, always compiled as initializers might have side effects\r\n let variableInit = this.compileVariableStatement(statement);\r\n if (variableInit) startFunctionBody.push(variableInit);\r\n break;\r\n }\r\n case NodeKind.EXPORT: {\r\n if ((statement).normalizedPath != null) {\r\n this.compileSourceByPath(\r\n (statement).normalizedPath,\r\n (statement).path\r\n );\r\n }\r\n if (noTreeShaking || isEntry) {\r\n this.compileExportStatement(statement);\r\n }\r\n break;\r\n }\r\n default: { // otherwise a top-level statement that is part of the start function's body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = startFunctionInstance;\r\n startFunctionBody.push(this.compileStatement(statement));\r\n this.currentFunction = previousFunction;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // globals\r\n\r\n compileGlobalDeclaration(declaration: VariableDeclaration): Global | null {\r\n // look up the initialized program element\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.GLOBAL);\r\n if (!this.compileGlobal(element)) return null; // reports\r\n return element;\r\n }\r\n\r\n compileGlobal(global: Global): bool {\r\n if (global.is(CommonFlags.COMPILED)) return true;\r\n global.set(CommonFlags.COMPILED);\r\n\r\n var module = this.module;\r\n var declaration = global.declaration;\r\n var initExpr: ExpressionRef = 0;\r\n\r\n if (global.type == Type.void) { // type is void if not yet resolved or not annotated\r\n if (declaration) {\r\n\r\n // resolve now if annotated\r\n if (declaration.type) {\r\n let resolvedType = this.resolver.resolveType(declaration.type); // reports\r\n if (!resolvedType) return false;\r\n if (resolvedType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.type.range\r\n );\r\n return false;\r\n }\r\n global.type = resolvedType;\r\n\r\n // infer from initializer if not annotated\r\n } else if (declaration.initializer) { // infer type using void/NONE for literal inference\r\n initExpr = this.compileExpressionRetainType( // reports\r\n declaration.initializer,\r\n Type.void,\r\n WrapMode.WRAP\r\n );\r\n if (this.currentType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.initializer.range, this.currentType.toString(), \"\"\r\n );\r\n return false;\r\n }\r\n global.type = this.currentType;\r\n\r\n // must either be annotated or have an initializer\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.name.range.atEnd\r\n );\r\n return false;\r\n }\r\n } else {\r\n assert(false); // must have a declaration if 'void' (and thus resolved later on)\r\n }\r\n }\r\n\r\n // ambient builtins like 'HEAP_BASE' need to be resolved but are added explicitly\r\n if (global.is(CommonFlags.AMBIENT) && global.hasDecorator(DecoratorFlags.BUILTIN)) return true;\r\n\r\n var nativeType = global.type.toNativeType();\r\n var isDeclaredConstant = global.is(CommonFlags.CONST) || global.is(CommonFlags.STATIC | CommonFlags.READONLY);\r\n\r\n // handle imports\r\n if (global.is(CommonFlags.AMBIENT)) {\r\n\r\n // constant global\r\n if (isDeclaredConstant || this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n global.set(CommonFlags.MODULE_IMPORT);\r\n if (declaration) {\r\n mangleImportName(global, declaration);\r\n } else {\r\n mangleImportName_moduleName = \"env\";\r\n mangleImportName_elementName = global.simpleName;\r\n }\r\n module.addGlobalImport(\r\n global.internalName,\r\n mangleImportName_moduleName,\r\n mangleImportName_elementName,\r\n nativeType\r\n );\r\n global.set(CommonFlags.COMPILED);\r\n return true;\r\n\r\n // importing mutable globals is not supported in the MVP\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n assert(declaration).range\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n // the MVP does not yet support initializer expressions other than constant values (and constant\r\n // get_globals), hence such initializations must be performed in the start function for now.\r\n var initializeInStart = false;\r\n\r\n // evaluate initializer if present\r\n if (declaration !== null && declaration.initializer !== null) {\r\n if (!initExpr) {\r\n initExpr = this.compileExpression(\r\n declaration.initializer,\r\n global.type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n );\r\n }\r\n\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (isDeclaredConstant) {\r\n initExpr = module.precomputeExpression(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n declaration.range\r\n );\r\n initializeInStart = true;\r\n }\r\n } else {\r\n initializeInStart = true;\r\n }\r\n }\r\n\r\n // explicitly inline if annotated\r\n if (global.hasDecorator(DecoratorFlags.INLINE)) {\r\n if (!initializeInStart) { // reported above\r\n assert(getExpressionId(initExpr) == ExpressionId.Const);\r\n let exprType = getExpressionType(initExpr);\r\n switch (exprType) {\r\n case NativeType.I32: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(getConstValueI32(initExpr), 0);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(\r\n getConstValueI64Low(initExpr),\r\n getConstValueI64High(initExpr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF32(initExpr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF64(initExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return false;\r\n }\r\n }\r\n global.set(CommonFlags.INLINED); // inline the value from now on\r\n }\r\n }\r\n\r\n // initialize to zero if there's no initializer\r\n } else {\r\n initExpr = global.type.toNativeZero(module);\r\n }\r\n\r\n var internalName = global.internalName;\r\n\r\n if (initializeInStart) { // initialize to mutable zero and set the actual value in start\r\n module.addGlobal(internalName, nativeType, true, global.type.toNativeZero(module));\r\n this.startFunctionBody.push(module.createSetGlobal(internalName, initExpr));\r\n\r\n } else { // compile normally\r\n module.addGlobal(internalName, nativeType, !isDeclaredConstant, initExpr);\r\n }\r\n return true;\r\n }\r\n\r\n // enums\r\n\r\n compileEnumDeclaration(declaration: EnumDeclaration): Enum | null {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(element)) return null;\r\n return element;\r\n }\r\n\r\n compileEnum(element: Enum): bool {\r\n if (element.is(CommonFlags.COMPILED)) return true;\r\n element.set(CommonFlags.COMPILED);\r\n\r\n var module = this.module;\r\n this.currentEnum = element;\r\n var previousValue: EnumValue | null = null;\r\n var previousValueIsMut = false;\r\n\r\n if (element.members) {\r\n for (let member of element.members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) continue; // happens if an enum is also a namespace\r\n let initInStart = false;\r\n let val = member;\r\n let valueDeclaration = val.declaration;\r\n val.set(CommonFlags.COMPILED);\r\n let initExpr: ExpressionRef;\r\n if (valueDeclaration.value) {\r\n initExpr = this.compileExpression(\r\n valueDeclaration.value,\r\n Type.i32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (element.is(CommonFlags.CONST)) {\r\n initExpr = module.precomputeExpression(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n this.error(\r\n DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,\r\n valueDeclaration.value.range\r\n );\r\n initInStart = true;\r\n }\r\n } else {\r\n initInStart = true;\r\n }\r\n }\r\n } else if (previousValue == null) {\r\n initExpr = module.createI32(0);\r\n } else {\r\n if (previousValueIsMut) {\r\n this.error(\r\n DiagnosticCode.Enum_member_must_have_initializer,\r\n valueDeclaration.range\r\n );\r\n }\r\n initExpr = module.createBinary(BinaryOp.AddI32,\r\n module.createGetGlobal(previousValue.internalName, NativeType.I32),\r\n module.createI32(1)\r\n );\r\n initExpr = module.precomputeExpression(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (element.is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,\r\n valueDeclaration.range\r\n );\r\n }\r\n initInStart = true;\r\n }\r\n }\r\n if (initInStart) {\r\n module.addGlobal(val.internalName, NativeType.I32, true, module.createI32(0));\r\n this.startFunctionBody.push(module.createSetGlobal(val.internalName, initExpr));\r\n previousValueIsMut = true;\r\n } else {\r\n module.addGlobal(val.internalName, NativeType.I32, !element.is(CommonFlags.CONST), initExpr);\r\n previousValueIsMut = false;\r\n }\r\n previousValue = val;\r\n }\r\n }\r\n this.currentEnum = null;\r\n return true;\r\n }\r\n\r\n // functions\r\n\r\n /** Compiles a top-level function given its declaration. */\r\n compileFunctionDeclaration(\r\n declaration: FunctionDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null\r\n ): Function | null {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return this.compileFunctionUsingTypeArguments( // reports\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n null, // no outer scope (is top level)\r\n (element).declaration.name\r\n );\r\n }\r\n\r\n /** Resolves the specified type arguments prior to compiling the resulting function instance. */\r\n compileFunctionUsingTypeArguments(\r\n prototype: FunctionPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null,\r\n outerScope: Flow | null,\r\n reportNode: Node\r\n ): Function | null {\r\n var instance = this.resolver.resolveFunctionInclTypeArguments(\r\n prototype,\r\n typeArguments,\r\n contextualTypeArguments,\r\n reportNode\r\n );\r\n if (!instance) return null;\r\n instance.outerScope = outerScope;\r\n if (!this.compileFunction(instance)) return null; // reports\r\n return instance;\r\n }\r\n\r\n /** Either reuses or creates the function type matching the specified signature. */\r\n ensureFunctionType(\r\n parameterTypes: Type[] | null,\r\n returnType: Type,\r\n thisType: Type | null = null\r\n ): FunctionTypeRef {\r\n var numParameters = parameterTypes ? parameterTypes.length : 0;\r\n var paramTypes: NativeType[];\r\n var index = 0;\r\n if (thisType) {\r\n paramTypes = new Array(1 + numParameters);\r\n paramTypes[0] = thisType.toNativeType();\r\n index = 1;\r\n } else {\r\n paramTypes = new Array(numParameters);\r\n }\r\n if (parameterTypes) {\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n paramTypes[index] = parameterTypes[i].toNativeType();\r\n }\r\n }\r\n var resultType = returnType.toNativeType();\r\n var module = this.module;\r\n var typeRef = module.getFunctionTypeBySignature(resultType, paramTypes);\r\n if (!typeRef) {\r\n let name = Signature.makeSignatureString(parameterTypes, returnType, thisType);\r\n typeRef = module.addFunctionType(name, resultType, paramTypes);\r\n }\r\n return typeRef;\r\n }\r\n\r\n /** Compiles a readily resolved function instance. */\r\n compileFunction(instance: Function): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n assert(!(instance.is(CommonFlags.AMBIENT) && instance.hasDecorator(DecoratorFlags.BUILTIN)));\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n // check that modifiers are matching\r\n var declaration = instance.prototype.declaration;\r\n var body = declaration.body;\r\n if (body) {\r\n if (instance.is(CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n if (!instance.is(CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n declaration.name.range\r\n );\r\n }\r\n }\r\n\r\n var ref: FunctionRef;\r\n var signature = instance.signature;\r\n var typeRef = this.ensureFunctionType(signature.parameterTypes, signature.returnType, signature.thisType);\r\n var module = this.module;\r\n if (body) {\r\n let isConstructor = instance.is(CommonFlags.CONSTRUCTOR);\r\n let returnType = instance.signature.returnType;\r\n\r\n // compile body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = instance;\r\n let flow = instance.flow;\r\n let stmt: ExpressionRef;\r\n if (body.kind == NodeKind.EXPRESSION) { // () => expression\r\n assert(!instance.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.GET | CommonFlags.SET | CommonFlags.MAIN));\r\n assert(instance.is(CommonFlags.ARROW));\r\n stmt = this.compileExpression(\r\n (body).expression,\r\n returnType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n flow.set(FlowFlags.RETURNS);\r\n if (!flow.canOverflow(stmt, returnType)) flow.set(FlowFlags.RETURNS_WRAPPED);\r\n flow.finalize();\r\n } else {\r\n assert(body.kind == NodeKind.BLOCK);\r\n let stmts = this.compileStatements((body).statements);\r\n if (instance.is(CommonFlags.MAIN)) {\r\n module.addGlobal(\"~started\", NativeType.I32, true, module.createI32(0));\r\n stmts.unshift(\r\n module.createIf(\r\n module.createUnary(\r\n UnaryOp.EqzI32,\r\n module.createGetGlobal(\"~started\", NativeType.I32)\r\n ),\r\n module.createBlock(null, [\r\n module.createCall(\"start\", null, NativeType.None),\r\n module.createSetGlobal(\"~started\", module.createI32(1))\r\n ])\r\n )\r\n );\r\n }\r\n flow.finalize();\r\n if (isConstructor) {\r\n let nativeSizeType = this.options.nativeSizeType;\r\n assert(instance.is(CommonFlags.INSTANCE));\r\n\r\n // implicitly return `this` if the constructor doesn't always return on its own\r\n if (!flow.is(FlowFlags.RETURNS)) {\r\n\r\n // if all branches are guaranteed to allocate, skip the final conditional allocation\r\n if (flow.is(FlowFlags.ALLOCATES)) {\r\n stmts.push(module.createGetLocal(0, nativeSizeType));\r\n\r\n // if not all branches are guaranteed to allocate, also append a conditional allocation\r\n } else {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n stmts.push(module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, declaration.name)\r\n ));\r\n }\r\n }\r\n\r\n // make sure all branches return\r\n } else if (returnType != Type.void && !flow.is(FlowFlags.RETURNS)) {\r\n this.error(\r\n DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,\r\n declaration.signature.returnType.range\r\n );\r\n }\r\n stmt = !stmts.length\r\n ? module.createNop()\r\n : stmts.length == 1\r\n ? stmts[0]\r\n : module.createBlock(null, stmts, returnType.toNativeType());\r\n }\r\n this.currentFunction = previousFunction;\r\n\r\n // create the function\r\n ref = module.addFunction(\r\n instance.internalName,\r\n typeRef,\r\n typesToNativeTypes(instance.additionalLocals),\r\n stmt\r\n );\r\n\r\n // concrete functions cannot have an annotated external name\r\n if (instance.hasDecorator(DecoratorFlags.EXTERNAL)) {\r\n let decorator = assert(findDecorator(DecoratorKind.EXTERNAL, declaration.decorators));\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n decorator.range\r\n );\r\n }\r\n\r\n } else {\r\n instance.set(CommonFlags.MODULE_IMPORT);\r\n mangleImportName(instance, declaration); // TODO: check for duplicates\r\n\r\n // create the function import\r\n ref = module.addFunctionImport(\r\n instance.internalName,\r\n mangleImportName_moduleName,\r\n mangleImportName_elementName,\r\n typeRef\r\n );\r\n }\r\n\r\n instance.finalize(module, ref);\r\n return true;\r\n }\r\n\r\n // namespaces\r\n\r\n compileNamespaceDeclaration(declaration: NamespaceDeclaration): void {\r\n var members = declaration.members;\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n switch (member.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileClassDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileInterfaceDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileEnumDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileNamespaceDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n let variableInit = this.compileVariableStatement(member, true);\r\n if (variableInit) this.startFunctionBody.push(variableInit);\r\n }\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n }\r\n\r\n compileNamespace(ns: Namespace): void {\r\n if (!ns.members) return;\r\n\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let element of ns.members.values()) {\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking ||\r\n (element).is(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n this.compileEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking || (element).is(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n if (element.hasDecorator(DecoratorFlags.BUILTIN)) break;\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // exports\r\n\r\n compileExportStatement(statement: ExportStatement): void {\r\n var fileLevelExports = this.program.fileLevelExports;\r\n var members = statement.members;\r\n if (!members) return; // filespace\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n let element = fileLevelExports.get(\r\n statement.range.source.internalPath + PATH_DELIMITER + member.externalName.text\r\n );\r\n if (!element) continue; // reported in Program#initialize\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (!(element).is(CommonFlags.GENERIC)) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n this.compileEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC) &&\r\n statement.range.source.isEntry\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // classes\r\n\r\n compileClassDeclaration(\r\n declaration: ClassDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null\r\n ): void {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.compileClassUsingTypeArguments(\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n declaration\r\n );\r\n }\r\n\r\n compileClassUsingTypeArguments(\r\n prototype: ClassPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n var instance = this.resolver.resolveClassInclTypeArguments(\r\n prototype,\r\n typeArguments,\r\n contextualTypeArguments,\r\n alternativeReportNode || prototype.declaration\r\n );\r\n if (!instance) return;\r\n this.compileClass(instance);\r\n }\r\n\r\n compileClass(instance: Class): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n var staticMembers = instance.prototype.members;\r\n if (staticMembers) {\r\n for (let element of staticMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [], null, null,\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], null, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], null, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n var ctorInstance = instance.constructorInstance;\r\n if (ctorInstance) this.compileFunction(ctorInstance);\r\n var instanceMembers = instance.members;\r\n if (instanceMembers) {\r\n for (let element of instanceMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n instance.contextualTypeArguments,\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n element.set(CommonFlags.COMPILED);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], instance.contextualTypeArguments, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], instance.contextualTypeArguments, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n compileInterfaceDeclaration(\r\n declaration: InterfaceDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n // TODO\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n declaration.range\r\n );\r\n }\r\n\r\n // memory\r\n\r\n /** Adds a static memory segment with the specified data. */\r\n addMemorySegment(buffer: Uint8Array, alignment: i32 = 8): MemorySegment {\r\n var memoryOffset = i64_align(this.memoryOffset, alignment);\r\n var segment = MemorySegment.create(buffer, memoryOffset);\r\n this.memorySegments.push(segment);\r\n this.memoryOffset = i64_add(memoryOffset, i64_new(buffer.length, 0));\r\n return segment;\r\n }\r\n\r\n // function table\r\n\r\n /** Ensures that a table entry exists for the specified function and returns its index. */\r\n ensureFunctionTableEntry(func: Function): i32 {\r\n assert(func.is(CommonFlags.COMPILED));\r\n if (func.functionTableIndex >= 0) {\r\n return func.functionTableIndex;\r\n }\r\n var functionTable = this.functionTable;\r\n var index = functionTable.length;\r\n if (!func.is(CommonFlags.TRAMPOLINE) && func.signature.requiredParameters < func.signature.parameterTypes.length) {\r\n // insert the trampoline if the function has optional parameters\r\n func = this.ensureTrampoline(func);\r\n }\r\n functionTable.push(func.internalName);\r\n func.functionTableIndex = index;\r\n return index;\r\n }\r\n\r\n // statements\r\n\r\n compileStatement(statement: Statement): ExpressionRef {\r\n var module = this.module;\r\n var stmt: ExpressionRef;\r\n switch (statement.kind) {\r\n case NodeKind.BLOCK: {\r\n stmt = this.compileBlockStatement(statement);\r\n break;\r\n }\r\n case NodeKind.BREAK: {\r\n stmt = this.compileBreakStatement(statement);\r\n break;\r\n }\r\n case NodeKind.CONTINUE: {\r\n stmt = this.compileContinueStatement(statement);\r\n break;\r\n }\r\n case NodeKind.DO: {\r\n stmt = this.compileDoStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EMPTY: {\r\n stmt = this.compileEmptyStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EXPRESSION: {\r\n stmt = this.compileExpressionStatement(statement);\r\n break;\r\n }\r\n case NodeKind.FOR: {\r\n stmt = this.compileForStatement(statement);\r\n break;\r\n }\r\n case NodeKind.IF: {\r\n stmt = this.compileIfStatement(statement);\r\n break;\r\n }\r\n case NodeKind.RETURN: {\r\n stmt = this.compileReturnStatement(statement);\r\n break;\r\n }\r\n case NodeKind.SWITCH: {\r\n stmt = this.compileSwitchStatement(statement);\r\n break;\r\n }\r\n case NodeKind.THROW: {\r\n stmt = this.compileThrowStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TRY: {\r\n stmt = this.compileTryStatement(statement);\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n stmt = this.compileVariableStatement(statement);\r\n if (!stmt) stmt = module.createNop();\r\n break;\r\n }\r\n case NodeKind.VOID: {\r\n stmt = this.compileVoidStatement(statement);\r\n break;\r\n }\r\n case NodeKind.WHILE: {\r\n stmt = this.compileWhileStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n // type declarations must be top-level because function bodies are evaluated when\r\n // reachaable only.\r\n if (this.currentFunction == this.startFunctionInstance) {\r\n return module.createNop();\r\n }\r\n // otherwise fall-through\r\n }\r\n default: {\r\n assert(false);\r\n stmt = module.createUnreachable();\r\n }\r\n }\r\n if (this.options.sourceMap) this.addDebugLocation(stmt, statement.range);\r\n return stmt;\r\n }\r\n\r\n compileStatements(statements: Statement[]): ExpressionRef[] {\r\n var numStatements = statements.length;\r\n var stmts = new Array(numStatements);\r\n stmts.length = 0;\r\n var flow = this.currentFunction.flow;\r\n for (let i = 0; i < numStatements; ++i) {\r\n let stmt = this.compileStatement(statements[i]);\r\n switch (getExpressionId(stmt)) {\r\n case ExpressionId.Block: {\r\n if (!getBlockName(stmt)) {\r\n for (let j = 0, k = getBlockChildCount(stmt); j < k; ++j) stmts.push(getBlockChild(stmt, j));\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: stmts.push(stmt);\r\n case ExpressionId.Nop:\r\n }\r\n if (flow.isAny(FlowFlags.ANY_TERMINATING)) {\r\n if (needsExplicitUnreachable(stmt)) stmts.push(this.module.createUnreachable());\r\n break;\r\n }\r\n }\r\n return stmts;\r\n }\r\n\r\n compileBlockStatement(statement: BlockStatement): ExpressionRef {\r\n var statements = statement.statements;\r\n var parentFlow = this.currentFunction.flow;\r\n var flow = parentFlow.fork();\r\n this.currentFunction.flow = flow;\r\n\r\n var stmts = this.compileStatements(statements);\r\n var stmt = stmts.length == 0\r\n ? this.module.createNop()\r\n : stmts.length == 1\r\n ? stmts[0]\r\n : this.module.createBlock(null, stmts,getExpressionType(stmts[stmts.length - 1]));\r\n\r\n this.currentFunction.flow = flow.free();\r\n parentFlow.inherit(flow);\r\n return stmt;\r\n }\r\n\r\n compileBreakStatement(statement: BreakStatement): ExpressionRef {\r\n var module = this.module;\r\n if (statement.label) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.label.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n var flow = this.currentFunction.flow;\r\n var breakLabel = flow.breakLabel;\r\n if (breakLabel == null) {\r\n this.error(\r\n DiagnosticCode.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement,\r\n statement.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n flow.set(FlowFlags.BREAKS);\r\n return module.createBreak(breakLabel);\r\n }\r\n\r\n compileContinueStatement(statement: ContinueStatement): ExpressionRef {\r\n var module = this.module;\r\n var label = statement.label;\r\n if (label) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n label.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // Check if 'continue' is allowed here\r\n var flow = this.currentFunction.flow;\r\n var continueLabel = flow.continueLabel;\r\n if (continueLabel == null) {\r\n this.error(\r\n DiagnosticCode.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement,\r\n statement.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n flow.set(FlowFlags.CONTINUES);\r\n return module.createBreak(continueLabel);\r\n }\r\n\r\n compileDoStatement(statement: DoStatement): ExpressionRef {\r\n var currentFunction = this.currentFunction;\r\n var module = this.module;\r\n\r\n var label = currentFunction.enterBreakContext();\r\n var parentFlow = currentFunction.flow;\r\n var flow = parentFlow.fork();\r\n currentFunction.flow = flow;\r\n var breakLabel = \"break|\" + label;\r\n flow.breakLabel = breakLabel;\r\n var continueLabel = \"continue|\" + label;\r\n flow.continueLabel = continueLabel;\r\n\r\n var body = this.compileStatement(statement.statement);\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE, WrapMode.NONE),\r\n this.currentType\r\n );\r\n // TODO: check if condition is always false and if so, omit it (just a block)\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.free();\r\n currentFunction.leaveBreakContext();\r\n var terminated = flow.isAny(FlowFlags.ANY_TERMINATING);\r\n flow.unset(\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONDITIONALLY_BREAKS |\r\n FlowFlags.CONTINUES |\r\n FlowFlags.CONDITIONALLY_CONTINUES\r\n );\r\n parentFlow.inherit(flow);\r\n\r\n var block: ExpressionRef[] = [\r\n module.createLoop(continueLabel,\r\n terminated\r\n ? body // skip trailing continue if unnecessary\r\n : module.createBlock(null, [\r\n body,\r\n module.createBreak(continueLabel, condExpr)\r\n ], NativeType.None)\r\n )\r\n ];\r\n if (terminated) block.push(module.createUnreachable());\r\n return module.createBlock(breakLabel, block);\r\n }\r\n\r\n compileEmptyStatement(statement: EmptyStatement): ExpressionRef {\r\n return this.module.createNop();\r\n }\r\n\r\n compileExpressionStatement(statement: ExpressionStatement): ExpressionRef {\r\n var expr = this.compileExpression(statement.expression, Type.void, ConversionKind.NONE, WrapMode.NONE);\r\n if (this.currentType != Type.void) {\r\n expr = this.module.createDrop(expr);\r\n this.currentType = Type.void;\r\n }\r\n return expr;\r\n }\r\n\r\n compileForStatement(statement: ForStatement): ExpressionRef {\r\n // A for statement initiates a new branch with its own scoped variables\r\n // possibly declared in its initializer, and break context.\r\n var currentFunction = this.currentFunction;\r\n var label = currentFunction.enterBreakContext();\r\n var parentFlow = currentFunction.flow;\r\n var flow = parentFlow.fork();\r\n currentFunction.flow = flow;\r\n var breakLabel = flow.breakLabel = \"break|\" + label;\r\n flow.breakLabel = breakLabel;\r\n var continueLabel = \"continue|\" + label;\r\n flow.continueLabel = continueLabel;\r\n var repeatLabel = \"repeat|\" + label;\r\n\r\n // Compile in correct order\r\n var module = this.module;\r\n var initExpr = statement.initializer\r\n ? this.compileStatement(statement.initializer)\r\n : 0;\r\n var condExpr: ExpressionRef = 0;\r\n var alwaysTrue = false;\r\n if (statement.condition) {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n // check if the condition is always true\r\n let condPre = module.precomputeExpression(condExpr);\r\n if (getExpressionId(condPre) == ExpressionId.Const) {\r\n assert(getExpressionType(condPre) == NativeType.I32);\r\n if (getConstValueI32(condPre) != 0) alwaysTrue = true;\r\n // TODO: could skip compilation if the condition is always false here, but beware that the\r\n // initializer could still declare new 'var's that are used later on.\r\n }\r\n // recompile to original\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n } else {\r\n // omitted condition is always true\r\n condExpr = module.createI32(1);\r\n alwaysTrue = true;\r\n }\r\n var incrExpr = statement.incrementor\r\n ? this.compileExpression(statement.incrementor, Type.void, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : 0;\r\n var bodyStatement = statement.statement;\r\n var bodyExpr = bodyStatement.kind == NodeKind.BLOCK && (bodyStatement).statements.length == 1\r\n ? this.compileStatement((bodyStatement).statements[0])\r\n : this.compileStatement(bodyStatement);\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.free();\r\n currentFunction.leaveBreakContext();\r\n var usesContinue = flow.isAny(FlowFlags.CONTINUES | FlowFlags.CONDITIONALLY_CONTINUES);\r\n flow.unset(\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONDITIONALLY_BREAKS |\r\n FlowFlags.CONTINUES |\r\n FlowFlags.CONDITIONALLY_CONTINUES\r\n );\r\n if (alwaysTrue) parentFlow.inherit(flow);\r\n else parentFlow.inheritConditional(flow);\r\n\r\n var breakBlock = new Array(); // outer 'break' block\r\n if (initExpr) breakBlock.push(initExpr);\r\n\r\n var repeatBlock = new Array(); // block repeating the loop\r\n if (usesContinue) {\r\n repeatBlock.push(\r\n module.createBlock(continueLabel, [ // inner 'continue' block\r\n module.createBreak(breakLabel, module.createUnary(UnaryOp.EqzI32, condExpr)),\r\n bodyExpr\r\n ], NativeType.None)\r\n );\r\n } else { // can omit the 'continue' block\r\n repeatBlock.push(\r\n module.createBreak(breakLabel, module.createUnary(UnaryOp.EqzI32, condExpr))\r\n );\r\n repeatBlock.push(bodyExpr);\r\n }\r\n if (incrExpr) repeatBlock.push(incrExpr);\r\n repeatBlock.push(\r\n module.createBreak(repeatLabel)\r\n );\r\n\r\n breakBlock.push(\r\n module.createLoop(repeatLabel, module.createBlock(null, repeatBlock, NativeType.None))\r\n );\r\n\r\n return module.createBlock(breakLabel, breakBlock);\r\n }\r\n\r\n compileIfStatement(statement: IfStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var ifTrue = statement.ifTrue;\r\n var ifFalse = statement.ifFalse;\r\n\r\n // The condition doesn't initiate a branch yet\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n\r\n if (\r\n !this.options.noTreeShaking ||\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT)\r\n ) {\r\n // Try to eliminate unnecesssary branches if the condition is constant\r\n let condExprPrecomp = module.precomputeExpression(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n return getConstValueI32(condExprPrecomp)\r\n ? this.compileStatement(ifTrue)\r\n : ifFalse\r\n ? this.compileStatement(ifFalse)\r\n : module.createNop();\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n // Each arm initiates a branch\r\n var parentFlow = currentFunction.flow;\r\n var ifTrueFlow = parentFlow.fork();\r\n currentFunction.flow = ifTrueFlow;\r\n var ifTrueExpr = this.compileStatement(ifTrue);\r\n currentFunction.flow = ifTrueFlow.free();\r\n\r\n var ifFalseExpr: ExpressionRef = 0;\r\n if (ifFalse) {\r\n let ifFalseFlow = parentFlow.fork();\r\n currentFunction.flow = ifFalseFlow;\r\n ifFalseExpr = this.compileStatement(ifFalse);\r\n currentFunction.flow = ifFalseFlow.free();\r\n parentFlow.inheritMutual(ifTrueFlow, ifFalseFlow);\r\n } else {\r\n parentFlow.inheritConditional(ifTrueFlow);\r\n }\r\n return module.createIf(condExpr, ifTrueExpr, ifFalseExpr);\r\n }\r\n\r\n compileReturnStatement(statement: ReturnStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var expr: ExpressionRef = 0;\r\n var flow = currentFunction.flow;\r\n\r\n // Remember that this flow returns\r\n flow.set(FlowFlags.RETURNS);\r\n\r\n if (statement.value) {\r\n let returnType = flow.returnType;\r\n if (returnType == Type.void) {\r\n this.compileExpressionRetainType(statement.value, returnType, WrapMode.NONE);\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n statement.value.range, this.currentType.toString(), returnType.toString()\r\n );\r\n this.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n expr = this.compileExpression(\r\n statement.value,\r\n returnType,\r\n ConversionKind.IMPLICIT,\r\n currentFunction.is(CommonFlags.MODULE_EXPORT)\r\n ? WrapMode.WRAP\r\n : WrapMode.NONE\r\n );\r\n\r\n // Remember whether returning a properly wrapped value\r\n if (!flow.canOverflow(expr, returnType)) flow.set(FlowFlags.RETURNS_WRAPPED);\r\n }\r\n\r\n // If the last statement anyway, make it the block's return value\r\n if (isLastStatement(statement)) return expr ? expr : module.createNop();\r\n\r\n // When inlining, break to the end of the inlined function's block (no need to wrap)\r\n return flow.is(FlowFlags.INLINE_CONTEXT)\r\n ? module.createBreak(assert(flow.returnLabel), 0, expr)\r\n : module.createReturn(expr);\r\n }\r\n\r\n compileSwitchStatement(statement: SwitchStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n var cases = statement.cases;\r\n var numCases = cases.length;\r\n if (!numCases) {\r\n return this.compileExpression(statement.condition, Type.void, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n }\r\n\r\n // Everything within a switch uses the same break context\r\n var context = currentFunction.enterBreakContext();\r\n var parentFlow = currentFunction.flow;\r\n\r\n // introduce a local for evaluating the condition (exactly once)\r\n var tempLocal = currentFunction.getTempLocal(Type.u32, false);\r\n var tempLocalIndex = tempLocal.index;\r\n\r\n // Prepend initializer to inner block. Does not initiate a new branch, yet.\r\n var breaks = new Array(1 + numCases);\r\n breaks[0] = module.createSetLocal( // initializer\r\n tempLocalIndex,\r\n this.compileExpression(statement.condition, Type.u32, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n );\r\n\r\n // make one br_if per (possibly dynamic) labeled case (binaryen optimizes to br_table where possible)\r\n var breakIndex = 1;\r\n var defaultIndex = -1;\r\n for (let i = 0; i < numCases; ++i) {\r\n let case_ = cases[i];\r\n let label = case_.label;\r\n if (label) {\r\n breaks[breakIndex++] = module.createBreak(\"case\" + i.toString(10) + \"|\" + context,\r\n module.createBinary(BinaryOp.EqI32,\r\n module.createGetLocal(tempLocalIndex, NativeType.I32),\r\n this.compileExpression(label, Type.u32, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n )\r\n );\r\n } else {\r\n defaultIndex = i;\r\n }\r\n }\r\n\r\n currentFunction.freeTempLocal(tempLocal);\r\n\r\n // otherwise br to default respectively out of the switch if there is no default case\r\n breaks[breakIndex] = module.createBreak((defaultIndex >= 0\r\n ? \"case\" + defaultIndex.toString(10)\r\n : \"break\"\r\n ) + \"|\" + context);\r\n\r\n // nest blocks in order\r\n var currentBlock = module.createBlock(\"case0|\" + context, breaks, NativeType.None);\r\n var alwaysReturns = true;\r\n var alwaysReturnsWrapped = true;\r\n var alwaysThrows = true;\r\n var alwaysAllocates = true;\r\n for (let i = 0; i < numCases; ++i) {\r\n let case_ = cases[i];\r\n let statements = case_.statements;\r\n let numStatements = statements.length;\r\n\r\n // Each switch case initiates a new branch\r\n let flow = parentFlow.fork();\r\n currentFunction.flow = flow;\r\n let breakLabel = \"break|\" + context;\r\n flow.breakLabel = breakLabel;\r\n\r\n let isLast = i == numCases - 1;\r\n let nextLabel = isLast ? breakLabel : \"case\" + (i + 1).toString(10) + \"|\" + context;\r\n let stmts = new Array(1 + numStatements);\r\n stmts[0] = currentBlock;\r\n let count = 1;\r\n let terminated = false;\r\n for (let j = 0; j < numStatements; ++j) {\r\n let stmt = this.compileStatement(statements[j]);\r\n if (getExpressionId(stmt) != ExpressionId.Nop) {\r\n stmts[count++] = stmt;\r\n if (flow.isAny(FlowFlags.ANY_TERMINATING)) {\r\n terminated = true;\r\n break;\r\n }\r\n }\r\n }\r\n stmts.length = count;\r\n if (terminated || isLast) {\r\n if (!flow.is(FlowFlags.RETURNS)) alwaysReturns = false;\r\n if (!flow.is(FlowFlags.RETURNS_WRAPPED)) alwaysReturnsWrapped = false;\r\n if (!flow.is(FlowFlags.THROWS)) alwaysThrows = false;\r\n if (!flow.is(FlowFlags.ALLOCATES)) alwaysAllocates = false;\r\n }\r\n\r\n // Switch back to the parent flow\r\n flow.unset(\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONDITIONALLY_BREAKS\r\n );\r\n currentFunction.flow = flow.free();\r\n currentBlock = module.createBlock(nextLabel, stmts, NativeType.None); // must be a labeled block\r\n }\r\n currentFunction.leaveBreakContext();\r\n\r\n // If the switch has a default (guaranteed to handle any value), propagate common flags\r\n if (defaultIndex >= 0) {\r\n if (alwaysReturns) parentFlow.set(FlowFlags.RETURNS);\r\n if (alwaysReturnsWrapped) parentFlow.set(FlowFlags.RETURNS_WRAPPED);\r\n if (alwaysThrows) parentFlow.set(FlowFlags.THROWS);\r\n if (alwaysAllocates) parentFlow.set(FlowFlags.ALLOCATES);\r\n }\r\n return currentBlock;\r\n }\r\n\r\n compileThrowStatement(statement: ThrowStatement): ExpressionRef {\r\n var flow = this.currentFunction.flow;\r\n\r\n // Remember that this branch throws\r\n flow.set(FlowFlags.THROWS);\r\n\r\n // FIXME: without try-catch it is safe to assume RETURNS as well for now\r\n flow.set(FlowFlags.RETURNS);\r\n\r\n // TODO: requires exception-handling spec.\r\n return compileAbort(this, null, statement);\r\n }\r\n\r\n compileTryStatement(statement: TryStatement): ExpressionRef {\r\n // TODO\r\n // can't yet support something like: try { return ... } finally { ... }\r\n // worthwhile to investigate lowering returns to block results (here)?\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n /**\r\n * Compiles a variable statement. Returns `0` if an initializer is not\r\n * necessary.\r\n */\r\n compileVariableStatement(statement: VariableStatement, isKnownGlobal: bool = false): ExpressionRef {\r\n var program = this.program;\r\n var currentFunction = this.currentFunction;\r\n var declarations = statement.declarations;\r\n var numDeclarations = declarations.length;\r\n\r\n // top-level variables and constants become globals\r\n if (isKnownGlobal || (\r\n currentFunction == this.startFunctionInstance &&\r\n statement.parent && statement.parent.kind == NodeKind.SOURCE\r\n )) {\r\n // NOTE that the above condition also covers top-level variables declared with 'let', even\r\n // though such variables could also become start function locals if, and only if, not used\r\n // within any function declared in the same source, which is unknown at this point. the only\r\n // efficient way to deal with this would be to keep track of all occasions it is used and\r\n // replace these instructions afterwards, dynamically. (TOOD: what about a Binaryen pass?)\r\n for (let i = 0; i < numDeclarations; ++i) {\r\n this.compileGlobalDeclaration(declarations[i]);\r\n }\r\n return 0;\r\n }\r\n\r\n // other variables become locals\r\n var initializers = new Array();\r\n var flow = this.currentFunction.flow;\r\n var resolver = this.resolver;\r\n for (let i = 0; i < numDeclarations; ++i) {\r\n let declaration = declarations[i];\r\n let name = declaration.name.text;\r\n let type: Type | null = null;\r\n let initExpr: ExpressionRef = 0;\r\n if (declaration.type) {\r\n type = resolver.resolveType( // reports\r\n declaration.type,\r\n flow.contextualTypeArguments\r\n );\r\n if (!type) continue;\r\n if (declaration.initializer) {\r\n initExpr = this.compileExpression( // reports\r\n declaration.initializer,\r\n type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n } else if (declaration.initializer) { // infer type using void/NONE for proper literal inference\r\n initExpr = this.compileExpressionRetainType( // reports\r\n declaration.initializer,\r\n Type.void,\r\n WrapMode.NONE\r\n );\r\n if (this.currentType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.range, this.currentType.toString(), \"\"\r\n );\r\n continue;\r\n }\r\n type = this.currentType;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.name.range.atEnd\r\n );\r\n continue;\r\n }\r\n let isInlined = false;\r\n if (declaration.is(CommonFlags.CONST)) {\r\n if (initExpr) {\r\n initExpr = this.module.precomputeExpression(initExpr);\r\n if (getExpressionId(initExpr) == ExpressionId.Const) {\r\n let local = new Local(program, name, -1, type);\r\n switch (getExpressionType(initExpr)) {\r\n case NativeType.I32: {\r\n local = local.withConstantIntegerValue(\r\n i64_new(\r\n getConstValueI32(initExpr),\r\n 0\r\n )\r\n );\r\n break;\r\n }\r\n case NativeType.I64: {\r\n local = local.withConstantIntegerValue(\r\n i64_new(\r\n getConstValueI64Low(initExpr),\r\n getConstValueI64High(initExpr)\r\n )\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n local = local.withConstantFloatValue(getConstValueF32(initExpr));\r\n break;\r\n }\r\n case NativeType.F64: {\r\n local = local.withConstantFloatValue(getConstValueF64(initExpr));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n // Create a virtual local that doesn't actually exist in WebAssembly\r\n let scopedLocals = currentFunction.flow.scopedLocals;\r\n if (!scopedLocals) currentFunction.flow.scopedLocals = scopedLocals = new Map();\r\n else if (scopedLocals.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, name\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n scopedLocals.set(name, local);\r\n isInlined = true;\r\n } else {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n declaration.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._const_declarations_must_be_initialized,\r\n declaration.range\r\n );\r\n }\r\n }\r\n if (!isInlined) {\r\n let local: Local;\r\n if (\r\n declaration.isAny(CommonFlags.LET | CommonFlags.CONST) ||\r\n flow.is(FlowFlags.INLINE_CONTEXT)\r\n ) { // here: not top-level\r\n local = flow.addScopedLocal(type, name, false, declaration); // reports\r\n } else {\r\n local = currentFunction.addLocal(type, name, declaration); // reports\r\n }\r\n if (initExpr) {\r\n initializers.push(this.compileAssignmentWithValue(declaration.name, initExpr));\r\n if (local.type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped(local.index, !flow.canOverflow(initExpr, type));\r\n }\r\n } else if (local.type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped(local.index, true); // zero\r\n }\r\n }\r\n }\r\n return initializers.length // we can unwrap these here because the\r\n ? initializers.length == 1 // source didn't tell us exactly what to do\r\n ? initializers[0]\r\n : this.module.createBlock(null, initializers, NativeType.None)\r\n : 0;\r\n }\r\n\r\n compileVoidStatement(statement: VoidStatement): ExpressionRef {\r\n return this.compileExpression(statement.expression, Type.void, ConversionKind.EXPLICIT, WrapMode.NONE);\r\n }\r\n\r\n compileWhileStatement(statement: WhileStatement): ExpressionRef {\r\n var module = this.module;\r\n\r\n // The condition does not yet initialize a branch\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n\r\n if (\r\n !this.options.noTreeShaking ||\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT)\r\n ) {\r\n // Try to eliminate unnecesssary loops if the condition is constant\r\n let condExprPrecomp = module.precomputeExpression(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n if (!getConstValueI32(condExprPrecomp)) return module.createNop();\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n // Statements initiate a new branch with its own break context\r\n var currentFunction = this.currentFunction;\r\n var label = currentFunction.enterBreakContext();\r\n var parentFlow = currentFunction.flow;\r\n var flow = parentFlow.fork();\r\n currentFunction.flow = flow;\r\n var breakLabel = \"break|\" + label;\r\n flow.breakLabel = breakLabel;\r\n var continueLabel = \"continue|\" + label;\r\n flow.continueLabel = continueLabel;\r\n\r\n var body = this.compileStatement(statement.statement);\r\n var alwaysTrue = false; // TODO\r\n var terminated = flow.isAny(FlowFlags.ANY_TERMINATING);\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.free();\r\n currentFunction.leaveBreakContext();\r\n flow.unset(\r\n FlowFlags.BREAKS |\r\n FlowFlags.CONDITIONALLY_BREAKS |\r\n FlowFlags.CONTINUES |\r\n FlowFlags.CONDITIONALLY_CONTINUES\r\n );\r\n if (alwaysTrue) parentFlow.inherit(flow);\r\n else parentFlow.inheritConditional(flow);\r\n\r\n return module.createBlock(breakLabel, [\r\n module.createLoop(continueLabel,\r\n module.createIf(condExpr,\r\n terminated\r\n ? body // skip trailing continue if unnecessary\r\n : module.createBlock(null, [\r\n body,\r\n module.createBreak(continueLabel)\r\n ], NativeType.None)\r\n )\r\n )\r\n ]);\r\n }\r\n\r\n // expressions\r\n\r\n /**\r\n * Compiles the value of an inlined constant element.\r\n * @param retainType If true, the annotated type of the constant is retained. Otherwise, the value\r\n * is precomputed according to context.\r\n */\r\n compileInlineConstant(\r\n element: VariableLikeElement,\r\n contextualType: Type,\r\n retainType: bool\r\n ): ExpressionRef {\r\n assert(element.is(CommonFlags.INLINED));\r\n var type = element.type;\r\n switch (\r\n !retainType &&\r\n type.is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n type.size < contextualType.size\r\n ? (this.currentType = contextualType).kind // essentially precomputes a (sign-)extension\r\n : (this.currentType = type).kind\r\n ) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n let shift = type.computeSmallIntegerShift(Type.i32);\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue) << shift >> shift\r\n : 0\r\n ); // recognized by canOverflow\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n let mask = element.type.computeSmallIntegerMask(Type.i32);\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue) & mask\r\n : 0\r\n ); // recognized by canOverflow\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue)\r\n : 0\r\n );\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n if (!element.program.options.isWasm64) {\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue)\r\n : 0\r\n );\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return element.constantValueKind == ConstantValueKind.INTEGER\r\n ? this.module.createI64(\r\n i64_low(element.constantIntegerValue),\r\n i64_high(element.constantIntegerValue)\r\n )\r\n : this.module.createI64(0);\r\n }\r\n case TypeKind.F64: {\r\n // monkey-patch for converting built-in floats to f32 implicitly\r\n if (!(element.hasDecorator(DecoratorFlags.BUILTIN) && contextualType == Type.f32)) {\r\n return this.module.createF64((element).constantFloatValue);\r\n }\r\n // otherwise fall-through: basically precomputes f32.demote/f64 of NaN / Infinity\r\n this.currentType = Type.f32;\r\n }\r\n case TypeKind.F32: {\r\n return this.module.createF32((element).constantFloatValue);\r\n }\r\n default: {\r\n assert(false);\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n }\r\n\r\n compileExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n this.currentType = contextualType;\r\n\r\n var expr: ExpressionRef;\r\n switch (expression.kind) {\r\n case NodeKind.ASSERTION: {\r\n expr = this.compileAssertionExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.BINARY: {\r\n expr = this.compileBinaryExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.CALL: {\r\n expr = this.compileCallExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.COMMA: {\r\n expr = this.compileCommaExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.ELEMENTACCESS: {\r\n expr = this.compileElementAccessExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.FUNCTION: {\r\n expr = this.compileFunctionExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.FALSE:\r\n case NodeKind.NULL:\r\n case NodeKind.THIS:\r\n case NodeKind.SUPER:\r\n case NodeKind.TRUE: {\r\n expr = this.compileIdentifierExpression(\r\n expression,\r\n contextualType,\r\n conversionKind == ConversionKind.NONE // retain type of inlined constants\r\n );\r\n break;\r\n }\r\n case NodeKind.INSTANCEOF: {\r\n expr = this.compileInstanceOfExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.LITERAL: {\r\n expr = this.compileLiteralExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.NEW: {\r\n expr = this.compileNewExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.PARENTHESIZED: {\r\n expr = this.compileParenthesizedExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.PROPERTYACCESS: {\r\n expr = this.compilePropertyAccessExpression(\r\n expression,\r\n contextualType,\r\n conversionKind == ConversionKind.NONE // retain type of inlined constants\r\n );\r\n break;\r\n }\r\n case NodeKind.TERNARY: {\r\n expr = this.compileTernaryExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.UNARYPOSTFIX: {\r\n expr = this.compileUnaryPostfixExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.UNARYPREFIX: {\r\n expr = this.compileUnaryPrefixExpression(expression, contextualType);\r\n break;\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = this.module.createUnreachable();\r\n }\r\n }\r\n\r\n var currentType = this.currentType;\r\n if (conversionKind != ConversionKind.NONE && currentType != contextualType) {\r\n expr = this.convertExpression(expr, currentType, contextualType, conversionKind, wrapMode, expression);\r\n this.currentType = contextualType;\r\n } else if (wrapMode == WrapMode.WRAP) {\r\n expr = this.ensureSmallIntegerWrap(expr, currentType);\r\n }\r\n\r\n if (this.options.sourceMap) this.addDebugLocation(expr, expression.range);\r\n return expr;\r\n }\r\n\r\n compileExpressionRetainType(\r\n expression: Expression,\r\n contextualType: Type,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n return this.compileExpression(\r\n expression,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n wrapMode\r\n );\r\n }\r\n\r\n precomputeExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n return this.module.precomputeExpression(\r\n this.compileExpression(expression, contextualType, conversionKind, wrapMode)\r\n );\r\n }\r\n\r\n convertExpression(\r\n expr: ExpressionRef,\r\n fromType: Type,\r\n toType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n assert(conversionKind != ConversionKind.NONE);\r\n var module = this.module;\r\n\r\n // void to any\r\n if (fromType.kind == TypeKind.VOID) {\r\n assert(toType.kind != TypeKind.VOID); // convertExpression should not be called with void -> void\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n reportNode.range, fromType.toString(), toType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // any to void\r\n if (toType.kind == TypeKind.VOID) return module.createDrop(expr);\r\n\r\n if (!fromType.isAssignableTo(toType)) {\r\n if (conversionKind == ConversionKind.IMPLICIT) {\r\n this.error(\r\n DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast,\r\n reportNode.range, fromType.toString(), toType.toString()\r\n ); // recoverable\r\n }\r\n }\r\n\r\n if (fromType.is(TypeFlags.FLOAT)) {\r\n\r\n // float to float\r\n if (toType.is(TypeFlags.FLOAT)) {\r\n if (fromType.kind == TypeKind.F32) {\r\n\r\n // f32 to f64\r\n if (toType.kind == TypeKind.F64) {\r\n expr = module.createUnary(UnaryOp.PromoteF32, expr);\r\n }\r\n\r\n // otherwise f32 to f32\r\n\r\n // f64 to f32\r\n } else if (toType.kind == TypeKind.F32) {\r\n expr = module.createUnary(UnaryOp.DemoteF64, expr);\r\n }\r\n\r\n // otherwise f64 to f64\r\n\r\n // float to int\r\n } else if (toType.is(TypeFlags.INTEGER)) {\r\n\r\n // f32 to int\r\n if (fromType.kind == TypeKind.F32) {\r\n if (toType.is(TypeFlags.SIGNED)) {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF32ToI64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF32ToI32, expr);\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF32ToU64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF32ToU32, expr);\r\n }\r\n }\r\n\r\n // f64 to int\r\n } else {\r\n if (toType.is(TypeFlags.SIGNED)) {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF64ToI64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF64ToI32, expr);\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF64ToU64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF64ToU32, expr);\r\n }\r\n }\r\n }\r\n\r\n // float to void\r\n } else {\r\n assert(toType.flags == TypeFlags.NONE, \"void type expected\");\r\n expr = module.createDrop(expr);\r\n }\r\n\r\n // int to float\r\n } else if (fromType.is(TypeFlags.INTEGER) && toType.is(TypeFlags.FLOAT)) {\r\n\r\n // int to f32\r\n if (toType.kind == TypeKind.F32) {\r\n if (fromType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI64ToF32\r\n : UnaryOp.ConvertU64ToF32,\r\n expr\r\n );\r\n } else {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI32ToF32\r\n : UnaryOp.ConvertU32ToF32,\r\n expr\r\n );\r\n }\r\n\r\n // int to f64\r\n } else {\r\n if (fromType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI64ToF64\r\n : UnaryOp.ConvertU64ToF64,\r\n expr\r\n );\r\n } else {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI32ToF64\r\n : UnaryOp.ConvertU32ToF64,\r\n expr\r\n );\r\n }\r\n }\r\n\r\n // int to int\r\n } else {\r\n // i64 to ...\r\n if (fromType.is(TypeFlags.LONG)) {\r\n\r\n // i64 to i32 or smaller\r\n if (!toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.WrapI64, expr); // discards upper bits\r\n }\r\n\r\n // i32 or smaller to i64\r\n } else if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED) ? UnaryOp.ExtendI32 : UnaryOp.ExtendU32,\r\n this.ensureSmallIntegerWrap(expr, fromType) // must clear garbage bits\r\n );\r\n wrapMode = WrapMode.NONE;\r\n\r\n // i32 to i32\r\n } else {\r\n // small i32 to ...\r\n if (fromType.is(TypeFlags.SHORT)) {\r\n // small i32 to larger i32\r\n if (fromType.size < toType.size) {\r\n expr = this.ensureSmallIntegerWrap(expr, fromType); // must clear garbage bits\r\n wrapMode = WrapMode.NONE;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.currentType = toType;\r\n return wrapMode == WrapMode.WRAP\r\n ? this.ensureSmallIntegerWrap(expr, toType)\r\n : expr;\r\n }\r\n\r\n compileAssertionExpression(expression: AssertionExpression, contextualType: Type): ExpressionRef {\r\n var toType = this.resolver.resolveType( // reports\r\n expression.toType,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!toType) return this.module.createUnreachable();\r\n return this.compileExpression(expression.expression, toType, ConversionKind.EXPLICIT, WrapMode.NONE);\r\n }\r\n\r\n private f32ModInstance: Function | null = null;\r\n private f64ModInstance: Function | null = null;\r\n private f32PowInstance: Function | null = null;\r\n private f64PowInstance: Function | null = null;\r\n\r\n compileBinaryExpression(\r\n expression: BinaryExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var left = expression.left;\r\n var right = expression.right;\r\n\r\n var leftExpr: ExpressionRef;\r\n var leftType: Type;\r\n var rightExpr: ExpressionRef;\r\n var rightType: Type;\r\n var commonType: Type | null;\r\n\r\n var expr: ExpressionRef;\r\n var compound = false;\r\n\r\n var operator = expression.operator;\r\n switch (operator) {\r\n case Token.LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.LT);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"<\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.LtI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.LtI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtI64\r\n : BinaryOp.LtI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.LtU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtU64\r\n : BinaryOp.LtU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.LtU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.LtF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.LtF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.GT);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \">\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.GtI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.GtI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.GtU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtU64\r\n : BinaryOp.GtU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.GtU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.GtF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.GtF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.LESSTHAN_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.LE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"<=\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.LeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeI64\r\n : BinaryOp.LeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.LeI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.LeU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeU64\r\n : BinaryOp.LeU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.LeU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.LeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.LeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.GREATERTHAN_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.GE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \">=\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.GeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeI64\r\n : BinaryOp.GeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.GeI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.GeU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeU64\r\n : BinaryOp.GeU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.GeU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.GeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.GeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n\r\n case Token.EQUALS_EQUALS_EQUALS:\r\n case Token.EQUALS_EQUALS: {\r\n\r\n // NOTE that this favors correctness, in terms of emitting a binary expression, over\r\n // checking for a possible use of unary EQZ. while the most classic of all optimizations,\r\n // that's not what the source told us to do. for reference, `!left` emits unary EQZ.\r\n\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (operator == Token.EQUALS_EQUALS && this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.EQ);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n // still allow '==' with references\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, operatorTokenToString(expression.operator), leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.EqI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.EqI64\r\n : BinaryOp.EqI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.EqI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.EqF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.EqF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.EXCLAMATION_EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (operator == Token.EXCLAMATION_EQUALS && this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.NE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n // still allow '!=' with references\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, operatorTokenToString(expression.operator), leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.NeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.NeI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.NeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.NeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.EQUALS: {\r\n return this.compileAssignment(left, right, contextualType);\r\n }\r\n case Token.PLUS_EQUALS: compound = true;\r\n case Token.PLUS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.ADD);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"+\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // addition might overflow\r\n case TypeKind.I16: // ^\r\n case TypeKind.U8: // ^\r\n case TypeKind.U16: // ^\r\n case TypeKind.BOOL: // ^\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.AddI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AddI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.AddF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.AddF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_EQUALS: compound = true;\r\n case Token.MINUS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.SUB);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"-\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // subtraction might overflow\r\n case TypeKind.I16: // ^\r\n case TypeKind.U8: // ^\r\n case TypeKind.U16: // ^\r\n case TypeKind.BOOL: // ^\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.SubI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.SubF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.SubF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.ASTERISK_EQUALS: compound = true;\r\n case Token.ASTERISK: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.MUL);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"*\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.MulI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.MulI64\r\n : BinaryOp.MulI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.MulI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.MulF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.MulF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.ASTERISK_ASTERISK_EQUALS: compound = true;\r\n case Token.ASTERISK_ASTERISK: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.POW);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n let instance: Function | null;\r\n\r\n // Mathf.pow if lhs is f32 (result is f32)\r\n if (this.currentType.kind == TypeKind.F32) {\r\n rightExpr = this.compileExpression(right, Type.f32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (!(instance = this.f32PowInstance)) {\r\n let namespace = this.program.elementsLookup.get(\"Mathf\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"pow\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf.pow\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f32PowInstance = instance = this.resolver.resolveFunction(prototype, null);\r\n }\r\n\r\n // Math.pow otherwise (result is f64)\r\n // TODO: should the result be converted back?\r\n } else {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n this.currentType,\r\n Type.f64,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(\r\n right,\r\n Type.f64,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n rightType = this.currentType;\r\n if (!(instance = this.f64PowInstance)) {\r\n let namespace = this.program.elementsLookup.get(\"Math\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"pow\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math.pow\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f64PowInstance = instance = this.resolver.resolveFunction(prototype, null);\r\n }\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n case Token.SLASH_EQUALS: compound = true;\r\n case Token.SLASH: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.DIV);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"/\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // signed div on signed small integers might overflow, e.g. -128/-1\r\n case TypeKind.I16: // ^\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.DivI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivI64\r\n : BinaryOp.DivI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.DivI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.DivU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.DivU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivU64\r\n : BinaryOp.DivU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.DivU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.DivF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.DivF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.PERCENT_EQUALS: compound = true;\r\n case Token.PERCENT: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.REM);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"%\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n expr = module.createBinary(BinaryOp.RemI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.RemI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemI64\r\n : BinaryOp.RemI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.RemI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.RemU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.RemU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemU64\r\n : BinaryOp.RemU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.RemU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n let instance = this.f32ModInstance;\r\n if (!instance) {\r\n let namespace = this.program.elementsLookup.get(\"Mathf\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"mod\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf.mod\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f32ModInstance = instance = this.resolver.resolveFunction(prototype, null);\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n let instance = this.f64ModInstance;\r\n if (!instance) {\r\n let namespace = this.program.elementsLookup.get(\"Math\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"mod\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math.mod\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f64ModInstance = instance = this.resolver.resolveFunction(prototype, null);\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.LESSTHAN_LESSTHAN_EQUALS: compound = true;\r\n case Token.LESSTHAN_LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHL);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShlI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShlI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShlI64\r\n : BinaryOp.ShlI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS: compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType); // must clear garbage bits\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n expr = module.createBinary(BinaryOp.ShrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.ShrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.ShrI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrI64\r\n : BinaryOp.ShrI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShrU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS: compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHR_U);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType); // must clear garbage bits\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: { // assumes that unsigned shr on unsigned small integers does not overflow\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n }\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShrU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.AMPERSAND_EQUALS: compound = true;\r\n case Token.AMPERSAND: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overloadd\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_AND);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"&\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.AndI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AndI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AndI64\r\n : BinaryOp.AndI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.BAR_EQUALS: compound = true;\r\n case Token.BAR: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_OR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"|\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.OrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.OrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.OrI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.OrI64\r\n : BinaryOp.OrI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.CARET_EQUALS: compound = true;\r\n case Token.CARET: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_XOR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"^\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.XorI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.XorI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.XorI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n\r\n // logical (no overloading)\r\n\r\n case Token.AMPERSAND_AMPERSAND: { // left && right\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n\r\n // simplify if cloning left without side effects is possible\r\n if (expr = module.cloneExpression(leftExpr, true, 0)) {\r\n this.makeIsTrueish(leftExpr, this.currentType);\r\n expr = module.createIf(\r\n this.makeIsTrueish(leftExpr, this.currentType),\r\n rightExpr,\r\n expr\r\n );\r\n\r\n // if not possible, tee left to a temp. local\r\n } else {\r\n let flow = this.currentFunction.flow;\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(\r\n this.currentType,\r\n !flow.canOverflow(leftExpr, this.currentType)\r\n );\r\n expr = module.createIf(\r\n this.makeIsTrueish(\r\n module.createTeeLocal(tempLocal.index, leftExpr),\r\n this.currentType\r\n ),\r\n rightExpr,\r\n module.createGetLocal(\r\n assert(tempLocal).index, // to be sure\r\n this.currentType.toNativeType()\r\n )\r\n );\r\n }\r\n break;\r\n }\r\n case Token.BAR_BAR: { // left || right\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n\r\n // simplify if cloning left without side effects is possible\r\n if (expr = this.module.cloneExpression(leftExpr, true, 0)) {\r\n expr = this.module.createIf(\r\n this.makeIsTrueish(leftExpr, this.currentType),\r\n expr,\r\n rightExpr\r\n );\r\n\r\n // if not possible, tee left to a temp. local\r\n } else {\r\n let flow = this.currentFunction.flow;\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(\r\n this.currentType,\r\n !flow.canOverflow(leftExpr, this.currentType)\r\n );\r\n expr = module.createIf(\r\n this.makeIsTrueish(\r\n module.createTeeLocal(tempLocal.index, leftExpr),\r\n this.currentType\r\n ),\r\n module.createGetLocal(\r\n assert(tempLocal).index, // to be sure\r\n this.currentType.toNativeType()\r\n ),\r\n rightExpr\r\n );\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = this.module.createUnreachable();\r\n }\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(left, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n\r\n compileUnaryOverload(\r\n operatorInstance: Function,\r\n value: Expression,\r\n valueExpr: ExpressionRef,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n var argumentExpressions: Expression[];\r\n var thisArg: ExpressionRef = 0;\r\n if (operatorInstance.is(CommonFlags.INSTANCE)) {\r\n thisArg = valueExpr; // can reuse the previously evaluated expr as the this value here\r\n argumentExpressions = [];\r\n } else {\r\n argumentExpressions = [ value ]; // annotated type might differ -> recompile\r\n }\r\n return this.compileCallDirect(\r\n operatorInstance,\r\n argumentExpressions,\r\n reportNode,\r\n thisArg,\r\n operatorInstance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n }\r\n\r\n compileBinaryOverload(\r\n operatorInstance: Function,\r\n left: Expression,\r\n leftExpr: ExpressionRef,\r\n right: Expression,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n var argumentExpressions: Expression[];\r\n var thisArg: ExpressionRef = 0;\r\n if (operatorInstance.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(operatorInstance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n thisArg = leftExpr; // can reuse the previously evaluated leftExpr as the this value here\r\n argumentExpressions = [ right ];\r\n } else {\r\n argumentExpressions = [ left, right ]; // annotated type of LHS might differ -> recompile\r\n }\r\n var ret = this.compileCallDirect(\r\n operatorInstance,\r\n argumentExpressions,\r\n reportNode,\r\n thisArg,\r\n operatorInstance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n return ret;\r\n }\r\n\r\n compileAssignment(expression: Expression, valueExpression: Expression, contextualType: Type): ExpressionRef {\r\n var program = this.program;\r\n var resolver = program.resolver;\r\n var currentFunction = this.currentFunction;\r\n var target = resolver.resolveExpression(expression, currentFunction); // reports\r\n if (!target) return this.module.createUnreachable();\r\n\r\n // to compile just the value, we need to know the target's type\r\n var targetType: Type;\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field compiled as a global\r\n return this.module.createUnreachable();\r\n }\r\n assert((target).type != Type.void); // compileGlobal must guarantee this\r\n // fall-through\r\n }\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n targetType = (target).type;\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let setterPrototype = (target).setterPrototype;\r\n if (setterPrototype) {\r\n let instance = this.resolver.resolveFunction(setterPrototype, null);\r\n if (!instance) return this.module.createUnreachable();\r\n assert(instance.signature.parameterTypes.length == 1); // parser must guarantee this\r\n targetType = instance.signature.parameterTypes[0];\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n case ElementKind.CLASS: {\r\n if (resolver.currentElementExpression) { // indexed access\r\n let isUnchecked = currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);\r\n if (!indexedSet) {\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, (target).internalName\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, (target).internalName\r\n );\r\n }\r\n return this.module.createUnreachable();\r\n }\r\n assert(indexedSet.signature.parameterTypes.length == 2); // parser must guarantee this\r\n targetType = indexedSet.signature.parameterTypes[1]; // 2nd parameter is the element\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n\r\n // compile the value and do the assignment\r\n assert(targetType != Type.void);\r\n var valueExpr = this.compileExpression(valueExpression, targetType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n return this.compileAssignmentWithValue(\r\n expression,\r\n valueExpr,\r\n contextualType != Type.void\r\n );\r\n }\r\n\r\n compileAssignmentWithValue(\r\n expression: Expression,\r\n valueWithCorrectType: ExpressionRef,\r\n tee: bool = false\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var target = this.resolver.resolveExpression(expression, this.currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.LOCAL: {\r\n let type = (target).type;\r\n assert(type != Type.void);\r\n this.currentType = tee ? type : Type.void;\r\n if ((target).is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let flow = this.currentFunction.flow;\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped((target).index, !flow.canOverflow(valueWithCorrectType, type));\r\n }\r\n return tee\r\n ? module.createTeeLocal((target).index, valueWithCorrectType)\r\n : module.createSetLocal((target).index, valueWithCorrectType);\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) return module.createUnreachable();\r\n let type = (target).type;\r\n assert(type != Type.void);\r\n this.currentType = tee ? type : Type.void;\r\n if ((target).is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range,\r\n target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n valueWithCorrectType = this.ensureSmallIntegerWrap(valueWithCorrectType, type); // guaranteed\r\n if (tee) {\r\n let nativeType = type.toNativeType();\r\n let internalName = target.internalName;\r\n return module.createBlock(null, [ // emulated teeGlobal\r\n module.createSetGlobal(internalName, valueWithCorrectType),\r\n module.createGetGlobal(internalName, nativeType)\r\n ], nativeType);\r\n } else {\r\n return module.createSetGlobal(target.internalName, valueWithCorrectType);\r\n }\r\n }\r\n case ElementKind.FIELD: {\r\n const declaration = (target).declaration;\r\n if (\r\n (target).is(CommonFlags.READONLY) &&\r\n !(\r\n this.currentFunction.is(CommonFlags.CONSTRUCTOR) ||\r\n declaration == null ||\r\n declaration.initializer != null\r\n )\r\n ) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, (target).internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let thisExpression = assert(this.resolver.currentThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let type = (target).type;\r\n this.currentType = tee ? type : Type.void;\r\n let nativeType = type.toNativeType();\r\n if (type.kind == TypeKind.BOOL) {\r\n // make sure bools are wrapped (usually are) when storing as 8 bits\r\n valueWithCorrectType = this.ensureSmallIntegerWrap(valueWithCorrectType, type);\r\n }\r\n if (tee) {\r\n let currentFunction = this.currentFunction;\r\n let flow = currentFunction.flow;\r\n let tempLocal = currentFunction.getAndFreeTempLocal(\r\n type,\r\n !flow.canOverflow(valueWithCorrectType, type)\r\n );\r\n let tempLocalIndex = tempLocal.index;\r\n // TODO: simplify if valueWithCorrectType has no side effects\r\n // TODO: call __gc_link here if a GC is present\r\n return module.createBlock(null, [\r\n module.createSetLocal(tempLocalIndex, valueWithCorrectType),\r\n module.createStore(\r\n type.byteSize,\r\n thisExpr,\r\n module.createGetLocal(tempLocalIndex, nativeType),\r\n nativeType,\r\n (target).memoryOffset\r\n ),\r\n module.createGetLocal(tempLocalIndex, nativeType)\r\n ], nativeType);\r\n } else {\r\n // TODO: call __gc_link here if a GC is present\r\n return module.createStore(\r\n type.byteSize,\r\n thisExpr,\r\n valueWithCorrectType,\r\n nativeType,\r\n (target).memoryOffset\r\n );\r\n }\r\n }\r\n case ElementKind.PROPERTY: {\r\n let setterPrototype = (target).setterPrototype;\r\n if (setterPrototype) {\r\n let setterInstance = this.resolver.resolveFunction(setterPrototype, null);\r\n if (!setterInstance) return module.createUnreachable();\r\n\r\n // call just the setter if the return value isn't of interest\r\n if (!tee) {\r\n if (setterInstance.is(CommonFlags.INSTANCE)) {\r\n let thisExpression = assert(this.resolver.currentThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n return this.makeCallDirect(setterInstance, [ thisExpr, valueWithCorrectType ]);\r\n } else {\r\n return this.makeCallDirect(setterInstance, [ valueWithCorrectType ]);\r\n }\r\n }\r\n\r\n // otherwise call the setter first, then the getter\r\n let getterPrototype = (target).getterPrototype;\r\n assert(getterPrototype != null); // must have one if there is a setter\r\n let getterInstance = this.resolver.resolveFunction(getterPrototype, null);\r\n if (!getterInstance) return module.createUnreachable();\r\n let returnType = getterInstance.signature.returnType;\r\n let nativeReturnType = returnType.toNativeType();\r\n if (setterInstance.is(CommonFlags.INSTANCE)) {\r\n let thisExpression = assert(this.resolver.currentThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(returnType, false);\r\n let tempLocalIndex = tempLocal.index;\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ // set and remember the target\r\n module.createTeeLocal(tempLocalIndex, thisExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(getterInstance, [ // get from remembered target\r\n module.createGetLocal(tempLocalIndex, nativeReturnType)\r\n ])\r\n ], nativeReturnType);\r\n } else {\r\n // note that this must be performed here because `resolved` is shared\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ valueWithCorrectType ]),\r\n this.makeCallDirect(getterInstance)\r\n ], nativeReturnType);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, target.internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n case ElementKind.CLASS: {\r\n let elementExpression = this.resolver.currentElementExpression;\r\n if (elementExpression) {\r\n let isUnchecked = this.currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);\r\n if (!indexedSet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, target.internalName\r\n );\r\n this.currentType = tee ? indexedGet.signature.returnType : Type.void;\r\n return module.createUnreachable();\r\n }\r\n let targetType = (target).type;\r\n let thisExpression = assert(this.resolver.currentThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let elementExpr = this.compileExpression(\r\n elementExpression,\r\n Type.i32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (tee) {\r\n let currentFunction = this.currentFunction;\r\n let tempLocalTarget = currentFunction.getTempLocal(targetType, false);\r\n let tempLocalElement = currentFunction.getAndFreeTempLocal(this.currentType, false);\r\n let returnType = indexedGet.signature.returnType;\r\n this.currentFunction.freeTempLocal(tempLocalTarget);\r\n return module.createBlock(null, [\r\n this.makeCallDirect(indexedSet, [\r\n module.createTeeLocal(tempLocalTarget.index, thisExpr),\r\n module.createTeeLocal(tempLocalElement.index, elementExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(indexedGet, [\r\n module.createGetLocal(tempLocalTarget.index, tempLocalTarget.type.toNativeType()),\r\n module.createGetLocal(tempLocalElement.index, tempLocalElement.type.toNativeType())\r\n ])\r\n ], returnType.toNativeType());\r\n } else {\r\n return this.makeCallDirect(indexedSet, [\r\n thisExpr,\r\n elementExpr,\r\n valueWithCorrectType\r\n ]);\r\n }\r\n }\r\n // fall-through\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n compileCallExpression(expression: CallExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var target = this.resolver.resolveExpression(expression.expression, currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n var signature: Signature | null;\r\n var indexArg: ExpressionRef;\r\n switch (target.kind) {\r\n\r\n // direct call: concrete function\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let prototype = target;\r\n let typeArguments = expression.typeArguments;\r\n\r\n // builtins handle present respectively omitted type arguments on their own\r\n if (prototype.hasDecorator(DecoratorFlags.BUILTIN)) {\r\n return this.compileCallExpressionBuiltin(prototype, expression, contextualType);\r\n }\r\n\r\n let instance: Function | null = null;\r\n\r\n // resolve generic call if type arguments have been provided\r\n if (typeArguments) {\r\n if (!prototype.is(CommonFlags.GENERIC)) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n expression.expression.range, prototype.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n instance = this.resolver.resolveFunctionInclTypeArguments(\r\n prototype,\r\n typeArguments,\r\n this.currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n\r\n // infer generic call if type arguments have been omitted\r\n } else if (prototype.is(CommonFlags.GENERIC)) {\r\n let inferredTypes = new Map();\r\n let typeParameters = assert(prototype.declaration.typeParameters);\r\n let numTypeParameters = typeParameters.length;\r\n for (let i = 0; i < numTypeParameters; ++i) {\r\n inferredTypes.set(typeParameters[i].name.text, null);\r\n }\r\n // let numInferred = 0;\r\n let parameterTypes = prototype.declaration.signature.parameters;\r\n let numParameterTypes = parameterTypes.length;\r\n let argumentExpressions = expression.arguments;\r\n let numArguments = argumentExpressions.length;\r\n let argumentExprs = new Array(numArguments);\r\n for (let i = 0; i < numParameterTypes; ++i) {\r\n let typeNode = parameterTypes[i].type;\r\n let name = typeNode.kind == NodeKind.TYPE ? (typeNode).name.text : null;\r\n let argumentExpression = i < numArguments\r\n ? argumentExpressions[i]\r\n : prototype.declaration.signature.parameters[i].initializer;\r\n if (!argumentExpression) { // missing initializer -> too few arguments\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n expression.range, numParameterTypes.toString(10), numArguments.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (name !== null && inferredTypes.has(name)) {\r\n let inferredType = inferredTypes.get(name);\r\n if (inferredType) {\r\n argumentExprs[i] = this.compileExpressionRetainType(argumentExpression, inferredType, WrapMode.NONE);\r\n let commonType: Type | null;\r\n if (!(commonType = Type.commonCompatible(inferredType, this.currentType, true))) {\r\n if (!(commonType = Type.commonCompatible(inferredType, this.currentType, false))) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n parameterTypes[i].type.range, this.currentType.toString(), inferredType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n inferredType = commonType;\r\n } else {\r\n argumentExprs[i] = this.compileExpressionRetainType(argumentExpression, Type.i32, WrapMode.NONE);\r\n inferredType = this.currentType;\r\n // ++numInferred;\r\n }\r\n inferredTypes.set(name, inferredType);\r\n } else {\r\n let concreteType = this.resolver.resolveType(\r\n parameterTypes[i].type,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!concreteType) return module.createUnreachable();\r\n argumentExprs[i] = this.compileExpression(\r\n argumentExpression,\r\n concreteType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n }\r\n let resolvedTypeArguments = new Array(numTypeParameters);\r\n for (let i = 0; i < numTypeParameters; ++i) {\r\n let inferredType = assert(inferredTypes.get(typeParameters[i].name.text)); // TODO\r\n resolvedTypeArguments[i] = inferredType;\r\n }\r\n instance = this.resolver.resolveFunction(\r\n prototype,\r\n resolvedTypeArguments,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n return this.makeCallDirect(instance, argumentExprs);\r\n // TODO: this skips inlining because inlining requires compiling its temporary locals in\r\n // the scope of the inlined flow. might need another mechanism to lock temp. locals early,\r\n // so inlining can be performed in `makeCallDirect` instead?\r\n\r\n // otherwise resolve the non-generic call as usual\r\n } else {\r\n instance = this.resolver.resolveFunction(\r\n prototype,\r\n null,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n }\r\n if (!instance) return this.module.createUnreachable();\r\n\r\n // compile 'this' expression if an instance method\r\n let thisExpr: ExpressionRef = 0;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n thisExpr = this.compileExpressionRetainType(\r\n assert(this.resolver.currentThisExpression),\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n }\r\n\r\n return this.compileCallDirect(\r\n instance,\r\n expression.arguments,\r\n expression,\r\n thisExpr,\r\n instance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n }\r\n\r\n // indirect call: index argument with signature (non-generic, can't be inlined)\r\n case ElementKind.LOCAL: {\r\n if (signature = (target).type.signatureReference) {\r\n if ((target).is(CommonFlags.INLINED)) {\r\n indexArg = module.createI32(i64_low((target).constantIntegerValue));\r\n } else {\r\n indexArg = module.createGetLocal((target).index, NativeType.I32);\r\n }\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (signature = (target).type.signatureReference) {\r\n indexArg = module.createGetGlobal((target).internalName, (target).type.toNativeType());\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FIELD: {\r\n let type = (target).type;\r\n if (signature = type.signatureReference) {\r\n let thisExpression = assert(this.resolver.currentThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n indexArg = module.createLoad(\r\n 4,\r\n false,\r\n thisExpr,\r\n NativeType.I32,\r\n (target).memoryOffset\r\n );\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FUNCTION_TARGET: {\r\n signature = (target).signature;\r\n indexArg = this.compileExpression(\r\n expression.expression,\r\n (target).type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n break;\r\n }\r\n\r\n case ElementKind.PROPERTY: {\r\n indexArg = this.compileGetter(target, expression.expression);\r\n let type = this.currentType;\r\n signature = type.signatureReference;\r\n if (!signature) {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n break;\r\n }\r\n\r\n // not supported\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n return this.compileCallIndirect(\r\n signature,\r\n indexArg,\r\n expression.arguments,\r\n expression\r\n );\r\n }\r\n\r\n private compileCallExpressionBuiltin(\r\n prototype: FunctionPrototype,\r\n expression: CallExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var typeArguments: Type[] | null = null;\r\n\r\n // builtins handle omitted type arguments on their own. if present, however, resolve them here\r\n // and pass them to the builtin, even if it's still up to the builtin how to handle them.\r\n var typeArgumentNodes = expression.typeArguments;\r\n if (expression.typeArguments) {\r\n if (!prototype.is(CommonFlags.GENERIC)) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n expression.range, prototype.internalName\r\n );\r\n }\r\n typeArguments = this.resolver.resolveTypeArguments(\r\n assert(prototype.declaration.typeParameters),\r\n typeArgumentNodes,\r\n this.currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n }\r\n\r\n // now compile the builtin, which usually returns a block of code that replaces the call.\r\n var expr = compileBuiltinCall(\r\n this,\r\n prototype,\r\n typeArguments,\r\n expression.arguments,\r\n contextualType,\r\n expression\r\n );\r\n if (!expr) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n return expr;\r\n }\r\n\r\n /**\r\n * Checks that a call with the given number as arguments can be performed according to the\r\n * specified signature.\r\n */\r\n checkCallSignature(\r\n signature: Signature,\r\n numArguments: i32,\r\n hasThis: bool,\r\n reportNode: Node\r\n ): bool {\r\n\r\n // cannot call an instance method without a `this` argument (TODO: `.call`?)\r\n var thisType = signature.thisType;\r\n if (hasThis != (thisType != null)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported, // TODO: better message?\r\n reportNode.range\r\n );\r\n return false;\r\n }\r\n\r\n // not yet implemented (TODO: maybe some sort of an unmanaged/lightweight array?)\r\n var hasRest = signature.hasRest;\r\n if (hasRest) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return false;\r\n }\r\n\r\n var minimum = signature.requiredParameters;\r\n var maximum = signature.parameterTypes.length;\r\n\r\n // must at least be called with required arguments\r\n if (numArguments < minimum) {\r\n this.error(\r\n minimum < maximum\r\n ? DiagnosticCode.Expected_at_least_0_arguments_but_got_1\r\n : DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, minimum.toString(), numArguments.toString()\r\n );\r\n return false;\r\n }\r\n\r\n // must not be called with more than the maximum arguments\r\n if (numArguments > maximum && !hasRest) {\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, maximum.toString(), numArguments.toString()\r\n );\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** Compiles a direct call to a concrete function. */\r\n compileCallDirect(\r\n instance: Function,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0,\r\n inline: bool = false\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n var signature = instance.signature;\r\n\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n numArguments,\r\n thisArg != 0,\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n // Inline if explicitly requested\r\n if (inline) {\r\n assert(!instance.is(CommonFlags.TRAMPOLINE)); // doesn't make sense\r\n if (this.currentInlineFunctions.includes(instance)) {\r\n this.warning(\r\n DiagnosticCode.Function_0_cannot_be_inlined_into_itself,\r\n reportNode.range, instance.internalName\r\n );\r\n } else {\r\n this.currentInlineFunctions.push(instance);\r\n let expr = this.compileCallInlineUnchecked(instance, argumentExpressions, reportNode, thisArg);\r\n this.currentInlineFunctions.pop();\r\n return expr;\r\n }\r\n }\r\n\r\n // Otherwise compile to just a call\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallDirect(instance, operands);\r\n }\r\n\r\n // Depends on being pre-checked in compileCallDirect\r\n private compileCallInlineUnchecked(\r\n instance: Function,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n var signature = instance.signature;\r\n var currentFunction = this.currentFunction;\r\n var module = this.module;\r\n var declaration = instance.prototype.declaration;\r\n\r\n // Create an empty child flow with its own scope and mark it for inlining\r\n var previousFlow = currentFunction.flow;\r\n var returnLabel = instance.internalName + \"|inlined.\" + (instance.nextInlineId++).toString(10);\r\n var returnType = instance.signature.returnType;\r\n var flow = Flow.create(currentFunction);\r\n flow.set(FlowFlags.INLINE_CONTEXT);\r\n flow.returnLabel = returnLabel;\r\n flow.returnType = returnType;\r\n flow.contextualTypeArguments = instance.contextualTypeArguments;\r\n\r\n // Convert provided call arguments to temporary locals. It is important that these are compiled\r\n // here, with their respective locals being blocked. There is no 'makeCallInline'.\r\n var body = [];\r\n if (thisArg) {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n if (getExpressionId(thisArg) == ExpressionId.GetLocal) {\r\n flow.addScopedLocalAlias(\r\n getGetLocalIndex(thisArg),\r\n (parent).type,\r\n \"this\"\r\n );\r\n } else {\r\n let thisLocal = flow.addScopedLocal((parent).type, \"this\", false);\r\n body.push(\r\n module.createSetLocal(thisLocal.index, thisArg)\r\n );\r\n }\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i) {\r\n let paramExpr = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(paramExpr) == ExpressionId.GetLocal) {\r\n flow.addScopedLocalAlias(\r\n getGetLocalIndex(paramExpr),\r\n parameterTypes[i],\r\n signature.getParameterName(i)\r\n );\r\n // inherits wrap status\r\n } else {\r\n let argumentLocal = flow.addScopedLocal(\r\n parameterTypes[i],\r\n signature.getParameterName(i),\r\n !flow.canOverflow(paramExpr, parameterTypes[i])\r\n );\r\n body.push(\r\n module.createSetLocal(argumentLocal.index, paramExpr)\r\n );\r\n }\r\n }\r\n\r\n // Compile optional parameter initializers in the scope of the inlined flow\r\n currentFunction.flow = flow;\r\n var numParameters = signature.parameterTypes.length;\r\n for (let i = numArguments; i < numParameters; ++i) {\r\n let initExpr = this.compileExpression(\r\n assert(declaration.signature.parameters[i].initializer),\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n );\r\n let argumentLocal = flow.addScopedLocal(\r\n parameterTypes[i],\r\n signature.getParameterName(i),\r\n !flow.canOverflow(initExpr, parameterTypes[i])\r\n );\r\n body.push(\r\n module.createSetLocal(argumentLocal.index, initExpr)\r\n );\r\n }\r\n\r\n // Compile the called function's body in the scope of the inlined flow\r\n var bodyStatement = assert(declaration.body);\r\n if (bodyStatement.kind == NodeKind.BLOCK) {\r\n let statements = (bodyStatement).statements;\r\n for (let i = 0, k = statements.length; i < k; ++i) {\r\n let stmt = this.compileStatement(statements[i]);\r\n if (getExpressionId(stmt) != ExpressionId.Nop) {\r\n body.push(stmt);\r\n if (flow.isAny(FlowFlags.ANY_TERMINATING)) break;\r\n }\r\n }\r\n } else {\r\n body.push(this.compileStatement(bodyStatement));\r\n }\r\n\r\n // Free any new scoped locals and reset to the original flow\r\n var scopedLocals = flow.scopedLocals;\r\n if (scopedLocals) {\r\n for (let scopedLocal of scopedLocals.values()) {\r\n if (scopedLocal.is(CommonFlags.SCOPED)) { // otherwise an alias\r\n currentFunction.freeTempLocal(scopedLocal);\r\n }\r\n }\r\n flow.scopedLocals = null;\r\n }\r\n flow.finalize();\r\n this.currentFunction.flow = previousFlow;\r\n this.currentType = returnType;\r\n\r\n // Check that all branches are terminated\r\n if (returnType != Type.void && !flow.isAny(FlowFlags.ANY_TERMINATING)) {\r\n this.error(\r\n DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,\r\n declaration.signature.returnType.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n return flow.is(FlowFlags.RETURNS)\r\n ? module.createBlock(returnLabel, body, returnType.toNativeType())\r\n : body.length > 1\r\n ? module.createBlock(null, body, returnType.toNativeType())\r\n : body.length\r\n ? body[0]\r\n : module.createNop();\r\n }\r\n\r\n /** Gets the trampoline for the specified function. */\r\n ensureTrampoline(original: Function): Function {\r\n // A trampoline is a function that takes a fixed amount of operands with some of them possibly\r\n // being zeroed. It takes one additional argument denoting the number of actual operands\r\n // provided to the call, and takes appropriate steps to initialize zeroed operands to their\r\n // default values using the optional parameter initializers of the original function. Doing so\r\n // allows calls to functions with optional parameters to circumvent the trampoline when all\r\n // parameters are provided as a fast route, respectively setting up omitted operands in a proper\r\n // context otherwise.\r\n var trampoline = original.trampoline;\r\n if (trampoline) return trampoline;\r\n\r\n var originalSignature = original.signature;\r\n var originalName = original.internalName;\r\n var originalParameterTypes = originalSignature.parameterTypes;\r\n var originalParameterDeclarations = original.prototype.declaration.signature.parameters;\r\n var commonReturnType = originalSignature.returnType;\r\n var commonThisType = originalSignature.thisType;\r\n var isInstance = original.is(CommonFlags.INSTANCE);\r\n\r\n // arguments excl. `this`, operands incl. `this`\r\n var minArguments = originalSignature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = originalParameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (isInstance) {\r\n ++minOperands;\r\n ++maxOperands;\r\n }\r\n var numOptional = assert(maxOperands - minOperands);\r\n\r\n var forwardedOperands = new Array(minOperands);\r\n var operandIndex = 0;\r\n\r\n // forward `this` if applicable\r\n var module = this.module;\r\n if (isInstance) {\r\n forwardedOperands[0] = module.createGetLocal(0, this.options.nativeSizeType);\r\n operandIndex = 1;\r\n }\r\n\r\n // forward required arguments\r\n for (let i = 0; i < minArguments; ++i, ++operandIndex) {\r\n forwardedOperands[operandIndex] = module.createGetLocal(operandIndex, originalParameterTypes[i].toNativeType());\r\n }\r\n assert(operandIndex == minOperands);\r\n\r\n // create the trampoline element\r\n var trampolineSignature = new Signature(originalParameterTypes, commonReturnType, commonThisType);\r\n var trampolineName = originalName + \"|trampoline\";\r\n trampolineSignature.requiredParameters = maxArguments;\r\n trampoline = new Function(\r\n original.prototype,\r\n trampolineName,\r\n trampolineSignature,\r\n original.parent,\r\n original.contextualTypeArguments\r\n );\r\n trampoline.set(original.flags | CommonFlags.TRAMPOLINE | CommonFlags.COMPILED);\r\n original.trampoline = trampoline;\r\n\r\n // compile initializers of omitted arguments in scope of the trampoline function\r\n // this is necessary because initializers might need additional locals and a proper this context\r\n var previousFunction = this.currentFunction;\r\n this.currentFunction = trampoline;\r\n\r\n // create a br_table switching over the number of optional parameters provided\r\n var numNames = numOptional + 1; // incl. outer block\r\n var names = new Array(numNames);\r\n var ofN = \"of\" + numOptional.toString(10);\r\n for (let i = 0; i < numNames; ++i) {\r\n let label = i.toString(10) + ofN;\r\n names[i] = label;\r\n }\r\n var body = module.createBlock(names[0], [\r\n module.createBlock(\"outOfRange\", [\r\n module.createSwitch(names, \"outOfRange\",\r\n // condition is number of provided optional arguments, so subtract required arguments\r\n minArguments\r\n ? module.createBinary(\r\n BinaryOp.SubI32,\r\n module.createGetGlobal(\"~argc\", NativeType.I32),\r\n module.createI32(minArguments)\r\n )\r\n : module.createGetGlobal(\"~argc\", NativeType.I32)\r\n )\r\n ]),\r\n module.createUnreachable()\r\n ]);\r\n for (let i = 0; i < numOptional; ++i, ++operandIndex) {\r\n let type = originalParameterTypes[minArguments + i];\r\n let declaration = originalParameterDeclarations[minArguments + i];\r\n let initializer = declaration.initializer;\r\n let initExpr: ExpressionRef;\r\n if (initializer) {\r\n initExpr = module.createSetLocal(operandIndex,\r\n this.compileExpression(\r\n initializer,\r\n type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n )\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Optional_parameter_must_have_an_initializer,\r\n declaration.range\r\n );\r\n initExpr = module.createUnreachable();\r\n }\r\n body = module.createBlock(names[i + 1], [\r\n body,\r\n initExpr,\r\n ]);\r\n forwardedOperands[operandIndex] = module.createGetLocal(operandIndex, type.toNativeType());\r\n }\r\n this.currentFunction = previousFunction;\r\n assert(operandIndex == maxOperands);\r\n\r\n var funcRef = module.addFunction(\r\n trampolineName,\r\n this.ensureFunctionType(\r\n trampolineSignature.parameterTypes,\r\n trampolineSignature.returnType,\r\n trampolineSignature.thisType\r\n ),\r\n typesToNativeTypes(trampoline.additionalLocals),\r\n module.createBlock(null, [\r\n body,\r\n module.createCall(\r\n originalName,\r\n forwardedOperands,\r\n commonReturnType.toNativeType()\r\n )\r\n ], commonReturnType.toNativeType())\r\n );\r\n trampoline.finalize(module, funcRef);\r\n return trampoline;\r\n }\r\n\r\n /** Makes sure that the argument count helper global is present and returns its name. */\r\n private ensureArgcVar(): string {\r\n var internalName = \"~argc\";\r\n if (!this.argcVar) {\r\n let module = this.module;\r\n this.argcVar = module.addGlobal(\r\n internalName,\r\n NativeType.I32,\r\n true,\r\n module.createI32(0)\r\n );\r\n }\r\n return internalName;\r\n }\r\n\r\n /** Makes sure that the argument count helper setter is present and returns its name. */\r\n private ensureArgcSet(): string {\r\n var internalName = \"~setargc\";\r\n if (!this.argcSet) {\r\n let module = this.module;\r\n this.argcSet = module.addFunction(internalName,\r\n this.ensureFunctionType([ Type.u32 ], Type.void),\r\n null,\r\n module.createSetGlobal(this.ensureArgcVar(),\r\n module.createGetLocal(0, NativeType.I32)\r\n )\r\n );\r\n module.addFunctionExport(internalName, \"_setargc\");\r\n }\r\n return internalName;\r\n }\r\n\r\n /** Creates a direct call to the specified function. */\r\n makeCallDirect(\r\n instance: Function,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var numOperands = operands ? operands.length : 0;\r\n var numArguments = numOperands;\r\n var minArguments = instance.signature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = instance.signature.parameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n ++minOperands;\r\n ++maxOperands;\r\n --numArguments;\r\n }\r\n assert(numOperands >= minOperands);\r\n\r\n var module = this.module;\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n var returnType = instance.signature.returnType;\r\n var isCallImport = instance.is(CommonFlags.MODULE_IMPORT);\r\n\r\n // fill up omitted arguments with their initializers, if constant, otherwise with zeroes.\r\n if (numOperands < maxOperands) {\r\n if (!operands) {\r\n operands = new Array(maxOperands);\r\n operands.length = 0;\r\n }\r\n let parameterTypes = instance.signature.parameterTypes;\r\n let parameterNodes = instance.prototype.declaration.signature.parameters;\r\n let allOptionalsAreConstant = true;\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n let initializer = parameterNodes[i].initializer;\r\n if (!(initializer !== null && nodeIsConstantValue(initializer.kind))) {\r\n allOptionalsAreConstant = false;\r\n break;\r\n }\r\n }\r\n if (allOptionalsAreConstant) { // inline into the call\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(\r\n this.compileExpression(\r\n parameterNodes[i].initializer,\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n )\r\n );\r\n }\r\n } else { // otherwise fill up with zeroes and call the trampoline\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(parameterTypes[i].toNativeZero(module));\r\n }\r\n if (!isCallImport) {\r\n let original = instance;\r\n instance = this.ensureTrampoline(instance);\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n instance.flow.flags = original.flow.flags;\r\n this.program.instancesLookup.set(instance.internalName, instance); // so canOverflow can find it\r\n let nativeReturnType = returnType.toNativeType();\r\n this.currentType = returnType;\r\n return module.createBlock(null, [\r\n module.createSetGlobal(this.ensureArgcVar(), module.createI32(numArguments)),\r\n module.createCall(instance.internalName, operands, nativeReturnType)\r\n ], nativeReturnType);\r\n }\r\n }\r\n }\r\n\r\n // otherwise just call through\r\n this.currentType = returnType;\r\n return module.createCall(instance.internalName, operands, returnType.toNativeType());\r\n }\r\n\r\n /** Compiles an indirect call using an index argument and a signature. */\r\n compileCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n numArguments,\r\n thisArg != 0,\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallIndirect(signature, indexArg, operands);\r\n }\r\n\r\n /** Creates an indirect call to the function at `indexArg` in the function table. */\r\n makeCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var numOperands = operands ? operands.length : 0;\r\n var numArguments = numOperands;\r\n var minArguments = signature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = signature.parameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (signature.thisType) {\r\n ++minOperands;\r\n ++maxOperands;\r\n --numArguments;\r\n }\r\n assert(numOperands >= minOperands);\r\n\r\n this.ensureFunctionType(signature.parameterTypes, signature.returnType, signature.thisType);\r\n var module = this.module;\r\n\r\n // fill up omitted arguments with zeroes\r\n if (numOperands < maxOperands) {\r\n if (!operands) {\r\n operands = new Array(maxOperands);\r\n operands.length = 0;\r\n }\r\n let parameterTypes = signature.parameterTypes;\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(parameterTypes[i].toNativeZero(module));\r\n }\r\n }\r\n\r\n var returnType = signature.returnType;\r\n this.currentType = returnType;\r\n return module.createBlock(null, [\r\n module.createSetGlobal(this.ensureArgcVar(), // might still be calling a trampoline\r\n module.createI32(numArguments)\r\n ),\r\n module.createCallIndirect(indexArg, operands, signature.toSignatureString())\r\n ], returnType.toNativeType()); // not necessarily wrapped\r\n }\r\n\r\n compileCommaExpression(expression: CommaExpression, contextualType: Type): ExpressionRef {\r\n var expressions = expression.expressions;\r\n var numExpressions = expressions.length;\r\n var exprs = new Array(numExpressions--);\r\n for (let i = 0; i < numExpressions; ++i) {\r\n exprs[i] = this.compileExpression(\r\n expressions[i],\r\n Type.void, // drop all\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n exprs[numExpressions] = this.compileExpression(\r\n expressions[numExpressions],\r\n contextualType, // except last\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n return this.module.createBlock(null, exprs, this.currentType.toNativeType());\r\n }\r\n\r\n compileElementAccessExpression(expression: ElementAccessExpression, contextualType: Type): ExpressionRef {\r\n var target = this.resolver.resolveElementAccess(expression, this.currentFunction); // reports\r\n if (!target) return this.module.createUnreachable();\r\n switch (target.kind) {\r\n case ElementKind.CLASS: {\r\n let isUnchecked = this.currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.expression.range, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n let thisArg = this.compileExpression(\r\n expression.expression,\r\n (target).type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n return this.compileCallDirect(indexedGet, [\r\n expression.elementExpression\r\n ], expression, thisArg);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileFunctionExpression(expression: FunctionExpression, contextualType: Type): ExpressionRef {\r\n var declaration = expression.declaration;\r\n var name = declaration.name;\r\n var simpleName = (name.text.length\r\n ? name.text\r\n : \"anonymous\") + \"|\" + this.functionTable.length.toString(10);\r\n var currentFunction = this.currentFunction;\r\n var prototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n currentFunction.internalName + INNER_DELIMITER + simpleName,\r\n declaration,\r\n null,\r\n DecoratorFlags.NONE\r\n );\r\n var flow = currentFunction.flow;\r\n var instance = this.compileFunctionUsingTypeArguments(\r\n prototype,\r\n [],\r\n flow.contextualTypeArguments,\r\n flow,\r\n declaration\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n this.currentType = instance.signature.type; // TODO: get cached type?\r\n // NOTE that, in order to make this work in every case, the function must be represented by a\r\n // value, so we add it and rely on the optimizer to figure out where it can be called directly.\r\n var index = this.ensureFunctionTableEntry(instance); // reports\r\n return index < 0\r\n ? this.module.createUnreachable()\r\n : this.module.createI32(index);\r\n }\r\n\r\n /**\r\n * Compiles an identifier in the specified context.\r\n * @param retainConstantType Retains the type of inlined constants if `true`, otherwise\r\n * precomputes them according to context.\r\n */\r\n compileIdentifierExpression(\r\n expression: IdentifierExpression,\r\n contextualType: Type,\r\n retainConstantType: bool\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // check special keywords first\r\n switch (expression.kind) {\r\n case NodeKind.NULL: {\r\n let options = this.options;\r\n if (!contextualType.classReference) {\r\n this.currentType = options.usizeType;\r\n }\r\n return options.isWasm64\r\n ? module.createI64(0)\r\n : module.createI32(0);\r\n }\r\n case NodeKind.TRUE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(1);\r\n }\r\n case NodeKind.FALSE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(0);\r\n }\r\n case NodeKind.THIS: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n this.currentType = scopedThis.type;\r\n return module.createGetLocal(scopedThis.index, scopedThis.type.toNativeType());\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let thisType = (parent).type;\r\n if (currentFunction.is(CommonFlags.CONSTRUCTOR)) {\r\n if (!flow.is(FlowFlags.ALLOCATES)) {\r\n flow.set(FlowFlags.ALLOCATES);\r\n // must be conditional because `this` could have been provided by a derived class\r\n this.currentType = thisType;\r\n return module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, expression)\r\n );\r\n }\r\n }\r\n this.currentType = thisType;\r\n return module.createGetLocal(0, thisType.toNativeType());\r\n }\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n case NodeKind.SUPER: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n let scopedThisClass = assert(scopedThis.type.classReference);\r\n let base = scopedThisClass.base;\r\n if (base) {\r\n this.currentType = base.type;\r\n return module.createGetLocal(scopedThis.index, base.type.toNativeType());\r\n }\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let base = (parent).base;\r\n if (base) {\r\n let superType = base.type;\r\n this.currentType = superType;\r\n return module.createGetLocal(0, superType.toNativeType());\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise resolve\r\n var target = this.resolver.resolveIdentifier( // reports\r\n expression,\r\n this.currentEnum || currentFunction\r\n );\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.LOCAL: {\r\n let localType = (target).type;\r\n assert(localType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n let localIndex = (target).index;\r\n assert(localIndex >= 0);\r\n this.currentType = localType;\r\n return this.module.createGetLocal(localIndex, localType.toNativeType());\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field\r\n return this.module.createUnreachable();\r\n }\r\n let globalType = (target).type;\r\n assert(globalType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return this.module.createGetGlobal((target).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // here: if referenced from within the same enum\r\n if (!target.is(CommonFlags.COMPILED)) {\r\n this.error(\r\n DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,\r\n expression.range\r\n );\r\n this.currentType = Type.i32;\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.module.createI32((target).constantValue);\r\n }\r\n return this.module.createGetGlobal((target).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let instance = this.resolver.resolveFunction(\r\n target,\r\n null,\r\n currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!(instance && this.compileFunction(instance))) return module.createUnreachable();\r\n let index = this.ensureFunctionTableEntry(instance);\r\n this.currentType = instance.signature.type;\r\n return this.module.createI32(index);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileInstanceOfExpression(\r\n expression: InstanceOfExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n // NOTE that this differs from TypeScript in that the rhs is a type, not an expression. at the\r\n // time of implementation, this seemed more useful because dynamic rhs expressions are not\r\n // possible in AS anyway.\r\n var expr = this.compileExpressionRetainType(expression.expression, this.options.usizeType, WrapMode.NONE);\r\n var type = this.currentType;\r\n var isType = this.resolver.resolveType(expression.isType);\r\n this.currentType = Type.bool;\r\n if (!isType) return module.createUnreachable();\r\n return type.is(TypeFlags.NULLABLE) && !isType.is(TypeFlags.NULLABLE)\r\n ? type.nonNullableType.isAssignableTo(isType)\r\n ? module.createBinary( // not precomputeable\r\n type.is(TypeFlags.LONG)\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n expr,\r\n type.toNativeZero(module)\r\n )\r\n : module.createI32(0)\r\n : module.createI32(type.isAssignableTo(isType, true) ? 1 : 0);\r\n }\r\n\r\n compileLiteralExpression(\r\n expression: LiteralExpression,\r\n contextualType: Type,\r\n implicitNegate: bool = false\r\n ): ExpressionRef {\r\n var module = this.module;\r\n\r\n switch (expression.literalKind) {\r\n case LiteralKind.ARRAY: {\r\n assert(!implicitNegate);\r\n let classType = contextualType.classReference;\r\n if (\r\n classType &&\r\n classType.prototype == this.program.arrayPrototype\r\n ) {\r\n return this.compileArrayLiteral(\r\n assert(classType.typeArguments)[0],\r\n (expression).elementExpressions,\r\n false, // TODO: isConst?\r\n expression\r\n );\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n case LiteralKind.FLOAT: {\r\n let floatValue = (expression).value;\r\n if (implicitNegate) {\r\n floatValue = -floatValue;\r\n }\r\n if (contextualType == Type.f32) {\r\n return module.createF32(floatValue);\r\n }\r\n this.currentType = Type.f64;\r\n return module.createF64(floatValue);\r\n }\r\n case LiteralKind.INTEGER: {\r\n let intValue = (expression).value;\r\n if (implicitNegate) {\r\n intValue = i64_sub(\r\n i64_new(0),\r\n intValue\r\n );\r\n }\r\n switch (contextualType.kind) {\r\n\r\n // compile to contextualType if matching\r\n\r\n case TypeKind.I8: {\r\n if (i64_is_i8(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U8: {\r\n if (i64_is_u8(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.I16: {\r\n if (i64_is_i16(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U16: {\r\n if (i64_is_u16(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n if (i64_is_i32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n if (i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.BOOL: {\r\n if (i64_is_bool(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n if (!this.options.isWasm64) {\r\n if (i64_is_i32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.USIZE: {\r\n if (!this.options.isWasm64) {\r\n if (i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.F32: {\r\n if (i64_is_f32(intValue)) return module.createF32(i64_to_f32(intValue));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n if (i64_is_f64(intValue)) return module.createF64(i64_to_f64(intValue));\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n break; // compiles to best fitting type below, being dropped\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise compile to best fitting native type\r\n\r\n if (i64_is_i32(intValue)) {\r\n this.currentType = Type.i32;\r\n return module.createI32(i64_low(intValue));\r\n } else if (i64_is_u32(intValue)) {\r\n this.currentType = Type.u32;\r\n return module.createI32(i64_low(intValue));\r\n } else {\r\n this.currentType = Type.i64;\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n }\r\n case LiteralKind.STRING: {\r\n assert(!implicitNegate);\r\n return this.compileStringLiteral(expression);\r\n }\r\n case LiteralKind.OBJECT: {\r\n assert(!implicitNegate);\r\n return this.compileObjectLiteral(expression, contextualType);\r\n }\r\n // case LiteralKind.REGEXP:\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n\r\n /** Ensures that the specified string exists in static memory and returns a pointer to it. */\r\n ensureStaticString(stringValue: string): ExpressionRef {\r\n var program = this.program;\r\n var hasGC = program.hasGC;\r\n var gcHeaderSize = program.gcHeaderSize;\r\n\r\n var stringInstance = assert(program.stringInstance);\r\n var stringSegment: MemorySegment;\r\n\r\n // if the string already exists, reuse it\r\n var segments = this.stringSegments;\r\n if (segments.has(stringValue)) {\r\n stringSegment = segments.get(stringValue);\r\n\r\n // otherwise create it\r\n } else {\r\n let length = stringValue.length;\r\n let headerSize = (stringInstance.currentMemoryOffset + 1) & ~1;\r\n let totalSize = headerSize + length * 2;\r\n\r\n let buf: Uint8Array;\r\n let pos: u32;\r\n\r\n if (hasGC) {\r\n buf = new Uint8Array(gcHeaderSize + totalSize);\r\n pos = gcHeaderSize;\r\n writeI32(ensureGCHook(this, stringInstance), buf, program.gcHookOffset);\r\n } else {\r\n buf = new Uint8Array(totalSize);\r\n pos = 0;\r\n }\r\n writeI32(length, buf, pos + stringInstance.offsetof(\"length\"));\r\n pos += headerSize;\r\n for (let i = 0; i < length; ++i) {\r\n writeI16(stringValue.charCodeAt(i), buf, pos + (i << 1));\r\n }\r\n stringSegment = this.addMemorySegment(buf);\r\n segments.set(stringValue, stringSegment);\r\n }\r\n var stringOffset = stringSegment.offset;\r\n if (hasGC) stringOffset = i64_add(stringOffset, i64_new(gcHeaderSize));\r\n\r\n this.currentType = stringInstance.type;\r\n if (this.options.isWasm64) {\r\n return this.module.createI64(i64_low(stringOffset), i64_high(stringOffset));\r\n } else {\r\n assert(i64_is_u32(stringOffset));\r\n return this.module.createI32(i64_low(stringOffset));\r\n }\r\n }\r\n\r\n compileStringLiteral(expression: StringLiteralExpression): ExpressionRef {\r\n return this.ensureStaticString(expression.value);\r\n }\r\n\r\n /** Ensures that the specified array exists in static memory and returns a pointer to it. */\r\n ensureStaticArray(elementType: Type, values: ExpressionRef[]): ExpressionRef {\r\n var program = this.program;\r\n var hasGC = program.hasGC;\r\n var gcHeaderSize = program.gcHeaderSize;\r\n\r\n var length = values.length;\r\n var byteSize = elementType.byteSize;\r\n var byteLength = length * byteSize;\r\n var usizeTypeSize = this.options.usizeType.byteSize;\r\n\r\n var buf: Uint8Array;\r\n var pos: u32;\r\n\r\n // create the backing ArrayBuffer segment\r\n var bufferInstance = assert(program.arrayBufferInstance);\r\n var bufferHeaderSize = (bufferInstance.currentMemoryOffset + 7) & ~7;\r\n var bufferTotalSize = 1 << (32 - clz(bufferHeaderSize + byteLength - 1));\r\n if (hasGC) {\r\n buf = new Uint8Array(gcHeaderSize + bufferTotalSize);\r\n pos = gcHeaderSize;\r\n writeI32(ensureGCHook(this, bufferInstance), buf, program.gcHookOffset);\r\n } else {\r\n buf = new Uint8Array(bufferTotalSize);\r\n pos = 0;\r\n }\r\n writeI32(byteLength, buf, pos + bufferInstance.offsetof(\"byteLength\"));\r\n pos += bufferHeaderSize;\r\n var nativeType = elementType.toNativeType();\r\n switch (nativeType) {\r\n case NativeType.I32: {\r\n switch (byteSize) {\r\n case 1: {\r\n for (let i = 0; i < length; ++i) {\r\n let value = values[i];\r\n assert(getExpressionType(value) == nativeType);\r\n assert(getExpressionId(value) == ExpressionId.Const);\r\n writeI8(getConstValueI32(value), buf, pos);\r\n pos += 1;\r\n }\r\n break;\r\n }\r\n case 2: {\r\n for (let i = 0; i < length; ++i) {\r\n let value = values[i];\r\n assert(getExpressionType(value) == nativeType);\r\n assert(getExpressionId(value) == ExpressionId.Const);\r\n writeI16(getConstValueI32(value), buf, pos);\r\n pos += 2;\r\n }\r\n break;\r\n }\r\n case 4: {\r\n for (let i = 0; i < length; ++i) {\r\n let value = values[i];\r\n assert(getExpressionType(value) == nativeType);\r\n assert(getExpressionId(value) == ExpressionId.Const);\r\n writeI32(getConstValueI32(value), buf, pos);\r\n pos += 4;\r\n }\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n break;\r\n }\r\n case NativeType.I64: {\r\n for (let i = 0; i < length; ++i) {\r\n let value = values[i];\r\n assert(getExpressionType(value) == nativeType);\r\n assert(getExpressionId(value) == ExpressionId.Const);\r\n writeI64(i64_new(getConstValueI64Low(value), getConstValueI64High(value)), buf, pos);\r\n pos += 8;\r\n }\r\n break;\r\n }\r\n case NativeType.F32: {\r\n for (let i = 0; i < length; ++i) {\r\n let value = values[i];\r\n assert(getExpressionType(value) == nativeType);\r\n assert(getExpressionId(value) == ExpressionId.Const);\r\n writeF32(getConstValueF32(value), buf, pos);\r\n pos += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.F64: {\r\n for (let i = 0; i < length; ++i) {\r\n let value = values[i];\r\n assert(getExpressionType(value) == nativeType);\r\n assert(getExpressionId(value) == ExpressionId.Const);\r\n writeF64(getConstValueF64(value), buf, pos);\r\n pos += 8;\r\n }\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n var bufferSegment = this.addMemorySegment(buf);\r\n var bufferOffset = bufferSegment.offset;\r\n if (hasGC) bufferOffset = i64_add(bufferOffset, i64_new(gcHeaderSize));\r\n\r\n // create the Array segment and return a pointer to it\r\n var arrayPrototype = assert(program.arrayPrototype);\r\n var arrayInstance = assert(this.resolver.resolveClass(arrayPrototype, [ elementType ]));\r\n var arrayHeaderSize = (arrayInstance.currentMemoryOffset + 7) & ~7;\r\n if (hasGC) {\r\n buf = new Uint8Array(gcHeaderSize + arrayHeaderSize);\r\n pos = gcHeaderSize;\r\n writeI32(ensureGCHook(this, arrayInstance), buf, program.gcHookOffset);\r\n } else {\r\n buf = new Uint8Array(arrayHeaderSize);\r\n pos = 0;\r\n }\r\n var arraySegment = this.addMemorySegment(buf);\r\n var arrayOffset = arraySegment.offset;\r\n if (hasGC) arrayOffset = i64_add(arrayOffset, i64_new(gcHeaderSize));\r\n this.currentType = arrayInstance.type;\r\n if (usizeTypeSize == 8) {\r\n writeI64(bufferOffset, buf, pos + arrayInstance.offsetof(\"buffer_\"));\r\n writeI32(length, buf, pos + arrayInstance.offsetof(\"length_\"));\r\n return this.module.createI64(i64_low(arrayOffset), i64_high(arrayOffset));\r\n } else {\r\n assert(i64_is_u32(bufferOffset));\r\n writeI32(i64_low(bufferOffset), buf, pos + arrayInstance.offsetof(\"buffer_\"));\r\n writeI32(length, buf, pos + arrayInstance.offsetof(\"length_\"));\r\n assert(i64_is_u32(arrayOffset));\r\n return this.module.createI32(i64_low(arrayOffset));\r\n }\r\n }\r\n\r\n compileArrayLiteral(\r\n elementType: Type,\r\n expressions: (Expression | null)[],\r\n isConst: bool,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n var module = this.module;\r\n\r\n // find out whether all elements are constant (array is static)\r\n var length = expressions.length;\r\n var compiledValues = new Array(length);\r\n var constantValues = new Array(length);\r\n var nativeElementType = elementType.toNativeType();\r\n var isStatic = true;\r\n for (let i = 0; i < length; ++i) {\r\n let expr = expressions[i]\r\n ? this.compileExpression(expressions[i], elementType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : elementType.toNativeZero(module);\r\n compiledValues[i] = expr;\r\n if (isStatic) {\r\n expr = module.precomputeExpression(compiledValues[i]);\r\n if (getExpressionId(expr) == ExpressionId.Const) {\r\n assert(getExpressionType(expr) == nativeElementType);\r\n constantValues[i] = expr;\r\n } else {\r\n if (isConst) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n reportNode.range\r\n );\r\n }\r\n isStatic = false;\r\n }\r\n }\r\n }\r\n\r\n // make a static array if possible\r\n if (isStatic) return this.ensureStaticArray(elementType, constantValues);\r\n\r\n // otherwise obtain the array type\r\n var arrayPrototype = assert(this.program.arrayPrototype);\r\n if (!arrayPrototype || arrayPrototype.kind != ElementKind.CLASS_PROTOTYPE) return module.createUnreachable();\r\n var arrayInstance = this.resolver.resolveClass(arrayPrototype, [ elementType ]);\r\n if (!arrayInstance) return module.createUnreachable();\r\n var arrayType = arrayInstance.type;\r\n\r\n // and compile an explicit instantiation\r\n this.currentType = arrayType;\r\n var setter = arrayInstance.lookupOverload(OperatorKind.INDEXED_SET, true);\r\n if (!setter) {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n reportNode.range, arrayInstance.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n var nativeArrayType = arrayType.toNativeType();\r\n var currentFunction = this.currentFunction;\r\n var tempLocal = currentFunction.addLocal(arrayType); // can't reuse a temp (used in compiledValues)\r\n var stmts = new Array(2 + length);\r\n var index = 0;\r\n stmts[index++] = module.createSetLocal(tempLocal.index,\r\n this.makeCallDirect(assert(arrayInstance.constructorInstance), [\r\n module.createI32(0), // this\r\n module.createI32(length)\r\n ])\r\n );\r\n for (let i = 0; i < length; ++i) {\r\n stmts[index++] = this.makeCallDirect(setter, [\r\n module.createGetLocal(tempLocal.index, nativeArrayType), // this\r\n module.createI32(i),\r\n compiledValues[i]\r\n ]);\r\n }\r\n assert(index + 1 == stmts.length);\r\n stmts[index] = module.createGetLocal(tempLocal.index, nativeArrayType);\r\n currentFunction.freeTempLocal(tempLocal); // but can be reused now\r\n this.currentType = arrayType;\r\n return module.createBlock(null, stmts, nativeArrayType);\r\n }\r\n\r\n compileObjectLiteral(expression: ObjectLiteralExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n\r\n // contextual type must be a class\r\n var classReference = contextualType.classReference;\r\n if (!classReference || classReference.is(CommonFlags.ABSTRACT)) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n expression.range, \"\", contextualType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // if present, check that the constructor is compatible with object literals\r\n var ctor = classReference.constructorInstance;\r\n if (ctor) {\r\n // TODO: if the constructor requires parameters, check whether these are given as part of the\r\n // object literal and use them to call the ctor while not generating a store.\r\n if (ctor.signature.requiredParameters) {\r\n this.error(\r\n DiagnosticCode.Constructor_of_class_0_must_not_require_any_arguments,\r\n expression.range, classReference.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (ctor.is(CommonFlags.PRIVATE)) {\r\n this.error(\r\n DiagnosticCode.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration,\r\n expression.range, classReference.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (ctor.is(CommonFlags.PROTECTED)) {\r\n this.error(\r\n DiagnosticCode.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration,\r\n expression.range, classReference.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // check and compile field values\r\n var names = expression.names;\r\n var numNames = names.length;\r\n var values = expression.values;\r\n var members = classReference.members;\r\n var hasErrors = false;\r\n var exprs = new Array(numNames + 2);\r\n var tempLocal = this.currentFunction.getTempLocal(this.options.usizeType);\r\n assert(numNames == values.length);\r\n for (let i = 0, k = numNames; i < k; ++i) {\r\n let member = members ? members.get(names[i].text) : null;\r\n if (!member || member.kind != ElementKind.FIELD) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n names[i].range, names[i].text, classReference.toString()\r\n );\r\n hasErrors = true;\r\n continue;\r\n }\r\n let type = (member).type;\r\n exprs[i + 1] = this.module.createStore( // TODO: handle setters as well\r\n type.byteSize,\r\n this.module.createGetLocal(tempLocal.index, this.options.nativeSizeType),\r\n this.compileExpression(values[i], (member).type, ConversionKind.IMPLICIT, WrapMode.NONE),\r\n type.toNativeType(),\r\n (member).memoryOffset\r\n );\r\n }\r\n this.currentType = classReference.type.nonNullableType;\r\n if (hasErrors) return module.createUnreachable();\r\n\r\n // allocate a new instance first and assign 'this' to the temp. local\r\n exprs[0] = module.createSetLocal(\r\n tempLocal.index,\r\n compileAllocate(this, classReference, expression)\r\n );\r\n\r\n // once all field values have been set, return 'this'\r\n exprs[exprs.length - 1] = module.createGetLocal(tempLocal.index, this.options.nativeSizeType);\r\n\r\n return module.createBlock(null, exprs, this.options.nativeSizeType);\r\n }\r\n\r\n compileNewExpression(expression: NewExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var options = this.options;\r\n var currentFunction = this.currentFunction;\r\n\r\n // obtain the class being instantiated\r\n var target = this.resolver.resolveExpression( // reports\r\n expression.expression,\r\n currentFunction\r\n );\r\n if (!target) return module.createUnreachable();\r\n if (target.kind != ElementKind.CLASS_PROTOTYPE) {\r\n this.error(\r\n DiagnosticCode.Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature,\r\n expression.expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n var classPrototype = target;\r\n var classInstance: Class | null = null;\r\n var typeArguments = expression.typeArguments;\r\n var classReference: Class | null;\r\n if (\r\n !typeArguments &&\r\n (classReference = contextualType.classReference) !== null &&\r\n classReference.is(CommonFlags.GENERIC)\r\n ) {\r\n classInstance = this.resolver.resolveClass(\r\n classPrototype,\r\n classReference.typeArguments,\r\n currentFunction.flow.contextualTypeArguments\r\n );\r\n } else {\r\n classInstance = this.resolver.resolveClassInclTypeArguments(\r\n classPrototype,\r\n typeArguments,\r\n currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n }\r\n if (!classInstance) return module.createUnreachable();\r\n\r\n var expr: ExpressionRef;\r\n\r\n // traverse to the top-most visible constructor\r\n var currentClassInstance: Class | null = classInstance;\r\n var constructorInstance: Function | null = null;\r\n do {\r\n constructorInstance = currentClassInstance.constructorInstance;\r\n if (constructorInstance) break; // TODO: check visibility\r\n } while (currentClassInstance = currentClassInstance.base);\r\n\r\n // if a constructor is present, call it with a zero `this`\r\n if (constructorInstance) {\r\n expr = this.compileCallDirect(constructorInstance, expression.arguments, expression,\r\n options.usizeType.toNativeZero(module)\r\n );\r\n\r\n // otherwise simply allocate a new instance and initialize its fields\r\n } else {\r\n expr = this.makeAllocate(classInstance, expression);\r\n }\r\n\r\n this.currentType = classInstance.type;\r\n return expr;\r\n }\r\n\r\n compileParenthesizedExpression(\r\n expression: ParenthesizedExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n // does not change types, just order\r\n return this.compileExpression(\r\n expression.expression,\r\n contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n }\r\n\r\n /**\r\n * Compiles a property access in the specified context.\r\n * @param retainConstantType Retains the type of inlined constants if `true`, otherwise\r\n * precomputes them according to context.\r\n */\r\n compilePropertyAccessExpression(\r\n propertyAccess: PropertyAccessExpression,\r\n contextualType: Type,\r\n retainConstantType: bool\r\n ): ExpressionRef {\r\n var module = this.module;\r\n\r\n var target = this.resolver.resolvePropertyAccess(propertyAccess, this.currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL: { // static property\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field\r\n return module.createUnreachable();\r\n }\r\n let globalType = (target).type;\r\n assert(globalType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return module.createGetGlobal((target).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // enum value\r\n let parent = (target).parent;\r\n assert(parent !== null && parent.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(parent)) {\r\n this.currentType = Type.i32;\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return module.createI32((target).constantValue);\r\n }\r\n return module.createGetGlobal((target).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FIELD: { // instance field\r\n let thisExpression = assert(this.resolver.currentThisExpression);\r\n assert((target).memoryOffset >= 0);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n this.currentType = (target).type;\r\n return module.createLoad(\r\n (target).type.byteSize,\r\n (target).type.is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n thisExpr,\r\n (target).type.toNativeType(),\r\n (target).memoryOffset\r\n );\r\n }\r\n case ElementKind.PROPERTY: {// instance property (here: getter)\r\n return this.compileGetter(target, propertyAccess);\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n this.error(\r\n DiagnosticCode.Cannot_access_method_0_without_calling_it_as_it_requires_this_to_be_set,\r\n propertyAccess.range, (target).simpleName\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n propertyAccess.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n private compileGetter(target: Property, reportNode: Node): ExpressionRef {\r\n var prototype = target.getterPrototype;\r\n if (prototype) {\r\n let instance = this.resolver.resolveFunction(prototype, null);\r\n if (!instance) return this.module.createUnreachable();\r\n let signature = instance.signature;\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n 0,\r\n instance.is(CommonFlags.INSTANCE),\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n let inline = (instance.decoratorFlags & DecoratorFlags.INLINE) != 0;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let thisExpression = assert(this.resolver.currentThisExpression); //!!!\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], reportNode, thisExpr, inline);\r\n } else {\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], reportNode, 0, inline);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n reportNode.range, (target).simpleName, (target).parent.toString()\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n\r\n compileTernaryExpression(expression: TernaryExpression, contextualType: Type): ExpressionRef {\r\n var ifThen = expression.ifThen;\r\n var ifElse = expression.ifElse;\r\n var currentFunction = this.currentFunction;\r\n var parentFlow = currentFunction.flow;\r\n\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(expression.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n\r\n if (\r\n !this.options.noTreeShaking ||\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT)\r\n ) {\r\n // Try to eliminate unnecesssary branches if the condition is constant\r\n let condExprPrecomp = this.module.precomputeExpression(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n return getConstValueI32(condExprPrecomp)\r\n ? this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE)\r\n : this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(expression.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n var ifThenFlow = parentFlow.fork();\r\n currentFunction.flow = ifThenFlow;\r\n var ifThenExpr = this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE);\r\n var ifThenType = this.currentType;\r\n ifThenFlow.free();\r\n\r\n var ifElseFlow = parentFlow.fork();\r\n currentFunction.flow = ifElseFlow;\r\n var ifElseExpr = this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n var ifElseType = this.currentType;\r\n currentFunction.flow = ifElseFlow.free();\r\n\r\n parentFlow.inheritMutual(ifThenFlow, ifElseFlow);\r\n\r\n var commonType = Type.commonCompatible(ifThenType, ifElseType, false);\r\n if (!commonType) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n expression.range, ifThenType.toString(), ifElseType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n ifThenExpr = this.convertExpression(\r\n ifThenExpr,\r\n ifThenType,\r\n commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n ifThen\r\n );\r\n ifElseExpr = this.convertExpression(\r\n ifElseExpr,\r\n ifElseType,\r\n commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n ifElse\r\n );\r\n this.currentType = commonType;\r\n return this.module.createIf(condExpr, ifThenExpr, ifElseExpr);\r\n }\r\n\r\n compileUnaryPostfixExpression(expression: UnaryPostfixExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // make a getter for the expression (also obtains the type)\r\n var getValue = this.compileExpression( // reports\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // shortcut if compiling the getter already failed\r\n if (getExpressionId(getValue) == ExpressionId.Unreachable) return getValue;\r\n\r\n var currentType = this.currentType;\r\n\r\n // if the value isn't dropped, a temp. local is required to remember the original value\r\n var tempLocal: Local | null = null;\r\n if (contextualType != Type.void) {\r\n tempLocal = currentFunction.getTempLocal(currentType, false);\r\n getValue = module.createTeeLocal(\r\n tempLocal.index,\r\n getValue\r\n );\r\n }\r\n\r\n var calcValue: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS_PLUS: {\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 calcValue = module.createBinary(\r\n BinaryOp.AddI32,\r\n getValue,\r\n module.createI32(1)\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\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.POSTFIX_INC);\r\n if (overload) {\r\n calcValue = this.compileUnaryOverload(overload, expression.operand, getValue, 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 case TypeKind.ISIZE: {\r\n let options = this.options;\r\n calcValue = module.createBinary(\r\n options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n getValue,\r\n currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n calcValue = module.createBinary(\r\n BinaryOp.AddI64,\r\n getValue,\r\n module.createI64(1)\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n calcValue = module.createBinary(\r\n BinaryOp.AddF32,\r\n getValue,\r\n module.createF32(1)\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n calcValue = module.createBinary(\r\n BinaryOp.AddF64,\r\n getValue,\r\n module.createF64(1)\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 break;\r\n }\r\n case Token.MINUS_MINUS: {\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 calcValue = module.createBinary(\r\n BinaryOp.SubI32,\r\n getValue,\r\n module.createI32(1)\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\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.POSTFIX_DEC);\r\n if (overload) {\r\n calcValue = this.compileUnaryOverload(overload, expression.operand, getValue, 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 case TypeKind.ISIZE: {\r\n let options = this.options;\r\n calcValue = module.createBinary(\r\n options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n getValue,\r\n currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n calcValue = module.createBinary(\r\n BinaryOp.SubI64,\r\n getValue,\r\n module.createI64(1)\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n calcValue = module.createBinary(\r\n BinaryOp.SubF32,\r\n getValue,\r\n module.createF32(1)\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n calcValue = module.createBinary(\r\n BinaryOp.SubF64,\r\n getValue,\r\n module.createF64(1)\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 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 (!tempLocal) {\r\n this.currentType = Type.void;\r\n return this.compileAssignmentWithValue(expression.operand,\r\n calcValue,\r\n false\r\n );\r\n }\r\n\r\n // otherwise use the temp. local for the intermediate value (always possibly overflows)\r\n var setValue = this.compileAssignmentWithValue(expression.operand,\r\n calcValue, // also tees getValue to tempLocal\r\n false\r\n );\r\n\r\n this.currentType = tempLocal.type;\r\n currentFunction.freeTempLocal(tempLocal);\r\n var nativeType = tempLocal.type.toNativeType();\r\n\r\n return module.createBlock(null, [\r\n setValue,\r\n module.createGetLocal(tempLocal.index, nativeType)\r\n ], nativeType); // result of 'x++' / 'x--' might overflow\r\n }\r\n\r\n compileUnaryPrefixExpression(\r\n expression: UnaryPrefixExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var compound = false;\r\n var expr: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PLUS);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // nop\r\n break;\r\n }\r\n case Token.MINUS: {\r\n if (expression.operand.kind == NodeKind.LITERAL && (\r\n (expression.operand).literalKind == LiteralKind.INTEGER ||\r\n (expression.operand).literalKind == LiteralKind.FLOAT\r\n )) {\r\n // implicitly negate integer and float literals. also enables proper checking of literal ranges.\r\n expr = this.compileLiteralExpression(expression.operand, contextualType, true);\r\n // compileExpression normally does this:\r\n if (this.options.sourceMap) this.addDebugLocation(expr, expression.range);\r\n break;\r\n }\r\n\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.MINUS);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.SubI32, module.createI32(0), expr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n this.currentType.toNativeZero(module),\r\n expr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, module.createI64(0), expr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createUnary(UnaryOp.NegF32, expr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createUnary(UnaryOp.NegF64, expr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.PLUS_PLUS: {\r\n compound = true;\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PREFIX_INC);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.AddI32, expr, this.module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n expr,\r\n this.currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AddI64, expr, module.createI64(1));\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.AddF32, expr, module.createF32(1));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.AddF64, expr, module.createF64(1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n compound = true;\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PREFIX_DEC);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.SubI32, expr, module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n expr,\r\n this.currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, expr, module.createI64(1));\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.SubF32, expr, module.createF32(1));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.SubF64, expr, module.createF64(1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.EXCLAMATION: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.NOT);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n // allow '!' for references even without an overload\r\n }\r\n\r\n expr = this.makeIsFalseish(expr, this.currentType);\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.TILDE: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType.is(TypeFlags.FLOAT)\r\n ? Type.i64\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_NOT);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n } else {\r\n expr = this.convertExpression(\r\n expr,\r\n this.currentType, this.currentType.intType,\r\n ConversionKind.IMPLICIT, WrapMode.NONE,\r\n expression.operand\r\n );\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.XorI32, expr, module.createI32(-1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n expr,\r\n this.currentType.toNativeNegOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.XorI64, expr, module.createI64(-1, -1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.TYPEOF: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(expression.operand, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n\r\n /** Makes sure that a 32-bit integer value is wrapped to a valid value of the specified type. */\r\n ensureSmallIntegerWrap(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n var flow = this.currentFunction.flow;\r\n switch (type.kind) {\r\n case TypeKind.I8: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = this.options.hasFeature(Feature.SIGN_EXTENSION)\r\n ? module.createUnary(UnaryOp.ExtendI8ToI32, expr)\r\n : module.createBinary(BinaryOp.ShrI32,\r\n module.createBinary(BinaryOp.ShlI32,\r\n expr,\r\n module.createI32(24)\r\n ),\r\n module.createI32(24)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.I16: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = this.options.hasFeature(Feature.SIGN_EXTENSION)\r\n ? module.createUnary(UnaryOp.ExtendI16ToI32, expr)\r\n : module.createBinary(BinaryOp.ShrI32,\r\n module.createBinary(BinaryOp.ShlI32,\r\n expr,\r\n module.createI32(16)\r\n ),\r\n module.createI32(16)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.U8: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xff)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.U16: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xffff)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.BOOL: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0x1)\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n return expr;\r\n }\r\n\r\n /** Creates a comparison whether an expression is 'false' in a broader sense. */\r\n makeIsFalseish(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n switch (type.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = this.ensureSmallIntegerWrap(expr, type);\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return module.createUnary(UnaryOp.EqzI32, expr);\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createUnary(UnaryOp.EqzI64, expr);\r\n }\r\n case TypeKind.USIZE: // TODO: strings?\r\n case TypeKind.ISIZE: {\r\n return module.createUnary(type.size == 64 ? UnaryOp.EqzI64 : UnaryOp.EqzI32, expr);\r\n }\r\n case TypeKind.F32: {\r\n return module.createBinary(BinaryOp.EqF32, expr, module.createF32(0));\r\n }\r\n case TypeKind.F64: {\r\n return module.createBinary(BinaryOp.EqF64, expr, module.createF64(0));\r\n }\r\n default: {\r\n assert(false);\r\n return module.createI32(1);\r\n }\r\n }\r\n }\r\n\r\n /** Creates a comparison whether an expression is 'true' in a broader sense. */\r\n makeIsTrueish(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n switch (type.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = this.ensureSmallIntegerWrap(expr, type);\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return expr;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createBinary(BinaryOp.NeI64, expr, module.createI64(0));\r\n }\r\n case TypeKind.USIZE: // TODO: strings?\r\n case TypeKind.ISIZE: {\r\n return type.size == 64\r\n ? module.createBinary(BinaryOp.NeI64, expr, module.createI64(0))\r\n : expr;\r\n }\r\n case TypeKind.F32: {\r\n return module.createBinary(BinaryOp.NeF32, expr, module.createF32(0));\r\n }\r\n case TypeKind.F64: {\r\n return module.createBinary(BinaryOp.NeF64, expr, module.createF64(0));\r\n }\r\n default: {\r\n assert(false);\r\n return module.createI32(0);\r\n }\r\n }\r\n }\r\n\r\n /** Makes an allocation expression for an instance of the specified class. */\r\n makeAllocate(classInstance: Class, reportNode: Node): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var nativeSizeType = this.options.nativeSizeType;\r\n\r\n // allocate the necessary memory and tee the pointer to a temp. local for reuse\r\n var tempLocal = currentFunction.getTempLocal(classInstance.type, false);\r\n var initializers = new Array();\r\n initializers.push(\r\n module.createSetLocal(tempLocal.index,\r\n compileAllocate(this, classInstance, reportNode)\r\n )\r\n );\r\n\r\n // apply field initializers\r\n if (classInstance.members) {\r\n for (let member of classInstance.members.values()) {\r\n if (member.kind == ElementKind.FIELD) {\r\n let field = member;\r\n let fieldType = field.type;\r\n let nativeFieldType = fieldType.toNativeType();\r\n let fieldDeclaration = field.prototype.declaration;\r\n assert(!field.isAny(CommonFlags.CONST));\r\n if (fieldDeclaration.initializer) { // use initializer\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n this.compileExpression( // reports\r\n fieldDeclaration.initializer,\r\n fieldType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n ),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n } else { // initialize with zero\r\n // TODO: might be unnecessary if the ctor initializes the field\r\n let parameterIndex = (field.prototype.declaration).parameterIndex;\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n parameterIndex >= 0 // initialized via parameter\r\n ? module.createGetLocal(1 + parameterIndex, nativeFieldType)\r\n : fieldType.toNativeZero(module),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n }\r\n }\r\n }\r\n }\r\n\r\n // return `this`\r\n initializers.push(\r\n module.createGetLocal(tempLocal.index, nativeSizeType)\r\n );\r\n\r\n currentFunction.freeTempLocal(tempLocal);\r\n this.currentType = classInstance.type;\r\n return module.createBlock(null, initializers, nativeSizeType);\r\n }\r\n\r\n /** Makes a conditional allocation expression inside of the constructor of the specified class. */\r\n makeConditionalAllocate(classInstance: Class, reportNode: Node): ExpressionRef {\r\n // requires that `this` is the first local\r\n var module = this.module;\r\n var nativeSizeType = this.options.nativeSizeType;\r\n this.currentType = classInstance.type;\r\n return module.createIf(\r\n nativeSizeType == NativeType.I64\r\n ? module.createBinary(\r\n BinaryOp.NeI64,\r\n module.createGetLocal(0, NativeType.I64),\r\n module.createI64(0)\r\n )\r\n : module.createGetLocal(0, NativeType.I32),\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createTeeLocal(0,\r\n this.makeAllocate(classInstance, reportNode)\r\n )\r\n );\r\n }\r\n\r\n /** Adds the debug location of the specified expression at the specified range to the source map. */\r\n addDebugLocation(expr: ExpressionRef, range: Range): void {\r\n var currentFunction = this.currentFunction;\r\n var source = range.source;\r\n if (source.debugInfoIndex < 0) source.debugInfoIndex = this.module.addDebugInfoFile(source.normalizedPath);\r\n range.debugInfoRef = expr;\r\n currentFunction.debugLocations.push(range);\r\n }\r\n}\r\n\r\n// helpers\r\n\r\nfunction mangleImportName(\r\n element: Element,\r\n declaration: DeclarationStatement\r\n): void {\r\n // by default, use the file name as the module name\r\n mangleImportName_moduleName = declaration.range.source.simplePath;\r\n // and the internal name of the element within that file as the element name\r\n mangleImportName_elementName = declaration.programLevelInternalName;\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 one argument is given, override just the element name\r\n // if two arguments are given, override both module and element name\r\n if (arg.kind == NodeKind.LITERAL && (arg).literalKind == LiteralKind.STRING) {\r\n mangleImportName_elementName = (arg).value;\r\n if (args.length >= 2) {\r\n arg = args[1];\r\n if (arg.kind == NodeKind.LITERAL && (arg).literalKind == LiteralKind.STRING) {\r\n mangleImportName_moduleName = mangleImportName_elementName;\r\n mangleImportName_elementName = (arg).value;\r\n if (args.length > 2) {\r\n program.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n decorator.range, \"2\", args.length.toString()\r\n );\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.String_literal_expected,\r\n arg.range\r\n );\r\n }\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.String_literal_expected,\r\n arg.range\r\n );\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n decorator.range, \"1\", \"0\"\r\n );\r\n }\r\n}\r\n\r\nvar mangleImportName_moduleName: string;\r\nvar mangleImportName_elementName: string;\r\n","/**\r\n * Generated from diagnosticsMessages.json. Do not edit.\r\n * @module diagnostics\r\n *//***/\r\n\r\n/* tslint:disable:max-line-length */\r\n\r\n/** Enum of available diagnostic codes. */\r\nexport enum DiagnosticCode {\r\n Operation_not_supported = 100,\r\n Operation_is_unsafe = 101,\r\n User_defined_0 = 102,\r\n Conversion_from_type_0_to_1_requires_an_explicit_cast = 200,\r\n Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit = 201,\r\n Type_0_cannot_be_changed_to_type_1 = 202,\r\n Type_0_cannot_be_reinterpreted_as_type_1 = 203,\r\n Basic_type_0_cannot_be_nullable = 204,\r\n Cannot_export_a_mutable_global = 205,\r\n Compiling_constant_with_non_constant_initializer_as_mutable = 206,\r\n Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa = 207,\r\n Unmanaged_classes_cannot_implement_interfaces = 208,\r\n Invalid_regular_expression_flags = 209,\r\n Implementation_0_must_match_the_signature_1 = 210,\r\n Class_0_is_sealed_and_cannot_be_extended = 211,\r\n Decorator_0_is_not_valid_here = 212,\r\n Duplicate_decorator = 213,\r\n An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf = 214,\r\n Optional_parameter_must_have_an_initializer = 215,\r\n Constructor_of_class_0_must_not_require_any_arguments = 216,\r\n Function_0_cannot_be_inlined_into_itself = 217,\r\n Cannot_access_method_0_without_calling_it_as_it_requires_this_to_be_set = 218,\r\n Optional_properties_are_not_supported = 219,\r\n Unterminated_string_literal = 1002,\r\n Identifier_expected = 1003,\r\n _0_expected = 1005,\r\n A_file_cannot_have_a_reference_to_itself = 1006,\r\n Trailing_comma_not_allowed = 1009,\r\n Unexpected_token = 1012,\r\n A_rest_parameter_must_be_last_in_a_parameter_list = 1014,\r\n Parameter_cannot_have_question_mark_and_initializer = 1015,\r\n A_required_parameter_cannot_follow_an_optional_parameter = 1016,\r\n Statements_are_not_allowed_in_ambient_contexts = 1036,\r\n Initializers_are_not_allowed_in_ambient_contexts = 1039,\r\n _0_modifier_cannot_be_used_here = 1042,\r\n A_rest_parameter_cannot_be_optional = 1047,\r\n A_rest_parameter_cannot_have_an_initializer = 1048,\r\n A_set_accessor_must_have_exactly_one_parameter = 1049,\r\n A_set_accessor_parameter_cannot_have_an_initializer = 1052,\r\n A_get_accessor_cannot_have_parameters = 1054,\r\n Enum_member_must_have_initializer = 1061,\r\n Type_parameters_cannot_appear_on_a_constructor_declaration = 1092,\r\n Type_annotation_cannot_appear_on_a_constructor_declaration = 1093,\r\n An_accessor_cannot_have_type_parameters = 1094,\r\n A_set_accessor_cannot_have_a_return_type_annotation = 1095,\r\n Type_parameter_list_cannot_be_empty = 1098,\r\n A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement = 1104,\r\n A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement = 1105,\r\n A_return_statement_can_only_be_used_within_a_function_body = 1108,\r\n Expression_expected = 1109,\r\n Type_expected = 1110,\r\n A_default_clause_cannot_appear_more_than_once_in_a_switch_statement = 1113,\r\n Duplicate_label_0 = 1114,\r\n Octal_literals_are_not_allowed_in_strict_mode = 1121,\r\n Digit_expected = 1124,\r\n Hexadecimal_digit_expected = 1125,\r\n Unexpected_end_of_text = 1126,\r\n Invalid_character = 1127,\r\n _case_or_default_expected = 1130,\r\n A_declare_modifier_cannot_be_used_in_an_already_ambient_context = 1038,\r\n Type_argument_expected = 1140,\r\n String_literal_expected = 1141,\r\n Line_break_not_permitted_here = 1142,\r\n Declaration_expected = 1146,\r\n _const_declarations_must_be_initialized = 1155,\r\n Unterminated_regular_expression_literal = 1161,\r\n Interface_declaration_cannot_have_implements_clause = 1176,\r\n Binary_digit_expected = 1177,\r\n Octal_digit_expected = 1178,\r\n An_implementation_cannot_be_declared_in_ambient_contexts = 1183,\r\n An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive = 1198,\r\n Unterminated_Unicode_escape_sequence = 1199,\r\n Decorators_are_not_valid_here = 1206,\r\n _abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration = 1242,\r\n Method_0_cannot_have_an_implementation_because_it_is_marked_abstract = 1245,\r\n A_definite_assignment_assertion_is_not_permitted_in_this_context = 1255,\r\n A_class_may_only_extend_another_class = 1311,\r\n A_parameter_property_cannot_be_declared_using_a_rest_parameter = 1317,\r\n Duplicate_identifier_0 = 2300,\r\n Cannot_find_name_0 = 2304,\r\n Module_0_has_no_exported_member_1 = 2305,\r\n Generic_type_0_requires_1_type_argument_s = 2314,\r\n Type_0_is_not_generic = 2315,\r\n Type_0_is_not_assignable_to_type_1 = 2322,\r\n Index_signature_is_missing_in_type_0 = 2329,\r\n _this_cannot_be_referenced_in_current_location = 2332,\r\n _super_can_only_be_referenced_in_a_derived_class = 2335,\r\n Property_0_does_not_exist_on_type_1 = 2339,\r\n Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures = 2349,\r\n Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature = 2351,\r\n A_function_whose_declared_type_is_not_void_must_return_a_value = 2355,\r\n The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access = 2357,\r\n The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access = 2364,\r\n Operator_0_cannot_be_applied_to_types_1_and_2 = 2365,\r\n _get_and_set_accessor_must_have_the_same_type = 2380,\r\n Constructor_implementation_is_missing = 2390,\r\n Function_implementation_is_missing_or_not_immediately_following_the_declaration = 2391,\r\n Multiple_constructor_implementations_are_not_allowed = 2392,\r\n Duplicate_function_implementation = 2393,\r\n Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local = 2395,\r\n Type_0_has_no_property_1 = 2460,\r\n The_0_operator_cannot_be_applied_to_type_1 = 2469,\r\n In_const_enum_declarations_member_initializer_must_be_constant_expression = 2474,\r\n Export_declaration_conflicts_with_exported_declaration_of_0 = 2484,\r\n Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property = 2540,\r\n The_target_of_an_assignment_must_be_a_variable_or_a_property_access = 2541,\r\n Index_signature_in_type_0_only_permits_reading = 2542,\r\n Expected_0_arguments_but_got_1 = 2554,\r\n Expected_at_least_0_arguments_but_got_1 = 2555,\r\n Expected_0_type_arguments_but_got_1 = 2558,\r\n A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums = 2651,\r\n Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration = 2673,\r\n Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration = 2674,\r\n Namespace_0_has_no_exported_member_1 = 2694,\r\n File_0_not_found = 6054,\r\n Numeric_separators_are_not_allowed_here = 6188,\r\n Multiple_consecutive_numeric_separators_are_not_permitted = 6189\r\n}\r\n\r\n/** Translates a diagnostic code to its respective string. */\r\nexport function diagnosticCodeToString(code: DiagnosticCode): string {\r\n switch (code) {\r\n case 100: return \"Operation not supported.\";\r\n case 101: return \"Operation is unsafe.\";\r\n case 102: return \"User-defined: {0}\";\r\n case 200: return \"Conversion from type '{0}' to '{1}' requires an explicit cast.\";\r\n case 201: return \"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.\";\r\n case 202: return \"Type '{0}' cannot be changed to type '{1}'.\";\r\n case 203: return \"Type '{0}' cannot be reinterpreted as type '{1}'.\";\r\n case 204: return \"Basic type '{0}' cannot be nullable.\";\r\n case 205: return \"Cannot export a mutable global.\";\r\n case 206: return \"Compiling constant with non-constant initializer as mutable.\";\r\n case 207: return \"Unmanaged classes cannot extend managed classes and vice-versa.\";\r\n case 208: return \"Unmanaged classes cannot implement interfaces.\";\r\n case 209: return \"Invalid regular expression flags.\";\r\n case 210: return \"Implementation '{0}' must match the signature '{1}'.\";\r\n case 211: return \"Class '{0}' is sealed and cannot be extended.\";\r\n case 212: return \"Decorator '{0}' is not valid here.\";\r\n case 213: return \"Duplicate decorator.\";\r\n case 214: return \"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.\";\r\n case 215: return \"Optional parameter must have an initializer.\";\r\n case 216: return \"Constructor of class '{0}' must not require any arguments.\";\r\n case 217: return \"Function '{0}' cannot be inlined into itself.\";\r\n case 218: return \"Cannot access method '{0}' without calling it as it requires 'this' to be set.\";\r\n case 219: return \"Optional properties are not supported.\";\r\n case 1002: return \"Unterminated string literal.\";\r\n case 1003: return \"Identifier expected.\";\r\n case 1005: return \"'{0}' expected.\";\r\n case 1006: return \"A file cannot have a reference to itself.\";\r\n case 1009: return \"Trailing comma not allowed.\";\r\n case 1012: return \"Unexpected token.\";\r\n case 1014: return \"A rest parameter must be last in a parameter list.\";\r\n case 1015: return \"Parameter cannot have question mark and initializer.\";\r\n case 1016: return \"A required parameter cannot follow an optional parameter.\";\r\n case 1036: return \"Statements are not allowed in ambient contexts.\";\r\n case 1039: return \"Initializers are not allowed in ambient contexts.\";\r\n case 1042: return \"'{0}' modifier cannot be used here.\";\r\n case 1047: return \"A rest parameter cannot be optional.\";\r\n case 1048: return \"A rest parameter cannot have an initializer.\";\r\n case 1049: return \"A 'set' accessor must have exactly one parameter.\";\r\n case 1052: return \"A 'set' accessor parameter cannot have an initializer.\";\r\n case 1054: return \"A 'get' accessor cannot have parameters.\";\r\n case 1061: return \"Enum member must have initializer.\";\r\n case 1092: return \"Type parameters cannot appear on a constructor declaration.\";\r\n case 1093: return \"Type annotation cannot appear on a constructor declaration.\";\r\n case 1094: return \"An accessor cannot have type parameters.\";\r\n case 1095: return \"A 'set' accessor cannot have a return type annotation.\";\r\n case 1098: return \"Type parameter list cannot be empty.\";\r\n case 1104: return \"A 'continue' statement can only be used within an enclosing iteration statement.\";\r\n case 1105: return \"A 'break' statement can only be used within an enclosing iteration or switch statement.\";\r\n case 1108: return \"A 'return' statement can only be used within a function body.\";\r\n case 1109: return \"Expression expected.\";\r\n case 1110: return \"Type expected.\";\r\n case 1113: return \"A 'default' clause cannot appear more than once in a 'switch' statement.\";\r\n case 1114: return \"Duplicate label '{0}'.\";\r\n case 1121: return \"Octal literals are not allowed in strict mode.\";\r\n case 1124: return \"Digit expected.\";\r\n case 1125: return \"Hexadecimal digit expected.\";\r\n case 1126: return \"Unexpected end of text.\";\r\n case 1127: return \"Invalid character.\";\r\n case 1130: return \"'case' or 'default' expected.\";\r\n case 1038: return \"A 'declare' modifier cannot be used in an already ambient context.\";\r\n case 1140: return \"Type argument expected.\";\r\n case 1141: return \"String literal expected.\";\r\n case 1142: return \"Line break not permitted here.\";\r\n case 1146: return \"Declaration expected.\";\r\n case 1155: return \"'const' declarations must be initialized.\";\r\n case 1161: return \"Unterminated regular expression literal.\";\r\n case 1176: return \"Interface declaration cannot have 'implements' clause.\";\r\n case 1177: return \"Binary digit expected.\";\r\n case 1178: return \"Octal digit expected.\";\r\n case 1183: return \"An implementation cannot be declared in ambient contexts.\";\r\n case 1198: return \"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.\";\r\n case 1199: return \"Unterminated Unicode escape sequence.\";\r\n case 1206: return \"Decorators are not valid here.\";\r\n case 1242: return \"'abstract' modifier can only appear on a class, method, or property declaration.\";\r\n case 1245: return \"Method '{0}' cannot have an implementation because it is marked abstract.\";\r\n case 1255: return \"A definite assignment assertion '!' is not permitted in this context.\";\r\n case 1311: return \"A class may only extend another class.\";\r\n case 1317: return \"A parameter property cannot be declared using a rest parameter.\";\r\n case 2300: return \"Duplicate identifier '{0}'.\";\r\n case 2304: return \"Cannot find name '{0}'.\";\r\n case 2305: return \"Module '{0}' has no exported member '{1}'.\";\r\n case 2314: return \"Generic type '{0}' requires {1} type argument(s).\";\r\n case 2315: return \"Type '{0}' is not generic.\";\r\n case 2322: return \"Type '{0}' is not assignable to type '{1}'.\";\r\n case 2329: return \"Index signature is missing in type '{0}'.\";\r\n case 2332: return \"'this' cannot be referenced in current location.\";\r\n case 2335: return \"'super' can only be referenced in a derived class.\";\r\n case 2339: return \"Property '{0}' does not exist on type '{1}'.\";\r\n case 2349: return \"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.\";\r\n case 2351: return \"Cannot use 'new' with an expression whose type lacks a construct signature.\";\r\n case 2355: return \"A function whose declared type is not 'void' must return a value.\";\r\n case 2357: return \"The operand of an increment or decrement operator must be a variable or a property access.\";\r\n case 2364: return \"The left-hand side of an assignment expression must be a variable or a property access.\";\r\n case 2365: return \"Operator '{0}' cannot be applied to types '{1}' and '{2}'.\";\r\n case 2380: return \"'get' and 'set' accessor must have the same type.\";\r\n case 2390: return \"Constructor implementation is missing.\";\r\n case 2391: return \"Function implementation is missing or not immediately following the declaration.\";\r\n case 2392: return \"Multiple constructor implementations are not allowed.\";\r\n case 2393: return \"Duplicate function implementation.\";\r\n case 2395: return \"Individual declarations in merged declaration '{0}' must be all exported or all local.\";\r\n case 2460: return \"Type '{0}' has no property '{1}'.\";\r\n case 2469: return \"The '{0}' operator cannot be applied to type '{1}'.\";\r\n case 2474: return \"In 'const' enum declarations member initializer must be constant expression.\";\r\n case 2484: return \"Export declaration conflicts with exported declaration of '{0}'.\";\r\n case 2540: return \"Cannot assign to '{0}' because it is a constant or a read-only property.\";\r\n case 2541: return \"The target of an assignment must be a variable or a property access.\";\r\n case 2542: return \"Index signature in type '{0}' only permits reading.\";\r\n case 2554: return \"Expected {0} arguments, but got {1}.\";\r\n case 2555: return \"Expected at least {0} arguments, but got {1}.\";\r\n case 2558: return \"Expected {0} type arguments, but got {1}.\";\r\n case 2651: return \"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.\";\r\n case 2673: return \"Constructor of class '{0}' is private and only accessible within the class declaration.\";\r\n case 2674: return \"Constructor of class '{0}' is protected and only accessible within the class declaration.\";\r\n case 2694: return \"Namespace '{0}' has no exported member '{1}'.\";\r\n case 6054: return \"File '{0}' not found.\";\r\n case 6188: return \"Numeric separators are not allowed here.\";\r\n case 6189: return \"Multiple consecutive numeric separators are not permitted.\";\r\n default: return \"\";\r\n }\r\n}\r\n","/**\r\n * Resolve infrastructure to obtain types and elements.\r\n * @module resolver\r\n *//***/\r\n\r\nimport {\r\n DiagnosticEmitter,\r\n DiagnosticCode\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Program,\r\n ElementKind,\r\n OperatorKind,\r\n FlowFlags,\r\n\r\n Element,\r\n Class,\r\n ClassPrototype,\r\n Function,\r\n FunctionTarget,\r\n FunctionPrototype,\r\n VariableLikeElement,\r\n Property,\r\n DecoratorFlags,\r\n FieldPrototype,\r\n Field\r\n} from \"./program\";\r\n\r\nimport {\r\n SignatureNode,\r\n ParameterKind,\r\n CommonTypeNode,\r\n NodeKind,\r\n TypeNode,\r\n TypeParameterNode,\r\n Node,\r\n Range,\r\n IdentifierExpression,\r\n CallExpression,\r\n ElementAccessExpression,\r\n PropertyAccessExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n ParenthesizedExpression,\r\n AssertionExpression,\r\n Expression\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n Signature,\r\n typesToString\r\n} from \"./types\";\r\n\r\nimport {\r\n PATH_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n CommonFlags\r\n} from \"./common\";\r\n\r\n/** Indicates whether errors are reported or not. */\r\nexport enum ReportMode {\r\n /** Report errors. */\r\n REPORT,\r\n /** Swallow errors. */\r\n SWALLOW\r\n}\r\n\r\n/** Provides tools to resolve types and expressions. */\r\nexport class Resolver extends DiagnosticEmitter {\r\n\r\n /** The program this resolver belongs to. */\r\n program: Program;\r\n\r\n /** Target expression of the previously resolved property or element access. */\r\n currentThisExpression: Expression | null = null;\r\n /** Element expression of the previously resolved element access. */\r\n currentElementExpression : Expression | null = null;\r\n\r\n /** Constructs the resolver for the specified program. */\r\n constructor(program: Program) {\r\n super(program.diagnostics);\r\n this.program = program;\r\n }\r\n\r\n /** Resolves a {@link CommonTypeNode} to a concrete {@link Type}. */\r\n resolveType(\r\n node: CommonTypeNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportMode = ReportMode.REPORT\r\n ): Type | null {\r\n\r\n // handle signatures specifically\r\n if (node.kind == NodeKind.SIGNATURE) {\r\n let signature = this.resolveSignature(node, contextualTypeArguments, reportMode);\r\n if (!signature) return null;\r\n return node.isNullable ? signature.type.asNullable() : signature.type;\r\n }\r\n\r\n // now dealing with TypeNode\r\n assert(node.kind == NodeKind.TYPE);\r\n var typeNode = node;\r\n var simpleName = typeNode.name.text;\r\n var globalName = simpleName;\r\n var localName = typeNode.range.source.internalPath + PATH_DELIMITER + simpleName; // TODO cache\r\n\r\n // check file-global / program-global enum or class\r\n {\r\n let elementsLookup = this.program.elementsLookup;\r\n let element: Element | null;\r\n if (\r\n (element = elementsLookup.get(localName)) || // file-global\r\n (element = elementsLookup.get(globalName)) // program-global\r\n ) {\r\n switch (element.kind) {\r\n case ElementKind.ENUM: {\r\n if (typeNode.typeArguments !== null && typeNode.typeArguments.length) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n node.range, element.internalName\r\n );\r\n }\r\n return null;\r\n }\r\n return Type.i32;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n let instance = this.resolveClassInclTypeArguments(\r\n element,\r\n typeNode.typeArguments,\r\n contextualTypeArguments,\r\n node\r\n ); // reports\r\n if (!instance) return null;\r\n return node.isNullable ? instance.type.asNullable() : instance.type;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // check (global) type alias\r\n {\r\n let alias = this.program.typeAliases.get(simpleName);\r\n if (alias) return this.resolveType(alias.type, contextualTypeArguments, reportMode);\r\n }\r\n\r\n // resolve parameters\r\n {\r\n let typeArgumentNodes = typeNode.typeArguments;\r\n if (typeArgumentNodes) {\r\n let numTypeArguments = typeArgumentNodes.length;\r\n let paramTypes = new Array(numTypeArguments);\r\n for (let i = 0; i < numTypeArguments; ++i) {\r\n let paramType = this.resolveType( // reports\r\n typeArgumentNodes[i],\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n if (!paramType) return null;\r\n paramTypes[i] = paramType;\r\n }\r\n if (numTypeArguments) { // can't be a placeholder if it has parameters\r\n let instanceKey = typesToString(paramTypes);\r\n if (instanceKey.length) {\r\n localName += \"<\" + instanceKey + \">\";\r\n globalName += \"<\" + instanceKey + \">\";\r\n }\r\n } else if (contextualTypeArguments) {\r\n let placeholderType = contextualTypeArguments.get(globalName);\r\n if (placeholderType) return placeholderType;\r\n }\r\n }\r\n }\r\n\r\n // check file-global / program-global type\r\n {\r\n let typesLookup = this.program.typesLookup;\r\n let type: Type | null;\r\n if (\r\n (type = typesLookup.get(localName)) ||\r\n (type = typesLookup.get(globalName))\r\n ) {\r\n return type;\r\n }\r\n }\r\n\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n typeNode.name.range, globalName\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /** Resolves a {@link SignatureNode} to a concrete {@link Signature}. */\r\n resolveSignature(\r\n node: SignatureNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Signature | null {\r\n var explicitThisType = node.explicitThisType;\r\n var thisType: Type | null = null;\r\n if (explicitThisType) {\r\n thisType = this.resolveType(explicitThisType, contextualTypeArguments, reportMode);\r\n if (!thisType) return null;\r\n }\r\n var parameterTypeNodes = node.parameters;\r\n var numParameters = parameterTypeNodes.length;\r\n var parameterTypes = new Array(numParameters);\r\n var parameterNames = new Array(numParameters);\r\n var requiredParameters = 0;\r\n var hasRest = false;\r\n for (let i = 0; i < numParameters; ++i) {\r\n let parameterTypeNode = parameterTypeNodes[i];\r\n switch (parameterTypeNode.parameterKind) {\r\n case ParameterKind.DEFAULT: {\r\n requiredParameters = i + 1;\r\n break;\r\n }\r\n case ParameterKind.REST: {\r\n assert(i == numParameters);\r\n hasRest = true;\r\n break;\r\n }\r\n }\r\n let parameterType = this.resolveType(\r\n assert(parameterTypeNode.type),\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n if (!parameterType) return null;\r\n parameterTypes[i] = parameterType;\r\n parameterNames[i] = parameterTypeNode.name.text;\r\n }\r\n var returnTypeNode = node.returnType;\r\n var returnType: Type | null;\r\n if (returnTypeNode) {\r\n returnType = this.resolveType(returnTypeNode, contextualTypeArguments, reportMode);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Type.void;\r\n }\r\n var signature = new Signature(parameterTypes, returnType, thisType);\r\n signature.parameterNames = parameterNames;\r\n signature.requiredParameters = requiredParameters;\r\n signature.hasRest = hasRest;\r\n return signature;\r\n }\r\n\r\n /** Resolves an array of type arguments to concrete types. */\r\n resolveTypeArguments(\r\n typeParameters: TypeParameterNode[],\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Type[] | null {\r\n var parameterCount = typeParameters.length;\r\n var argumentCount = typeArgumentNodes ? typeArgumentNodes.length : 0;\r\n if (parameterCount != argumentCount) {\r\n if (argumentCount) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n Range.join(\r\n (typeArgumentNodes)[0].range,\r\n (typeArgumentNodes)[argumentCount - 1].range\r\n ),\r\n parameterCount.toString(10), argumentCount.toString(10)\r\n );\r\n } else if (alternativeReportNode) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n alternativeReportNode.range.atEnd, parameterCount.toString(10), \"0\"\r\n );\r\n }\r\n return null;\r\n }\r\n var typeArguments = new Array(parameterCount);\r\n for (let i = 0; i < parameterCount; ++i) {\r\n let type = this.resolveType( // reports\r\n (typeArgumentNodes)[i],\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n if (!type) return null;\r\n // TODO: check extendsType\r\n typeArguments[i] = type;\r\n }\r\n return typeArguments;\r\n }\r\n\r\n /** Resolves an identifier to the element it refers to. */\r\n resolveIdentifier(\r\n identifier: IdentifierExpression,\r\n context: Element | null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Element | null {\r\n var name = identifier.text;\r\n var element: Element | null;\r\n\r\n if (context) {\r\n\r\n switch (context.kind) {\r\n case ElementKind.FUNCTION: { // search locals, use prototype\r\n element = (context).flow.getScopedLocal(name);\r\n if (element) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return element;\r\n }\r\n context = (context).prototype.parent;\r\n break;\r\n }\r\n case ElementKind.CLASS: { // use prototype\r\n context = (context).prototype.parent;\r\n break;\r\n }\r\n }\r\n\r\n // search context\r\n while (context) {\r\n let members = context.members;\r\n if (members) {\r\n if (element = members.get(name)) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return element;\r\n }\r\n }\r\n context = context.parent;\r\n }\r\n }\r\n\r\n // search current file\r\n var elementsLookup = this.program.elementsLookup;\r\n if (element = elementsLookup.get(identifier.range.source.internalPath + PATH_DELIMITER + name)) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\r\n }\r\n\r\n // search global scope\r\n if (element = elementsLookup.get(name)) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\r\n }\r\n\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n identifier.range, name\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /** Resolves a property access to the element it refers to. */\r\n resolvePropertyAccess(\r\n propertyAccess: PropertyAccessExpression,\r\n contextualFunction: Function,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Element | null {\r\n // start by resolving the lhs target (expression before the last dot)\r\n var targetExpression = propertyAccess.expression;\r\n var target = this.resolveExpression(targetExpression, contextualFunction, reportMode); // reports\r\n if (!target) return null;\r\n\r\n // at this point we know exactly what the target is, so look up the element within\r\n var propertyName = propertyAccess.property.text;\r\n\r\n // Resolve variable-likes to the class type they reference first\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n let type = (target).type;\r\n assert(type != Type.void);\r\n let classReference = type.classReference;\r\n if (!classReference) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, (target).type.toString()\r\n );\r\n return null;\r\n }\r\n target = classReference;\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = this.resolveFunction(\r\n assert((target).getterPrototype),\r\n null,\r\n null,\r\n reportMode\r\n );\r\n if (!getter) return null;\r\n let classReference = getter.signature.returnType.classReference;\r\n if (!classReference) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, getter.signature.returnType.toString()\r\n );\r\n return null;\r\n }\r\n target = classReference;\r\n break;\r\n }\r\n case ElementKind.CLASS: {\r\n let elementExpression = this.currentElementExpression;\r\n if (elementExpression) {\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n elementExpression.range, (target).internalName\r\n );\r\n return null;\r\n }\r\n let returnType = indexedGet.signature.returnType;\r\n if (!(target = returnType.classReference)) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, returnType.toString()\r\n );\r\n return null;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // Look up the member within\r\n switch (target.kind) {\r\n case ElementKind.CLASS_PROTOTYPE:\r\n case ElementKind.CLASS: {\r\n do {\r\n let members = target.members;\r\n let member: Element | null;\r\n if (members && (member = members.get(propertyName))) {\r\n this.currentThisExpression = targetExpression;\r\n this.currentElementExpression = null;\r\n return member; // instance FIELD, static GLOBAL, FUNCTION_PROTOTYPE...\r\n }\r\n // traverse inherited static members on the base prototype if target is a class prototype\r\n if (target.kind == ElementKind.CLASS_PROTOTYPE) {\r\n if ((target).basePrototype) {\r\n target = (target).basePrototype;\r\n } else {\r\n break;\r\n }\r\n // traverse inherited instance members on the base class if target is a class instance\r\n } else if (target.kind == ElementKind.CLASS) {\r\n if ((target).base) {\r\n target = (target).base;\r\n } else {\r\n break;\r\n }\r\n } else {\r\n break;\r\n }\r\n } while (true);\r\n break;\r\n }\r\n default: { // enums or other namespace-like elements\r\n let members = target.members;\r\n if (members) {\r\n let member = members.get(propertyName);\r\n if (member) {\r\n this.currentThisExpression = targetExpression;\r\n this.currentElementExpression = null;\r\n return member; // static ENUMVALUE, static GLOBAL, static FUNCTION_PROTOTYPE...\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, target.internalName\r\n );\r\n return null;\r\n }\r\n\r\n resolveElementAccess(\r\n elementAccess: ElementAccessExpression,\r\n contextualFunction: Function,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Element | null {\r\n var targetExpression = elementAccess.expression;\r\n var target = this.resolveExpression(targetExpression, contextualFunction, reportMode);\r\n if (!target) return null;\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n let type = (target).type;\r\n if (target = type.classReference) {\r\n this.currentThisExpression = targetExpression;\r\n this.currentElementExpression = elementAccess.elementExpression;\r\n return target;\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS: { // element access on element access\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET);\r\n if (!indexedGet) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n elementAccess.range, (target).internalName\r\n );\r\n }\r\n return null;\r\n }\r\n let returnType = indexedGet.signature.returnType;\r\n if (target = returnType.classReference) {\r\n this.currentThisExpression = targetExpression;\r\n this.currentElementExpression = elementAccess.elementExpression;\r\n return target;\r\n }\r\n break;\r\n }\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n targetExpression.range\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n resolveExpression(\r\n expression: Expression,\r\n contextualFunction: Function,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Element | null {\r\n while (expression.kind == NodeKind.PARENTHESIZED) {\r\n expression = (expression).expression;\r\n }\r\n switch (expression.kind) {\r\n case NodeKind.ASSERTION: {\r\n let type = this.resolveType(\r\n (expression).toType,\r\n contextualFunction.flow.contextualTypeArguments,\r\n reportMode\r\n );\r\n if (type) {\r\n let classType = type.classReference;\r\n if (classType) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return classType;\r\n }\r\n }\r\n return null;\r\n }\r\n case NodeKind.BINARY: { // TODO: string concatenation, mostly\r\n throw new Error(\"not implemented\");\r\n }\r\n case NodeKind.THIS: { // -> Class / ClassPrototype\r\n if (contextualFunction.flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let explicitLocal = contextualFunction.flow.getScopedLocal(\"this\");\r\n if (explicitLocal) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return explicitLocal;\r\n }\r\n }\r\n let parent = contextualFunction.parent;\r\n if (parent) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return parent;\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n }\r\n return null;\r\n }\r\n case NodeKind.SUPER: { // -> Class\r\n if (contextualFunction.flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let explicitLocal = contextualFunction.flow.getScopedLocal(\"super\");\r\n if (explicitLocal) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return explicitLocal;\r\n }\r\n }\r\n let parent = contextualFunction.parent;\r\n if (parent && parent.kind == ElementKind.CLASS && (parent = (parent).base)) {\r\n this.currentThisExpression = null;\r\n this.currentElementExpression = null;\r\n return parent;\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n }\r\n return null;\r\n }\r\n case NodeKind.IDENTIFIER: {\r\n return this.resolveIdentifier(expression, contextualFunction, reportMode);\r\n }\r\n case NodeKind.LITERAL: {\r\n switch ((expression).literalKind) {\r\n case LiteralKind.STRING: {\r\n this.currentThisExpression = expression;\r\n this.currentElementExpression = null;\r\n return this.program.stringInstance;\r\n }\r\n // case LiteralKind.ARRAY: // TODO\r\n }\r\n break;\r\n }\r\n case NodeKind.PROPERTYACCESS: {\r\n return this.resolvePropertyAccess(\r\n expression,\r\n contextualFunction,\r\n reportMode\r\n );\r\n }\r\n case NodeKind.ELEMENTACCESS: {\r\n return this.resolveElementAccess(\r\n expression,\r\n contextualFunction,\r\n reportMode\r\n );\r\n }\r\n case NodeKind.CALL: {\r\n let targetExpression = (expression).expression;\r\n let target = this.resolveExpression(targetExpression, contextualFunction, reportMode);\r\n if (!target) return null;\r\n if (target.kind == ElementKind.FUNCTION_PROTOTYPE) {\r\n let instance = this.resolveFunctionInclTypeArguments(\r\n target,\r\n (expression).typeArguments,\r\n contextualFunction.flow.contextualTypeArguments,\r\n expression,\r\n reportMode\r\n );\r\n if (!instance) return null;\r\n let returnType = instance.signature.returnType;\r\n let classType = returnType.classReference;\r\n if (classType) {\r\n // reuse resolvedThisExpression (might be property access)\r\n // reuse resolvedElementExpression (might be element access)\r\n return classType;\r\n } else {\r\n let signature = returnType.signatureReference;\r\n if (signature) {\r\n let functionTarget = signature.cachedFunctionTarget;\r\n if (!functionTarget) {\r\n functionTarget = new FunctionTarget(this.program, signature);\r\n signature.cachedFunctionTarget = functionTarget;\r\n }\r\n // reuse resolvedThisExpression (might be property access)\r\n // reuse resolvedElementExpression (might be element access)\r\n return functionTarget;\r\n }\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n targetExpression.range, target.internalName\r\n );\r\n }\r\n return null;\r\n }\r\n break;\r\n }\r\n }\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /** Resolves a function prototype to an instance using the specified concrete type arguments. */\r\n resolveFunction(\r\n prototype: FunctionPrototype,\r\n typeArguments: Type[] | null,\r\n contextualTypeArguments: Map | null = null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Function | null {\r\n var instanceKey = typeArguments ? typesToString(typeArguments) : \"\";\r\n var instance = prototype.instances.get(instanceKey);\r\n if (instance) return instance;\r\n\r\n var declaration = prototype.declaration;\r\n var isInstance = prototype.is(CommonFlags.INSTANCE);\r\n var classPrototype = prototype.classPrototype;\r\n\r\n // inherit contextual type arguments as provided. might be overridden.\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(\r\n inheritedName,\r\n inheritedType\r\n );\r\n }\r\n }\r\n\r\n // override with class type arguments if a partially resolved instance method\r\n var classTypeArguments = prototype.classTypeArguments;\r\n if (classTypeArguments) { // set only if partially resolved\r\n assert(prototype.is(CommonFlags.INSTANCE));\r\n let classDeclaration = assert(classPrototype).declaration;\r\n let classTypeParameters = classDeclaration.typeParameters;\r\n let numClassTypeParameters = classTypeParameters.length;\r\n assert(numClassTypeParameters == classTypeArguments.length);\r\n for (let i = 0; i < numClassTypeParameters; ++i) {\r\n contextualTypeArguments.set(\r\n classTypeParameters[i].name.text,\r\n classTypeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!classTypeArguments);\r\n }\r\n\r\n // override with function specific type arguments\r\n var signatureNode = declaration.signature;\r\n var functionTypeParameters = declaration.typeParameters;\r\n var numFunctionTypeArguments: i32;\r\n if (typeArguments && (numFunctionTypeArguments = typeArguments.length)) {\r\n assert(functionTypeParameters && numFunctionTypeArguments == functionTypeParameters.length);\r\n for (let i = 0; i < numFunctionTypeArguments; ++i) {\r\n contextualTypeArguments.set(\r\n (functionTypeParameters)[i].name.text,\r\n typeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!functionTypeParameters || functionTypeParameters.length == 0);\r\n }\r\n\r\n // resolve class if an instance method\r\n var classInstance: Class | null = null;\r\n var thisType: Type | null = null;\r\n if (isInstance) {\r\n classInstance = this.resolveClass(\r\n assert(classPrototype),\r\n classTypeArguments,\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n if (!classInstance) return null;\r\n thisType = classInstance.type;\r\n contextualTypeArguments.set(\"this\", thisType);\r\n }\r\n\r\n // resolve signature node\r\n var signatureParameters = signatureNode.parameters;\r\n var signatureParameterCount = signatureParameters.length;\r\n var parameterTypes = new Array(signatureParameterCount);\r\n var parameterNames = new Array(signatureParameterCount);\r\n var requiredParameters = 0;\r\n for (let i = 0; i < signatureParameterCount; ++i) {\r\n let parameterDeclaration = signatureParameters[i];\r\n if (parameterDeclaration.parameterKind == ParameterKind.DEFAULT) {\r\n requiredParameters = i + 1;\r\n }\r\n let typeNode = assert(parameterDeclaration.type);\r\n let parameterType = this.resolveType(typeNode, contextualTypeArguments, reportMode);\r\n if (!parameterType) return null;\r\n parameterTypes[i] = parameterType;\r\n parameterNames[i] = parameterDeclaration.name.text;\r\n }\r\n\r\n var returnType: Type;\r\n if (prototype.is(CommonFlags.SET)) {\r\n returnType = Type.void; // not annotated\r\n } else if (prototype.is(CommonFlags.CONSTRUCTOR)) {\r\n returnType = assert(classInstance).type; // not annotated\r\n } else {\r\n let typeNode = assert(signatureNode.returnType);\r\n let type = this.resolveType(typeNode, contextualTypeArguments, reportMode);\r\n if (!type) return null;\r\n returnType = type;\r\n }\r\n\r\n var signature = new Signature(parameterTypes, returnType, thisType);\r\n signature.parameterNames = parameterNames;\r\n signature.requiredParameters = requiredParameters;\r\n\r\n var internalName = prototype.internalName;\r\n if (instanceKey.length) internalName += \"<\" + instanceKey + \">\";\r\n instance = new Function(\r\n prototype,\r\n internalName,\r\n signature,\r\n classInstance\r\n ? classInstance\r\n : classPrototype,\r\n contextualTypeArguments\r\n );\r\n prototype.instances.set(instanceKey, instance);\r\n this.program.instancesLookup.set(internalName, instance);\r\n return instance;\r\n }\r\n\r\n /** Resolves a function prototype partially by applying the specified type arguments. */\r\n resolveFunctionPartially(\r\n prototype: FunctionPrototype,\r\n typeArguments: Type[] | null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): FunctionPrototype | null {\r\n assert(prototype.is(CommonFlags.INSTANCE));\r\n var classPrototype = assert(prototype.classPrototype);\r\n\r\n if (!(typeArguments && typeArguments.length)) return prototype; // no need to clone\r\n\r\n var simpleName = prototype.simpleName;\r\n var partialKey = typesToString(typeArguments);\r\n var partialPrototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n classPrototype.internalName + \"<\" + partialKey + \">\" + INSTANCE_DELIMITER + simpleName,\r\n prototype.declaration,\r\n classPrototype,\r\n prototype.decoratorFlags\r\n );\r\n partialPrototype.flags = prototype.flags;\r\n partialPrototype.operatorKind = prototype.operatorKind;\r\n partialPrototype.classTypeArguments = typeArguments;\r\n return partialPrototype;\r\n }\r\n\r\n /** Resolves a function prototype to an instance by first resolving the specified type arguments. */\r\n resolveFunctionInclTypeArguments(\r\n prototype: FunctionPrototype,\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n reportNode: Node,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Function | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (prototype.is(CommonFlags.GENERIC)) {\r\n assert(typeArgumentNodes != null && typeArgumentNodes.length != 0);\r\n resolvedTypeArguments = this.resolveTypeArguments( // reports\r\n assert(prototype.declaration.typeParameters),\r\n typeArgumentNodes,\r\n contextualTypeArguments,\r\n reportNode,\r\n reportMode\r\n );\r\n if (!resolvedTypeArguments) return null;\r\n }\r\n return this.resolveFunction(\r\n prototype,\r\n resolvedTypeArguments,\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n }\r\n\r\n /** Resolves a class prototype using the specified concrete type arguments. */\r\n resolveClass(\r\n prototype: ClassPrototype,\r\n typeArguments: Type[] | null,\r\n contextualTypeArguments: Map | null = null,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Class | null {\r\n var instanceKey = typeArguments ? typesToString(typeArguments) : \"\";\r\n\r\n // Check if this exact instance has already been resolved\r\n var instance = prototype.instances.get(instanceKey);\r\n if (instance) return instance;\r\n\r\n // Copy contextual type arguments so we don't pollute the original map\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n\r\n // Insert contextual type arguments for this operation. Internally, this method is always\r\n // called with matching type parameter / argument counts.\r\n var declaration = prototype.declaration;\r\n if (typeArguments) {\r\n let typeParameters = declaration.typeParameters;\r\n let expectedTypeArguments = typeParameters.length;\r\n let actualTypeArguments = typeArguments.length;\r\n assert(actualTypeArguments == expectedTypeArguments);\r\n for (let i = 0; i < actualTypeArguments; ++i) {\r\n contextualTypeArguments.set(typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n } else {\r\n assert(declaration.typeParameters.length == 0);\r\n }\r\n\r\n // Resolve base class if applicable\r\n var baseClass: Class | null = null;\r\n if (declaration.extendsType) {\r\n let baseClassType = this.resolveType(\r\n declaration.extendsType,\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n if (!baseClassType) return null;\r\n if (!(baseClass = baseClassType.classReference)) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.program.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n declaration.extendsType.range\r\n );\r\n }\r\n return null;\r\n }\r\n if (baseClass.hasDecorator(DecoratorFlags.SEALED)) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.program.error(\r\n DiagnosticCode.Class_0_is_sealed_and_cannot_be_extended,\r\n declaration.extendsType.range, baseClass.internalName\r\n );\r\n }\r\n return null;\r\n }\r\n if (baseClass.hasDecorator(DecoratorFlags.UNMANAGED) != prototype.hasDecorator(DecoratorFlags.UNMANAGED)) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.program.error(\r\n DiagnosticCode.Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa,\r\n Range.join(declaration.name.range, declaration.extendsType.range)\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n\r\n // Construct the instance and remember that it has been resolved already\r\n var simpleName = prototype.simpleName;\r\n var internalName = prototype.internalName;\r\n if (instanceKey.length) {\r\n simpleName += \"<\" + instanceKey + \">\";\r\n internalName += \"<\" + instanceKey + \">\";\r\n }\r\n instance = new Class(prototype, simpleName, internalName, typeArguments, baseClass);\r\n instance.contextualTypeArguments = contextualTypeArguments;\r\n prototype.instances.set(instanceKey, instance);\r\n this.program.instancesLookup.set(internalName, instance);\r\n\r\n // Inherit base class members and set up the initial memory offset for own fields\r\n var memoryOffset: u32 = 0;\r\n if (baseClass) {\r\n if (baseClass.members) {\r\n if (!instance.members) instance.members = new Map();\r\n for (let inheritedMember of baseClass.members.values()) {\r\n instance.members.set(inheritedMember.simpleName, inheritedMember);\r\n }\r\n }\r\n memoryOffset = baseClass.currentMemoryOffset;\r\n }\r\n\r\n // Resolve constructor by first applying the class type arguments\r\n if (prototype.constructorPrototype) {\r\n let constructorPartial = this.resolveFunctionPartially(\r\n prototype.constructorPrototype,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!constructorPartial) return null;\r\n instance.constructorInstance = this.resolveFunction(constructorPartial, null, null, reportMode);\r\n }\r\n\r\n // Resolve instance members\r\n if (prototype.instanceMembers) {\r\n for (let member of prototype.instanceMembers.values()) {\r\n switch (member.kind) {\r\n\r\n // Lay out fields in advance\r\n case ElementKind.FIELD_PROTOTYPE: {\r\n if (!instance.members) instance.members = new Map();\r\n let fieldDeclaration = (member).declaration;\r\n let fieldType: Type | null = null;\r\n // TODO: handle duplicate non-private fields\r\n if (!fieldDeclaration.type) {\r\n if (baseClass !== null && baseClass.members !== null) {\r\n let baseField = baseClass.members.get((member).simpleName);\r\n if (baseField && !baseField.is(CommonFlags.PRIVATE)) {\r\n assert(baseField.kind == ElementKind.FIELD);\r\n fieldType = (baseField).type;\r\n }\r\n }\r\n if (!fieldType) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n fieldDeclaration.name.range.atEnd\r\n );\r\n }\r\n }\r\n } else {\r\n fieldType = this.resolveType(\r\n fieldDeclaration.type,\r\n instance.contextualTypeArguments,\r\n reportMode\r\n );\r\n }\r\n if (!fieldType) break;\r\n let fieldInstance = new Field(\r\n member,\r\n internalName + INSTANCE_DELIMITER + (member).simpleName,\r\n fieldType,\r\n fieldDeclaration,\r\n instance\r\n );\r\n switch (fieldType.byteSize) { // align\r\n case 1: break;\r\n case 2: { if (memoryOffset & 1) ++memoryOffset; break; }\r\n case 4: { if (memoryOffset & 3) memoryOffset = (memoryOffset | 3) + 1; break; }\r\n case 8: { if (memoryOffset & 7) memoryOffset = (memoryOffset | 7) + 1; break; }\r\n default: assert(false);\r\n }\r\n fieldInstance.memoryOffset = memoryOffset;\r\n memoryOffset += fieldType.byteSize;\r\n instance.members.set(member.simpleName, fieldInstance);\r\n break;\r\n }\r\n\r\n // Partially resolve methods as these might have type arguments on their own\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (!instance.members) instance.members = new Map();\r\n let partialPrototype = this.resolveFunctionPartially(\r\n member,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!partialPrototype) return null;\r\n partialPrototype.internalName = internalName + INSTANCE_DELIMITER + partialPrototype.simpleName;\r\n instance.members.set(member.simpleName, partialPrototype);\r\n break;\r\n }\r\n\r\n // Clone properties and partially resolve the wrapped accessors for consistence with other methods\r\n case ElementKind.PROPERTY: {\r\n if (!instance.members) instance.members = new Map();\r\n let getterPrototype = assert((member).getterPrototype); // must be present\r\n let setterPrototype = (member).setterPrototype; // might be present\r\n let instanceProperty = new Property(\r\n this.program,\r\n member.simpleName,\r\n internalName + INSTANCE_DELIMITER + member.simpleName,\r\n prototype\r\n );\r\n let partialGetterPrototype = this.resolveFunctionPartially(\r\n getterPrototype,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!partialGetterPrototype) return null;\r\n partialGetterPrototype\r\n .internalName = internalName + INSTANCE_DELIMITER + partialGetterPrototype.simpleName;\r\n instanceProperty.getterPrototype = partialGetterPrototype;\r\n if (setterPrototype) {\r\n let partialSetterPrototype = this.resolveFunctionPartially(\r\n setterPrototype,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!partialSetterPrototype) return null;\r\n partialSetterPrototype\r\n .internalName = internalName + INSTANCE_DELIMITER + partialSetterPrototype.simpleName;\r\n instanceProperty.setterPrototype = partialSetterPrototype;\r\n }\r\n instance.members.set(member.simpleName, instanceProperty);\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n }\r\n\r\n // Finalize memory offset\r\n instance.currentMemoryOffset = memoryOffset;\r\n\r\n // Fully resolve operator overloads (don't have type parameters on their own)\r\n for (let [kind, overloadPrototype] of prototype.overloadPrototypes) {\r\n assert(kind != OperatorKind.INVALID);\r\n let operatorInstance: Function | null;\r\n if (overloadPrototype.is(CommonFlags.INSTANCE)) {\r\n let operatorPartial = this.resolveFunctionPartially(\r\n overloadPrototype,\r\n typeArguments,\r\n reportMode\r\n );\r\n if (!operatorPartial) continue;\r\n operatorInstance = this.resolveFunction(operatorPartial, null, null, reportMode);\r\n } else {\r\n operatorInstance = this.resolveFunction(overloadPrototype, null, null, reportMode);\r\n }\r\n if (!operatorInstance) continue;\r\n let overloads = instance.overloads;\r\n if (!overloads) instance.overloads = overloads = new Map();\r\n overloads.set(kind, operatorInstance);\r\n }\r\n return instance;\r\n }\r\n\r\n /** Resolves a class prototype by first resolving the specified type arguments. */\r\n resolveClassInclTypeArguments(\r\n prototype: ClassPrototype,\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n reportNode: Node,\r\n reportMode: ReportMode = ReportMode.REPORT\r\n ): Class | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n\r\n // Resolve type arguments if generic\r\n if (prototype.is(CommonFlags.GENERIC)) {\r\n let typeParameterNodes = prototype.declaration.typeParameters;\r\n let expectedTypeArguments = typeParameterNodes.length;\r\n assert(expectedTypeArguments > 0);\r\n let actualTypeArguments = typeArgumentNodes !== null ? typeArgumentNodes.length : 0;\r\n if (expectedTypeArguments != actualTypeArguments) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, expectedTypeArguments.toString(10), actualTypeArguments.toString(10)\r\n );\r\n }\r\n return null;\r\n }\r\n resolvedTypeArguments = this.resolveTypeArguments(\r\n typeParameterNodes,\r\n typeArgumentNodes,\r\n contextualTypeArguments,\r\n reportNode,\r\n reportMode\r\n );\r\n if (!resolvedTypeArguments) return null;\r\n\r\n // Otherwise make sure that no type arguments have been specified\r\n } else {\r\n if (typeArgumentNodes !== null && typeArgumentNodes.length) {\r\n if (reportMode == ReportMode.REPORT) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n\r\n // Continue with concrete types\r\n return this.resolveClass(\r\n prototype,\r\n resolvedTypeArguments,\r\n contextualTypeArguments,\r\n reportMode\r\n );\r\n }\r\n}\r\n","/**\r\n * JavaScript glue code.\r\n * @module glue/js\r\n * @preferred\r\n *//***/\r\n\r\n/// \r\n\r\nimport \"./binaryen\"; // must be first so portable can pick up the memory implementation\r\nimport \"../../../std/portable/index\";\r\nimport \"./float\";\r\nimport \"./i64\";\r\n\r\nimport { Module } from \"../../module\";\r\n\r\nModule.prototype.toText = function(this: Module) {\r\n return binaryen.wrapModule(this.ref).emitStackIR();\r\n};\r\n\r\nModule.prototype.toAsmjs = function(this: Module) {\r\n return binaryen.wrapModule(this.ref).emitAsmjs();\r\n};\r\n","// Copy Binaryen exports to global scope\r\n\r\nconst binaryen = global.Binaryen || require(\"binaryen\");\r\nglobal.binaryen = binaryen;\r\n\r\nfor (var key in binaryen) {\r\n if (key.startsWith(\"_Binaryen\") || key.startsWith(\"_Relooper\")) global[key] = binaryen[key];\r\n}\r\n\r\n// Utilize Binaryen's heap\r\n\r\nglobal.__memory_allocate = binaryen._malloc;\r\nglobal.__memory_free = binaryen._free;\r\nglobal.__memory_copy = binaryen._memmove;\r\nglobal.__store = function(ptr, val) { binaryen.HEAPU8[ptr] = val; };\r\nglobal.__load = function(ptr) { return binaryen.HEAPU8[ptr]; };\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__15__;","/** @module std/portable *//***/\r\n\r\nvar globalScope = typeof window !== \"undefined\" && window || typeof global !== \"undefined\" && global || self;\r\n\r\nglobalScope.ASC_TARGET = 0;\r\n\r\nvar F64 = new Float64Array(1);\r\nvar U64 = new Uint32Array(F64.buffer);\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 \"EPSILON\": { value: Math.fround(1.1920929e-07), writable: false },\r\n \"MIN_VALUE\": { value: Math.fround(1.4012985e-45), writable: false },\r\n \"MAX_VALUE\": { value: Math.fround(3.4028235e+38), writable: false },\r\n \"MIN_NORMAL_VALUE\": { value: Math.fround(1.17549435e-38), writable: false },\r\n \"MIN_SAFE_INTEGER\": { value: -16777215, writable: false },\r\n \"MAX_SAFE_INTEGER\": { value: 16777215, writable: false },\r\n \"POSITIVE_INFINITY\": { value: Infinity, writable: false },\r\n \"NEGATIVE_INFINITY\": { value: -Infinity, writable: false },\r\n \"NaN\": { value: NaN, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"f64\"] = function f64(value) { return +value; }\r\n, {\r\n \"EPSILON\": { value: 2.2204460492503131e-16, writable: false },\r\n \"MIN_VALUE\": { value: 5e-324, writable: false },\r\n \"MAX_VALUE\": { value: 1.7976931348623157e+308, writable: false },\r\n \"MIN_NORMAL_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 \"POSITIVE_INFINITY\": { value: Infinity, writable: false },\r\n \"NEGATIVE_INFINITY\": { value: -Infinity, writable: false },\r\n \"NaN\": { value: NaN, 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 unchecked(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\nglobalScope[\"JSMath\"].signbit = function signbit(x) {\r\n F64[0] = x; return Boolean((U64[1] >>> 31) & (x == x));\r\n}\r\n\r\nglobalScope[\"memory\"] = (() => {\r\n var HEAP = new Uint8Array(0);\r\n var HEAP_OFFSET = 0;\r\n return {\r\n allocate: globalScope[\"__memory_allocate\"] || function allocate(size) {\r\n if (!(size >>>= 0)) return 0;\r\n if (HEAP_OFFSET + size > HEAP.length) {\r\n var oldHeap = HEAP;\r\n HEAP = new Uint8Array(Math.max(65536, HEAP.length + size, HEAP.length * 2));\r\n HEAP.set(oldHeap);\r\n }\r\n var ptr = HEAP_OFFSET;\r\n if ((HEAP_OFFSET += size) & 7) HEAP_OFFSET = (HEAP_OFFSET | 7) + 1;\r\n return ptr;\r\n },\r\n free: globalScope[\"__memory_free\"] || function free(ptr) { },\r\n copy: globalScope[\"__memory_copy\"] || function copy(dest, src, size) {\r\n HEAP.copyWithin(dest, src, src + size);\r\n }\r\n };\r\n})();\r\n\r\nglobalScope[\"store\"] = globalScope[\"__store\"] || function store(ptr, value, offset) {\r\n HEAP[ptr + (offset | 0)] = value;\r\n};\r\n\r\nglobalScope[\"load\"] = globalScope[\"__load\"] || function load(ptr, offset) {\r\n return HEAP[ptr + (offset | 0)];\r\n};\r\n","const F64 = new Float64Array(1);\r\nconst F32 = new Float32Array(F64.buffer);\r\nconst I32 = new Int32Array(F64.buffer);\r\n\r\nglobal.f32_as_i32 = function(value) {\r\n F32[0] = value;\r\n return I32[0];\r\n};\r\n\r\nglobal.i32_as_f32 = function(value) {\r\n I32[0] = value;\r\n return F32[0];\r\n};\r\n\r\nglobal.f64_as_i64 = function(value) {\r\n F64[0] = value;\r\n return i64_new(I32[0], I32[1]);\r\n};\r\n\r\nglobal.i64_as_f64 = function(value) {\r\n I32[0] = i64_low(value);\r\n I32[1] = i64_high(value);\r\n return F64[0];\r\n};\r\n","const Long = global.Long || require(\"long\");\r\n\r\nglobal.i64_zero = Long.ZERO;\r\n\r\nglobal.i64_one = Long.ONE;\r\n\r\nglobal.i64_new = function(lo, hi) {\r\n return Long.fromBits(lo, hi);\r\n};\r\n\r\nglobal.i64_low = function(value) {\r\n return value.low;\r\n};\r\n\r\nglobal.i64_high = function(value) {\r\n return value.high;\r\n};\r\n\r\nglobal.i64_add = function(left, right) {\r\n return left.add(right);\r\n};\r\n\r\nglobal.i64_sub = function(left, right) {\r\n return left.sub(right);\r\n};\r\n\r\nglobal.i64_mul = function(left, right) {\r\n return left.mul(right);\r\n};\r\n\r\nglobal.i64_div = function(left, right) {\r\n return left.div(right);\r\n};\r\n\r\nglobal.i64_div_u = function(left, right) {\r\n return left.toUnsigned().div(right.toUnsigned()).toSigned();\r\n};\r\n\r\nglobal.i64_rem = function(left, right) {\r\n return left.mod(right);\r\n};\r\n\r\nglobal.i64_rem_u = function(left, right) {\r\n return left.toUnsigned().mod(right.toUnsigned()).toSigned();\r\n};\r\n\r\nglobal.i64_and = function(left, right) {\r\n return left.and(right);\r\n};\r\n\r\nglobal.i64_or = function(left, right) {\r\n return left.or(right);\r\n};\r\n\r\nglobal.i64_xor = function(left, right) {\r\n return left.xor(right);\r\n};\r\n\r\nglobal.i64_shl = function(left, right) {\r\n return left.shl(right);\r\n};\r\n\r\nglobal.i64_shr = function(left, right) {\r\n return left.shr(right);\r\n};\r\n\r\nglobal.i64_shr_u = function(left, right) {\r\n return left.shru(right);\r\n};\r\n\r\nglobal.i64_not = function(value) {\r\n return value.not();\r\n};\r\n\r\nglobal.i64_eq = function(left, right) {\r\n return left.eq(right);\r\n};\r\n\r\nglobal.i64_ne = function(left, right) {\r\n return left.ne(right);\r\n};\r\n\r\nglobal.i64_align = function(value, alignment) {\r\n assert(alignment && (alignment & (alignment - 1)) == 0);\r\n var mask = Long.fromInt(alignment - 1);\r\n return value.add(mask).and(mask.not());\r\n};\r\n\r\nglobal.i64_is_i8 = function(value) {\r\n return value.high === 0 && (value.low >= 0 && value.low <= i8.MAX_VALUE)\r\n || value.high === -1 && (value.low >= i8.MIN_VALUE && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_i16 = function(value) {\r\n return value.high === 0 && (value.low >= 0 && value.low <= i16.MAX_VALUE)\r\n || value.high === -1 && (value.low >= i16.MIN_VALUE && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_i32 = function(value) {\r\n return (value.high === 0 && value.low >= 0)\r\n || (value.high === -1 && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_u8 = function(value) {\r\n return value.high === 0 && value.low >= 0 && value.low <= u8.MAX_VALUE;\r\n};\r\n\r\nglobal.i64_is_u16 = function(value) {\r\n return value.high === 0 && value.low >= 0 && value.low <= u16.MAX_VALUE;\r\n};\r\n\r\nglobal.i64_is_u32 = function(value) {\r\n return value.high === 0;\r\n};\r\n\r\nglobal.i64_is_bool = function(value) {\r\n return value.high === 0 && (value.low === 0 || value.low === 1);\r\n};\r\n\r\nconst minSafeF32 = Long.fromNumber(f32.MIN_SAFE_INTEGER);\r\nconst maxSafeF32 = Long.fromNumber(f32.MAX_SAFE_INTEGER);\r\n\r\nglobal.i64_is_f32 = function(value) {\r\n return value.gte(minSafeF32) && value.lte(maxSafeF32);\r\n};\r\n\r\nconst minSafeF64 = Long.fromNumber(f64.MIN_SAFE_INTEGER);\r\nconst maxSafeF64 = Long.fromNumber(f64.MAX_SAFE_INTEGER);\r\n\r\nglobal.i64_is_f64 = function(value) {\r\n return value.gte(minSafeF64) && value.lte(maxSafeF64);\r\n};\r\n\r\nglobal.i64_to_f32 = function(value) {\r\n return global.Math.fround(value.toNumber());\r\n};\r\n\r\nglobal.i64_to_f64 = function(value) {\r\n return value.toNumber();\r\n};\r\n\r\nglobal.i64_to_string = function(value, unsigned) {\r\n return (unsigned ? value.toUnsigned() : value).toString(10);\r\n};\r\n","module.exports = Long;\r\n\r\n/**\r\n * wasm optimizations, to do native i64 multiplication and divide\r\n */\r\nvar wasm = null;\r\n\r\ntry {\r\n wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([\r\n 0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11\r\n ])), {}).exports;\r\n} catch (e) {\r\n // no wasm support :(\r\n}\r\n\r\n/**\r\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\r\n * See the from* functions below for more convenient ways of constructing Longs.\r\n * @exports Long\r\n * @class A Long class for representing a 64 bit two's-complement integer value.\r\n * @param {number} low The low (signed) 32 bits of the long\r\n * @param {number} high The high (signed) 32 bits of the long\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @constructor\r\n */\r\nfunction Long(low, high, unsigned) {\r\n\r\n /**\r\n * The low 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.low = low | 0;\r\n\r\n /**\r\n * The high 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.high = high | 0;\r\n\r\n /**\r\n * Whether unsigned or not.\r\n * @type {boolean}\r\n */\r\n this.unsigned = !!unsigned;\r\n}\r\n\r\n// The internal representation of a long is the two given signed, 32-bit values.\r\n// We use 32-bit pieces because these are the size of integers on which\r\n// Javascript performs bit-operations. For operations like addition and\r\n// multiplication, we split each number into 16 bit pieces, which can easily be\r\n// multiplied within Javascript's floating-point representation without overflow\r\n// or change in sign.\r\n//\r\n// In the algorithms below, we frequently reduce the negative case to the\r\n// positive case by negating the input(s) and then post-processing the result.\r\n// Note that we must ALWAYS check specially whether those values are MIN_VALUE\r\n// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\r\n// a positive number, it overflows back into a negative). Not handling this\r\n// case would often result in infinite recursion.\r\n//\r\n// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\r\n// methods on which they depend.\r\n\r\n/**\r\n * An indicator used to reliably determine if an object is a Long or not.\r\n * @type {boolean}\r\n * @const\r\n * @private\r\n */\r\nLong.prototype.__isLong__;\r\n\r\nObject.defineProperty(Long.prototype, \"__isLong__\", { value: true });\r\n\r\n/**\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n * @inner\r\n */\r\nfunction isLong(obj) {\r\n return (obj && obj[\"__isLong__\"]) === true;\r\n}\r\n\r\n/**\r\n * Tests if the specified object is a Long.\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n */\r\nLong.isLong = isLong;\r\n\r\n/**\r\n * A cache of the Long representations of small integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar INT_CACHE = {};\r\n\r\n/**\r\n * A cache of the Long representations of small unsigned integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar UINT_CACHE = {};\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromInt(value, unsigned) {\r\n var obj, cachedObj, cache;\r\n if (unsigned) {\r\n value >>>= 0;\r\n if (cache = (0 <= value && value < 256)) {\r\n cachedObj = UINT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\r\n if (cache)\r\n UINT_CACHE[value] = obj;\r\n return obj;\r\n } else {\r\n value |= 0;\r\n if (cache = (-128 <= value && value < 128)) {\r\n cachedObj = INT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, value < 0 ? -1 : 0, false);\r\n if (cache)\r\n INT_CACHE[value] = obj;\r\n return obj;\r\n }\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given 32 bit integer value.\r\n * @function\r\n * @param {number} value The 32 bit integer in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromInt = fromInt;\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromNumber(value, unsigned) {\r\n if (isNaN(value))\r\n return unsigned ? UZERO : ZERO;\r\n if (unsigned) {\r\n if (value < 0)\r\n return UZERO;\r\n if (value >= TWO_PWR_64_DBL)\r\n return MAX_UNSIGNED_VALUE;\r\n } else {\r\n if (value <= -TWO_PWR_63_DBL)\r\n return MIN_VALUE;\r\n if (value + 1 >= TWO_PWR_63_DBL)\r\n return MAX_VALUE;\r\n }\r\n if (value < 0)\r\n return fromNumber(-value, unsigned).neg();\r\n return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\r\n * @function\r\n * @param {number} value The number in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromNumber = fromNumber;\r\n\r\n/**\r\n * @param {number} lowBits\r\n * @param {number} highBits\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromBits(lowBits, highBits, unsigned) {\r\n return new Long(lowBits, highBits, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\r\n * assumed to use 32 bits.\r\n * @function\r\n * @param {number} lowBits The low 32 bits\r\n * @param {number} highBits The high 32 bits\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromBits = fromBits;\r\n\r\n/**\r\n * @function\r\n * @param {number} base\r\n * @param {number} exponent\r\n * @returns {number}\r\n * @inner\r\n */\r\nvar pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\r\n\r\n/**\r\n * @param {string} str\r\n * @param {(boolean|number)=} unsigned\r\n * @param {number=} radix\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromString(str, unsigned, radix) {\r\n if (str.length === 0)\r\n throw Error('empty string');\r\n if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\")\r\n return ZERO;\r\n if (typeof unsigned === 'number') {\r\n // For goog.math.long compatibility\r\n radix = unsigned,\r\n unsigned = false;\r\n } else {\r\n unsigned = !! unsigned;\r\n }\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n\r\n var p;\r\n if ((p = str.indexOf('-')) > 0)\r\n throw Error('interior hyphen');\r\n else if (p === 0) {\r\n return fromString(str.substring(1), unsigned, radix).neg();\r\n }\r\n\r\n // Do several (8) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 8));\r\n\r\n var result = ZERO;\r\n for (var i = 0; i < str.length; i += 8) {\r\n var size = Math.min(8, str.length - i),\r\n value = parseInt(str.substring(i, i + size), radix);\r\n if (size < 8) {\r\n var power = fromNumber(pow_dbl(radix, size));\r\n result = result.mul(power).add(fromNumber(value));\r\n } else {\r\n result = result.mul(radixToPower);\r\n result = result.add(fromNumber(value));\r\n }\r\n }\r\n result.unsigned = unsigned;\r\n return result;\r\n}\r\n\r\n/**\r\n * Returns a Long representation of the given string, written using the specified radix.\r\n * @function\r\n * @param {string} str The textual representation of the Long\r\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromString = fromString;\r\n\r\n/**\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromValue(val, unsigned) {\r\n if (typeof val === 'number')\r\n return fromNumber(val, unsigned);\r\n if (typeof val === 'string')\r\n return fromString(val, unsigned);\r\n // Throws for non-objects, converts non-instanceof Long:\r\n return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);\r\n}\r\n\r\n/**\r\n * Converts the specified value to a Long using the appropriate from* function for its type.\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long}\r\n */\r\nLong.fromValue = fromValue;\r\n\r\n// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\r\n// no runtime penalty for these.\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_16_DBL = 1 << 16;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24_DBL = 1 << 24;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\r\n\r\n/**\r\n * @type {!Long}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ZERO = fromInt(0);\r\n\r\n/**\r\n * Signed zero.\r\n * @type {!Long}\r\n */\r\nLong.ZERO = ZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UZERO = fromInt(0, true);\r\n\r\n/**\r\n * Unsigned zero.\r\n * @type {!Long}\r\n */\r\nLong.UZERO = UZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ONE = fromInt(1);\r\n\r\n/**\r\n * Signed one.\r\n * @type {!Long}\r\n */\r\nLong.ONE = ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UONE = fromInt(1, true);\r\n\r\n/**\r\n * Unsigned one.\r\n * @type {!Long}\r\n */\r\nLong.UONE = UONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar NEG_ONE = fromInt(-1);\r\n\r\n/**\r\n * Signed negative one.\r\n * @type {!Long}\r\n */\r\nLong.NEG_ONE = NEG_ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);\r\n\r\n/**\r\n * Maximum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_VALUE = MAX_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);\r\n\r\n/**\r\n * Maximum unsigned value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MIN_VALUE = fromBits(0, 0x80000000|0, false);\r\n\r\n/**\r\n * Minimum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MIN_VALUE = MIN_VALUE;\r\n\r\n/**\r\n * @alias Long.prototype\r\n * @inner\r\n */\r\nvar LongPrototype = Long.prototype;\r\n\r\n/**\r\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\r\n * @returns {number}\r\n */\r\nLongPrototype.toInt = function toInt() {\r\n return this.unsigned ? this.low >>> 0 : this.low;\r\n};\r\n\r\n/**\r\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\r\n * @returns {number}\r\n */\r\nLongPrototype.toNumber = function toNumber() {\r\n if (this.unsigned)\r\n return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);\r\n return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\r\n};\r\n\r\n/**\r\n * Converts the Long to a string written in the specified radix.\r\n * @param {number=} radix Radix (2-36), defaults to 10\r\n * @returns {string}\r\n * @override\r\n * @throws {RangeError} If `radix` is out of range\r\n */\r\nLongPrototype.toString = function toString(radix) {\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n if (this.isZero())\r\n return '0';\r\n if (this.isNegative()) { // Unsigned Longs are never negative\r\n if (this.eq(MIN_VALUE)) {\r\n // We need to change the Long value before it can be negated, so we remove\r\n // the bottom-most digit in this base and then recurse to do the rest.\r\n var radixLong = fromNumber(radix),\r\n div = this.div(radixLong),\r\n rem1 = div.mul(radixLong).sub(this);\r\n return div.toString(radix) + rem1.toInt().toString(radix);\r\n } else\r\n return '-' + this.neg().toString(radix);\r\n }\r\n\r\n // Do several (6) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\r\n rem = this;\r\n var result = '';\r\n while (true) {\r\n var remDiv = rem.div(radixToPower),\r\n intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\r\n digits = intval.toString(radix);\r\n rem = remDiv;\r\n if (rem.isZero())\r\n return digits + result;\r\n else {\r\n while (digits.length < 6)\r\n digits = '0' + digits;\r\n result = '' + digits + result;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as a signed integer.\r\n * @returns {number} Signed high bits\r\n */\r\nLongPrototype.getHighBits = function getHighBits() {\r\n return this.high;\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned high bits\r\n */\r\nLongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\r\n return this.high >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as a signed integer.\r\n * @returns {number} Signed low bits\r\n */\r\nLongPrototype.getLowBits = function getLowBits() {\r\n return this.low;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned low bits\r\n */\r\nLongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\r\n return this.low >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the number of bits needed to represent the absolute value of this Long.\r\n * @returns {number}\r\n */\r\nLongPrototype.getNumBitsAbs = function getNumBitsAbs() {\r\n if (this.isNegative()) // Unsigned Longs are never negative\r\n return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\r\n var val = this.high != 0 ? this.high : this.low;\r\n for (var bit = 31; bit > 0; bit--)\r\n if ((val & (1 << bit)) != 0)\r\n break;\r\n return this.high != 0 ? bit + 33 : bit + 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isZero = function isZero() {\r\n return this.high === 0 && this.low === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eqz = LongPrototype.isZero;\r\n\r\n/**\r\n * Tests if this Long's value is negative.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isNegative = function isNegative() {\r\n return !this.unsigned && this.high < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is positive.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isPositive = function isPositive() {\r\n return this.unsigned || this.high >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is odd.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isOdd = function isOdd() {\r\n return (this.low & 1) === 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is even.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isEven = function isEven() {\r\n return (this.low & 1) === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.equals = function equals(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)\r\n return false;\r\n return this.high === other.high && this.low === other.low;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eq = LongPrototype.equals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.notEquals = function notEquals(other) {\r\n return !this.eq(/* validates */ other);\r\n};\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.neq = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ne = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThan = function lessThan(other) {\r\n return this.comp(/* validates */ other) < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lt = LongPrototype.lessThan;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\r\n return this.comp(/* validates */ other) <= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lte = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.le = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThan = function greaterThan(other) {\r\n return this.comp(/* validates */ other) > 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gt = LongPrototype.greaterThan;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\r\n return this.comp(/* validates */ other) >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gte = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ge = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Compares this Long's value with the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.compare = function compare(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.eq(other))\r\n return 0;\r\n var thisNeg = this.isNegative(),\r\n otherNeg = other.isNegative();\r\n if (thisNeg && !otherNeg)\r\n return -1;\r\n if (!thisNeg && otherNeg)\r\n return 1;\r\n // At this point the sign bits are the same\r\n if (!this.unsigned)\r\n return this.sub(other).isNegative() ? -1 : 1;\r\n // Both are positive if at least one is unsigned\r\n return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;\r\n};\r\n\r\n/**\r\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.comp = LongPrototype.compare;\r\n\r\n/**\r\n * Negates this Long's value.\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.negate = function negate() {\r\n if (!this.unsigned && this.eq(MIN_VALUE))\r\n return MIN_VALUE;\r\n return this.not().add(ONE);\r\n};\r\n\r\n/**\r\n * Negates this Long's value. This is an alias of {@link Long#negate}.\r\n * @function\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.neg = LongPrototype.negate;\r\n\r\n/**\r\n * Returns the sum of this and the specified Long.\r\n * @param {!Long|number|string} addend Addend\r\n * @returns {!Long} Sum\r\n */\r\nLongPrototype.add = function add(addend) {\r\n if (!isLong(addend))\r\n addend = fromValue(addend);\r\n\r\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = addend.high >>> 16;\r\n var b32 = addend.high & 0xFFFF;\r\n var b16 = addend.low >>> 16;\r\n var b00 = addend.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 + b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 + b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 + b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 + b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long.\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.subtract = function subtract(subtrahend) {\r\n if (!isLong(subtrahend))\r\n subtrahend = fromValue(subtrahend);\r\n return this.add(subtrahend.neg());\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\r\n * @function\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.sub = LongPrototype.subtract;\r\n\r\n/**\r\n * Returns the product of this and the specified Long.\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.multiply = function multiply(multiplier) {\r\n if (this.isZero())\r\n return ZERO;\r\n if (!isLong(multiplier))\r\n multiplier = fromValue(multiplier);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = wasm.mul(this.low,\r\n this.high,\r\n multiplier.low,\r\n multiplier.high);\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (multiplier.isZero())\r\n return ZERO;\r\n if (this.eq(MIN_VALUE))\r\n return multiplier.isOdd() ? MIN_VALUE : ZERO;\r\n if (multiplier.eq(MIN_VALUE))\r\n return this.isOdd() ? MIN_VALUE : ZERO;\r\n\r\n if (this.isNegative()) {\r\n if (multiplier.isNegative())\r\n return this.neg().mul(multiplier.neg());\r\n else\r\n return this.neg().mul(multiplier).neg();\r\n } else if (multiplier.isNegative())\r\n return this.mul(multiplier.neg()).neg();\r\n\r\n // If both longs are small, use float multiplication\r\n if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\r\n return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);\r\n\r\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\r\n // We can skip products that would overflow.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = multiplier.high >>> 16;\r\n var b32 = multiplier.high & 0xFFFF;\r\n var b16 = multiplier.low >>> 16;\r\n var b00 = multiplier.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 * b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 * b00;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c16 += a00 * b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 * b00;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a16 * b16;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a00 * b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\r\n * @function\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.mul = LongPrototype.multiply;\r\n\r\n/**\r\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\r\n * unsigned if this Long is unsigned.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.divide = function divide(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n if (divisor.isZero())\r\n throw Error('division by zero');\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n // guard against signed division overflow: the largest\r\n // negative number / -1 would be 1 larger than the largest\r\n // positive number, due to two's complement.\r\n if (!this.unsigned &&\r\n this.high === -0x80000000 &&\r\n divisor.low === -1 && divisor.high === -1) {\r\n // be consistent with non-wasm code path\r\n return this;\r\n }\r\n var low = (this.unsigned ? wasm.div_u : wasm.div_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (this.isZero())\r\n return this.unsigned ? UZERO : ZERO;\r\n var approx, rem, res;\r\n if (!this.unsigned) {\r\n // This section is only relevant for signed longs and is derived from the\r\n // closure library as a whole.\r\n if (this.eq(MIN_VALUE)) {\r\n if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\r\n return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\r\n else if (divisor.eq(MIN_VALUE))\r\n return ONE;\r\n else {\r\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\r\n var halfThis = this.shr(1);\r\n approx = halfThis.div(divisor).shl(1);\r\n if (approx.eq(ZERO)) {\r\n return divisor.isNegative() ? ONE : NEG_ONE;\r\n } else {\r\n rem = this.sub(divisor.mul(approx));\r\n res = approx.add(rem.div(divisor));\r\n return res;\r\n }\r\n }\r\n } else if (divisor.eq(MIN_VALUE))\r\n return this.unsigned ? UZERO : ZERO;\r\n if (this.isNegative()) {\r\n if (divisor.isNegative())\r\n return this.neg().div(divisor.neg());\r\n return this.neg().div(divisor).neg();\r\n } else if (divisor.isNegative())\r\n return this.div(divisor.neg()).neg();\r\n res = ZERO;\r\n } else {\r\n // The algorithm below has not been made for unsigned longs. It's therefore\r\n // required to take special care of the MSB prior to running it.\r\n if (!divisor.unsigned)\r\n divisor = divisor.toUnsigned();\r\n if (divisor.gt(this))\r\n return UZERO;\r\n if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\r\n return UONE;\r\n res = UZERO;\r\n }\r\n\r\n // Repeat the following until the remainder is less than other: find a\r\n // floating-point that approximates remainder / other *from below*, add this\r\n // into the result, and subtract it from the remainder. It is critical that\r\n // the approximate value is less than or equal to the real value so that the\r\n // remainder never becomes negative.\r\n rem = this;\r\n while (rem.gte(divisor)) {\r\n // Approximate the result of division. This may be a little greater or\r\n // smaller than the actual value.\r\n approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\r\n\r\n // We will tweak the approximate result by changing it in the 48-th digit or\r\n // the smallest non-fractional digit, whichever is larger.\r\n var log2 = Math.ceil(Math.log(approx) / Math.LN2),\r\n delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),\r\n\r\n // Decrease the approximation until it is smaller than the remainder. Note\r\n // that if it is too large, the product overflows and is negative.\r\n approxRes = fromNumber(approx),\r\n approxRem = approxRes.mul(divisor);\r\n while (approxRem.isNegative() || approxRem.gt(rem)) {\r\n approx -= delta;\r\n approxRes = fromNumber(approx, this.unsigned);\r\n approxRem = approxRes.mul(divisor);\r\n }\r\n\r\n // We know the answer can't be zero... and actually, zero would cause\r\n // infinite recursion since we would make no progress.\r\n if (approxRes.isZero())\r\n approxRes = ONE;\r\n\r\n res = res.add(approxRes);\r\n rem = rem.sub(approxRem);\r\n }\r\n return res;\r\n};\r\n\r\n/**\r\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.div = LongPrototype.divide;\r\n\r\n/**\r\n * Returns this Long modulo the specified.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.modulo = function modulo(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n return this.sub(this.div(divisor).mul(divisor));\r\n};\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.mod = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.rem = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns the bitwise NOT of this Long.\r\n * @returns {!Long}\r\n */\r\nLongPrototype.not = function not() {\r\n return fromBits(~this.low, ~this.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise AND of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.and = function and(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise OR of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.or = function or(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise XOR of this Long and the given one.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.xor = function xor(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftLeft = function shiftLeft(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);\r\n else\r\n return fromBits(0, this.low << (numBits - 32), this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shl = LongPrototype.shiftLeft;\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRight = function shiftRight(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);\r\n else\r\n return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr = LongPrototype.shiftRight;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n numBits &= 63;\r\n if (numBits === 0)\r\n return this;\r\n else {\r\n var high = this.high;\r\n if (numBits < 32) {\r\n var low = this.low;\r\n return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);\r\n } else if (numBits === 32)\r\n return fromBits(high, 0, this.unsigned);\r\n else\r\n return fromBits(high >>> (numBits - 32), 0, this.unsigned);\r\n }\r\n};\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shru = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Converts this Long to signed.\r\n * @returns {!Long} Signed long\r\n */\r\nLongPrototype.toSigned = function toSigned() {\r\n if (!this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, false);\r\n};\r\n\r\n/**\r\n * Converts this Long to unsigned.\r\n * @returns {!Long} Unsigned long\r\n */\r\nLongPrototype.toUnsigned = function toUnsigned() {\r\n if (this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, true);\r\n};\r\n\r\n/**\r\n * Converts this Long to its byte representation.\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {!Array.} Byte representation\r\n */\r\nLongPrototype.toBytes = function toBytes(le) {\r\n return le ? this.toBytesLE() : this.toBytesBE();\r\n};\r\n\r\n/**\r\n * Converts this Long to its little endian byte representation.\r\n * @returns {!Array.} Little endian byte representation\r\n */\r\nLongPrototype.toBytesLE = function toBytesLE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n lo & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo >>> 16 & 0xff,\r\n lo >>> 24 ,\r\n hi & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi >>> 16 & 0xff,\r\n hi >>> 24\r\n ];\r\n};\r\n\r\n/**\r\n * Converts this Long to its big endian byte representation.\r\n * @returns {!Array.} Big endian byte representation\r\n */\r\nLongPrototype.toBytesBE = function toBytesBE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n hi >>> 24 ,\r\n hi >>> 16 & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi & 0xff,\r\n lo >>> 24 ,\r\n lo >>> 16 & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo & 0xff\r\n ];\r\n};\r\n\r\n/**\r\n * Creates a Long from its byte representation.\r\n * @param {!Array.} bytes Byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytes = function fromBytes(bytes, unsigned, le) {\r\n return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);\r\n};\r\n\r\n/**\r\n * Creates a Long from its little endian byte representation.\r\n * @param {!Array.} bytes Little endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesLE = function fromBytesLE(bytes, unsigned) {\r\n return new Long(\r\n bytes[0] |\r\n bytes[1] << 8 |\r\n bytes[2] << 16 |\r\n bytes[3] << 24,\r\n bytes[4] |\r\n bytes[5] << 8 |\r\n bytes[6] << 16 |\r\n bytes[7] << 24,\r\n unsigned\r\n );\r\n};\r\n\r\n/**\r\n * Creates a Long from its big endian byte representation.\r\n * @param {!Array.} bytes Big endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesBE = function fromBytesBE(bytes, unsigned) {\r\n return new Long(\r\n bytes[4] << 24 |\r\n bytes[5] << 16 |\r\n bytes[6] << 8 |\r\n bytes[7],\r\n bytes[0] << 24 |\r\n bytes[1] << 16 |\r\n bytes[2] << 8 |\r\n bytes[3],\r\n unsigned\r\n );\r\n};\r\n","/**\r\n * Built-in elements providing WebAssembly core functionality.\r\n * @module builtins\r\n *//***/\r\n\r\n import {\r\n Compiler,\r\n ConversionKind,\r\n WrapMode\r\n} from \"./compiler\";\r\n\r\nimport {\r\n DiagnosticCode\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Expression,\r\n LiteralKind,\r\n LiteralExpression,\r\n StringLiteralExpression\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags\r\n} from \"./types\";\r\n\r\nimport {\r\n BinaryOp,\r\n UnaryOp,\r\n HostOp,\r\n NativeType,\r\n ExpressionRef,\r\n ExpressionId,\r\n getExpressionId,\r\n getExpressionType,\r\n getConstValueI64High,\r\n getConstValueI64Low,\r\n getConstValueI32\r\n} from \"./module\";\r\n\r\nimport {\r\n ElementKind,\r\n FunctionPrototype,\r\n Class,\r\n Field,\r\n OperatorKind,\r\n FlowFlags,\r\n Global,\r\n DecoratorFlags\r\n} from \"./program\";\r\n\r\nimport {\r\n ReportMode\r\n} from \"./resolver\";\r\n\r\nimport {\r\n CommonFlags\r\n} from \"./common\";\r\n\r\n/** Compiles a call to a built-in function. */\r\nexport function compileCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var module = compiler.module;\r\n\r\n var arg0: ExpressionRef,\r\n arg1: ExpressionRef,\r\n arg2: ExpressionRef,\r\n ret: ExpressionRef;\r\n\r\n // NOTE that some implementations below make use of the select expression where straight-forward.\r\n // whether worth or not should probably be tested once it's known if/how embedders handle it.\r\n // search: createSelect\r\n\r\n switch (prototype.internalName) {\r\n\r\n // types\r\n\r\n case \"isInteger\": { // isInteger() / isInteger(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.INTEGER) && !type.is(TypeFlags.REFERENCE)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isFloat\": { // isFloat() / isFloat(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.FLOAT)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isSigned\": { // isSigned() / isSigned(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.SIGNED)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isReference\": { // isReference() / isReference(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n compiler.currentType = Type.bool;\r\n return type.is(TypeFlags.REFERENCE)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isString\": { // isString() / isString(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n let classType = type.classReference;\r\n if (classType) {\r\n let stringInstance = compiler.program.stringInstance;\r\n if (stringInstance && classType.isAssignableTo(stringInstance)) return module.createI32(1);\r\n }\r\n return module.createI32(0);\r\n }\r\n case \"isArray\": { // isArray() / isArray(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n let classType = type.classReference;\r\n return classType !== null && classType.lookupOverload(OperatorKind.INDEXED_GET) !== null\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isDefined\": { // isDefined(expression) -> bool\r\n compiler.currentType = Type.bool;\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let element = compiler.resolver.resolveExpression(operands[0], compiler.currentFunction, ReportMode.SWALLOW);\r\n return module.createI32(element ? 1 : 0);\r\n }\r\n case \"isConstant\": { // isConstant(expression) -> bool\r\n compiler.currentType = Type.bool;\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let expr = compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n compiler.currentType = Type.bool;\r\n return module.createI32(getExpressionId(expr) == ExpressionId.Const ? 1 : 0);\r\n }\r\n case \"isManaged\": { // isManaged() -> bool\r\n if (!compiler.program.hasGC) {\r\n compiler.currentType = Type.bool;\r\n return module.createI32(0);\r\n }\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n let classType = type.classReference;\r\n return classType !== null && !classType.hasDecorator(DecoratorFlags.UNMANAGED)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n\r\n // math\r\n\r\n case \"clz\": { // clz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ClzI64\r\n : UnaryOp.ClzI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.ClzI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"ctz\": { // ctz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.NONE, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.CtzI64\r\n : UnaryOp.CtzI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.CtzI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"popcnt\": { // popcnt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.PopcntI64\r\n : UnaryOp.PopcntI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.PopcntI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"rotl\": { // rotl(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = compiler.ensureSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotlI32, arg0, arg1),\r\n compiler.currentType\r\n );\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createBinary(BinaryOp.RotlI32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotlI64\r\n : BinaryOp.RotlI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createBinary(BinaryOp.RotlI64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret; // possibly overflows\r\n }\r\n case \"rotr\": { // rotr(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = compiler.ensureSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotrI32, arg0, arg1),\r\n compiler.currentType\r\n );\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createBinary(BinaryOp.RotrI32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotrI64\r\n : BinaryOp.RotrI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createBinary(BinaryOp.RotrI64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret; // possibly overflowws\r\n }\r\n case \"abs\": { // abs(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n // possibly overflows, e.g. abs(-128) == 128\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32, false);\r\n ret = module.createSelect( // x > 0 ? x : 0-x\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(BinaryOp.SubI32, // ifFalse\r\n module.createI32(0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32)\r\n ),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n module.createI32(0)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n compiler.options.usizeType.toNativeZero(module),\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType)\r\n ),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType),\r\n compiler.options.usizeType.toNativeZero(module)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(BinaryOp.SubI64,\r\n module.createI64(0, 0),\r\n module.createGetLocal(tempLocal.index, NativeType.I64),\r\n ),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal.index, NativeType.I64),\r\n module.createI64(0, 0)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.U64:\r\n case TypeKind.BOOL: {\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.AbsF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.AbsF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"max\": { // max(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtU32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtU64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtU64\r\n : BinaryOp.GtU32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.MaxF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.MaxF64, arg0, arg1);\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"min\": { // min(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtU32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtI64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtU64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.LtI64\r\n : BinaryOp.LtI32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.LtU64\r\n : BinaryOp.LtU32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.MinF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.MinF64, arg0, arg1);\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"ceil\": { // ceil(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.CeilF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.CeilF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"floor\": { // floor(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.FloorF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.FloorF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"copysign\": { // copysign(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) { // TODO: does an integer version make sense?\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.CopysignF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.CopysignF64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"nearest\": { // nearest(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.NearestF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.NearestF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"reinterpret\": { // reinterpret(value: *) -> T\r\n if (operands.length != 1) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n switch (typeArguments[0].kind) {\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n arg0 = compiler.compileExpression(operands[0], Type.f32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretF32, arg0);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretF64, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (typeArguments[0].is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.f64\r\n : Type.f32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ReinterpretF64\r\n : UnaryOp.ReinterpretF32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretI32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n arg0 = compiler.compileExpression(operands[0], Type.i64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretI64, arg0);\r\n break;\r\n }\r\n default: { // small integers and void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n compiler.currentType = typeArguments[0];\r\n return ret;\r\n }\r\n case \"sqrt\": { // sqrt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) { // TODO: integer versions (that return f64 or convert)?\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.SqrtF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.SqrtF64, arg0);\r\n break;\r\n }\r\n // case TypeKind.VOID:\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"trunc\": { // trunc(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments && typeArguments.length) {\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n // TODO: truncate to contextual type directly (if not void etc.)?\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.TruncF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.TruncF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n // memory access\r\n\r\n case \"load\": { // load(offset: usize, constantOffset?: usize) -> *\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n let offset = operands.length == 2 ? evaluateConstantOffset(compiler, operands[1]) : 0; // reports\r\n if (offset < 0) { // reported in evaluateConstantOffset\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = typeArguments[0];\r\n return module.createLoad(\r\n typeArguments[0].byteSize,\r\n typeArguments[0].is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n arg0,\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n contextualType.size > typeArguments[0].size\r\n ? (compiler.currentType = contextualType).toNativeType()\r\n : (compiler.currentType = typeArguments[0]).toNativeType(),\r\n offset\r\n );\r\n }\r\n case \"store\": { // store(offset: usize, value: *, constantOffset?: usize) -> void\r\n compiler.currentType = Type.void;\r\n if (operands.length < 2 || operands.length > 3) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n if (operands.length < 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n typeArguments[0],\r\n typeArguments[0].is(TypeFlags.INTEGER)\r\n ? ConversionKind.NONE // no need to convert to small int (but now might result in a float)\r\n : ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n let type: Type;\r\n if (\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n (\r\n !compiler.currentType.is(TypeFlags.INTEGER) || // float to int\r\n compiler.currentType.size < typeArguments[0].size // int to larger int (clear garbage bits)\r\n )\r\n ) {\r\n arg1 = compiler.convertExpression(\r\n arg1,\r\n compiler.currentType, typeArguments[0],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE, // still clears garbage bits\r\n operands[1]\r\n );\r\n type = typeArguments[0];\r\n } else {\r\n type = compiler.currentType;\r\n }\r\n let offset = operands.length == 3 ? evaluateConstantOffset(compiler, operands[2]) : 0; // reports\r\n if (offset < 0) { // reported in evaluateConstantOffset\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = Type.void;\r\n return module.createStore(typeArguments[0].byteSize, arg0, arg1, type.toNativeType(), offset);\r\n }\r\n case \"sizeof\": { // sizeof() -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length != 0) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n let byteSize = (typeArguments)[0].byteSize;\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n ret = module.createI32(byteSize);\r\n } else {\r\n ret = module.createI64(byteSize, 0);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n ret = module.createI64(byteSize, 0);\r\n } else {\r\n ret = module.createI32(byteSize);\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"alignof\": { // alignof() -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length != 0) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n let byteSize = (typeArguments)[0].byteSize;\r\n let alignLog2: i32;\r\n switch (byteSize) {\r\n case 1: { alignLog2 = 0; break; }\r\n case 2: { alignLog2 = 1; break; }\r\n case 4: { alignLog2 = 2; break; }\r\n case 8: { alignLog2 = 3; break; }\r\n default: { assert(false); return module.createUnreachable(); }\r\n }\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n ret = module.createI32(alignLog2);\r\n } else {\r\n ret = module.createI64(alignLog2, 0);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n ret = module.createI64(alignLog2, 0);\r\n } else {\r\n ret = module.createI32(alignLog2);\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"offsetof\": { // offsetof(fieldName?: string) -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length > 1) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n let classType = typeArguments[0].classReference;\r\n if (!classType) {\r\n compiler.error( // TODO: better error\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let offset: i32;\r\n if (operands.length) {\r\n if (\r\n operands[0].kind != NodeKind.LITERAL ||\r\n (operands[0]).literalKind != LiteralKind.STRING\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.String_literal_expected,\r\n operands[0].range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let fieldName = (operands[0]).value;\r\n let field = classType.members ? classType.members.get(fieldName) : null;\r\n if (!(field && field.kind == ElementKind.FIELD)) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_has_no_property_1,\r\n operands[0].range, classType.internalName, fieldName\r\n );\r\n return module.createUnreachable();\r\n }\r\n offset = (field).memoryOffset;\r\n } else {\r\n offset = classType.currentMemoryOffset;\r\n }\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n return module.createI32(offset);\r\n } else {\r\n return module.createI64(offset);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n return module.createI64(offset);\r\n } else {\r\n return module.createI32(offset);\r\n }\r\n }\r\n }\r\n\r\n // control flow\r\n\r\n case \"select\": { // select(ifTrue: T, ifFalse: T, condition: bool) -> T\r\n if (operands.length != 3) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n let type = compiler.currentType;\r\n arg1 = compiler.compileExpression(operands[1], type, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n arg2 = compiler.makeIsTrueish(\r\n compiler.compileExpressionRetainType(operands[2], Type.bool, WrapMode.NONE),\r\n compiler.currentType\r\n );\r\n compiler.currentType = type;\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n }\r\n default: { // any other value type\r\n ret = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"unreachable\": { // unreachable() -> *\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n\r\n // host operations\r\n\r\n case \"memory.size\": { // memory.size() -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.CurrentMemory);\r\n }\r\n case \"memory.grow\": { // memory.grow(pages: i32) -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n arg0 = module.createUnreachable();\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.GrowMemory, null, [ arg0 ]);\r\n }\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n case \"memory.copy\": { // memory.copy(dest: usize, src: usize: n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.MoveMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n case \"memory.fill\": { // memory.fill(dest: usize, value: u8, n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n Type.u32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.SetMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n\r\n // other\r\n\r\n case \"changetype\": { // changetype(value: *) -> T\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpressionRetainType(\r\n operands[0],\r\n typeArguments[0],\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = typeArguments[0];\r\n if (compiler.currentType.size != typeArguments[0].size) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // if (reportNode.range.source.sourceKind != SourceKind.STDLIB)\r\n // compiler.warning(DiagnosticCode.Operation_is_unsafe, reportNode.range);\r\n return arg0; // any usize to any usize\r\n }\r\n case \"assert\": { // assert(isTrueish: T, message?: string) -> T with T != null\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else if (operands.length > 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.bool, WrapMode.WRAP);\r\n }\r\n\r\n let type = compiler.currentType;\r\n compiler.currentType = type.nonNullableType;\r\n\r\n // just return ifTrueish if assertions are disabled, or simplify if dropped anyway\r\n if (compiler.options.noAssert) {\r\n if (contextualType == Type.void) {\r\n compiler.currentType = Type.void;\r\n return module.createNop();\r\n }\r\n return arg0;\r\n }\r\n\r\n let abort = compileAbort(compiler, operands.length == 2 ? operands[1] : null, reportNode);\r\n\r\n compiler.currentType = type.nonNullableType;\r\n\r\n if (contextualType == Type.void) { // simplify if dropped anyway\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n // TODO: also check for NaN in float assertions, as in `Boolean(NaN) -> false`?\r\n case TypeKind.F32: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n arg0,\r\n module.createF32(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n arg0,\r\n module.createF64(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n compiler.currentType = Type.void;\r\n } else {\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n default: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32, false);\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.I64)\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType)\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f32, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF32(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.F32)\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f64, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF64(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.F64)\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"unchecked\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let flow = compiler.currentFunction.flow;\r\n flow.set(FlowFlags.UNCHECKED_CONTEXT);\r\n ret = compiler.compileExpressionRetainType(operands[0], contextualType, WrapMode.NONE);\r\n flow.unset(FlowFlags.UNCHECKED_CONTEXT);\r\n return ret;\r\n }\r\n case \"call_indirect\": { // call_indirect(target: Function | u32, ...args: *[]) -> T\r\n if (operands.length < 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let returnType: Type;\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n returnType = typeArguments[0];\r\n } else {\r\n returnType = contextualType;\r\n }\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.u32, WrapMode.NONE);\r\n if (compiler.currentType.kind != TypeKind.U32) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n operands[0].range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let numOperands = operands.length - 1;\r\n let operandExprs = new Array(numOperands);\r\n let signatureParts = new Array(numOperands + 1);\r\n let nativeReturnType = returnType.toNativeType();\r\n let nativeParamTypes = new Array(numOperands);\r\n for (let i = 0; i < numOperands; ++i) {\r\n operandExprs[i] = compiler.compileExpressionRetainType(operands[1 + i], Type.i32, WrapMode.NONE);\r\n let operandType = compiler.currentType;\r\n signatureParts[i] = operandType.toSignatureString();\r\n nativeParamTypes[i] = operandType.toNativeType();\r\n }\r\n signatureParts[numOperands] = returnType.toSignatureString();\r\n let typeName = signatureParts.join(\"\");\r\n let typeRef = module.getFunctionTypeBySignature(nativeReturnType, nativeParamTypes);\r\n if (!typeRef) typeRef = module.addFunctionType(typeName, nativeReturnType, nativeParamTypes);\r\n compiler.currentType = returnType;\r\n // of course this can easily result in a 'RuntimeError: function signature mismatch' trap and\r\n // thus must be used with care. it exists because it *might* be useful in specific scenarios.\r\n return module.createCallIndirect(arg0, operandExprs, typeName);\r\n }\r\n\r\n // user-defined diagnostic macros\r\n\r\n case \"ERROR\": {\r\n compiler.error(\r\n DiagnosticCode.User_defined_0,\r\n reportNode.range, (operands.length ? operands[0] : reportNode).range.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n case \"WARNING\": {\r\n compiler.warning(\r\n DiagnosticCode.User_defined_0,\r\n reportNode.range, (operands.length ? operands[0] : reportNode).range.toString()\r\n );\r\n return module.createNop();\r\n }\r\n case \"INFO\": {\r\n compiler.info(\r\n DiagnosticCode.User_defined_0,\r\n reportNode.range, (operands.length ? operands[0] : reportNode).range.toString()\r\n );\r\n return module.createNop();\r\n }\r\n\r\n // conversions\r\n\r\n case \"i8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"isize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"usize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"bool\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.bool;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.bool,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"f32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.f32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"f64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.f64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n\r\n // gc\r\n\r\n case \"iterateRoots\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n let expr = compiler.compileExpressionRetainType(operands[0], Type.u32, WrapMode.NONE);\r\n let type = compiler.currentType;\r\n let signatureReference = type.signatureReference;\r\n compiler.currentType = Type.void;\r\n if (\r\n !type.is(TypeFlags.REFERENCE) ||\r\n !signatureReference ||\r\n signatureReference.parameterTypes.length != 1 ||\r\n signatureReference.parameterTypes[0] != compiler.options.usizeType\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n reportNode.range, type.toString(), \"(ref: usize) => void\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = Type.void;\r\n // just emit a call even if the function doesn't yet exist\r\n compiler.needsIterateRoots = true;\r\n return module.createCall(\"~iterateRoots\", [ expr ], NativeType.None);\r\n }\r\n }\r\n var expr = deferASMCall(compiler, prototype, operands, contextualType, reportNode);\r\n if (expr) {\r\n if (typeArguments && typeArguments.length) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return expr;\r\n }\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n}\r\n\r\n/** Defers an inline-assembler-like call to a built-in function. */\r\nfunction deferASMCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n switch (prototype.internalName) {\r\n\r\n // TODO: Operators can't be just deferred (don't have a corresponding generic built-in)\r\n // add, sub, mul, div_s, div_u, rem_s, rem_u\r\n // and, or, xor, shl, shr_u, shr_s\r\n // eq, eqz, ne, lt_s, lt_u, le_s, le_u, gt_s, gt_u, ge_s, ge_u\r\n\r\n case \"i32.clz\": return deferASM(\"clz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.clz\": return deferASM(\"clz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.ctz\": return deferASM(\"ctz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.ctz\": return deferASM(\"ctz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.popcnt\": return deferASM(\"popcnt\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.popcnt\": return deferASM(\"popcnt\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotl\": return deferASM(\"rotl\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotl\": return deferASM(\"rotl\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotr\": return deferASM(\"rotr\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotr\": return deferASM(\"rotr\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.abs\": return deferASM(\"abs\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.abs\": return deferASM(\"abs\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.max\": return deferASM(\"max\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.max\": return deferASM(\"max\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.min\": return deferASM(\"min\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.min\": return deferASM(\"min\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.ceil\": return deferASM(\"ceil\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.ceil\": return deferASM(\"ceil\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.floor\": return deferASM(\"floor\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.floor\": return deferASM(\"floor\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.copysign\": return deferASM(\"copysign\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.copysign\": return deferASM(\"copysign\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.nearest\": return deferASM(\"nearest\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.nearest\": return deferASM(\"nearest\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.reinterpret_f32\": return deferASM(\"reinterpret\", compiler, Type.i32, operands, Type.f32, reportNode);\r\n case \"i64.reinterpret_f64\": return deferASM(\"reinterpret\", compiler, Type.i64, operands, Type.f64, reportNode);\r\n case \"f32.reinterpret_i32\": return deferASM(\"reinterpret\", compiler, Type.f32, operands, Type.i32, reportNode);\r\n case \"f64.reinterpret_i64\": return deferASM(\"reinterpret\", compiler, Type.f64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.sqrt\": return deferASM(\"sqrt\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.sqrt\": return deferASM(\"sqrt\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.trunc\": return deferASM(\"trunc\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.trunc\": return deferASM(\"trunc\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u32, reportNode);\r\n case \"i32.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u32, reportNode);\r\n case \"i32.load\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u64, reportNode);\r\n case \"i64.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u64, reportNode);\r\n case \"i64.load32_s\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.load32_u\": return deferASM(\"load\", compiler, Type.u32, operands, Type.u64, reportNode);\r\n case \"i64.load\": return deferASM(\"load\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.load\": return deferASM(\"load\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.load\": return deferASM(\"load\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.store\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.store32\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.store\": return deferASM(\"store\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.store\": return deferASM(\"store\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.store\": return deferASM(\"store\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n }\r\n return 0;\r\n}\r\n\r\n/** A helper for deferring inline-assembler-like calls to built-in functions. */\r\nfunction deferASM(\r\n name: string,\r\n compiler: Compiler,\r\n typeArgument: Type,\r\n operands: Expression[],\r\n valueType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var prototype = assert(compiler.program.elementsLookup.get(name));\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return compileCall(compiler, prototype, [ typeArgument ], operands, valueType, reportNode);\r\n}\r\n\r\n/** Evaluates the constant type of a type argument *or* expression. */\r\nfunction evaluateConstantType(\r\n compiler: Compiler,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n reportNode: Node\r\n): Type | null {\r\n if (operands.length == 0) { // requires type argument\r\n if (!typeArguments || typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return null;\r\n }\r\n return typeArguments[0];\r\n }\r\n if (operands.length == 1) { // optional type argument\r\n if (typeArguments) {\r\n if (typeArguments.length == 1) {\r\n compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n if (typeArguments.length) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return null;\r\n }\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n } else {\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n return compiler.currentType;\r\n }\r\n if (typeArguments && typeArguments.length > 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return null;\r\n}\r\n\r\n/** Evaluates a `constantOffset` argument.*/\r\nfunction evaluateConstantOffset(compiler: Compiler, expression: Expression): i32 {\r\n var expr: ExpressionRef;\r\n var value: i32;\r\n if (compiler.options.isWasm64) {\r\n expr = compiler.precomputeExpression(expression, Type.usize64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I64 ||\r\n getConstValueI64High(expr) != 0 ||\r\n (value = getConstValueI64Low(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n } else {\r\n expr = compiler.precomputeExpression(expression, Type.usize32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I32 ||\r\n (value = getConstValueI32(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n }\r\n return value;\r\n}\r\n\r\n/** Compiles a memory allocation for an instance of the specified class. */\r\nexport function compileAllocate(\r\n compiler: Compiler,\r\n classInstance: Class,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = compiler.program;\r\n assert(classInstance.program == program);\r\n var module = compiler.module;\r\n var options = compiler.options;\r\n\r\n // __gc_allocate(size, markFn)\r\n if (program.hasGC && classInstance.type.isManaged(program)) {\r\n let allocateInstance = assert(program.gcAllocateInstance);\r\n if (!compiler.compileFunction(allocateInstance)) return module.createUnreachable();\r\n compiler.currentType = classInstance.type;\r\n return module.createCall(\r\n allocateInstance.internalName, [\r\n options.isWasm64\r\n ? module.createI64(classInstance.currentMemoryOffset)\r\n : module.createI32(classInstance.currentMemoryOffset),\r\n module.createI32(\r\n ensureGCHook(compiler, classInstance)\r\n )\r\n ],\r\n options.nativeSizeType\r\n );\r\n\r\n // memory.allocate(size)\r\n } else {\r\n let allocateInstance = program.memoryAllocateInstance;\r\n if (!allocateInstance) {\r\n program.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n reportNode.range, \"memory.allocate\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!compiler.compileFunction(allocateInstance)) return module.createUnreachable();\r\n\r\n compiler.currentType = classInstance.type;\r\n return module.createCall(\r\n allocateInstance.internalName, [\r\n options.isWasm64\r\n ? module.createI64(classInstance.currentMemoryOffset)\r\n : module.createI32(classInstance.currentMemoryOffset)\r\n ],\r\n options.nativeSizeType\r\n );\r\n }\r\n}\r\n\r\n/** Compiles an abort wired to the conditionally imported 'abort' function. */\r\nexport function compileAbort(\r\n compiler: Compiler,\r\n message: Expression | null,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = compiler.program;\r\n var module = compiler.module;\r\n\r\n var stringType = program.typesLookup.get(\"string\");\r\n if (!stringType) return module.createUnreachable();\r\n\r\n var abortInstance = program.abortInstance;\r\n if (!(abortInstance && compiler.compileFunction(abortInstance))) return module.createUnreachable();\r\n\r\n var messageArg = message != null\r\n ? compiler.compileExpression(message, stringType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : stringType.toNativeZero(module);\r\n\r\n var filenameArg = compiler.ensureStaticString(reportNode.range.source.normalizedPath);\r\n\r\n compiler.currentType = Type.void;\r\n return module.createBlock(null, [\r\n module.createCall(\r\n abortInstance.internalName, [\r\n messageArg,\r\n filenameArg,\r\n module.createI32(reportNode.range.line),\r\n module.createI32(reportNode.range.column)\r\n ],\r\n NativeType.None\r\n ),\r\n module.createUnreachable()\r\n ]);\r\n}\r\n\r\n/** Compiles the iterateRoots function if requires. */\r\nexport function compileIterateRoots(compiler: Compiler): void {\r\n var module = compiler.module;\r\n var exprs = new Array();\r\n\r\n for (let element of compiler.program.elementsLookup.values()) {\r\n if (element.kind != ElementKind.GLOBAL) continue;\r\n let global = element;\r\n let classReference = global.type.classReference;\r\n if (\r\n global.is(CommonFlags.COMPILED) &&\r\n classReference !== null &&\r\n !classReference.hasDecorator(DecoratorFlags.UNMANAGED)\r\n ) {\r\n if (global.is(CommonFlags.INLINED)) {\r\n let value = global.constantIntegerValue;\r\n exprs.push(\r\n module.createCallIndirect(\r\n module.createGetLocal(0, NativeType.I32),\r\n [\r\n compiler.options.isWasm64\r\n ? module.createI64(i64_low(value), i64_high(value))\r\n : module.createI32(i64_low(value))\r\n ],\r\n \"iv\"\r\n )\r\n );\r\n } else {\r\n exprs.push(\r\n module.createCallIndirect(\r\n module.createGetLocal(0, NativeType.I32),\r\n [\r\n module.createGetGlobal(\r\n global.internalName,\r\n compiler.options.nativeSizeType\r\n )\r\n ],\r\n \"iv\"\r\n )\r\n );\r\n }\r\n }\r\n }\r\n var typeRef = compiler.ensureFunctionType([ Type.i32 ], Type.void);\r\n module.addFunction(\"~iterateRoots\", typeRef, [],\r\n exprs.length\r\n ? module.createBlock(null, exprs)\r\n : module.createNop()\r\n );\r\n}\r\n\r\n/** Ensures that the specified class's GC hook exists and returns its function table index. */\r\nexport function ensureGCHook(\r\n compiler: Compiler,\r\n classInstance: Class\r\n): u32 {\r\n var program = compiler.program;\r\n assert(classInstance.type.isManaged(program));\r\n\r\n // check if the GC hook has already been created\r\n {\r\n let existingIndex = classInstance.gcHookIndex;\r\n if (existingIndex != -1) return existingIndex;\r\n }\r\n\r\n // check if the class implements a custom GC function (only valid for internals)\r\n var members = classInstance.members;\r\n if (classInstance.prototype.declaration.range.source.isLibrary) {\r\n if (members !== null && members.has(\"__gc\")) {\r\n let gcPrototype = assert(members.get(\"__gc\"));\r\n assert(gcPrototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n let gcInstance = assert(program.resolver.resolveFunction(gcPrototype, null));\r\n assert(gcInstance.is(CommonFlags.PRIVATE | CommonFlags.INSTANCE));\r\n assert(!gcInstance.isAny(CommonFlags.AMBIENT | CommonFlags.VIRTUAL));\r\n assert(gcInstance.signature.parameterTypes.length == 0);\r\n assert(gcInstance.signature.returnType == Type.void);\r\n gcInstance.internalName = classInstance.internalName + \"~gc\";\r\n assert(compiler.compileFunction(gcInstance));\r\n let index = compiler.ensureFunctionTableEntry(gcInstance);\r\n classInstance.gcHookIndex = index;\r\n return index;\r\n }\r\n }\r\n\r\n var module = compiler.module;\r\n var options = compiler.options;\r\n var nativeSizeType = options.nativeSizeType;\r\n var nativeSizeSize = options.usizeType.byteSize;\r\n var body = new Array();\r\n\r\n // nothing to mark if 'this' is null\r\n body.push(\r\n module.createIf(\r\n module.createUnary(\r\n options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n module.createGetLocal(0, nativeSizeType)\r\n ),\r\n module.createReturn()\r\n )\r\n );\r\n\r\n // remember the function index so we don't recurse infinitely\r\n var functionTable = compiler.functionTable;\r\n var gcHookIndex = functionTable.length;\r\n functionTable.push(\"\");\r\n classInstance.gcHookIndex = gcHookIndex;\r\n\r\n // if the class extends a base class, call its hook first (calls mark)\r\n var baseInstance = classInstance.base;\r\n if (baseInstance) {\r\n assert(baseInstance.type.isManaged(program));\r\n body.push(\r\n module.createCallIndirect(\r\n module.createI32(\r\n ensureGCHook(compiler, baseInstance.type.classReference)\r\n ),\r\n [\r\n module.createGetLocal(0, nativeSizeType)\r\n ],\r\n nativeSizeType == NativeType.I64 ? \"Iv\" : \"iv\"\r\n )\r\n );\r\n\r\n // if this class is the top-most base class, mark the instance\r\n } else {\r\n body.push(\r\n module.createCall(assert(program.gcMarkInstance).internalName, [\r\n module.createGetLocal(0, nativeSizeType)\r\n ], NativeType.None)\r\n );\r\n }\r\n\r\n // mark instances assigned to own fields that are again references\r\n if (members) {\r\n for (let member of members.values()) {\r\n if (member.kind == ElementKind.FIELD) {\r\n if ((member).parent === classInstance) {\r\n let type = (member).type;\r\n if (type.isManaged(program)) {\r\n let offset = (member).memoryOffset;\r\n assert(offset >= 0);\r\n body.push(\r\n module.createCall(assert(program.gcMarkInstance).internalName, [\r\n module.createLoad(\r\n nativeSizeSize,\r\n false,\r\n module.createGetLocal(0, nativeSizeType),\r\n nativeSizeType,\r\n offset\r\n )\r\n ], NativeType.None)\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n // add the function to the module and return its table index\r\n var funcName = classInstance.internalName + \"~gc\";\r\n module.addFunction(\r\n funcName,\r\n compiler.ensureFunctionType(null, Type.void, options.usizeType),\r\n null,\r\n module.createBlock(null, body)\r\n );\r\n functionTable[gcHookIndex] = funcName;\r\n return gcHookIndex;\r\n}\r\n","/** @module util *//***/\r\n\r\n/** An enum of named character codes. */\r\nexport const enum CharCode {\r\n\r\n NULL = 0,\r\n LINEFEED = 0x0A,\r\n CARRIAGERETURN = 0x0D,\r\n LINESEPARATOR = 0x2028,\r\n PARAGRAPHSEPARATOR = 0x2029,\r\n NEXTLINE = 0x0085,\r\n\r\n SPACE = 0x20,\r\n NONBREAKINGSPACE = 0xA0,\r\n ENQUAD = 0x2000,\r\n EMQUAD = 0x2001,\r\n ENSPACE = 0x2002,\r\n EMSPACE = 0x2003,\r\n THREEPEREMSPACE = 0x2004,\r\n FOURPEREMSPACE = 0x2005,\r\n SIXPEREMSPACE = 0x2006,\r\n FIGURESPACE = 0x2007,\r\n PUNCTUATIONSPACE = 0x2008,\r\n THINSPACE = 0x2009,\r\n HAIRSPACE = 0x200A,\r\n ZEROWIDTHSPACE = 0x200B,\r\n NARROWNOBREAKSPACE = 0x202F,\r\n IDEOGRAPHICSPACE = 0x3000,\r\n MATHEMATICALSPACE = 0x205F,\r\n OGHAM = 0x1680,\r\n\r\n _ = 0x5F,\r\n\r\n _0 = 0x30,\r\n _1 = 0x31,\r\n _2 = 0x32,\r\n _3 = 0x33,\r\n _4 = 0x34,\r\n _5 = 0x35,\r\n _6 = 0x36,\r\n _7 = 0x37,\r\n _8 = 0x38,\r\n _9 = 0x39,\r\n\r\n a = 0x61,\r\n b = 0x62,\r\n c = 0x63,\r\n d = 0x64,\r\n e = 0x65,\r\n f = 0x66,\r\n g = 0x67,\r\n h = 0x68,\r\n i = 0x69,\r\n j = 0x6A,\r\n k = 0x6B,\r\n l = 0x6C,\r\n m = 0x6D,\r\n n = 0x6E,\r\n o = 0x6F,\r\n p = 0x70,\r\n q = 0x71,\r\n r = 0x72,\r\n s = 0x73,\r\n t = 0x74,\r\n u = 0x75,\r\n v = 0x76,\r\n w = 0x77,\r\n x = 0x78,\r\n y = 0x79,\r\n z = 0x7A,\r\n\r\n A = 0x41,\r\n B = 0x42,\r\n C = 0x43,\r\n D = 0x44,\r\n E = 0x45,\r\n F = 0x46,\r\n G = 0x47,\r\n H = 0x48,\r\n I = 0x49,\r\n J = 0x4A,\r\n K = 0x4B,\r\n L = 0x4C,\r\n M = 0x4D,\r\n N = 0x4E,\r\n O = 0x4F,\r\n P = 0x50,\r\n Q = 0x51,\r\n R = 0x52,\r\n S = 0x53,\r\n T = 0x54,\r\n U = 0x55,\r\n V = 0x56,\r\n W = 0x57,\r\n X = 0x58,\r\n Y = 0x59,\r\n Z = 0x5a,\r\n\r\n AMPERSAND = 0x26,\r\n ASTERISK = 0x2A,\r\n AT = 0x40,\r\n BACKSLASH = 0x5C,\r\n BACKTICK = 0x60,\r\n BAR = 0x7C,\r\n CARET = 0x5E,\r\n CLOSEBRACE = 0x7D,\r\n CLOSEBRACKET = 0x5D,\r\n CLOSEPAREN = 0x29,\r\n COLON = 0x3A,\r\n COMMA = 0x2C,\r\n DOLLAR = 0x24,\r\n DOT = 0x2E,\r\n DOUBLEQUOTE = 0x22,\r\n EQUALS = 0x3D,\r\n EXCLAMATION = 0x21,\r\n GREATERTHAN = 0x3E,\r\n HASH = 0x23,\r\n LESSTHAN = 0x3C,\r\n MINUS = 0x2D,\r\n OPENBRACE = 0x7B,\r\n OPENBRACKET = 0x5B,\r\n OPENPAREN = 0x28,\r\n PERCENT = 0x25,\r\n PLUS = 0x2B,\r\n QUESTION = 0x3F,\r\n SEMICOLON = 0x3B,\r\n SINGLEQUOTE = 0x27,\r\n SLASH = 0x2F,\r\n TILDE = 0x7E,\r\n\r\n BACKSPACE = 0x08,\r\n FORMFEED = 0x0C,\r\n BYTEORDERMARK = 0xFEFF,\r\n TAB = 0x09,\r\n VERTICALTAB = 0x0B\r\n}\r\n\r\n/** Tests if the specified character code is some sort of line break. */\r\nexport function isLineBreak(c: CharCode): bool {\r\n switch (c) {\r\n case CharCode.LINEFEED:\r\n case CharCode.CARRIAGERETURN:\r\n case CharCode.LINESEPARATOR:\r\n case CharCode.PARAGRAPHSEPARATOR: {\r\n return true;\r\n }\r\n default: {\r\n return false;\r\n }\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is some sort of white space. */\r\nexport function isWhiteSpace(c: i32): bool {\r\n switch (c) {\r\n case CharCode.SPACE:\r\n case CharCode.TAB:\r\n case CharCode.VERTICALTAB:\r\n case CharCode.FORMFEED:\r\n case CharCode.NONBREAKINGSPACE:\r\n case CharCode.NEXTLINE:\r\n case CharCode.OGHAM:\r\n case CharCode.NARROWNOBREAKSPACE:\r\n case CharCode.MATHEMATICALSPACE:\r\n case CharCode.IDEOGRAPHICSPACE:\r\n case CharCode.BYTEORDERMARK: {\r\n return true;\r\n }\r\n default: {\r\n return c >= CharCode.ENQUAD && c <= CharCode.ZEROWIDTHSPACE;\r\n }\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is a valid decimal digit. */\r\nexport function isDecimalDigit(c: i32): bool {\r\n return c >= CharCode._0 && c <= CharCode._9;\r\n}\r\n\r\n/** Tests if the specified character code is a valid octal digit. */\r\nexport function isOctalDigit(c: i32): bool {\r\n return c >= CharCode._0 && c <= CharCode._7;\r\n}\r\n\r\n/** Tests if the specified character code is a valid start of an identifier. */\r\nexport function isIdentifierStart(c: i32): bool {\r\n return c >= CharCode.A && c <= CharCode.Z\r\n || c >= CharCode.a && c <= CharCode.z\r\n || c == CharCode.DOLLAR\r\n || c == CharCode._\r\n || c > 0x7f && isUnicodeIdentifierStart(c);\r\n}\r\n\r\n/** Tests if the specified character code is a valid keyword character. */\r\nexport function isKeywordCharacter(c: i32): bool {\r\n return c >= CharCode.a && c <= CharCode.z;\r\n}\r\n\r\n/** Tests if the specified character code is a valid part of an identifier. */\r\nexport function isIdentifierPart(c: i32): bool {\r\n return c >= CharCode.A && c <= CharCode.Z\r\n || c >= CharCode.a && c <= CharCode.z\r\n || c >= CharCode._0 && c <= CharCode._9\r\n || c == CharCode.DOLLAR\r\n || c == CharCode._\r\n || c > 0x7f && isUnicodeIdentifierPart(c);\r\n}\r\n\r\n// storing as u16 to save memory\r\nconst unicodeIdentifierStart: u16[] = [\r\n 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736,\r\n 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906,\r\n 908, 908, 910, 929, 931,\r\n 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514,\r\n 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774,\r\n 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969,\r\n 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088,\r\n 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384,\r\n 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474,\r\n 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529,\r\n 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613,\r\n 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705,\r\n 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784,\r\n 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873,\r\n 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958,\r\n 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986,\r\n 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125,\r\n 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240,\r\n 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333,\r\n 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455,\r\n 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634,\r\n 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725,\r\n 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757,\r\n 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840,\r\n 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186,\r\n 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293,\r\n 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696,\r\n 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798,\r\n 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992,\r\n 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872,\r\n 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016,\r\n 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389,\r\n 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688,\r\n 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141,\r\n 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424,\r\n 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025,\r\n 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130,\r\n 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188,\r\n 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469,\r\n 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505,\r\n 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584,\r\n 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520,\r\n 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670,\r\n 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720,\r\n 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329,\r\n 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540,\r\n 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893,\r\n 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538,\r\n 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888,\r\n 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015,\r\n 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259,\r\n 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520,\r\n 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695,\r\n 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739,\r\n 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798,\r\n 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243,\r\n 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285,\r\n 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323,\r\n 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019,\r\n 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474,\r\n 65479, 65482, 65487, 65490, 65495, 65498, 65500,\r\n];\r\nconst unicodeIdentifierPart: u16[] = [\r\n 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736,\r\n 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906,\r\n 908, 908, 910, 929, 931,\r\n 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415,\r\n 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520,\r\n 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788,\r\n 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112,\r\n 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423,\r\n 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482,\r\n 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525,\r\n 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602,\r\n 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632,\r\n 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693,\r\n 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757,\r\n 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821,\r\n 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884,\r\n 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929,\r\n 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972,\r\n 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018,\r\n 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088,\r\n 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157,\r\n 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216,\r\n 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285,\r\n 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340,\r\n 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424,\r\n 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515,\r\n 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570,\r\n 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720,\r\n 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751,\r\n 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789,\r\n 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895,\r\n 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028,\r\n 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304,\r\n 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744,\r\n 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808,\r\n 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108,\r\n 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902,\r\n 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099,\r\n 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272,\r\n 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516,\r\n 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783,\r\n 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155,\r\n 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676,\r\n 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027,\r\n 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134,\r\n 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205,\r\n 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417,\r\n 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477,\r\n 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517,\r\n 8521, 8526, 8526, 8544, 8584,\r\n 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559,\r\n 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686,\r\n 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728,\r\n 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335,\r\n 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449,\r\n 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799,\r\n 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512,\r\n 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783,\r\n 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072,\r\n 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309,\r\n 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584,\r\n 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741,\r\n 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808,\r\n 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203,\r\n 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275,\r\n 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321,\r\n 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008,\r\n 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140,\r\n 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382,\r\n 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,\r\n];\r\n\r\nfunction lookupInUnicodeMap(code: u16, map: u16[]): bool {\r\n if (code < map[0]) return false;\r\n\r\n var lo = 0;\r\n var hi = map.length;\r\n var mid: i32;\r\n\r\n while (lo + 1 < hi) {\r\n mid = lo + (hi - lo) / 2;\r\n mid -= mid % 2;\r\n if (map[mid] <= code && code <= map[mid + 1]) {\r\n return true;\r\n }\r\n if (code < map[mid]) {\r\n hi = mid;\r\n } else {\r\n lo = mid + 2;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction isUnicodeIdentifierStart(code: i32): bool {\r\n return code < 0 || code > 0xffff ? false\r\n : lookupInUnicodeMap(code as u16, unicodeIdentifierStart);\r\n}\r\n\r\nfunction isUnicodeIdentifierPart(code: i32): bool {\r\n return code < 0 || code > 0xffff ? false\r\n : lookupInUnicodeMap(code as u16, unicodeIdentifierPart);\r\n}\r\n","/** @module util *//***/\r\n\r\nimport {\r\n CharCode\r\n} from \"./charcode\";\r\n\r\nconst separator = CharCode.SLASH;\r\n\r\n/**\r\n * Normalizes the specified path, removing interior placeholders.\r\n * Expects a posix-compatible relative path (not Windows compatible).\r\n */\r\nexport function normalizePath(path: string): string {\r\n var pos = 0;\r\n var len = path.length;\r\n\r\n // trim leading './'\r\n while (pos + 1 < len &&\r\n path.charCodeAt(pos) == CharCode.DOT &&\r\n path.charCodeAt(pos + 1) == separator\r\n ) {\r\n pos += 2;\r\n }\r\n\r\n if (pos > 0 || len < path.length) {\r\n path = path.substring(pos, len);\r\n len -= pos;\r\n pos = 0;\r\n }\r\n\r\n var atEnd: bool;\r\n while (pos + 1 < len) {\r\n atEnd = false;\r\n\r\n // we are only interested in '/.' sequences ...\r\n if (\r\n path.charCodeAt(pos) == separator &&\r\n path.charCodeAt(pos + 1) == CharCode.DOT\r\n ) {\r\n // '/.' ( '/' | $ )\r\n atEnd = pos + 2 == len;\r\n if (atEnd ||\r\n pos + 2 < len &&\r\n path.charCodeAt(pos + 2) == separator\r\n ) {\r\n path = atEnd\r\n ? path.substring(0, pos)\r\n : path.substring(0, pos) + path.substring(pos + 2);\r\n len -= 2;\r\n continue;\r\n }\r\n\r\n // '/.' ( './' | '.' $ )\r\n atEnd = pos + 3 == len;\r\n if (atEnd && path.charCodeAt(pos + 2) == CharCode.DOT ||\r\n pos + 3 < len &&\r\n path.charCodeAt(pos + 2) == CharCode.DOT &&\r\n path.charCodeAt(pos + 3) == separator\r\n ) {\r\n // find preceeding '/'\r\n let ipos = pos;\r\n while (--ipos >= 0) {\r\n if (path.charCodeAt(ipos) == separator) {\r\n if (pos - ipos != 3 ||\r\n path.charCodeAt(ipos + 1) != CharCode.DOT ||\r\n path.charCodeAt(ipos + 2) != CharCode.DOT\r\n ) { // exclude '..' itself\r\n path = atEnd\r\n ? path.substring(0, ipos)\r\n : path.substring(0, ipos) + path.substring(pos + 3);\r\n len -= pos + 3 - ipos;\r\n pos = ipos - 1; // incremented again at end of loop\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // if there's no preceeding '/', trim start if non-empty\r\n if (ipos < 0 && pos > 0) {\r\n if (pos != 2 ||\r\n path.charCodeAt(0) != CharCode.DOT ||\r\n path.charCodeAt(1) != CharCode.DOT\r\n ) { // exclude '..' itself\r\n path = path.substring(pos + 4);\r\n len = path.length;\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n pos++;\r\n }\r\n return len > 0 ? path : \".\";\r\n}\r\n\r\n/** Resolves the specified path relative to the specified origin. */\r\nexport function resolvePath(normalizedPath: string, origin: string): string {\r\n if (normalizedPath.startsWith(\"std/\")) {\r\n return normalizedPath;\r\n }\r\n return normalizePath(\r\n dirname(origin) + String.fromCharCode(separator) + normalizedPath\r\n );\r\n}\r\n\r\n/** Obtains the directory portion of a normalized path. */\r\nexport function dirname(normalizedPath: string): string {\r\n var pos = normalizedPath.length;\r\n while (--pos > 0) {\r\n if (normalizedPath.charCodeAt(pos) == separator) {\r\n return normalizedPath.substring(0, pos);\r\n }\r\n }\r\n return \".\";\r\n}\r\n","/** @module util *//***/\r\n\r\nconst indentX1 = \" \";\r\nconst indentX2 = \" \";\r\nconst indentX4 = \" \";\r\n\r\n/** Creates an indentation matching the number of specified levels. */\r\nexport function indent(sb: string[], level: i32): void {\r\n while (level >= 4) {\r\n sb.push(indentX4);\r\n level -= 4;\r\n }\r\n if (level >= 2) {\r\n sb.push(indentX2);\r\n level -= 2;\r\n }\r\n if (level) {\r\n sb.push(indentX1);\r\n }\r\n}\r\n","/** @module util *//***/\r\n\r\n/** Reads an 8-bit integer from the specified buffer. */\r\nexport function readI8(buffer: Uint8Array, offset: i32): i32 {\r\n return buffer[offset];\r\n}\r\n\r\n/** Writes an 8-bit integer to the specified buffer. */\r\nexport function writeI8(value: i32, buffer: Uint8Array, offset: i32): void {\r\n buffer[offset] = value;\r\n}\r\n\r\n/** Reads a 16-bit integer from the specified buffer. */\r\nexport function readI16(buffer: Uint8Array, offset: i32): i32 {\r\n return buffer[offset ]\r\n | buffer[offset + 1] << 8;\r\n}\r\n\r\n/** Writes a 16-bit integer to the specified buffer. */\r\nexport function writeI16(value: i32, buffer: Uint8Array, offset: i32): void {\r\n buffer[offset ] = value;\r\n buffer[offset + 1] = value >>> 8;\r\n}\r\n\r\n/** Reads a 32-bit integer from the specified buffer. */\r\nexport function readI32(buffer: Uint8Array, offset: i32): i32 {\r\n return buffer[offset ]\r\n | buffer[offset + 1] << 8\r\n | buffer[offset + 2] << 16\r\n | buffer[offset + 3] << 24;\r\n}\r\n\r\n/** Writes a 32-bit integer to the specified buffer. */\r\nexport function writeI32(value: i32, buffer: Uint8Array, offset: i32): void {\r\n buffer[offset ] = value;\r\n buffer[offset + 1] = value >>> 8;\r\n buffer[offset + 2] = value >>> 16;\r\n buffer[offset + 3] = value >>> 24;\r\n}\r\n\r\n/** Reads a 64-bit integer from the specified buffer. */\r\nexport function readI64(buffer: Uint8Array, offset: i32): I64 {\r\n var lo = readI32(buffer, offset);\r\n var hi = readI32(buffer, offset + 4);\r\n return i64_new(lo, hi);\r\n}\r\n\r\n/** Writes a 64-bit integer to the specified buffer. */\r\nexport function writeI64(value: I64, buffer: Uint8Array, offset: i32): void {\r\n writeI32(i64_low(value), buffer, offset);\r\n writeI32(i64_high(value), buffer, offset + 4);\r\n}\r\n\r\n/** Reads a 32-bit float from the specified buffer. */\r\nexport function readF32(buffer: Uint8Array, offset: i32): f32 {\r\n return i32_as_f32(readI32(buffer, offset));\r\n}\r\n\r\n/** Writes a 32-bit float to the specified buffer. */\r\nexport function writeF32(value: f32, buffer: Uint8Array, offset: i32): void {\r\n writeI32(f32_as_i32(value), buffer, offset);\r\n}\r\n\r\n/** Reads a 64-bit float from the specified buffer. */\r\nexport function readF64(buffer: Uint8Array, offset: i32): f64 {\r\n return i64_as_f64(readI64(buffer, offset));\r\n}\r\n\r\n/** Writes a 64-bit float to the specified buffer. */\r\nexport function writeF64(value: f64, buffer: Uint8Array, offset: i32): void {\r\n var valueI64 = f64_as_i64(value);\r\n writeI32(i64_low(valueI64), buffer, offset);\r\n writeI32(i64_high(valueI64), buffer, offset + 4);\r\n}\r\n","/**\r\n * Low-level C-like compiler API.\r\n * @module index\r\n *//***/\r\n\r\nimport {\r\n Compiler,\r\n Options,\r\n Target,\r\n Feature\r\n} from \"./compiler\";\r\n\r\nimport {\r\n Decompiler\r\n} from \"./decompiler\";\r\n\r\nimport {\r\n IDLBuilder,\r\n TSDBuilder\r\n} from \"./definitions\";\r\n\r\nimport {\r\n DiagnosticMessage,\r\n DiagnosticCategory,\r\n formatDiagnosticMessage\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Module\r\n} from \"./module\";\r\n\r\nimport {\r\n Parser\r\n} from \"./parser\";\r\n\r\nimport {\r\n Program\r\n} from \"./program\";\r\n\r\n/** Parses a source file. If `parser` has been omitted a new one is created. */\r\nexport function parseFile(text: string, path: string, isEntry: bool = false,\r\n parser: Parser | null = null\r\n): Parser {\r\n if (!parser) parser = new Parser();\r\n parser.parseFile(text, path, isEntry);\r\n return parser;\r\n}\r\n\r\n/** Obtains the next required file's path. Returns `null` once complete. */\r\nexport function nextFile(parser: Parser): string | null {\r\n return parser.nextFile();\r\n}\r\n\r\n/** Obtains the next diagnostic message. Returns `null` once complete. */\r\nexport function nextDiagnostic(parser: Parser): DiagnosticMessage | null {\r\n var program = parser.program;\r\n return program.diagnosticsOffset < program.diagnostics.length\r\n ? program.diagnostics[program.diagnosticsOffset++]\r\n : null;\r\n}\r\n\r\n/** Formats a diagnostic message to a string. */\r\nexport { formatDiagnosticMessage as formatDiagnostic };\r\n\r\n/** Tests whether a diagnostic is informatory. */\r\nexport function isInfo(message: DiagnosticMessage): bool {\r\n return message.category == DiagnosticCategory.INFO;\r\n}\r\n\r\n/** Tests whether a diagnostic is a warning. */\r\nexport function isWarning(message: DiagnosticMessage): bool {\r\n return message.category == DiagnosticCategory.WARNING;\r\n}\r\n\r\n/** Tests whether a diagnostic is an error. */\r\nexport function isError(message: DiagnosticMessage): bool {\r\n return message.category == DiagnosticCategory.ERROR;\r\n}\r\n\r\n/** Creates a new set of compiler options. */\r\nexport function createOptions(): Options {\r\n return new Options();\r\n}\r\n\r\n/** Sets the `target` option. */\r\nexport function setTarget(options: Options, target: Target): void {\r\n options.target = target;\r\n}\r\n\r\n/** Sets the `noTreeShaking` option. */\r\nexport function setNoTreeShaking(options: Options, noTreeShaking: bool): void {\r\n options.noTreeShaking = noTreeShaking;\r\n}\r\n\r\n/** Sets the `noAssert` option. */\r\nexport function setNoAssert(options: Options, noAssert: bool): void {\r\n options.noAssert = noAssert;\r\n}\r\n\r\n/** Sets the `importMemory` option. */\r\nexport function setImportMemory(options: Options, importMemory: bool): void {\r\n options.importMemory = importMemory;\r\n}\r\n\r\n/** Sets the `importTable` option. */\r\nexport function setImportTable(options: Options, importTable: bool): void {\r\n options.importTable = importTable;\r\n}\r\n\r\n/** Sets the `sourceMap` option. */\r\nexport function setSourceMap(options: Options, sourceMap: bool): void {\r\n options.sourceMap = sourceMap;\r\n}\r\n\r\n/** Sets the `memoryBase` option. */\r\nexport function setMemoryBase(options: Options, memoryBase: u32): void {\r\n options.memoryBase = memoryBase;\r\n}\r\n\r\n/** Sets a 'globalAliases' value. */\r\nexport function setGlobalAlias(options: Options, name: string, alias: string): void {\r\n var globalAliases = options.globalAliases;\r\n if (!globalAliases) options.globalAliases = globalAliases = new Map();\r\n globalAliases.set(name, alias);\r\n}\r\n\r\n/** Sign extension operations. */\r\nexport const FEATURE_SIGN_EXTENSION = Feature.SIGN_EXTENSION;\r\n/** Mutable global imports and exports. */\r\nexport const FEATURE_MUTABLE_GLOBAL = Feature.MUTABLE_GLOBAL;\r\n\r\n/** Enables a specific feature. */\r\nexport function enableFeature(options: Options, feature: Feature): void {\r\n options.features |= feature;\r\n}\r\n\r\n/** Gives the compiler a hint at the optimize levels that will be used later on. */\r\nexport function setOptimizeLevelHints(options: Options, optimizeLevel: i32, shrinkLevel: i32): void {\r\n options.optimizeLevelHint = optimizeLevel;\r\n options.shrinkLevelHint = shrinkLevel;\r\n}\r\n\r\n/** Finishes parsing. */\r\nexport function finishParsing(parser: Parser): Program {\r\n return parser.finish();\r\n}\r\n\r\n/** Compiles the sources computed by the parser to a module. */\r\nexport function compileProgram(program: Program, options: Options | null = null): Module {\r\n return new Compiler(program, options).compile();\r\n}\r\n\r\n/** Decompiles a module to its (low level) source. */\r\nexport function decompileModule(module: Module): string {\r\n var decompiler = new Decompiler();\r\n decompiler.decompile(module);\r\n return decompiler.finish();\r\n}\r\n\r\n/** Builds WebIDL definitions for the specified program. */\r\nexport function buildIDL(program: Program): string {\r\n return IDLBuilder.build(program);\r\n}\r\n\r\n/** Builds TypeScript definitions for the specified program. */\r\nexport function buildTSD(program: Program): string {\r\n return TSDBuilder.build(program);\r\n}\r\n\r\n/** Prefix indicating a library file. */\r\nexport { LIBRARY_PREFIX } from \"./common\";\r\n","/**\r\n * A decompiler that generates low-level AssemblyScript from WebAssembly binaries.\r\n * @module decompiler\r\n *//***/\r\n\r\nimport {\r\n Module,\r\n NativeType,\r\n ExpressionId,\r\n UnaryOp,\r\n BinaryOp,\r\n HostOp,\r\n FunctionRef,\r\n ExpressionRef,\r\n Index,\r\n getFunctionName,\r\n getFunctionBody,\r\n getFunctionParamCount,\r\n getFunctionParamType,\r\n getFunctionResultType,\r\n getExpressionId,\r\n getExpressionType,\r\n getBlockName,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getIfCondition,\r\n getIfTrue,\r\n getIfFalse,\r\n getLoopName,\r\n getLoopBody,\r\n getBreakName,\r\n getBreakCondition,\r\n getGetLocalIndex,\r\n getSetLocalIndex,\r\n getSetLocalValue,\r\n getLoadOffset,\r\n getLoadPtr,\r\n getStoreOffset,\r\n getStorePtr,\r\n getStoreValue,\r\n getConstValueI32,\r\n getConstValueI64Low,\r\n getConstValueI64High,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getUnaryOp,\r\n getUnaryValue,\r\n getBinaryOp,\r\n getBinaryLeft,\r\n getBinaryRight,\r\n getSelectThen,\r\n getSelectElse,\r\n getSelectCondition,\r\n getDropValue,\r\n getReturnValue,\r\n getHostOp,\r\n getHostOperand\r\n} from \"./module\";\r\n\r\n// TODO :-)\r\n\r\nexport class Decompiler {\r\n\r\n static decompile(module: Module): string {\r\n var decompiler = new Decompiler();\r\n decompiler.decompile(module);\r\n return decompiler.finish();\r\n }\r\n\r\n text: string[] = [];\r\n functionId: i32 = 0;\r\n\r\n constructor() { }\r\n\r\n /** Decompiles a module to an AST that can then be serialized. */\r\n decompile(module: Module): void {\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n decompileFunction(func: FunctionRef): void {\r\n var name = getFunctionName(func) || \"$\" + this.functionId.toString(10);\r\n var body = getFunctionBody(func);\r\n this.push(\"function \");\r\n this.push(name);\r\n this.push(\"(\");\r\n for (let i: Index = 0, k: Index = getFunctionParamCount(func); i < k; ++i) {\r\n if (i > 0) this.push(\", \");\r\n this.push(\"$\");\r\n this.push(i.toString(10));\r\n this.push(\": \");\r\n this.push(nativeTypeToType(getFunctionParamType(func, i)));\r\n }\r\n this.push(\"): \");\r\n this.push(nativeTypeToType(getFunctionResultType(func)));\r\n this.push(\" \");\r\n if (getExpressionId(body) != ExpressionId.Block) {\r\n this.push(\"{\\n\");\r\n }\r\n this.decompileExpression(body);\r\n if (getExpressionId(body) != ExpressionId.Block) {\r\n this.push(\"\\n}\\n\");\r\n }\r\n ++this.functionId;\r\n }\r\n\r\n decompileExpression(expr: ExpressionRef): void {\r\n var id = getExpressionId(expr);\r\n var type = getExpressionType(expr);\r\n\r\n var nested: ExpressionRef;\r\n var string: string | null;\r\n var i: Index, k: Index;\r\n\r\n switch (id) {\r\n case ExpressionId.Block: { // TODO: magic\r\n if ((string = getBlockName(expr)) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"{\\n\");\r\n k = getBlockChildCount(expr);\r\n for (i = 0; i < k; ++i) {\r\n this.decompileExpression(getBlockChild(expr, i));\r\n }\r\n this.push(\"}\\n\");\r\n return;\r\n }\r\n case ExpressionId.If: {\r\n if (type == NativeType.None) {\r\n this.push(\"if (\");\r\n this.decompileExpression(getIfCondition(expr));\r\n this.push(\") \");\r\n this.decompileExpression(getIfTrue(expr));\r\n if (nested = getIfFalse(expr)) {\r\n this.push(\" else \");\r\n this.decompileExpression(nested);\r\n }\r\n } else {\r\n this.decompileExpression(getIfCondition(expr));\r\n this.push(\" ? \");\r\n this.decompileExpression(getIfTrue(expr));\r\n this.push(\" : \");\r\n this.decompileExpression(getIfFalse(expr));\r\n }\r\n return;\r\n }\r\n case ExpressionId.Loop: {\r\n if ((string = getLoopName(expr)) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"do \");\r\n this.decompileExpression(getLoopBody(expr));\r\n this.push(\"while (0);\\n\");\r\n }\r\n case ExpressionId.Break: {\r\n if (nested = getBreakCondition(expr)) {\r\n this.push(\"if (\");\r\n this.decompileExpression(nested);\r\n this.push(\") \");\r\n }\r\n if ((string = getBreakName(expr)) != null) {\r\n this.push(\"break \");\r\n this.push(string);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"break;\\n\");\r\n }\r\n return;\r\n }\r\n case ExpressionId.Switch:\r\n case ExpressionId.Call:\r\n case ExpressionId.CallIndirect: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.GetLocal: {\r\n this.push(\"$\");\r\n this.push(getGetLocalIndex(expr).toString(10));\r\n return;\r\n }\r\n case ExpressionId.SetLocal: {\r\n this.push(\"$\");\r\n this.push(getSetLocalIndex(expr).toString(10));\r\n this.push(\" = \");\r\n this.decompileExpression(getSetLocalValue(expr));\r\n return;\r\n }\r\n case ExpressionId.GetGlobal:\r\n case ExpressionId.SetGlobal: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.Load: {\r\n this.push(\"load<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(getLoadOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getLoadPtr(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Store: {\r\n this.push(\"store<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(getStoreOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getStorePtr(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getStoreValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Const: {\r\n switch (type) {\r\n case NativeType.I32: {\r\n this.push(getConstValueI32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.I64: {\r\n this.push(\r\n i64_to_string(\r\n i64_new(\r\n getConstValueI64Low(expr),\r\n getConstValueI64High(expr)\r\n )\r\n )\r\n );\r\n return;\r\n }\r\n case NativeType.F32: {\r\n this.push(getConstValueF32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.F64: {\r\n this.push(getConstValueF64(expr).toString(10));\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Unary: {\r\n switch (getUnaryOp(expr)) {\r\n case UnaryOp.ClzI32: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI32: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI32: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NegF32:\r\n case UnaryOp.NegF64: {\r\n this.push(\"-\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.AbsF32: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF32: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF32: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF32: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF32: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF32: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.EqzI32:\r\n case UnaryOp.EqzI64: {\r\n this.push(\"!\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ClzI64: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI64: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI64: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.AbsF64: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF64: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF64: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF64: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF64: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF64: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ExtendI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ExtendU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.WrapI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.PromoteF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.DemoteF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Binary: { // TODO: precedence\r\n switch (getBinaryOp(expr)) {\r\n case BinaryOp.AddI32:\r\n case BinaryOp.AddI64:\r\n case BinaryOp.AddF32:\r\n case BinaryOp.AddF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" + \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.SubI32:\r\n case BinaryOp.SubI64:\r\n case BinaryOp.SubF32:\r\n case BinaryOp.SubF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" - \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.MulI32:\r\n case BinaryOp.MulI64:\r\n case BinaryOp.MulF32:\r\n case BinaryOp.MulF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" * \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivI32:\r\n case BinaryOp.DivI64:\r\n case BinaryOp.DivF32:\r\n case BinaryOp.DivF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.AndI32:\r\n case BinaryOp.AndI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" & \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.OrI32:\r\n case BinaryOp.OrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" | \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.XorI32:\r\n case BinaryOp.XorI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" ^ \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShlI32:\r\n case BinaryOp.ShlI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" << \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrU32:\r\n case BinaryOp.ShrU64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >>> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrI32:\r\n case BinaryOp.ShrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI32: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI32: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.EqI32:\r\n case BinaryOp.EqI64:\r\n case BinaryOp.EqF32:\r\n case BinaryOp.EqF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" == \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.NeI32:\r\n case BinaryOp.NeI64:\r\n case BinaryOp.NeF32:\r\n case BinaryOp.NeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" != \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtI32:\r\n case BinaryOp.LtI64:\r\n case BinaryOp.LtF32:\r\n case BinaryOp.LtF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeI32:\r\n case BinaryOp.LeI64:\r\n case BinaryOp.LeF32:\r\n case BinaryOp.LeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtI32:\r\n case BinaryOp.GtI64:\r\n case BinaryOp.GtF32:\r\n case BinaryOp.GtF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeI32:\r\n case BinaryOp.GeI64:\r\n case BinaryOp.GeF32:\r\n case BinaryOp.GeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI64: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI64: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.LtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.CopysignF32: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF32: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF32: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.CopysignF64: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF64: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF64: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n return;\r\n }\r\n case ExpressionId.Select: {\r\n this.push(\"select<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.decompileExpression(getSelectThen(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectElse(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectCondition(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Drop: {\r\n this.decompileExpression(getDropValue(expr));\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Return: {\r\n if (nested = getReturnValue(expr)) {\r\n this.push(\"return \");\r\n this.decompileExpression(nested);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"return;\\n\");\r\n }\r\n return;\r\n }\r\n case ExpressionId.Host: {\r\n switch (getHostOp(expr)) {\r\n case HostOp.CurrentMemory: {\r\n this.push(\"memory.size()\");\r\n return;\r\n }\r\n case HostOp.GrowMemory: {\r\n this.push(\"memory.grow(\");\r\n this.decompileExpression(getHostOperand(expr, 0));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Nop: {\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Unreachable: {\r\n this.push(\"unreachable()\");\r\n return;\r\n }\r\n case ExpressionId.AtomicCmpxchg:\r\n case ExpressionId.AtomicRMW:\r\n case ExpressionId.AtomicWait:\r\n case ExpressionId.AtomicWake:\r\n }\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n private push(text: string): void {\r\n // mostly here so we can add debugging if necessary\r\n this.text.push(text);\r\n }\r\n\r\n finish(): string {\r\n var ret = this.text.join(\"\");\r\n this.text = [];\r\n return ret;\r\n }\r\n}\r\n\r\nfunction nativeTypeToType(type: NativeType): string {\r\n switch (type) {\r\n case NativeType.None: return \"void\";\r\n case NativeType.I32: return \"i32\";\r\n case NativeType.I64: return \"i64\";\r\n case NativeType.F32: return \"f32\";\r\n case NativeType.F64: return \"f64\";\r\n case NativeType.Unreachable: throw new Error(\"unreachable type\");\r\n case NativeType.Auto: throw new Error(\"auto type\");\r\n default: throw new Error(\"unexpected type\");\r\n }\r\n}\r\n","/**\r\n * Definition builders for WebIDL and TypeScript.\r\n * @module definitions\r\n *//***/\r\n\r\nimport {\r\n CommonFlags\r\n} from \"./common\";\r\n\r\nimport {\r\n Program,\r\n Element,\r\n ElementKind,\r\n Global,\r\n Enum,\r\n EnumValue,\r\n Field,\r\n Function,\r\n FunctionPrototype,\r\n Class,\r\n ClassPrototype,\r\n Namespace,\r\n ConstantValueKind,\r\n Interface,\r\n Property\r\n} from \"./program\";\r\n\r\nimport {\r\n Type,\r\n TypeKind\r\n} from \"./types\";\r\n\r\nimport {\r\n indent\r\n} from \"./util\";\r\n\r\n/** Walker base class. */\r\nabstract class ExportsWalker {\r\n\r\n /** Program reference. */\r\n program: Program;\r\n /** Whether to include private members */\r\n includePrivate: bool;\r\n /** Elements still to do. */\r\n todo: Element[] = [];\r\n /** Already seen elements. */\r\n seen: Set = new Set();\r\n\r\n /** Constructs a new Element walker. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n this.program = program;\r\n this.includePrivate;\r\n }\r\n\r\n /** Walks all exports and calls the respective handlers. */\r\n walk(): void {\r\n for (let moduleExport of this.program.moduleLevelExports.values()) {\r\n // FIXME: doesn't honor the actual externally visible name\r\n this.visitElement(moduleExport.element);\r\n }\r\n var todo = this.todo;\r\n for (let i = 0; i < todo.length; ) this.visitElement(todo[i]);\r\n }\r\n\r\n /** Visits an element.*/\r\n visitElement(element: Element): void {\r\n if (element.is(CommonFlags.PRIVATE) && !this.includePrivate) return;\r\n if (this.seen.has(element)) return;\r\n this.seen.add(element);\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitGlobal(element);\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n this.visitFunctionInstances(element);\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n this.visitClassInstances(element);\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n if ((element).is(CommonFlags.COMPILED)) this.visitField(element);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let prop = element;\r\n let getter = prop.getterPrototype;\r\n if (getter) this.visitFunctionInstances(getter);\r\n let setter = prop.setterPrototype;\r\n if (setter) this.visitFunctionInstances(setter);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n if (hasCompiledMember(element)) this.visitNamespace(element);\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n\r\n private visitFunctionInstances(element: FunctionPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitFunction(instance);\r\n }\r\n }\r\n\r\n private visitClassInstances(element: ClassPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitClass(instance);\r\n }\r\n }\r\n\r\n abstract visitGlobal(element: Global): void;\r\n abstract visitEnum(element: Enum): void;\r\n abstract visitFunction(element: Function): void;\r\n abstract visitClass(element: Class): void;\r\n abstract visitInterface(element: Interface): void;\r\n abstract visitField(element: Field): void;\r\n abstract visitNamespace(element: Element): void;\r\n}\r\n\r\n/** A WebIDL definitions builder. */\r\nexport class IDLBuilder extends ExportsWalker {\r\n\r\n /** Builds WebIDL definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new IDLBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n if (isConst) {\r\n switch (element.constantValueKind) {\r\n case ConstantValueKind.INTEGER: {\r\n sb.push(\" = \");\r\n sb.push(i64_to_string(element.constantIntegerValue));\r\n break;\r\n }\r\n case ConstantValueKind.FLOAT: {\r\n sb.push(\" = \");\r\n sb.push(element.constantFloatValue.toString());\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n let isConst = (member).is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"readonly \");\r\n sb.push(\"unsigned long \");\r\n sb.push(name);\r\n if (isConst) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n }\r\n for (let member of members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) this.visitElement(member);\r\n }\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(this.typeToString(parameters[i]));\r\n sb.push(\" \");\r\n sb.push(signature.getParameterName(i));\r\n }\r\n sb.push(\");\\n\");\r\n var members = element.members;\r\n if (members && members.size) {\r\n indent(sb, this.indentLevel);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n // TODO\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n // TODO\r\n }\r\n\r\n visitNamespace(element: Namespace): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.kind) {\r\n case TypeKind.I8: return \"byte\";\r\n case TypeKind.I16: return \"short\";\r\n case TypeKind.I32: return \"long\";\r\n case TypeKind.I64: return \"long long\";\r\n case TypeKind.ISIZE: return this.program.options.isWasm64 ? \"long long\" : \"long\";\r\n case TypeKind.U8: return \"octet\";\r\n case TypeKind.U16: return \"unsigned short\";\r\n case TypeKind.U32: return \"unsigned long\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"unsigned long long\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"unsigned long long\" : \"unsigned long\";\r\n // ^ TODO: class types\r\n case TypeKind.BOOL: return \"boolean\";\r\n case TypeKind.F32: return \"unrestricted float\";\r\n case TypeKind.F64: return \"unrestricted double\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"interface ASModule {\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n return sb.join(\"\");\r\n }\r\n}\r\n\r\n/** A TypeScript definitions builder. */\r\nexport class TSDBuilder extends ExportsWalker {\r\n\r\n /** Builds TypeScript definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new TSDBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.STATIC)) {\r\n if (isConst) sb.push(\"static readonly \");\r\n else sb.push(\"static \");\r\n } else {\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"var \");\r\n }\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"enum \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n let numMembers = members.size;\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n indent(sb, this.indentLevel);\r\n sb.push(name);\r\n if (member.is(CommonFlags.INLINED)) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\",\\n\");\r\n --numMembers;\r\n }\r\n }\r\n if (numMembers) this.visitNamespace(element);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n if (element.isAny(CommonFlags.PRIVATE | CommonFlags.SET)) return;\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.GET)) {\r\n sb.push(element.prototype.declaration.name.text); // 'get:funcName' internally\r\n sb.push(\": \");\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\";\\n\");\r\n return;\r\n } else {\r\n if (!element.isAny(CommonFlags.STATIC | CommonFlags.INSTANCE)) sb.push(\"function \");\r\n sb.push(element.simpleName);\r\n }\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(signature.getParameterName(i));\r\n sb.push(\": \");\r\n sb.push(this.typeToString(parameters[i]));\r\n }\r\n if (element.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.SET)) {\r\n sb.push(\")\");\r\n } else {\r\n sb.push(\"): \");\r\n sb.push(this.typeToString(signature.returnType));\r\n }\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n var isInterface = element.kind == ElementKind.INTERFACE;\r\n indent(sb, this.indentLevel++);\r\n if (isInterface) {\r\n sb.push(\"interface \");\r\n } else {\r\n if (element.is(CommonFlags.ABSTRACT)) sb.push(\"abstract \");\r\n sb.push(\"class \");\r\n }\r\n sb.push(element.simpleName);\r\n var base = element.base;\r\n if (base && base.is(CommonFlags.COMPILED | CommonFlags.MODULE_EXPORT)) {\r\n sb.push(\" extends \");\r\n sb.push(base.simpleName); // TODO: fqn\r\n }\r\n sb.push(\" {\\n\");\r\n var members = element.prototype.members; // static\r\n if (members) {\r\n for (let member of members.values()) {\r\n this.visitElement(member);\r\n }\r\n }\r\n var ctor = element.constructorInstance;\r\n if (ctor) this.visitFunction(ctor);\r\n members = element.members; // instance\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n if (element.is(CommonFlags.PRIVATE)) return;\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.READONLY)) sb.push(\"readonly \");\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitNamespace(element: Element): void {\r\n var members = element.members;\r\n if (members && members.size) {\r\n let sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"namespace \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.kind) {\r\n case TypeKind.I8: return \"i8\";\r\n case TypeKind.I16: return \"i16\";\r\n case TypeKind.I32: return \"i32\";\r\n case TypeKind.I64: return \"I64\";\r\n case TypeKind.ISIZE: return this.program.options.isWasm64 ? \"I64\" : \"i32\";\r\n case TypeKind.U8: return \"u8\";\r\n case TypeKind.U16: return \"u16\";\r\n case TypeKind.U32: return \"u32\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"U64\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"U64\" : \"u32\";\r\n // ^ TODO: class types\r\n case TypeKind.BOOL: return \"bool\";\r\n case TypeKind.F32: return \"f32\";\r\n case TypeKind.F64: return \"f64\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"declare module ASModule {\\n\");\r\n sb.push(\" type i8 = number;\\n\");\r\n sb.push(\" type i16 = number;\\n\");\r\n sb.push(\" type i32 = number;\\n\");\r\n sb.push(\" type u8 = number;\\n\");\r\n sb.push(\" type u16 = number;\\n\");\r\n sb.push(\" type u32 = number;\\n\");\r\n sb.push(\" type f32 = number;\\n\");\r\n sb.push(\" type f64 = number;\\n\");\r\n sb.push(\" type bool = any;\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n sb.push(\"export default ASModule;\\n\");\r\n return this.sb.join(\"\");\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n/** Tests if a namespace-like element has at least one compiled member. */\r\nfunction hasCompiledMember(element: Element): bool {\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) {\r\n switch (member.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n default: {\r\n if (member.is(CommonFlags.COMPILED) || hasCompiledMember(member)) return true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n","/**\r\n * A TypeScript parser for the AssemblyScript subset.\r\n * @module parser\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n LIBRARY_PREFIX,\r\n PATH_DELIMITER\r\n} from \"./common\";\r\n\r\nimport {\r\n Program\r\n} from \"./program\";\r\n\r\nimport {\r\n Tokenizer,\r\n Token,\r\n Range,\r\n CommentHandler,\r\n IdentifierHandling\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n normalizePath\r\n} from \"./util\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Source,\r\n SourceKind,\r\n CommonTypeNode,\r\n TypeNode,\r\n SignatureNode,\r\n\r\n Expression,\r\n AssertionKind,\r\n CallExpression,\r\n ClassExpression,\r\n FunctionExpression,\r\n IdentifierExpression,\r\n StringLiteralExpression,\r\n\r\n Statement,\r\n BlockStatement,\r\n BreakStatement,\r\n ClassDeclaration,\r\n ContinueStatement,\r\n DeclarationStatement,\r\n DecoratorNode,\r\n DoStatement,\r\n EnumDeclaration,\r\n EnumValueDeclaration,\r\n ExportImportStatement,\r\n ExportMember,\r\n ExportStatement,\r\n ExpressionStatement,\r\n ForStatement,\r\n FunctionDeclaration,\r\n IfStatement,\r\n ImportDeclaration,\r\n ImportStatement,\r\n NamespaceDeclaration,\r\n ParameterNode,\r\n ParameterKind,\r\n ReturnStatement,\r\n SwitchCase,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n TypeDeclaration,\r\n TypeParameterNode,\r\n VariableStatement,\r\n VariableDeclaration,\r\n VoidStatement,\r\n WhileStatement,\r\n\r\n mangleInternalPath,\r\n nodeIsCallable,\r\n nodeIsGenericCallable\r\n} from \"./ast\";\r\n\r\n/** Parser interface. */\r\nexport class Parser extends DiagnosticEmitter {\r\n\r\n /** Program being created. */\r\n program: Program;\r\n /** Source file names to be requested next. */\r\n backlog: string[] = new Array();\r\n /** Source file names already seen, that is processed or backlogged. */\r\n seenlog: Set = new Set();\r\n /** Source file names already completely processed. */\r\n donelog: Set = new Set();\r\n /** Optional handler to intercept comments while tokenizing. */\r\n onComment: CommentHandler | null = null;\r\n\r\n /** Constructs a new parser. */\r\n constructor() {\r\n super();\r\n this.program = new Program(this.diagnostics);\r\n }\r\n\r\n /** Parses a file and adds its definitions to the program. */\r\n parseFile(\r\n text: string,\r\n path: string,\r\n isEntry: bool\r\n ): void {\r\n var normalizedPath = normalizePath(path);\r\n var internalPath = mangleInternalPath(normalizedPath);\r\n\r\n // check if already processed\r\n if (this.donelog.has(internalPath)) return;\r\n this.donelog.add(internalPath); // do not parse again\r\n this.seenlog.add(internalPath); // do not request again\r\n\r\n // create the source element\r\n var source = new Source(\r\n normalizedPath,\r\n text,\r\n isEntry\r\n ? SourceKind.ENTRY\r\n : path.startsWith(LIBRARY_PREFIX) && path.indexOf(PATH_DELIMITER, LIBRARY_PREFIX.length) < 0\r\n ? SourceKind.LIBRARY\r\n : SourceKind.DEFAULT\r\n );\r\n var program = this.program;\r\n program.sources.push(source);\r\n\r\n // tokenize and parse\r\n var tn = new Tokenizer(source, program.diagnostics);\r\n tn.onComment = this.onComment;\r\n source.tokenizer = tn;\r\n var statements = source.statements;\r\n while (!tn.skip(Token.ENDOFFILE)) {\r\n let statement = this.parseTopLevelStatement(tn);\r\n if (statement) {\r\n statement.parent = source;\r\n statements.push(statement);\r\n }\r\n }\r\n tn.finish();\r\n }\r\n\r\n /** Parses a top-level statement. */\r\n parseTopLevelStatement(\r\n tn: Tokenizer,\r\n namespace: Node | null = null\r\n ): Statement | null {\r\n var flags = CommonFlags.NONE;\r\n var startPos: i32 = -1;\r\n\r\n // check decorators\r\n var decorators: DecoratorNode[] | null = null;\r\n while (tn.skip(Token.AT)) {\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n let decorator = this.parseDecorator(tn);\r\n if (!decorator) {\r\n this.skipStatement(tn);\r\n continue;\r\n }\r\n if (!decorators) decorators = [];\r\n decorators.push(decorator);\r\n }\r\n\r\n // check modifiers\r\n var exportStart: i32 = 0;\r\n var exportEnd: i32 = 0;\r\n if (tn.skip(Token.EXPORT)) {\r\n if (tn.skip(Token.DEFAULT)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n flags |= CommonFlags.EXPORT;\r\n exportStart = tn.tokenPos;\r\n exportEnd = tn.pos;\r\n }\r\n\r\n var declareStart: i32 = 0;\r\n var declareEnd: i32 = 0;\r\n var contextIsAmbient = namespace != null && namespace.is(CommonFlags.AMBIENT);\r\n if (tn.skip(Token.DECLARE)) {\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n if (contextIsAmbient) {\r\n this.error(\r\n DiagnosticCode.A_declare_modifier_cannot_be_used_in_an_already_ambient_context,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n flags |= CommonFlags.DECLARE | CommonFlags.AMBIENT;\r\n } else if (contextIsAmbient) {\r\n flags |= CommonFlags.AMBIENT;\r\n }\r\n\r\n // parse the statement\r\n var statement: Statement | null = null;\r\n\r\n // handle declarations\r\n var first = tn.peek();\r\n if (startPos < 0) startPos = tn.nextTokenPos;\r\n switch (first) {\r\n case Token.CONST: {\r\n tn.next();\r\n flags |= CommonFlags.CONST;\r\n if (tn.skip(Token.ENUM)) {\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n break;\r\n } else {\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n }\r\n break;\r\n }\r\n case Token.LET: flags |= CommonFlags.LET;\r\n case Token.VAR: {\r\n tn.next();\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ENUM: {\r\n tn.next();\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.FUNCTION: {\r\n tn.next();\r\n statement = this.parseFunction(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ABSTRACT: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (!tn.skip(Token.CLASS)) {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n break;\r\n } else {\r\n tn.discard(state);\r\n }\r\n flags |= CommonFlags.ABSTRACT;\r\n // fall through\r\n }\r\n case Token.CLASS:\r\n case Token.INTERFACE: {\r\n tn.next();\r\n statement = this.parseClassOrInterface(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.NAMESPACE: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseNamespace(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n case Token.IMPORT: {\r\n tn.next();\r\n flags |= CommonFlags.IMPORT;\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExportImport(tn, startPos);\r\n } else {\r\n statement = this.parseImport(tn);\r\n }\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseTypeDeclaration(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n default: {\r\n\r\n // handle plain exports\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExport(tn, flags, startPos);\r\n\r\n // handle non-declaration statements\r\n } else {\r\n if (exportEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(exportStart, exportEnd), \"export\"\r\n ); // recoverable\r\n }\r\n if (declareEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(declareStart, declareEnd), \"declare\"\r\n ); // recoverable\r\n }\r\n if (!namespace) {\r\n statement = this.parseStatement(tn, true);\r\n } // TODO: else?\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // check for decorators that weren't consumed\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n this.error(\r\n DiagnosticCode.Decorators_are_not_valid_here,\r\n decorators[i].range\r\n );\r\n }\r\n }\r\n return statement;\r\n }\r\n\r\n /** Obtains the next file to parse. */\r\n nextFile(): string | null {\r\n var backlog = this.backlog;\r\n return backlog.length ? backlog.shift() : null;\r\n }\r\n\r\n /** Finishes parsing and returns the program. */\r\n finish(): Program {\r\n if (this.backlog.length) throw new Error(\"backlog is not empty\");\r\n this.backlog = [];\r\n this.seenlog.clear();\r\n this.donelog.clear();\r\n return this.program;\r\n }\r\n\r\n /** Parses a type. */\r\n parseType(\r\n tn: Tokenizer,\r\n acceptParenthesized: bool = true,\r\n suppressErrors: bool = false\r\n ): CommonTypeNode | null {\r\n\r\n // NOTE: this parses our limited subset\r\n var token = tn.next();\r\n var startPos = tn.tokenPos;\r\n\r\n var type: CommonTypeNode;\r\n\r\n // '(' ...\r\n if (token == Token.OPENPAREN) {\r\n\r\n // '(' FunctionSignature ')' '|' 'null'?\r\n let isNullableSignature = tn.skip(Token.OPENPAREN);\r\n // FunctionSignature?\r\n let signature = this.tryParseSignature(tn);\r\n if (signature) {\r\n if (isNullableSignature) {\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.BAR)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"|\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.NULL)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"null\"\r\n );\r\n }\r\n signature.isNullable = true;\r\n }\r\n return signature;\r\n } else if (isNullableSignature || this.tryParseSignatureIsSignature) {\r\n this.error(\r\n DiagnosticCode.Unexpected_token,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n // Type (',' Type)* ')'\r\n if (acceptParenthesized) {\r\n let innerType = this.parseType(tn, false, suppressErrors);\r\n if (!innerType) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"}\"\r\n );\r\n }\r\n return null;\r\n }\r\n type = innerType;\r\n type.range.start = startPos;\r\n type.range.end = tn.pos;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Unexpected_token,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n // 'void'\r\n } else if (token == Token.VOID) {\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"void\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // 'this'\r\n } else if (token == Token.THIS) {\r\n type = Node.createType(\r\n Node.createThisExpression(tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // 'true'\r\n } else if (token == Token.TRUE || token == Token.FALSE) {\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"bool\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // StringLiteral\r\n } else if (token == Token.STRINGLITERAL) {\r\n tn.readString();\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"string\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // Identifier\r\n } else if (token == Token.IDENTIFIER) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let parameters = new Array();\r\n let nullable = false;\r\n\r\n // Name\r\n if (tn.skip(Token.LESSTHAN)) {\r\n do {\r\n let parameter = this.parseType(tn, true, suppressErrors);\r\n if (!parameter) return null;\r\n parameters.push(parameter);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \">\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n // ... | null\r\n if (tn.skip(Token.BAR)) {\r\n if (tn.skip(Token.NULL)) {\r\n nullable = true;\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"null\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n type = Node.createType(identifier, parameters, nullable, tn.range(startPos, tn.pos));\r\n\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n // ... [][]\r\n while (tn.skip(Token.OPENBRACKET)) {\r\n let bracketStart = tn.tokenPos;\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n }\r\n return null;\r\n }\r\n let bracketRange = tn.range(bracketStart, tn.pos);\r\n\r\n // ...[] | null\r\n let nullable = false;\r\n if (tn.skip(Token.BAR)) {\r\n if (tn.skip(Token.NULL)) {\r\n nullable = true;\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"null\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"Array\", bracketRange),\r\n [ type ],\r\n nullable,\r\n tn.range(startPos, tn.pos)\r\n );\r\n if (nullable) break;\r\n }\r\n\r\n return type;\r\n }\r\n\r\n // Indicates whether tryParseSignature determined that it is handling a Signature\r\n private tryParseSignatureIsSignature: bool = false;\r\n\r\n /** Parses a function signature, as used in type declarations. */\r\n tryParseSignature(\r\n tn: Tokenizer\r\n ): SignatureNode | null {\r\n\r\n // at '(': ('...'? Identifier '?'? ':' Type (',' '...'? Identifier '?'? ':' Type)* )? ')' '=>' Type\r\n\r\n var state = tn.mark();\r\n var startPos = tn.tokenPos;\r\n var parameters: ParameterNode[] | null = null;\r\n var thisType: TypeNode | null = null;\r\n var isSignature: bool = false;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n parameters = [];\r\n\r\n } else {\r\n isSignature = false; // not yet known\r\n do {\r\n let kind = ParameterKind.DEFAULT;\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n kind = ParameterKind.REST;\r\n }\r\n if (tn.skip(Token.THIS)) {\r\n if (tn.skip(Token.COLON)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n let t = this.parseType(tn, false);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n this.tryParseSignatureIsSignature = true;\r\n return null;\r\n }\r\n thisType = t;\r\n } else {\r\n tn.reset(state);\r\n this.tryParseSignatureIsSignature = false;\r\n return null;\r\n }\r\n } else if (tn.skipIdentifier()) {\r\n let name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range(tn.tokenPos, tn.pos));\r\n if (tn.skip(Token.QUESTION)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n if (kind == ParameterKind.REST) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n tn.range()\r\n ); // recoverable\r\n } else {\r\n kind = ParameterKind.OPTIONAL;\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n let type = this.parseType(tn); // not suppressing errors because known\r\n if (!type) {\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n let param = new ParameterNode();\r\n param.parameterKind = kind;\r\n param.name = name;\r\n param.type = type;\r\n if (!parameters) parameters = [ param ];\r\n else parameters.push(param);\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n }\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n }\r\n\r\n var returnType: CommonTypeNode | null;\r\n if (tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n returnType = this.parseType(tn);\r\n if (!returnType) {\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=>\"\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n this.tryParseSignatureIsSignature = true;\r\n return Node.createSignature(\r\n parameters || [],\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n\r\n // statements\r\n\r\n parseDecorator(\r\n tn: Tokenizer\r\n ): DecoratorNode | null {\r\n\r\n // at '@': Identifier ('.' Identifier)* '(' Arguments\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skipIdentifier()) {\r\n let name = tn.readIdentifier();\r\n let expression: Expression = Node.createIdentifierExpression(name, tn.range(startPos, tn.pos));\r\n while (tn.skip(Token.DOT)) {\r\n if (tn.skipIdentifier()) {\r\n name = tn.readIdentifier();\r\n expression = Node.createPropertyAccessExpression(\r\n expression,\r\n Node.createIdentifierExpression(name, tn.range()),\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n let args: Expression[] | null;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n args = this.parseArguments(tn);\r\n if (args) {\r\n return Node.createDecorator(expression, args, tn.range(startPos, tn.pos));\r\n }\r\n } else {\r\n return Node.createDecorator(expression, null, tn.range(startPos, tn.pos));\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseVariable(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): VariableStatement | null {\r\n\r\n // at ('const' | 'let' | 'var'): VariableDeclaration (',' VariableDeclaration)* ';'?\r\n\r\n var members = new Array();\r\n do {\r\n let member = this.parseVariableDeclaration(tn, flags, decorators);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (tn.skip(Token.COMMA));\r\n\r\n var ret = Node.createVariableStatement(members, decorators, flags, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseVariableDeclaration(\r\n tn: Tokenizer,\r\n parentFlags: CommonFlags,\r\n parentDecorators: DecoratorNode[] | null\r\n ): VariableDeclaration | null {\r\n\r\n // before: Identifier (':' Type)? ('=' Expression)?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var flags = parentFlags;\r\n if (tn.skip(Token.EXCLAMATION)) {\r\n flags |= CommonFlags.DEFINITE_ASSIGNMENT;\r\n }\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 var range = Range.join(identifier.range, tn.range());\r\n if ((flags & CommonFlags.DEFINITE_ASSIGNMENT) && initializer) {\r\n this.error(\r\n DiagnosticCode.A_definite_assignment_assertion_is_not_permitted_in_this_context,\r\n range);\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\r\n );\r\n }\r\n\r\n parseEnum(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): EnumDeclaration | null {\r\n\r\n // at 'enum': Identifier '{' (EnumValueDeclaration (',' EnumValueDeclaration )*)? '}' ';'?\r\n\r\n if (tn.next() != Token.IDENTIFIER) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.next() != Token.OPENBRACE) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n var members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseEnumValue(tn, CommonFlags.NONE);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n var ret = Node.createEnumDeclaration(\r\n identifier,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseEnumValue(\r\n tn: Tokenizer,\r\n parentFlags: CommonFlags\r\n ): EnumValueDeclaration | null {\r\n\r\n // before: Identifier ('=' Expression)?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var value: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n value = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!value) return null;\r\n }\r\n return Node.createEnumValueDeclaration(\r\n identifier,\r\n value,\r\n parentFlags,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n }\r\n\r\n parseReturn(\r\n tn: Tokenizer\r\n ): ReturnStatement | null {\r\n\r\n // at 'return': Expression | (';' | '}' | ...'\\n')\r\n\r\n var expr: Expression | null = null;\r\n if (\r\n tn.peek(true) != Token.SEMICOLON &&\r\n tn.nextToken != Token.CLOSEBRACE &&\r\n !tn.nextTokenOnNewLine\r\n ) {\r\n if (!(expr = this.parseExpression(tn))) return null;\r\n }\r\n\r\n var ret = Node.createReturnStatement(expr, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseTypeParameters(\r\n tn: Tokenizer\r\n ): TypeParameterNode[] | null {\r\n\r\n // at '<': TypeParameter (',' TypeParameter)* '>'\r\n\r\n var typeParameters = new Array();\r\n while (!tn.skip(Token.GREATERTHAN)) {\r\n let typeParameter = this.parseTypeParameter(tn);\r\n if (!typeParameter) return null;\r\n typeParameters.push(typeParameter);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.GREATERTHAN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n if (typeParameters.length === 0) {\r\n this.error(\r\n DiagnosticCode.Type_parameter_list_cannot_be_empty,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n return typeParameters;\r\n }\r\n\r\n parseTypeParameter(\r\n tn: Tokenizer\r\n ): TypeParameterNode | null {\r\n\r\n // before: Identifier ('extends' Type)?\r\n\r\n if (tn.next() == Token.IDENTIFIER) {\r\n let identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n let extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\r\n }\r\n return Node.createTypeParameter(\r\n identifier,\r\n extendsType,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n private parseParametersThis: TypeNode | null = null;\r\n\r\n parseParameters(\r\n tn: Tokenizer,\r\n isConstructor: bool = false\r\n ): ParameterNode[] | null {\r\n\r\n // at '(': (Parameter (',' Parameter)*)? ')'\r\n\r\n var parameters = new Array();\r\n var seenRest: ParameterNode | null = null;\r\n var seenOptional = false;\r\n var reportedRest = false;\r\n var thisType: CommonTypeNode | null = null;\r\n\r\n // check if there is a leading `this` parameter\r\n this.parseParametersThis = null;\r\n if (tn.skip(Token.THIS)) {\r\n if (tn.skip(Token.COLON)) {\r\n thisType = this.parseType(tn); // reports\r\n if (!thisType) return null;\r\n if (thisType.kind == NodeKind.TYPE) {\r\n this.parseParametersThis = thisType;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n thisType.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n return parameters;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n while (!tn.skip(Token.CLOSEPAREN)) {\r\n let param = this.parseParameter(tn, isConstructor); // reports\r\n if (!param) return null;\r\n if (seenRest && !reportedRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,\r\n seenRest.name.range\r\n );\r\n reportedRest = true;\r\n }\r\n switch (param.parameterKind) {\r\n default: {\r\n if (seenOptional) {\r\n this.error(\r\n DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,\r\n param.name.range\r\n );\r\n }\r\n break;\r\n }\r\n case ParameterKind.OPTIONAL: {\r\n seenOptional = true;\r\n break;\r\n }\r\n case ParameterKind.REST: {\r\n seenRest = param;\r\n break;\r\n }\r\n }\r\n parameters.push(param);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return parameters;\r\n }\r\n\r\n parseParameter(\r\n tn: Tokenizer,\r\n isConstructor: bool = false\r\n ): ParameterNode | null {\r\n\r\n // before: ('public' | 'private' | 'protected' | '...')? Identifier '?'? (':' Type)? ('=' Expression)?\r\n\r\n var isRest = false;\r\n var isOptional = false;\r\n var startRange: Range | null = null;\r\n var accessFlags: CommonFlags = CommonFlags.NONE;\r\n if (isConstructor) {\r\n if (tn.skip(Token.PUBLIC)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PROTECTED;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PRIVATE;\r\n }\r\n if (tn.peek() == Token.READONLY) {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek() != Token.COLON) { // modifier\r\n tn.discard(state);\r\n if (!startRange) startRange = tn.range();\r\n accessFlags |= CommonFlags.READONLY;\r\n } else { // identifier\r\n tn.reset(state);\r\n }\r\n }\r\n }\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n if (accessFlags) {\r\n this.error(\r\n DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,\r\n tn.range()\r\n );\r\n } else {\r\n startRange = tn.range();\r\n }\r\n isRest = true;\r\n }\r\n if (tn.skipIdentifier()) {\r\n if (!isRest) startRange = tn.range();\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let type: CommonTypeNode | null = null;\r\n if (isOptional = tn.skip(Token.QUESTION)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n identifier.range\r\n );\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n } else {\r\n type = Node.createOmittedType(tn.range(tn.pos));\r\n }\r\n let initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,\r\n identifier.range\r\n );\r\n }\r\n if (isOptional) {\r\n this.error(\r\n DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,\r\n identifier.range\r\n );\r\n } else {\r\n isOptional = true;\r\n }\r\n initializer = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!initializer) return null;\r\n }\r\n let param = Node.createParameter(\r\n identifier,\r\n type,\r\n initializer,\r\n isRest\r\n ? ParameterKind.REST\r\n : isOptional\r\n ? ParameterKind.OPTIONAL\r\n : ParameterKind.DEFAULT,\r\n Range.join(startRange, tn.range())\r\n );\r\n param.flags |= accessFlags;\r\n return param;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseFunction(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): FunctionDeclaration | null {\r\n\r\n // at 'function':\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // '(' Parameters (':' Type)?\r\n // '{' Statement* '}'\r\n // ';'?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range(tn.pos)\r\n );\r\n return null;\r\n }\r\n\r\n var name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var signatureStart: i32 = -1;\r\n\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n signatureStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n if (signatureStart < 0) {\r\n signatureStart = tn.tokenPos;\r\n }\r\n\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n var thisType = this.parseParametersThis;\r\n\r\n var isSetter = (flags & CommonFlags.SET) != 0;\r\n if (isSetter) {\r\n if (parameters.length != 1) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,\r\n name.range\r\n ); // recoverable\r\n }\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,\r\n name.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n if (flags & CommonFlags.GET) {\r\n if (parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n name.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn, true, isSetter);\r\n if (!returnType) return null;\r\n }\r\n\r\n if (!returnType) {\r\n returnType = Node.createOmittedType(\r\n tn.range(tn.pos)\r\n );\r\n if (!isSetter) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n var body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body) return null;\r\n } else if (!(flags & CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n tn.range(tn.pos)\r\n );\r\n }\r\n\r\n var ret = Node.createFunctionDeclaration(\r\n name,\r\n typeParameters,\r\n signature,\r\n body,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseFunctionExpression(tn: Tokenizer): FunctionExpression | null {\r\n var startPos = tn.tokenPos;\r\n var name: IdentifierExpression;\r\n var isArrow = false;\r\n\r\n // either at 'function':\r\n // Identifier?\r\n // '(' Parameters (':' Type)?\r\n // Statement\r\n\r\n if (tn.token == Token.FUNCTION) {\r\n if (tn.skipIdentifier()) {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else { // empty name\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.pos));\r\n }\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n // or at '(' of arrow function:\r\n // Parameters (':' Type)?\r\n // Statement\r\n\r\n } else {\r\n isArrow = true;\r\n assert(tn.token == Token.OPENPAREN);\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.tokenPos));\r\n }\r\n\r\n // TODO: type parameters? doesn't seem worth it.\r\n\r\n var signatureStart = tn.pos;\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n return this.parseFunctionExpressionCommon(tn, name, parameters, isArrow, startPos, signatureStart);\r\n }\r\n\r\n private parseFunctionExpressionCommon(\r\n tn: Tokenizer,\r\n name: IdentifierExpression,\r\n parameters: ParameterNode[],\r\n isArrow: bool,\r\n startPos: i32 = -1,\r\n signatureStart: i32 = -1\r\n ): FunctionExpression | null {\r\n if (startPos < 0) startPos = name.range.start;\r\n if (signatureStart < 0) signatureStart = startPos;\r\n\r\n var returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n\r\n if (isArrow) {\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"=>\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n var signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n null, // TODO?\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n var body: Statement | null;\r\n if (isArrow) {\r\n body = this.parseStatement(tn, false);\r\n } else {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"{\"\r\n );\r\n return null;\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n }\r\n if (!body) return null;\r\n\r\n var declaration = Node.createFunctionDeclaration(\r\n name,\r\n null,\r\n signature,\r\n body,\r\n null,\r\n isArrow ? CommonFlags.ARROW : CommonFlags.NONE,\r\n tn.range(startPos, tn.pos)\r\n );\r\n return Node.createFunctionExpression(declaration);\r\n }\r\n\r\n parseClassOrInterface(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): ClassDeclaration | null {\r\n\r\n // at ('class' | 'interface'):\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // ('extends' Type)?\r\n // ('implements' Type (',' Type)*)?\r\n // '{' ClassMember* '}'\r\n\r\n var isInterface = tn.token == Token.INTERFACE;\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n var identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n\r\n var typeParameters: TypeParameterNode[] | null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n } else {\r\n typeParameters = [];\r\n }\r\n\r\n var extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\r\n }\r\n\r\n var implementsTypes: TypeNode[] | null = null;\r\n if (tn.skip(Token.IMPLEMENTS)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode.Interface_declaration_cannot_have_implements_clause,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n do {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n if (!isInterface) {\r\n if (!implementsTypes) implementsTypes = [];\r\n implementsTypes.push(type);\r\n }\r\n } while (tn.skip(Token.COMMA));\r\n }\r\n\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n\r\n var members = new Array();\r\n var declaration: ClassDeclaration;\r\n if (isInterface) {\r\n assert(!implementsTypes);\r\n declaration = Node.createInterfaceDeclaration(\r\n identifier,\r\n typeParameters,\r\n extendsType,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n declaration = Node.createClassDeclaration(\r\n identifier,\r\n typeParameters,\r\n extendsType,\r\n implementsTypes,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseClassMember(tn, declaration);\r\n if (!member) return null;\r\n member.parent = declaration;\r\n members.push(member);\r\n } while (!tn.skip(Token.CLOSEBRACE));\r\n }\r\n return declaration;\r\n }\r\n\r\n parseClassExpression(tn: Tokenizer): ClassExpression | null {\r\n\r\n // at 'class': Identifier? '{' ... '}'\r\n\r\n var startPos = tn.tokenPos;\r\n var name: IdentifierExpression;\r\n\r\n if (tn.skipIdentifier()) {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.pos));\r\n }\r\n\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"{\"\r\n );\r\n return null;\r\n }\r\n\r\n var members = new Array();\r\n var declaration = Node.createClassDeclaration(\r\n name,\r\n [],\r\n null,\r\n null,\r\n members,\r\n null,\r\n CommonFlags.NONE,\r\n tn.range(startPos, tn.pos)\r\n );\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseClassMember(tn, declaration);\r\n if (!member) return null;\r\n member.parent = declaration;\r\n members.push(member);\r\n } while (!tn.skip(Token.CLOSEBRACE));\r\n }\r\n return Node.createClassExpression(declaration);\r\n }\r\n\r\n parseClassMember(\r\n tn: Tokenizer,\r\n parent: ClassDeclaration\r\n ): DeclarationStatement | null {\r\n\r\n // before:\r\n // ('public' | 'private' | 'protected')?\r\n // ('static' | 'abstract')?\r\n // 'readonly'?\r\n // ('get' | 'set')?\r\n // Identifier ...\r\n\r\n var startPos = tn.pos;\r\n var isInterface = parent.kind == NodeKind.INTERFACEDECLARATION;\r\n\r\n var decorators = new Array();\r\n while (tn.skip(Token.AT)) {\r\n let decorator = this.parseDecorator(tn);\r\n if (!decorator) break;\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode.Decorators_are_not_valid_here,\r\n decorator.range\r\n );\r\n }\r\n decorators.push(decorator);\r\n }\r\n\r\n // inherit ambient status\r\n var flags = parent.flags & CommonFlags.AMBIENT;\r\n\r\n // implemented methods are virtual\r\n if (isInterface) flags |= CommonFlags.VIRTUAL;\r\n\r\n if (tn.skip(Token.PUBLIC)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"public\"\r\n );\r\n }\r\n flags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"private\"\r\n );\r\n }\r\n flags |= CommonFlags.PRIVATE;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"protected\"\r\n );\r\n }\r\n flags |= CommonFlags.PROTECTED;\r\n }\r\n\r\n var staticStart: i32 = 0;\r\n var staticEnd: i32 = 0;\r\n var abstractStart: i32 = 0;\r\n var abstractEnd: i32 = 0;\r\n if (tn.skip(Token.STATIC)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"static\"\r\n );\r\n }\r\n flags |= CommonFlags.STATIC;\r\n staticStart = tn.tokenPos;\r\n staticEnd = tn.pos;\r\n } else {\r\n flags |= CommonFlags.INSTANCE;\r\n if (tn.skip(Token.ABSTRACT)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"abstract\"\r\n );\r\n }\r\n flags |= CommonFlags.ABSTRACT;\r\n abstractStart = tn.tokenPos;\r\n abstractEnd = tn.pos;\r\n }\r\n if (parent.flags & CommonFlags.GENERIC) {\r\n flags |= CommonFlags.GENERIC_CONTEXT;\r\n }\r\n }\r\n\r\n var readonlyStart: i32 = 0;\r\n var readonlyEnd: i32 = 0;\r\n if (tn.skip(Token.READONLY)) {\r\n flags |= CommonFlags.READONLY;\r\n readonlyStart = tn.tokenPos;\r\n readonlyEnd = tn.pos;\r\n }\r\n\r\n // check if accessor: ('get' | 'set') ^\\n Identifier\r\n var state = tn.mark();\r\n var isConstructor = false;\r\n var isGetter = false;\r\n var getStart: i32 = 0;\r\n var getEnd: i32 = 0;\r\n var isSetter = false;\r\n var setStart: i32 = 0;\r\n var setEnd: i32 = 0;\r\n if (!isInterface) {\r\n if (tn.skip(Token.GET)) {\r\n if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n flags |= CommonFlags.GET;\r\n isGetter = true;\r\n setStart = tn.tokenPos;\r\n setEnd = tn.pos;\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n } else {\r\n tn.reset(state);\r\n }\r\n } else if (tn.skip(Token.SET)) {\r\n if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n flags |= CommonFlags.SET | CommonFlags.SET;\r\n isSetter = true;\r\n setStart = tn.tokenPos;\r\n setEnd = tn.pos;\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n } else {\r\n tn.reset(state);\r\n }\r\n } else if (tn.skip(Token.CONSTRUCTOR)) {\r\n flags |= CommonFlags.CONSTRUCTOR;\r\n isConstructor = true;\r\n if (flags & CommonFlags.STATIC) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(staticStart, staticEnd), \"static\"\r\n ); // recoverable\r\n }\r\n if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(abstractStart, abstractEnd), \"abstract\"\r\n ); // recoverable\r\n }\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n }\r\n }\r\n\r\n if (!isConstructor && !tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n var name = isConstructor\r\n ? Node.createConstructorExpression(tn.range())\r\n : Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n let typeParametersStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,\r\n tn.range(typeParametersStart, tn.pos)\r\n ); // recoverable\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.An_accessor_cannot_have_type_parameters,\r\n tn.range(typeParametersStart, tn.pos)\r\n ); // recoverable\r\n } else {\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n }\r\n\r\n // method: '(' Parameters (':' Type)? '{' Statement* '}' ';'?\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let signatureStart = tn.tokenPos;\r\n let parameters = this.parseParameters(tn, isConstructor);\r\n if (!parameters) return null;\r\n let thisType = this.parseParametersThis;\r\n if (isConstructor) {\r\n for (let i = 0, k = parameters.length; i < k; ++i) {\r\n let parameter = parameters[i];\r\n if (parameter.isAny(\r\n CommonFlags.PUBLIC |\r\n CommonFlags.PROTECTED |\r\n CommonFlags.PRIVATE |\r\n CommonFlags.READONLY\r\n )) {\r\n let implicitFieldDeclaration = Node.createFieldDeclaration(\r\n parameter.name,\r\n parameter.type,\r\n null, // initialized via parameter\r\n null,\r\n parameter.flags | CommonFlags.INSTANCE,\r\n parameter.range\r\n );\r\n implicitFieldDeclaration.parameterIndex = i;\r\n implicitFieldDeclaration.parent = parent;\r\n parameter.implicitFieldDeclaration = implicitFieldDeclaration;\r\n parent.members.push(implicitFieldDeclaration);\r\n }\r\n }\r\n } else if (isGetter) {\r\n if (parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n name.range\r\n );\r\n }\r\n } else if (isSetter) {\r\n if (parameters.length != 1) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,\r\n name.range\r\n );\r\n }\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,\r\n name.range\r\n );\r\n }\r\n }\r\n\r\n let returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n if (name.kind == NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration,\r\n tn.range()\r\n );\r\n } else if (isSetter) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_cannot_have_a_return_type_annotation,\r\n tn.range()\r\n );\r\n }\r\n returnType = this.parseType(tn, name.kind == NodeKind.CONSTRUCTOR || isSetter);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n if (!isSetter && name.kind != NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n let signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n let body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n } else if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract,\r\n tn.range(), name.text\r\n ); // recoverable\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body) return null;\r\n } else if (!(flags & CommonFlags.AMBIENT) && !isInterface) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n let retMethod = Node.createMethodDeclaration(\r\n name,\r\n typeParameters,\r\n signature,\r\n body,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retMethod;\r\n\r\n } else if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Constructor_implementation_is_missing,\r\n name.range\r\n );\r\n\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n name.range\r\n );\r\n\r\n // field: (':' Type)? ('=' Expression)? ';'?\r\n } else {\r\n if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(abstractStart, abstractEnd), \"abstract\"\r\n ); // recoverable\r\n }\r\n\r\n if (flags & CommonFlags.GET) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(getStart, getEnd), \"get\"\r\n ); // recoverable\r\n }\r\n\r\n if (flags & CommonFlags.SET) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(setStart, setEnd), \"set\"\r\n ); // recoverable\r\n }\r\n\r\n let type: CommonTypeNode | null = null;\r\n if (tn.skip(Token.QUESTION)) {\r\n this.error(\r\n DiagnosticCode.Optional_properties_are_not_supported,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n if (tn.skip(Token.EXCLAMATION)) {\r\n flags |= CommonFlags.DEFINITE_ASSIGNMENT;\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 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 range = tn.range(startPos, tn.pos);\r\n if ((flags & CommonFlags.DEFINITE_ASSIGNMENT) && ((flags & CommonFlags.STATIC) || isInterface || initializer)) {\r\n this.error(\r\n DiagnosticCode.A_definite_assignment_assertion_is_not_permitted_in_this_context,\r\n range\r\n );\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 range\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.skipIdentifier(IdentifierHandling.ALWAYS)) {\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.skipIdentifier(IdentifierHandling.ALWAYS)) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifier()) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createImportDeclaration(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportImport(\r\n tn: Tokenizer,\r\n startPos: i32\r\n ): ExportImportStatement | null {\r\n\r\n // at 'export' 'import': Identifier ('=' Identifier)? ';'?\r\n\r\n if (tn.skipIdentifier()) {\r\n let asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let ret = Node.createExportImportStatement(identifier, asIdentifier, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseStatement(\r\n tn: Tokenizer,\r\n topLevel: bool = false\r\n ): Statement | null {\r\n\r\n // at previous token\r\n\r\n var state = tn.mark();\r\n var token = tn.next();\r\n var statement: Statement | null = null;\r\n switch (token) {\r\n case Token.BREAK: {\r\n statement = this.parseBreak(tn);\r\n break;\r\n }\r\n case Token.CONST: {\r\n statement = this.parseVariable(tn, CommonFlags.CONST, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.CONTINUE: {\r\n statement = this.parseContinue(tn);\r\n break;\r\n }\r\n case Token.DO: {\r\n statement = this.parseDoStatement(tn);\r\n break;\r\n }\r\n case Token.FOR: {\r\n statement = this.parseForStatement(tn);\r\n break;\r\n }\r\n case Token.IF: {\r\n statement = this.parseIfStatement(tn);\r\n break;\r\n }\r\n case Token.LET: {\r\n statement = this.parseVariable(tn, CommonFlags.LET, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.VAR: {\r\n statement = this.parseVariable(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.OPENBRACE: {\r\n statement = this.parseBlockStatement(tn, topLevel);\r\n break;\r\n }\r\n case Token.RETURN: {\r\n if (topLevel) {\r\n this.error(\r\n DiagnosticCode.A_return_statement_can_only_be_used_within_a_function_body,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n statement = this.parseReturn(tn);\r\n break;\r\n }\r\n case Token.SEMICOLON: {\r\n return Node.createEmptyStatement(tn.range(tn.tokenPos));\r\n }\r\n case Token.SWITCH: {\r\n statement = this.parseSwitchStatement(tn);\r\n break;\r\n }\r\n case Token.THROW: {\r\n statement = this.parseThrowStatement(tn);\r\n break;\r\n }\r\n case Token.TRY: {\r\n statement = this.parseTryStatement(tn);\r\n break;\r\n }\r\n case Token.VOID: {\r\n statement = this.parseVoidStatement(tn);\r\n break;\r\n }\r\n case Token.WHILE: {\r\n statement = this.parseWhileStatement(tn);\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n statement = this.parseTypeDeclaration(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: {\r\n tn.reset(state);\r\n statement = this.parseExpressionStatement(tn);\r\n break;\r\n }\r\n }\r\n if (!statement) { // has been reported\r\n tn.reset(state);\r\n this.skipStatement(tn);\r\n } else {\r\n tn.discard(state);\r\n }\r\n return statement;\r\n }\r\n\r\n parseBlockStatement(\r\n tn: Tokenizer,\r\n topLevel: bool\r\n ): BlockStatement | null {\r\n\r\n // at '{': Statement* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let state = tn.mark();\r\n let statement = this.parseStatement(tn, topLevel);\r\n if (!statement) {\r\n if (tn.token == Token.ENDOFFILE) return null;\r\n tn.reset(state);\r\n this.skipStatement(tn);\r\n } else {\r\n tn.discard(state);\r\n statements.push(statement);\r\n }\r\n }\r\n var ret = Node.createBlockStatement(statements, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseBreak(\r\n tn: Tokenizer\r\n ): BreakStatement | null {\r\n\r\n // at 'break': Identifier? ';'?\r\n\r\n var identifier: IdentifierExpression | null = null;\r\n if (tn.peek(true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(IdentifierHandling.PREFER);\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = Node.createBreakStatement(identifier, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseContinue(\r\n tn: Tokenizer\r\n ): ContinueStatement | null {\r\n\r\n // at 'continue': Identifier? ';'?\r\n\r\n var identifier: IdentifierExpression | null = null;\r\n if (tn.peek(true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(IdentifierHandling.PREFER);\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = Node.createContinueStatement(identifier, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseDoStatement(\r\n tn: Tokenizer\r\n ): DoStatement | null {\r\n\r\n // at 'do': Statement 'while' '(' Expression ')' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n if (tn.skip(Token.WHILE)) {\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let ret = Node.createDoStatement(statement, condition, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"while\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExpressionStatement(\r\n tn: Tokenizer\r\n ): ExpressionStatement | null {\r\n\r\n // at previous token\r\n\r\n var expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n\r\n var ret = Node.createExpressionStatement(expr);\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseForStatement(\r\n tn: Tokenizer\r\n ): ForStatement | null {\r\n\r\n // at 'for': '(' Statement? Expression? ';' Expression? ')' Statement\r\n\r\n var startPos = tn.tokenPos;\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let initializer: Statement | null = null;\r\n\r\n if (tn.skip(Token.CONST)) {\r\n initializer = this.parseVariable(tn, CommonFlags.CONST, null, tn.tokenPos);\r\n } else if (tn.skip(Token.LET)) {\r\n initializer = this.parseVariable(tn, CommonFlags.LET, null, tn.tokenPos);\r\n } else if (tn.skip(Token.VAR)) {\r\n initializer = this.parseVariable(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n\r\n } else if (!tn.skip(Token.SEMICOLON)) {\r\n initializer = this.parseExpressionStatement(tn);\r\n if (!initializer) return null;\r\n }\r\n\r\n if (tn.token == Token.SEMICOLON) {\r\n let condition: ExpressionStatement | null = null;\r\n if (!tn.skip(Token.SEMICOLON)) {\r\n condition = this.parseExpressionStatement(tn);\r\n if (!condition) return null;\r\n }\r\n\r\n if (tn.token == Token.SEMICOLON) {\r\n let incrementor: Expression | null = null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n incrementor = this.parseExpression(tn);\r\n if (!incrementor) return null;\r\n\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n return Node.createForStatement(\r\n initializer,\r\n condition\r\n ? condition.expression\r\n : null,\r\n incrementor,\r\n statement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseIfStatement(\r\n tn: Tokenizer\r\n ): IfStatement | null {\r\n\r\n // at 'if': '(' Expression ')' Statement ('else' Statement)?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let elseStatement: Statement | null = null;\r\n if (tn.skip(Token.ELSE)) {\r\n elseStatement = this.parseStatement(tn);\r\n if (!elseStatement) return null;\r\n }\r\n return Node.createIfStatement(\r\n condition,\r\n statement,\r\n elseStatement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchStatement(\r\n tn: Tokenizer\r\n ): SwitchStatement | null {\r\n\r\n // at 'switch': '(' Expression ')' '{' SwitchCase* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let cases = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let case_ = this.parseSwitchCase(tn);\r\n if (!case_) return null;\r\n cases.push(case_);\r\n }\r\n let ret = Node.createSwitchStatement(condition, cases, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchCase(\r\n tn: Tokenizer\r\n ): SwitchCase | null {\r\n\r\n var startPos = tn.tokenPos;\r\n var statements: Statement[],\r\n statement: Statement | null;\r\n\r\n // 'case' Expression ':' Statement*\r\n\r\n if (tn.skip(Token.CASE)) {\r\n let label = this.parseExpression(tn);\r\n if (!label) return null;\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(label, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n\r\n // 'default' ':' Statement*\r\n\r\n } else if (tn.skip(Token.DEFAULT)) {\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(null, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._case_or_default_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseThrowStatement(\r\n tn: Tokenizer\r\n ): ThrowStatement | null {\r\n\r\n // at 'throw': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n var ret = Node.createThrowStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseTryStatement(\r\n tn: Tokenizer\r\n ): TryStatement | null {\r\n\r\n // at 'try':\r\n // '{' Statement* '}'\r\n // ('catch' '(' VariableMember ')' '{' Statement* '}')?\r\n // ('finally' '{' Statement* '}'? ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var stmt: Statement | null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n statements.push(stmt);\r\n }\r\n let catchVariable: IdentifierExpression | null = null;\r\n let catchStatements: Statement[] | null = null;\r\n let finallyStatements: Statement[] | null = null;\r\n if (tn.skip(Token.CATCH)) {\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n catchVariable = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n catchStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n catchStatements.push(stmt);\r\n }\r\n }\r\n if (tn.skip(Token.FINALLY)) {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n finallyStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n finallyStatements.push(stmt);\r\n }\r\n }\r\n if (!(catchStatements || finallyStatements)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"catch\"\r\n );\r\n return null;\r\n }\r\n let ret = Node.createTryStatement(\r\n statements,\r\n catchVariable,\r\n catchStatements,\r\n finallyStatements,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseTypeDeclaration(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): TypeDeclaration | null {\r\n\r\n // at 'type': Identifier ('<' TypeParameters '>')? '=' Type ';'?\r\n\r\n if (tn.skipIdentifier()) {\r\n let name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n if (tn.skip(Token.EQUALS)) {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n let ret = Node.createTypeDeclaration(\r\n name,\r\n typeParameters,\r\n type,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseVoidStatement(\r\n tn: Tokenizer\r\n ): VoidStatement | null {\r\n\r\n // at 'void': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn, Precedence.GROUPING);\r\n if (!expression) return null;\r\n var ret = Node.createVoidStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseWhileStatement(\r\n tn: Tokenizer\r\n ): WhileStatement | null {\r\n\r\n // at 'while': '(' Expression ')' Statement ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let ret = Node.createWhileStatement(expression, statement, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n // expressions\r\n // see: http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm#climbing\r\n\r\n parseExpressionStart(\r\n tn: Tokenizer\r\n ): Expression | null {\r\n\r\n var token = tn.next(IdentifierHandling.PREFER);\r\n var startPos = tn.tokenPos;\r\n var precedence = determinePrecedenceStart(token);\r\n if (precedence != Precedence.NONE) {\r\n let operand: Expression | null;\r\n\r\n // TODO: SpreadExpression, YieldExpression (currently become unsupported UnaryPrefixExpressions)\r\n\r\n // NewExpression\r\n if (token == Token.NEW) {\r\n operand = this.parseExpression(tn, Precedence.CALL);\r\n if (!operand) return null;\r\n if (operand.kind == NodeKind.CALL) {\r\n return Node.createNewExpression(\r\n (operand).expression,\r\n (operand).typeArguments,\r\n (operand).arguments,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n } else {\r\n operand = this.parseExpression(tn, precedence);\r\n if (!operand) return null;\r\n }\r\n\r\n // UnaryPrefixExpression\r\n if (token == Token.PLUS_PLUS || token == Token.MINUS_MINUS) {\r\n if (\r\n operand.kind != NodeKind.IDENTIFIER &&\r\n operand.kind != NodeKind.ELEMENTACCESS &&\r\n operand.kind != NodeKind.PROPERTYACCESS\r\n ) {\r\n this.error(\r\n DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,\r\n operand.range\r\n );\r\n }\r\n }\r\n return Node.createUnaryPrefixExpression(token, operand, tn.range(startPos, tn.pos));\r\n }\r\n\r\n var expr: Expression | null = null;\r\n switch (token) {\r\n\r\n case Token.NULL: return Node.createNullExpression(tn.range());\r\n case Token.TRUE: return Node.createTrueExpression(tn.range());\r\n case Token.FALSE: return Node.createFalseExpression(tn.range());\r\n\r\n // ParenthesizedExpression\r\n // FunctionExpression\r\n case Token.OPENPAREN: {\r\n\r\n // determine whether this is a function expression\r\n if (tn.skip(Token.CLOSEPAREN)) { // must be a function expression (fast route)\r\n return this.parseFunctionExpressionCommon(\r\n tn,\r\n Node.createEmptyIdentifierExpression(tn.range(startPos)),\r\n [],\r\n true\r\n );\r\n }\r\n let state = tn.mark();\r\n let again = true;\r\n do {\r\n switch (tn.next(IdentifierHandling.PREFER)) {\r\n\r\n // function expression\r\n case Token.DOT_DOT_DOT: {\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n switch (tn.next()) {\r\n\r\n // if we got here, check for arrow\r\n case Token.CLOSEPAREN: {\r\n if (\r\n !tn.skip(Token.COLON) &&\r\n !tn.skip(Token.EQUALS_GREATERTHAN)\r\n ) {\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 // optional parameter or parenthesized\r\n case Token.QUESTION: {\r\n if (\r\n tn.skip(Token.COLON) || // optional parameter with type\r\n tn.skip(Token.COMMA) || // optional parameter without type\r\n tn.skip(Token.CLOSEPAREN) // last optional parameter without type\r\n ) {\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n again = false; // parenthesized\r\n break;\r\n }\r\n case Token.COMMA: {\r\n break; // continue\r\n }\r\n // parenthesized expression\r\n // case Token.EQUALS: // missing type annotation for simplicity\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n // parenthesized expression\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n } while (again);\r\n tn.reset(state);\r\n\r\n // parse parenthesized\r\n expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n return Node.createParenthesizedExpression(expr, tn.range(startPos, tn.pos));\r\n }\r\n // ArrayLiteralExpression\r\n case Token.OPENBRACKET: {\r\n let elementExpressions = new Array();\r\n while (!tn.skip(Token.CLOSEBRACKET)) {\r\n if (tn.peek() == Token.COMMA) {\r\n expr = null; // omitted\r\n } else {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n }\r\n elementExpressions.push(expr);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACKET)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return Node.createArrayLiteralExpression(elementExpressions, tn.range(startPos, tn.pos));\r\n }\r\n // ObjectLiteralExpression\r\n case Token.OPENBRACE: {\r\n let startPos = tn.tokenPos;\r\n let names = new Array();\r\n let values = new Array();\r\n let name: IdentifierExpression;\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n if (!tn.skipIdentifier()) {\r\n if (!tn.skip(Token.STRINGLITERAL)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range(),\r\n );\r\n return null;\r\n }\r\n name = Node.createIdentifierExpression(tn.readString(), tn.range());\r\n name.set(CommonFlags.QUOTED);\r\n } else {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n names.push(name);\r\n if (tn.skip(Token.COLON)) {\r\n let value = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!value) return null;\r\n values.push(value);\r\n } else if (!name.is(CommonFlags.QUOTED)) {\r\n values.push(name);\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return Node.createObjectLiteralExpression(names, values, tn.range(startPos, tn.pos));\r\n }\r\n // AssertionExpression (unary prefix)\r\n case Token.LESSTHAN: {\r\n let toType = this.parseType(tn);\r\n if (!toType) return null;\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n expr = this.parseExpression(tn, Precedence.CALL);\r\n if (!expr) return null;\r\n return Node.createAssertionExpression(\r\n AssertionKind.PREFIX,\r\n expr,\r\n toType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n case Token.IDENTIFIER: {\r\n return Node.createIdentifierExpression(tn.readIdentifier(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.THIS: {\r\n return Node.createThisExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.CONSTRUCTOR: {\r\n return Node.createConstructorExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.SUPER: {\r\n return Node.createSuperExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.STRINGLITERAL: {\r\n return Node.createStringLiteralExpression(tn.readString(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.INTEGERLITERAL: {\r\n return Node.createIntegerLiteralExpression(tn.readInteger(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.FLOATLITERAL: {\r\n return Node.createFloatLiteralExpression(tn.readFloat(), tn.range(startPos, tn.pos));\r\n }\r\n // RegexpLiteralExpression\r\n // note that this also continues on invalid ones so the surrounding AST remains intact\r\n case Token.SLASH: {\r\n let regexpPattern = tn.readRegexpPattern(); // also reports\r\n if (!tn.skip(Token.SLASH)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"/\"\r\n );\r\n return null;\r\n }\r\n return Node.createRegexpLiteralExpression(\r\n regexpPattern,\r\n tn.readRegexpFlags(), // also reports\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n case Token.FUNCTION: {\r\n return this.parseFunctionExpression(tn);\r\n }\r\n case Token.CLASS: {\r\n return this.parseClassExpression(tn);\r\n }\r\n default: {\r\n if (token == Token.ENDOFFILE) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n tn.range(startPos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Expression_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n tryParseTypeArgumentsBeforeArguments(\r\n tn: Tokenizer\r\n ): CommonTypeNode[] | null {\r\n\r\n // at '<': Type (',' Type)* '>' '('\r\n\r\n var state = tn.mark();\r\n if (!tn.skip(Token.LESSTHAN)) return null;\r\n var typeArguments = new Array();\r\n do {\r\n if (tn.peek() === Token.GREATERTHAN) {\r\n break;\r\n }\r\n let type = this.parseType(tn, true, true);\r\n if (!type) {\r\n tn.reset(state);\r\n return null;\r\n }\r\n typeArguments.push(type);\r\n } while (tn.skip(Token.COMMA));\r\n if (tn.skip(Token.GREATERTHAN) && tn.skip(Token.OPENPAREN)) {\r\n return typeArguments;\r\n }\r\n tn.reset(state);\r\n return null;\r\n }\r\n\r\n parseArguments(\r\n tn: Tokenizer\r\n ): Expression[] | null {\r\n\r\n // at '(': (Expression (',' Expression)*)? ')'\r\n\r\n var args = new Array();\r\n while (!tn.skip(Token.CLOSEPAREN)) {\r\n let expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n args.push(expr);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return args;\r\n }\r\n\r\n parseExpression(\r\n tn: Tokenizer,\r\n precedence: Precedence = Precedence.COMMA\r\n ): Expression | null {\r\n assert(precedence != Precedence.NONE);\r\n\r\n var expr = this.parseExpressionStart(tn);\r\n if (!expr) return null;\r\n expr = this.maybeParseCallExpression(tn, expr); // simple call like on an Identifier\r\n\r\n var startPos = expr.range.start;\r\n var token: Token;\r\n var next: Expression | null = null;\r\n var nextPrecedence: Precedence;\r\n while (\r\n (nextPrecedence = determinePrecedence(token = tn.peek())) >= precedence\r\n ) { // precedence climbing\r\n tn.next();\r\n switch (token) {\r\n // AssertionExpression\r\n case Token.AS: {\r\n let toType = this.parseType(tn); // reports\r\n if (!toType) return null;\r\n expr = Node.createAssertionExpression(\r\n AssertionKind.AS,\r\n expr,\r\n toType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // InstanceOfExpression\r\n case Token.INSTANCEOF: {\r\n let isType = this.parseType(tn); // reports\r\n if (!isType) return null;\r\n expr = Node.createInstanceOfExpression(\r\n expr,\r\n isType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // ElementAccessExpression\r\n case Token.OPENBRACKET: {\r\n next = this.parseExpression(tn); // reports\r\n if (!next) return null;\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n expr = Node.createElementAccessExpression(\r\n expr,\r\n next,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // UnaryPostfixExpression\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS: {\r\n if (\r\n expr.kind != NodeKind.IDENTIFIER &&\r\n expr.kind != NodeKind.ELEMENTACCESS &&\r\n expr.kind != NodeKind.PROPERTYACCESS\r\n ) {\r\n this.error(\r\n DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,\r\n expr.range\r\n );\r\n }\r\n expr = Node.createUnaryPostfixExpression(\r\n token,\r\n expr,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // TernaryExpression\r\n case Token.QUESTION: {\r\n let ifThen = this.parseExpression(tn);\r\n if (!ifThen) return null;\r\n if (!tn.skip(Token.COLON)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n let ifElse = this.parseExpression(tn, precedence > Precedence.COMMA\r\n ? Precedence.COMMA + 1\r\n : Precedence.COMMA\r\n );\r\n if (!ifElse) return null;\r\n expr = Node.createTernaryExpression(\r\n expr,\r\n ifThen,\r\n ifElse,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // CommaExpression\r\n case Token.COMMA: {\r\n let commaExprs: Expression[] = [ expr ];\r\n do {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n commaExprs.push(expr);\r\n } while (tn.skip(Token.COMMA));\r\n expr = Node.createCommaExpression(commaExprs, tn.range(startPos, tn.pos));\r\n break;\r\n }\r\n default: {\r\n\r\n // PropertyAccessExpression\r\n if (token == Token.DOT) {\r\n if (tn.skipIdentifier()) {\r\n next = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\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 if (next.kind == NodeKind.IDENTIFIER) { // expr '.' 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) { // expr '.' CallExpression\r\n expr = this.joinPropertyCall(tn, startPos, expr, next);\r\n if (!expr) return null;\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 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 expr = Node.createBinaryExpression(token, expr, next, tn.range(startPos, tn.pos));\r\n }\r\n break;\r\n }\r\n }\r\n expr = this.maybeParseCallExpression(tn, expr); // compound call like on an ElementAccess\r\n }\r\n return expr;\r\n }\r\n\r\n private joinPropertyCall(\r\n tn: Tokenizer,\r\n startPos: i32,\r\n expr: Expression,\r\n call: CallExpression\r\n ): Expression | null {\r\n var callee = call.expression;\r\n switch (callee.kind) {\r\n case NodeKind.IDENTIFIER: { // join property access and use as call target\r\n call.expression = Node.createPropertyAccessExpression(\r\n expr,\r\n callee,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n case NodeKind.CALL: { // join call target und wrap the original call around it\r\n let inner = this.joinPropertyCall(tn, startPos, expr, callee);\r\n if (!inner) return null;\r\n call.expression = inner;\r\n call.range = tn.range(startPos, tn.pos);\r\n break;\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n call.range\r\n );\r\n return null;\r\n }\r\n }\r\n return call;\r\n }\r\n\r\n private maybeParseCallExpression(\r\n tn: Tokenizer,\r\n expr: Expression\r\n ): Expression {\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) break;\r\n expr = Node.createCallExpression( // is again callable\r\n expr,\r\n typeArguments,\r\n args,\r\n tn.range(expr.range.start, tn.pos)\r\n );\r\n }\r\n }\r\n return expr;\r\n }\r\n\r\n /** Skips over a statement on errors in an attempt to reduce unnecessary diagnostic noise. */\r\n skipStatement(tn: Tokenizer): void {\r\n tn.peek(true);\r\n if (tn.nextTokenOnNewLine) tn.next(); // if reset() to the previous line\r\n do {\r\n let nextToken = tn.peek(true);\r\n if (\r\n nextToken == Token.ENDOFFILE || // next step should handle this\r\n nextToken == Token.SEMICOLON // end of the statement for sure\r\n ) {\r\n tn.next();\r\n break;\r\n }\r\n if (tn.nextTokenOnNewLine) break; // end of the statement maybe\r\n switch (tn.next()) {\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n break;\r\n }\r\n case Token.STRINGLITERAL: {\r\n tn.readString();\r\n break;\r\n }\r\n case Token.INTEGERLITERAL: {\r\n tn.readInteger();\r\n break;\r\n }\r\n case Token.FLOATLITERAL: {\r\n tn.readFloat();\r\n break;\r\n }\r\n }\r\n } while (true);\r\n }\r\n\r\n /** Skips over a block on errors in an attempt to reduce unnecessary diagnostic noise. */\r\n skipBlock(tn: Tokenizer): void {\r\n // at '{': ... '}'\r\n var depth = 1;\r\n var again = true;\r\n do {\r\n switch (tn.next()) {\r\n case Token.ENDOFFILE: {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n again = false;\r\n break;\r\n }\r\n case Token.OPENBRACE: {\r\n ++depth;\r\n break;\r\n }\r\n case Token.CLOSEBRACE: {\r\n --depth;\r\n if (!depth) again = false;\r\n break;\r\n }\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n break;\r\n }\r\n case Token.STRINGLITERAL: {\r\n tn.readString();\r\n break;\r\n }\r\n case Token.INTEGERLITERAL: {\r\n tn.readInteger();\r\n break;\r\n }\r\n case Token.FLOATLITERAL: {\r\n tn.readFloat();\r\n break;\r\n }\r\n }\r\n } while (again);\r\n }\r\n}\r\n\r\n/** Operator precedence from least to largest. */\r\nexport const enum Precedence {\r\n NONE,\r\n COMMA,\r\n SPREAD,\r\n YIELD,\r\n ASSIGNMENT,\r\n CONDITIONAL,\r\n LOGICAL_OR,\r\n LOGICAL_AND,\r\n BITWISE_OR,\r\n BITWISE_XOR,\r\n BITWISE_AND,\r\n EQUALITY,\r\n RELATIONAL,\r\n SHIFT,\r\n ADDITIVE,\r\n MULTIPLICATIVE,\r\n EXPONENTIATED,\r\n UNARY_PREFIX,\r\n UNARY_POSTFIX,\r\n CALL,\r\n MEMBERACCESS,\r\n GROUPING\r\n}\r\n\r\n/** Determines the precedence of a starting token. */\r\nfunction determinePrecedenceStart(kind: Token): Precedence {\r\n switch (kind) {\r\n case Token.DOT_DOT_DOT: return Precedence.SPREAD;\r\n case Token.YIELD: return Precedence.YIELD;\r\n case Token.EXCLAMATION:\r\n case Token.TILDE:\r\n case Token.PLUS:\r\n case Token.MINUS:\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS:\r\n case Token.TYPEOF:\r\n case Token.VOID:\r\n case Token.DELETE: return Precedence.UNARY_PREFIX;\r\n case Token.NEW: return Precedence.MEMBERACCESS;\r\n }\r\n return Precedence.NONE;\r\n}\r\n\r\n/** Determines the precende of a non-starting token. */\r\nfunction determinePrecedence(kind: Token): Precedence {\r\n switch (kind) {\r\n case Token.COMMA: return Precedence.COMMA;\r\n case Token.EQUALS:\r\n case Token.PLUS_EQUALS:\r\n case Token.MINUS_EQUALS:\r\n case Token.ASTERISK_ASTERISK_EQUALS:\r\n case Token.ASTERISK_EQUALS:\r\n case Token.SLASH_EQUALS:\r\n case Token.PERCENT_EQUALS:\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.AMPERSAND_EQUALS:\r\n case Token.CARET_EQUALS:\r\n case Token.BAR_EQUALS: return Precedence.ASSIGNMENT;\r\n case Token.QUESTION: return Precedence.CONDITIONAL;\r\n case Token.BAR_BAR: return Precedence.LOGICAL_OR;\r\n case Token.AMPERSAND_AMPERSAND: return Precedence.LOGICAL_AND;\r\n case Token.BAR: return Precedence.BITWISE_OR;\r\n case Token.CARET: return Precedence.BITWISE_XOR;\r\n case Token.AMPERSAND: return Precedence.BITWISE_AND;\r\n case Token.EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS:\r\n case Token.EQUALS_EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS_EQUALS: return Precedence.EQUALITY;\r\n case Token.AS:\r\n case Token.IN:\r\n case Token.INSTANCEOF:\r\n case Token.LESSTHAN:\r\n case Token.GREATERTHAN:\r\n case Token.LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_EQUALS: return Precedence.RELATIONAL;\r\n case Token.LESSTHAN_LESSTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: return Precedence.SHIFT;\r\n case Token.PLUS:\r\n case Token.MINUS: return Precedence.ADDITIVE;\r\n case Token.ASTERISK:\r\n case Token.SLASH:\r\n case Token.PERCENT: return Precedence.MULTIPLICATIVE;\r\n case Token.ASTERISK_ASTERISK: return Precedence.EXPONENTIATED;\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS: return Precedence.UNARY_POSTFIX;\r\n case Token.DOT:\r\n case Token.NEW:\r\n case Token.OPENBRACKET: return Precedence.MEMBERACCESS;\r\n }\r\n return Precedence.NONE;\r\n}\r\n\r\n/** Determines whether a non-starting token is right associative. */\r\nfunction isRightAssociative(kind: Token): bool {\r\n switch (kind) {\r\n case Token.EQUALS:\r\n case Token.PLUS_EQUALS:\r\n case Token.MINUS_EQUALS:\r\n case Token.ASTERISK_ASTERISK_EQUALS:\r\n case Token.ASTERISK_EQUALS:\r\n case Token.SLASH_EQUALS:\r\n case Token.PERCENT_EQUALS:\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.AMPERSAND_EQUALS:\r\n case Token.CARET_EQUALS:\r\n case Token.BAR_EQUALS:\r\n case Token.QUESTION:\r\n case Token.ASTERISK_ASTERISK: return true;\r\n default: return false;\r\n }\r\n}\r\n"],"sourceRoot":""} \ No newline at end of file diff --git a/package-lock.json b/package-lock.json index e794980f..1c9bdc64 100644 --- a/package-lock.json +++ b/package-lock.json @@ -549,9 +549,9 @@ "dev": true }, "binaryen": { - "version": "52.0.0-nightly.20181108", - "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-52.0.0-nightly.20181108.tgz", - "integrity": "sha512-EPCTNikr5NWz63au0pIrt8snmt+Fv/YERiDD/BQIT9I0jLYB11m/oMuUA5k5kMCLsfTc2w7Sma4jKVu7VR/owA==" + "version": "55.0.0-nightly.20181122", + "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-55.0.0-nightly.20181122.tgz", + "integrity": "sha512-sgI5FLlZ3RrRKXYfghQhUMBttfkXE41R37r2Agq5hWU3tMGw1xANVvKho8xPNlIdrNtM9jrRVPMt7HQ/236VnQ==" }, "bluebird": { "version": "3.5.3", diff --git a/package.json b/package.json index 07136324..ff93c7e5 100644 --- a/package.json +++ b/package.json @@ -12,7 +12,7 @@ }, "dependencies": { "@protobufjs/utf8": "^1.1.0", - "binaryen": "52.0.0-nightly.20181108", + "binaryen": "55.0.0-nightly.20181122", "glob": "^7.1.3", "long": "^4.0.0" }, diff --git a/src/glue/binaryen.d.ts b/src/glue/binaryen.d.ts index 7621f6c4..6b49995d 100644 --- a/src/glue/binaryen.d.ts +++ b/src/glue/binaryen.d.ts @@ -414,15 +414,15 @@ declare function _BinaryenModuleInterpret(module: BinaryenModuleRef): void; declare function _BinaryenModuleAddDebugInfoFileName(module: BinaryenModuleRef, filename: usize): BinaryenIndex; declare function _BinaryenModuleGetDebugInfoFileName(module: BinaryenModuleRef, index: BinaryenIndex): usize; -declare type RelooperRef = usize; -declare type RelooperBlockRef = usize; +declare type BinaryenRelooperRef = usize; +declare type BinaryenRelooperBlockRef = usize; -declare function _RelooperCreate(): RelooperRef; -declare function _RelooperAddBlock(relooper: RelooperRef, code: BinaryenExpressionRef): RelooperBlockRef; -declare function _RelooperAddBranch(from: RelooperBlockRef, to: RelooperBlockRef, condition: BinaryenExpressionRef, code: BinaryenExpressionRef): void; -declare function _RelooperAddBlockWithSwitch(relooper: RelooperRef, code: BinaryenExpressionRef, condition: BinaryenExpressionRef): RelooperBlockRef; -declare function _RelooperAddBranchForSwitch(from: RelooperBlockRef, to: RelooperBlockRef, indexes: usize, numIndexes: BinaryenIndex, code: BinaryenExpressionRef): void; -declare function _RelooperRenderAndDispose(relooper: RelooperRef, entry: RelooperBlockRef, labelHelper: BinaryenIndex, module: BinaryenModuleRef): BinaryenExpressionRef; +declare function _RelooperCreate(module: BinaryenModuleRef): BinaryenRelooperRef; +declare function _RelooperAddBlock(relooper: BinaryenRelooperRef, code: BinaryenExpressionRef): BinaryenRelooperBlockRef; +declare function _RelooperAddBranch(from: BinaryenRelooperBlockRef, to: BinaryenRelooperBlockRef, condition: BinaryenExpressionRef, code: BinaryenExpressionRef): void; +declare function _RelooperAddBlockWithSwitch(relooper: BinaryenRelooperRef, code: BinaryenExpressionRef, condition: BinaryenExpressionRef): BinaryenRelooperBlockRef; +declare function _RelooperAddBranchForSwitch(from: BinaryenRelooperBlockRef, to: BinaryenRelooperBlockRef, indexes: usize, numIndexes: BinaryenIndex, code: BinaryenExpressionRef): void; +declare function _RelooperRenderAndDispose(relooper: BinaryenRelooperRef, entry: BinaryenRelooperBlockRef, labelHelper: BinaryenIndex): BinaryenExpressionRef; declare function _BinaryenGetOptimizeLevel(): i32; declare function _BinaryenSetOptimizeLevel(level: i32): void; diff --git a/src/glue/js/binaryen.d.ts b/src/glue/js/binaryen.d.ts index 320e09d7..1bf7ace3 100644 --- a/src/glue/js/binaryen.d.ts +++ b/src/glue/js/binaryen.d.ts @@ -4,10 +4,9 @@ declare namespace binaryen { class Module { - constructor(ref: number); - runPasses(passes: string[]): void; - emitText(): string; + constructor(); emitStackIR(optimize?: boolean): string; emitAsmjs(): string; } + function wrapModule(ptr: number): Module; } diff --git a/src/glue/js/index.ts b/src/glue/js/index.ts index 75ef3932..03dffbc5 100644 --- a/src/glue/js/index.ts +++ b/src/glue/js/index.ts @@ -14,9 +14,9 @@ import "./i64"; import { Module } from "../../module"; Module.prototype.toText = function(this: Module) { - return new binaryen.Module(this.ref).emitStackIR(); + return binaryen.wrapModule(this.ref).emitStackIR(); }; Module.prototype.toAsmjs = function(this: Module) { - return new binaryen.Module(this.ref).emitAsmjs(); + return binaryen.wrapModule(this.ref).emitAsmjs(); }; diff --git a/src/module.ts b/src/module.ts index 780a4c04..e45c38dc 100644 --- a/src/module.ts +++ b/src/module.ts @@ -14,6 +14,8 @@ export type ExpressionRef = usize; export type GlobalRef = usize; export type ImportRef = usize; export type ExportRef = usize; +export type RelooperRef = usize; +export type RelooperBlockRef = usize; export type Index = u32; export const enum NativeType { @@ -1329,7 +1331,7 @@ export class Relooper { static create(module: Module): Relooper { var relooper = new Relooper(); relooper.module = module; - relooper.ref = _RelooperCreate(); + relooper.ref = _RelooperCreate(module.ref); return relooper; } @@ -1339,7 +1341,12 @@ export class Relooper { return _RelooperAddBlock(this.ref, code); } - addBranch(from: RelooperBlockRef, to: RelooperBlockRef, condition: ExpressionRef = 0, code: ExpressionRef = 0): void { + addBranch( + from: RelooperBlockRef, + to: RelooperBlockRef, + condition: ExpressionRef = 0, + code: ExpressionRef = 0 + ): void { _RelooperAddBranch(from, to, condition, code); } @@ -1347,7 +1354,12 @@ export class Relooper { return _RelooperAddBlockWithSwitch(this.ref, code, condition); } - addBranchForSwitch(from: RelooperBlockRef, to: RelooperBlockRef, indexes: i32[], code: ExpressionRef = 0): void { + addBranchForSwitch( + from: RelooperBlockRef, + to: RelooperBlockRef, + indexes: i32[], + code: ExpressionRef = 0 + ): void { var cArr = allocI32Array(indexes); try { _RelooperAddBranchForSwitch(from, to, cArr, indexes.length, code); @@ -1357,7 +1369,7 @@ export class Relooper { } renderAndDispose(entry: RelooperBlockRef, labelHelper: Index): ExpressionRef { - return _RelooperRenderAndDispose(this.ref, entry, labelHelper, this.module.ref); + return _RelooperRenderAndDispose(this.ref, entry, labelHelper); } }