diff --git a/dist/assemblyscript.js b/dist/assemblyscript.js index 1157c9b9..1006e8ef 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.AMBIENT=8192]="AMBIENT",e[e.GENERIC=16384]="GENERIC",e[e.GENERIC_CONTEXT=32768]="GENERIC_CONTEXT",e[e.INSTANCE=65536]="INSTANCE",e[e.CONSTRUCTOR=131072]="CONSTRUCTOR",e[e.ARROW=262144]="ARROW",e[e.MODULE_EXPORT=524288]="MODULE_EXPORT",e[e.MODULE_IMPORT=1048576]="MODULE_IMPORT",e[e.COMPILED=2097152]="COMPILED",e[e.INLINED=4194304]="INLINED",e[e.SCOPED=8388608]="SCOPED",e[e.TRAMPOLINE=16777216]="TRAMPOLINE",e[e.VIRTUAL=33554432]="VIRTUAL",e[e.MAIN=67108864]="MAIN",e[e.QUOTED=134217728]="QUOTED"}(t.CommonFlags||(t.CommonFlags={})),t.PATH_DELIMITER="/",t.PARENT_SUBST="..",t.GETTER_PREFIX="get:",t.SETTER_PREFIX="set:",t.INSTANCE_DELIMITER="#",t.STATIC_DELIMITER=".",t.INNER_DELIMITER="~",t.LIBRARY_SUBST="~lib",t.LIBRARY_PREFIX=t.LIBRARY_SUBST+t.PATH_DELIMITER,t.FILESPACE_PREFIX="file:"},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,i=r(10),a=r(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.CallImport=_BinaryenCallImportId()]="CallImport",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.PageSize=_BinaryenPageSize()]="PageSize",e[e.CurrentMemory=_BinaryenCurrentMemory()]="CurrentMemory",e[e.GrowMemory=_BinaryenGrowMemory()]="GrowMemory",e[e.HasFeature=_BinaryenHasFeature()]="HasFeature"}(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.createCallImport=function(e,t,r){var n=u(e),i=p(t);try{return _BinaryenCallImport(this.ref,n,i,t&&t.length||0,r)}finally{memory.free(i),memory.free(n)}},e.prototype.createCallIndirect=function(e,t,r){var n=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.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.removeImport=function(e){var t=u(e);try{_BinaryenRemoveImport(this.ref,t)}finally{memory.free(t)}},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){var t=p(e);try{_BinaryenSetFunctionTable(this.ref,t,e.length)}finally{memory.free(t)}},e.prototype.setStart=function(e){_BinaryenSetStart(this.ref,e)},e.prototype.getOptimizeLevel=function(){return _BinaryenGetOptimizeLevel()},e.prototype.setOptimizeLevel=function(e){void 0===e&&(e=2),_BinaryenSetOptimizeLevel(e)},e.prototype.getShrinkLevel=function(){return _BinaryenGetShrinkLevel()},e.prototype.setShrinkLevel=function(e){void 0===e&&(e=1),_BinaryenSetShrinkLevel(e)},e.prototype.setDebugInfo=function(e){void 0===e&&(e=!1),_BinaryenSetDebugInfo(e)},e.prototype.optimize=function(e){void 0===e&&(e=0),e?_BinaryenFunctionOptimize(e,this.ref):_BinaryenModuleOptimize(this.ref)},e.prototype.runPasses=function(e,t){void 0===t&&(t=0);for(var r=e.length,n=new Array(r),i=0;i=0;--i)memory.free(n[i])}},e.prototype.precomputeExpression=function(e){var t=_BinaryenGetOptimizeLevel(),r=_BinaryenGetShrinkLevel(),n=_BinaryenGetDebugInfo();_BinaryenSetOptimizeLevel(4),_BinaryenSetShrinkLevel(0),_BinaryenSetDebugInfo(!1);var i=_BinaryenExpressionGetType(e),a=this.addTemporaryFunction(i,null,e),s=this.cachedPrecomputeNames;if(!s){var o=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(e,t){var r,n,i,a;if(void 0===t&&(t=!1),this.is(256)){if(e.is(256)&&(!this.is(512)||e.is(512)))if(r=this.classReference){if(n=e.classReference)return r.isAssignableTo(n)}else if((i=this.signatureReference)&&(a=e.signatureReference))return i.isAssignableTo(a)}else if(!e.is(256))if(this.is(4))if(e.is(4)){if(!t||this.is(1)==e.is(1))return this.size<=e.size}else{if(11==e.kind)return this.size<=23;if(12==e.kind)return this.size<=52}else if(this.is(8)&&e.is(8))return this.size<=e.size;return!1},e.commonCompatible=function(e,t,r){return t.isAssignableTo(e,r)?e:e.isAssignableTo(t,r)?t:null},e.prototype.toString=function(e){if(void 0===e&&(e=!1),!e&&this.is(256)){var t=this.classReference;if(t)return this.is(512)?t.toString()+" | null":t.toString();var r=this.signatureReference;if(r)return this.is(512)?"("+r.toString(!0)+") | null":r.toString(!0);assert(!1)}switch(this.kind){case 0:return"i8";case 1:return"i16";case 2:return"i32";case 3:return"i64";case 4:return"isize";case 5:return"u8";case 6:return"u16";case 7:return"u32";case 8:return"u64";case 9:return"usize";case 10:return"bool";case 11:return"f32";case 12:return"f64";default:assert(!1);case 13:return"void"}},e.prototype.toNativeType=function(){switch(this.kind){default:return 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: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=[],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;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,e.parent):(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(r.is(1)?l.UnaryOp.ExtendI32:l.UnaryOp.ExtendU32,this.ensureSmallIntegerWrap(e,t)),i=0):t.is(32)&&t.size",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.GtI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GtI64:l.BinaryOp.GtI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.GtI64,r,i);break;case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.GtU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GtU64:l.BinaryOp.GtU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.GtU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.GtF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.GtF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.LESSTHAN_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.LE)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!0)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"<=",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.LeI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.LeI64:l.BinaryOp.LeI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.LeI64,r,i);break;case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.LeU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.LeU64:l.BinaryOp.LeU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.LeU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.LeF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.LeF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.GREATERTHAN_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.GE)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!0)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,">=",n.toString(),a.toString()),this.currentType=t,p.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,d),i=this.convertExpression(i,a,a=s,1,1,m),s.kind){case 0:case 1:case 2:o=p.createBinary(l.BinaryOp.GeI32,r,i);break;case 4:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GeI64:l.BinaryOp.GeI32,r,i);break;case 3:o=p.createBinary(l.BinaryOp.GeI64,r,i);break;case 5:case 6:case 7:case 10:o=p.createBinary(l.BinaryOp.GeU32,r,i);break;case 9:o=p.createBinary(this.options.isWasm64?l.BinaryOp.GeU64:l.BinaryOp.GeU32,r,i);break;case 8:o=p.createBinary(l.BinaryOp.GeU64,r,i);break;case 11:o=p.createBinary(l.BinaryOp.GeF32,r,i);break;case 12:o=p.createBinary(l.BinaryOp.GeF64,r,i);break;default:assert(!1),o=p.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.EQUALS_EQUALS_EQUALS:case h.Token.EQUALS_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,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;_=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);//!!! +!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.AMBIENT=8192]="AMBIENT",e[e.GENERIC=16384]="GENERIC",e[e.GENERIC_CONTEXT=32768]="GENERIC_CONTEXT",e[e.INSTANCE=65536]="INSTANCE",e[e.CONSTRUCTOR=131072]="CONSTRUCTOR",e[e.ARROW=262144]="ARROW",e[e.MODULE_EXPORT=524288]="MODULE_EXPORT",e[e.MODULE_IMPORT=1048576]="MODULE_IMPORT",e[e.COMPILED=2097152]="COMPILED",e[e.INLINED=4194304]="INLINED",e[e.SCOPED=8388608]="SCOPED",e[e.TRAMPOLINE=16777216]="TRAMPOLINE",e[e.VIRTUAL=33554432]="VIRTUAL",e[e.MAIN=67108864]="MAIN",e[e.QUOTED=134217728]="QUOTED"}(t.CommonFlags||(t.CommonFlags={})),t.PATH_DELIMITER="/",t.PARENT_SUBST="..",t.GETTER_PREFIX="get:",t.SETTER_PREFIX="set:",t.INSTANCE_DELIMITER="#",t.STATIC_DELIMITER=".",t.INNER_DELIMITER="~",t.LIBRARY_SUBST="~lib",t.LIBRARY_PREFIX=t.LIBRARY_SUBST+t.PATH_DELIMITER,t.FILESPACE_PREFIX="file:"},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,i=r(10),a=r(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.CallImport=_BinaryenCallImportId()]="CallImport",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.PageSize=_BinaryenPageSize()]="PageSize",e[e.CurrentMemory=_BinaryenCurrentMemory()]="CurrentMemory",e[e.GrowMemory=_BinaryenGrowMemory()]="GrowMemory",e[e.HasFeature=_BinaryenHasFeature()]="HasFeature"}(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.createCallImport=function(e,t,r){var n=u(e),i=p(t);try{return _BinaryenCallImport(this.ref,n,i,t&&t.length||0,r)}finally{memory.free(i),memory.free(n)}},e.prototype.createCallIndirect=function(e,t,r){var n=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.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.removeImport=function(e){var t=u(e);try{_BinaryenRemoveImport(this.ref,t)}finally{memory.free(t)}},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){var t=p(e);try{_BinaryenSetFunctionTable(this.ref,t,e.length)}finally{memory.free(t)}},e.prototype.setStart=function(e){_BinaryenSetStart(this.ref,e)},e.prototype.getOptimizeLevel=function(){return _BinaryenGetOptimizeLevel()},e.prototype.setOptimizeLevel=function(e){void 0===e&&(e=2),_BinaryenSetOptimizeLevel(e)},e.prototype.getShrinkLevel=function(){return _BinaryenGetShrinkLevel()},e.prototype.setShrinkLevel=function(e){void 0===e&&(e=1),_BinaryenSetShrinkLevel(e)},e.prototype.setDebugInfo=function(e){void 0===e&&(e=!1),_BinaryenSetDebugInfo(e)},e.prototype.optimize=function(e){void 0===e&&(e=0),e?_BinaryenFunctionOptimize(e,this.ref):_BinaryenModuleOptimize(this.ref)},e.prototype.runPasses=function(e,t){void 0===t&&(t=0);for(var r=e.length,n=new Array(r),i=0;i=0;--i)memory.free(n[i])}},e.prototype.precomputeExpression=function(e){var t=_BinaryenGetOptimizeLevel(),r=_BinaryenGetShrinkLevel(),n=_BinaryenGetDebugInfo();_BinaryenSetOptimizeLevel(4),_BinaryenSetShrinkLevel(0),_BinaryenSetDebugInfo(!1);var i=_BinaryenExpressionGetType(e),a=this.addTemporaryFunction(i,null,e),s=this.cachedPrecomputeNames;if(!s){var o=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(e,t){var r,n,i,a;if(void 0===t&&(t=!1),this.is(256)){if(e.is(256)&&(!this.is(512)||e.is(512)))if(r=this.classReference){if(n=e.classReference)return r.isAssignableTo(n)}else if((i=this.signatureReference)&&(a=e.signatureReference))return i.isAssignableTo(a)}else if(!e.is(256))if(this.is(4))if(e.is(4)){if(!t||this.is(1)==e.is(1))return this.size<=e.size}else{if(11==e.kind)return this.size<=23;if(12==e.kind)return this.size<=52}else if(this.is(8)&&e.is(8))return this.size<=e.size;return!1},e.commonCompatible=function(e,t,r){return t.isAssignableTo(e,r)?e:e.isAssignableTo(t,r)?t:null},e.prototype.toString=function(e){if(void 0===e&&(e=!1),!e&&this.is(256)){var t=this.classReference;if(t)return this.is(512)?t.toString()+" | null":t.toString();var r=this.signatureReference;if(r)return this.is(512)?"("+r.toString(!0)+") | null":r.toString(!0);assert(!1)}switch(this.kind){case 0:return"i8";case 1:return"i16";case 2:return"i32";case 3:return"i64";case 4:return"isize";case 5:return"u8";case 6:return"u16";case 7:return"u32";case 8:return"u64";case 9:return"usize";case 10:return"bool";case 11:return"f32";case 12:return"f64";default:assert(!1);case 13:return"void"}},e.prototype.toNativeType=function(){switch(this.kind){default:return 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: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=[],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;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,e.parent):(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;_=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,o,p=this.currentType;switch(e.operator){case h.Token.PLUS_PLUS:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(p.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=l.BinaryOp.AddI32,s=1,o=r.createI32(1);break;case 9:case 4:a=(u=this.options).isWasm64?l.BinaryOp.AddI64:l.BinaryOp.AddI32,s=u.nativeSizeType,o=p.toNativeOne(r);break;case 3:case 8:a=l.BinaryOp.AddI64,s=2,o=r.createI64(1);break;case 11:a=l.BinaryOp.AddF32,s=3,o=r.createF32(1);break;case 12:a=l.BinaryOp.AddF64,s=4,o=r.createF64(1);break;default:return assert(!1),r.createUnreachable()}break;case h.Token.MINUS_MINUS:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(p.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=l.BinaryOp.SubI32,s=1,o=r.createI32(1);break;case 9:case 4:var u;a=(u=this.options).isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,s=u.nativeSizeType,o=p.toNativeOne(r);break;case 3:case 8:a=l.BinaryOp.SubI64,s=2,o=r.createI64(1);break;case 11:a=l.BinaryOp.SubF32,s=3,o=r.createF32(1);break;case 12:a=l.BinaryOp.SubF64,s=4,o=r.createF64(1);break;default:return assert(!1),r.createUnreachable()}break;default:return assert(!1),r.createUnreachable()}if(t==_.Type.void)return this.compileAssignmentWithValue(e.operand,r.createBinary(a,i,o),!1);var d=n.getTempLocal(p,!1),m=this.compileAssignmentWithValue(e.operand,r.createBinary(a,this.module.createGetLocal(d.index,s),o),!1);this.currentType=assert(d).type,n.freeTempLocal(d);var g=d.index;return r.createBlock(null,[r.createSetLocal(g,i),m,r.createGetLocal(g,s)],s)},t.prototype.compileUnaryPrefixExpression=function(e,t){var r,n=this.module,i=!1;switch(e.operator){case h.Token.PLUS:if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.PLUS)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}break;case h.Token.MINUS:if(e.operand.kind==d.NodeKind.LITERAL&&(e.operand.literalKind==d.LiteralKind.INTEGER||e.operand.literalKind==d.LiteralKind.FLOAT)){r=this.compileLiteralExpression(e.operand,t,!0),this.options.sourceMap&&this.addDebugLocation(r,e.range);break}if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.MINUS)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.SubI32,n.createI32(0),r);break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,this.currentType.toNativeZero(n),r);break;case 3:case 8:r=n.createBinary(l.BinaryOp.SubI64,n.createI64(0),r);break;case 11:r=n.createUnary(l.UnaryOp.NegF32,r);break;case 12:r=n.createUnary(l.UnaryOp.NegF64,r);break;default:assert(!1),r=n.createUnreachable()}break;case h.Token.PLUS_PLUS:if(i=!0,r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.PREFIX_INC)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.AddI32,r,this.module.createI32(1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.AddI64:l.BinaryOp.AddI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(l.BinaryOp.AddI64,r,n.createI64(1));break;case 11:r=n.createBinary(l.BinaryOp.AddF32,r,n.createF32(1));break;case 12:r=n.createBinary(l.BinaryOp.AddF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case h.Token.MINUS_MINUS:if(i=!0,r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.PREFIX_DEC)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.SubI32,r,n.createI32(1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.SubI64:l.BinaryOp.SubI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(l.BinaryOp.SubI64,r,n.createI64(1));break;case 11:r=n.createBinary(l.BinaryOp.SubF32,r,n.createF32(1));break;case 12:r=n.createBinary(l.BinaryOp.SubF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case h.Token.EXCLAMATION:if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256))if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.NOT)){r=this.compileUnaryOverload(s,e.operand,r,e);break}r=this.makeIsFalseish(r,this.currentType),this.currentType=_.Type.bool;break;case h.Token.TILDE:if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t.is(8)?_.Type.i64:t,0,0),this.currentType.is(256)){var a,s;if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.BITWISE_NOT)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(r=this.convertExpression(r,this.currentType,this.currentType.intType,1,0,e.operand),this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(l.BinaryOp.XorI32,r,n.createI32(-1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?l.BinaryOp.XorI64:l.BinaryOp.XorI32,r,this.currentType.toNativeNegOne(n));break;case 3:case 8:r=n.createBinary(l.BinaryOp.XorI64,r,n.createI64(-1,-1));break;default:assert(!1),r=n.createUnreachable()}break;case h.Token.TYPEOF:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable();default:return assert(!1),n.createUnreachable()}return i?this.compileAssignmentWithValue(e.operand,r,t!=_.Type.void):r},t.prototype.ensureSmallIntegerWrap=function(e,t){var r=this.module,n=this.currentFunction.flow;switch(t.kind){case 0:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(l.UnaryOp.ExtendI8ToI32,e):r.createBinary(l.BinaryOp.ShrI32,r.createBinary(l.BinaryOp.ShlI32,e,r.createI32(24)),r.createI32(24)));break;case 1:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(l.UnaryOp.ExtendI16ToI32,e):r.createBinary(l.BinaryOp.ShrI32,r.createBinary(l.BinaryOp.ShlI32,e,r.createI32(16)),r.createI32(16)));break;case 5:n.canOverflow(e,t)&&(e=r.createBinary(l.BinaryOp.AndI32,e,r.createI32(255)));break;case 6:n.canOverflow(e,t)&&(e=r.createBinary(l.BinaryOp.AndI32,e,r.createI32(65535)));break;case 10:n.canOverflow(e,t)&&(e=r.createBinary(l.BinaryOp.AndI32,e,r.createI32(1)))}return e},t.prototype.makeIsFalseish=function(e,t){var r=this.module;switch(t.kind){case 0:case 1:case 5:case 6:case 10:e=this.ensureSmallIntegerWrap(e,t);case 2:case 7:return r.createUnary(l.UnaryOp.EqzI32,e);case 3:case 8:return r.createUnary(l.UnaryOp.EqzI64,e);case 9:case 4:return r.createUnary(64==t.size?l.UnaryOp.EqzI64:l.UnaryOp.EqzI32,e);case 11:return r.createBinary(l.BinaryOp.EqF32,e,r.createF32(0));case 12:return r.createBinary(l.BinaryOp.EqF64,e,r.createF64(0));default:return assert(!1),r.createI32(1)}},t.prototype.makeIsTrueish=function(e,t){var r=this.module;switch(t.kind){case 0:case 1:case 5:case 6:case 10:e=this.ensureSmallIntegerWrap(e,t);case 2:case 7:return e;case 3:case 8:return r.createBinary(l.BinaryOp.NeI64,e,r.createI64(0));case 9:case 4:return 64==t.size?r.createBinary(l.BinaryOp.NeI64,e,r.createI64(0)):e;case 11:return r.createBinary(l.BinaryOp.NeF32,e,r.createF32(0));case 12:return r.createBinary(l.BinaryOp.NeF64,e,r.createF64(0));default:return assert(!1),r.createI32(0)}},t.prototype.makeAllocate=function(e,t){var r,n,a=this.module,s=this.currentFunction,c=this.options.nativeSizeType,l=s.getTempLocal(e.type,!1),h=new Array;if(h.push(a.createSetLocal(l.index,o.compileAllocate(this,e,t))),e.members)try{for(var d=i(e.members.values()),_=d.next();!_.done;_=d.next()){var m=_.value;if(m.kind==u.ElementKind.FIELD){var 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,r){if(void 0===r&&(r=null),y=r?r.simpleName:t.range.source.simplePath,E=e.simpleName,e.hasDecorator(u.DecoratorFlags.EXTERNAL)){var n=e.program,i=assert(d.findDecorator(d.DecoratorKind.EXTERNAL,t.decorators)),a=i.arguments;if(a&&a.length){var s=a[0];s.kind==d.NodeKind.LITERAL&&s.literalKind==d.LiteralKind.STRING?(E=s.value,a.length>=2&&((s=a[1]).kind==d.NodeKind.LITERAL&&s.literalKind==d.LiteralKind.STRING?(y=E,E=s.value,a.length>2&&n.error(c.DiagnosticCode.Expected_0_arguments_but_got_1,i.range,"2",a.length.toString())):n.error(c.DiagnosticCode.String_literal_expected,s.range))):n.error(c.DiagnosticCode.String_literal_expected,s.range)}else n.error(c.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,i.range,"1","0")}}t.Compiler=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.Unterminated_string_literal=1002]="Unterminated_string_literal",e[e.Identifier_expected=1003]="Identifier_expected",e[e._0_expected=1005]="_0_expected",e[e.A_file_cannot_have_a_reference_to_itself=1006]="A_file_cannot_have_a_reference_to_itself",e[e.Trailing_comma_not_allowed=1009]="Trailing_comma_not_allowed",e[e.Unexpected_token=1012]="Unexpected_token",e[e.A_rest_parameter_must_be_last_in_a_parameter_list=1014]="A_rest_parameter_must_be_last_in_a_parameter_list",e[e.Parameter_cannot_have_question_mark_and_initializer=1015]="Parameter_cannot_have_question_mark_and_initializer",e[e.A_required_parameter_cannot_follow_an_optional_parameter=1016]="A_required_parameter_cannot_follow_an_optional_parameter",e[e.Statements_are_not_allowed_in_ambient_contexts=1036]="Statements_are_not_allowed_in_ambient_contexts",e[e.Initializers_are_not_allowed_in_ambient_contexts=1039]="Initializers_are_not_allowed_in_ambient_contexts",e[e._0_modifier_cannot_be_used_here=1042]="_0_modifier_cannot_be_used_here",e[e.A_rest_parameter_cannot_be_optional=1047]="A_rest_parameter_cannot_be_optional",e[e.A_rest_parameter_cannot_have_an_initializer=1048]="A_rest_parameter_cannot_have_an_initializer",e[e.A_set_accessor_must_have_exactly_one_parameter=1049]="A_set_accessor_must_have_exactly_one_parameter",e[e.A_set_accessor_parameter_cannot_have_an_initializer=1052]="A_set_accessor_parameter_cannot_have_an_initializer",e[e.A_get_accessor_cannot_have_parameters=1054]="A_get_accessor_cannot_have_parameters",e[e.Enum_member_must_have_initializer=1061]="Enum_member_must_have_initializer",e[e.Type_parameters_cannot_appear_on_a_constructor_declaration=1092]="Type_parameters_cannot_appear_on_a_constructor_declaration",e[e.Type_annotation_cannot_appear_on_a_constructor_declaration=1093]="Type_annotation_cannot_appear_on_a_constructor_declaration",e[e.An_accessor_cannot_have_type_parameters=1094]="An_accessor_cannot_have_type_parameters",e[e.A_set_accessor_cannot_have_a_return_type_annotation=1095]="A_set_accessor_cannot_have_a_return_type_annotation",e[e.Type_parameter_list_cannot_be_empty=1098]="Type_parameter_list_cannot_be_empty",e[e.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement=1104]="A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement",e[e.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement=1105]="A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement",e[e.A_return_statement_can_only_be_used_within_a_function_body=1108]="A_return_statement_can_only_be_used_within_a_function_body",e[e.Expression_expected=1109]="Expression_expected",e[e.Type_expected=1110]="Type_expected",e[e.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement=1113]="A_default_clause_cannot_appear_more_than_once_in_a_switch_statement",e[e.Duplicate_label_0=1114]="Duplicate_label_0",e[e.Octal_literals_are_not_allowed_in_strict_mode=1121]="Octal_literals_are_not_allowed_in_strict_mode",e[e.Digit_expected=1124]="Digit_expected",e[e.Hexadecimal_digit_expected=1125]="Hexadecimal_digit_expected",e[e.Unexpected_end_of_text=1126]="Unexpected_end_of_text",e[e.Invalid_character=1127]="Invalid_character",e[e._case_or_default_expected=1130]="_case_or_default_expected",e[e.A_declare_modifier_cannot_be_used_in_an_already_ambient_context=1038]="A_declare_modifier_cannot_be_used_in_an_already_ambient_context",e[e.Type_argument_expected=1140]="Type_argument_expected",e[e.String_literal_expected=1141]="String_literal_expected",e[e.Line_break_not_permitted_here=1142]="Line_break_not_permitted_here",e[e.Declaration_expected=1146]="Declaration_expected",e[e._const_declarations_must_be_initialized=1155]="_const_declarations_must_be_initialized",e[e.Unterminated_regular_expression_literal=1161]="Unterminated_regular_expression_literal",e[e.Interface_declaration_cannot_have_implements_clause=1176]="Interface_declaration_cannot_have_implements_clause",e[e.Binary_digit_expected=1177]="Binary_digit_expected",e[e.Octal_digit_expected=1178]="Octal_digit_expected",e[e.An_implementation_cannot_be_declared_in_ambient_contexts=1183]="An_implementation_cannot_be_declared_in_ambient_contexts",e[e.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive=1198]="An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive",e[e.Unterminated_Unicode_escape_sequence=1199]="Unterminated_Unicode_escape_sequence",e[e.Decorators_are_not_valid_here=1206]="Decorators_are_not_valid_here",e[e._abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration=1242]="_abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration",e[e.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract=1245]="Method_0_cannot_have_an_implementation_because_it_is_marked_abstract",e[e.A_class_may_only_extend_another_class=1311]="A_class_may_only_extend_another_class",e[e.A_parameter_property_cannot_be_declared_using_a_rest_parameter=1317]="A_parameter_property_cannot_be_declared_using_a_rest_parameter",e[e.Duplicate_identifier_0=2300]="Duplicate_identifier_0",e[e.Cannot_find_name_0=2304]="Cannot_find_name_0",e[e.Module_0_has_no_exported_member_1=2305]="Module_0_has_no_exported_member_1",e[e.Generic_type_0_requires_1_type_argument_s=2314]="Generic_type_0_requires_1_type_argument_s",e[e.Type_0_is_not_generic=2315]="Type_0_is_not_generic",e[e.Type_0_is_not_assignable_to_type_1=2322]="Type_0_is_not_assignable_to_type_1",e[e.Index_signature_is_missing_in_type_0=2329]="Index_signature_is_missing_in_type_0",e[e._this_cannot_be_referenced_in_current_location=2332]="_this_cannot_be_referenced_in_current_location",e[e._super_can_only_be_referenced_in_a_derived_class=2335]="_super_can_only_be_referenced_in_a_derived_class",e[e.Property_0_does_not_exist_on_type_1=2339]="Property_0_does_not_exist_on_type_1",e[e.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures=2349]="Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures",e[e.Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature=2351]="Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature",e[e.A_function_whose_declared_type_is_not_void_must_return_a_value=2355]="A_function_whose_declared_type_is_not_void_must_return_a_value",e[e.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access=2357]="The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access",e[e.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access=2364]="The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access",e[e.Operator_0_cannot_be_applied_to_types_1_and_2=2365]="Operator_0_cannot_be_applied_to_types_1_and_2",e[e._get_and_set_accessor_must_have_the_same_type=2380]="_get_and_set_accessor_must_have_the_same_type",e[e.Constructor_implementation_is_missing=2390]="Constructor_implementation_is_missing",e[e.Function_implementation_is_missing_or_not_immediately_following_the_declaration=2391]="Function_implementation_is_missing_or_not_immediately_following_the_declaration",e[e.Multiple_constructor_implementations_are_not_allowed=2392]="Multiple_constructor_implementations_are_not_allowed",e[e.Duplicate_function_implementation=2393]="Duplicate_function_implementation",e[e.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local=2395]="Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local",e[e.Type_0_has_no_property_1=2460]="Type_0_has_no_property_1",e[e.The_0_operator_cannot_be_applied_to_type_1=2469]="The_0_operator_cannot_be_applied_to_type_1",e[e.In_const_enum_declarations_member_initializer_must_be_constant_expression=2474]="In_const_enum_declarations_member_initializer_must_be_constant_expression",e[e.Export_declaration_conflicts_with_exported_declaration_of_0=2484]="Export_declaration_conflicts_with_exported_declaration_of_0",e[e.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property=2540]="Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property",e[e.The_target_of_an_assignment_must_be_a_variable_or_a_property_access=2541]="The_target_of_an_assignment_must_be_a_variable_or_a_property_access",e[e.Index_signature_in_type_0_only_permits_reading=2542]="Index_signature_in_type_0_only_permits_reading",e[e.Expected_0_arguments_but_got_1=2554]="Expected_0_arguments_but_got_1",e[e.Expected_at_least_0_arguments_but_got_1=2555]="Expected_at_least_0_arguments_but_got_1",e[e.Expected_0_type_arguments_but_got_1=2558]="Expected_0_type_arguments_but_got_1",e[e.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums=2651]="A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums",e[e.Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration=2673]="Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration",e[e.Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration=2674]="Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration",e[e.Namespace_0_has_no_exported_member_1=2694]="Namespace_0_has_no_exported_member_1",e[e.File_0_not_found=6054]="File_0_not_found",e[e.Numeric_separators_are_not_allowed_here=6188]="Numeric_separators_are_not_allowed_here",e[e.Multiple_consecutive_numeric_separators_are_not_permitted=6189]="Multiple_consecutive_numeric_separators_are_not_permitted"}(t.DiagnosticCode||(t.DiagnosticCode={})),t.diagnosticCodeToString=function(e){switch(e){case 100:return"Operation not supported.";case 101:return"Operation is unsafe.";case 102:return"User-defined: {0}";case 200:return"Conversion from type '{0}' to '{1}' requires an explicit cast.";case 201:return"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.";case 202:return"Type '{0}' cannot be changed to type '{1}'.";case 203:return"Type '{0}' cannot be reinterpreted as type '{1}'.";case 204:return"Basic type '{0}' cannot be nullable.";case 205:return"Cannot export a mutable global.";case 206:return"Compiling constant with non-constant initializer as mutable.";case 207:return"Unmanaged classes cannot extend managed classes and vice-versa.";case 208:return"Unmanaged classes cannot implement interfaces.";case 209:return"Invalid regular expression flags.";case 210:return"Implementation '{0}' must match the signature '{1}'.";case 211:return"Class '{0}' is sealed and cannot be extended.";case 212:return"Decorator '{0}' is not valid here.";case 213:return"Duplicate decorator.";case 214:return"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.";case 215:return"Optional parameter must have an initializer.";case 216:return"Constructor of class '{0}' must not require any arguments.";case 217:return"Function '{0}' cannot be inlined into itself.";case 218:return"Cannot access method '{0}' without calling it as it requires 'this' to be set.";case 1002:return"Unterminated string literal.";case 1003:return"Identifier expected.";case 1005:return"'{0}' expected.";case 1006:return"A file cannot have a reference to itself.";case 1009:return"Trailing comma not allowed.";case 1012:return"Unexpected token.";case 1014:return"A rest parameter must be last in a parameter list.";case 1015:return"Parameter cannot have question mark and initializer.";case 1016:return"A required parameter cannot follow an optional parameter.";case 1036:return"Statements are not allowed in ambient contexts.";case 1039:return"Initializers are not allowed in ambient contexts.";case 1042:return"'{0}' modifier cannot be used here.";case 1047:return"A rest parameter cannot be optional.";case 1048:return"A rest parameter cannot have an initializer.";case 1049:return"A 'set' accessor must have exactly one parameter.";case 1052:return"A 'set' accessor parameter cannot have an initializer.";case 1054:return"A 'get' accessor cannot have parameters.";case 1061:return"Enum member must have initializer.";case 1092:return"Type parameters cannot appear on a constructor declaration.";case 1093:return"Type annotation cannot appear on a constructor declaration.";case 1094:return"An accessor cannot have type parameters.";case 1095:return"A 'set' accessor cannot have a return type annotation.";case 1098:return"Type parameter list cannot be empty.";case 1104:return"A 'continue' statement can only be used within an enclosing iteration statement.";case 1105:return"A 'break' statement can only be used within an enclosing iteration or switch statement.";case 1108:return"A 'return' statement can only be used within a function body.";case 1109:return"Expression expected.";case 1110:return"Type expected.";case 1113:return"A 'default' clause cannot appear more than once in a 'switch' statement.";case 1114:return"Duplicate label '{0}'.";case 1121:return"Octal literals are not allowed in strict mode.";case 1124:return"Digit expected.";case 1125:return"Hexadecimal digit expected.";case 1126:return"Unexpected end of text.";case 1127:return"Invalid character.";case 1130:return"'case' or 'default' expected.";case 1038:return"A 'declare' modifier cannot be used in an already ambient context.";case 1140:return"Type argument expected.";case 1141:return"String literal expected.";case 1142:return"Line break not permitted here.";case 1146:return"Declaration expected.";case 1155:return"'const' declarations must be initialized.";case 1161:return"Unterminated regular expression literal.";case 1176:return"Interface declaration cannot have 'implements' clause.";case 1177:return"Binary digit expected.";case 1178:return"Octal digit expected.";case 1183:return"An implementation cannot be declared in ambient contexts.";case 1198:return"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.";case 1199:return"Unterminated Unicode escape sequence.";case 1206:return"Decorators are not valid here.";case 1242:return"'abstract' modifier can only appear on a class, method, or property declaration.";case 1245:return"Method '{0}' cannot have an implementation because it is marked abstract.";case 1311:return"A class may only extend another class.";case 1317:return"A parameter property cannot be declared using a rest parameter.";case 2300:return"Duplicate identifier '{0}'.";case 2304:return"Cannot find name '{0}'.";case 2305:return"Module '{0}' has no exported member '{1}'.";case 2314:return"Generic type '{0}' requires {1} type argument(s).";case 2315:return"Type '{0}' is not generic.";case 2322:return"Type '{0}' is not assignable to type '{1}'.";case 2329:return"Index signature is missing in type '{0}'.";case 2332:return"'this' cannot be referenced in current location.";case 2335:return"'super' can only be referenced in a derived class.";case 2339:return"Property '{0}' does not exist on type '{1}'.";case 2349:return"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.";case 2351:return"Cannot use 'new' with an expression whose type lacks a construct signature.";case 2355:return"A function whose declared type is not 'void' must return a value.";case 2357:return"The operand of an increment or decrement operator must be a variable or a property access.";case 2364:return"The left-hand side of an assignment expression must be a variable or a property access.";case 2365:return"Operator '{0}' cannot be applied to types '{1}' and '{2}'.";case 2380:return"'get' and 'set' accessor must have the same type.";case 2390:return"Constructor implementation is missing.";case 2391:return"Function implementation is missing or not immediately following the declaration.";case 2392:return"Multiple constructor implementations are not allowed.";case 2393:return"Duplicate function implementation.";case 2395:return"Individual declarations in merged declaration '{0}' must be all exported or all local.";case 2460:return"Type '{0}' has no property '{1}'.";case 2469:return"The '{0}' operator cannot be applied to type '{1}'.";case 2474:return"In 'const' enum declarations member initializer must be constant expression.";case 2484:return"Export declaration conflicts with exported declaration of '{0}'.";case 2540:return"Cannot assign to '{0}' because it is a constant or a read-only property.";case 2541:return"The target of an assignment must be a variable or a property access.";case 2542:return"Index signature in type '{0}' only permits reading.";case 2554:return"Expected {0} arguments, but got {1}.";case 2555:return"Expected at least {0} arguments, but got {1}.";case 2558:return"Expected {0} type arguments, but got {1}.";case 2651:return"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.";case 2673:return"Constructor of class '{0}' is private and only accessible within the class declaration.";case 2674:return"Constructor of class '{0}' is protected and only accessible within the class declaration.";case 2694:return"Namespace '{0}' has no exported member '{1}'.";case 6054:return"File '{0}' not found.";case 6188:return"Numeric separators are not allowed here.";case 6189:return"Multiple consecutive numeric separators are not permitted.";default:return""}}},function(e,t,r){"use strict";var n=this&&this.__extends||function(){var e=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).emitText()},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;function r(){Error.captureStackTrace?Error.captureStackTrace(this,r):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}function n(e){this.message=e||"assertion failed",Error.captureStackTrace?Error.captureStackTrace(this,n):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}t.ASC_TARGET=0,Object.defineProperties(t.i8=function(e){return e<<24>>24},{MIN_VALUE:{value:-128,writable:!1},MAX_VALUE:{value:127,writable:!1}}),Object.defineProperties(t.i16=function(e){return e<<16>>16},{MIN_VALUE:{value:-32768,writable:!1},MAX_VALUE:{value:32767,writable:!1}}),Object.defineProperties(t.i32=t.isize=function(e){return 0|e},{MIN_VALUE:{value:-2147483648,writable:!1},MAX_VALUE:{value:2147483647,writable:!1}}),Object.defineProperties(t.u8=function(e){return 255&e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:255,writable:!1}}),Object.defineProperties(t.u16=function(e){return 65535&e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:65535,writable:!1}}),Object.defineProperties(t.u32=t.usize=function(e){return e>>>0},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:4294967295,writable:!1}}),Object.defineProperties(t.bool=function(e){return!!e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:1,writable:!1}}),Object.defineProperties(t.f32=function(e){return Math.fround(e)},{MIN_VALUE:{value:Math.fround(-3.40282347e38),writable:!1},MAX_VALUE:{value:Math.fround(3.40282347e38),writable:!1},MIN_POSITIVE_VALUE:{value:Math.fround(1.175494351e-38),writable:!1},MIN_SAFE_INTEGER:{value:-16777215,writable:!1},MAX_SAFE_INTEGER:{value:16777215,writable:!1},EPSILON:{value:Math.fround(1.1920929e-7),writable:!1}}),Object.defineProperties(t.f64=function(e){return+e},{MIN_VALUE:{value:-1.7976931348623157e308,writable:!1},MAX_VALUE:{value:1.7976931348623157e308,writable:!1},MIN_POSITIVE_VALUE:{value:2.2250738585072014e-308,writable:!1},MIN_SAFE_INTEGER:{value:-9007199254740991,writable:!1},MAX_SAFE_INTEGER:{value:9007199254740991,writable:!1},EPSILON:{value:2.220446049250313e-16,writable:!1}}),t.clz=Math.clz32,t.ctz=function(e){var t=Math.clz32(e&-e);return e?31-t:t},t.popcnt=function(e){return 16843009*((e=(858993459&(e-=e>>>1&1431655765))+(e>>>2&858993459))+(e>>>4)&252645135)>>>24},t.rotl=function(e,t){return e<<(t&=31)|e>>>32-t},t.rotr=function(e,t){return e>>>(t&=31)|e<<32-t},t.abs=Math.abs,t.max=Math.max,t.min=Math.min,t.ceil=Math.ceil,t.floor=Math.floor,t.nearest=function(e){return.5===Math.abs(e-Math.trunc(e))?2*Math.round(.5*e):Math.round(e)},t.select=function(e,t,r){return r?e:t},t.sqrt=Math.sqrt,t.trunc=Math.trunc,t.copysign=function(e,t){return Math.abs(e)*Math.sign(t)},t.bswap=function(e){var t=e>>8&16711935,r=(16711935&e)<<8;return(t=(e=t|r)>>16&65535)|(r=(65535&e)<<16)},t.bswap16=function(e){return e<<8&65280|e>>8&255|4294901760&e},r.prototype=Object.create(Error.prototype),r.prototype.name="UnreachableError",r.prototype.message="unreachable",t.unreachable=function(){throw new r},n.prototype=Object.create(Error.prototype),n.prototype.name="AssertionError",t.assert=function(e,t){if(e)return e;throw new n(t)},t.changetype=function(e){return e},t.parseI32=function(e,t){return 0|parseInt(e,void 0)},String.fromCharCodes=function(e){return String.fromCharCode.apply(String,e)},String.fromCodePoints=function(e){return String.fromCodePoint.apply(String,e)},t.isInteger=Number.isInteger,t.isFloat=function(e){return"number"==typeof e},t.isReference=function(e){return"object"==typeof e||"string"==typeof e},t.isString=function(e){return"string"==typeof e||e instanceof String},t.isArray=Array.isArray,t.unchecked=function(e){return e},t.fmod=function(e,t){return e%t},t.fmodf=function(e,t){return Math.fround(e%t)},t.JSMath=Math,t.memory=(()=>{var e=new Uint8Array(0),r=0;return{allocate:t.__memory_allocate||function(t){if(!(t>>>=0))return 0;if(r+t>e.length){var n=e;(e=new Uint8Array(Math.max(65536,e.length+t,2*e.length))).set(n)}var i=r;return 7&(r+=t)&&(r=1+(7|r)),i},free:t.__memory_free||function(e){},copy:t.__memory_copy||function(t,r,n){e.copyWithin(t,r,r+n)}}})(),t.store=t.__store||function(e,t,r){HEAP[e+(0|r)]=t},t.load=t.__load||function(e,t){return HEAP[e+(0|t)]}}).call(this,r(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.createCallImport(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(0),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}}return I[v]=m.addFunction(t.internalName+"~gc",e.ensureFunctionType(null,s.Type.void,y.usizeType),null,m.createBlock(null,T)),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,c=null;e.skip(s.Token.COLON)&&(c=this.parseType(e));var p=null;if(e.skip(s.Token.EQUALS)){if(a&i.CommonFlags.AMBIENT&&this.error(o.DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,e.range()),!(p=this.parseExpression(e,2)))return null}else a&i.CommonFlags.CONST?a&i.CommonFlags.AMBIENT||this.error(o.DiagnosticCode._const_declarations_must_be_initialized,n.range):c||this.error(o.DiagnosticCode.Type_expected,e.range(e.pos));return l.Node.createVariableDeclaration(n,c,p,r,a,s.Range.join(n.range,e.range()))},t.prototype.parseEnum=function(e,t,r,n){if(e.next()!=s.Token.IDENTIFIER)return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var a=l.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.next()!=s.Token.OPENBRACE)return this.error(o.DiagnosticCode._0_expected,e.range(),"{"),null;for(var c=new Array;!e.skip(s.Token.CLOSEBRACE);){var p=this.parseEnumValue(e,i.CommonFlags.NONE);if(!p)return null;if(c.push(p),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEBRACE))break;return this.error(o.DiagnosticCode._0_expected,e.range(),"}"),null}}var u=l.Node.createEnumDeclaration(a,c,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),u},t.prototype.parseEnumValue=function(e,t){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var r=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),n=null;return e.skip(s.Token.EQUALS)&&!(n=this.parseExpression(e,2))?null:l.Node.createEnumValueDeclaration(r,n,t,s.Range.join(r.range,e.range()))},t.prototype.parseReturn=function(e){var t=null;if(e.peek(!0)!=s.Token.SEMICOLON&&e.nextToken!=s.Token.CLOSEBRACE&&!e.nextTokenOnNewLine&&!(t=this.parseExpression(e)))return null;var r=l.Node.createReturnStatement(t,e.range());return e.skip(s.Token.SEMICOLON),r},t.prototype.parseTypeParameters=function(e){for(var t=new Array;!e.skip(s.Token.GREATERTHAN);){var r=this.parseTypeParameter(e);if(!r)return null;if(t.push(r),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.GREATERTHAN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),">"),null}}return 0===t.length&&this.error(o.DiagnosticCode.Type_parameter_list_cannot_be_empty,e.range()),t},t.prototype.parseTypeParameter=function(e){if(e.next()==s.Token.IDENTIFIER){var t=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(s.Token.EXTENDS)){var n=this.parseType(e);if(!n)return null;if(n.kind!=l.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,n.range),null;r=n}return l.Node.createTypeParameter(t,r,s.Range.join(t.range,e.range()))}return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseParameters=function(e,t){void 0===t&&(t=!1);var r=new Array,n=null,i=!1,a=!1,c=null;if(this.parseParametersThis=null,e.skip(s.Token.THIS)){if(!e.skip(s.Token.COLON))return this.error(o.DiagnosticCode._0_expected,e.range(),":"),null;if(!(c=this.parseType(e)))return null;if(c.kind==l.NodeKind.TYPE?this.parseParametersThis=c:this.error(o.DiagnosticCode.Operation_not_supported,c.range),!e.skip(s.Token.COMMA))return e.skip(s.Token.CLOSEPAREN)?r:(this.error(o.DiagnosticCode._0_expected,e.range(),")"),null)}for(;!e.skip(s.Token.CLOSEPAREN);){var p=this.parseParameter(e,t);if(!p)return null;switch(n&&!a&&(this.error(o.DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,n.name.range),a=!0),p.parameterKind){default:i&&this.error(o.DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,p.name.range);break;case l.ParameterKind.OPTIONAL:i=!0;break;case l.ParameterKind.REST:n=p}if(r.push(p),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEPAREN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),")"),null}}return r},t.prototype.parseParameter=function(e,t){void 0===t&&(t=!1);var r=!1,n=!1,a=null,c=i.CommonFlags.NONE;if(t&&(e.skip(s.Token.PUBLIC)?(a=e.range(),c|=i.CommonFlags.PUBLIC):e.skip(s.Token.PROTECTED)?(a=e.range(),c|=i.CommonFlags.PROTECTED):e.skip(s.Token.PRIVATE)&&(a=e.range(),c|=i.CommonFlags.PRIVATE),e.peek()==s.Token.READONLY)){var p=e.mark();e.next(),e.peek()!=s.Token.COLON?(e.discard(p),a||(a=e.range()),c|=i.CommonFlags.READONLY):e.reset(p)}if(e.skip(s.Token.DOT_DOT_DOT)&&(c?this.error(o.DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,e.range()):a=e.range(),r=!0),e.skipIdentifier()){r||(a=e.range());var u=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),h=null;if((n=e.skip(s.Token.QUESTION))&&r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,u.range),e.skip(s.Token.COLON)){if(!(h=this.parseType(e)))return null}else h=l.Node.createOmittedType(e.range(e.pos));var d=null;if(e.skip(s.Token.EQUALS)&&(r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,u.range),n?this.error(o.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,u.range):n=!0,!(d=this.parseExpression(e,2))))return null;var _=l.Node.createParameter(u,h,d,r?l.ParameterKind.REST:n?l.ParameterKind.OPTIONAL:l.ParameterKind.DEFAULT,s.Range.join(a,e.range()));return _.flags|=c,_}return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseFunction=function(e,t,r,n){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range(e.pos)),null;var a=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),c=-1,p=null;if(e.skip(s.Token.LESSTHAN)){if(c=e.tokenPos,!(p=this.parseTypeParameters(e)))return null;t|=i.CommonFlags.GENERIC}if(!e.skip(s.Token.OPENPAREN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"("),null;c<0&&(c=e.tokenPos);var u=this.parseParameters(e);if(!u)return null;var h=this.parseParametersThis,d=0!=(t&i.CommonFlags.SET);d&&(1!=u.length&&this.error(o.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,a.range),u.length&&u[0].initializer&&this.error(o.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,a.range)),t&i.CommonFlags.GET&&u.length&&this.error(o.DiagnosticCode.A_get_accessor_cannot_have_parameters,a.range);var _=null;if(e.skip(s.Token.COLON)&&!(_=this.parseType(e,!0,d)))return null;_||(_=l.Node.createOmittedType(e.range(e.pos)),d||this.error(o.DiagnosticCode.Type_expected,_.range));var m=l.Node.createSignature(u,_,h,!1,e.range(c,e.pos)),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;var n,i=r.range.start;if(l.nodeIsCallable(r.kind))for(var a=null;e.skip(s.Token.OPENPAREN)||l.nodeIsGenericCallable(r.kind)&&null!==(a=this.tryParseTypeArgumentsBeforeArguments(e));){var c=this.parseArguments(e);if(!c)return null;r=l.Node.createCallExpression(r,a,c,e.range(i,e.pos))}for(var p,d=null;(p=u(n=e.peek()))>=t;)switch(e.next(),n){case s.Token.AS:var _=this.parseType(e);if(!_)return null;r=l.Node.createAssertionExpression(l.AssertionKind.AS,r,_,e.range(i,e.pos));break;case s.Token.INSTANCEOF:var m=this.parseType(e);if(!m)return null;r=l.Node.createInstanceOfExpression(r,m,e.range(i,e.pos));break;case s.Token.OPENBRACKET:if(!(d=this.parseExpression(e)))return null;if(!e.skip(s.Token.CLOSEBRACKET))return this.error(o.DiagnosticCode._0_expected,e.range(),"]"),null;r=l.Node.createElementAccessExpression(r,d,e.range(i,e.pos));break;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:r.kind!=l.NodeKind.IDENTIFIER&&r.kind!=l.NodeKind.ELEMENTACCESS&&r.kind!=l.NodeKind.PROPERTYACCESS&&this.error(o.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,r.range),r=l.Node.createUnaryPostfixExpression(n,r,e.range(i,e.pos));break;case s.Token.QUESTION:var g=this.parseExpression(e);if(!g)return null;if(!e.skip(s.Token.COLON))return this.error(o.DiagnosticCode._0_expected,e.range(),":"),null;var y=this.parseExpression(e,t>1?2:1);if(!y)return null;r=l.Node.createTernaryExpression(r,g,y,e.range(i,e.pos));break;case s.Token.COMMA:var E=[r];do{if(!(r=this.parseExpression(e,2)))return null;E.push(r)}while(e.skip(s.Token.COMMA));r=l.Node.createCommaExpression(E,e.range(i,e.pos));break;default:if(!(d=this.parseExpression(e,h(n)?p:p+1)))return null;if(n==s.Token.DOT)if(d.kind==l.NodeKind.IDENTIFIER)r=l.Node.createPropertyAccessExpression(r,d,e.range(i,e.pos));else{if(d.kind!=l.NodeKind.CALL)return this.error(o.DiagnosticCode.Identifier_expected,d.range),null;var f=d;if(f.expression.kind!=l.NodeKind.IDENTIFIER)return this.error(o.DiagnosticCode.Identifier_expected,f.expression.range),null;f.expression=l.Node.createPropertyAccessExpression(r,f.expression,e.range(i,e.pos)),r=f}else r=l.Node.createBinaryExpression(n,r,d,e.range(i,e.pos))}return r},t.prototype.skipStatement=function(e){for(e.peek(!0),e.nextTokenOnNewLine&&e.next();;){var t=e.peek(!0);if(t==s.Token.ENDOFFILE||t==s.Token.SEMICOLON){e.next();break}if(e.nextTokenOnNewLine)break;switch(e.next()){case s.Token.IDENTIFIER:e.readIdentifier();break;case s.Token.STRINGLITERAL:e.readString();break;case s.Token.INTEGERLITERAL:e.readInteger();break;case s.Token.FLOATLITERAL:e.readFloat()}}},t.prototype.skipBlock=function(e){var t=1,r=!0;do{switch(e.next()){case s.Token.ENDOFFILE:this.error(o.DiagnosticCode._0_expected,e.range(),"}"),r=!1;break;case s.Token.OPENBRACE:++t;break;case s.Token.CLOSEBRACE:--t||(r=!1);break;case s.Token.IDENTIFIER:e.readIdentifier();break;case s.Token.STRINGLITERAL:e.readString();break;case s.Token.INTEGERLITERAL:e.readInteger();break;case s.Token.FLOATLITERAL:e.readFloat()}}while(r)},t}(o.DiagnosticEmitter);function u(e){switch(e){case s.Token.COMMA:return 1;case s.Token.EQUALS:case s.Token.PLUS_EQUALS:case s.Token.MINUS_EQUALS:case s.Token.ASTERISK_ASTERISK_EQUALS:case s.Token.ASTERISK_EQUALS:case s.Token.SLASH_EQUALS:case s.Token.PERCENT_EQUALS:case s.Token.LESSTHAN_LESSTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.AMPERSAND_EQUALS:case s.Token.CARET_EQUALS:case s.Token.BAR_EQUALS:return 4;case s.Token.QUESTION:return 5;case s.Token.BAR_BAR:return 6;case s.Token.AMPERSAND_AMPERSAND:return 7;case s.Token.BAR:return 8;case s.Token.CARET:return 9;case s.Token.AMPERSAND:return 10;case s.Token.EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS:case s.Token.EQUALS_EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS_EQUALS:return 11;case s.Token.AS:case s.Token.IN:case s.Token.INSTANCEOF:case s.Token.LESSTHAN:case s.Token.GREATERTHAN:case s.Token.LESSTHAN_EQUALS:case s.Token.GREATERTHAN_EQUALS:return 12;case s.Token.LESSTHAN_LESSTHAN:case s.Token.GREATERTHAN_GREATERTHAN:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:return 13;case s.Token.PLUS:case s.Token.MINUS:return 14;case s.Token.ASTERISK:case s.Token.SLASH:case s.Token.PERCENT:return 15;case s.Token.ASTERISK_ASTERISK:return 16;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:return 18;case s.Token.DOT:case s.Token.NEW:case s.Token.OPENBRACKET:return 20}return 0}function h(e){switch(e){case s.Token.EQUALS:case s.Token.PLUS_EQUALS:case s.Token.MINUS_EQUALS:case s.Token.ASTERISK_ASTERISK_EQUALS:case s.Token.ASTERISK_EQUALS:case s.Token.SLASH_EQUALS:case s.Token.PERCENT_EQUALS:case s.Token.LESSTHAN_LESSTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.AMPERSAND_EQUALS:case s.Token.CARET_EQUALS:case s.Token.BAR_EQUALS:case s.Token.QUESTION:case s.Token.ASTERISK_ASTERISK:return!0;default:return!1}}t.Parser=p,function(e){e[e.NONE=0]="NONE",e[e.COMMA=1]="COMMA",e[e.SPREAD=2]="SPREAD",e[e.YIELD=3]="YIELD",e[e.ASSIGNMENT=4]="ASSIGNMENT",e[e.CONDITIONAL=5]="CONDITIONAL",e[e.LOGICAL_OR=6]="LOGICAL_OR",e[e.LOGICAL_AND=7]="LOGICAL_AND",e[e.BITWISE_OR=8]="BITWISE_OR",e[e.BITWISE_XOR=9]="BITWISE_XOR",e[e.BITWISE_AND=10]="BITWISE_AND",e[e.EQUALITY=11]="EQUALITY",e[e.RELATIONAL=12]="RELATIONAL",e[e.SHIFT=13]="SHIFT",e[e.ADDITIVE=14]="ADDITIVE",e[e.MULTIPLICATIVE=15]="MULTIPLICATIVE",e[e.EXPONENTIATED=16]="EXPONENTIATED",e[e.UNARY_PREFIX=17]="UNARY_PREFIX",e[e.UNARY_POSTFIX=18]="UNARY_POSTFIX",e[e.CALL=19]="CALL",e[e.MEMBERACCESS=20]="MEMBERACCESS",e[e.GROUPING=21]="GROUPING"}(t.Precedence||(t.Precedence={}))}])}); //# sourceMappingURL=assemblyscript.js.map \ No newline at end of file diff --git a/dist/assemblyscript.js.map b/dist/assemblyscript.js.map index 1fc2f847..2ab7c4bc 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","nodeIsGenericCallable","Node","parent","flags","NONE","is","flag","isAny","set","createType","typeArguments","isNullable","type","TypeNode","setParent","createOmittedType","createIdentifierExpression","createTypeParameter","extendsType","elem","TypeParameterNode","createParameter","initializer","ParameterNode","parameterKind","createSignature","parameters","returnType","explicitThisType","sig","SignatureNode","createDecorator","args","stmt","DecoratorNode","arguments","decoratorKind","decoratorNameToKind","createComment","node","CommentNode","commentKind","expr","IdentifierExpression","createEmptyIdentifierExpression","createArrayLiteralExpression","elements","ArrayLiteralExpression","elementExpressions","nodes","k","setParentIfNotNull","createAssertionExpression","assertionKind","expression","toType","AssertionExpression","createBinaryExpression","operator","left","right","BinaryExpression","createCallExpression","typeArgs","CallExpression","createClassExpression","declaration","ClassExpression","createCommaExpression","expressions","CommaExpression","createConstructorExpression","ConstructorExpression","createElementAccessExpression","element","ElementAccessExpression","elementExpression","createFalseExpression","FalseExpression","createFloatLiteralExpression","FloatLiteralExpression","createFunctionExpression","FunctionExpression","ARROW","createInstanceOfExpression","isType","InstanceOfExpression","createIntegerLiteralExpression","IntegerLiteralExpression","createNewExpression","NewExpression","createNullExpression","NullExpression","createObjectLiteralExpression","names","values","ObjectLiteralExpression","createParenthesizedExpression","ParenthesizedExpression","createPropertyAccessExpression","PropertyAccessExpression","createRegexpLiteralExpression","pattern","RegexpLiteralExpression","patternFlags","createTernaryExpression","condition","ifThen","ifElse","TernaryExpression","createStringLiteralExpression","StringLiteralExpression","createSuperExpression","SuperExpression","createThisExpression","ThisExpression","createTrueExpression","TrueExpression","createUnaryPostfixExpression","operand","UnaryPostfixExpression","createUnaryPrefixExpression","UnaryPrefixExpression","createBlockStatement","statements","BlockStatement","createBreakStatement","label","BreakStatement","createClassDeclaration","identifier","typeParameters","implementsTypes","members","decorators","ClassDeclaration","createContinueStatement","ContinueStatement","createDoStatement","statement","DoStatement","createEmptyStatement","EmptyStatement","createEnumDeclaration","EnumDeclaration","createEnumValueDeclaration","EnumValueDeclaration","createExportStatement","path","ExportStatement","normalizePath","startsWith","resolvePath","internalPath","mangleInternalPath","createExportImportStatement","externalName","ExportImportStatement","createExportMember","ExportMember","createExpressionStatement","ExpressionStatement","createIfStatement","ifTrue","ifFalse","IfStatement","createImportStatement","decls","ImportStatement","declarations","namespaceName","createImportStatementWithWildcard","createImportDeclaration","ImportDeclaration","createInterfaceDeclaration","InterfaceDeclaration","createFieldDeclaration","FieldDeclaration","createForStatement","incrementor","ForStatement","createFunctionDeclaration","signature","body","FunctionDeclaration","createMethodDeclaration","MethodDeclaration","createNamespaceDeclaration","NamespaceDeclaration","createReturnStatement","ReturnStatement","createSwitchStatement","cases","SwitchStatement","createSwitchCase","SwitchCase","createThrowStatement","ThrowStatement","createTryStatement","catchVariable","catchStatements","finallyStatements","TryStatement","createTypeDeclaration","alias","TypeDeclaration","createVariableStatement","VariableStatement","createVariableDeclaration","VariableDeclaration","createVoidStatement","VoidStatement","createWhileStatement","WhileStatement","CommonTypeNode","_super","__extends","_this","apply","TYPE","TYPEPARAMETER","ParameterKind","PARAMETER","implicitFieldDeclaration","DecoratorKind","SIGNATURE","nameStr","BUILTIN","EXTERNAL","GLOBAL","INLINE","OPERATOR","SEALED","UNMANAGED","propStr","OPERATOR_BINARY","OPERATOR_PREFIX","OPERATOR_POSTFIX","CUSTOM","DECORATOR","CommentKind","COMMENT","Expression","LiteralKind","LiteralExpression","literalKind","ARRAY","AssertionKind","ASSERTION","BINARY","CLASS","COMMA","CONSTRUCTOR","FLOAT","FUNCTION","INSTANCEOF","INTEGER","NEW","OBJECT","PARENTHESIZED","REGEXP","TERNARY","STRING","SUPER","THIS","UnaryExpression","UNARYPOSTFIX","UNARYPREFIX","isLastStatement","BLOCK","FUNCTIONDECLARATION","METHODDECLARATION","SourceKind","Statement","Source","SOURCE","tokenizer","debugInfoIndex","exportPaths","sourceKind","pos","lastIndexOf","simplePath","ENTRY","LIBRARY","DeclarationStatement","cachedProgramLevelInternalName","cachedFileLevelInternalName","mangleInternalName","VARIABLE","NAMESPACEDECLARATION","EXPORT","isTopLevelExport","CLASSDECLARATION","STATIC","needsExplicitExport","member","VariableLikeDeclarationStatement","BREAK","CONTINUE","DO","EMPTY","ENUMDECLARATION","ENUMVALUEDECLARATION","EXPORTIMPORT","EXPORTMEMBER","EXPRESSION","FIELDDECLARATION","parameterIndex","FOR","IF","IMPORTDECLARATION","IMPORT","INTERFACEDECLARATION","RETURN","SWITCHCASE","SWITCH","THROW","TRY","TYPEDECLARATION","VARIABLEDECLARATION","VOID","WHILE","asGlobal","endsWith","findDecorator","decorator","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","_BinaryenCallImportId","_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","_BinaryenPageSize","_BinaryenCurrentMemory","_BinaryenGrowMemory","_BinaryenHasFeature","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","createCallImport","_BinaryenCallImport","createCallIndirect","typeName","_BinaryenCallIndirect","createUnreachable","_BinaryenUnreachable","addGlobal","mutable","_BinaryenAddGlobal","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","removeImport","_BinaryenRemoveImport","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","MAX_MEMORY_WASM32","MAX_MEMORY_WASM64","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","skipIdentifierName","mark","state","reusableState","State","discard","reset","readIdentifier","quote","Unterminated_string_literal","readEscapeSequence","Unexpected_end_of_text","readExtendedUnicodeEscape","readUnicodeEscape","fromCharCode","readRegexpPattern","escaped","Unterminated_regular_expression_literal","readRegexpFlags","Invalid_regular_expression_flags","readInteger","readHexInteger","readBinaryInteger","readOctalInteger","isOctalDigit","Octal_literals_are_not_allowed_in_strict_mode","readDecimalInteger","i64_16","sepEnd","i64_add","i64_mul","Numeric_separators_are_not_allowed_here","Multiple_consecutive_numeric_separators_are_not_permitted","Hexadecimal_digit_expected","i64_10","Digit_expected","i64_8","Octal_digit_expected","i64_2","i64_1","Binary_digit_expected","readFloat","readDecimalFloat","parseFloat","readHexFloat","remain","value32","invalid","An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive","Unterminated_Unicode_escape_sequence","finish","builtins_1","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","functionTableExported","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","nativeOne","setValue","NegF32","NegF64","makeIsFalseish","ExtendI8ToI32","ExtendI16ToI32","fieldType","nativeFieldType","fieldDeclaration","parentElement","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","emitText","emitAsmjs","Binaryen","__memory_allocate","_malloc","__memory_free","_free","__memory_copy","_memmove","__store","HEAPU8","__load","globalScope","UnreachableError","captureStackTrace","stack","AssertionError","ASC_TARGET","defineProperties","writable","Math","fround","MIN_POSITIVE_VALUE","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","EPSILON","clz32","abs","floor","trunc","round","sqrt","x","y","sign","isTrueish","radix","parseInt","undefined","fromCodePoint","Number","isInteger","isArray","HEAP","HEAP_OFFSET","oldHeap","copy","dest","src","copyWithin","F64","Float64Array","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","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","CallImport","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","Initializers_are_not_allowed_in_ambient_contexts","parseExpression","parseEnumValue","parseReturn","parseTypeParameters","typeParameter","parseTypeParameter","Type_parameter_list_cannot_be_empty","parseParameters","seenRest","seenOptional","reportedRest","parseParameter","A_rest_parameter_must_be_last_in_a_parameter_list","A_required_parameter_cannot_follow_an_optional_parameter","isRest","isOptional","startRange","accessFlags","A_parameter_property_cannot_be_declared_using_a_rest_parameter","A_rest_parameter_cannot_have_an_initializer","Parameter_cannot_have_question_mark_and_initializer","signatureStart","isSetter","A_set_accessor_must_have_exactly_one_parameter","A_set_accessor_parameter_cannot_have_an_initializer","A_get_accessor_cannot_have_parameters","parseBlockStatement","parseFunctionExpression","isArrow","parseFunctionExpressionCommon","Interface_declaration_cannot_have_implements_clause","parseClassMember","parseClassExpression","staticStart","staticEnd","abstractStart","abstractEnd","readonlyStart","readonlyEnd","setEnd","typeParametersStart","Type_parameters_cannot_appear_on_a_constructor_declaration","An_accessor_cannot_have_type_parameters","Type_annotation_cannot_appear_on_a_constructor_declaration","A_set_accessor_cannot_have_a_return_type_annotation","Method_0_cannot_have_an_implementation_because_it_is_marked_abstract","retMethod","Constructor_implementation_is_missing","retField","parseExportMember","asIdentifier","skipFrom","parseImportDeclaration","topLevel","parseBreak","parseContinue","parseDoStatement","parseForStatement","parseIfStatement","A_return_statement_can_only_be_used_within_a_function_body","parseSwitchStatement","parseThrowStatement","parseTryStatement","parseVoidStatement","parseWhileStatement","parseExpressionStatement","elseStatement","case_","parseSwitchCase","_case_or_default_expected","parseExpressionStart","precedence","determinePrecedenceStart","The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access","again","startPos_1","QUOTED","PREFIX","regexpPattern","Expression_expected","tryParseTypeArgumentsBeforeArguments","nextPrecedence","determinePrecedence","commaExprs","isRightAssociative","propertyCall","skipBlock","depth","Precedence"],"mappings":"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M,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,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,EAFAvN,EAAK,EACLC,EAAKx4C,EAAIhuB,OAGNumE,EAAK,EAAIC,GAAI,CAGlB,GAFAsN,EAAMvN,GAAMC,EAAKD,GAAM,EAEnBv4C,EADJ8lD,GAAOA,EAAM,IACGl1E,GAAQA,GAAQovB,EAAI8lD,EAAM,GACxC,OAAO,EAELl1E,EAAOovB,EAAI8lD,GACbtN,EAAKsN,EAELvN,EAAKuN,EAAM,EAGf,OAAO,kFCtWT,IAAMC,EAAS,GAMf,SAAgBtoE,EAAcF,GAK5B,IAJA,IAiBI09C,EAjBAt1C,EAAM,EACN5T,EAAMwL,EAAKvL,OAGR2T,EAAM,EAAI5T,GACK,IAApBwL,EAAKnL,WAAWuT,IAChBpI,EAAKnL,WAAWuT,EAAM,IAAMogE,GAE5BpgE,GAAO,EAUT,KAPIA,EAAM,GAAK5T,EAAMwL,EAAKvL,UACxBuL,EAAOA,EAAKjL,UAAUqT,EAAK5T,GAC3BA,GAAO4T,EACPA,EAAM,GAIDA,EAAM,EAAI5T,GAAK,CAIpB,GAHAkpD,GAAQ,EAIN19C,EAAKnL,WAAWuT,IAAQogE,GACA,IAAxBxoE,EAAKnL,WAAWuT,EAAM,GACtB,CAGA,IADAs1C,EAAQt1C,EAAM,GAAK5T,IAEjB4T,EAAM,EAAI5T,GACVwL,EAAKnL,WAAWuT,EAAM,IAAMogE,EAC5B,CACAxoE,EAAO09C,EACH19C,EAAKjL,UAAU,EAAGqT,GAClBpI,EAAKjL,UAAU,EAAGqT,GAAOpI,EAAKjL,UAAUqT,EAAM,GAClD5T,GAAO,EACP,SAKF,IADAkpD,EAAQt1C,EAAM,GAAK5T,IACkB,IAAxBwL,EAAKnL,WAAWuT,EAAM,IACjCA,EAAM,EAAI5T,GACc,IAAxBwL,EAAKnL,WAAWuT,EAAM,IACtBpI,EAAKnL,WAAWuT,EAAM,IAAMogE,EAC5B,CAGA,IADA,IAAIC,EAAOrgE,IACFqgE,GAAQ,GACf,GAAIzoE,EAAKnL,WAAW4zE,IAASD,EAAW,CAClCpgE,EAAMqgE,GAAQ,GACS,IAAzBzoE,EAAKnL,WAAW4zE,EAAO,IACE,IAAzBzoE,EAAKnL,WAAW4zE,EAAO,KAEvBzoE,EAAO09C,EACH19C,EAAKjL,UAAU,EAAG0zE,GAClBzoE,EAAKjL,UAAU,EAAG0zE,GAAQzoE,EAAKjL,UAAUqT,EAAM,GACnD5T,GAAO4T,EAAM,EAAIqgE,EACjBrgE,EAAMqgE,EAAO,GAEf,MAKJ,GAAIA,EAAO,GAAKrgE,EAAM,IACT,GAAPA,GACgB,IAAlBpI,EAAKnL,WAAW,IACE,IAAlBmL,EAAKnL,WAAW,IAChB,CAEAL,GADAwL,EAAOA,EAAKjL,UAAUqT,EAAM,IACjB3T,OACX,WAKR2T,IAEF,OAAO5T,EAAM,EAAIwL,EAAO,IAc1B,SAAgB0oE,EAAQx0E,GAEtB,IADA,IAAIkU,EAAMlU,EAAeO,SAChB2T,EAAM,GACb,GAAIlU,EAAeW,WAAWuT,IAAQogE,EACpC,OAAOt0E,EAAea,UAAU,EAAGqT,GAGvC,MAAO,IArGTvZ,EAAAqR,gBAoFArR,EAAAuR,YAAA,SAA4BlM,EAAwBy0E,GAClD,OAAIz0E,EAAeiM,WAAW,QACrBjM,EAEFgM,EACLwoE,EAAQC,GAAU1+B,OAAOmM,aAAaoyB,GAAat0E,IAKvDrF,EAAA65E,yFCxGA,IAAME,EAAW,KACXC,EAAW,OACXC,EAAW,WAGjBj6E,EAAAk6E,OAAA,SAAuBj0E,EAAcwqC,GACnC,KAAOA,GAAS,GACdxqC,EAAGE,KAAK8zE,GACRxpC,GAAS,EAEPA,GAAS,IACXxqC,EAAGE,KAAK6zE,GACRvpC,GAAS,GAEPA,GACFxqC,EAAGE,KAAK4zE,kCCQZ,SAAgBI,EAAQ30C,EAAoBC,GAC1C,OAAOD,EAAOC,GACPD,EAAOC,EAAS,IAAM,EACtBD,EAAOC,EAAS,IAAM,GACtBD,EAAOC,EAAS,IAAM,GAI/B,SAAgBg8B,EAAS7/D,EAAY4jC,EAAoBC,GACvDD,EAAOC,GAAc7jC,EACrB4jC,EAAOC,EAAS,GAAK7jC,IAAU,EAC/B4jC,EAAOC,EAAS,GAAK7jC,IAAU,GAC/B4jC,EAAOC,EAAS,GAAK7jC,IAAU,GAIjC,SAAgBw4E,EAAQ50C,EAAoBC,GAC1C,IAAI0mC,EAAKgO,EAAQ30C,EAAQC,GACrB2mC,EAAK+N,EAAQ30C,EAAQC,EAAS,GAClC,OAAOxjB,QAAQkqD,EAAIC,oDAzCrBpsE,EAAAq6E,OAAA,SAAuB70C,EAAoBC,GACzC,OAAOD,EAAOC,IAIhBzlC,EAAAqiE,QAAA,SAAwBzgE,EAAY4jC,EAAoBC,GACtDD,EAAOC,GAAU7jC,GAInB5B,EAAAs6E,QAAA,SAAwB90C,EAAoBC,GAC1C,OAAOD,EAAOC,GACPD,EAAOC,EAAS,IAAM,GAI/BzlC,EAAA2hE,SAAA,SAAyB//D,EAAY4jC,EAAoBC,GACvDD,EAAOC,GAAc7jC,EACrB4jC,EAAOC,EAAS,GAAK7jC,IAAU,GAIjC5B,EAAAm6E,UAQAn6E,EAAAyhE,WAQAzhE,EAAAo6E,UAOAp6E,EAAAsiE,SAAA,SAAyB1gE,EAAY4jC,EAAoBC,GACvDg8B,EAAS/xB,QAAQ9tC,GAAQ4jC,EAAQC,GACjCg8B,EAAS9xB,SAAS/tC,GAAQ4jC,EAAQC,EAAS,IAI7CzlC,EAAAu6E,QAAA,SAAwB/0C,EAAoBC,GAC1C,OAAOomC,WAAWsO,EAAQ30C,EAAQC,KAIpCzlC,EAAAuiE,SAAA,SAAyB3gE,EAAY4jC,EAAoBC,GACvDg8B,EAASmK,WAAWhqE,GAAQ4jC,EAAQC,IAItCzlC,EAAAw6E,QAAA,SAAwBh1C,EAAoBC,GAC1C,OAAOsmC,WAAWqO,EAAQ50C,EAAQC,KAIpCzlC,EAAAwiE,SAAA,SAAyB5gE,EAAY4jC,EAAoBC,GACvD,IAAIg1C,EAAW3O,WAAWlqE,GAC1B6/D,EAAS/xB,QAAQ+qC,GAAWj1C,EAAQC,GACpCg8B,EAAS9xB,SAAS8qC,GAAWj1C,EAAQC,EAAS,mFCnEhD,IAAA5K,EAAAp6B,EAAA,GAOAi6E,EAAAj6E,EAAA,IAIAk6E,EAAAl6E,EAAA,IAKA8b,EAAA9b,EAAA,GAyCoCT,EAAA46E,iBAtClCr+D,EAAAlW,wBAOF,IAAAw0E,EAAAp6E,EAAA,IASAT,EAAA86E,UAAA,SAA0Bp1E,EAAcyL,EAAc+W,EACpD6yD,GAIA,YALoD,IAAA7yD,OAAA,QACpD,IAAA6yD,MAAA,MAEKA,IAAQA,EAAS,IAAIF,EAAAG,QAC1BD,EAAOD,UAAUp1E,EAAMyL,EAAM+W,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,EAAAgvB,SAIb7pD,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,EAAkB+oC,GAChD/oC,EAAQ+oC,aAAeA,GAIzB/pD,EAAA27E,eAAA,SAA+B36D,EAAkBgpC,GAC/ChpC,EAAQgpC,YAAcA,GAIxBhqD,EAAA47E,aAAA,SAA6B56D,EAAkBqP,GAC7CrP,EAAQqP,UAAYA,GAItBrwB,EAAA67E,cAAA,SAA8B76D,EAAkBqB,GAC9CrB,EAAQqB,WAAaA,GAIvBriB,EAAA87E,eAAA,SAA+B96D,EAAkB9f,EAAcyT,GAC7D,IAAI2Q,EAAgBtE,EAAQsE,cACvBA,IAAetE,EAAQsE,cAAgBA,EAAgB,IAAInG,KAChEmG,EAAc/c,IAAIrH,EAAMyT,IAIb3U,EAAA+7E,uBAAsB,EAEtB/7E,EAAAg8E,uBAAsB,EAGnCh8E,EAAAi8E,cAAA,SAA8Bj7D,EAAkBkpC,GAC9ClpC,EAAQipC,UAAYC,GAItBlqD,EAAAk8E,sBAAA,SAAsCl7D,EAAkBm7D,EAAoBC,GAC1Ep7D,EAAQsB,kBAAoB65D,EAC5Bn7D,EAAQuB,gBAAkB65D,GAI5Bp8E,EAAAq8E,cAAA,SAA8BtB,GAC5B,OAAOA,EAAOpxB,UAIhB3pD,EAAAs8E,eAAA,SAA+BjwD,EAAkBrL,GAC/C,YAD+C,IAAAA,MAAA,MACxC,IAAI6Z,EAAA2vB,SAASn+B,EAASrL,GAASwqC,WAIxCxrD,EAAAu8E,gBAAA,SAAgCt8E,GAC9B,IAAIu8E,EAAa,IAAI9B,EAAA+B,WAErB,OADAD,EAAWE,UAAUz8E,GACdu8E,EAAW7yB,UAIpB3pD,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,EAoyBpB,OA3yBSP,EAAAC,UAAP,SAAiBz8E,GACf,IAAIu8E,EAAa,IAAIC,EAErB,OADAD,EAAWE,UAAUz8E,GACdu8E,EAAW7yB,UASpB8yB,EAAAl6E,UAAAm6E,UAAA,SAAUz8E,GACR,MAAM,IAAIylB,MAAM,oBAGlB+2D,EAAAl6E,UAAA06E,kBAAA,SAAkB7sC,GAChB,IAAIlvC,EAAOwb,EAAAi8B,gBAAgBvI,IAAS,IAAM9vC,KAAK08E,WAAW73E,SAAS,IAC/DmO,EAAOoJ,EAAAg8B,gBAAgBtI,GAC3B9vC,KAAK6F,KAAK,aACV7F,KAAK6F,KAAKjF,GACVZ,KAAK6F,KAAK,KACT,IAAK,IAAIxF,EAAW,EAAGsK,EAAWyR,EAAAm8B,sBAAsBzI,GAAOzvC,EAAIsK,IAAKtK,EACnEA,EAAI,GAAGL,KAAK6F,KAAK,MACrB7F,KAAK6F,KAAK,KACV7F,KAAK6F,KAAKxF,EAAEwE,SAAS,KACrB7E,KAAK6F,KAAK,MACV7F,KAAK6F,KAAK+2E,EAAiBxgE,EAAAq8B,qBAAqB3I,EAAMzvC,KAExDL,KAAK6F,KAAK,OACV7F,KAAK6F,KAAK+2E,EAAiBxgE,EAAAu8B,sBAAsB7I,KACjD9vC,KAAK6F,KAAK,KACNuW,EAAAsY,gBAAgB1hB,IAASoJ,EAAAuY,aAAa4E,OACxCv5B,KAAK6F,KAAK,OAEZ7F,KAAK68E,oBAAoB7pE,GACrBoJ,EAAAsY,gBAAgB1hB,IAASoJ,EAAAuY,aAAa4E,OACxCv5B,KAAK6F,KAAK,WAEV7F,KAAK08E,YAGTP,EAAAl6E,UAAA46E,oBAAA,SAAoB1yE,GAClB,IAGI2yE,EACAC,EACA18E,EAAUsK,EALVilB,EAAKxT,EAAAsY,gBAAgBvqB,GACrB9B,EAAO+T,EAAAyc,kBAAkB1uB,GAM7B,OAAQylB,GACN,KAAKxT,EAAAuY,aAAa4E,MAOhB,IANqC,OAAhCwjD,EAAS3gE,EAAAod,aAAarvB,MACzBnK,KAAK6F,KAAKk3E,GACV/8E,KAAK6F,KAAK,OAEZ7F,KAAK6F,KAAK,OACV8E,EAAIyR,EAAAqd,mBAAmBtvB,GAClB9J,EAAI,EAAGA,EAAIsK,IAAKtK,EACnBL,KAAK68E,oBAAoBzgE,EAAAud,cAAcxvB,EAAM9J,IAG/C,YADAL,KAAK6F,KAAK,OAGZ,KAAKuW,EAAAuY,aAAaiF,GAiBhB,YAhBQ,GAAJvxB,GACFrI,KAAK6F,KAAK,QACV7F,KAAK68E,oBAAoBzgE,EAAAm6B,eAAepsC,IACxCnK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAAyd,UAAU1vB,KAC/B2yE,EAAS1gE,EAAA0d,WAAW3vB,MACtBnK,KAAK6F,KAAK,UACV7F,KAAK68E,oBAAoBC,MAG3B98E,KAAK68E,oBAAoBzgE,EAAAm6B,eAAepsC,IACxCnK,KAAK6F,KAAK,OACV7F,KAAK68E,oBAAoBzgE,EAAAyd,UAAU1vB,IACnCnK,KAAK6F,KAAK,OACV7F,KAAK68E,oBAAoBzgE,EAAA0d,WAAW3vB,MAIxC,KAAKiS,EAAAuY,aAAaqoD,KACoB,OAA/BD,EAAS3gE,EAAAu6B,YAAYxsC,MACxBnK,KAAK6F,KAAKk3E,GACV/8E,KAAK6F,KAAK,OAEZ7F,KAAK6F,KAAK,OACV7F,KAAK68E,oBAAoBzgE,EAAAy6B,YAAY1sC,IACrCnK,KAAK6F,KAAK,gBAEZ,KAAKuW,EAAAuY,aAAaumB,MAahB,OAZI4hC,EAAS1gE,EAAA66B,kBAAkB9sC,MAC7BnK,KAAK6F,KAAK,QACV7F,KAAK68E,oBAAoBC,GACzB98E,KAAK6F,KAAK,YAEyB,OAAhCk3E,EAAS3gE,EAAA26B,aAAa5sC,KACzBnK,KAAK6F,KAAK,UACV7F,KAAK6F,KAAKk3E,GACV/8E,KAAK6F,KAAK,QAEV7F,KAAK6F,KAAK,aAId,KAAKuW,EAAAuY,aAAasoD,OAClB,KAAK7gE,EAAAuY,aAAauF,KAClB,KAAK9d,EAAAuY,aAAauoD,WAClB,KAAK9gE,EAAAuY,aAAawoD,aAChB,MAAM,IAAI/3D,MAAM,mBAElB,KAAKhJ,EAAAuY,aAAaC,SAGhB,OAFA50B,KAAK6F,KAAK,UACV7F,KAAK6F,KAAKuW,EAAAyY,iBAAiB1qB,GAAMtF,SAAS,KAG5C,KAAKuX,EAAAuY,aAAaI,SAKhB,OAJA/0B,KAAK6F,KAAK,KACV7F,KAAK6F,KAAKuW,EAAAi5B,iBAAiBlrC,GAAMtF,SAAS,KAC1C7E,KAAK6F,KAAK,YACV7F,KAAK68E,oBAAoBzgE,EAAA6Y,iBAAiB9qB,IAG5C,KAAKiS,EAAAuY,aAAaO,UAClB,KAAK9Y,EAAAuY,aAAayoD,UAChB,MAAM,IAAIh4D,MAAM,mBAElB,KAAKhJ,EAAAuY,aAAawE,KAQhB,OAPAn5B,KAAK6F,KAAK,SACV7F,KAAK6F,KAAK+2E,EAAiBv0E,IAC3BrI,KAAK6F,KAAK,MACV7F,KAAK6F,KAAKuW,EAAAs5B,cAAcvrC,GAAMtF,SAAS,KACvC7E,KAAK6F,KAAK,OACV7F,KAAK68E,oBAAoBzgE,EAAAu5B,WAAWxrC,SACpCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAuY,aAAa0oD,MAUhB,OATAr9E,KAAK6F,KAAK,UACV7F,KAAK6F,KAAK+2E,EAAiBv0E,IAC3BrI,KAAK6F,KAAK,MACV7F,KAAK6F,KAAKuW,EAAA05B,eAAe3rC,GAAMtF,SAAS,KACxC7E,KAAK6F,KAAK,OACV7F,KAAK68E,oBAAoBzgE,EAAA45B,YAAY7rC,IACrCnK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAA85B,cAAc/rC,SACvCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAuY,aAAa6C,MAChB,OAAQnvB,GACN,OAEE,YADArI,KAAK6F,KAAKuW,EAAAqb,iBAAiBttB,GAAMtF,SAAS,KAG5C,OASE,YARA7E,KAAK6F,KACHooE,cACEtsD,QACEvF,EAAA0c,oBAAoB3uB,GACpBiS,EAAAg5B,qBAAqBjrC,MAM7B,OAEE,YADAnK,KAAK6F,KAAKuW,EAAA2c,iBAAiB5uB,GAAMtF,SAAS,KAG5C,OAEE,YADA7E,KAAK6F,KAAKuW,EAAA4c,iBAAiB7uB,GAAMtF,SAAS,KAI9C,MAEF,KAAKuX,EAAAuY,aAAa0D,MAChB,OAAQjc,EAAAkc,WAAWnuB,IACjB,KAAKiS,EAAAmc,QAAQG,OAIX,OAHA14B,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,SACvCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQI,OAIX,OAHA34B,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,SACvCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQK,UAIX,OAHA54B,KAAK6F,KAAK,gBACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,SACvCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQ6rC,OACb,KAAKhoD,EAAAmc,QAAQ8rC,OAGX,OAFArkE,KAAK6F,KAAK,UACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,IAGzC,KAAKiS,EAAAmc,QAAQq9C,OAIX,OAHA51E,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,SACvCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQ69C,QAIX,OAHAp2E,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,SACvCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQ+9C,SAIX,OAHAt2E,KAAK6F,KAAK,eACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,SACvCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQ2+C,SAIX,OAHAl3E,KAAK6F,KAAK,eACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,SACvCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQm+C,WAIX,OAHA12E,KAAK6F,KAAK,iBACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,SACvCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQy+C,QAIX,OAHAh3E,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,SACvCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQC,OACb,KAAKpc,EAAAmc,QAAQE,OAGX,OAFAz4B,KAAK6F,KAAK,UACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,IAGzC,KAAKiS,EAAAmc,QAAQ88C,OAIX,OAHAr1E,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,SACvCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQ+8C,OAIX,OAHAt1E,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,SACvCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQg9C,UAIX,OAHAv1E,KAAK6F,KAAK,gBACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,SACvCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQs9C,OAIX,OAHA71E,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,SACvCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQ89C,QAIX,OAHAr2E,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,SACvCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQg+C,SAIX,OAHAv2E,KAAK6F,KAAK,eACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,SACvCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQ4+C,SAIX,OAHAn3E,KAAK6F,KAAK,eACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,SACvCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQo+C,WAIX,OAHA32E,KAAK6F,KAAK,iBACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,SACvCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQ0+C,QAIX,OAHAj3E,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,SACvCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQg/B,UAGX,OAFAv3D,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,IAGzC,KAAKiS,EAAAmc,QAAQi/B,UAGX,OAFAx3D,KAAK6F,KAAK,mBACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,IAGzC,KAAKiS,EAAAmc,QAAQ++B,QAKb,KAAKl7C,EAAAmc,QAAQg+B,cAGX,OAFAv2D,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,IAGzC,KAAKiS,EAAAmc,QAAQ+9B,cAGX,OAFAt2D,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,IAGzC,KAAKiS,EAAAmc,QAAQk+B,cAGX,OAFAz2D,KAAK6F,KAAK,mBACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,IAGzC,KAAKiS,EAAAmc,QAAQi+B,cAGX,OAFAx2D,KAAK6F,KAAK,mBACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,IAGzC,KAAKiS,EAAAmc,QAAQo+B,cAGX,OAFA32D,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,IAGzC,KAAKiS,EAAAmc,QAAQm+B,cAGX,OAFA12D,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,IAGzC,KAAKiS,EAAAmc,QAAQs+B,cAGX,OAFA72D,KAAK6F,KAAK,mBACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,IAGzC,KAAKiS,EAAAmc,QAAQq+B,cAGX,OAFA52D,KAAK6F,KAAK,mBACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,IAGzC,KAAKiS,EAAAmc,QAAQq+C,eAIX,OAHA52E,KAAK6F,KAAK,yBACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,SACvCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQs+C,eAIX,OAHA72E,KAAK6F,KAAK,yBACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,SACvCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQy+B,gBAGX,OAFAh3D,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,IAGzC,KAAKiS,EAAAmc,QAAQ6+B,gBAGX,OAFAp3D,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,IAGzC,KAAKiS,EAAAmc,QAAQ0+B,gBAGX,OAFAj3D,KAAK6F,KAAK,mBACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,IAGzC,KAAKiS,EAAAmc,QAAQ8+B,gBAGX,OAFAr3D,KAAK6F,KAAK,mBACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,IAGzC,KAAKiS,EAAAmc,QAAQu+B,gBAGX,OAFA92D,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,IAGzC,KAAKiS,EAAAmc,QAAQ2+B,gBAGX,OAFAl3D,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,IAGzC,KAAKiS,EAAAmc,QAAQw+B,gBAGX,OAFA/2D,KAAK6F,KAAK,mBACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,IAGzC,KAAKiS,EAAAmc,QAAQ4+B,gBAGX,OAFAn3D,KAAK6F,KAAK,mBACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,IAGzC,KAAKiS,EAAAmc,QAAQ69B,WAGX,OAFAp2D,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,IAGzC,KAAKiS,EAAAmc,QAAQ89B,UAGX,OAFAr2D,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,IAGzC,KAAKiS,EAAAmc,QAAQu+C,eAIX,OAHA92E,KAAK6F,KAAK,yBACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,SACvCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAmc,QAAQw+C,eAIX,OAHA/2E,KAAK6F,KAAK,yBACV7F,KAAK68E,oBAAoBzgE,EAAAq5B,cAActrC,SACvCnK,KAAK6F,KAAK,KAId,MAEF,KAAKuW,EAAAuY,aAAaQ,OAChB,OAAQ/Y,EAAAgZ,YAAYjrB,IAClB,KAAKiS,EAAAiZ,SAASk6B,OACd,KAAKnzC,EAAAiZ,SAAS6iC,OACd,KAAK97C,EAAAiZ,SAAS8iC,OACd,KAAK/7C,EAAAiZ,SAAS+iC,OAIZ,OAHAp4D,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,YACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAASgjC,OACd,KAAKj8C,EAAAiZ,SAASijC,OACd,KAAKl8C,EAAAiZ,SAASkjC,OACd,KAAKn8C,EAAAiZ,SAASmjC,OAIZ,OAHAx4D,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,YACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAASiC,OACd,KAAKlb,EAAAiZ,SAASojC,OACd,KAAKr8C,EAAAiZ,SAASqjC,OACd,KAAKt8C,EAAAiZ,SAASsjC,OAIZ,OAHA34D,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,YACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAASwjC,OACd,KAAKz8C,EAAAiZ,SAASyjC,OACd,KAAK18C,EAAAiZ,SAAS2jC,OACd,KAAK58C,EAAAiZ,SAAS4jC,OAIZ,OAHAj5D,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,YACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAAS6C,OAMZ,OALAl4B,KAAK6F,KAAK,eACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,YACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,SACxCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAiZ,SAAS8C,OACd,KAAK/b,EAAAiZ,SAAS6jC,OAIZ,OAHAl5D,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,YACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAAS+C,OAMZ,OALAp4B,KAAK6F,KAAK,eACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,YACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,SACxCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAiZ,SAASsC,OACd,KAAKvb,EAAAiZ,SAASokC,OAIZ,OAHAz5D,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,YACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAASqkC,MACd,KAAKt9C,EAAAiZ,SAASskC,MAIZ,OAHA35D,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,YACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAASukC,OACd,KAAKx9C,EAAAiZ,SAASwkC,OAIZ,OAHA75D,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,YACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAASwC,OACd,KAAKzb,EAAAiZ,SAASgkC,OAIZ,OAHAr5D,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAAS4C,OACd,KAAK7b,EAAAiZ,SAASmkC,OAIZ,OAHAx5D,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAAS2C,OACd,KAAK5b,EAAAiZ,SAASkkC,OAIZ,OAHAv5D,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAASmgD,QAMZ,OALAx1E,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,SACxCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAiZ,SAASqgD,QAMZ,OALA11E,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,SACxCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAiZ,SAASC,MACd,KAAKlZ,EAAAiZ,SAASE,MACd,KAAKnZ,EAAAiZ,SAASG,MACd,KAAKpZ,EAAAiZ,SAASI,MAIZ,OAHAz1B,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAASK,MACd,KAAKtZ,EAAAiZ,SAASM,MACd,KAAKvZ,EAAAiZ,SAASO,MACd,KAAKxZ,EAAAiZ,SAASQ,MAIZ,OAHA71B,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAASS,MACd,KAAK1Z,EAAAiZ,SAASW,MACd,KAAK5Z,EAAAiZ,SAASa,MACd,KAAK9Z,EAAAiZ,SAASc,MAIZ,OAHAn2B,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,YACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAASU,MAKZ,OAJA/1B,KAAK6F,KAAK,SACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,iBACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAASe,MACd,KAAKha,EAAAiZ,SAASiB,MACd,KAAKla,EAAAiZ,SAASmB,MACd,KAAKpa,EAAAiZ,SAASoB,MAIZ,OAHAz2B,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAASgB,MAKZ,OAJAr2B,KAAK6F,KAAK,SACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,kBACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAASqB,MACd,KAAKta,EAAAiZ,SAASuB,MACd,KAAKxa,EAAAiZ,SAASyB,MACd,KAAK1a,EAAAiZ,SAAS0B,MAIZ,OAHA/2B,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,YACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAASsB,MAKZ,OAJA32B,KAAK6F,KAAK,SACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,iBACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAAS2B,MACd,KAAK5a,EAAAiZ,SAAS6B,MACd,KAAK9a,EAAAiZ,SAAS+B,MACd,KAAKhb,EAAAiZ,SAASgC,MAIZ,OAHAr3B,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAAS4B,MAKZ,OAJAj3B,KAAK6F,KAAK,SACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,kBACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAAS0jC,OAKZ,OAJA/4D,KAAK6F,KAAK,SACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,iBACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAAS8jC,OAKZ,OAJAn5D,KAAK6F,KAAK,SACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,iBACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAASogD,QAMZ,OALAz1E,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,SACxCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAiZ,SAASsgD,QAMZ,OALA31E,KAAK6F,KAAK,cACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,SACxCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAiZ,SAASY,MAKZ,OAJAj2B,KAAK6F,KAAK,SACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,iBACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAASkB,MAKZ,OAJAv2B,KAAK6F,KAAK,SACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,kBACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAASwB,MAKZ,OAJA72B,KAAK6F,KAAK,SACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,iBACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAAS8B,MAKZ,OAJAn3B,KAAK6F,KAAK,SACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,kBACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,IAG1C,KAAKiS,EAAAiZ,SAASmhD,YAMZ,OALAx2E,KAAK6F,KAAK,kBACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,SACxCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAiZ,SAAS6gD,OAMZ,OALAl2E,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,SACxCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAiZ,SAAS2gD,OAMZ,OALAh2E,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,SACxCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAiZ,SAASohD,YAMZ,OALAz2E,KAAK6F,KAAK,kBACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,SACxCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAiZ,SAAS8gD,OAMZ,OALAn2E,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,SACxCnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAiZ,SAAS4gD,OAMZ,OALAj2E,KAAK6F,KAAK,aACV7F,KAAK68E,oBAAoBzgE,EAAAmb,cAAcptB,IACvCnK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAAsb,eAAevtB,SACxCnK,KAAK6F,KAAK,KAId,OAEF,KAAKuW,EAAAuY,aAAaoF,OAUhB,OATA/5B,KAAK6F,KAAK,WACV7F,KAAK6F,KAAK+2E,EAAiBv0E,IAC3BrI,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAA4d,cAAc7vB,IACvCnK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAA6d,cAAc9vB,IACvCnK,KAAK6F,KAAK,MACV7F,KAAK68E,oBAAoBzgE,EAAAi7B,mBAAmBltC,SAC5CnK,KAAK6F,KAAK,KAGZ,KAAKuW,EAAAuY,aAAa2oD,KAGhB,OAFAt9E,KAAK68E,oBAAoBzgE,EAAAm7B,aAAaptC,SACtCnK,KAAK6F,KAAK,OAGZ,KAAKuW,EAAAuY,aAAasmB,OAQhB,aAPI6hC,EAAS1gE,EAAAq7B,eAAettC,KAC1BnK,KAAK6F,KAAK,WACV7F,KAAK68E,oBAAoBC,GACzB98E,KAAK6F,KAAK,QAEV7F,KAAK6F,KAAK,cAId,KAAKuW,EAAAuY,aAAa4oD,KAChB,OAAQnhE,EAAAw7B,UAAUztC,IAChB,KAAKiS,EAAAioB,OAAOkzC,cAEV,YADAv3E,KAAK6F,KAAK,iBAGZ,KAAKuW,EAAAioB,OAAOmzC,WAIV,OAHAx3E,KAAK6F,KAAK,gBACV7F,KAAK68E,oBAAoBzgE,EAAA47B,eAAe7tC,EAAM,SAC9CnK,KAAK6F,KAAK,KAId,MAEF,KAAKuW,EAAAuY,aAAaq9B,IAEhB,YADAhyD,KAAK6F,KAAK,OAGZ,KAAKuW,EAAAuY,aAAayF,YAEhB,YADAp6B,KAAK6F,KAAK,iBAGZ,KAAKuW,EAAAuY,aAAa6oD,cAClB,KAAKphE,EAAAuY,aAAa8oD,UAClB,KAAKrhE,EAAAuY,aAAa+oD,WAClB,KAAKthE,EAAAuY,aAAagpD,YAEpB,MAAM,IAAIv4D,MAAM,oBAGV+2D,EAAAl6E,UAAA4D,KAAR,SAAaT,GAEXpF,KAAKoF,KAAKS,KAAKT,IAGjB+2E,EAAAl6E,UAAAonD,OAAA,WACE,IAAIhX,EAAMryC,KAAKoF,KAAKU,KAAK,IAEzB,OADA9F,KAAKoF,QACEitC,GAEX8pC,EA7yBA,GA+yBA,SAASS,EAAiBv0E,GACxB,OAAQA,GACN,OAAsB,MAAO,OAC7B,OAAqB,MAAO,MAC5B,OAAqB,MAAO,MAC5B,OAAqB,MAAO,MAC5B,OAAqB,MAAO,MAC5B,OAA6B,MAAM,IAAI+c,MAAM,oBAC7C,OAAsB,MAAM,IAAIA,MAAM,aACtC,QAAS,MAAM,IAAIA,MAAM,oBAxzBhB1lB,EAAAy8E,46BCxDb,IAAA11E,EAAAtG,EAAA,GAIAq7C,EAAAr7C,EAAA,GAuBA+C,EAAA/C,EAAA,GAKAy9E,EAAA,WAYE,SAAAA,EAAY7xD,EAAkB8xD,QAAA,IAAAA,OAAA,GAL9B79E,KAAA89E,QAEA99E,KAAAkrB,KAAqB,IAAIC,IAIvBnrB,KAAK+rB,QAAUA,EACf/rB,KAAK69E,eA0ET,OAtEED,EAAA37E,UAAA87E,KAAA,uBACE,IAAyB,IAAArvD,EAAA9K,EAAA5jB,KAAK+rB,QAAQ1M,mBAAmB7R,UAAQwW,EAAA0K,EAAA5K,QAAAE,EAAAD,KAAAC,EAAA0K,EAAA5K,OAAE,CAA9D,IAAI8nC,EAAY5nC,EAAA1iB,MAEnBtB,KAAKg+E,aAAapyB,EAAaz/C,2GAGjC,IADA,IAAI2xE,EAAO99E,KAAK89E,KACH,EAAOA,EAAKx4E,QAAUtF,KAAKg+E,aAAaF,EAAxC,KAIfF,EAAA37E,UAAA+7E,aAAA,SAAa7xE,GACX,KAAIA,EAAQrE,GAAGrB,EAAApE,YAAY49C,UAAajgD,KAAK69E,kBACzC79E,KAAKkrB,KAAK7F,IAAIlZ,GAElB,OADAnM,KAAKkrB,KAAKE,IAAIjf,GACNA,EAAQpF,MACd,KAAKy0C,EAAA98B,YAAY5I,OACX3J,EAAQrE,GAAGrB,EAAApE,YAAYkqD,WAAWvsD,KAAKi+E,YAAoB9xE,GAC/D,MAEF,KAAKqvC,EAAA98B,YAAYuN,KACX9f,EAAQrE,GAAGrB,EAAApE,YAAYkqD,WAAWvsD,KAAKk+E,UAAgB/xE,GAC3D,MAEF,KAAKqvC,EAAA98B,YAAYgH,mBACf1lB,KAAKm+E,uBAA0ChyE,GAC/C,MAEF,KAAKqvC,EAAA98B,YAAYmG,gBACf7kB,KAAKo+E,oBAAoCjyE,GACzC,MAEF,KAAKqvC,EAAA98B,YAAY+R,MACHtkB,EAASrE,GAAGrB,EAAApE,YAAYkqD,WAAWvsD,KAAKq+E,WAAkBlyE,GACtE,MAEF,KAAKqvC,EAAA98B,YAAYqL,SACf,IAAIu0D,EAAiBnyE,EACjBtL,EAASy9E,EAAKt0D,gBACdnpB,GAAQb,KAAKm+E,uBAAuBt9E,GACxC,IAAI2rD,EAAS8xB,EAAKr0D,gBACduiC,GAAQxsD,KAAKm+E,uBAAuB3xB,GACxC,MAEF,KAAKhR,EAAA98B,YAAYsN,WA8ZvB,SAASuyD,EAAkBpyE,mBACzB,IAAI2D,EAAU3D,EAAQ2D,QACtB,GAAIA,MACF,IAAmB,IAAAqV,EAAAvB,EAAA9T,EAAQtC,UAAQw+C,EAAA7mC,EAAArB,QAAAkoC,EAAAjoC,KAAAioC,EAAA7mC,EAAArB,OAAE,CAAhC,IAAI7J,EAAM+xC,EAAA1qD,MACb,OAAQ2Y,EAAOlT,MACb,KAAKy0C,EAAA98B,YAAYgH,uBACf,IAAqB,IAAAumC,EAAAroC,EAAoB3J,EAAQ8S,UAAUvf,UAAQ0+C,EAAAD,EAAAnoC,QAAAooC,EAAAnoC,KAAAmoC,EAAAD,EAAAnoC,OAAE,CAAhE,IAAIyB,EAAQ2mC,EAAA5qD,MACf,GAAIikB,EAASzd,GAAGrB,EAAApE,YAAYkqD,UAAW,OAAO,oGAEhD,MAEF,KAAK/Q,EAAA98B,YAAYmG,oBACf,IAAqB,IAAAsnC,EAAAvoC,EAAiB3J,EAAQ8S,UAAUvf,UAAQq/C,EAAAV,EAAAroC,QAAA+oC,EAAA9oC,KAAA8oC,EAAAV,EAAAroC,OAAE,CAA7D,IAAIyB,EAAQsnC,EAAAvrD,MACf,GAAIikB,EAASzd,GAAGrB,EAAApE,YAAYkqD,UAAW,OAAO,oGAEhD,MAEF,QACE,GAAItyC,EAAOnS,GAAGrB,EAAApE,YAAYkqD,WAAagyB,EAAkBtkE,GAAS,OAAO,qGAMjF,OAAO,GArbGskE,CAAkBpyE,IAAUnM,KAAKw+E,eAAeryE,GACpD,MAEF,QAAS1I,QAAO,KAIZm6E,EAAA37E,UAAAk8E,uBAAR,SAA+BhyE,eAC7B,IAAqB,IAAAuiB,EAAA9K,EAAAzX,EAAQ4gB,UAAUvf,UAAQwW,EAAA0K,EAAA5K,QAAAE,EAAAD,KAAAC,EAAA0K,EAAA5K,OAAE,CAA5C,IAAIyB,EAAQvB,EAAA1iB,MACXikB,EAASzd,GAAGrB,EAAApE,YAAYkqD,WAAWvsD,KAAKy+E,cAAwBl5D,uGAIhEq4D,EAAA37E,UAAAm8E,oBAAR,SAA4BjyE,eAC1B,IAAqB,IAAAuiB,EAAA9K,EAAAzX,EAAQ4gB,UAAUvf,UAAQwW,EAAA0K,EAAA5K,QAAAE,EAAAD,KAAAC,EAAA0K,EAAA5K,OAAE,CAA5C,IAAIyB,EAAQvB,EAAA1iB,MACXikB,EAASzd,GAAGrB,EAAApE,YAAYkqD,WAAWvsD,KAAK0+E,WAAkBn5D,uGAWpEq4D,EAxFA,GA2FAtB,EAAA,SAAAtnE,GAWE,SAAAsnE,EAAYvwD,EAAkB8xD,QAAA,IAAAA,OAAA,GAA9B,IAAA3oE,EACEF,EAAAxU,KAAAR,KAAM+rB,EAAS8xD,IAAe79E,YALxBkV,EAAAvP,MACAuP,EAAAypE,YAAmB,IAkK7B,OA1KgC1pE,EAAAqnE,EAAAtnE,GAGvBsnE,EAAAC,MAAP,SAAaxwD,GACX,OAAO,IAAIuwD,EAAWvwD,GAASwwD,SAWjCD,EAAAr6E,UAAAg8E,YAAA,SAAY9xE,GACV,IAAIxG,EAAK3F,KAAK2F,GACV48D,EAAUp2D,EAAQrE,GAAGrB,EAAApE,YAAYmqB,SAMrC,GALAtpB,EAAA02E,OAAOj0E,EAAI3F,KAAK2+E,aACZpc,GAAS58D,EAAGE,KAAK,UACrBF,EAAGE,KAAK7F,KAAK4+E,aAAazyE,EAAQ9D,OAClC1C,EAAGE,KAAK,KACRF,EAAGE,KAAKsG,EAAQkb,YACZk7C,EACF,OAAQp2D,EAAQmgB,mBACd,OACE3mB,EAAGE,KAAK,OACRF,EAAGE,KAAKooE,cAAc9hE,EAAQogB,uBAC9B,MAEF,OACE5mB,EAAGE,KAAK,OACRF,EAAGE,KAAKsG,EAAQsgB,mBAAmB5nB,YACnC,MAEF,QAASpB,QAAO,GAGpBkC,EAAGE,KAAK,QAGVy2E,EAAAr6E,UAAAi8E,UAAA,SAAU/xE,eACJxG,EAAK3F,KAAK2F,GACdzC,EAAA02E,OAAOj0E,EAAI3F,KAAK2+E,eAChBh5E,EAAGE,KAAK,cACRF,EAAGE,KAAKsG,EAAQkb,YAChB1hB,EAAGE,KAAK,QACR,IAAIiK,EAAU3D,EAAQ2D,QACtB,GAAIA,EAAS,KACX,IAA2B,IAAA+uE,EAAAj7D,EAAA9T,GAAOgvE,EAAAD,EAAA/6D,QAAAg7D,EAAA/6D,KAAA+6D,EAAAD,EAAA/6D,OAAE,CAA3B,IAAAE,EAAAC,EAAA66D,EAAAx9E,MAAA,GAACV,EAAAojB,EAAA,GACR,IADc/J,EAAA+J,EAAA,IACHjd,MAAQy0C,EAAA98B,YAAYwN,UAAW,CACxC,IAAIq2C,EAAsBtoD,EAAQnS,GAAGrB,EAAApE,YAAYmqB,SACjDtpB,EAAA02E,OAAOj0E,EAAI3F,KAAK2+E,aACZpc,EAAS58D,EAAGE,KAAK,UAChBF,EAAGE,KAAK,aACbF,EAAGE,KAAK,kBACRF,EAAGE,KAAKjF,GACJ2hE,IACF58D,EAAGE,KAAK,OACRF,EAAGE,KAAiBoU,EAAQkS,cAActnB,SAAS,MAErDc,EAAGE,KAAK,8GAGZ,IAAmB,IAAAsf,EAAAvB,EAAA9T,EAAQtC,UAAQw+C,EAAA7mC,EAAArB,QAAAkoC,EAAAjoC,KAAAioC,EAAA7mC,EAAArB,OAAE,CAAhC,IAAI7J,KAAM+xC,EAAA1qD,OACFyF,MAAQy0C,EAAA98B,YAAYwN,WAAWlsB,KAAKg+E,aAAa/jE,sGAGhE/W,EAAA02E,OAAOj0E,IAAM3F,KAAK2+E,aAClBh5E,EAAGE,KAAK,QAGVy2E,EAAAr6E,UAAAw8E,cAAA,SAActyE,WACRxG,EAAK3F,KAAK2F,GACVoN,EAAY5G,EAAQ4G,UACxB7P,EAAA02E,OAAOj0E,EAAI3F,KAAK2+E,aAChBh5E,EAAGE,KAAK7F,KAAK4+E,aAAa7rE,EAAU3J,aACpCzD,EAAGE,KAAK,KACRF,EAAGE,KAAKsG,EAAQkb,YAChB1hB,EAAGE,KAAK,KAIR,IAHA,IAAIsD,EAAa4J,EAAUiT,eACvBg4B,EAAgB70C,EAAW7D,OAEtBjF,EAAI,EAAGA,EAAI29C,IAAiB39C,EAC/BA,GAAGsF,EAAGE,KAAK,MAEfF,EAAGE,KAAK7F,KAAK4+E,aAAaz1E,EAAW9I,KACrCsF,EAAGE,KAAK,KACRF,EAAGE,KAAKkN,EAAUgc,iBAAiB1uB,IAErCsF,EAAGE,KAAK,QACR,IAAIiK,EAAU3D,EAAQ2D,QACtB,GAAIA,GAAWA,EAAQioB,KAAM,CAC3B70B,EAAA02E,OAAOj0E,EAAI3F,KAAK2+E,aAChBh5E,EAAGE,KAAK,cACRF,EAAGE,KAAKsG,EAAQkb,YAChB1hB,EAAGE,KAAK,YACR,IAAmB,IAAA6oB,EAAA9K,EAAA9T,EAAQtC,UAAQwW,EAAA0K,EAAA5K,QAAAE,EAAAD,KAAAC,EAAA0K,EAAA5K,OAAA,CAA9B,IAAI7J,EAAM+J,EAAA1iB,MAAsBtB,KAAKg+E,aAAa/jE,qGACvD/W,EAAA02E,OAAOj0E,IAAM3F,KAAK2+E,aAClBh5E,EAAGE,KAAK,SAIZy2E,EAAAr6E,UAAAy8E,WAAA,SAAWvyE,GACT,IAAIxG,EAAK3F,KAAK2F,GACdzC,EAAA02E,OAAOj0E,EAAI3F,KAAK2+E,eAChBh5E,EAAGE,KAAK,cACRF,EAAGE,KAAKsG,EAAQkb,YAChB1hB,EAAGE,KAAK,QAER3C,EAAA02E,OAAOj0E,IAAM3F,KAAK2+E,aAClBh5E,EAAGE,KAAK,QAGVy2E,EAAAr6E,UAAA88E,eAAA,SAAe5yE,GACbnM,KAAK0+E,WAAWvyE,IAGlBmwE,EAAAr6E,UAAAo8E,WAAA,SAAWlyE,KAIXmwE,EAAAr6E,UAAAu8E,eAAA,SAAeryE,WACTxG,EAAK3F,KAAK2F,GACdzC,EAAA02E,OAAOj0E,EAAI3F,KAAK2+E,eAChBh5E,EAAGE,KAAK,cACRF,EAAGE,KAAKsG,EAAQkb,YAChB1hB,EAAGE,KAAK,QACR,IAAIiK,EAAU3D,EAAQ2D,QACtB,GAAIA,MACF,IAAmB,IAAA4e,EAAA9K,EAAA9T,EAAQtC,UAAQwW,EAAA0K,EAAA5K,QAAAE,EAAAD,KAAAC,EAAA0K,EAAA5K,OAAA,CAA9B,IAAI7J,EAAM+J,EAAA1iB,MAAsBtB,KAAKg+E,aAAa/jE,qGAEzD/W,EAAA02E,OAAOj0E,IAAM3F,KAAK2+E,aAClBh5E,EAAGE,KAAK,QAGVy2E,EAAAr6E,UAAA28E,aAAA,SAAav2E,GACX,OAAQA,EAAKtB,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,KAAK2+E,YACP3+E,KAAK+9E,SACH/9E,KAAK2+E,YACPh5E,EAAGE,KAAK,OACDF,EAAGG,KAAK,KAEnBw2E,EA1KA,CAAgCsB,GAAnBl+E,EAAA48E,aA6Kb,IAAAG,EAAA,SAAAznE,GAWE,SAAAynE,EAAY1wD,EAAkB8xD,QAAA,IAAAA,OAAA,GAA9B,IAAA3oE,EACEF,EAAAxU,KAAAR,KAAM+rB,EAAS8xD,IAAe79E,YALxBkV,EAAAvP,MACAuP,EAAAypE,YAAmB,IAsM7B,OA9MgC1pE,EAAAwnE,EAAAznE,GAGvBynE,EAAAF,MAAP,SAAaxwD,GACX,OAAO,IAAI0wD,EAAW1wD,GAASwwD,SAWjCE,EAAAx6E,UAAAg8E,YAAA,SAAY9xE,GACV,IAAIxG,EAAK3F,KAAK2F,GACV48D,EAAUp2D,EAAQrE,GAAGrB,EAAApE,YAAYmqB,SACrCtpB,EAAA02E,OAAOj0E,EAAI3F,KAAK2+E,aACZxyE,EAAQrE,GAAGrB,EAAApE,YAAY0X,QACrBwoD,EAAS58D,EAAGE,KAAK,oBAChBF,EAAGE,KAAK,WAET08D,EAAS58D,EAAGE,KAAK,UAChBF,EAAGE,KAAK,QAEfF,EAAGE,KAAKsG,EAAQkb,YAChB1hB,EAAGE,KAAK,MACRF,EAAGE,KAAK7F,KAAK4+E,aAAazyE,EAAQ9D,OAClC1C,EAAGE,KAAK,OACR7F,KAAKw+E,eAAeryE,IAGtBswE,EAAAx6E,UAAAi8E,UAAA,SAAU/xE,WACJxG,EAAK3F,KAAK2F,GACdzC,EAAA02E,OAAOj0E,EAAI3F,KAAK2+E,eAChBh5E,EAAGE,KAAK,SACRF,EAAGE,KAAKsG,EAAQkb,YAChB1hB,EAAGE,KAAK,QACR,IAAIiK,EAAU3D,EAAQ2D,QACtB,GAAIA,EAAS,CACX,IAAIkvE,EAAalvE,EAAQioB,SACzB,IAA2B,IAAAknD,EAAAr7D,EAAA9T,GAAOovE,EAAAD,EAAAn7D,QAAAo7D,EAAAn7D,KAAAm7D,EAAAD,EAAAn7D,OAAE,CAA3B,IAAA4K,EAAAzK,EAAAi7D,EAAA59E,MAAA,GAACV,EAAA8tB,EAAA,GAAMzU,EAAAyU,EAAA,GACVzU,EAAOlT,MAAQy0C,EAAA98B,YAAYwN,YAC7BhpB,EAAA02E,OAAOj0E,EAAI3F,KAAK2+E,aAChBh5E,EAAGE,KAAKjF,GACJqZ,EAAOnS,GAAGrB,EAAApE,YAAYmqB,WACxB7mB,EAAGE,KAAK,OACRF,EAAGE,KAAiBoU,EAAQkS,cAActnB,SAAS,MAErDc,EAAGE,KAAK,SACNm5E,qGAGFA,GAAYh/E,KAAKw+E,eAAeryE,GAEtCjJ,EAAA02E,OAAOj0E,IAAM3F,KAAK2+E,aAClBh5E,EAAGE,KAAK,QAGV42E,EAAAx6E,UAAAw8E,cAAA,SAActyE,GACZ,IAAIA,EAAQnE,MAAMvB,EAAApE,YAAY49C,QAAUx5C,EAAApE,YAAY6lB,KAApD,CACA,IAAIviB,EAAK3F,KAAK2F,GACVoN,EAAY5G,EAAQ4G,UAIxB,GAHA7P,EAAA02E,OAAOj0E,EAAI3F,KAAK2+E,aACZxyE,EAAQrE,GAAGrB,EAAApE,YAAY69C,YAAYv6C,EAAGE,KAAK,cAC3CsG,EAAQrE,GAAGrB,EAAApE,YAAY0X,SAASpU,EAAGE,KAAK,WACxCsG,EAAQrE,GAAGrB,EAAApE,YAAY4lB,KAKzB,OAJAtiB,EAAGE,KAAKsG,EAAQlK,UAAU0J,YAAY/K,KAAKwE,MAC3CO,EAAGE,KAAK,MACRF,EAAGE,KAAK7F,KAAK4+E,aAAa7rE,EAAU3J,kBACpCzD,EAAGE,KAAK,OAGHsG,EAAQnE,MAAMvB,EAAApE,YAAY0X,OAAStT,EAAApE,YAAY+rB,WAAWzoB,EAAGE,KAAK,aACvEF,EAAGE,KAAKsG,EAAQkb,YAElB1hB,EAAGE,KAAK,KAIR,IAHA,IAAIsD,EAAa4J,EAAUiT,eACvBg4B,EAAgB70C,EAAW7D,OAEtBjF,EAAI,EAAGA,EAAI29C,IAAiB39C,EAC/BA,GAAGsF,EAAGE,KAAK,MAEfF,EAAGE,KAAKkN,EAAUgc,iBAAiB1uB,IACnCsF,EAAGE,KAAK,MACRF,EAAGE,KAAK7F,KAAK4+E,aAAaz1E,EAAW9I,KAEnC8L,EAAQnE,MAAMvB,EAAApE,YAAYgV,YAAc5Q,EAAApE,YAAY6lB,KACtDviB,EAAGE,KAAK,MAERF,EAAGE,KAAK,OACRF,EAAGE,KAAK7F,KAAK4+E,aAAa7rE,EAAU3J,cAEtCzD,EAAGE,KAAK,OACR7F,KAAKw+E,eAAeryE,KAGtBswE,EAAAx6E,UAAAy8E,WAAA,SAAWvyE,eACLxG,EAAK3F,KAAK2F,GACV2iB,EAAcnc,EAAQpF,MAAQy0C,EAAA98B,YAAYqT,UAC9C7uB,EAAA02E,OAAOj0E,EAAI3F,KAAK2+E,eACZr2D,EACF3iB,EAAGE,KAAK,eAEJsG,EAAQrE,GAAGrB,EAAApE,YAAYqmB,WAAW/iB,EAAGE,KAAK,aAC9CF,EAAGE,KAAK,WAEVF,EAAGE,KAAKsG,EAAQkb,YAChB,IAAIuJ,EAAOzkB,EAAQykB,KACfA,GAAQA,EAAK9oB,GAAGrB,EAAApE,YAAYkqD,SAAW9lD,EAAApE,YAAYqlB,iBACrD/hB,EAAGE,KAAK,aACRF,EAAGE,KAAK+qB,EAAKvJ,aAEf1hB,EAAGE,KAAK,QACR,IAAIiK,EAAU3D,EAAQlK,UAAU6N,QAChC,GAAIA,MACF,IAAmB,IAAAkU,EAAAJ,EAAA9T,EAAQtC,UAAQ2X,EAAAnB,EAAAF,QAAAqB,EAAApB,KAAAoB,EAAAnB,EAAAF,OAAE,CAAhC,IAAI7J,EAAMkL,EAAA7jB,MACbtB,KAAKg+E,aAAa/jE,qGAGtB,IAAIizC,EAAO/gD,EAAQ2kB,oBAGnB,GAFIo8B,GAAMltD,KAAKy+E,cAAcvxB,GAC7Bp9C,EAAU3D,EAAQ2D,YAEhB,IAAmB,IAAAk8C,EAAApoC,EAAA9T,EAAQtC,UAAQy+C,EAAAD,EAAAloC,QAAAmoC,EAAAloC,KAAAkoC,EAAAD,EAAAloC,OAAA,CAA1B7J,EAAMgyC,EAAA3qD,MAAsBtB,KAAKg+E,aAAa/jE,qGAEzD/W,EAAA02E,OAAOj0E,IAAM3F,KAAK2+E,aAClBh5E,EAAGE,KAAK,QAGV42E,EAAAx6E,UAAA88E,eAAA,SAAe5yE,GACbnM,KAAK0+E,WAAWvyE,IAGlBswE,EAAAx6E,UAAAo8E,WAAA,SAAWlyE,GACT,IAAIA,EAAQrE,GAAGrB,EAAApE,YAAY49C,SAA3B,CACA,IAAIt6C,EAAK3F,KAAK2F,GACdzC,EAAA02E,OAAOj0E,EAAI3F,KAAK2+E,aACZxyE,EAAQrE,GAAGrB,EAAApE,YAAY69C,YAAYv6C,EAAGE,KAAK,cAC3CsG,EAAQrE,GAAGrB,EAAApE,YAAY0X,SAASpU,EAAGE,KAAK,WACxCsG,EAAQrE,GAAGrB,EAAApE,YAAYomB,WAAW9iB,EAAGE,KAAK,aAC9CF,EAAGE,KAAKsG,EAAQkb,YAChB1hB,EAAGE,KAAK,MACRF,EAAGE,KAAK7F,KAAK4+E,aAAazyE,EAAQ9D,OAClC1C,EAAGE,KAAK,SAGV42E,EAAAx6E,UAAAu8E,eAAA,SAAeryE,WACT2D,EAAU3D,EAAQ2D,QACtB,GAAIA,GAAWA,EAAQioB,KAAM,CAC3B,IAAIpyB,EAAK3F,KAAK2F,GACdzC,EAAA02E,OAAOj0E,EAAI3F,KAAK2+E,eAChBh5E,EAAGE,KAAK,cACRF,EAAGE,KAAKsG,EAAQkb,YAChB1hB,EAAGE,KAAK,YACR,IAAmB,IAAA6oB,EAAA9K,EAAA9T,EAAQtC,UAAQwW,EAAA0K,EAAA5K,QAAAE,EAAAD,KAAAC,EAAA0K,EAAA5K,OAAA,CAA9B,IAAI7J,EAAM+J,EAAA1iB,MAAsBtB,KAAKg+E,aAAa/jE,qGACvD/W,EAAA02E,OAAOj0E,IAAM3F,KAAK2+E,aAClBh5E,EAAGE,KAAK,SAIZ42E,EAAAx6E,UAAA28E,aAAA,SAAav2E,GACX,OAAQA,EAAKtB,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,KAAK2+E,YACP3+E,KAAK+9E,SACH/9E,KAAK2+E,YACPh5E,EAAGE,KAAK,OACRF,EAAGE,KAAK,8BACD7F,KAAK2F,GAAGG,KAAK,KAExB22E,EA9MA,CAAgCmB,GAAnBl+E,EAAA+8E,icCxSb,IAAAh2E,EAAAtG,EAAA,GAMAq7C,EAAAr7C,EAAA,GAIAuG,EAAAvG,EAAA,GAQA8b,EAAA9b,EAAA,GAKA+C,EAAA/C,EAAA,GAIAgc,EAAAhc,EAAA,GAyDAu6E,EAAA,SAAA1lE,GAcE,SAAA0lE,IAAA,IAAAxlE,EACEF,EAAAxU,KAAAR,OAAOA,YAVTkV,EAAAiqE,QAAoB,IAAIh5E,MAExB+O,EAAAkqE,QAAuB,IAAIj0D,IAE3BjW,EAAAmqE,QAAuB,IAAIl0D,IAE3BjW,EAAAsuC,UAAmC,KA4b3BtuC,EAAAoqE,8BAAqC,EAsbrCpqE,EAAAqqE,oBAAuC,KA72B7CrqE,EAAK6W,QAAU,IAAIyvB,EAAA18B,QAAQ5J,EAAKhP,eAw0GpC,OAx1G4B+O,EAAAylE,EAAA1lE,GAoB1B0lE,EAAAz4E,UAAAu4E,UAAA,SACEp1E,EACAyL,EACA+W,GAEA,IAAI7iB,EAAiB7B,EAAA6N,cAAcF,GAC/BK,EAAeiL,EAAAhL,mBAAmBpM,GAGtC,IAAI/E,KAAKq/E,QAAQh6D,IAAInU,GAArB,CACAlR,KAAKq/E,QAAQj0D,IAAIla,GACjBlR,KAAKo/E,QAAQh0D,IAAIla,GAGjB,IAAIpM,EAAS,IAAIqX,EAAAxD,OACf5T,EACAK,EACAwiB,EACIzL,EAAA1D,WAAWW,MACXvI,EAAKG,WAAWvK,EAAA3D,iBAAmB+N,EAAK6+D,QAAQjpE,EAAAnE,eAAgBmE,EAAA3D,eAAewC,QAAU,EACvF6W,EAAA1D,WAAWY,QACX8C,EAAA1D,WAAW0mC,SAEfpzB,EAAU/rB,KAAK+rB,QACnBA,EAAQ3L,QAAQva,KAAKf,GAGrB,IAAI06E,EAAK,IAAI94E,EAAAy8C,UAAUr+C,EAAQinB,EAAQ7lB,aACvCs5E,EAAGh8B,UAAYxjD,KAAKwjD,UACpB1+C,EAAO+T,UAAY2mE,EAEnB,IADA,IAAInwE,EAAavK,EAAOuK,YAChBmwE,EAAGt5B,KAAKx/C,EAAAC,MAAMg/C,YAAY,CAChC,IAAIv1C,EAAYpQ,KAAKy/E,uBAAuBD,GACxCpvE,IACFA,EAAUzI,OAAS7C,EACnBuK,EAAWxJ,KAAKuK,IAGpBovE,EAAGn2B,WAILqxB,EAAAz4E,UAAAw9E,uBAAA,SACED,EACAr4D,QAAA,IAAAA,MAAA,MAOA,IALA,IAAIvf,EAAQnB,EAAApE,YAAYwF,KACpB63E,GAAiB,EAGjB3vE,EAAqC,KAClCyvE,EAAGt5B,KAAKx/C,EAAAC,MAAMs+C,KAAK,CACpBy6B,EAAW,IAAGA,EAAWF,EAAGp8B,UAChC,IAAIrnC,EAAY/b,KAAK2/E,eAAeH,GAC/BzjE,GAIAhM,IAAYA,MACjBA,EAAWlK,KAAKkW,IAJd/b,KAAK4/E,cAAcJ,GAQvB,IAAIK,EAAmB,EACnBC,EAAiB,EACjBN,EAAGt5B,KAAKx/C,EAAAC,MAAMiT,UACZ4lE,EAAGt5B,KAAKx/C,EAAAC,MAAMw4C,UAChBn/C,KAAKuG,MACH0V,EAAAnY,eAAe2jB,wBACf+3D,EAAGp7E,SAGHs7E,EAAW,IAAGA,EAAWF,EAAGp8B,UAChCx7C,GAASnB,EAAApE,YAAYuX,OACrBimE,EAAcL,EAAGp8B,SACjB08B,EAAYN,EAAGvmE,KAGjB,IAEI8mE,EAAgC,MAAb54D,GAAqBA,EAAUrf,GAAGrB,EAAApE,YAAYwjB,SACjE25D,EAAGt5B,KAAKx/C,EAAAC,MAAMu4C,UACZwgC,EAAW,IAAGA,EAAWF,EAAGp8B,UAC5B28B,GACF//E,KAAKuG,MACH0V,EAAAnY,eAAek8E,gEACfR,EAAGp7E,SAGPwD,GAASnB,EAAApE,YAAY68C,QAAUz4C,EAAApE,YAAYwjB,SAClCk6D,IACTn4E,GAASnB,EAAApE,YAAYwjB,SAIvB,IAAIzV,EAA8B,KAG9B6vE,EAAQT,EAAG55B,OAEf,OADI85B,EAAW,IAAGA,EAAWF,EAAGl8B,cACxB28B,GACN,KAAKv5E,EAAAC,MAAMklB,MAGT,GAFA2zD,EAAG17D,OACHlc,GAASnB,EAAApE,YAAYwpB,MACjB2zD,EAAGt5B,KAAKx/C,EAAAC,MAAMslB,MAAO,CACvB7b,EAAYpQ,KAAKkgF,UAAUV,EAAI53E,EAAOmI,EAAY2vE,GAClD,MAEAtvE,EAAYpQ,KAAKmgF,cAAcX,EAAI53E,EAAOmI,EAAY2vE,GACtD3vE,EAAa,KAEf,MAEF,KAAKrJ,EAAAC,MAAMk5C,IAAKj4C,GAASnB,EAAApE,YAAYw9C,IACrC,KAAKn5C,EAAAC,MAAM05C,IACTm/B,EAAG17D,OACH1T,EAAYpQ,KAAKmgF,cAAcX,EAAI53E,EAAOmI,EAAY2vE,GACtD3vE,EAAa,KACb,MAEF,KAAKrJ,EAAAC,MAAMslB,KACTuzD,EAAG17D,OACH1T,EAAYpQ,KAAKkgF,UAAUV,EAAI53E,EAAOmI,EAAY2vE,GAClD3vE,EAAa,KACb,MAEF,KAAKrJ,EAAAC,MAAM4Q,SACTioE,EAAG17D,OACH1T,EAAYpQ,KAAKogF,cAAcZ,EAAI53E,EAAOmI,EAAY2vE,GACtD3vE,EAAa,KACb,MAEF,KAAKrJ,EAAAC,MAAM+hB,SACT,IAAI29B,EAAQm5B,EAAGp5B,OAEf,GADAo5B,EAAG17D,QACE07D,EAAGt5B,KAAKx/C,EAAAC,MAAMwQ,OAAQ,CACzBqoE,EAAG/4B,MAAMJ,GACTj2C,EAAYpQ,KAAKqgF,eAAeb,GAAI,GACpC,MAEAA,EAAGh5B,QAAQH,GAEbz+C,GAASnB,EAAApE,YAAYqmB,SAGvB,KAAKhiB,EAAAC,MAAMwQ,MACX,KAAKzQ,EAAAC,MAAMorB,UACTytD,EAAG17D,OACH1T,EAAYpQ,KAAKsgF,sBAAsBd,EAAI53E,EAAOmI,EAAY2vE,GAC9D3vE,EAAa,KACb,MAEF,KAAKrJ,EAAAC,MAAMqlB,UACLq6B,EAAQm5B,EAAGp5B,OACfo5B,EAAG17D,OACC07D,EAAG55B,MAAK,EAAOl/C,EAAAg4C,mBAAmB8G,SAAW9+C,EAAAC,MAAMU,YACrDm4E,EAAGh5B,QAAQH,GACXj2C,EAAYpQ,KAAKugF,eAAef,EAAI53E,EAAOmI,EAAY2vE,GACvD3vE,EAAa,OAEbyvE,EAAG/4B,MAAMJ,GACTj2C,EAAYpQ,KAAKqgF,eAAeb,GAAI,IAEtC,MAEF,KAAK94E,EAAAC,MAAMsU,OACTukE,EAAG17D,OAGD1T,GAFFxI,GAASnB,EAAApE,YAAY4Y,QACTxU,EAAApE,YAAYuX,OACV5Z,KAAKwgF,kBAAkBhB,EAAIE,GAE3B1/E,KAAKygF,YAAYjB,GAE/B,MAEF,KAAK94E,EAAAC,MAAMyO,KACLixC,EAAQm5B,EAAGp5B,OACfo5B,EAAG17D,OACC07D,EAAG55B,MAAK,EAAOl/C,EAAAg4C,mBAAmB8G,SAAW9+C,EAAAC,MAAMU,YACrDm4E,EAAGh5B,QAAQH,GACXj2C,EAAYpQ,KAAK0gF,qBAAqBlB,EAAI53E,EAAOmI,EAAY2vE,GAC7D3vE,EAAa,OAEbyvE,EAAG/4B,MAAMJ,GACTj2C,EAAYpQ,KAAKqgF,eAAeb,GAAI,IAEtC,MAEF,QAGM53E,EAAQnB,EAAApE,YAAYuX,OACtBxJ,EAAYpQ,KAAK2gF,YAAYnB,EAAI53E,EAAO83E,IAIpCI,GACF9/E,KAAKuG,MACH0V,EAAAnY,eAAe88E,gCACfpB,EAAGp7E,MAAMy7E,EAAaC,GAAY,UASjC34D,IACH/W,EAAYpQ,KAAKqgF,eAAeb,GAAI,KAQ5C,GAAIzvE,EACF,IAAK,IAAI1P,EAAI,EAAGsK,EAAIoF,EAAWzK,OAAQjF,EAAIsK,IAAKtK,EAC9CL,KAAKuG,MACH0V,EAAAnY,eAAe+8E,8BACf9wE,EAAW1P,GAAG+D,OAIpB,OAAOgM,GAITsqE,EAAAz4E,UAAA04E,SAAA,WACE,IAAIwE,EAAUn/E,KAAKm/E,QACnB,OAAOA,EAAQ75E,OAAS65E,EAAQrnD,QAAU,MAI5C4iD,EAAAz4E,UAAAonD,OAAA,WACE,GAAIrpD,KAAKm/E,QAAQ75E,OAAQ,MAAM,IAAI8f,MAAM,wBAIzC,OAHAplB,KAAKm/E,WACLn/E,KAAKo/E,QAAQ0B,QACb9gF,KAAKq/E,QAAQyB,QACN9gF,KAAK+rB,SAId2uD,EAAAz4E,UAAA8+E,UAAA,SACEvB,EACAwB,EACAC,QADA,IAAAD,OAAA,QACA,IAAAC,OAAA,GAIA,IAGI54E,EAHAo4C,EAAQ++B,EAAG17D,OACX47D,EAAWF,EAAGp8B,SAKlB,GAAI3C,GAAS/5C,EAAAC,MAAMk9C,UAAW,CAG5B,IAAIq9B,EAAsB1B,EAAGt5B,KAAKx/C,EAAAC,MAAMk9C,WAEpC9wC,EAAY/S,KAAKmhF,kBAAkB3B,GACvC,GAAIzsE,EAAW,CACb,GAAImuE,EAAqB,CACvB,IAAK1B,EAAGt5B,KAAKx/C,EAAAC,MAAMm9C,YAKjB,OAJA9jD,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAEP,KAET,IAAKo7E,EAAGt5B,KAAKx/C,EAAAC,MAAMm7C,KAKjB,OAJA9hD,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAEP,KAEJo7E,EAAGt5B,KAAKx/C,EAAAC,MAAMM,OACjBjH,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,QAGhB2O,EAAU3K,YAAa,EAEzB,OAAO2K,EACF,GAAImuE,GAAuBlhF,KAAKs/E,6BAKrC,OAJAt/E,KAAKuG,MACH0V,EAAAnY,eAAes9E,iBACf5B,EAAGp7E,SAEE,KAIT,IAAI48E,EAoBF,OAJAhhF,KAAKuG,MACH0V,EAAAnY,eAAes9E,iBACf5B,EAAGp7E,SAEE,KAnBP,IAAIi9E,EAAYrhF,KAAK+gF,UAAUvB,GAAI,EAAOyB,GAC1C,IAAKI,EAAW,OAAO,KACvB,IAAK7B,EAAGt5B,KAAKx/C,EAAAC,MAAMm9C,YAOjB,OANKm9B,GACHjhF,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,MAAMo7E,EAAGvmE,KAAM,KAGf,MAET5Q,EAAOg5E,GACFj9E,MAAMmB,MAAQm6E,EACnBr3E,EAAKjE,MAAMoB,IAAMg6E,EAAGvmE,SAUjB,GAAIwnC,GAAS/5C,EAAAC,MAAM+U,KACxBrT,EAAO8T,EAAAzU,KAAKQ,WACViU,EAAAzU,KAAKe,2BAA2B,OAAQ+2E,EAAGp7E,aAAc,EAAOo7E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,WAInF,GAAIwnC,GAAS/5C,EAAAC,MAAMsR,KACxB5P,EAAO8T,EAAAzU,KAAKQ,WACViU,EAAAzU,KAAKiH,qBAAqB6wE,EAAGp7E,aAAc,EAAOo7E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,WAIrE,GAAIwnC,GAAS/5C,EAAAC,MAAMO,MAAQu5C,GAAS/5C,EAAAC,MAAMQ,MAC/CkB,EAAO8T,EAAAzU,KAAKQ,WACViU,EAAAzU,KAAKe,2BAA2B,OAAQ+2E,EAAGp7E,aAAc,EAAOo7E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,WAInF,GAAIwnC,GAAS/5C,EAAAC,MAAMi9C,cACxB47B,EAAG7sC,aACHtqC,EAAO8T,EAAAzU,KAAKQ,WACViU,EAAAzU,KAAKe,2BAA2B,SAAU+2E,EAAGp7E,aAAc,EAAOo7E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,UAIrF,IAAIwnC,GAAS/5C,EAAAC,MAAMU,WA6CxB,OANK45E,GACHjhF,KAAKuG,MACH0V,EAAAnY,eAAew9E,oBACf9B,EAAGp7E,SAGA,KA5CP,IAAIuL,EAAawM,EAAAzU,KAAKe,2BAA2B+2E,EAAG94B,iBAAkB84B,EAAGp7E,SACrE+E,EAAa,IAAIhD,MACjBo7E,GAAW,EAGf,GAAI/B,EAAGt5B,KAAKx/C,EAAAC,MAAMi6C,UAAW,CAC3B,EAAG,CACD,IAAI4gC,EAAYxhF,KAAK+gF,UAAUvB,GAAI,EAAMyB,GACzC,IAAKO,EAAW,OAAO,KACvBr4E,EAAWtD,KAAe27E,SACnBhC,EAAGt5B,KAAKx/C,EAAAC,MAAMyQ,QACvB,IAAKooE,EAAGt5B,KAAKx/C,EAAAC,MAAMk6C,aAOjB,OANKogC,GACHjhF,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,MAAMo7E,EAAGvmE,KAAM,KAGf,KAIX,GAAIumE,EAAGt5B,KAAKx/C,EAAAC,MAAMm7C,KAAM,CACtB,IAAI09B,EAAGt5B,KAAKx/C,EAAAC,MAAMM,MAShB,OANKg6E,GACHjhF,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,MAAMo7E,EAAGvmE,KAAM,QAGf,KARPsoE,GAAW,EAWfl5E,EAAO8T,EAAAzU,KAAKQ,WAAWyH,EAAYxG,EAAYo4E,EAAU/B,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAYjF,KAAOumE,EAAGt5B,KAAKx/C,EAAAC,MAAMk+C,cAAc,CACjC,IAAI48B,EAAejC,EAAGp8B,SACtB,IAAKo8B,EAAGt5B,KAAKx/C,EAAAC,MAAMm+C,cAOjB,OANKm8B,GACHjhF,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAGT,KAET,IAAIs9E,EAAelC,EAAGp7E,MAAMq9E,EAAcjC,EAAGvmE,KAGzCsoE,GAAW,EACf,GAAI/B,EAAGt5B,KAAKx/C,EAAAC,MAAMm7C,KAAM,CACtB,IAAI09B,EAAGt5B,KAAKx/C,EAAAC,MAAMM,MAShB,OANKg6E,GACHjhF,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,QAGT,KARPm9E,GAAW,EAiBf,GANAl5E,EAAO8T,EAAAzU,KAAKQ,WACViU,EAAAzU,KAAKe,2BAA2B,QAASi5E,IACvCr5E,GACFk5E,EACA/B,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAEpBsoE,EAAU,MAGhB,OAAOl5E,GAOTqyE,EAAAz4E,UAAAk/E,kBAAA,SACE3B,GAKA,IAuGIp2E,EAvGAi9C,EAAQm5B,EAAGp5B,OACXs5B,EAAWF,EAAGp8B,SACdj6C,EAAqC,KACrCmlB,EAA4B,KAC5BqzD,GAAoB,EAExB,GAAInC,EAAGt5B,KAAKx/C,EAAAC,MAAMm9C,YAChB69B,GAAc,EACdnC,EAAGh5B,QAAQH,GACXl9C,SAEK,CACLw4E,GAAc,EACd,EAAG,CACD,IAAI56E,EAAOoV,EAAA7G,cAAc6pC,QAMzB,GALIqgC,EAAGt5B,KAAKx/C,EAAAC,MAAMg6C,eAChBghC,GAAc,EACdnC,EAAGh5B,QAAQH,GACXt/C,EAAOoV,EAAA7G,cAAciwD,MAEnBia,EAAGt5B,KAAKx/C,EAAAC,MAAMsR,MAAO,CACvB,IAAIunE,EAAGt5B,KAAKx/C,EAAAC,MAAM89C,OAiBhB,OAFA+6B,EAAG/4B,MAAMJ,GACTrmD,KAAKs/E,8BAA+B,EAC7B,KAhBPqC,GAAc,EACdnC,EAAGh5B,QAAQH,GACX,IAAI9kD,EAAIvB,KAAK+gF,UAAUvB,GAAI,GAC3B,IAAKj+E,EAAG,OAAO,KACf,GAAIA,EAAEwF,MAAQoV,EAAAtV,SAASuO,KAMrB,OALApV,KAAKuG,MACH0V,EAAAnY,eAAe2jB,wBACflmB,EAAE6C,OAEJpE,KAAKs/E,8BAA+B,EAC7B,KAEThxD,EAAqB/sB,MAMlB,KAAIi+E,EAAGv5B,iBA8CZ,OATI07B,EACF3hF,KAAKuG,MACH0V,EAAAnY,eAAew9E,oBACf9B,EAAGp7E,SAGLo7E,EAAG/4B,MAAMJ,GAEXrmD,KAAKs/E,6BAA+BqC,EAC7B,KA7CP,IAAI/gF,EAAOub,EAAAzU,KAAKe,2BAA2B+2E,EAAG94B,iBAAkB84B,EAAGp7E,MAAMo7E,EAAGp8B,SAAUo8B,EAAGvmE,MAazF,GAZIumE,EAAGt5B,KAAKx/C,EAAAC,MAAMi+C,YAChB+8B,GAAc,EACdnC,EAAGh5B,QAAQH,GACPt/C,GAAQoV,EAAA7G,cAAciwD,KACxBvlE,KAAKuG,MACH0V,EAAAnY,eAAe89E,oCACfpC,EAAGp7E,SAGL2C,EAAOoV,EAAA7G,cAAcusE,UAGrBrC,EAAGt5B,KAAKx/C,EAAAC,MAAM89C,OAAQ,CACxBk9B,GAAc,EACdnC,EAAGh5B,QAAQH,GACX,IAAIh+C,EAAOrI,KAAK+gF,UAAUvB,GAC1B,IAAKn3E,EAEH,OADArI,KAAKs/E,6BAA+BqC,EAC7B,KAET,IAAIG,EAAQ,IAAI3lE,EAAAnT,cAChB84E,EAAM74E,cAAgBlC,EACtB+6E,EAAMlhF,KAAOA,EACbkhF,EAAMz5E,KAAOA,EACRc,EACAA,EAAWtD,KAAKi8E,GADJ34E,GAAe24E,QAG5BH,GACF3hF,KAAKuG,MACH0V,EAAAnY,eAAewqD,cACfkxB,EAAGp7E,gBAgBJo7E,EAAGt5B,KAAKx/C,EAAAC,MAAMyQ,QACvB,IAAKooE,EAAGt5B,KAAKx/C,EAAAC,MAAMm9C,YAUjB,OATI69B,EACF3hF,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAGdo7E,EAAG/4B,MAAMJ,GAEXrmD,KAAKs/E,6BAA+BqC,EAC7B,KAKX,OAAInC,EAAGt5B,KAAKx/C,EAAAC,MAAMg+C,qBAChBg9B,GAAc,EACdnC,EAAGh5B,QAAQH,IACXj9C,EAAapJ,KAAK+gF,UAAUvB,KAiB9Bx/E,KAAKs/E,8BAA+B,EAC7BnjE,EAAAzU,KAAKwB,gBACVC,MACAC,EACAklB,GACA,EACAkxD,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,QArBpBjZ,KAAKs/E,6BAA+BqC,EAC7B,QAGLA,EACF3hF,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,MAGdo7E,EAAG/4B,MAAMJ,GAEXrmD,KAAKs/E,6BAA+BqC,EAC7B,OAcXjH,EAAAz4E,UAAA09E,eAAA,SACEH,GAKA,IAAIE,EAAWF,EAAGp8B,SAClB,GAAIo8B,EAAGv5B,iBAAkB,CAGvB,IAFA,IAAIrlD,EAAO4+E,EAAG94B,iBACV37C,EAAyBoR,EAAAzU,KAAKe,2BAA2B7H,EAAM4+E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAClFumE,EAAGt5B,KAAKx/C,EAAAC,MAAMs9C,MAAM,CACzB,IAAIu7B,EAAGv5B,iBAYL,OAJAjmD,KAAKuG,MACH0V,EAAAnY,eAAew9E,oBACf9B,EAAGp7E,SAEE,KAXPxD,EAAO4+E,EAAG94B,iBACV37C,EAAaoR,EAAAzU,KAAKkG,+BAChB7C,EACAoR,EAAAzU,KAAKe,2BAA2B7H,EAAM4+E,EAAGp7E,SACzCo7E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAU5B,IAAIxP,OAAI,EACR,IAAI+1E,EAAGt5B,KAAKx/C,EAAAC,MAAMk9C,WAMhB,OAAO1nC,EAAAzU,KAAK8B,gBAAgBuB,EAAY,KAAMy0E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAJpE,GADAxP,EAAOzJ,KAAK+hF,eAAevC,GAEzB,OAAOrjE,EAAAzU,KAAK8B,gBAAgBuB,EAAYtB,EAAM+1E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,WAMxEjZ,KAAKuG,MACH0V,EAAAnY,eAAew9E,oBACf9B,EAAGp7E,SAGP,OAAO,MAGTs2E,EAAAz4E,UAAAk+E,cAAA,SACEX,EACA53E,EACAmI,EACA2vE,GAKA,IAAI5vE,EAAU,IAAI3J,MAClB,EAAG,CACD,IAAI8T,EAASja,KAAKgiF,yBAAyBxC,EAAI53E,EAAOmI,GACtD,IAAKkK,EAAQ,OAAO,KACpBnK,EAAQjK,KAA0BoU,SAC3BulE,EAAGt5B,KAAKx/C,EAAAC,MAAMyQ,QAEvB,IAAIi7B,EAAMl2B,EAAAzU,KAAK6M,wBAAwBzE,EAASC,EAAYnI,EAAO43E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAEzF,OADAumE,EAAGt5B,KAAKx/C,EAAAC,MAAM+9C,WACPrS,GAGTqoC,EAAAz4E,UAAA+/E,yBAAA,SACExC,EACAyC,EACAC,GAKA,IAAK1C,EAAGv5B,iBAKN,OAJAjmD,KAAKuG,MACH0V,EAAAnY,eAAew9E,oBACf9B,EAAGp7E,SAEE,KAET,IAAIuL,EAAawM,EAAAzU,KAAKe,2BAA2B+2E,EAAG94B,iBAAkB84B,EAAGp7E,SACrEwD,EAAQq6E,EAER55E,EAA8B,KAC9Bm3E,EAAGt5B,KAAKx/C,EAAAC,MAAM89C,SAChBp8C,EAAOrI,KAAK+gF,UAAUvB,IAGxB,IAAIz2E,EAAiC,KACrC,GAAIy2E,EAAGt5B,KAAKx/C,EAAAC,MAAMy7C,SAQhB,GAPIx6C,EAAQnB,EAAApE,YAAYwjB,SACtB7lB,KAAKuG,MACH0V,EAAAnY,eAAeq+E,iDACf3C,EAAGp7E,WAGP2E,EAAc/I,KAAKoiF,gBAAgB5C,EAAI,IACrB,OAAO,UAErB53E,EAAQnB,EAAApE,YAAYwpB,MAChBjkB,EAAQnB,EAAApE,YAAYwjB,SACxB7lB,KAAKuG,MACH0V,EAAAnY,eAAe4wD,wCACf/kD,EAAWvL,OAGLiE,GACVrI,KAAKuG,MACH0V,EAAAnY,eAAewqD,cACfkxB,EAAGp7E,MAAMo7E,EAAGvmE,MAIlB,OAAOkD,EAAAzU,KAAK+M,0BACV9E,EACAtH,EACAU,EACAm5E,EACAt6E,EACAlB,EAAAE,MAAMd,KAAK6J,EAAWvL,MAAOo7E,EAAGp7E,WAIpCs2E,EAAAz4E,UAAAi+E,UAAA,SACEV,EACA53E,EACAmI,EACA2vE,GAKA,GAAIF,EAAG17D,QAAUpd,EAAAC,MAAMU,WAKrB,OAJArH,KAAKuG,MACH0V,EAAAnY,eAAew9E,oBACf9B,EAAGp7E,SAEE,KAET,IAAIuL,EAAawM,EAAAzU,KAAKe,2BAA2B+2E,EAAG94B,iBAAkB84B,EAAGp7E,SACzE,GAAIo7E,EAAG17D,QAAUpd,EAAAC,MAAMo+C,UAKrB,OAJA/kD,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAEP,KAGT,IADA,IAAI0L,EAAU,IAAI3J,OACVq5E,EAAGt5B,KAAKx/C,EAAAC,MAAMq+C,aAAa,CACjC,IAAI/qC,EAASja,KAAKqiF,eAAe7C,EAAI/4E,EAAApE,YAAYwF,MACjD,IAAKoS,EAAQ,OAAO,KAEpB,GADAnK,EAAQjK,KAA2BoU,IAC9BulE,EAAGt5B,KAAKx/C,EAAAC,MAAMyQ,OAAQ,CACzB,GAAIooE,EAAGt5B,KAAKx/C,EAAAC,MAAMq+C,YAChB,MAMA,OAJAhlD,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAEP,MAIb,IAAIiuC,EAAMl2B,EAAAzU,KAAK8I,sBACbb,EACAG,EACAC,EACAnI,EACA43E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAGxB,OADAumE,EAAGt5B,KAAKx/C,EAAAC,MAAM+9C,WACPrS,GAGTqoC,EAAAz4E,UAAAogF,eAAA,SACE7C,EACAyC,GAKA,IAAKzC,EAAGv5B,iBAKN,OAJAjmD,KAAKuG,MACH0V,EAAAnY,eAAew9E,oBACf9B,EAAGp7E,SAEE,KAET,IAAIuL,EAAawM,EAAAzU,KAAKe,2BAA2B+2E,EAAG94B,iBAAkB84B,EAAGp7E,SACrE9C,EAA2B,KAC/B,OAAIk+E,EAAGt5B,KAAKx/C,EAAAC,MAAMy7C,WAChB9gD,EAAQtB,KAAKoiF,gBAAgB5C,EAAI,IACd,KAEdrjE,EAAAzU,KAAKgJ,2BACVf,EACArO,EACA2gF,EACAv7E,EAAAE,MAAMd,KAAK6J,EAAWvL,MAAOo7E,EAAGp7E,WAIpCs2E,EAAAz4E,UAAAqgF,YAAA,SACE9C,GAKA,IAAIr1E,EAA0B,KAC9B,GACEq1E,EAAG55B,MAAK,IAASl/C,EAAAC,MAAM+9C,WACvB86B,EAAGn8B,WAAa38C,EAAAC,MAAMq+C,aACrBw6B,EAAGj8B,sBAEEp5C,EAAOnK,KAAKoiF,gBAAgB5C,IAAM,OAAO,KAGjD,IAAIntC,EAAMl2B,EAAAzU,KAAK4L,sBAAsBnJ,EAAMq1E,EAAGp7E,SAE9C,OADAo7E,EAAGt5B,KAAKx/C,EAAAC,MAAM+9C,WACPrS,GAGTqoC,EAAAz4E,UAAAsgF,oBAAA,SACE/C,GAMA,IADA,IAAI5vE,EAAiB,IAAIzJ,OACjBq5E,EAAGt5B,KAAKx/C,EAAAC,MAAMk6C,cAAc,CAClC,IAAI2hC,EAAgBxiF,KAAKyiF,mBAAmBjD,GAC5C,IAAKgD,EAAe,OAAO,KAE3B,GADA5yE,EAAe/J,KAAwB28E,IAClChD,EAAGt5B,KAAKx/C,EAAAC,MAAMyQ,OAAQ,CACzB,GAAIooE,EAAGt5B,KAAKx/C,EAAAC,MAAMk6C,aAChB,MAMA,OAJA7gD,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAEP,MAUb,OAN8B,IAA1BwL,EAAetK,QACjBtF,KAAKuG,MACH0V,EAAAnY,eAAe4+E,oCACflD,EAAGp7E,SAGAwL,GAGT8qE,EAAAz4E,UAAAwgF,mBAAA,SACEjD,GAKA,GAAIA,EAAG17D,QAAUpd,EAAAC,MAAMU,WAAY,CACjC,IAAIsI,EAAawM,EAAAzU,KAAKe,2BACpB+2E,EAAG94B,iBACH84B,EAAGp7E,SAEDuE,EAA+B,KACnC,GAAI62E,EAAGt5B,KAAKx/C,EAAAC,MAAM24C,SAAU,CAC1B,IAAI/9C,EAAIvB,KAAK+gF,UAAUvB,GACvB,IAAKj+E,EAAG,OAAO,KACf,GAAIA,EAAEwF,MAAQoV,EAAAtV,SAASuO,KAKrB,OAJApV,KAAKuG,MACH0V,EAAAnY,eAAe2jB,wBACflmB,EAAE6C,OAEG,KAETuE,EAAwBpH,EAE1B,OAAO4a,EAAAzU,KAAKgB,oBACViH,EACAhH,EACAjC,EAAAE,MAAMd,KAAK6J,EAAWvL,MAAOo7E,EAAGp7E,UAQpC,OALEpE,KAAKuG,MACH0V,EAAAnY,eAAew9E,oBACf9B,EAAGp7E,SAGA,MAKTs2E,EAAAz4E,UAAA0gF,gBAAA,SACEnD,EACA1vB,QAAA,IAAAA,OAAA,GAKA,IAAI3mD,EAAa,IAAIhD,MACjBy8E,EAAiC,KACjCC,GAAe,EACfC,GAAe,EACfx0D,EAAkC,KAItC,GADAtuB,KAAKu/E,oBAAsB,KACvBC,EAAGt5B,KAAKx/C,EAAAC,MAAMsR,MAAO,CACvB,IAAIunE,EAAGt5B,KAAKx/C,EAAAC,MAAM89C,OAgBhB,OAJAzkD,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAEP,KAdP,KADAkqB,EAAWtuB,KAAK+gF,UAAUvB,IACX,OAAO,KAgBxB,GAfMlxD,EAASvnB,MAAQoV,EAAAtV,SAASuO,KAC5BpV,KAAKu/E,oBAAgCjxD,EAErCtuB,KAAKuG,MACH0V,EAAAnY,eAAe2jB,wBACf6G,EAASlqB,QAUVo7E,EAAGt5B,KAAKx/C,EAAAC,MAAMyQ,OACjB,OAAIooE,EAAGt5B,KAAKx/C,EAAAC,MAAMm9C,YACT36C,GAEPnJ,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAEP,MAKb,MAAQo7E,EAAGt5B,KAAKx/C,EAAAC,MAAMm9C,aAAa,CACjC,IAAIg+B,EAAQ9hF,KAAK+iF,eAAevD,EAAI1vB,GACpC,IAAKgyB,EAAO,OAAO,KAQnB,OAPIc,IAAaE,IACf9iF,KAAKuG,MACH0V,EAAAnY,eAAek/E,kDACfJ,EAAShiF,KAAKwD,OAEhB0+E,GAAe,GAEThB,EAAM74E,eACZ,QACM45E,GACF7iF,KAAKuG,MACH0V,EAAAnY,eAAem/E,yDACfnB,EAAMlhF,KAAKwD,OAGf,MAEF,KAAK+X,EAAA7G,cAAcusE,SACjBgB,GAAe,EACf,MAEF,KAAK1mE,EAAA7G,cAAciwD,KACjBqd,EAAWd,EAKf,GADA34E,EAAWtD,KAAKi8E,IACXtC,EAAGt5B,KAAKx/C,EAAAC,MAAMyQ,OAAQ,CACzB,GAAIooE,EAAGt5B,KAAKx/C,EAAAC,MAAMm9C,YAChB,MAMA,OAJA9jD,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAEP,MAIb,OAAO+E,GAGTuxE,EAAAz4E,UAAA8gF,eAAA,SACEvD,EACA1vB,QAAA,IAAAA,OAAA,GAKA,IAAIozB,GAAS,EACTC,GAAa,EACbC,EAA2B,KAC3BC,EAA2B58E,EAAApE,YAAYwF,KAC3C,GAAIioD,IACE0vB,EAAGt5B,KAAKx/C,EAAAC,MAAMw5C,SAChBijC,EAAa5D,EAAGp7E,QAChBi/E,GAAe58E,EAAApE,YAAY89C,QAClBq/B,EAAGt5B,KAAKx/C,EAAAC,MAAMu5C,YACvBkjC,EAAa5D,EAAGp7E,QAChBi/E,GAAe58E,EAAApE,YAAY69C,WAClBs/B,EAAGt5B,KAAKx/C,EAAAC,MAAMs5C,WACvBmjC,EAAa5D,EAAGp7E,QAChBi/E,GAAe58E,EAAApE,YAAY49C,SAEzBu/B,EAAG55B,QAAUl/C,EAAAC,MAAM8hB,UAAU,CAC/B,IAAI49B,EAAQm5B,EAAGp5B,OACfo5B,EAAG17D,OACC07D,EAAG55B,QAAUl/C,EAAAC,MAAM89C,OACrB+6B,EAAGh5B,QAAQH,GACN+8B,IAAYA,EAAa5D,EAAGp7E,SACjCi/E,GAAe58E,EAAApE,YAAYomB,UAE3B+2D,EAAG/4B,MAAMJ,GAef,GAXIm5B,EAAGt5B,KAAKx/C,EAAAC,MAAMg6C,eACZ0iC,EACFrjF,KAAKuG,MACH0V,EAAAnY,eAAew/E,+DACf9D,EAAGp7E,SAGLg/E,EAAa5D,EAAGp7E,QAElB8+E,GAAS,GAEP1D,EAAGv5B,iBAAkB,CAClBi9B,IAAQE,EAAa5D,EAAGp7E,SAC7B,IAAIuL,EAAawM,EAAAzU,KAAKe,2BAA2B+2E,EAAG94B,iBAAkB84B,EAAGp7E,SACrEiE,EAA8B,KASlC,IARI86E,EAAa3D,EAAGt5B,KAAKx/C,EAAAC,MAAMi+C,YACzBs+B,GACFljF,KAAKuG,MACH0V,EAAAnY,eAAe89E,oCACfjyE,EAAWvL,OAIbo7E,EAAGt5B,KAAKx/C,EAAAC,MAAM89C,QAEhB,KADAp8C,EAAOrI,KAAK+gF,UAAUvB,IACX,OAAO,UAElBn3E,EAAO8T,EAAAzU,KAAKc,kBAAkBg3E,EAAGp7E,MAAMo7E,EAAGvmE,MAE5C,IAAIlQ,EAAiC,KACrC,GAAIy2E,EAAGt5B,KAAKx/C,EAAAC,MAAMy7C,UACZ8gC,GACFljF,KAAKuG,MACH0V,EAAAnY,eAAey/E,4CACf5zE,EAAWvL,OAGX++E,EACFnjF,KAAKuG,MACH0V,EAAAnY,eAAe0/E,oDACf7zE,EAAWvL,OAGb++E,GAAa,IAEfp6E,EAAc/I,KAAKoiF,gBAAgB5C,EAAI,KACrB,OAAO,KAE3B,IAAIsC,EAAQ3lE,EAAAzU,KAAKoB,gBACf6G,EACAtH,EACAU,EACAm6E,EACI/mE,EAAA7G,cAAciwD,KACd4d,EACEhnE,EAAA7G,cAAcusE,SACd1lE,EAAA7G,cAAc6pC,QACpBz4C,EAAAE,MAAMd,KAAYs9E,EAAY5D,EAAGp7E,UAGnC,OADA09E,EAAMl6E,OAASy7E,EACRvB,EAOT,OALE9hF,KAAKuG,MACH0V,EAAAnY,eAAew9E,oBACf9B,EAAGp7E,SAGA,MAGTs2E,EAAAz4E,UAAAm+E,cAAA,SACEZ,EACA53E,EACAmI,EACA2vE,GAUA,IAAKF,EAAGv5B,iBAKN,OAJAjmD,KAAKuG,MACH0V,EAAAnY,eAAew9E,oBACf9B,EAAGp7E,MAAMo7E,EAAGvmE,MAEP,KAGT,IAAIrY,EAAOub,EAAAzU,KAAKe,2BAA2B+2E,EAAG94B,iBAAkB84B,EAAGp7E,SAC/Dq/E,GAAuB,EAEvB7zE,EAA6C,KACjD,GAAI4vE,EAAGt5B,KAAKx/C,EAAAC,MAAMi6C,UAAW,CAG3B,GAFA6iC,EAAiBjE,EAAGp8B,WACpBxzC,EAAiB5P,KAAKuiF,oBAAoB/C,IACrB,OAAO,KAC5B53E,GAASnB,EAAApE,YAAYujB,QAGvB,IAAK45D,EAAGt5B,KAAKx/C,EAAAC,MAAMk9C,WAKjB,OAJA7jD,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,MAAMo7E,EAAGvmE,KAAM,KAEb,KAGLwqE,EAAiB,IACnBA,EAAiBjE,EAAGp8B,UAGtB,IAAIj6C,EAAanJ,KAAK2iF,gBAAgBnD,GACtC,IAAKr2E,EAAY,OAAO,KACxB,IAAImlB,EAAWtuB,KAAKu/E,oBAEhBmE,EAAwC,IAA5B97E,EAAQnB,EAAApE,YAAY6lB,KAChCw7D,IACuB,GAArBv6E,EAAW7D,QACbtF,KAAKuG,MACH0V,EAAAnY,eAAe6/E,+CACf/iF,EAAKwD,OAGL+E,EAAW7D,QAAU6D,EAAW,GAAGJ,aACrC/I,KAAKuG,MACH0V,EAAAnY,eAAe8/E,oDACfhjF,EAAKwD,QAKPwD,EAAQnB,EAAApE,YAAY4lB,KAClB9e,EAAW7D,QACbtF,KAAKuG,MACH0V,EAAAnY,eAAe+/E,sCACfjjF,EAAKwD,OAKX,IAAIgF,EAAoC,KACxC,GAAIo2E,EAAGt5B,KAAKx/C,EAAAC,MAAM89C,UAChBr7C,EAAapJ,KAAK+gF,UAAUvB,GAAI,EAAMkE,IACrB,OAAO,KAGrBt6E,IACHA,EAAa+S,EAAAzU,KAAKc,kBAChBg3E,EAAGp7E,MAAMo7E,EAAGvmE,MAETyqE,GACH1jF,KAAKuG,MACH0V,EAAAnY,eAAewqD,cACfllD,EAAWhF,QAKjB,IAAI2O,EAAYoJ,EAAAzU,KAAKwB,gBACnBC,EACAC,EACAklB,GACA,EACAkxD,EAAGp7E,MAAMq/E,EAAgBjE,EAAGvmE,MAG1BjG,EAAyB,KAC7B,GAAIwsE,EAAGt5B,KAAKx/C,EAAAC,MAAMo+C,YAShB,GARIn9C,EAAQnB,EAAApE,YAAYwjB,SACtB7lB,KAAKuG,MACH0V,EAAAnY,eAAe8rD,yDACf4vB,EAAGp7E,WAIP4O,EAAOhT,KAAK8jF,oBAAoBtE,GAAI,IACzB,OAAO,UACP53E,EAAQnB,EAAApE,YAAYwjB,SAC/B7lB,KAAKuG,MACH0V,EAAAnY,eAAe+rD,gFACf2vB,EAAGp7E,MAAMo7E,EAAGvmE,MAIhB,IAAIo5B,EAAMl2B,EAAAzU,KAAKoL,0BACblS,EACAgP,EACAmD,EACAC,EACAjD,EACAnI,EACA43E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAGxB,OADAumE,EAAGt5B,KAAKx/C,EAAAC,MAAM+9C,WACPrS,GAGTqoC,EAAAz4E,UAAA8hF,wBAAA,SAAwBvE,GACtB,IACI5+E,EADA8+E,EAAWF,EAAGp8B,SAEd4gC,GAAU,EAOd,GAAIxE,EAAG/+B,OAAS/5C,EAAAC,MAAM4Q,UAMpB,GAJE3W,EADE4+E,EAAGv5B,iBACE9pC,EAAAzU,KAAKe,2BAA2B+2E,EAAG94B,iBAAkB84B,EAAGp7E,SAExD+X,EAAAzU,KAAK2C,gCAAgCm1E,EAAGp7E,MAAMo7E,EAAGvmE,OAErDumE,EAAGt5B,KAAKx/C,EAAAC,MAAMk9C,WAKjB,OAJA7jD,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,MAAMo7E,EAAGvmE,KAAM,KAEb,UAQT+qE,GAAU,EACVvgF,OAAO+7E,EAAG/+B,OAAS/5C,EAAAC,MAAMk9C,WACzBjjD,EAAOub,EAAAzU,KAAK2C,gCAAgCm1E,EAAGp7E,MAAMo7E,EAAGp8B,WAK1D,IAAIqgC,EAAiBjE,EAAGvmE,IACpB9P,EAAanJ,KAAK2iF,gBAAgBnD,GACtC,OAAKr2E,EAEEnJ,KAAKikF,8BAA8BzE,EAAI5+E,EAAMuI,EAAY66E,EAAStE,EAAU+D,GAF3D,MAKlB/I,EAAAz4E,UAAAgiF,8BAAR,SACEzE,EACA5+E,EACAuI,EACA66E,EACAtE,EACA+D,QADA,IAAA/D,OAAiB,QACjB,IAAA+D,OAAuB,GAEnB/D,EAAW,IAAGA,EAAW9+E,EAAKwD,MAAMmB,OACpCk+E,EAAiB,IAAGA,EAAiB/D,GAEzC,IAAIt2E,EAAoC,KACxC,GAAIo2E,EAAGt5B,KAAKx/C,EAAAC,MAAM89C,QAEhB,KADAr7C,EAAapJ,KAAK+gF,UAAUvB,IACX,OAAO,UAExBp2E,EAAa+S,EAAAzU,KAAKc,kBAAkBg3E,EAAGp7E,MAAMo7E,EAAGvmE,MAChDjZ,KAAKuG,MACH0V,EAAAnY,eAAewqD,cACfllD,EAAWhF,OAIf,GAAI4/E,IACGxE,EAAGt5B,KAAKx/C,EAAAC,MAAMg+C,oBAKjB,OAJA3kD,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,MAAMo7E,EAAGvmE,KAAM,MAEb,KAIX,IAQIjG,EARAD,EAAYoJ,EAAAzU,KAAKwB,gBACnBC,EACAC,EACA,MACA,EACAo2E,EAAGp7E,MAAMq/E,EAAgBjE,EAAGvmE,MAI9B,GAAI+qE,EACFhxE,EAAOhT,KAAKqgF,eAAeb,GAAI,OAC1B,CACL,IAAKA,EAAGt5B,KAAKx/C,EAAAC,MAAMo+C,WAKjB,OAJA/kD,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,MAAMo7E,EAAGvmE,KAAM,KAEb,KAETjG,EAAOhT,KAAK8jF,oBAAoBtE,GAAI,GAEtC,IAAKxsE,EAAM,OAAO,KAElB,IAAIrH,EAAcwQ,EAAAzU,KAAKoL,0BACrBlS,EACA,KACAmS,EACAC,EACA,KACAgxE,EAAUv9E,EAAApE,YAAYuK,MAAQnG,EAAApE,YAAYwF,KAC1C23E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAExB,OAAOkD,EAAAzU,KAAKgF,yBAAyBf,IAGvC+uE,EAAAz4E,UAAAq+E,sBAAA,SACEd,EACA53E,EACAmI,EACA2vE,GAUA,IAAIp3D,EAAck3D,EAAG/+B,OAAS/5C,EAAAC,MAAMorB,UAEpC,IAAKytD,EAAGv5B,iBAKN,OAJAjmD,KAAKuG,MACH0V,EAAAnY,eAAew9E,oBACf9B,EAAGp7E,SAEE,KAGT,IAKIwL,EALAD,EAAawM,EAAAzU,KAAKe,2BACpB+2E,EAAG94B,iBACH84B,EAAGp7E,SAIL,GAAIo7E,EAAGt5B,KAAKx/C,EAAAC,MAAMi6C,UAAW,CAE3B,KADAhxC,EAAiB5P,KAAKuiF,oBAAoB/C,IACrB,OAAO,KAC5B53E,GAASnB,EAAApE,YAAYujB,aAErBhW,KAGF,IAAIjH,EAA+B,KACnC,GAAI62E,EAAGt5B,KAAKx/C,EAAAC,MAAM24C,SAAU,CAC1B,IAAI/9C,EAAIvB,KAAK+gF,UAAUvB,GACvB,IAAKj+E,EAAG,OAAO,KACf,GAAIA,EAAEwF,MAAQoV,EAAAtV,SAASuO,KAKrB,OAJApV,KAAKuG,MACH0V,EAAAnY,eAAe2jB,wBACflmB,EAAE6C,OAEG,KAETuE,EAAwBpH,EAG1B,IAAIsO,EAAqC,KACzC,GAAI2vE,EAAGt5B,KAAKx/C,EAAAC,MAAM84C,YAAa,CACzBn3B,GACFtoB,KAAKuG,MACH0V,EAAAnY,eAAeogF,oDACf1E,EAAGp7E,SAGP,EAAG,CACD,IAAIiE,EAAOrI,KAAK+gF,UAAUvB,GAC1B,IAAKn3E,EAAM,OAAO,KACbigB,IACEzY,IAAiBA,MACtBA,EAAgBhK,KAAewC,UAE1Bm3E,EAAGt5B,KAAKx/C,EAAAC,MAAMyQ,QAGzB,IAAKooE,EAAGt5B,KAAKx/C,EAAAC,MAAMo+C,WAKjB,OAJA/kD,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAEP,KAGT,IACIuH,EADAmE,EAAU,IAAI3J,MAyBlB,GAvBImiB,GACF7kB,QAAQoM,GACRlE,EAAcwQ,EAAAzU,KAAK6K,2BACjB5C,EACAC,EACAjH,EACAmH,EACAC,EACAnI,EACA43E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,OAGxBtN,EAAcwQ,EAAAzU,KAAKgI,uBACjBC,EACAC,EACAjH,EACAkH,EACAC,EACAC,EACAnI,EACA43E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,OAGrBumE,EAAGt5B,KAAKx/C,EAAAC,MAAMq+C,YACjB,EAAG,CACD,IAAI/qC,EAASja,KAAKmkF,iBAAiB3E,EAAI7zE,GACvC,IAAKsO,EAAQ,OAAO,KACpBA,EAAOtS,OAASgE,EAChBmE,EAAQjK,KAA2BoU,UAC3BulE,EAAGt5B,KAAKx/C,EAAAC,MAAMq+C,aAE1B,OAAOr5C,GAGT+uE,EAAAz4E,UAAAmiF,qBAAA,SAAqB5E,GAInB,IACI5+E,EADA8+E,EAAWF,EAAGp8B,SASlB,GALExiD,EADE4+E,EAAGv5B,iBACE9pC,EAAAzU,KAAKe,2BAA2B+2E,EAAG94B,iBAAkB84B,EAAGp7E,SAExD+X,EAAAzU,KAAK2C,gCAAgCm1E,EAAGp7E,MAAMo7E,EAAGvmE,OAGrDumE,EAAGt5B,KAAKx/C,EAAAC,MAAMo+C,WAKjB,OAJA/kD,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,MAAMo7E,EAAGvmE,KAAM,KAEb,KAGT,IAAInJ,EAAU,IAAI3J,MACdwF,EAAcwQ,EAAAzU,KAAKgI,uBACrB9O,KAEA,KACA,KACAkP,EACA,KACArJ,EAAApE,YAAYwF,KACZ23E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAExB,IAAKumE,EAAGt5B,KAAKx/C,EAAAC,MAAMq+C,YACjB,EAAG,CACD,IAAI/qC,EAASja,KAAKmkF,iBAAiB3E,EAAI7zE,GACvC,IAAKsO,EAAQ,OAAO,KACpBA,EAAOtS,OAASgE,EAChBmE,EAAQjK,KAA2BoU,UAC3BulE,EAAGt5B,KAAKx/C,EAAAC,MAAMq+C,aAE1B,OAAO7oC,EAAAzU,KAAKgE,sBAAsBC,IAGpC+uE,EAAAz4E,UAAAkiF,iBAAA,SACE3E,EACA73E,GAcA,IAJA,IAAI+3E,EAAWF,EAAGvmE,IACdqP,EAAc3gB,EAAOZ,MAAQoV,EAAAtV,SAASqU,qBAEtCnL,EAAa,IAAI5J,MACdq5E,EAAGt5B,KAAKx/C,EAAAC,MAAMs+C,KAAK,CACxB,IAAIlpC,EAAY/b,KAAK2/E,eAAeH,GACpC,IAAKzjE,EAAW,MACZuM,GACFtoB,KAAKuG,MACH0V,EAAAnY,eAAe+8E,8BACf9kE,EAAU3X,OAGd2L,EAAWlK,KAAoBkW,GAIjC,IAAInU,EAAQD,EAAOC,MAAQnB,EAAApE,YAAYwjB,QAGnCyC,IAAa1gB,GAASnB,EAAApE,YAAYq2E,SAElC8G,EAAGt5B,KAAKx/C,EAAAC,MAAMw5C,SACZ73B,GACFtoB,KAAKuG,MACH0V,EAAAnY,eAAe88E,gCACfpB,EAAGp7E,QAAS,UAGhBwD,GAASnB,EAAApE,YAAY89C,QACZq/B,EAAGt5B,KAAKx/C,EAAAC,MAAMs5C,UACnB33B,GACFtoB,KAAKuG,MACH0V,EAAAnY,eAAe88E,gCACfpB,EAAGp7E,QAAS,WAGhBwD,GAASnB,EAAApE,YAAY49C,SACZu/B,EAAGt5B,KAAKx/C,EAAAC,MAAMu5C,aACnB53B,GACFtoB,KAAKuG,MACH0V,EAAAnY,eAAe88E,gCACfpB,EAAGp7E,QAAS,aAGhBwD,GAASnB,EAAApE,YAAY69C,WAGvB,IAAImkC,EAAmB,EACnBC,EAAiB,EACjBC,EAAqB,EACrBC,EAAmB,EACnBhF,EAAGt5B,KAAKx/C,EAAAC,MAAMoT,SACZuO,GACFtoB,KAAKuG,MACH0V,EAAAnY,eAAe88E,gCACfpB,EAAGp7E,QAAS,UAGhBwD,GAASnB,EAAApE,YAAY0X,OACrBsqE,EAAc7E,EAAGp8B,SACjBkhC,EAAY9E,EAAGvmE,MAEfrR,GAASnB,EAAApE,YAAY+rB,SACjBoxD,EAAGt5B,KAAKx/C,EAAAC,MAAM+hB,YACZJ,GACFtoB,KAAKuG,MACH0V,EAAAnY,eAAe88E,gCACfpB,EAAGp7E,QAAS,YAGhBwD,GAASnB,EAAApE,YAAYqmB,SACrB67D,EAAgB/E,EAAGp8B,SACnBohC,EAAchF,EAAGvmE,KAEftR,EAAOC,MAAQnB,EAAApE,YAAYujB,UAC7Bhe,GAASnB,EAAApE,YAAY2wD,kBAIzB,IAAIyxB,EAAqB,EACrBC,EAAmB,EACnBlF,EAAGt5B,KAAKx/C,EAAAC,MAAM8hB,YAChB7gB,GAASnB,EAAApE,YAAYomB,SACrBg8D,EAAgBjF,EAAGp8B,SACnBshC,EAAclF,EAAGvmE,KAInB,IAAIotC,EAAQm5B,EAAGp5B,OACX0J,GAAgB,EAChBjmC,GAAW,EAGX65D,GAAW,EACX7zC,EAAgB,EAChB80C,EAAc,EAwDlB,GAvDKr8D,IACCk3D,EAAGt5B,KAAKx/C,EAAAC,MAAMshB,KACZu3D,EAAG55B,MAAK,EAAMl/C,EAAAg4C,mBAAmB8G,SAAW9+C,EAAAC,MAAMU,YAAem4E,EAAGj8B,mBAYtEi8B,EAAG/4B,MAAMJ,IAXTz+C,GAASnB,EAAApE,YAAY4lB,IACrB4B,GAAW,EACXgmB,EAAW2vC,EAAGp8B,SACduhC,EAASnF,EAAGvmE,IACRrR,EAAQnB,EAAApE,YAAYomB,UACtBzoB,KAAKuG,MACH0V,EAAAnY,eAAe88E,gCACfpB,EAAGp7E,MAAMqgF,EAAeC,GAAc,aAMnClF,EAAGt5B,KAAKx/C,EAAAC,MAAMuhB,KACnBs3D,EAAG55B,MAAK,EAAMl/C,EAAAg4C,mBAAmB8G,SAAW9+C,EAAAC,MAAMU,YAAem4E,EAAGj8B,mBAYtEi8B,EAAG/4B,MAAMJ,IAXTz+C,GAASnB,EAAApE,YAAY6lB,IAAMzhB,EAAApE,YAAY6lB,IACvCw7D,GAAW,EACX7zC,EAAW2vC,EAAGp8B,SACduhC,EAASnF,EAAGvmE,IACRrR,EAAQnB,EAAApE,YAAYomB,UACtBzoB,KAAKuG,MACH0V,EAAAnY,eAAe88E,gCACfpB,EAAGp7E,MAAMqgF,EAAeC,GAAc,aAMnClF,EAAGt5B,KAAKx/C,EAAAC,MAAM0Q,eAEvBy4C,GAAgB,GADhBloD,GAASnB,EAAApE,YAAYgV,aAET5Q,EAAApE,YAAY0X,QACtB/Z,KAAKuG,MACH0V,EAAAnY,eAAe88E,gCACfpB,EAAGp7E,MAAMigF,EAAaC,GAAY,UAGlC18E,EAAQnB,EAAApE,YAAYqmB,UACtB1oB,KAAKuG,MACH0V,EAAAnY,eAAe88E,gCACfpB,EAAGp7E,MAAMmgF,EAAeC,GAAc,YAGtC58E,EAAQnB,EAAApE,YAAYomB,UACtBzoB,KAAKuG,MACH0V,EAAAnY,eAAe88E,gCACfpB,EAAGp7E,MAAMqgF,EAAeC,GAAc,eAMzC50B,IAAkB0vB,EAAGv5B,iBAKxB,OAJAjmD,KAAKuG,MACH0V,EAAAnY,eAAew9E,oBACf9B,EAAGp7E,SAEE,KAGT,IAAIxD,EAAOkvD,EACP3zC,EAAAzU,KAAKsE,4BAA4BwzE,EAAGp7E,SACpC+X,EAAAzU,KAAKe,2BAA2B+2E,EAAG94B,iBAAkB84B,EAAGp7E,SACxDwL,EAA6C,KACjD,GAAI4vE,EAAGt5B,KAAKx/C,EAAAC,MAAMi6C,UAAW,CAC3B,IAAIgkC,EAAsBpF,EAAGp8B,SAE7B,KADAxzC,EAAiB5P,KAAKuiF,oBAAoB/C,IACrB,OAAO,KACxB1vB,EACF9vD,KAAKuG,MACH0V,EAAAnY,eAAe+gF,2DACfrF,EAAGp7E,MAAMwgF,EAAqBpF,EAAGvmE,MAE1B4Q,GAAY65D,EACrB1jF,KAAKuG,MACH0V,EAAAnY,eAAeghF,wCACftF,EAAGp7E,MAAMwgF,EAAqBpF,EAAGvmE,MAGnCrR,GAASnB,EAAApE,YAAYujB,QAKzB,GAAI45D,EAAGt5B,KAAKx/C,EAAAC,MAAMk9C,WAAY,CAC5B,IAAI4/B,EAAiBjE,EAAGp8B,SACpBj6C,EAAanJ,KAAK2iF,gBAAgBnD,EAAI1vB,GAC1C,IAAK3mD,EAAY,OAAO,KACxB,IAAImlB,EAAWtuB,KAAKu/E,oBACpB,GAAIzvB,EACF,IAAK,IAAIzvD,EAAI,EAAGsK,EAAIxB,EAAW7D,OAAQjF,EAAIsK,IAAKtK,EAAG,CACjD,IAAImhF,EAAYr4E,EAAW9I,GAC3B,GAAImhF,EAAUx5E,MACZvB,EAAApE,YAAY89C,OACZ15C,EAAApE,YAAY69C,UACZz5C,EAAApE,YAAY49C,QACZx5C,EAAApE,YAAYomB,UACX,CACD,IAAIjT,EAA2B2G,EAAAzU,KAAK+K,uBAClC+uE,EAAU5gF,KACV4gF,EAAUn5E,KACV,KACA,KACAm5E,EAAU55E,MAAQnB,EAAApE,YAAY+rB,SAC9BozD,EAAUp9E,OAEZoR,EAAyBqF,eAAiBxa,EAC1CmV,EAAyB7N,OAASA,EAClC65E,EAAUhsE,yBAA2BA,EACrC7N,EAAOmI,QAAQjK,KAAK2P,SAGfqU,EACL1gB,EAAW7D,QACbtF,KAAKuG,MACH0V,EAAAnY,eAAe+/E,sCACfjjF,EAAKwD,OAGAs/E,IACgB,GAArBv6E,EAAW7D,QACbtF,KAAKuG,MACH0V,EAAAnY,eAAe6/E,+CACf/iF,EAAKwD,OAGL+E,EAAW7D,QAAU6D,EAAW,GAAGJ,aACrC/I,KAAKuG,MACH0V,EAAAnY,eAAe8/E,oDACfhjF,EAAKwD,QAKX,IAAIgF,EAAoC,KACxC,GAAIo2E,EAAGt5B,KAAKx/C,EAAAC,MAAM89C,QAahB,GAZI7jD,EAAKmG,MAAQoV,EAAAtV,SAASwQ,YACxBrX,KAAKuG,MACH0V,EAAAnY,eAAeihF,2DACfvF,EAAGp7E,SAEIs/E,GACT1jF,KAAKuG,MACH0V,EAAAnY,eAAekhF,oDACfxF,EAAGp7E,WAGPgF,EAAapJ,KAAK+gF,UAAUvB,EAAI5+E,EAAKmG,MAAQoV,EAAAtV,SAASwQ,aAAeqsE,IACpD,OAAO,UAExBt6E,EAAa+S,EAAAzU,KAAKc,kBAAkBg3E,EAAGp7E,MAAMo7E,EAAGvmE,MAC3CyqE,GAAY9iF,EAAKmG,MAAQoV,EAAAtV,SAASwQ,aACrCrX,KAAKuG,MACH0V,EAAAnY,eAAewqD,cACfllD,EAAWhF,OAKjB,IAAI2O,EAAYoJ,EAAAzU,KAAKwB,gBACnBC,EACAC,EACAklB,GACA,EACAkxD,EAAGp7E,MAAMq/E,EAAgBjE,EAAGvmE,MAG1BjG,EAAyB,KAC7B,GAAIwsE,EAAGt5B,KAAKx/C,EAAAC,MAAMo+C,YAahB,GAZIn9C,EAAQnB,EAAApE,YAAYwjB,QACtB7lB,KAAKuG,MACH0V,EAAAnY,eAAe8rD,yDACf4vB,EAAGp7E,SAEIwD,EAAQnB,EAAApE,YAAYqmB,UAC7B1oB,KAAKuG,MACH0V,EAAAnY,eAAemhF,qEACfzF,EAAGp7E,QAASxD,EAAKwE,QAGrB4N,EAAOhT,KAAK8jF,oBAAoBtE,GAAI,IACzB,OAAO,UACP53E,EAAQnB,EAAApE,YAAYwjB,SAAayC,GAC5CtoB,KAAKuG,MACH0V,EAAAnY,eAAe+rD,gFACf2vB,EAAGp7E,SAIP,IAAI8gF,EAAY/oE,EAAAzU,KAAKwL,wBACnBtS,EACAgP,EACAmD,EACAC,EACAjD,EACAnI,EACA43E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAGxB,OADAumE,EAAGt5B,KAAKx/C,EAAAC,MAAM+9C,WACPwgC,EAEF,GAAIp1B,EACT9vD,KAAKuG,MACH0V,EAAAnY,eAAeqhF,sCACfvkF,EAAKwD,WAGF,KAAIylB,IAAY65D,EAOhB,CACD97E,EAAQnB,EAAApE,YAAYqmB,UACtB1oB,KAAKuG,MACH0V,EAAAnY,eAAe88E,gCACfpB,EAAGp7E,MAAMmgF,EAAeC,GAAc,YAItC58E,EAAQnB,EAAApE,YAAY4lB,KACtBjoB,KAAKuG,MACH0V,EAAAnY,eAAe88E,gCACfpB,EAAGp7E,MAzOW,EACF,GAwOgB,OAI5BwD,EAAQnB,EAAApE,YAAY6lB,KACtBloB,KAAKuG,MACH0V,EAAAnY,eAAe88E,gCACfpB,EAAGp7E,MAAMyrC,EAAU80C,GAAS,OAIhC,IAAIt8E,EAA8B,KAClC,GAAIm3E,EAAGt5B,KAAKx/C,EAAAC,MAAM89C,QAEhB,KADAp8C,EAAOrI,KAAK+gF,UAAUvB,IACX,OAAO,UAElBx/E,KAAKuG,MACH0V,EAAAnY,eAAewqD,cACfkxB,EAAGp7E,SAGP,IAAI2E,EAAiC,KACrC,GAAIy2E,EAAGt5B,KAAKx/C,EAAAC,MAAMy7C,WAChBr5C,EAAc/I,KAAKoiF,gBAAgB5C,IACjB,OAAO,KAE3B,IAAI4F,EAAWjpE,EAAAzU,KAAK+K,uBAClB7R,EACAyH,EACAU,EACAgH,EACAnI,EACA43E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAGxB,OADAumE,EAAGt5B,KAAKx/C,EAAAC,MAAM+9C,WACP0gC,EApDPplF,KAAKuG,MACH0V,EAAAnY,eAAe+rD,gFACfjvD,EAAKwD,OAoDT,OAAO,MAGTs2E,EAAAz4E,UAAAs+E,eAAA,SACEf,EACA53E,EACAmI,EACA2vE,GAKA,GAAIF,EAAGv5B,iBAAkB,CACvB,IAAIt2C,EAAawM,EAAAzU,KAAKe,2BAA2B+2E,EAAG94B,iBAAkB84B,EAAGp7E,SACzE,GAAIo7E,EAAGt5B,KAAKx/C,EAAAC,MAAMo+C,WAAY,CAS5B,IARA,IAAIj1C,EAAU,IAAI3J,MACdzE,EAAKya,EAAAzU,KAAK0L,2BACZzD,EACAG,EACAC,EACAnI,EACA43E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,OAEhBumE,EAAGt5B,KAAKx/C,EAAAC,MAAMq+C,aAAa,CACjC,IAAI/qC,EAASja,KAAKy/E,uBAAuBD,EAAI99E,GAC7C,IAAKuY,EAAQ,OAAO,KACpBA,EAAOtS,OAASjG,EAChBoO,EAAQjK,KAAKoU,GAGf,OADAulE,EAAGt5B,KAAKx/C,EAAAC,MAAM+9C,WACPhjD,EAEP1B,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,UAIhBpE,KAAKuG,MACH0V,EAAAnY,eAAew9E,oBACf9B,EAAGp7E,SAGP,OAAO,MAGTs2E,EAAAz4E,UAAA0+E,YAAA,SACEnB,EACA53E,EACA83E,GAKA,IAAI7uE,EAAuC,KAC3C,GAAI2uE,EAAGt5B,KAAKx/C,EAAAC,MAAMo+C,WAAY,CAE5B,IADA,IAAIj1C,EAAU,IAAI3J,OACVq5E,EAAGt5B,KAAKx/C,EAAAC,MAAMq+C,aAAa,CAC/B,IAAI/qC,EAASja,KAAKqlF,kBAAkB7F,GACpC,IAAKvlE,EAAQ,OAAO,KAEtB,GADEnK,EAAQjK,KAAKoU,IACVulE,EAAGt5B,KAAKx/C,EAAAC,MAAMyQ,OAAQ,CACzB,GAAIooE,EAAGt5B,KAAKx/C,EAAAC,MAAMq+C,YAChB,MAMA,OAJAhlD,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAEP,MAIb,GAAIo7E,EAAGt5B,KAAKx/C,EAAAC,MAAM64C,MAAO,CACvB,IAAIggC,EAAGt5B,KAAKx/C,EAAAC,MAAMi9C,eAOhB,OAJA5jD,KAAKuG,MACH0V,EAAAnY,eAAe2lB,wBACf+1D,EAAGp7E,SAEE,KANPyM,EAAOsL,EAAAzU,KAAK6G,8BAA8BixE,EAAG7sC,aAAc6sC,EAAGp7E,SAgBlE,OALqB,QADjB8M,GADAmhC,EAAMl2B,EAAAzU,KAAKkJ,sBAAsBd,EAASe,EAAMjJ,EAAO43E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,OAC1D/H,eACOlR,KAAKo/E,QAAQ/5D,IAAInU,KAC7ClR,KAAKm/E,QAAQt5E,KAAKqL,GAClBlR,KAAKo/E,QAAQh0D,IAAIla,IAEnBsuE,EAAGt5B,KAAKx/C,EAAAC,MAAM+9C,WACPrS,EACF,GAAImtC,EAAGt5B,KAAKx/C,EAAAC,MAAM06C,UACvB,GAAIm+B,EAAGt5B,KAAKx/C,EAAAC,MAAM64C,MAAO,CACvB,GAAIggC,EAAGt5B,KAAKx/C,EAAAC,MAAMi9C,eAAgB,CAChC/yC,EAAOsL,EAAAzU,KAAK6G,8BAA8BixE,EAAG7sC,aAAc6sC,EAAGp7E,SAC9D,IAAIiuC,EAAMl2B,EAAAzU,KAAKkJ,sBAAsB,KAAMC,EAAMjJ,EAAO43E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAC1E/H,EAAezN,OAAO4uC,EAAInhC,cAC1BpM,EAAS06E,EAAG16E,OAQhB,OAPKA,EAAOiU,cAAajU,EAAOiU,YAAc,IAAIoS,KAClDrmB,EAAOiU,YAAYqS,IAAIla,GAClBlR,KAAKo/E,QAAQ/5D,IAAInU,KACpBlR,KAAKm/E,QAAQt5E,KAAKqL,GAClBlR,KAAKo/E,QAAQh0D,IAAIla,IAEnBsuE,EAAGt5B,KAAKx/C,EAAAC,MAAM+9C,WACPrS,EAEPryC,KAAKuG,MACH0V,EAAAnY,eAAe2lB,wBACf+1D,EAAGp7E,cAIPpE,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,aAIhBpE,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAGhB,OAAO,MAGTs2E,EAAAz4E,UAAAojF,kBAAA,SACE7F,GAKA,GAAIA,EAAGv5B,iBAAkB,CACvB,IAAIt2C,EAAawM,EAAAzU,KAAKe,2BAA2B+2E,EAAG94B,iBAAkB84B,EAAGp7E,SACrEkhF,EAA4C,KAChD,GAAI9F,EAAGt5B,KAAKx/C,EAAAC,MAAMi4C,IAAK,CACrB,IAAI4gC,EAAGr5B,qBAOL,OAJAnmD,KAAKuG,MACH0V,EAAAnY,eAAew9E,oBACf9B,EAAGp7E,SAEE,KANPkhF,EAAenpE,EAAAzU,KAAKe,2BAA2B+2E,EAAG94B,iBAAkB84B,EAAGp7E,SAS3E,OAAO+X,EAAAzU,KAAK6J,mBACV5B,EACA21E,EACAA,EACI5+E,EAAAE,MAAMd,KAAK6J,EAAWvL,MAAOkhF,EAAalhF,OAC1CuL,EAAWvL,OAQnB,OALEpE,KAAKuG,MACH0V,EAAAnY,eAAew9E,oBACf9B,EAAGp7E,SAGA,MAGTs2E,EAAAz4E,UAAAw+E,YAAA,SACEjB,GAOA,IAAIE,EAAWF,EAAGp8B,SACdtzC,EAAsC,KACtCqC,EAA6C,KAC7CozE,GAAW,EACf,GAAI/F,EAAGt5B,KAAKx/C,EAAAC,MAAMo+C,WAEhB,IADAj1C,EAAU,IAAI3J,OACNq5E,EAAGt5B,KAAKx/C,EAAAC,MAAMq+C,aAAa,CACjC,IAAI/qC,EAASja,KAAKwlF,uBAAuBhG,GACzC,IAAKvlE,EAAQ,OAAO,KAEpB,GADAnK,EAAQjK,KAAKoU,IACRulE,EAAGt5B,KAAKx/C,EAAAC,MAAMyQ,OAAQ,CACzB,GAAIooE,EAAGt5B,KAAKx/C,EAAAC,MAAMq+C,YAChB,MAMA,OAJAhlD,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAEP,WAIR,GAAIo7E,EAAGt5B,KAAKx/C,EAAAC,MAAM06C,UAAW,CAClC,IAAIm+B,EAAGt5B,KAAKx/C,EAAAC,MAAMi4C,IAehB,OAJA5+C,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,MAEP,KAdP,IAAIo7E,EAAGv5B,iBAOL,OAJAjmD,KAAKuG,MACH0V,EAAAnY,eAAew9E,oBACf9B,EAAGp7E,SAEE,KANP+N,EAAgBgK,EAAAzU,KAAKe,2BAA2B+2E,EAAG94B,iBAAkB84B,EAAGp7E,cAgB5EmhF,GAAW,EAGb,GAAIA,GAAY/F,EAAGt5B,KAAKx/C,EAAAC,MAAM64C,MAAO,CACnC,GAAIggC,EAAGt5B,KAAKx/C,EAAAC,MAAMi9C,eAAgB,CAChC,IAAI/yC,EAAOsL,EAAAzU,KAAK6G,8BAA8BixE,EAAG7sC,aAAc6sC,EAAGp7E,SAC9DiuC,OAAG,EACHlgC,GACF1O,QAAQqM,GACRuiC,EAAMl2B,EAAAzU,KAAK0K,kCAAkCD,EAAetB,EAAM2uE,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,OAExFo5B,EAAMl2B,EAAAzU,KAAKqK,sBAAsBjC,EAASe,EAAM2uE,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAExE,IAAI/H,EAAemhC,EAAInhC,aAMvB,OALKlR,KAAKo/E,QAAQ/5D,IAAInU,KACpBlR,KAAKm/E,QAAQt5E,KAAKqL,GAClBlR,KAAKo/E,QAAQh0D,IAAIla,IAEnBsuE,EAAGt5B,KAAKx/C,EAAAC,MAAM+9C,WACPrS,EAEPryC,KAAKuG,MACH0V,EAAAnY,eAAe2lB,wBACf+1D,EAAGp7E,cAIPpE,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,QAGhB,OAAO,MAGTs2E,EAAAz4E,UAAAujF,uBAAA,SACEhG,GAKA,GAAIA,EAAGr5B,qBAAsB,CAC3B,IAAIx2C,EAAawM,EAAAzU,KAAKe,2BAA2B+2E,EAAG94B,iBAAkB84B,EAAGp7E,SACrEkhF,EAA4C,KAChD,GAAI9F,EAAGt5B,KAAKx/C,EAAAC,MAAMi4C,IAAK,CACrB,IAAI4gC,EAAGv5B,iBAOL,OAJAjmD,KAAKuG,MACH0V,EAAAnY,eAAew9E,oBACf9B,EAAGp7E,SAEE,KANPkhF,EAAenpE,EAAAzU,KAAKe,2BAA2B+2E,EAAG94B,iBAAkB84B,EAAGp7E,SAS3E,OAAO+X,EAAAzU,KAAK2K,wBACV1C,EACA21E,EACAA,EACI5+E,EAAAE,MAAMd,KAAK6J,EAAWvL,MAAOkhF,EAAalhF,OAC1CuL,EAAWvL,OAQnB,OALEpE,KAAKuG,MACH0V,EAAAnY,eAAew9E,oBACf9B,EAAGp7E,SAGA,MAGTs2E,EAAAz4E,UAAAu+E,kBAAA,SACEhB,EACAE,GAKA,GAAIF,EAAGv5B,iBAAkB,CACvB,IAAIq/B,EAAenpE,EAAAzU,KAAKe,2BAA2B+2E,EAAG94B,iBAAkB84B,EAAGp7E,SAC3E,GAAIo7E,EAAGt5B,KAAKx/C,EAAAC,MAAMy7C,QAAS,CACzB,GAAIo9B,EAAGv5B,iBAAkB,CACvB,IAAIt2C,EAAawM,EAAAzU,KAAKe,2BAA2B+2E,EAAG94B,iBAAkB84B,EAAGp7E,SACrEiuC,EAAMl2B,EAAAzU,KAAK0J,4BAA4BzB,EAAY21E,EAAc9F,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAE3F,OADAumE,EAAGt5B,KAAKx/C,EAAAC,MAAM+9C,WACPrS,EAEPryC,KAAKuG,MACH0V,EAAAnY,eAAew9E,oBACf9B,EAAGp7E,cAIPpE,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,UAIhBpE,KAAKuG,MACH0V,EAAAnY,eAAew9E,oBACf9B,EAAGp7E,SAGP,OAAO,MAGTs2E,EAAAz4E,UAAAo+E,eAAA,SACEb,EACAiG,QAAA,IAAAA,OAAA,GAKA,IAAIp/B,EAAQm5B,EAAGp5B,OAEXh2C,EAA8B,KAClC,OAFYovE,EAAG17D,QAGb,KAAKpd,EAAAC,MAAMwT,MACT/J,EAAYpQ,KAAK0lF,WAAWlG,GAC5B,MAEF,KAAK94E,EAAAC,MAAMklB,MACTzb,EAAYpQ,KAAKmgF,cAAcX,EAAI/4E,EAAApE,YAAYwpB,MAAO,KAAM2zD,EAAGp8B,UAC/D,MAEF,KAAK18C,EAAAC,MAAMyT,SACThK,EAAYpQ,KAAK2lF,cAAcnG,GAC/B,MAEF,KAAK94E,EAAAC,MAAM0T,GACTjK,EAAYpQ,KAAK4lF,iBAAiBpG,GAClC,MAEF,KAAK94E,EAAAC,MAAMmU,IACT1K,EAAYpQ,KAAK6lF,kBAAkBrG,GACnC,MAEF,KAAK94E,EAAAC,MAAMoU,GACT3K,EAAYpQ,KAAK8lF,iBAAiBtG,GAClC,MAEF,KAAK94E,EAAAC,MAAMk5C,IACTzvC,EAAYpQ,KAAKmgF,cAAcX,EAAI/4E,EAAApE,YAAYw9C,IAAK,KAAM2/B,EAAGp8B,UAC7D,MAEF,KAAK18C,EAAAC,MAAM05C,IACTjwC,EAAYpQ,KAAKmgF,cAAcX,EAAI/4E,EAAApE,YAAYwF,KAAM,KAAM23E,EAAGp8B,UAC9D,MAEF,KAAK18C,EAAAC,MAAMo+C,UACT30C,EAAYpQ,KAAK8jF,oBAAoBtE,EAAIiG,GACzC,MAEF,KAAK/+E,EAAAC,MAAMwU,OACLsqE,GACFzlF,KAAKuG,MACH0V,EAAAnY,eAAeiiF,2DACfvG,EAAGp7E,SAGPgM,EAAYpQ,KAAKsiF,YAAY9C,GAC7B,MAEF,KAAK94E,EAAAC,MAAM+9C,UACT,OAAOvoC,EAAAzU,KAAK4I,qBAAqBkvE,EAAGp7E,MAAMo7E,EAAGp8B,WAE/C,KAAK18C,EAAAC,MAAM0U,OACTjL,EAAYpQ,KAAKgmF,qBAAqBxG,GACtC,MAEF,KAAK94E,EAAAC,MAAM2U,MACTlL,EAAYpQ,KAAKimF,oBAAoBzG,GACrC,MAEF,KAAK94E,EAAAC,MAAM4U,IACTnL,EAAYpQ,KAAKkmF,kBAAkB1G,GACnC,MAEF,KAAK94E,EAAAC,MAAM+U,KACTtL,EAAYpQ,KAAKmmF,mBAAmB3G,GACpC,MAEF,KAAK94E,EAAAC,MAAMgV,MACTvL,EAAYpQ,KAAKomF,oBAAoB5G,GACrC,MAEF,KAAK94E,EAAAC,MAAMyO,KACT,GAAIoqE,EAAG55B,MAAK,EAAOl/C,EAAAg4C,mBAAmB8G,SAAW9+C,EAAAC,MAAMU,WAAY,CACjE+I,EAAYpQ,KAAK0gF,qBAAqBlB,EAAI/4E,EAAApE,YAAYwF,KAAM,KAAM23E,EAAGp8B,UACrE,MAIJ,QACEo8B,EAAG/4B,MAAMJ,GACTj2C,EAAYpQ,KAAKqmF,yBAAyB7G,GAU9C,OANKpvE,EAIHovE,EAAGh5B,QAAQH,IAHXm5B,EAAG/4B,MAAMJ,GACTrmD,KAAK4/E,cAAcJ,IAIdpvE,GAGTsqE,EAAAz4E,UAAA6hF,oBAAA,SACEtE,EACAiG,GAOA,IAFA,IAAI/F,EAAWF,EAAGp8B,SACd/zC,EAAa,IAAIlJ,OACbq5E,EAAGt5B,KAAKx/C,EAAAC,MAAMq+C,aAAa,CACjC,IAAIqB,EAAQm5B,EAAGp5B,OACXh2C,EAAYpQ,KAAKqgF,eAAeb,EAAIiG,GACxC,GAAKr1E,EAKHovE,EAAGh5B,QAAQH,GACXh3C,EAAWxJ,KAAKuK,OANF,CACd,GAAIovE,EAAG/+B,OAAS/5C,EAAAC,MAAMg/C,UAAW,OAAO,KACxC65B,EAAG/4B,MAAMJ,GACTrmD,KAAK4/E,cAAcJ,IAMvB,IAAIntC,EAAMl2B,EAAAzU,KAAK0H,qBAAqBC,EAAYmwE,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAEtE,OADAumE,EAAGt5B,KAAKx/C,EAAAC,MAAM+9C,WACPrS,GAGTqoC,EAAAz4E,UAAAyjF,WAAA,SACElG,GAKA,IAAI7vE,EAA0C,KAC1C6vE,EAAG55B,MAAK,IAASl/C,EAAAC,MAAMU,YAAem4E,EAAGj8B,qBAC3Ci8B,EAAG17D,KAAKpd,EAAAg4C,mBAAmB8G,QAC3B71C,EAAawM,EAAAzU,KAAKe,2BAA2B+2E,EAAG94B,iBAAkB84B,EAAGp7E,UAEvE,IAAIiuC,EAAMl2B,EAAAzU,KAAK6H,qBAAqBI,EAAY6vE,EAAGp7E,SAEnD,OADAo7E,EAAGt5B,KAAKx/C,EAAAC,MAAM+9C,WACPrS,GAGTqoC,EAAAz4E,UAAA0jF,cAAA,SACEnG,GAKA,IAAI7vE,EAA0C,KAC1C6vE,EAAG55B,MAAK,IAASl/C,EAAAC,MAAMU,YAAem4E,EAAGj8B,qBAC3Ci8B,EAAG17D,KAAKpd,EAAAg4C,mBAAmB8G,QAC3B71C,EAAawM,EAAAzU,KAAKe,2BAA2B+2E,EAAG94B,iBAAkB84B,EAAGp7E,UAEvE,IAAIiuC,EAAMl2B,EAAAzU,KAAKuI,wBAAwBN,EAAY6vE,EAAGp7E,SAEtD,OADAo7E,EAAGt5B,KAAKx/C,EAAAC,MAAM+9C,WACPrS,GAGTqoC,EAAAz4E,UAAA2jF,iBAAA,SACEpG,GAKA,IAAIE,EAAWF,EAAGp8B,SACdhzC,EAAYpQ,KAAKqgF,eAAeb,GACpC,IAAKpvE,EAAW,OAAO,KAEvB,GAAIovE,EAAGt5B,KAAKx/C,EAAAC,MAAMgV,OAEhB,GAAI6jE,EAAGt5B,KAAKx/C,EAAAC,MAAMk9C,WAAY,CAC5B,IAAI11C,EAAYnO,KAAKoiF,gBAAgB5C,GACrC,IAAKrxE,EAAW,OAAO,KAEvB,GAAIqxE,EAAGt5B,KAAKx/C,EAAAC,MAAMm9C,YAAa,CAC7B,IAAIzR,EAAMl2B,EAAAzU,KAAKyI,kBAA6BC,EAAuBjC,EAAWqxE,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAEpG,OADAumE,EAAGt5B,KAAKx/C,EAAAC,MAAM+9C,WACPrS,EAEPryC,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,UAIhBpE,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,UAIhBpE,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,SAGhB,OAAO,MAGTs2E,EAAAz4E,UAAAokF,yBAAA,SACE7G,GAKA,IAAIr1E,EAAOnK,KAAKoiF,gBAAgB5C,GAChC,IAAKr1E,EAAM,OAAO,KAElB,IAAIkoC,EAAMl2B,EAAAzU,KAAK+J,0BAA0BtH,GAEzC,OADAq1E,EAAGt5B,KAAKx/C,EAAAC,MAAM+9C,WACPrS,GAGTqoC,EAAAz4E,UAAA4jF,kBAAA,SACErG,GAKA,IAAIE,EAAWF,EAAGp8B,SAElB,GAAIo8B,EAAGt5B,KAAKx/C,EAAAC,MAAMk9C,WAAY,CAC5B,IAAI96C,EAAgC,KAEpC,GAAIy2E,EAAGt5B,KAAKx/C,EAAAC,MAAMklB,OAChB9iB,EAAc/I,KAAKmgF,cAAcX,EAAI/4E,EAAApE,YAAYwpB,MAAO,KAAM2zD,EAAGp8B,eAC5D,GAAIo8B,EAAGt5B,KAAKx/C,EAAAC,MAAMk5C,KACvB92C,EAAc/I,KAAKmgF,cAAcX,EAAI/4E,EAAApE,YAAYw9C,IAAK,KAAM2/B,EAAGp8B,eAC1D,GAAIo8B,EAAGt5B,KAAKx/C,EAAAC,MAAM05C,KACvBt3C,EAAc/I,KAAKmgF,cAAcX,EAAI/4E,EAAApE,YAAYwF,KAAM,KAAM23E,EAAGp8B,eAE3D,IAAKo8B,EAAGt5B,KAAKx/C,EAAAC,MAAM+9C,cACxB37C,EAAc/I,KAAKqmF,yBAAyB7G,IAC1B,OAAO,KAG3B,GAAIA,EAAG/+B,OAAS/5C,EAAAC,MAAM+9C,UAAW,CAC/B,IAAIv2C,EAAwC,KAC5C,IAAKqxE,EAAGt5B,KAAKx/C,EAAAC,MAAM+9C,cACjBv2C,EAAYnO,KAAKqmF,yBAAyB7G,IAC1B,OAAO,KAGzB,GAAIA,EAAG/+B,OAAS/5C,EAAAC,MAAM+9C,UAAW,CAC/B,IAAI9xC,EAAiC,KACrC,IAAK4sE,EAAGt5B,KAAKx/C,EAAAC,MAAMm9C,YAAa,CAE9B,KADAlxC,EAAc5S,KAAKoiF,gBAAgB5C,IACjB,OAAO,KAEzB,IAAKA,EAAGt5B,KAAKx/C,EAAAC,MAAMm9C,YAKjB,OAJA9jD,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAEP,KAIX,IAAIgM,EAAYpQ,KAAKqgF,eAAeb,GACpC,OAAKpvE,EAEE+L,EAAAzU,KAAKiL,mBACV5J,EACAoF,EACIA,EAAUpD,WACV,KACJ6H,EACAxC,EACAovE,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MATD,KAavBjZ,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,UAIhBpE,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,UAIhBpE,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAGhB,OAAO,MAGTs2E,EAAAz4E,UAAA6jF,iBAAA,SACEtG,GAKA,IAAIE,EAAWF,EAAGp8B,SAClB,GAAIo8B,EAAGt5B,KAAKx/C,EAAAC,MAAMk9C,WAAY,CAC5B,IAAI11C,EAAYnO,KAAKoiF,gBAAgB5C,GACrC,IAAKrxE,EAAW,OAAO,KACvB,GAAIqxE,EAAGt5B,KAAKx/C,EAAAC,MAAMm9C,YAAa,CAC7B,IAAI1zC,EAAYpQ,KAAKqgF,eAAeb,GACpC,IAAKpvE,EAAW,OAAO,KACvB,IAAIk2E,EAAkC,KACtC,OAAI9G,EAAGt5B,KAAKx/C,EAAAC,MAAM04C,SAChBinC,EAAgBtmF,KAAKqgF,eAAeb,IACT,KAEtBrjE,EAAAzU,KAAKiK,kBACVxD,EACAiC,EACAk2E,EACA9G,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAGxBjZ,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,UAIhBpE,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAGhB,OAAO,MAGTs2E,EAAAz4E,UAAA+jF,qBAAA,SACExG,GAKA,IAAIE,EAAWF,EAAGp8B,SAClB,GAAIo8B,EAAGt5B,KAAKx/C,EAAAC,MAAMk9C,WAAY,CAC5B,IAAI11C,EAAYnO,KAAKoiF,gBAAgB5C,GACrC,IAAKrxE,EAAW,OAAO,KACvB,GAAIqxE,EAAGt5B,KAAKx/C,EAAAC,MAAMm9C,YAAa,CAC7B,GAAI07B,EAAGt5B,KAAKx/C,EAAAC,MAAMo+C,WAAY,CAE5B,IADA,IAAItxC,EAAQ,IAAItN,OACRq5E,EAAGt5B,KAAKx/C,EAAAC,MAAMq+C,aAAa,CACjC,IAAIuhC,EAAQvmF,KAAKwmF,gBAAgBhH,GACjC,IAAK+G,EAAO,OAAO,KACnB9yE,EAAM5N,KAAiB0gF,GAEzB,IAAIl0C,EAAMl2B,EAAAzU,KAAK8L,sBAAsBrF,EAAWsF,EAAO+rE,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAE7E,OADAumE,EAAGt5B,KAAKx/C,EAAAC,MAAM+9C,WACPrS,EAEPryC,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,UAIhBpE,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,UAIhBpE,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAGhB,OAAO,MAGTs2E,EAAAz4E,UAAAukF,gBAAA,SACEhH,GAGA,IACInwE,EACAe,EAFAsvE,EAAWF,EAAGp8B,SAMlB,GAAIo8B,EAAGt5B,KAAKx/C,EAAAC,MAAMo4C,MAAO,CACvB,IAAIvvC,EAAQxP,KAAKoiF,gBAAgB5C,GACjC,IAAKhwE,EAAO,OAAO,KACnB,GAAIgwE,EAAGt5B,KAAKx/C,EAAAC,MAAM89C,OAAQ,CAExB,IADAp1C,EAAa,IAAIlJ,MACVq5E,EAAG55B,QAAUl/C,EAAAC,MAAMo4C,MAAQygC,EAAGn8B,WAAa38C,EAAAC,MAAMw4C,SAAWqgC,EAAGn8B,WAAa38C,EAAAC,MAAMq+C,YAAY,CAEnG,KADA50C,EAAYpQ,KAAKqgF,eAAeb,IAChB,OAAO,KACvBnwE,EAAWxJ,KAAKuK,GAElB,OAAO+L,EAAAzU,KAAKiM,iBAAiBnE,EAAOH,EAAYmwE,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAEtEjZ,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,UAMX,GAAIo7E,EAAGt5B,KAAKx/C,EAAAC,MAAMw4C,SAAU,CACjC,GAAIqgC,EAAGt5B,KAAKx/C,EAAAC,MAAM89C,OAAQ,CAExB,IADAp1C,EAAa,IAAIlJ,MACVq5E,EAAG55B,QAAUl/C,EAAAC,MAAMo4C,MAAQygC,EAAGn8B,WAAa38C,EAAAC,MAAMw4C,SAAWqgC,EAAGn8B,WAAa38C,EAAAC,MAAMq+C,YAAY,CAEnG,KADA50C,EAAYpQ,KAAKqgF,eAAeb,IAChB,OAAO,KACvBnwE,EAAWxJ,KAAKuK,GAElB,OAAO+L,EAAAzU,KAAKiM,iBAAiB,KAAMtE,EAAYmwE,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAErEjZ,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,UAIhBpE,KAAKuG,MACH0V,EAAAnY,eAAe2iF,0BACfjH,EAAGp7E,SAGP,OAAO,MAGTs2E,EAAAz4E,UAAAgkF,oBAAA,SACEzG,GAKA,IAAIE,EAAWF,EAAGp8B,SACdr4C,EAAa/K,KAAKoiF,gBAAgB5C,GACtC,IAAKz0E,EAAY,OAAO,KACxB,IAAIsnC,EAAMl2B,EAAAzU,KAAKmM,qBAAiC9I,EAAYy0E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAElF,OADAumE,EAAGt5B,KAAKx/C,EAAAC,MAAM+9C,WACPrS,GAGTqoC,EAAAz4E,UAAAikF,kBAAA,SACE1G,GAQA,IACI91E,EADAg2E,EAAWF,EAAGp8B,SAElB,GAAIo8B,EAAGt5B,KAAKx/C,EAAAC,MAAMo+C,WAAY,CAE5B,IADA,IAAI11C,EAAa,IAAIlJ,OACbq5E,EAAGt5B,KAAKx/C,EAAAC,MAAMq+C,aAAa,CAEjC,KADAt7C,EAAO1J,KAAKqgF,eAAeb,IAChB,OAAO,KAClBnwE,EAAWxJ,KAAgB6D,GAE7B,IAAIsK,EAA6C,KAC7CC,EAAsC,KACtCC,EAAwC,KAC5C,GAAIsrE,EAAGt5B,KAAKx/C,EAAAC,MAAMq4C,OAAQ,CACxB,IAAKwgC,EAAGt5B,KAAKx/C,EAAAC,MAAMk9C,WAKjB,OAJA7jD,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAEP,KAET,IAAKo7E,EAAGv5B,iBAKN,OAJAjmD,KAAKuG,MACH0V,EAAAnY,eAAew9E,oBACf9B,EAAGp7E,SAEE,KAGT,GADA4P,EAAgBmI,EAAAzU,KAAKe,2BAA2B+2E,EAAG94B,iBAAkB84B,EAAGp7E,UACnEo7E,EAAGt5B,KAAKx/C,EAAAC,MAAMm9C,YAKjB,OAJA9jD,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAEP,KAET,IAAKo7E,EAAGt5B,KAAKx/C,EAAAC,MAAMo+C,WAKjB,OAJA/kD,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAEP,KAGT,IADA6P,MACQurE,EAAGt5B,KAAKx/C,EAAAC,MAAMq+C,aAAa,CAEjC,KADAt7C,EAAO1J,KAAKqgF,eAAeb,IAChB,OAAO,KAClBvrE,EAAgBpO,KAAgB6D,IAGpC,GAAI81E,EAAGt5B,KAAKx/C,EAAAC,MAAM44C,SAAU,CAC1B,IAAKigC,EAAGt5B,KAAKx/C,EAAAC,MAAMo+C,WAKjB,OAJA/kD,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAEP,KAGT,IADA8P,MACQsrE,EAAGt5B,KAAKx/C,EAAAC,MAAMq+C,aAAa,CAEjC,KADAt7C,EAAO1J,KAAKqgF,eAAeb,IAChB,OAAO,KAClBtrE,EAAkBrO,KAAgB6D,IAGtC,IAAMuK,IAAmBC,EAKvB,OAJAlU,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,SAEP,KAET,IAAIiuC,EAAMl2B,EAAAzU,KAAKqM,mBACb1E,EACA2E,EACAC,EACAC,EACAsrE,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAGxB,OADAumE,EAAGt5B,KAAKx/C,EAAAC,MAAM+9C,WACPrS,EAOT,OALEryC,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAGT,MAGTs2E,EAAAz4E,UAAAy+E,qBAAA,SACElB,EACA53E,EACAmI,EACA2vE,GAKA,GAAIF,EAAGv5B,iBAAkB,CACvB,IAAIrlD,EAAOub,EAAAzU,KAAKe,2BAA2B+2E,EAAG94B,iBAAkB84B,EAAGp7E,SAC/DwL,EAA6C,KACjD,GAAI4vE,EAAGt5B,KAAKx/C,EAAAC,MAAMi6C,UAAW,CAE3B,KADAhxC,EAAiB5P,KAAKuiF,oBAAoB/C,IACrB,OAAO,KAC5B53E,GAASnB,EAAApE,YAAYujB,QAEvB,GAAI45D,EAAGt5B,KAAKx/C,EAAAC,MAAMy7C,QAAS,CACzB,IAAI/5C,EAAOrI,KAAK+gF,UAAUvB,GAC1B,IAAKn3E,EAAM,OAAO,KAClB,IAAIgqC,EAAMl2B,EAAAzU,KAAK0M,sBACbxT,EACAgP,EACAvH,EACA0H,EACAnI,EACA43E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAGxB,OADAumE,EAAGt5B,KAAKx/C,EAAAC,MAAM+9C,WACPrS,EAEPryC,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,UAIhBpE,KAAKuG,MACH0V,EAAAnY,eAAew9E,oBACf9B,EAAGp7E,SAGP,OAAO,MAGTs2E,EAAAz4E,UAAAkkF,mBAAA,SACE3G,GAKA,IAAIE,EAAWF,EAAGp8B,SACdr4C,EAAa/K,KAAKoiF,gBAAgB5C,EAAE,IACxC,IAAKz0E,EAAY,OAAO,KACxB,IAAIsnC,EAAMl2B,EAAAzU,KAAKiN,oBAAoB5J,EAAYy0E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAErE,OADAumE,EAAGt5B,KAAKx/C,EAAAC,MAAM+9C,WACPrS,GAGTqoC,EAAAz4E,UAAAmkF,oBAAA,SACE5G,GAKA,IAAIE,EAAWF,EAAGp8B,SAClB,GAAIo8B,EAAGt5B,KAAKx/C,EAAAC,MAAMk9C,WAAY,CAC5B,IAAI94C,EAAa/K,KAAKoiF,gBAAgB5C,GACtC,IAAKz0E,EAAY,OAAO,KACxB,GAAIy0E,EAAGt5B,KAAKx/C,EAAAC,MAAMm9C,YAAa,CAC7B,IAAI1zC,EAAYpQ,KAAKqgF,eAAeb,GACpC,IAAKpvE,EAAW,OAAO,KACvB,IAAIiiC,EAAMl2B,EAAAzU,KAAKmN,qBAAqB9J,EAAYqF,EAAWovE,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAEjF,OADAumE,EAAGt5B,KAAKx/C,EAAAC,MAAM+9C,WACPrS,EAEPryC,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,UAIhBpE,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAGhB,OAAO,MAMTs2E,EAAAz4E,UAAAykF,qBAAA,SACElH,GAGA,IAAI/+B,EAAQ++B,EAAG17D,KAAKpd,EAAAg4C,mBAAmB8G,QACnCk6B,EAAWF,EAAGp8B,SACdujC,EA6mBR,SAAkC5/E,GAChC,OAAQA,GACN,KAAKL,EAAAC,MAAMg6C,YAAa,SACxB,KAAKj6C,EAAAC,MAAM45C,MAAO,SAClB,KAAK75C,EAAAC,MAAMq7C,YACX,KAAKt7C,EAAAC,MAAMs7C,MACX,KAAKv7C,EAAAC,MAAMsX,KACX,KAAKvX,EAAAC,MAAMwX,MACX,KAAKzX,EAAAC,MAAM66C,UACX,KAAK96C,EAAAC,MAAM86C,YACX,KAAK/6C,EAAAC,MAAMy5C,OACX,KAAK15C,EAAAC,MAAM+U,KACX,KAAKhV,EAAAC,MAAMy4C,OAAQ,UACnB,KAAK14C,EAAAC,MAAM+Q,IAAK,UAElB,SA5nBmBkvE,CAAyBnmC,GAC1C,GAAc,GAAVkmC,EAA+B,CACjC,IAAI33E,OAAO,EAKX,OAAIyxC,GAAS/5C,EAAAC,MAAM+Q,KACjB1I,EAAUhP,KAAKoiF,gBAAgB5C,EAAE,KAE7BxwE,EAAQjI,MAAQoV,EAAAtV,SAASS,KACpB6U,EAAAzU,KAAKwF,oBACO8B,EAASjE,WACTiE,EAAS7G,cACT6G,EAASpF,UAC1B41E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,OAGxBjZ,KAAKuG,MACH0V,EAAAnY,eAAe2jB,wBACf+3D,EAAGp7E,SAGA,MAdc,MAgBrB4K,EAAUhP,KAAKoiF,gBAAgB5C,EAAImH,KAKjClmC,GAAS/5C,EAAAC,MAAM66C,WAAaf,GAAS/5C,EAAAC,MAAM86C,aAE3CzyC,EAAQjI,MAAQoV,EAAAtV,SAASQ,YACzB2H,EAAQjI,MAAQoV,EAAAtV,SAASU,eACzByH,EAAQjI,MAAQoV,EAAAtV,SAASW,gBAEzBxH,KAAKuG,MACH0V,EAAAnY,eAAe+iF,0FACf73E,EAAQ5K,OAIP+X,EAAAzU,KAAKwH,4BAA4BuxC,EAAOzxC,EAASwwE,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,OAhBvD,KAmBzB,IAAI9O,EAA0B,KAC9B,OAAQs2C,GAEN,KAAK/5C,EAAAC,MAAMM,KAAM,OAAOkV,EAAAzU,KAAK0F,qBAAqBoyE,EAAGp7E,SACrD,KAAKsC,EAAAC,MAAMO,KAAM,OAAOiV,EAAAzU,KAAKmH,qBAAqB2wE,EAAGp7E,SACrD,KAAKsC,EAAAC,MAAMQ,MAAO,OAAOgV,EAAAzU,KAAK4E,sBAAsBkzE,EAAGp7E,SAIvD,KAAKsC,EAAAC,MAAMk9C,UAGT,GAAI27B,EAAGt5B,KAAKx/C,EAAAC,MAAMm9C,YAChB,OAAO9jD,KAAKikF,8BACVzE,EACArjE,EAAAzU,KAAK2C,gCAAgCm1E,EAAGp7E,MAAMs7E,QAE9C,GAGJ,IAAIr5B,EAAQm5B,EAAGp5B,OACX0gC,GAAQ,EACZ,GACE,OAAQtH,EAAG17D,KAAKpd,EAAAg4C,mBAAmB8G,SAGjC,KAAK9+C,EAAAC,MAAMg6C,YAET,OADA6+B,EAAG/4B,MAAMJ,GACFrmD,KAAK+jF,wBAAwBvE,GAGtC,KAAK94E,EAAAC,MAAMU,WAET,OADAm4E,EAAG94B,iBACK84B,EAAG17D,QAGT,KAAKpd,EAAAC,MAAMm9C,WACT,IAAK07B,EAAGt5B,KAAKx/C,EAAAC,MAAMg+C,oBAAqB,CACtCmiC,GAAQ,EACR,MAKJ,KAAKpgF,EAAAC,MAAM89C,MAET,OADA+6B,EAAG/4B,MAAMJ,GACFrmD,KAAK+jF,wBAAwBvE,GAGtC,KAAK94E,EAAAC,MAAMi+C,SACX,KAAKl+C,EAAAC,MAAMyQ,MACT,MAIF,QACE0vE,GAAQ,EAIZ,MAGF,QACEA,GAAQ,SAILA,GAKT,OAJAtH,EAAG/4B,MAAMJ,IAGTl8C,EAAOnK,KAAKoiF,gBAAgB5C,IAEvBA,EAAGt5B,KAAKx/C,EAAAC,MAAMm9C,YAOZ3nC,EAAAzU,KAAKgG,8BAA8BvD,EAAMq1E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,OANpEjZ,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAEP,MANS,KAWpB,KAAKsC,EAAAC,MAAMk+C,YAET,IADA,IAAIp6C,EAAqB,IAAItE,OACrBq5E,EAAGt5B,KAAKx/C,EAAAC,MAAMm+C,eAAe,CACnC,GAAI06B,EAAG55B,QAAUl/C,EAAAC,MAAMyQ,MACrBjN,EAAO,UAGP,KADAA,EAAOnK,KAAKoiF,gBAAgB5C,EAAI,IACrB,OAAO,KAGpB,GADA/0E,EAAmB5E,KAAKsE,IACnBq1E,EAAGt5B,KAAKx/C,EAAAC,MAAMyQ,OAAQ,CACzB,GAAIooE,EAAGt5B,KAAKx/C,EAAAC,MAAMm+C,cAChB,MAMA,OAJA9kD,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAEP,MAIb,OAAO+X,EAAAzU,KAAK4C,6BAA6BG,EAAoB+0E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAGrF,KAAKvS,EAAAC,MAAMo+C,UAKT,IAJA,IAAIgiC,EAAWvH,EAAGp8B,SACd71C,EAAQ,IAAIpH,MACZqH,EAAS,IAAIrH,MACbvF,OAAI,GACA4+E,EAAGt5B,KAAKx/C,EAAAC,MAAMq+C,aAAa,CACjC,GAAKw6B,EAAGv5B,iBAWNrlD,EAAOub,EAAAzU,KAAKe,2BAA2B+2E,EAAG94B,iBAAkB84B,EAAGp7E,aAXvC,CACxB,IAAKo7E,EAAGt5B,KAAKx/C,EAAAC,MAAMi9C,eAKjB,OAJA5jD,KAAKuG,MACH0V,EAAAnY,eAAew9E,oBACf9B,EAAGp7E,SAEE,MAETxD,EAAOub,EAAAzU,KAAKe,2BAA2B+2E,EAAG7sC,aAAc6sC,EAAGp7E,UACtD6D,IAAIxB,EAAApE,YAAY2kF,QAKvB,GADAz5E,EAAM1H,KAAKjF,GACP4+E,EAAGt5B,KAAKx/C,EAAAC,MAAM89C,OAAQ,CACxB,IAAInjD,EAAQtB,KAAKoiF,gBAAgB5C,EAAI,GACrC,IAAKl+E,EAAO,OAAO,KACnBkM,EAAO3H,KAAKvE,OACP,IAAKV,EAAKkH,GAAGrB,EAAApE,YAAY2kF,QAO9B,OAJAhnF,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAEP,KANPoJ,EAAO3H,KAAKjF,GAQd,IAAK4+E,EAAGt5B,KAAKx/C,EAAAC,MAAMyQ,OAAQ,CACzB,GAAIooE,EAAGt5B,KAAKx/C,EAAAC,MAAMq+C,YAChB,MAMA,OAJAhlD,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAEP,MAIb,OAAO+X,EAAAzU,KAAK4F,8BAA8BC,EAAOC,EAAQgyE,EAAGp7E,MAAM2iF,EAAUvH,EAAGvmE,MAGjF,KAAKvS,EAAAC,MAAMi6C,SACT,IAAI51C,EAAShL,KAAK+gF,UAAUvB,GAC5B,OAAKx0E,EACAw0E,EAAGt5B,KAAKx/C,EAAAC,MAAMk6C,cAOnB12C,EAAOnK,KAAKoiF,gBAAgB5C,EAAE,KAEvBrjE,EAAAzU,KAAKmD,0BACVsR,EAAAnF,cAAciwE,OACd98E,EACAa,EACAw0E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MALN,MAPhBjZ,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAEP,MANW,KAiBtB,KAAKsC,EAAAC,MAAMU,WACT,OAAO8U,EAAAzU,KAAKe,2BAA2B+2E,EAAG94B,iBAAkB84B,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAEpF,KAAKvS,EAAAC,MAAMsR,KACT,OAAOkE,EAAAzU,KAAKiH,qBAAqB6wE,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAEzD,KAAKvS,EAAAC,MAAM0Q,YACT,OAAO8E,EAAAzU,KAAKsE,4BAA4BwzE,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAEhE,KAAKvS,EAAAC,MAAMqR,MACT,OAAOmE,EAAAzU,KAAK+G,sBAAsB+wE,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAE1D,KAAKvS,EAAAC,MAAMi9C,cACT,OAAOznC,EAAAzU,KAAK6G,8BAA8BixE,EAAG7sC,aAAc6sC,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAEnF,KAAKvS,EAAAC,MAAM69C,eACT,OAAOroC,EAAAzU,KAAKsF,+BAA+BwyE,EAAGj4B,cAAei4B,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAErF,KAAKvS,EAAAC,MAAMq9C,aACT,OAAO7nC,EAAAzU,KAAK8E,6BAA6BgzE,EAAG52B,YAAa42B,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAIjF,KAAKvS,EAAAC,MAAM26C,MACT,IAAI4lC,EAAgB1H,EAAGt4B,oBACvB,OAAKs4B,EAAGt5B,KAAKx/C,EAAAC,MAAM26C,OAOZnlC,EAAAzU,KAAKoG,8BACVo5E,EACA1H,EAAGn4B,kBACHm4B,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,OATtBjZ,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAEP,MAQX,KAAKsC,EAAAC,MAAM4Q,SACT,OAAOvX,KAAK+jF,wBAAwBvE,GAEtC,KAAK94E,EAAAC,MAAMwQ,MACT,OAAOnX,KAAKokF,qBAAqB5E,GAEnC,QAYE,OAXI/+B,GAAS/5C,EAAAC,MAAMg/C,UACjB3lD,KAAKuG,MACH0V,EAAAnY,eAAegjD,uBACf04B,EAAGp7E,MAAMs7E,IAGX1/E,KAAKuG,MACH0V,EAAAnY,eAAeqjF,oBACf3H,EAAGp7E,SAGA,OAKbs2E,EAAAz4E,UAAAmlF,qCAAA,SACE5H,GAKA,IAAIn5B,EAAQm5B,EAAGp5B,OACf,IAAKo5B,EAAGt5B,KAAKx/C,EAAAC,MAAMi6C,UAAW,OAAO,KACrC,IAAIz4C,EAAgB,IAAIhC,MACxB,EAAG,CACD,GAAIq5E,EAAG55B,SAAWl/C,EAAAC,MAAMk6C,YACtB,MAEF,IAAIx4C,EAAOrI,KAAK+gF,UAAUvB,GAAI,GAAM,GACpC,IAAKn3E,EAEH,OADAm3E,EAAG/4B,MAAMJ,GACF,KAETl+C,EAActC,KAAKwC,SACZm3E,EAAGt5B,KAAKx/C,EAAAC,MAAMyQ,QACvB,OAAIooE,EAAGt5B,KAAKx/C,EAAAC,MAAMk6C,cAAgB2+B,EAAGt5B,KAAKx/C,EAAAC,MAAMk9C,WACvC17C,GAETq3E,EAAG/4B,MAAMJ,GACF,OAGTq0B,EAAAz4E,UAAA8/E,eAAA,SACEvC,GAMA,IADA,IAAI/1E,EAAO,IAAItD,OACPq5E,EAAGt5B,KAAKx/C,EAAAC,MAAMm9C,aAAa,CACjC,IAAI35C,EAAOnK,KAAKoiF,gBAAgB5C,EAAI,GACpC,IAAKr1E,EAAM,OAAO,KAElB,GADAV,EAAK5D,KAAKsE,IACLq1E,EAAGt5B,KAAKx/C,EAAAC,MAAMyQ,OAAQ,CACzB,GAAIooE,EAAGt5B,KAAKx/C,EAAAC,MAAMm9C,YAChB,MAMA,OAJA9jD,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAEP,MAIb,OAAOqF,GAGTixE,EAAAz4E,UAAAmgF,gBAAA,SACE5C,EACAmH,QAAA,IAAAA,MAAA,GAEAljF,OAAiB,GAAVkjF,GAEP,IAAIx8E,EAAOnK,KAAK0mF,qBAAqBlH,GACrC,IAAKr1E,EAAM,OAAO,KAClB,IAgBIs2C,EAhBAi/B,EAAWv1E,EAAK/F,MAAMmB,MAG1B,GAAI4W,EAAA/U,eAAe+C,EAAKpD,MAEtB,IADA,IAAIoB,EAAyC,KAE3Cq3E,EAAGt5B,KAAKx/C,EAAAC,MAAMk9C,YAEd1nC,EAAA1U,sBAAsB0C,EAAKpD,OAA6E,QAAnEoB,EAAgBnI,KAAKonF,qCAAqC5H,KAC/F,CACA,IAAI/1E,EAAOzJ,KAAK+hF,eAAevC,GAC/B,IAAK/1E,EAAM,OAAO,KAClBU,EAAOgS,EAAAzU,KAAK6D,qBAAqBpB,EAAMhC,EAAesB,EAAM+1E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAOtF,IAFA,IACIouE,EADAvjE,EAA0B,MAG3BujE,EAAiBC,EAAoB7mC,EAAQ++B,EAAG55B,UAAY+gC,GAG7D,OADAnH,EAAG17D,OACK28B,GAEN,KAAK/5C,EAAAC,MAAMi4C,GACT,IAAI5zC,EAAShL,KAAK+gF,UAAUvB,GAC5B,IAAKx0E,EAAQ,OAAO,KACpBb,EAAOgS,EAAAzU,KAAKmD,0BACVsR,EAAAnF,cAAc4nC,GACdz0C,EACAa,EACAw0E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAExB,MAGF,KAAKvS,EAAAC,MAAM6Q,WACT,IAAI1K,EAAS9M,KAAK+gF,UAAUvB,GAC5B,IAAK1yE,EAAQ,OAAO,KACpB3C,EAAOgS,EAAAzU,KAAKmF,2BACV1C,EACA2C,EACA0yE,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAExB,MAGF,KAAKvS,EAAAC,MAAMk+C,YAET,KADA/gC,EAAO9jB,KAAKoiF,gBAAgB5C,IACjB,OAAO,KAClB,IAAKA,EAAGt5B,KAAKx/C,EAAAC,MAAMm+C,cAKjB,OAJA9kD,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAEP,KAET+F,EAAOgS,EAAAzU,KAAKwE,8BACV/B,EACA2Z,EACA07D,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAExB,MAGF,KAAKvS,EAAAC,MAAM66C,UACX,KAAK96C,EAAAC,MAAM86C,YAEPt3C,EAAKpD,MAAQoV,EAAAtV,SAASQ,YACtB8C,EAAKpD,MAAQoV,EAAAtV,SAASU,eACtB4C,EAAKpD,MAAQoV,EAAAtV,SAASW,gBAEtBxH,KAAKuG,MACH0V,EAAAnY,eAAe+iF,0FACf18E,EAAK/F,OAGT+F,EAAOgS,EAAAzU,KAAKqH,6BACV0xC,EACAt2C,EACAq1E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAExB,MAGF,KAAKvS,EAAAC,MAAMi+C,SACT,IAAIx2C,EAASpO,KAAKoiF,gBAAgB5C,GAClC,IAAKpxE,EAAQ,OAAO,KACpB,IAAKoxE,EAAGt5B,KAAKx/C,EAAAC,MAAM89C,OAKjB,OAJAzkD,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAEP,KAET,IAAIiK,EAASrO,KAAKoiF,gBAAgB5C,EAAImH,EAAU,EAC5C,EACD,GAEH,IAAKt4E,EAAQ,OAAO,KACpBlE,EAAOgS,EAAAzU,KAAKwG,wBACV/D,EACAiE,EACAC,EACAmxE,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAExB,MAGF,KAAKvS,EAAAC,MAAMyQ,MACT,IAAImwE,GAA6Bp9E,GACjC,EAAG,CAED,KADAA,EAAOnK,KAAKoiF,gBAAgB5C,EAAI,IACrB,OAAO,KAClB+H,EAAW1hF,KAAKsE,SACTq1E,EAAGt5B,KAAKx/C,EAAAC,MAAMyQ,QACvBjN,EAAOgS,EAAAzU,KAAKmE,sBAAsB07E,EAAY/H,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MACpE,MAEF,QAME,KALA6K,EAAO9jB,KAAKoiF,gBAAgB5C,EAC1BgI,EAAmB/mC,GACf4mC,EACAA,EAAiB,IAEZ,OAAO,KAGlB,GAAI5mC,GAAS/5C,EAAAC,MAAMs9C,IACjB,GAAIngC,EAAK/c,MAAQoV,EAAAtV,SAASQ,WACxB8C,EAAOgS,EAAAzU,KAAKkG,+BACVzD,EACsB2Z,EACtB07D,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,UAEnB,IAAI6K,EAAK/c,MAAQoV,EAAAtV,SAASS,KAqB/B,OAJAtH,KAAKuG,MACH0V,EAAAnY,eAAew9E,oBACfx9D,EAAK1f,OAEA,KApBP,IAAIqjF,EAA+B3jE,EACnC,GAAI2jE,EAAa18E,WAAWhE,MAAQoV,EAAAtV,SAASQ,WAW3C,OAJArH,KAAKuG,MACH0V,EAAAnY,eAAew9E,oBACfmG,EAAa18E,WAAW3G,OAEnB,KAVPqjF,EAAa18E,WAAaoR,EAAAzU,KAAKkG,+BAC7BzD,EACsBs9E,EAAa18E,WACnCy0E,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAS1B9O,EAAOs9E,OAWTt9E,EAAOgS,EAAAzU,KAAKwD,uBAAuBu1C,EAAOt2C,EAAM2Z,EAAM07D,EAAGp7E,MAAMs7E,EAAUF,EAAGvmE,MAMpF,OAAO9O,GAITuwE,EAAAz4E,UAAA29E,cAAA,SAAcJ,GAGZ,IAFAA,EAAG55B,MAAK,GACJ45B,EAAGj8B,oBAAoBi8B,EAAG17D,SAC3B,CACD,IAAIu/B,EAAYm8B,EAAG55B,MAAK,GACxB,GACEvC,GAAa38C,EAAAC,MAAMg/C,WACnBtC,GAAa38C,EAAAC,MAAM+9C,UACnB,CACA86B,EAAG17D,OACH,MAEF,GAAI07D,EAAGj8B,mBAAoB,MAC3B,OAAQi8B,EAAG17D,QACT,KAAKpd,EAAAC,MAAMU,WACTm4E,EAAG94B,iBACH,MAEF,KAAKhgD,EAAAC,MAAMi9C,cACT47B,EAAG7sC,aACH,MAEF,KAAKjsC,EAAAC,MAAM69C,eACTg7B,EAAGj4B,cACH,MAEF,KAAK7gD,EAAAC,MAAMq9C,aACTw7B,EAAG52B,eAQX8xB,EAAAz4E,UAAAylF,UAAA,SAAUlI,GAER,IAAImI,EAAQ,EACRb,GAAQ,EACZ,GACE,OAAQtH,EAAG17D,QACT,KAAKpd,EAAAC,MAAMg/C,UACT3lD,KAAKuG,MACH0V,EAAAnY,eAAewgD,YACfk7B,EAAGp7E,QAAS,KAEd0iF,GAAQ,EACR,MAEF,KAAKpgF,EAAAC,MAAMo+C,YACP4iC,EACF,MAEF,KAAKjhF,EAAAC,MAAMq+C,aACP2iC,IACUb,GAAQ,GACpB,MAEF,KAAKpgF,EAAAC,MAAMU,WACTm4E,EAAG94B,iBACH,MAEF,KAAKhgD,EAAAC,MAAMi9C,cACT47B,EAAG7sC,aACH,MAEF,KAAKjsC,EAAAC,MAAM69C,eACTg7B,EAAGj4B,cACH,MAEF,KAAK7gD,EAAAC,MAAMq9C,aACTw7B,EAAG52B,mBAIAk+B,IAEbpM,EAx1GA,CAA4Bz+D,EAAAhW,mBAw4G5B,SAASqhF,EAAoBvgF,GAC3B,OAAQA,GACN,KAAKL,EAAAC,MAAMyQ,MAAO,SAClB,KAAK1Q,EAAAC,MAAMy7C,OACX,KAAK17C,EAAAC,MAAM07C,YACX,KAAK37C,EAAAC,MAAM27C,aACX,KAAK57C,EAAAC,MAAM67C,yBACX,KAAK97C,EAAAC,MAAM47C,gBACX,KAAK77C,EAAAC,MAAM87C,aACX,KAAK/7C,EAAAC,MAAM+7C,eACX,KAAKh8C,EAAAC,MAAMg8C,yBACX,KAAKj8C,EAAAC,MAAMi8C,+BACX,KAAKl8C,EAAAC,MAAMk8C,2CACX,KAAKn8C,EAAAC,MAAMm8C,iBACX,KAAKp8C,EAAAC,MAAMq8C,aACX,KAAKt8C,EAAAC,MAAMo8C,WAAY,SACvB,KAAKr8C,EAAAC,MAAMi+C,SAAU,SACrB,KAAKl+C,EAAAC,MAAMw7C,QAAS,SACpB,KAAKz7C,EAAAC,MAAMu7C,oBAAqB,SAChC,KAAKx7C,EAAAC,MAAMm7C,IAAK,SAChB,KAAKp7C,EAAAC,MAAMo7C,MAAO,SAClB,KAAKr7C,EAAAC,MAAMk7C,UAAW,UACtB,KAAKn7C,EAAAC,MAAMq6C,cACX,KAAKt6C,EAAAC,MAAMs6C,mBACX,KAAKv6C,EAAAC,MAAMu6C,qBACX,KAAKx6C,EAAAC,MAAMw6C,0BAA2B,UACtC,KAAKz6C,EAAAC,MAAMi4C,GACX,KAAKl4C,EAAAC,MAAM+4C,GACX,KAAKh5C,EAAAC,MAAM6Q,WACX,KAAK9Q,EAAAC,MAAMi6C,SACX,KAAKl6C,EAAAC,MAAMk6C,YACX,KAAKn6C,EAAAC,MAAMm6C,gBACX,KAAKp6C,EAAAC,MAAMo6C,mBAAoB,UAC/B,KAAKr6C,EAAAC,MAAM+6C,kBACX,KAAKh7C,EAAAC,MAAMg7C,wBACX,KAAKj7C,EAAAC,MAAMi7C,oCAAqC,UAChD,KAAKl7C,EAAAC,MAAMsX,KACX,KAAKvX,EAAAC,MAAMwX,MAAO,UAClB,KAAKzX,EAAAC,MAAM06C,SACX,KAAK36C,EAAAC,MAAM26C,MACX,KAAK56C,EAAAC,MAAM46C,QAAS,UACpB,KAAK76C,EAAAC,MAAMy6C,kBAAmB,UAC9B,KAAK16C,EAAAC,MAAM66C,UACX,KAAK96C,EAAAC,MAAM86C,YAAa,UACxB,KAAK/6C,EAAAC,MAAMs9C,IACX,KAAKv9C,EAAAC,MAAM+Q,IACX,KAAKhR,EAAAC,MAAMk+C,YAAa,UAE1B,SAIF,SAAS2iC,EAAmBzgF,GAC1B,OAAQA,GACN,KAAKL,EAAAC,MAAMy7C,OACX,KAAK17C,EAAAC,MAAM07C,YACX,KAAK37C,EAAAC,MAAM27C,aACX,KAAK57C,EAAAC,MAAM67C,yBACX,KAAK97C,EAAAC,MAAM47C,gBACX,KAAK77C,EAAAC,MAAM87C,aACX,KAAK/7C,EAAAC,MAAM+7C,eACX,KAAKh8C,EAAAC,MAAMg8C,yBACX,KAAKj8C,EAAAC,MAAMi8C,+BACX,KAAKl8C,EAAAC,MAAMk8C,2CACX,KAAKn8C,EAAAC,MAAMm8C,iBACX,KAAKp8C,EAAAC,MAAMq8C,aACX,KAAKt8C,EAAAC,MAAMo8C,WACX,KAAKr8C,EAAAC,MAAMi+C,SACX,KAAKl+C,EAAAC,MAAMy6C,kBAAmB,OAAO,EACrC,QAAS,OAAO,GA78GP1hD,EAAAg7E,SA21Gb,SAAkBkN,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,CAAkBloF,EAAAkoF,aAAAloF,EAAAkoF","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\r\n // Extended modifiers usually derived from basic modifiers\r\n\r\n /** Is ambient, that is either declared or nested in a declared element. */\r\n AMBIENT = 1 << 13,\r\n /** Is generic. */\r\n GENERIC = 1 << 14,\r\n /** Is part of a generic context. */\r\n GENERIC_CONTEXT = 1 << 15,\r\n /** Is an instance member. */\r\n INSTANCE = 1 << 16,\r\n /** Is a constructor. */\r\n CONSTRUCTOR = 1 << 17,\r\n /** Is an arrow function. */\r\n ARROW = 1 << 18,\r\n /** Is a module export. */\r\n MODULE_EXPORT = 1 << 19,\r\n /** Is a module import. */\r\n MODULE_IMPORT = 1 << 20,\r\n\r\n // Compilation states\r\n\r\n /** Is compiled. */\r\n COMPILED = 1 << 21,\r\n /** Has a constant value and is therefore inlined. */\r\n INLINED = 1 << 22,\r\n /** Is scoped. */\r\n SCOPED = 1 << 23,\r\n /** Is a trampoline. */\r\n TRAMPOLINE = 1 << 24,\r\n /** Is a virtual method. */\r\n VIRTUAL = 1 << 25,\r\n /** Is the main function. */\r\n MAIN = 1 << 26,\r\n\r\n // Other\r\n\r\n QUOTED = 1 << 27\r\n}\r\n\r\n/** Path delimiter inserted between file system levels. */\r\nexport const PATH_DELIMITER = \"/\";\r\n/** Substitution used to indicate the parent directory. */\r\nexport const PARENT_SUBST = \"..\";\r\n/** Function name prefix used for getters. */\r\nexport const GETTER_PREFIX = \"get:\";\r\n/** Function name prefix used for setters. */\r\nexport const SETTER_PREFIX = \"set:\";\r\n/** Delimiter used between class names and instance members. */\r\nexport const INSTANCE_DELIMITER = \"#\";\r\n/** Delimiter used between class and namespace names and static members. */\r\nexport const STATIC_DELIMITER = \".\";\r\n/** Delimiter used between a function and its inner elements. */\r\nexport const INNER_DELIMITER = \"~\";\r\n/** Substitution used to indicate a library directory. */\r\nexport const LIBRARY_SUBST = \"~lib\";\r\n/** Library directory prefix. */\r\nexport const LIBRARY_PREFIX = LIBRARY_SUBST + PATH_DELIMITER;\r\n/** Prefix used to indicate a filespace element. */\r\nexport const FILESPACE_PREFIX = \"file:\";\r\n","/**\r\n * Shared diagnostic handling inherited by the parser and the compiler.\r\n * @module diagnostics\r\n * @preferred\r\n *//***/\r\n\r\nimport {\r\n Range\r\n} from \"./ast\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\nimport {\r\n isLineBreak\r\n} from \"./util\";\r\n\r\nexport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\n/** Indicates the category of a {@link DiagnosticMessage}. */\r\nexport enum DiagnosticCategory {\r\n /** Informatory message. */\r\n INFO,\r\n /** Warning message. */\r\n WARNING,\r\n /** Error message. */\r\n ERROR\r\n}\r\n\r\n/** Returns the string representation of the specified diagnostic category. */\r\nexport function diagnosticCategoryToString(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return \"INFO\";\r\n case DiagnosticCategory.WARNING: return \"WARNING\";\r\n case DiagnosticCategory.ERROR: return \"ERROR\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\n/** ANSI escape sequence for blue foreground. */\r\nexport const COLOR_BLUE: string = \"\\u001b[96m\";\r\n/** ANSI escape sequence for yellow foreground. */\r\nexport const COLOR_YELLOW: string = \"\\u001b[93m\";\r\n/** ANSI escape sequence for red foreground. */\r\nexport const COLOR_RED: string = \"\\u001b[91m\";\r\n/** ANSI escape sequence to reset the foreground color. */\r\nexport const COLOR_RESET: string = \"\\u001b[0m\";\r\n\r\n/** Returns the ANSI escape sequence for the specified category. */\r\nexport function diagnosticCategoryToColor(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return COLOR_BLUE;\r\n case DiagnosticCategory.WARNING: return COLOR_YELLOW;\r\n case DiagnosticCategory.ERROR: return COLOR_RED;\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\n/** Represents a diagnostic message. */\r\nexport class DiagnosticMessage {\r\n\r\n /** Message code. */\r\n code: i32;\r\n /** Message category. */\r\n category: DiagnosticCategory;\r\n /** Message text. */\r\n message: string;\r\n /** Respective source range, if any. */\r\n range: Range | null = null;\r\n\r\n /** Constructs a new diagnostic message. */\r\n private constructor(code: i32, category: DiagnosticCategory, message: string) {\r\n this.code = code;\r\n this.category = category;\r\n this.message = message;\r\n }\r\n\r\n /** Creates a new diagnostic message of the specified category. */\r\n static create(\r\n code: DiagnosticCode,\r\n category: DiagnosticCategory,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): DiagnosticMessage {\r\n var message = diagnosticCodeToString(code);\r\n if (arg0 != null) message = message.replace(\"{0}\", arg0);\r\n if (arg1 != null) message = message.replace(\"{1}\", arg1);\r\n if (arg2 != null) message = message.replace(\"{2}\", arg2);\r\n return new DiagnosticMessage(code, category, message);\r\n }\r\n\r\n /** Creates a new informatory diagnostic message. */\r\n static createInfo(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.INFO, arg0, arg1);\r\n }\r\n\r\n /** Creates a new warning diagnostic message. */\r\n static createWarning(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.WARNING, arg0, arg1);\r\n }\r\n\r\n /** Creates a new error diagnostic message. */\r\n static createError(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.ERROR, arg0, arg1);\r\n }\r\n\r\n /** Adds a source range to this message. */\r\n withRange(range: Range): this {\r\n this.range = range;\r\n return this;\r\n }\r\n\r\n /** Converts this message to a string. */\r\n toString(): string {\r\n if (this.range) {\r\n return (\r\n diagnosticCategoryToString(this.category) +\r\n \" \" +\r\n this.code.toString(10) +\r\n \": \\\"\" +\r\n this.message +\r\n \"\\\" in \" +\r\n this.range.source.normalizedPath +\r\n \":\" +\r\n this.range.line.toString(10) +\r\n \":\" +\r\n this.range.column.toString(10)\r\n );\r\n }\r\n return (\r\n diagnosticCategoryToString(this.category) +\r\n \" \" +\r\n this.code.toString(10) +\r\n \": \" +\r\n this.message\r\n );\r\n }\r\n}\r\n\r\n/** Formats a diagnostic message, optionally with terminal colors and source context. */\r\nexport function formatDiagnosticMessage(\r\n message: DiagnosticMessage,\r\n useColors: bool = false,\r\n showContext: bool = false\r\n): string {\r\n\r\n // general information\r\n var sb: string[] = [];\r\n if (useColors) sb.push(diagnosticCategoryToColor(message.category));\r\n sb.push(diagnosticCategoryToString(message.category));\r\n if (useColors) sb.push(COLOR_RESET);\r\n sb.push(message.code < 1000 ? \" AS\" : \" TS\");\r\n sb.push(message.code.toString(10));\r\n sb.push(\": \");\r\n sb.push(message.message);\r\n\r\n // include range information if available\r\n if (message.range) {\r\n\r\n // include context information if requested\r\n let range = message.range;\r\n if (showContext) {\r\n sb.push(\"\\n\");\r\n sb.push(formatDiagnosticContext(message.range, useColors));\r\n }\r\n\r\n sb.push(\"\\n\");\r\n sb.push(\" in \");\r\n sb.push(range.source.normalizedPath);\r\n sb.push(\"(\");\r\n sb.push(range.line.toString(10));\r\n sb.push(\",\");\r\n sb.push(range.column.toString(10));\r\n sb.push(\")\");\r\n }\r\n return sb.join(\"\");\r\n}\r\n\r\n/** Formats the diagnostic context for the specified range, optionally with terminal colors. */\r\nexport function formatDiagnosticContext(range: Range, useColors: bool = false): string {\r\n var text = range.source.text;\r\n var len = text.length;\r\n var start = range.start;\r\n var end = range.end;\r\n while (start > 0 && !isLineBreak(text.charCodeAt(start - 1))) start--;\r\n while (end < len && !isLineBreak(text.charCodeAt(end))) end++;\r\n var sb: string[] = [\r\n \"\\n \",\r\n text.substring(start, end),\r\n \"\\n \"\r\n ];\r\n while (start < range.start) {\r\n sb.push(\" \");\r\n start++;\r\n }\r\n if (useColors) sb.push(COLOR_RED);\r\n if (range.start == range.end) {\r\n sb.push(\"^\");\r\n } else {\r\n while (start++ < range.end) sb.push(\"~\");\r\n }\r\n if (useColors) sb.push(COLOR_RESET);\r\n return sb.join(\"\");\r\n}\r\n\r\n/** Base class of all diagnostic emitters. */\r\nexport abstract class DiagnosticEmitter {\r\n\r\n /** Diagnostic messages emitted so far. */\r\n diagnostics: DiagnosticMessage[];\r\n\r\n /** Initializes this diagnostic emitter. */\r\n protected constructor(diagnostics: DiagnosticMessage[] | null = null) {\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n }\r\n\r\n /** Emits a diagnostic message of the specified category. */\r\n emitDiagnostic(\r\n code: DiagnosticCode,\r\n category: DiagnosticCategory,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n var message = DiagnosticMessage.create(code, category, arg0, arg1, arg2).withRange(range);\r\n this.diagnostics.push(message);\r\n // console.log(formatDiagnosticMessage(message, true, true) + \"\\n\"); // temporary\r\n // console.log(new Error(\"stack\").stack);\r\n }\r\n\r\n /** Emits an informatory diagnostic message. */\r\n info(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.INFO, range, arg0, arg1, arg2);\r\n }\r\n\r\n /** Emits a warning diagnostic message. */\r\n warning(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.WARNING, range, arg0, arg1, arg2);\r\n }\r\n\r\n /** Emits an error diagnostic message. */\r\n error(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.ERROR, range, arg0, arg1, arg2);\r\n }\r\n}\r\n","/**\r\n * 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: 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 CallImport = _BinaryenCallImportId(),\r\n CallIndirect = _BinaryenCallIndirectId(),\r\n GetLocal = _BinaryenGetLocalId(),\r\n SetLocal = _BinaryenSetLocalId(),\r\n GetGlobal = _BinaryenGetGlobalId(),\r\n SetGlobal = _BinaryenSetGlobalId(),\r\n Load = _BinaryenLoadId(),\r\n Store = _BinaryenStoreId(),\r\n Const = _BinaryenConstId(),\r\n Unary = _BinaryenUnaryId(),\r\n Binary = _BinaryenBinaryId(),\r\n Select = _BinaryenSelectId(),\r\n Drop = _BinaryenDropId(),\r\n Return = _BinaryenReturnId(),\r\n Host = _BinaryenHostId(),\r\n Nop = _BinaryenNopId(),\r\n Unreachable = _BinaryenUnreachableId(),\r\n AtomicCmpxchg = _BinaryenAtomicCmpxchgId(),\r\n AtomicRMW = _BinaryenAtomicRMWId(),\r\n AtomicWait = _BinaryenAtomicWaitId(),\r\n AtomicWake = _BinaryenAtomicWakeId()\r\n}\r\n\r\nexport enum UnaryOp {\r\n ClzI32 = _BinaryenClzInt32(),\r\n CtzI32 = _BinaryenCtzInt32(),\r\n PopcntI32 = _BinaryenPopcntInt32(),\r\n NegF32 = _BinaryenNegFloat32(),\r\n AbsF32 = _BinaryenAbsFloat32(),\r\n CeilF32 = _BinaryenCeilFloat32(),\r\n FloorF32 = _BinaryenFloorFloat32(),\r\n TruncF32 = _BinaryenTruncFloat32(),\r\n NearestF32 = _BinaryenNearestFloat32(),\r\n SqrtF32 = _BinaryenSqrtFloat32(),\r\n EqzI32 = _BinaryenEqZInt32(),\r\n ClzI64 = _BinaryenClzInt64(),\r\n CtzI64 = _BinaryenCtzInt64(),\r\n PopcntI64 = _BinaryenPopcntInt64(),\r\n NegF64 = _BinaryenNegFloat64(),\r\n AbsF64 = _BinaryenAbsFloat64(),\r\n CeilF64 = _BinaryenCeilFloat64(),\r\n FloorF64 = _BinaryenFloorFloat64(),\r\n TruncF64 = _BinaryenTruncFloat64(),\r\n NearestF64 = _BinaryenNearestFloat64(),\r\n SqrtF64 = _BinaryenSqrtFloat64(),\r\n EqzI64 = _BinaryenEqZInt64(),\r\n ExtendI32 = _BinaryenExtendSInt32(),\r\n ExtendU32 = _BinaryenExtendUInt32(),\r\n WrapI64 = _BinaryenWrapInt64(),\r\n TruncF32ToI32 = _BinaryenTruncSFloat32ToInt32(),\r\n TruncF32ToI64 = _BinaryenTruncSFloat32ToInt64(),\r\n TruncF32ToU32 = _BinaryenTruncUFloat32ToInt32(),\r\n TruncF32ToU64 = _BinaryenTruncUFloat32ToInt64(),\r\n TruncF64ToI32 = _BinaryenTruncSFloat64ToInt32(),\r\n TruncF64ToI64 = _BinaryenTruncSFloat64ToInt64(),\r\n TruncF64ToU32 = _BinaryenTruncUFloat64ToInt32(),\r\n TruncF64ToU64 = _BinaryenTruncUFloat64ToInt64(),\r\n ReinterpretF32 = _BinaryenReinterpretFloat32(),\r\n ReinterpretF64 = _BinaryenReinterpretFloat64(),\r\n ConvertI32ToF32 = _BinaryenConvertSInt32ToFloat32(),\r\n ConvertI32ToF64 = _BinaryenConvertSInt32ToFloat64(),\r\n ConvertU32ToF32 = _BinaryenConvertUInt32ToFloat32(),\r\n ConvertU32ToF64 = _BinaryenConvertUInt32ToFloat64(),\r\n ConvertI64ToF32 = _BinaryenConvertSInt64ToFloat32(),\r\n ConvertI64ToF64 = _BinaryenConvertSInt64ToFloat64(),\r\n ConvertU64ToF32 = _BinaryenConvertUInt64ToFloat32(),\r\n ConvertU64ToF64 = _BinaryenConvertUInt64ToFloat64(),\r\n PromoteF32 = _BinaryenPromoteFloat32(),\r\n DemoteF64 = _BinaryenDemoteFloat64(),\r\n ReinterpretI32 = _BinaryenReinterpretInt32(),\r\n ReinterpretI64 = _BinaryenReinterpretInt64(),\r\n\r\n // see: https://github.com/WebAssembly/sign-extension-ops\r\n ExtendI8ToI32 = _BinaryenExtendS8Int32(),\r\n ExtendI16ToI32 = _BinaryenExtendS16Int32(),\r\n ExtendI8ToI64 = _BinaryenExtendS8Int64(),\r\n ExtendI16ToI64 = _BinaryenExtendS16Int64(),\r\n ExtendI32ToI64 = _BinaryenExtendS32Int64()\r\n\r\n // see: https://github.com/WebAssembly/nontrapping-float-to-int-conversions\r\n // TruncF32ToI32Sat\r\n // TruncF32ToU32Sat\r\n // TruncF64ToI32Sat\r\n // TruncF64ToU32Sat\r\n // TruncF32ToI64Sat\r\n // TruncF32ToU64Sat\r\n // TruncF64ToI64Sat\r\n // TruncF64ToU64Sat\r\n}\r\n\r\nexport enum BinaryOp {\r\n AddI32 = _BinaryenAddInt32(),\r\n SubI32 = _BinaryenSubInt32(),\r\n MulI32 = _BinaryenMulInt32(),\r\n DivI32 = _BinaryenDivSInt32(),\r\n DivU32 = _BinaryenDivUInt32(),\r\n RemI32 = _BinaryenRemSInt32(),\r\n RemU32 = _BinaryenRemUInt32(),\r\n AndI32 = _BinaryenAndInt32(),\r\n OrI32 = _BinaryenOrInt32(),\r\n XorI32 = _BinaryenXorInt32(),\r\n ShlI32 = _BinaryenShlInt32(),\r\n ShrU32 = _BinaryenShrUInt32(),\r\n ShrI32 = _BinaryenShrSInt32(),\r\n RotlI32 = _BinaryenRotLInt32(),\r\n RotrI32 = _BinaryenRotRInt32(),\r\n EqI32 = _BinaryenEqInt32(),\r\n NeI32 = _BinaryenNeInt32(),\r\n LtI32 = _BinaryenLtSInt32(),\r\n LtU32 = _BinaryenLtUInt32(),\r\n LeI32 = _BinaryenLeSInt32(),\r\n LeU32 = _BinaryenLeUInt32(),\r\n GtI32 = _BinaryenGtSInt32(),\r\n GtU32 = _BinaryenGtUInt32(),\r\n GeI32 = _BinaryenGeSInt32(),\r\n GeU32 = _BinaryenGeUInt32(),\r\n AddI64 = _BinaryenAddInt64(),\r\n SubI64 = _BinaryenSubInt64(),\r\n MulI64 = _BinaryenMulInt64(),\r\n DivI64 = _BinaryenDivSInt64(),\r\n DivU64 = _BinaryenDivUInt64(),\r\n RemI64 = _BinaryenRemSInt64(),\r\n RemU64 = _BinaryenRemUInt64(),\r\n AndI64 = _BinaryenAndInt64(),\r\n OrI64 = _BinaryenOrInt64(),\r\n XorI64 = _BinaryenXorInt64(),\r\n ShlI64 = _BinaryenShlInt64(),\r\n ShrU64 = _BinaryenShrUInt64(),\r\n ShrI64 = _BinaryenShrSInt64(),\r\n RotlI64 = _BinaryenRotLInt64(),\r\n RotrI64 = _BinaryenRotRInt64(),\r\n EqI64 = _BinaryenEqInt64(),\r\n NeI64 = _BinaryenNeInt64(),\r\n LtI64 = _BinaryenLtSInt64(),\r\n LtU64 = _BinaryenLtUInt64(),\r\n LeI64 = _BinaryenLeSInt64(),\r\n LeU64 = _BinaryenLeUInt64(),\r\n GtI64 = _BinaryenGtSInt64(),\r\n GtU64 = _BinaryenGtUInt64(),\r\n GeI64 = _BinaryenGeSInt64(),\r\n GeU64 = _BinaryenGeUInt64(),\r\n AddF32 = _BinaryenAddFloat32(),\r\n SubF32 = _BinaryenSubFloat32(),\r\n MulF32 = _BinaryenMulFloat32(),\r\n DivF32 = _BinaryenDivFloat32(),\r\n CopysignF32 = _BinaryenCopySignFloat32(),\r\n MinF32 = _BinaryenMinFloat32(),\r\n MaxF32 = _BinaryenMaxFloat32(),\r\n EqF32 = _BinaryenEqFloat32(),\r\n NeF32 = _BinaryenNeFloat32(),\r\n LtF32 = _BinaryenLtFloat32(),\r\n LeF32 = _BinaryenLeFloat32(),\r\n GtF32 = _BinaryenGtFloat32(),\r\n GeF32 = _BinaryenGeFloat32(),\r\n AddF64 = _BinaryenAddFloat64(),\r\n SubF64 = _BinaryenSubFloat64(),\r\n MulF64 = _BinaryenMulFloat64(),\r\n DivF64 = _BinaryenDivFloat64(),\r\n CopysignF64 = _BinaryenCopySignFloat64(),\r\n MinF64 = _BinaryenMinFloat64(),\r\n MaxF64 = _BinaryenMaxFloat64(),\r\n EqF64 = _BinaryenEqFloat64(),\r\n NeF64 = _BinaryenNeFloat64(),\r\n LtF64 = _BinaryenLtFloat64(),\r\n LeF64 = _BinaryenLeFloat64(),\r\n GtF64 = _BinaryenGtFloat64(),\r\n GeF64 = _BinaryenGeFloat64()\r\n}\r\n\r\nexport enum HostOp {\r\n PageSize = _BinaryenPageSize(),\r\n CurrentMemory = _BinaryenCurrentMemory(),\r\n GrowMemory = _BinaryenGrowMemory(),\r\n HasFeature = _BinaryenHasFeature(),\r\n\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n // MoveMemory\r\n // SetMemory\r\n}\r\n\r\nexport enum AtomicRMWOp {\r\n Add = _BinaryenAtomicRMWAdd(),\r\n Sub = _BinaryenAtomicRMWSub(),\r\n And = _BinaryenAtomicRMWAnd(),\r\n Or = _BinaryenAtomicRMWOr(),\r\n Xor = _BinaryenAtomicRMWXor(),\r\n Xchg = _BinaryenAtomicRMWXchg()\r\n}\r\n\r\nexport class MemorySegment {\r\n\r\n buffer: Uint8Array;\r\n offset: I64;\r\n\r\n static create(buffer: Uint8Array, offset: I64): MemorySegment {\r\n var segment = new MemorySegment();\r\n segment.buffer = buffer;\r\n segment.offset = offset;\r\n return segment;\r\n }\r\n}\r\n\r\nexport class Module {\r\n\r\n ref: ModuleRef;\r\n\r\n private cachedByValue: usize;\r\n\r\n /** Maximum number of pages when targeting WASM32. */\r\n static readonly MAX_MEMORY_WASM32: Index = 0xffff;\r\n\r\n /** Maximum number of pages when targeting WASM64. */\r\n static readonly MAX_MEMORY_WASM64: Index = 0xffff; // TODO\r\n\r\n static create(): Module {\r\n var module = new Module();\r\n module.ref = _BinaryenModuleCreate();\r\n module.cachedByValue = memory.allocate(16);\r\n return module;\r\n }\r\n\r\n static createFrom(buffer: Uint8Array): Module {\r\n var cArr = allocU8Array(buffer);\r\n try {\r\n let module = new Module();\r\n module.ref = _BinaryenModuleRead(cArr, buffer.length);\r\n module.cachedByValue = memory.allocate(3 * 8); // LLVM C-ABI, max used is 3 * usize\r\n return module;\r\n } finally {\r\n memory.free(changetype(cArr));\r\n }\r\n }\r\n\r\n private constructor() { }\r\n\r\n // types\r\n\r\n addFunctionType(\r\n name: string,\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenAddFunctionType(this.ref, cStr, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n getFunctionTypeBySignature(\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionTypeRef {\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenGetFunctionTypeBySignature(this.ref, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n removeFunctionType(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunctionType(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n // constants\r\n\r\n createI32(value: i32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createI64(valueLow: i32, valueHigh: i32 = 0): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt64(out, valueLow, valueHigh);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF32(value: f32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF64(value: f64): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat64(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n // expressions\r\n\r\n createUnary(\r\n op: UnaryOp,\r\n expr: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenUnary(this.ref, op, expr);\r\n }\r\n\r\n createBinary(\r\n op: BinaryOp,\r\n left: ExpressionRef,\r\n right: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenBinary(this.ref, op, left, right);\r\n }\r\n\r\n createHost(\r\n op: HostOp,\r\n name: string | null = null,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenHost(this.ref, op, cStr, cArr, operands ? (operands).length : 0);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createGetLocal(\r\n index: i32,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenGetLocal(this.ref, index, type);\r\n }\r\n\r\n createTeeLocal(\r\n index: i32,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenTeeLocal(this.ref, index, value);\r\n }\r\n\r\n createGetGlobal(\r\n name: string,\r\n type: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenGetGlobal(this.ref, cStr, type);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createLoad(\r\n bytes: Index,\r\n signed: bool,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenLoad(this.ref, bytes, signed ? 1 : 0, offset, /* always aligned */ bytes, type, ptr);\r\n }\r\n\r\n createStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenStore(this.ref, bytes, offset, /* always aligned */ bytes, ptr, value, type);\r\n }\r\n\r\n createAtomicLoad(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicLoad(this.ref, bytes, offset, type, ptr);\r\n }\r\n\r\n createAtomicStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicStore(this.ref, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicRMW(\r\n op: AtomicRMWOp,\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicRMW(this.ref, op, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicCmpxchg(\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n replacement: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicCmpxchg(this.ref, bytes, offset, ptr, expected, replacement, type);\r\n }\r\n\r\n createAtomicWait(\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n timeout: ExpressionRef,\r\n expectedType: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWait(this.ref, ptr, expected, timeout, expectedType);\r\n }\r\n\r\n createAtomicWake(\r\n ptr: ExpressionRef,\r\n wakeCount: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWake(this.ref, ptr, wakeCount);\r\n }\r\n\r\n // statements\r\n\r\n createSetLocal(\r\n index: Index,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSetLocal(this.ref, index, value);\r\n }\r\n\r\n createSetGlobal(\r\n name: string,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenSetGlobal(this.ref, cStr, value);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createBlock(\r\n label: string | null,\r\n children: ExpressionRef[],\r\n type: NativeType = NativeType.None\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n var cArr = allocPtrArray(children);\r\n try {\r\n return _BinaryenBlock(this.ref, cStr, cArr, children.length, type);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createBreak(\r\n label: string | null,\r\n condition: ExpressionRef = 0,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenBreak(this.ref, cStr, condition, value);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createDrop(\r\n expression: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenDrop(this.ref, expression);\r\n }\r\n\r\n createLoop(\r\n label: string | null,\r\n body: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenLoop(this.ref, cStr, body);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createIf(\r\n condition: ExpressionRef,\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenIf(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createNop(): ExpressionRef {\r\n return _BinaryenNop(this.ref);\r\n }\r\n\r\n createReturn(\r\n expression: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenReturn(this.ref, expression);\r\n }\r\n\r\n createSelect(\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef,\r\n condition: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSelect(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createSwitch(\r\n names: string[],\r\n defaultName: string | null,\r\n condition: ExpressionRef,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numNames = names.length;\r\n var strs = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n strs[i] = allocString(names[i]);\r\n }\r\n var cArr = allocI32Array(strs);\r\n var cStr = allocString(defaultName);\r\n try {\r\n return _BinaryenSwitch(this.ref, cArr, numNames, cStr, condition, value);\r\n } finally {\r\n memory.free(cStr);\r\n memory.free(cArr);\r\n for (let i = numNames - 1; i >= 0; --i) memory.free(strs[i]);\r\n }\r\n }\r\n\r\n createCall(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenCall(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createCallImport(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenCallImport(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createCallIndirect(\r\n index: ExpressionRef,\r\n operands: ExpressionRef[] | null,\r\n typeName: string\r\n ): ExpressionRef {\r\n var cArr = allocPtrArray(operands);\r\n var cStr = allocString(typeName);\r\n try {\r\n return _BinaryenCallIndirect(this.ref, index, cArr, operands && operands.length || 0, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n createUnreachable(): ExpressionRef {\r\n return _BinaryenUnreachable(this.ref);\r\n }\r\n\r\n // meta\r\n\r\n addGlobal(\r\n name: string,\r\n type: NativeType,\r\n mutable: bool,\r\n initializer: ExpressionRef\r\n ): GlobalRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenAddGlobal(this.ref, cStr, type, mutable ? 1 : 0, initializer);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n addFunction(\r\n name: string,\r\n type: FunctionTypeRef,\r\n varTypes: NativeType[] | null,\r\n body: ExpressionRef\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(varTypes);\r\n try {\r\n return _BinaryenAddFunction(this.ref, cStr, type, cArr, varTypes ? varTypes.length : 0, body);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n removeFunction(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunction(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n private cachedTemporaryName: usize = 0;\r\n private hasTemporaryFunction: bool = false;\r\n\r\n addTemporaryFunction(result: NativeType, paramTypes: NativeType[] | null, body: ExpressionRef): FunctionRef {\r\n this.hasTemporaryFunction = assert(!this.hasTemporaryFunction);\r\n var tempName = this.cachedTemporaryName;\r\n if (!tempName) this.cachedTemporaryName = tempName = allocString(\"\"); // works because strings are interned\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n let typeRef = _BinaryenAddFunctionType(this.ref, tempName, result, cArr, paramTypes ? paramTypes.length : 0);\r\n return _BinaryenAddFunction(this.ref, tempName, typeRef, 0, 0, body);\r\n } finally {\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n removeTemporaryFunction(): void {\r\n this.hasTemporaryFunction = !assert(this.hasTemporaryFunction);\r\n var tempName = assert(this.cachedTemporaryName);\r\n _BinaryenRemoveFunction(this.ref, tempName);\r\n _BinaryenRemoveFunctionType(this.ref, tempName);\r\n }\r\n\r\n addFunctionExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddFunctionExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addTableExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddTableExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addMemoryExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddMemoryExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addGlobalExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddGlobalExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n removeExport(externalName: string): void {\r\n var cStr = allocString(externalName);\r\n try {\r\n _BinaryenRemoveExport(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n addFunctionImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n functionType: FunctionTypeRef\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddFunctionImport(this.ref, cStr1, cStr2, cStr3, functionType);\r\n } finally {\r\n memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addTableImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddTableImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addMemoryImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddMemoryImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addGlobalImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n globalType: NativeType\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddGlobalImport(this.ref, cStr1, cStr2, cStr3, globalType);\r\n } finally {\r\n memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n removeImport(internalName: string): void {\r\n var cStr = allocString(internalName);\r\n try {\r\n _BinaryenRemoveImport(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n setMemory(\r\n initial: Index,\r\n maximum: Index,\r\n segments: MemorySegment[],\r\n target: Target,\r\n exportName: string | null = null\r\n ): void {\r\n var cStr = allocString(exportName);\r\n var k = segments.length;\r\n var segs = new Array(k);\r\n var offs = new Array(k);\r\n var sizs = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let buffer = segments[i].buffer;\r\n let offset = segments[i].offset;\r\n segs[i] = allocU8Array(buffer);\r\n offs[i] = target == Target.WASM64\r\n ? this.createI64(i64_low(offset), i64_high(offset))\r\n : this.createI32(i64_low(offset));\r\n sizs[i] = buffer.length;\r\n }\r\n var cArr1 = allocI32Array(segs);\r\n var cArr2 = allocI32Array(offs);\r\n var cArr3 = allocI32Array(sizs);\r\n try {\r\n _BinaryenSetMemory(this.ref, initial, maximum, cStr, cArr1, cArr2, cArr3, k);\r\n } finally {\r\n memory.free(cArr3);\r\n memory.free(cArr2);\r\n memory.free(cArr1);\r\n for (let i = k - 1; i >= 0; --i) memory.free(segs[i]);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n setFunctionTable(funcs: FunctionRef[]): void {\r\n var cArr = allocPtrArray(funcs);\r\n try {\r\n _BinaryenSetFunctionTable(this.ref, cArr, funcs.length);\r\n } finally {\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n setStart(func: FunctionRef): void {\r\n _BinaryenSetStart(this.ref, func);\r\n }\r\n\r\n getOptimizeLevel(): i32 {\r\n return _BinaryenGetOptimizeLevel();\r\n }\r\n\r\n setOptimizeLevel(level: i32 = 2): void {\r\n _BinaryenSetOptimizeLevel(level);\r\n }\r\n\r\n getShrinkLevel(): i32 {\r\n return _BinaryenGetShrinkLevel();\r\n }\r\n\r\n setShrinkLevel(level: i32 = 1): void {\r\n _BinaryenSetShrinkLevel(level);\r\n }\r\n\r\n setDebugInfo(on: bool = false): void {\r\n _BinaryenSetDebugInfo(on);\r\n }\r\n\r\n optimize(func: FunctionRef = 0): void {\r\n if (func) {\r\n _BinaryenFunctionOptimize(func, this.ref);\r\n } else {\r\n _BinaryenModuleOptimize(this.ref);\r\n }\r\n }\r\n\r\n runPasses(passes: string[], func: FunctionRef = 0): void {\r\n var numNames = passes.length;\r\n var names = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n names[i] = allocString(passes[i]);\r\n }\r\n var cArr = allocI32Array(names);\r\n try {\r\n if (func) {\r\n _BinaryenFunctionRunPasses(func, this.ref, cArr, numNames);\r\n } else {\r\n _BinaryenModuleRunPasses(this.ref, cArr, numNames);\r\n }\r\n } finally {\r\n memory.free(cArr);\r\n for (let i = numNames; i >= 0; --i) memory.free(names[i]);\r\n }\r\n }\r\n\r\n private cachedPrecomputeName: usize = 0; // for free'ing\r\n private cachedPrecomputeNames: usize = 0;\r\n\r\n precomputeExpression(expr: ExpressionRef): ExpressionRef {\r\n // remember the previous optimize levels and set to max instead, to be sure\r\n var previousOptimizeLevel = _BinaryenGetOptimizeLevel();\r\n var previousShrinkLevel = _BinaryenGetShrinkLevel();\r\n var previousDebugInfo = _BinaryenGetDebugInfo();\r\n _BinaryenSetOptimizeLevel(4);\r\n _BinaryenSetShrinkLevel(0);\r\n _BinaryenSetDebugInfo(false);\r\n\r\n // wrap the expression in a temp. function and run the precompute pass on it\r\n var type = _BinaryenExpressionGetType(expr);\r\n var func = this.addTemporaryFunction(type, null, expr);\r\n var names = this.cachedPrecomputeNames;\r\n if (!names) {\r\n let name = allocString(\"precompute\");\r\n this.cachedPrecomputeName = name;\r\n this.cachedPrecomputeNames = names = allocI32Array([ name ]);\r\n }\r\n _BinaryenFunctionRunPasses(func, this.ref, names, 1);\r\n expr = _BinaryenFunctionGetBody(func);\r\n this.removeTemporaryFunction();\r\n\r\n // reset optimize levels to previous\r\n _BinaryenSetOptimizeLevel(previousOptimizeLevel);\r\n _BinaryenSetShrinkLevel(previousShrinkLevel);\r\n _BinaryenSetDebugInfo(previousDebugInfo);\r\n return expr;\r\n }\r\n\r\n validate(): bool {\r\n return _BinaryenModuleValidate(this.ref) == 1;\r\n }\r\n\r\n interpret(): void {\r\n _BinaryenModuleInterpret(this.ref);\r\n }\r\n\r\n toBinary(sourceMapUrl: string | null): BinaryModule {\r\n var out = this.cachedByValue;\r\n var cStr = allocString(sourceMapUrl);\r\n var binaryPtr: usize = 0;\r\n var sourceMapPtr: usize = 0;\r\n try {\r\n _BinaryenModuleAllocateAndWrite(out, this.ref, cStr);\r\n binaryPtr = readInt(out);\r\n let binaryBytes = readInt(out + 4);\r\n sourceMapPtr = readInt(out + 4 * 2);\r\n let ret = new BinaryModule();\r\n ret.output = readBuffer(binaryPtr, binaryBytes);\r\n ret.sourceMap = readString(sourceMapPtr);\r\n return ret;\r\n } finally {\r\n if (cStr) memory.free(cStr);\r\n if (binaryPtr) memory.free(binaryPtr);\r\n if (sourceMapPtr) memory.free(sourceMapPtr);\r\n }\r\n }\r\n\r\n toText(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n toAsmjs(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n dispose(): void {\r\n assert(this.ref);\r\n memory.free(this.cachedByValue);\r\n memory.free(this.cachedTemporaryName);\r\n memory.free(this.cachedPrecomputeName);\r\n memory.free(this.cachedPrecomputeNames);\r\n _BinaryenModuleDispose(this.ref);\r\n this.ref = 0;\r\n }\r\n\r\n createRelooper(): Relooper {\r\n return Relooper.create(this);\r\n }\r\n\r\n cloneExpression(\r\n expr: ExpressionRef,\r\n noSideEffects: bool = false,\r\n maxDepth: i32 = i32.MAX_VALUE\r\n ): ExpressionRef { // currently supports side effect free expressions only\r\n if (maxDepth < 0) return 0;\r\n maxDepth -= 1;\r\n\r\n var nested1: ExpressionRef,\r\n nested2: ExpressionRef;\r\n\r\n switch (_BinaryenExpressionGetId(expr)) {\r\n case ExpressionId.Const: {\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32: {\r\n return this.createI32(_BinaryenConstGetValueI32(expr));\r\n }\r\n case NativeType.I64: {\r\n return this.createI64(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n }\r\n case NativeType.F32: {\r\n return this.createF32(_BinaryenConstGetValueF32(expr));\r\n }\r\n case NativeType.F64: {\r\n return this.createF64(_BinaryenConstGetValueF64(expr));\r\n }\r\n default: {\r\n throw new Error(\"concrete type expected\");\r\n }\r\n }\r\n }\r\n case ExpressionId.GetLocal: {\r\n return _BinaryenGetLocal(this.ref,\r\n _BinaryenGetLocalGetIndex(expr),\r\n _BinaryenExpressionGetType(expr)\r\n );\r\n }\r\n case ExpressionId.GetGlobal: {\r\n let globalName = _BinaryenGetGlobalGetName(expr);\r\n if (!globalName) break;\r\n return _BinaryenGetGlobal(this.ref, globalName, _BinaryenExpressionGetType(expr));\r\n }\r\n case ExpressionId.Load: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenLoadGetPtr(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return (\r\n _BinaryenLoadIsAtomic(expr)\r\n ? _BinaryenAtomicLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n : _BinaryenLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadIsSigned(expr) ? 1 : 0,\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenLoadGetAlign(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n );\r\n }\r\n case ExpressionId.Unary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenUnaryGetValue(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenUnary(this.ref, _BinaryenUnaryGetOp(expr), nested1);\r\n }\r\n case ExpressionId.Binary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenBinaryGetLeft(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n if (!(nested2 = this.cloneExpression(_BinaryenBinaryGetRight(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenBinary(this.ref, _BinaryenBinaryGetOp(expr), nested1, nested2);\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n // source map generation\r\n\r\n addDebugInfoFile(name: string): Index {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenModuleAddDebugInfoFileName(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n getDebugInfoFile(index: Index): string | null {\r\n return readString(_BinaryenModuleGetDebugInfoFileName(this.ref, index));\r\n }\r\n\r\n setDebugLocation(\r\n func: FunctionRef,\r\n expr: ExpressionRef,\r\n fileIndex: Index,\r\n lineNumber: Index,\r\n columnNumber: Index\r\n ): void {\r\n _BinaryenFunctionSetDebugLocation(func, expr, fileIndex, lineNumber, columnNumber);\r\n }\r\n}\r\n\r\n// expressions\r\n\r\nexport function getExpressionId(expr: ExpressionRef): ExpressionId {\r\n return _BinaryenExpressionGetId(expr);\r\n}\r\n\r\nexport function getExpressionType(expr: ExpressionRef): NativeType {\r\n return _BinaryenExpressionGetType(expr);\r\n}\r\n\r\nexport function getConstValueI32(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI32(expr);\r\n}\r\n\r\nexport function getConstValueI64Low(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64Low(expr);\r\n}\r\n\r\nexport function getConstValueI64High(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64High(expr);\r\n}\r\n\r\nexport function getConstValueF32(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF32(expr);\r\n}\r\n\r\nexport function getConstValueF64(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF64(expr);\r\n}\r\n\r\nexport function getGetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenGetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenSetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSetLocalGetValue(expr);\r\n}\r\n\r\nexport function isTeeLocal(expr: ExpressionRef): bool {\r\n return _BinaryenSetLocalIsTee(expr);\r\n}\r\n\r\nexport function getBinaryOp(expr: ExpressionRef): BinaryOp {\r\n return _BinaryenBinaryGetOp(expr);\r\n}\r\n\r\nexport function getBinaryLeft(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetLeft(expr);\r\n}\r\n\r\nexport function getBinaryRight(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetRight(expr);\r\n}\r\n\r\nexport function getUnaryOp(expr: ExpressionRef): UnaryOp {\r\n return _BinaryenUnaryGetOp(expr);\r\n}\r\n\r\nexport function getUnaryValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenUnaryGetValue(expr);\r\n}\r\n\r\nexport function getLoadBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetBytes(expr);\r\n}\r\n\r\nexport function getLoadOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetOffset(expr);\r\n}\r\n\r\nexport function getLoadPtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoadGetPtr(expr);\r\n}\r\n\r\nexport function isLoadSigned(expr: ExpressionRef): bool {\r\n return _BinaryenLoadIsSigned(expr);\r\n}\r\n\r\nexport function getStoreBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetBytes(expr);\r\n}\r\n\r\nexport function getStoreOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetOffset(expr);\r\n}\r\n\r\nexport function getStorePtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetPtr(expr);\r\n}\r\n\r\nexport function getStoreValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetValue(expr);\r\n}\r\n\r\nexport function getBlockName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBlockGetName(expr));\r\n}\r\n\r\nexport function getBlockChildCount(expr: ExpressionRef): Index {\r\n return _BinaryenBlockGetNumChildren(expr);\r\n}\r\n\r\nexport function getBlockChild(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenBlockGetChild(expr, index);\r\n}\r\n\r\nexport function getIfCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetCondition(expr);\r\n}\r\n\r\nexport function getIfTrue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfTrue(expr);\r\n}\r\n\r\nexport function getIfFalse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfFalse(expr);\r\n}\r\n\r\nexport function getLoopName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenLoopGetName(expr));\r\n}\r\n\r\nexport function getLoopBody(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoopGetBody(expr);\r\n}\r\n\r\nexport function getBreakName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBreakGetName(expr));\r\n}\r\n\r\nexport function getBreakCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBreakGetCondition(expr);\r\n}\r\n\r\nexport function getSelectThen(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfTrue(expr);\r\n}\r\n\r\nexport function getSelectElse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfFalse(expr);\r\n}\r\n\r\nexport function getSelectCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetCondition(expr);\r\n}\r\n\r\nexport function getDropValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenDropGetValue(expr);\r\n}\r\n\r\nexport function getReturnValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenReturnGetValue(expr);\r\n}\r\n\r\nexport function getCallTarget(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenCallGetTarget(expr));\r\n}\r\n\r\nexport function getHostOp(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenHostGetOp(expr);\r\n}\r\n\r\nexport function getHostOperandCount(expr: ExpressionRef): Index {\r\n return _BinaryenHostGetNumOperands(expr);\r\n}\r\n\r\nexport function getHostOperand(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenHostGetOperand(expr, index);\r\n}\r\n\r\nexport function getHostName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenHostGetNameOperand(expr));\r\n}\r\n\r\n// functions\r\n\r\nexport function getFunctionBody(func: FunctionRef): ExpressionRef {\r\n return _BinaryenFunctionGetBody(func);\r\n}\r\n\r\nexport function getFunctionName(func: FunctionRef): string | null {\r\n return readString(_BinaryenFunctionGetName(func));\r\n}\r\n\r\nexport function getFunctionParamCount(func: FunctionRef): Index {\r\n return _BinaryenFunctionGetNumParams(func);\r\n}\r\n\r\nexport function getFunctionParamType(func: FunctionRef, index: Index): NativeType {\r\n return _BinaryenFunctionGetParam(func, index);\r\n}\r\n\r\nexport function getFunctionResultType(func: FunctionRef): NativeType {\r\n return _BinaryenFunctionGetResult(func);\r\n}\r\n\r\nexport class Relooper {\r\n\r\n module: Module;\r\n ref: RelooperRef;\r\n\r\n static create(module: Module): Relooper {\r\n var relooper = new Relooper();\r\n relooper.module = module;\r\n relooper.ref = _RelooperCreate();\r\n return relooper;\r\n }\r\n\r\n private constructor() {}\r\n\r\n addBlock(code: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlock(this.ref, code);\r\n }\r\n\r\n addBranch(from: RelooperBlockRef, to: RelooperBlockRef, condition: ExpressionRef = 0, code: ExpressionRef = 0): void {\r\n _RelooperAddBranch(from, to, condition, code);\r\n }\r\n\r\n addBlockWithSwitch(code: ExpressionRef, condition: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlockWithSwitch(this.ref, code, condition);\r\n }\r\n\r\n addBranchForSwitch(from: RelooperBlockRef, to: RelooperBlockRef, indexes: i32[], code: ExpressionRef = 0): void {\r\n var cArr = allocI32Array(indexes);\r\n try {\r\n _RelooperAddBranchForSwitch(from, to, cArr, indexes.length, code);\r\n } finally {\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n renderAndDispose(entry: RelooperBlockRef, labelHelper: Index): ExpressionRef {\r\n return _RelooperRenderAndDispose(this.ref, entry, labelHelper, this.module.ref);\r\n }\r\n}\r\n\r\n// export function hasSideEffects(expr: ExpressionRef): bool {\r\n// switch (_BinaryenExpressionGetId(expr = getPtr(expr))) {\r\n// case ExpressionId.GetLocal:\r\n// case ExpressionId.GetGlobal:\r\n// case ExpressionId.Const:\r\n// case ExpressionId.Nop:\r\n// case ExpressionId.Unreachable: {\r\n// return false;\r\n// }\r\n// case ExpressionId.Block: {\r\n// for (let i = 0, k = _BinaryenBlockGetNumChildren(expr); i < k; ++i) {\r\n// if (hasSideEffects(_BinaryenBlockGetChild(expr, i))) return true;\r\n// }\r\n// return false;\r\n// }\r\n// case ExpressionId.If: {\r\n// return hasSideEffects(_BinaryenIfGetCondition(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfFalse(expr));\r\n// }\r\n// case ExpressionId.Unary: {\r\n// return hasSideEffects(_BinaryenUnaryGetValue(expr));\r\n// }\r\n// case ExpressionId.Binary: {\r\n// return hasSideEffects(_BinaryenBinaryGetLeft(expr))\r\n// || hasSideEffects(_BinaryenBinaryGetRight(expr));\r\n// }\r\n// case ExpressionId.Drop: {\r\n// return hasSideEffects(_BinaryenDropGetValue(expr));\r\n// }\r\n// case ExpressionId.Select: {\r\n// return hasSideEffects(_BinaryenSelectGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenSelectGetIfFalse(expr))\r\n// || hasSideEffects(_BinaryenSelectGetCondition(expr));\r\n// }\r\n// }\r\n// return true;\r\n// }\r\n\r\n// helpers\r\n// can't do stack allocation here: STACKTOP is a global in WASM but a hidden variable in asm.js\r\n\r\nfunction allocU8Array(u8s: Uint8Array | null): usize {\r\n if (!u8s) return 0;\r\n var numValues = u8s.length;\r\n var ptr = memory.allocate(numValues);\r\n var idx = ptr;\r\n for (let i = 0; i < numValues; ++i) {\r\n store(idx++, u8s[i]);\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocI32Array(i32s: i32[] | null): usize {\r\n if (!i32s) return 0;\r\n var ptr = memory.allocate(i32s.length << 2);\r\n var idx = ptr;\r\n for (let i = 0, k = i32s.length; i < k; ++i) {\r\n let val = i32s[i];\r\n // store(idx, val) is not portable\r\n store(idx , ( val & 0xff) as u8);\r\n store(idx + 1, ((val >> 8) & 0xff) as u8);\r\n store(idx + 2, ((val >> 16) & 0xff) as u8);\r\n store(idx + 3, ( val >>> 24 ) as u8);\r\n idx += 4;\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocPtrArray(ptrs: usize[] | null): usize {\r\n return allocI32Array(ptrs); // TODO: WASM64 one day\r\n}\r\n\r\nfunction stringLengthUTF8(str: string): usize {\r\n var len = 0;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n ++len;\r\n } else if (u <= 0x7FF) {\r\n len += 2;\r\n } else if (u <= 0xFFFF) {\r\n len += 3;\r\n } else if (u <= 0x1FFFFF) {\r\n len += 4;\r\n } else if (u <= 0x3FFFFFF) {\r\n len += 5;\r\n } else {\r\n len += 6;\r\n }\r\n }\r\n return len;\r\n}\r\n\r\nfunction allocString(str: string | null): usize {\r\n if (str == null) return 0;\r\n var ptr = memory.allocate(stringLengthUTF8(str) + 1);\r\n // the following is based on Emscripten's stringToUTF8Array\r\n var idx = ptr;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n store(idx++, u as u8);\r\n } else if (u <= 0x7FF) {\r\n store(idx++, (0xC0 | (u >>> 6) ) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0xFFFF) {\r\n store(idx++, (0xE0 | (u >>> 12) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x1FFFFF) {\r\n store(idx++, (0xF0 | (u >>> 18) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x3FFFFFF) {\r\n store(idx++, (0xF8 | (u >>> 24) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else {\r\n store(idx++, (0xFC | (u >>> 30) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 24) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n }\r\n }\r\n store(idx, 0);\r\n return ptr;\r\n}\r\n\r\nfunction readInt(ptr: usize): i32 {\r\n return (\r\n load(ptr ) |\r\n (load(ptr + 1) << 8) |\r\n (load(ptr + 2) << 16) |\r\n (load(ptr + 3) << 24)\r\n );\r\n}\r\n\r\nfunction readBuffer(ptr: usize, length: usize): Uint8Array {\r\n var ret = new Uint8Array(length);\r\n for (let i: usize = 0; i < length; ++i) {\r\n ret[i] = load(ptr + i);\r\n }\r\n return ret;\r\n}\r\n\r\nexport function readString(ptr: usize): string | null {\r\n if (!ptr) return null;\r\n var arr = new Array();\r\n // the following is based on Emscripten's UTF8ArrayToString\r\n var cp: u32;\r\n var u1: u32, u2: u32, u3: u32, u4: u32, u5: u32;\r\n while (cp = load(ptr++)) {\r\n if (!(cp & 0x80)) {\r\n arr.push(cp);\r\n continue;\r\n }\r\n u1 = load(ptr++) & 63;\r\n if ((cp & 0xE0) == 0xC0) {\r\n arr.push(((cp & 31) << 6) | u1);\r\n continue;\r\n }\r\n u2 = load(ptr++) & 63;\r\n if ((cp & 0xF0) == 0xE0) {\r\n cp = ((cp & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u3 = load(ptr++) & 63;\r\n if ((cp & 0xF8) == 0xF0) {\r\n cp = ((cp & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;\r\n } else {\r\n u4 = load(ptr++) & 63;\r\n if ((cp & 0xFC) == 0xF8) {\r\n cp = ((cp & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;\r\n } else {\r\n u5 = load(ptr++) & 63;\r\n cp = ((cp & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;\r\n }\r\n }\r\n }\r\n arr.push(cp);\r\n // if (cp < 0x10000) {\r\n // arr.push(cp);\r\n // } else {\r\n // var ch = cp - 0x10000;\r\n // arr.push(0xD800 | (ch >> 10));\r\n // arr.push(0xDC00 | (ch & 0x3FF));\r\n // }\r\n }\r\n // return String.fromCharCodes(arr);\r\n return String.fromCodePoints(arr);\r\n}\r\n\r\n/** Result structure of {@link Module#toBinary}. */\r\nexport class BinaryModule {\r\n /** WebAssembly binary. */\r\n output: Uint8Array;\r\n /** Source map, if generated. */\r\n sourceMap: string | null;\r\n}\r\n\r\n/** 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;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\r\n} catch (e) {\r\n\t// This works if the window reference is available\r\n\tif (typeof window === \"object\") g = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n","/**\r\n * Mappings from AssemblyScript types to WebAssembly types.\r\n * @module types\r\n *//***/\r\n\r\nimport {\r\n Class,\r\n FunctionTarget,\r\n 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 (!signednessIsRelevant || this.is(TypeFlags.SIGNED) == target.is(TypeFlags.SIGNED)) {\r\n return this.size <= target.size;\r\n }\r\n } else if (target.kind == TypeKind.F32) {\r\n return this.size <= 23; // mantissa bits\r\n } else if (target.kind == TypeKind.F64) {\r\n return this.size <= 52; // ^\r\n }\r\n } else if (this.is(TypeFlags.FLOAT)) {\r\n if (target.is(TypeFlags.FLOAT)) {\r\n return this.size <= target.size;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /** Determines the common compatible type of two types, if any. */\r\n static commonCompatible(left: Type, right: Type, signednessIsImportant: bool): Type | null {\r\n if (right.isAssignableTo(left, signednessIsImportant)) return left;\r\n else if (left.isAssignableTo(right, signednessIsImportant)) return right;\r\n return null;\r\n }\r\n\r\n /** Converts this type to its TypeScript representation. */\r\n toString(kindOnly: bool = false): string {\r\n if (!kindOnly && this.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.classReference;\r\n if (classReference) {\r\n return this.is(TypeFlags.NULLABLE)\r\n ? classReference.toString() + \" | null\"\r\n : classReference.toString();\r\n }\r\n let signatureReference = this.signatureReference;\r\n if (signatureReference) {\r\n return this.is(TypeFlags.NULLABLE)\r\n ? \"(\" + signatureReference.toString(true) + \") | null\"\r\n : signatureReference.toString(true);\r\n }\r\n assert(false);\r\n }\r\n switch (this.kind) {\r\n case TypeKind.I8: return \"i8\";\r\n case TypeKind.I16: return \"i16\";\r\n case TypeKind.I32: return \"i32\";\r\n case TypeKind.I64: return \"i64\";\r\n case TypeKind.ISIZE: return \"isize\";\r\n case TypeKind.U8: return \"u8\";\r\n case TypeKind.U16: return \"u16\";\r\n case TypeKind.U32: return \"u32\";\r\n case TypeKind.U64: return \"u64\";\r\n case TypeKind.USIZE: return \"usize\";\r\n case TypeKind.BOOL: return \"bool\";\r\n case TypeKind.F32: return \"f32\";\r\n case TypeKind.F64: return \"f64\";\r\n default: assert(false);\r\n case TypeKind.VOID: return \"void\";\r\n }\r\n }\r\n\r\n // Binaryen specific\r\n\r\n /** Converts this type to its respective native type. */\r\n toNativeType(): NativeType {\r\n switch (this.kind) {\r\n default: return NativeType.I32;\r\n case TypeKind.I64:\r\n case TypeKind.U64: return NativeType.I64;\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: return this.size == 64 ? NativeType.I64 : NativeType.I32;\r\n case TypeKind.F32: return NativeType.F32;\r\n case TypeKind.F64: return NativeType.F64;\r\n case TypeKind.VOID: return NativeType.None;\r\n }\r\n }\r\n\r\n /** Converts this type to its native `0` value. */\r\n toNativeZero(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n case TypeKind.VOID: assert(false);\r\n default: return module.createI32(0);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(0);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(0);\r\n case TypeKind.F32: return module.createF32(0);\r\n case TypeKind.F64: return module.createF64(0);\r\n }\r\n }\r\n\r\n /** Converts this type to its native `1` value. */\r\n toNativeOne(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n case TypeKind.VOID: assert(false);\r\n default: return module.createI32(1);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(1);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(1);\r\n case TypeKind.F32: return module.createF32(1);\r\n case TypeKind.F64: return module.createF64(1);\r\n }\r\n }\r\n\r\n /** Converts this type to its native `-1` value. */\r\n toNativeNegOne(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n case TypeKind.VOID: assert(false);\r\n default: return module.createI32(-1);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(-1);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(-1, -1);\r\n case TypeKind.F32: return module.createF32(-1);\r\n case TypeKind.F64: return module.createF64(-1);\r\n }\r\n }\r\n\r\n /** Converts this type to its signature string. */\r\n toSignatureString(): string {\r\n switch (this.kind) {\r\n default: return \"i\";\r\n case TypeKind.I64:\r\n case TypeKind.U64: return \"I\";\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: return this.size == 64 ? \"I\" : \"i\";\r\n case TypeKind.F32: return \"f\";\r\n case TypeKind.F64: return \"F\";\r\n case TypeKind.VOID: return \"v\";\r\n }\r\n }\r\n\r\n // Types\r\n\r\n /** An 8-bit signed integer. */\r\n static readonly i8: Type = new Type(TypeKind.I8,\r\n TypeFlags.SIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 8\r\n );\r\n\r\n /** A 16-bit signed integer. */\r\n static readonly i16: Type = new Type(TypeKind.I16,\r\n TypeFlags.SIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 16\r\n );\r\n\r\n /** A 32-bit signed integer. */\r\n static readonly i32: Type = new Type(TypeKind.I32,\r\n TypeFlags.SIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit signed integer. */\r\n static readonly i64: Type = new Type(TypeKind.I64,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 32-bit signed size. WASM32 only. */\r\n static readonly isize32: Type = new Type(TypeKind.ISIZE,\r\n TypeFlags.SIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.POINTER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit signed size. WASM64 only. */\r\n static readonly isize64: Type = new Type(TypeKind.ISIZE,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.POINTER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** An 8-bit unsigned integer. */\r\n static readonly u8: Type = new Type(TypeKind.U8,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 8\r\n );\r\n\r\n /** A 16-bit unsigned integer. */\r\n static readonly u16: Type = new Type(TypeKind.U16,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 16\r\n );\r\n\r\n /** A 32-bit unsigned integer. */\r\n static readonly u32: Type = new Type(TypeKind.U32,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit unsigned integer. */\r\n static readonly u64: Type = new Type(TypeKind.U64,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 32-bit unsigned size. WASM32 only. */\r\n static readonly usize32: Type = new Type(TypeKind.USIZE,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.POINTER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit unsigned size. WASM64 only. */\r\n static readonly usize64: Type = new Type(TypeKind.USIZE,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.POINTER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 1-bit unsigned integer. */\r\n static readonly bool: Type = new Type(TypeKind.BOOL,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 1\r\n );\r\n\r\n /** A 32-bit float. */\r\n static readonly f32: Type = new Type(TypeKind.F32,\r\n TypeFlags.SIGNED |\r\n TypeFlags.FLOAT |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit float. */\r\n static readonly f64: Type = new Type(TypeKind.F64,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.FLOAT |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** No return type. */\r\n static readonly void: Type = new Type(TypeKind.VOID, TypeFlags.NONE, 0);\r\n}\r\n\r\n/** Converts an array of types to an array of native types. */\r\nexport function typesToNativeTypes(types: Type[]): NativeType[] {\r\n var numTypes = types.length;\r\n var ret = new Array(numTypes);\r\n for (let i = 0; i < numTypes; ++i) ret[i] = types[i].toNativeType();\r\n return ret;\r\n}\r\n\r\n/** Converts an array of types to its combined string representation. */\r\nexport function typesToString(types: Type[]): string {\r\n var numTypes = types.length;\r\n if (!numTypes) return \"\";\r\n var sb = new Array(numTypes);\r\n for (let i = 0; i < numTypes; ++i) sb[i] = types[i].toString();\r\n return sb.join(\",\");\r\n}\r\n\r\n/** Represents a fully resolved function signature. */\r\nexport class Signature {\r\n\r\n /** Parameter types, if any, excluding `this`. */\r\n parameterTypes: Type[];\r\n /** Parameter names, if known, excluding `this`. */\r\n parameterNames: string[] | null;\r\n /** Number of required parameters excluding `this`. Other parameters are considered optional. */\r\n requiredParameters: i32;\r\n /** Return type. */\r\n returnType: Type;\r\n /** This type, if an instance signature. */\r\n thisType: Type | null;\r\n /** Whether the last parameter is a rest parameter. */\r\n hasRest: bool;\r\n /** Cached {@link FunctionTarget}. */\r\n cachedFunctionTarget: FunctionTarget | null = null;\r\n /** Respective function type. */\r\n type: Type;\r\n\r\n /** Constructs a new signature. */\r\n constructor(\r\n parameterTypes: Type[] | null = null,\r\n returnType: Type | null = null,\r\n thisType: Type | null = null\r\n ) {\r\n this.parameterTypes = parameterTypes ? parameterTypes : [];\r\n this.parameterNames = null;\r\n this.requiredParameters = 0;\r\n this.returnType = returnType ? returnType : Type.void;\r\n this.thisType = thisType;\r\n this.hasRest = false;\r\n this.type = Type.u32.asFunction(this);\r\n }\r\n\r\n /** Gets the known or, alternatively, generic parameter name at the specified index. */\r\n getParameterName(index: i32): string {\r\n var parameterNames = this.parameterNames;\r\n return parameterNames && parameterNames.length > index\r\n ? parameterNames[index]\r\n : getDefaultParameterName(index);\r\n }\r\n\r\n /** Tests if a value of this function type is assignable to a target of the specified function type. */\r\n isAssignableTo(target: Signature): bool {\r\n // TODO: maybe cache results?\r\n\r\n // check `this` type\r\n var thisThisType = this.thisType;\r\n var targetThisType = target.thisType;\r\n if (thisThisType) {\r\n if (!(targetThisType && thisThisType.isAssignableTo(targetThisType))) return false;\r\n } else if (targetThisType) {\r\n return false;\r\n }\r\n\r\n // check rest parameter\r\n if (this.hasRest != target.hasRest) return false; // TODO\r\n\r\n // check parameter types\r\n var thisParameterTypes = this.parameterTypes;\r\n var targetParameterTypes = target.parameterTypes;\r\n var numParameters = thisParameterTypes.length;\r\n if (numParameters != targetParameterTypes.length) return false;\r\n for (let i = 0; i < numParameters; ++i) {\r\n let thisParameterType = thisParameterTypes[i];\r\n let targetParameterType = targetParameterTypes[i];\r\n if (!thisParameterType.isAssignableTo(targetParameterType)) return false;\r\n }\r\n\r\n // check return type\r\n var thisReturnType = this.returnType;\r\n var targetReturnType = target.returnType;\r\n return thisReturnType == targetReturnType || thisReturnType.isAssignableTo(targetReturnType);\r\n }\r\n\r\n /** Converts a signature to a function type string. */\r\n static makeSignatureString(parameterTypes: Type[] | null, returnType: Type, thisType: Type | null = null): string {\r\n var sb = [];\r\n if (thisType) sb.push(thisType.toSignatureString());\r\n if (parameterTypes) {\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) sb.push(parameterTypes[i].toSignatureString());\r\n }\r\n sb.push(returnType.toSignatureString());\r\n return sb.join(\"\");\r\n }\r\n\r\n /** Converts this signature to a function type string. */\r\n toSignatureString(): string {\r\n return Signature.makeSignatureString(this.parameterTypes, this.returnType, this.thisType);\r\n }\r\n\r\n /** Converts this signature to a string. */\r\n toString(includeThis: bool = false): string {\r\n var sb = new Array();\r\n sb.push(\"(\");\r\n var index = 0;\r\n var thisType = this.thisType;\r\n if (thisType) {\r\n if (includeThis) {\r\n sb.push(\"this: \");\r\n sb.push(thisType.toString());\r\n index = 1;\r\n }\r\n }\r\n var parameters = this.parameterTypes;\r\n var numParameters = parameters.length;\r\n if (numParameters) {\r\n let names = this.parameterNames;\r\n let numNames = names ? names.length : 0;\r\n let optionalStart = this.requiredParameters;\r\n let restIndex = this.hasRest ? numParameters - 1 : -1;\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n if (index) sb.push(\", \");\r\n if (i == restIndex) sb.push(\"...\");\r\n if (i < numNames) sb.push((names)[i]);\r\n else sb.push(getDefaultParameterName(i));\r\n if (i >= optionalStart && i != restIndex) sb.push(\"?: \");\r\n else sb.push(\": \");\r\n sb.push(parameters[i].toString());\r\n }\r\n }\r\n sb.push(\") => \");\r\n sb.push(this.returnType.toString());\r\n return sb.join(\"\");\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n// Cached default parameter names used where names are unknown.\r\nvar cachedDefaultParameterNames: string[] | null = null;\r\n\r\n/** Gets the cached default parameter name for the specified index. */\r\nexport function getDefaultParameterName(index: i32): string {\r\n if (!cachedDefaultParameterNames) cachedDefaultParameterNames = [];\r\n for (let i = cachedDefaultParameterNames.length; i <= index; ++i) {\r\n cachedDefaultParameterNames.push(\"arg$\" + i.toString(10));\r\n }\r\n return cachedDefaultParameterNames[index - 1];\r\n}\r\n","/**\r\n * A TypeScript tokenizer modified for AssemblyScript.\r\n *\r\n * Skips over trivia and provides a general mark/reset mechanism for the parser to utilize on\r\n * ambiguous tokens.\r\n *\r\n * @module tokenizer\r\n *//***/\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticMessage,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Source,\r\n CommentKind\r\n} from \"./ast\";\r\n\r\nimport {\r\n CharCode,\r\n isLineBreak,\r\n isWhiteSpace,\r\n isIdentifierStart,\r\n isIdentifierPart,\r\n isDecimalDigit,\r\n isOctalDigit,\r\n isKeywordCharacter\r\n} from \"./util\";\r\n\r\n/** Named token types. */\r\nexport enum Token {\r\n\r\n // keywords\r\n // discarded: ANY, BOOLEAN, NEVER, NUMBER, STRING, SYMBOL, UNDEFINED, LESSTHAN_SLASH\r\n\r\n ABSTRACT,\r\n AS,\r\n ASYNC,\r\n AWAIT, // ES2017\r\n BREAK, // ES2017\r\n CASE, // ES2017\r\n CATCH, // ES2017\r\n CLASS, // ES2017\r\n CONST, // ES2017\r\n CONTINUE, // ES2017\r\n CONSTRUCTOR,\r\n DEBUGGER, // ES2017\r\n DECLARE,\r\n DEFAULT, // ES2017\r\n DELETE, // ES2017\r\n DO, // ES2017\r\n ELSE, // ES2017\r\n ENUM, // ES2017 future\r\n EXPORT, // ES2017\r\n EXTENDS, // ES2017\r\n FALSE, // ES\r\n FINALLY, // ES2017\r\n FOR, // ES2017\r\n FROM, // AS possible identifier\r\n FUNCTION, // ES2017\r\n GET,\r\n IF, // ES2017\r\n IMPLEMENTS, // ES2017 non-lexical\r\n IMPORT, // ES2017\r\n IN, // ES2017\r\n INSTANCEOF, // ES2017\r\n INTERFACE, // ES2017 non-lexical\r\n IS,\r\n KEYOF,\r\n LET, // ES2017 non-lexical\r\n MODULE, // AS possible identifier\r\n NAMESPACE, // AS possible identifier\r\n NEW, // ES2017\r\n NULL, // ES\r\n OF,\r\n PACKAGE, // ES2017 non-lexical\r\n PRIVATE, // ES2017 non-lexical\r\n PROTECTED, // ES2017 non-lexical\r\n PUBLIC, // ES2017 non-lexical\r\n READONLY,\r\n RETURN, // ES2017\r\n SET,\r\n STATIC, // ES2017 non-lexical\r\n SUPER, // ES2017\r\n SWITCH, // ES2017\r\n THIS, // ES2017\r\n THROW, // ES2017\r\n TRUE, // ES\r\n TRY, // ES2017\r\n TYPE, // AS possible identifier\r\n TYPEOF, // ES2017\r\n VAR, // ES2017\r\n VOID, // ES2017\r\n WHILE, // ES2017\r\n WITH, // ES2017\r\n YIELD, // ES2017\r\n\r\n // punctuation\r\n\r\n OPENBRACE,\r\n CLOSEBRACE,\r\n OPENPAREN,\r\n CLOSEPAREN,\r\n OPENBRACKET,\r\n CLOSEBRACKET,\r\n DOT,\r\n DOT_DOT_DOT,\r\n SEMICOLON,\r\n COMMA,\r\n LESSTHAN,\r\n GREATERTHAN,\r\n LESSTHAN_EQUALS,\r\n GREATERTHAN_EQUALS,\r\n EQUALS_EQUALS,\r\n EXCLAMATION_EQUALS,\r\n EQUALS_EQUALS_EQUALS,\r\n EXCLAMATION_EQUALS_EQUALS,\r\n EQUALS_GREATERTHAN,\r\n PLUS,\r\n MINUS,\r\n ASTERISK_ASTERISK,\r\n ASTERISK,\r\n SLASH,\r\n PERCENT,\r\n PLUS_PLUS,\r\n MINUS_MINUS,\r\n LESSTHAN_LESSTHAN,\r\n GREATERTHAN_GREATERTHAN,\r\n GREATERTHAN_GREATERTHAN_GREATERTHAN,\r\n AMPERSAND,\r\n BAR,\r\n CARET,\r\n EXCLAMATION,\r\n TILDE,\r\n AMPERSAND_AMPERSAND,\r\n BAR_BAR,\r\n QUESTION,\r\n COLON,\r\n EQUALS,\r\n PLUS_EQUALS,\r\n MINUS_EQUALS,\r\n ASTERISK_EQUALS,\r\n ASTERISK_ASTERISK_EQUALS,\r\n SLASH_EQUALS,\r\n PERCENT_EQUALS,\r\n LESSTHAN_LESSTHAN_EQUALS,\r\n GREATERTHAN_GREATERTHAN_EQUALS,\r\n GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS,\r\n AMPERSAND_EQUALS,\r\n BAR_EQUALS,\r\n CARET_EQUALS,\r\n AT,\r\n\r\n // literals\r\n\r\n IDENTIFIER,\r\n STRINGLITERAL,\r\n INTEGERLITERAL,\r\n FLOATLITERAL,\r\n\r\n // meta\r\n\r\n INVALID,\r\n ENDOFFILE\r\n}\r\n\r\nexport enum IdentifierHandling {\r\n DEFAULT,\r\n PREFER,\r\n ALWAYS\r\n}\r\n\r\nexport function tokenFromKeyword(text: string): Token {\r\n assert(text.length);\r\n switch (text.charCodeAt(0)) {\r\n case CharCode.a: {\r\n switch (text) {\r\n case \"abstract\": return Token.ABSTRACT;\r\n case \"as\": return Token.AS;\r\n case \"async\": return Token.ASYNC;\r\n case \"await\": return Token.AWAIT;\r\n }\r\n break;\r\n }\r\n case CharCode.b: {\r\n switch (text) {\r\n case \"break\": return Token.BREAK;\r\n }\r\n break;\r\n }\r\n case CharCode.c: {\r\n switch (text) {\r\n case \"case\": return Token.CASE;\r\n case \"catch\": return Token.CATCH;\r\n case \"class\": return Token.CLASS;\r\n case \"continue\": return Token.CONTINUE;\r\n case \"const\": return Token.CONST;\r\n case \"constructor\": return Token.CONSTRUCTOR;\r\n }\r\n break;\r\n }\r\n case CharCode.d: {\r\n switch (text) {\r\n case \"debugger\": return Token.DEBUGGER;\r\n case \"declare\": return Token.DECLARE;\r\n case \"default\": return Token.DEFAULT;\r\n case \"delete\": return Token.DELETE;\r\n case \"do\": return Token.DO;\r\n }\r\n break;\r\n }\r\n case CharCode.e: {\r\n switch (text) {\r\n case \"else\": return Token.ELSE;\r\n case \"enum\": return Token.ENUM;\r\n case \"export\": return Token.EXPORT;\r\n case \"extends\": return Token.EXTENDS;\r\n }\r\n break;\r\n }\r\n case CharCode.f: {\r\n switch (text) {\r\n case \"false\": return Token.FALSE;\r\n case \"finally\": return Token.FINALLY;\r\n case \"for\": return Token.FOR;\r\n case \"from\": return Token.FROM;\r\n case \"function\": return Token.FUNCTION;\r\n }\r\n break;\r\n }\r\n case CharCode.g: {\r\n switch (text) {\r\n case \"get\": return Token.GET;\r\n }\r\n break;\r\n }\r\n case CharCode.i: {\r\n switch (text) {\r\n case \"if\": return Token.IF;\r\n case \"implements\": return Token.IMPLEMENTS;\r\n case \"import\": return Token.IMPORT;\r\n case \"in\": return Token.IN;\r\n case \"instanceof\": return Token.INSTANCEOF;\r\n case \"interface\": return Token.INTERFACE;\r\n case \"is\": return Token.IS;\r\n }\r\n break;\r\n }\r\n case CharCode.k: {\r\n switch (text) {\r\n case \"keyof\": return Token.KEYOF;\r\n }\r\n break;\r\n }\r\n case CharCode.l: {\r\n switch (text) {\r\n case \"let\": return Token.LET;\r\n }\r\n break;\r\n }\r\n case CharCode.m: {\r\n switch (text) {\r\n case \"module\": return Token.MODULE;\r\n }\r\n break;\r\n }\r\n case CharCode.n: {\r\n switch (text) {\r\n case \"namespace\": return Token.NAMESPACE;\r\n case \"new\": return Token.NEW;\r\n case \"null\": return Token.NULL;\r\n }\r\n break;\r\n }\r\n case CharCode.o: {\r\n switch (text) {\r\n case \"of\": return Token.OF;\r\n }\r\n break;\r\n }\r\n case CharCode.p: {\r\n switch (text) {\r\n case \"package\": return Token.PACKAGE;\r\n case \"private\": return Token.PRIVATE;\r\n case \"protected\": return Token.PROTECTED;\r\n case \"public\": return Token.PUBLIC;\r\n }\r\n break;\r\n }\r\n case CharCode.r: {\r\n switch (text) {\r\n case \"readonly\": return Token.READONLY;\r\n case \"return\": return Token.RETURN;\r\n }\r\n break;\r\n }\r\n case CharCode.s: {\r\n switch (text) {\r\n case \"set\": return Token.SET;\r\n case \"static\": return Token.STATIC;\r\n case \"super\": return Token.SUPER;\r\n case \"switch\": return Token.SWITCH;\r\n }\r\n break;\r\n }\r\n case CharCode.t: {\r\n switch (text) {\r\n case \"this\": return Token.THIS;\r\n case \"throw\": return Token.THROW;\r\n case \"true\": return Token.TRUE;\r\n case \"try\": return Token.TRY;\r\n case \"type\": return Token.TYPE;\r\n case \"typeof\": return Token.TYPEOF;\r\n }\r\n break;\r\n }\r\n case CharCode.v: {\r\n switch (text) {\r\n case \"var\": return Token.VAR;\r\n case \"void\": return Token.VOID;\r\n }\r\n break;\r\n }\r\n case CharCode.w: {\r\n switch (text) {\r\n case \"while\": return Token.WHILE;\r\n case \"with\": return Token.WITH;\r\n }\r\n break;\r\n }\r\n case CharCode.y: {\r\n switch (text) {\r\n case \"yield\": return Token.YIELD;\r\n }\r\n break;\r\n }\r\n }\r\n return Token.INVALID;\r\n}\r\n\r\nexport function tokenIsAlsoIdentifier(token: Token): bool {\r\n switch (token) {\r\n case Token.ABSTRACT:\r\n case Token.AS:\r\n case Token.CONSTRUCTOR:\r\n case Token.DECLARE:\r\n case Token.DELETE:\r\n case Token.FROM:\r\n case Token.FOR:\r\n case Token.GET:\r\n case Token.IS:\r\n case Token.KEYOF:\r\n case Token.MODULE:\r\n case Token.NAMESPACE:\r\n case Token.READONLY:\r\n case Token.SET:\r\n case Token.TYPE: return true;\r\n default: return false;\r\n }\r\n}\r\n\r\nexport function operatorTokenToString(token: Token): string {\r\n switch (token) {\r\n case Token.DELETE: return \"delete\";\r\n case Token.IN: return \"in\";\r\n case Token.INSTANCEOF: return \"instanceof\";\r\n case Token.NEW: return \"new\";\r\n case Token.TYPEOF: return \"typeof\";\r\n case Token.VOID: return \"void\";\r\n case Token.YIELD: return \"yield\";\r\n case Token.DOT_DOT_DOT: return \"...\";\r\n case Token.COMMA: return \",\";\r\n case Token.LESSTHAN: return \"<\";\r\n case Token.GREATERTHAN: return \">\";\r\n case Token.LESSTHAN_EQUALS: return \"<=\";\r\n case Token.GREATERTHAN_EQUALS: return \">=\";\r\n case Token.EQUALS_EQUALS: return \"==\";\r\n case Token.EXCLAMATION_EQUALS: return \"!=\";\r\n case Token.EQUALS_EQUALS_EQUALS: return \"===\";\r\n case Token.EXCLAMATION_EQUALS_EQUALS: return \"!==\";\r\n case Token.PLUS: return \"+\";\r\n case Token.MINUS: return \"-\";\r\n case Token.ASTERISK_ASTERISK: return \"**\";\r\n case Token.ASTERISK: return \"*\";\r\n case Token.SLASH: return \"/\";\r\n case Token.PERCENT: return \"%\";\r\n case Token.PLUS_PLUS: return \"++\";\r\n case Token.MINUS_MINUS: return \"--\";\r\n case Token.LESSTHAN_LESSTHAN: return \"<<\";\r\n case Token.GREATERTHAN_GREATERTHAN: return \">>\";\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: return \">>>\";\r\n case Token.AMPERSAND: return \"&\";\r\n case Token.BAR: return \"|\";\r\n case Token.CARET: return \"^\";\r\n case Token.EXCLAMATION: return \"!\";\r\n case Token.TILDE: return \"~\";\r\n case Token.AMPERSAND_AMPERSAND: return \"&&\";\r\n case Token.BAR_BAR: return \"||\";\r\n case Token.EQUALS: return \"=\";\r\n case Token.PLUS_EQUALS: return \"+=\";\r\n case Token.MINUS_EQUALS: return \"-=\";\r\n case Token.ASTERISK_EQUALS: return \"*=\";\r\n case Token.ASTERISK_ASTERISK_EQUALS: return \"**=\";\r\n case Token.SLASH_EQUALS: return \"/=\";\r\n case Token.PERCENT_EQUALS: return \"%=\";\r\n case Token.LESSTHAN_LESSTHAN_EQUALS: return \"<<=\";\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS: return \">>=\";\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS: return \">>>=\";\r\n case Token.AMPERSAND_EQUALS: return \"&=\";\r\n case Token.BAR_EQUALS: return \"|=\";\r\n case Token.CARET_EQUALS: return \"^=\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\nexport class Range {\r\n\r\n source: Source;\r\n start: i32;\r\n end: i32;\r\n\r\n // TODO: set these while tokenizing\r\n // line: i32;\r\n // column: i32;\r\n\r\n constructor(source: Source, start: i32, end: i32) {\r\n this.source = source;\r\n this.start = start;\r\n this.end = end;\r\n }\r\n\r\n static join(a: Range, b: Range): Range {\r\n if (a.source != b.source) throw new Error(\"source mismatch\");\r\n return new Range(a.source,\r\n a.start < b.start ? a.start : b.start,\r\n a.end > b.end ? a.end : b.end\r\n );\r\n }\r\n\r\n get atStart(): Range {\r\n return new Range(this.source, this.start, this.start);\r\n }\r\n get atEnd(): Range {\r\n return new Range(this.source, this.end, this.end);\r\n }\r\n\r\n get line(): i32 {\r\n var text = this.source.text;\r\n var line = 1;\r\n for (let pos = this.start; pos >= 0; --pos) {\r\n if (text.charCodeAt(pos) == CharCode.LINEFEED) line++;\r\n }\r\n return line;\r\n }\r\n\r\n get column(): i32 {\r\n var text = this.source.text;\r\n var column = 0;\r\n for (let pos = this.start - 1; pos >= 0; --pos) {\r\n if (text.charCodeAt(pos) == CharCode.LINEFEED) break;\r\n ++column;\r\n }\r\n return column;\r\n }\r\n\r\n toString(): string {\r\n return this.source.text.substring(this.start, this.end);\r\n }\r\n\r\n debugInfoRef: usize = 0;\r\n}\r\n\r\ndeclare function parseFloat(str: string): f64;\r\n\r\n/** Handler for intercepting comments while tokenizing. */\r\nexport type CommentHandler = (kind: CommentKind, text: string, range: Range) => void;\r\n\r\n/** Tokenizes a source to individual {@link Token}s. */\r\nexport class Tokenizer extends DiagnosticEmitter {\r\n\r\n source: Source;\r\n end: i32 = 0;\r\n\r\n pos: i32 = 0;\r\n token: Token = -1;\r\n tokenPos: i32 = 0;\r\n\r\n nextToken: Token = -1;\r\n nextTokenPos: i32 = 0;\r\n nextTokenOnNewLine: bool = false;\r\n\r\n onComment: CommentHandler | null = null;\r\n\r\n /** Constructs a new tokenizer. */\r\n constructor(source: Source, diagnostics: DiagnosticMessage[] | null = null) {\r\n super(diagnostics);\r\n this.source = source;\r\n this.pos = 0;\r\n this.end = source.text.length;\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n\r\n var text = source.text;\r\n\r\n // skip bom\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.BYTEORDERMARK\r\n ) {\r\n ++this.pos;\r\n }\r\n\r\n // skip shebang\r\n if (\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.HASH &&\r\n text.charCodeAt(this.pos + 1) == CharCode.EXCLAMATION\r\n ) {\r\n this.pos += 2;\r\n while (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) != CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n // 'next' now starts at lf or eof\r\n }\r\n }\r\n\r\n next(identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT): Token {\r\n this.nextToken = -1;\r\n return this.token = this.unsafeNext(identifierHandling);\r\n }\r\n\r\n private unsafeNext(\r\n identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT,\r\n maxTokenLength: i32 = i32.MAX_VALUE\r\n ): Token {\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n this.tokenPos = this.pos;\r\n let c = text.charCodeAt(this.pos);\r\n switch (c) {\r\n case CharCode.CARRIAGERETURN: {\r\n if (!(\r\n ++this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.LINEFEED\r\n )) break;\r\n // otherwise fall-through\r\n }\r\n case CharCode.LINEFEED:\r\n case CharCode.TAB:\r\n case CharCode.VERTICALTAB:\r\n case CharCode.FORMFEED:\r\n case CharCode.SPACE: {\r\n ++this.pos;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.EXCLAMATION_EQUALS_EQUALS;\r\n }\r\n return Token.EXCLAMATION_EQUALS;\r\n }\r\n return Token.EXCLAMATION;\r\n }\r\n case CharCode.DOUBLEQUOTE:\r\n case CharCode.SINGLEQUOTE:\r\n case CharCode.BACKTICK: { // TODO\r\n return Token.STRINGLITERAL; // expects a call to readString\r\n }\r\n case CharCode.PERCENT: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.PERCENT_EQUALS;\r\n }\r\n return Token.PERCENT;\r\n }\r\n case CharCode.AMPERSAND: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.AMPERSAND) {\r\n ++this.pos;\r\n return Token.AMPERSAND_AMPERSAND;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.AMPERSAND_EQUALS;\r\n }\r\n }\r\n return Token.AMPERSAND;\r\n }\r\n case CharCode.OPENPAREN: {\r\n ++this.pos;\r\n return Token.OPENPAREN;\r\n }\r\n case CharCode.CLOSEPAREN: {\r\n ++this.pos;\r\n return Token.CLOSEPAREN;\r\n }\r\n case CharCode.ASTERISK: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.ASTERISK_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.ASTERISK_ASTERISK_EQUALS;\r\n }\r\n return Token.ASTERISK_ASTERISK;\r\n }\r\n }\r\n return Token.ASTERISK;\r\n }\r\n case CharCode.PLUS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.PLUS) {\r\n ++this.pos;\r\n return Token.PLUS_PLUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.PLUS_EQUALS;\r\n }\r\n }\r\n return Token.PLUS;\r\n }\r\n case CharCode.COMMA: {\r\n ++this.pos;\r\n return Token.COMMA;\r\n }\r\n case CharCode.MINUS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.MINUS) {\r\n ++this.pos;\r\n return Token.MINUS_MINUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.MINUS_EQUALS;\r\n }\r\n }\r\n return Token.MINUS;\r\n }\r\n case CharCode.DOT: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (isDecimalDigit(text.charCodeAt(this.pos))) {\r\n --this.pos;\r\n return Token.FLOATLITERAL; // expects a call to readFloat\r\n }\r\n if (\r\n maxTokenLength > 2 && this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.DOT &&\r\n text.charCodeAt(this.pos + 1) == CharCode.DOT\r\n ) {\r\n this.pos += 2;\r\n return Token.DOT_DOT_DOT;\r\n }\r\n }\r\n return Token.DOT;\r\n }\r\n case CharCode.SLASH: {\r\n let commentStartPos = this.pos;\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.SLASH) { // single-line\r\n let commentKind = CommentKind.LINE;\r\n if (\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n ) {\r\n ++this.pos;\r\n commentKind = CommentKind.TRIPLE;\r\n }\r\n while (++this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.LINEFEED) {\r\n ++this.pos;\r\n break;\r\n }\r\n }\r\n if (this.onComment) {\r\n this.onComment(\r\n commentKind,\r\n text.substring(commentStartPos, this.pos),\r\n this.range(commentStartPos, this.pos)\r\n );\r\n }\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) { // multi-line\r\n let closed = false;\r\n while (++this.pos < this.end) {\r\n c = text.charCodeAt(this.pos);\r\n if (\r\n c == CharCode.ASTERISK &&\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n ) {\r\n this.pos += 2;\r\n closed = true;\r\n break;\r\n }\r\n }\r\n if (!closed) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n this.range(this.pos), \"*/\"\r\n );\r\n } else if (this.onComment) {\r\n this.onComment(\r\n CommentKind.BLOCK,\r\n text.substring(commentStartPos, this.pos),\r\n this.range(commentStartPos, this.pos)\r\n );\r\n }\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.SLASH_EQUALS;\r\n }\r\n }\r\n return Token.SLASH;\r\n }\r\n case CharCode._0:\r\n case CharCode._1:\r\n case CharCode._2:\r\n case CharCode._3:\r\n case CharCode._4:\r\n case CharCode._5:\r\n case CharCode._6:\r\n case CharCode._7:\r\n case CharCode._8:\r\n case CharCode._9: {\r\n return this.testInteger()\r\n ? Token.INTEGERLITERAL // expects a call to readInteger\r\n : Token.FLOATLITERAL; // expects a call to readFloat\r\n }\r\n case CharCode.COLON: {\r\n ++this.pos;\r\n return Token.COLON;\r\n }\r\n case CharCode.SEMICOLON: {\r\n ++this.pos;\r\n return Token.SEMICOLON;\r\n }\r\n case CharCode.LESSTHAN: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.LESSTHAN) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 &&\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.LESSTHAN_LESSTHAN_EQUALS;\r\n }\r\n return Token.LESSTHAN_LESSTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.LESSTHAN_EQUALS;\r\n }\r\n }\r\n return Token.LESSTHAN;\r\n }\r\n case CharCode.EQUALS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 &&\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.EQUALS_EQUALS_EQUALS;\r\n }\r\n return Token.EQUALS_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n return Token.EQUALS_GREATERTHAN;\r\n }\r\n }\r\n return Token.EQUALS;\r\n }\r\n case CharCode.GREATERTHAN: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n if (maxTokenLength > 2 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 3 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS;\r\n }\r\n return Token.GREATERTHAN_GREATERTHAN_GREATERTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_GREATERTHAN_EQUALS;\r\n }\r\n }\r\n return Token.GREATERTHAN_GREATERTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_EQUALS;\r\n }\r\n }\r\n return Token.GREATERTHAN;\r\n }\r\n case CharCode.QUESTION: {\r\n ++this.pos;\r\n return Token.QUESTION;\r\n }\r\n case CharCode.OPENBRACKET: {\r\n ++this.pos;\r\n return Token.OPENBRACKET;\r\n }\r\n case CharCode.CLOSEBRACKET: {\r\n ++this.pos;\r\n return Token.CLOSEBRACKET;\r\n }\r\n case CharCode.CARET: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.CARET_EQUALS;\r\n }\r\n return Token.CARET;\r\n }\r\n case CharCode.OPENBRACE: {\r\n ++this.pos;\r\n return Token.OPENBRACE;\r\n }\r\n case CharCode.BAR: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.BAR) {\r\n ++this.pos;\r\n return Token.BAR_BAR;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.BAR_EQUALS;\r\n }\r\n }\r\n return Token.BAR;\r\n }\r\n case CharCode.CLOSEBRACE: {\r\n ++this.pos;\r\n return Token.CLOSEBRACE;\r\n }\r\n case CharCode.TILDE: {\r\n ++this.pos;\r\n return Token.TILDE;\r\n }\r\n case CharCode.AT: {\r\n ++this.pos;\r\n return Token.AT;\r\n }\r\n default: {\r\n if (isIdentifierStart(c)) {\r\n if (isKeywordCharacter(c)) {\r\n let posBefore = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(c = text.charCodeAt(this.pos))\r\n ) {\r\n if (!isKeywordCharacter(c)) {\r\n this.pos = posBefore;\r\n return Token.IDENTIFIER;\r\n }\r\n }\r\n let keywordText = text.substring(posBefore, this.pos);\r\n let keywordToken = tokenFromKeyword(keywordText);\r\n if (\r\n keywordToken != Token.INVALID &&\r\n identifierHandling !== IdentifierHandling.ALWAYS &&\r\n !(\r\n identifierHandling === IdentifierHandling.PREFER &&\r\n tokenIsAlsoIdentifier(keywordToken)\r\n )\r\n ) {\r\n return keywordToken;\r\n }\r\n this.pos = posBefore;\r\n }\r\n return Token.IDENTIFIER; // expects a call to readIdentifier\r\n } else if (isWhiteSpace(c)) {\r\n ++this.pos;\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Invalid_character,\r\n this.range(this.pos, this.pos + 1)\r\n );\r\n ++this.pos;\r\n return Token.INVALID;\r\n }\r\n }\r\n }\r\n return Token.ENDOFFILE;\r\n }\r\n\r\n peek(\r\n checkOnNewLine: bool = false,\r\n identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT,\r\n maxCompoundLength: i32 = i32.MAX_VALUE\r\n ): Token {\r\n var text = this.source.text;\r\n if (this.nextToken < 0) {\r\n let posBefore = this.pos;\r\n let tokenBefore = this.token;\r\n let tokenPosBefore = this.tokenPos;\r\n this.nextToken = this.unsafeNext(identifierHandling, maxCompoundLength);\r\n this.nextTokenPos = this.tokenPos;\r\n if (checkOnNewLine) {\r\n this.nextTokenOnNewLine = false;\r\n for (let pos = posBefore, end = this.nextTokenPos; pos < end; ++pos) {\r\n if (isLineBreak(text.charCodeAt(pos))) {\r\n this.nextTokenOnNewLine = true;\r\n break;\r\n }\r\n }\r\n }\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n }\r\n return this.nextToken;\r\n }\r\n\r\n skipIdentifier(): bool {\r\n return this.skip(Token.IDENTIFIER, IdentifierHandling.PREFER);\r\n }\r\n\r\n skipIdentifierName(): bool {\r\n return this.skip(Token.IDENTIFIER, IdentifierHandling.ALWAYS);\r\n }\r\n\r\n skip(token: Token, identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT): bool {\r\n var posBefore = this.pos;\r\n var tokenBefore = this.token;\r\n var tokenPosBefore = this.tokenPos;\r\n var maxCompoundLength = i32.MAX_VALUE;\r\n switch (token) {\r\n case Token.GREATERTHAN: { // where parsing type arguments\r\n maxCompoundLength = 1;\r\n break;\r\n }\r\n }\r\n this.token = this.unsafeNext(identifierHandling, maxCompoundLength);\r\n if (this.token == token) {\r\n this.nextToken = -1;\r\n return true;\r\n } else {\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n return false;\r\n }\r\n }\r\n\r\n mark(): State {\r\n var state: State;\r\n if (reusableState) {\r\n state = reusableState;\r\n reusableState = null;\r\n } else {\r\n state = new State();\r\n }\r\n state.pos = this.pos;\r\n state.token = this.token;\r\n state.tokenPos = this.tokenPos;\r\n return state;\r\n }\r\n\r\n discard(state: State): void {\r\n reusableState = state;\r\n }\r\n\r\n reset(state: State): void {\r\n this.pos = state.pos;\r\n this.token = state.token;\r\n this.tokenPos = state.tokenPos;\r\n this.nextToken = -1;\r\n }\r\n\r\n range(start: i32 = -1, end: i32 = -1): Range {\r\n if (start < 0) {\r\n start = this.tokenPos;\r\n end = this.pos;\r\n } else if (end < 0) {\r\n end = start;\r\n }\r\n return new Range(this.source, start, end);\r\n }\r\n\r\n readIdentifier(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(text.charCodeAt(this.pos))\r\n );\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readString(): string {\r\n var text = this.source.text;\r\n var quote = text.charCodeAt(this.pos++);\r\n var start = this.pos;\r\n var result = \"\";\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.end)\r\n );\r\n break;\r\n }\r\n let c = text.charCodeAt(this.pos);\r\n if (c == quote) {\r\n result += text.substring(start, this.pos++);\r\n break;\r\n }\r\n if (c == CharCode.BACKSLASH) {\r\n result += text.substring(start, this.pos);\r\n result += this.readEscapeSequence();\r\n start = this.pos;\r\n continue;\r\n }\r\n if (isLineBreak(c)) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n return result;\r\n }\r\n\r\n readEscapeSequence(): string {\r\n if (++this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.end)\r\n );\r\n return \"\";\r\n }\r\n\r\n var text = this.source.text;\r\n var c = text.charCodeAt(this.pos++);\r\n switch (c) {\r\n case CharCode._0: return \"\\0\";\r\n case CharCode.b: return \"\\b\";\r\n case CharCode.t: return \"\\t\";\r\n case CharCode.n: return \"\\n\";\r\n case CharCode.v: return \"\\v\";\r\n case CharCode.f: return \"\\f\";\r\n case CharCode.r: return \"\\r\";\r\n case CharCode.SINGLEQUOTE: return \"'\";\r\n case CharCode.DOUBLEQUOTE: return \"\\\"\";\r\n case CharCode.u: {\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.OPENBRACE\r\n ) {\r\n ++this.pos;\r\n return this.readExtendedUnicodeEscape(); // \\u{DDDDDDDD}\r\n }\r\n return this.readUnicodeEscape(); // \\uDDDD\r\n }\r\n case CharCode.CARRIAGERETURN: {\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n // fall through\r\n }\r\n case CharCode.LINEFEED:\r\n case CharCode.LINESEPARATOR:\r\n case CharCode.PARAGRAPHSEPARATOR: return \"\";\r\n default: return String.fromCharCode(c);\r\n }\r\n }\r\n\r\n readRegexpPattern(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var escaped = false;\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.end)\r\n );\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.BACKSLASH) {\r\n ++this.pos;\r\n escaped = true;\r\n continue;\r\n }\r\n let c = text.charCodeAt(this.pos);\r\n if (c == CharCode.SLASH && !escaped) break;\r\n if (isLineBreak(c)) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n escaped = false;\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readRegexpFlags(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var flags = 0;\r\n while (this.pos < this.end) {\r\n let c: i32 = text.charCodeAt(this.pos);\r\n if (!isIdentifierPart(c)) break;\r\n ++this.pos;\r\n\r\n // make sure each supported flag is unique\r\n switch (c) {\r\n case CharCode.g: {\r\n flags |= flags & 1 ? -1 : 1;\r\n break;\r\n }\r\n case CharCode.i: {\r\n flags |= flags & 2 ? -1 : 2;\r\n break;\r\n }\r\n case CharCode.m: {\r\n flags |= flags & 4 ? -1 : 4;\r\n break;\r\n }\r\n default: {\r\n flags = -1;\r\n break;\r\n }\r\n }\r\n }\r\n if (flags == -1) {\r\n this.error(\r\n DiagnosticCode.Invalid_regular_expression_flags,\r\n this.range(start, this.pos)\r\n );\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n testInteger(): bool {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 1 < this.end) {\r\n switch (text.charCodeAt(this.pos + 2)) {\r\n case CharCode.X:\r\n case CharCode.x:\r\n case CharCode.B:\r\n case CharCode.b:\r\n case CharCode.O:\r\n case CharCode.o: return true;\r\n }\r\n }\r\n var pos = this.pos;\r\n while (pos < this.end) {\r\n let c = text.charCodeAt(pos);\r\n if (c == CharCode.DOT || c == CharCode.E || c == CharCode.e) {\r\n return false;\r\n }\r\n if ((c < CharCode._0 || c > CharCode._9) && c != CharCode._) break;\r\n // does not validate separator placement (this is done in readXYInteger)\r\n pos++;\r\n }\r\n return true;\r\n }\r\n\r\n readInteger(): I64 {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 2 < this.end) {\r\n switch (text.charCodeAt(this.pos + 1)) {\r\n case CharCode.X:\r\n case CharCode.x: {\r\n this.pos += 2;\r\n return this.readHexInteger();\r\n }\r\n case CharCode.B:\r\n case CharCode.b: {\r\n this.pos += 2;\r\n return this.readBinaryInteger();\r\n }\r\n case CharCode.O:\r\n case CharCode.o: {\r\n this.pos += 2;\r\n return this.readOctalInteger();\r\n }\r\n }\r\n if (isOctalDigit(text.charCodeAt(this.pos + 1))) {\r\n let start = this.pos;\r\n ++this.pos;\r\n let value = this.readOctalInteger();\r\n this.error(\r\n DiagnosticCode.Octal_literals_are_not_allowed_in_strict_mode,\r\n this.range(start, this.pos)\r\n );\r\n return value;\r\n }\r\n }\r\n return this.readDecimalInteger();\r\n }\r\n\r\n readHexInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_16 = i64_new(16, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 16 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n // value = value * 16 + 10 + c - CharCode.A;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.A, 0)\r\n );\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n // value = value * 16 + 10 + c - CharCode.a;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.a, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readDecimalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_10 = i64_new(10, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 10 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_10),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readOctalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_8 = i64_new(8, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._7) {\r\n // value = value * 8 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_8),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Octal_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readBinaryInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_2 = i64_new(2, 0);\r\n var i64_1 = i64_new(1, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c == CharCode._0) {\r\n // value = value * 2;\r\n value = i64_mul(\r\n value,\r\n i64_2\r\n );\r\n } else if (c == CharCode._1) {\r\n // value = value * 2 + 1;\r\n value = i64_add(\r\n i64_mul(value, i64_2),\r\n i64_1\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Binary_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readFloat(): f64 {\r\n // var text = this.source.text;\r\n // if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 2 < this.end) {\r\n // switch (text.charCodeAt(this.pos + 1)) {\r\n // case CharCode.X:\r\n // case CharCode.x: {\r\n // this.pos += 2;\r\n // return this.readHexFloat();\r\n // }\r\n // }\r\n // }\r\n return this.readDecimalFloat();\r\n }\r\n\r\n readDecimalFloat(): f64 {\r\n // TODO: numeric separators (parseFloat can't handle these)\r\n var start = this.pos;\r\n var text = this.source.text;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n if (this.pos < this.end && text.charCodeAt(this.pos) == CharCode.DOT) {\r\n ++this.pos;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n if (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos);\r\n if (c == CharCode.E || c == CharCode.e) {\r\n if (\r\n ++this.pos < this.end && (\r\n text.charCodeAt(this.pos) == CharCode.MINUS ||\r\n text.charCodeAt(this.pos) == CharCode.PLUS\r\n ) &&\r\n isDecimalDigit(text.charCodeAt(this.pos + 1))\r\n ) {\r\n ++this.pos;\r\n }\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n }\r\n return parseFloat(text.substring(start, this.pos));\r\n }\r\n\r\n readHexFloat(): f64 {\r\n throw new Error(\"not implemented\"); // TBD\r\n }\r\n\r\n readUnicodeEscape(): string {\r\n var remain = 4;\r\n var value = 0;\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos++);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n value = value * 16 + c - CharCode._0;\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n value = value * 16 + 10 + c - CharCode.A;\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n value = value * 16 + 10 + c - CharCode.a;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(this.pos - 1, this.pos)\r\n );\r\n return \"\";\r\n }\r\n if (--remain == 0) break;\r\n }\r\n if (remain) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.pos)\r\n );\r\n return \"\";\r\n }\r\n return String.fromCharCode(value);\r\n }\r\n\r\n private readExtendedUnicodeEscape(): string {\r\n var start = this.pos;\r\n var value = this.readHexInteger();\r\n var value32 = i64_low(value);\r\n var invalid = false;\r\n\r\n assert(!i64_high(value));\r\n if (value32 > 0x10FFFF) {\r\n this.error(\r\n DiagnosticCode.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n var text = this.source.text;\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(start, this.end)\r\n );\r\n invalid = true;\r\n } else if (text.charCodeAt(this.pos) == CharCode.CLOSEBRACE) {\r\n ++this.pos;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Unterminated_Unicode_escape_sequence,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n if (invalid) return \"\";\r\n return value32 < 65536\r\n ? String.fromCharCode(value32)\r\n : String.fromCharCode(\r\n (((value32 - 65536) / 1024 | 0) + 0xD800) as i32,\r\n ( (value32 - 65536) % 1024 + 0xDC00) as i32\r\n );\r\n }\r\n\r\n finish(): void {\r\n }\r\n}\r\n\r\n/** Tokenizer state as returned by {@link Tokenizer#mark} and consumed by {@link Tokenizer#reset}. */\r\nexport class State {\r\n /** Current position. */\r\n pos: i32;\r\n /** Current token. */\r\n token: Token;\r\n /** Current token's position. */\r\n tokenPos: i32;\r\n}\r\n\r\n// Reusable state object to reduce allocations\r\nvar reusableState: State | null = null;\r\n","/**\r\n * 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: FunctionRef[] = [];\r\n /** Argument count helper global. */\r\n argcVar: GlobalRef = 0;\r\n /** Argument count helper setter. */\r\n argcSet: FunctionRef = 0;\r\n /** Indicates whether the iterateRoots function must be generated. */\r\n needsIterateRoots: bool = false;\r\n\r\n /** Compiles a {@link Program} to a {@link Module} using the specified options. */\r\n static compile(program: Program, options: Options | null = null): Module {\r\n return new Compiler(program, options).compile();\r\n }\r\n\r\n /** Constructs a new compiler for a {@link Program} using the specified options. */\r\n constructor(program: Program, options: Options | null = null) {\r\n super(program.diagnostics);\r\n this.program = program;\r\n this.resolver = program.resolver;\r\n if (!options) options = new Options();\r\n this.options = options;\r\n this.memoryOffset = i64_new(\r\n // leave space for `null`. also functions as a sentinel for erroneous stores at offset 0.\r\n // note that Binaryen's asm.js output utilizes the first 8 bytes for reinterpretations (#1547)\r\n max(options.memoryBase, 8)\r\n );\r\n this.module = Module.create();\r\n }\r\n\r\n /** Performs compilation of the underlying {@link Program} to a {@link Module}. */\r\n compile(): Module {\r\n var options = this.options;\r\n var module = this.module;\r\n var program = this.program;\r\n\r\n // initialize lookup maps, built-ins, imports, exports, etc.\r\n program.initialize(options);\r\n\r\n // set up the start function\r\n var startFunctionInstance = new Function(program.startFunction, \"start\", new Signature([], Type.void));\r\n this.startFunctionInstance = startFunctionInstance;\r\n var startFunctionBody = new Array();\r\n this.startFunctionBody = startFunctionBody;\r\n this.currentFunction = startFunctionInstance;\r\n\r\n // compile entry file(s) while traversing reachable elements\r\n var sources = program.sources;\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n if (sources[i].isEntry) this.compileSource(sources[i]);\r\n }\r\n\r\n // compile the start function if not empty or called by main\r\n if (startFunctionBody.length || program.mainFunction !== null) {\r\n let signature = startFunctionInstance.signature;\r\n let funcRef = module.addFunction(\r\n startFunctionInstance.internalName,\r\n this.ensureFunctionType(\r\n signature.parameterTypes,\r\n signature.returnType,\r\n signature.thisType\r\n ),\r\n typesToNativeTypes(startFunctionInstance.additionalLocals),\r\n module.createBlock(null, startFunctionBody)\r\n );\r\n startFunctionInstance.finalize(module, funcRef);\r\n if (!program.mainFunction) module.setStart(funcRef);\r\n }\r\n\r\n // set up static memory segments and the heap base pointer\r\n var memoryOffset = this.memoryOffset;\r\n memoryOffset = i64_align(memoryOffset, options.usizeType.byteSize);\r\n this.memoryOffset = memoryOffset;\r\n if (options.isWasm64) {\r\n module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I64,\r\n false,\r\n module.createI64(i64_low(memoryOffset), i64_high(memoryOffset))\r\n );\r\n } else {\r\n module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I32,\r\n false,\r\n module.createI32(i64_low(memoryOffset))\r\n );\r\n }\r\n\r\n // determine initial page size\r\n var numPages = this.memorySegments.length\r\n ? i64_low(i64_shr_u(i64_align(memoryOffset, 0x10000), i64_new(16, 0)))\r\n : 0;\r\n module.setMemory(\r\n numPages,\r\n this.options.isWasm64\r\n ? Module.MAX_MEMORY_WASM64\r\n : Module.MAX_MEMORY_WASM32,\r\n this.memorySegments,\r\n options.target,\r\n \"memory\"\r\n );\r\n\r\n // import memory if requested (default memory is named '0' by Binaryen)\r\n if (options.importMemory) module.addMemoryImport(\"0\", \"env\", \"memory\");\r\n\r\n // set up function table\r\n var functionTable = this.functionTable;\r\n var functionTableSize = functionTable.length;\r\n var functionTableExported = false;\r\n if (functionTableSize) {\r\n module.setFunctionTable(functionTable);\r\n module.addTableExport(\"0\", \"table\");\r\n functionTableExported = true;\r\n }\r\n\r\n // import table if requested (default table is named '0' by Binaryen)\r\n if (options.importTable) {\r\n module.addTableImport(\"0\", \"env\", \"table\");\r\n if (!functionTableExported) module.addTableExport(\"0\", \"table\");\r\n }\r\n\r\n // set up module exports\r\n for (let [name, moduleExport] of program.moduleLevelExports) {\r\n this.makeModuleExport(name, moduleExport.element);\r\n }\r\n\r\n // set up gc\r\n if (this.needsIterateRoots) compileIterateRoots(this);\r\n\r\n return module;\r\n }\r\n\r\n /** Applies the respective module export(s) for the specified element. */\r\n private makeModuleExport(name: string, element: Element, prefix: string = \"\"): void {\r\n\r\n // traverse members\r\n var members = element.members;\r\n if (members) {\r\n let subPrefix = prefix + name + (element.kind == ElementKind.CLASS\r\n ? INSTANCE_DELIMITER\r\n : STATIC_DELIMITER\r\n );\r\n if (element.kind == ElementKind.NAMESPACE) {\r\n for (let member of members.values()) {\r\n if (!member.is(CommonFlags.EXPORT)) continue;\r\n this.makeModuleExport(member.simpleName, member, subPrefix);\r\n }\r\n } else {\r\n for (let member of members.values()) {\r\n if (member.is(CommonFlags.PRIVATE)) continue;\r\n this.makeModuleExport(member.simpleName, member, subPrefix);\r\n }\r\n }\r\n }\r\n\r\n switch (element.kind) {\r\n\r\n // export global\r\n case ElementKind.GLOBAL: {\r\n let isConst = element.is(CommonFlags.CONST) || element.is(CommonFlags.STATIC | CommonFlags.READONLY);\r\n if (!isConst && !this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n let declaration = (element).declaration;\r\n if (declaration) {\r\n this.error(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n this.module.addGlobalExport(element.internalName, prefix + name);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUMVALUE: {\r\n if (!assert(element.parent).is(CommonFlags.CONST) && !this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n let declaration = (element).declaration;\r\n if (declaration) {\r\n this.error(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n this.module.addGlobalExport(element.internalName, prefix + name);\r\n }\r\n break;\r\n }\r\n\r\n // export function\r\n case ElementKind.FUNCTION: {\r\n let instance = element;\r\n let signature = instance.signature;\r\n if (signature.requiredParameters < signature.parameterTypes.length) {\r\n // utilize trampoline to fill in omitted arguments\r\n instance = this.ensureTrampoline(instance);\r\n this.ensureArgcSet();\r\n }\r\n if (instance.is(CommonFlags.COMPILED)) this.module.addFunctionExport(instance.internalName, prefix + name);\r\n break;\r\n }\r\n\r\n // export getter and setter\r\n case ElementKind.PROPERTY: {\r\n let getter = assert((element).getterPrototype);\r\n this.makeModuleExport(GETTER_PREFIX + name, getter, prefix);\r\n let setter = (element).setterPrototype;\r\n if (setter) this.makeModuleExport(SETTER_PREFIX + name, setter, prefix);\r\n break;\r\n }\r\n\r\n // export a getter and a setter\r\n case ElementKind.FIELD: {\r\n let module = this.module;\r\n let type = (element).type;\r\n let nativeType = type.toNativeType();\r\n let offset = (element).memoryOffset;\r\n let usizeType = this.options.usizeType;\r\n let nativeSizeType = this.options.nativeSizeType;\r\n\r\n // make a getter\r\n let getterName = prefix + GETTER_PREFIX + name;\r\n module.addFunction(\r\n getterName,\r\n this.ensureFunctionType(null, type, usizeType),\r\n null,\r\n module.createLoad(\r\n type.byteSize,\r\n type.is(TypeFlags.SIGNED),\r\n module.createGetLocal(0, nativeSizeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(getterName, getterName);\r\n\r\n // make a setter\r\n if (!element.is(CommonFlags.READONLY)) {\r\n let setterName = prefix + SETTER_PREFIX + name;\r\n module.addFunction(\r\n setterName,\r\n this.ensureFunctionType([ type ], Type.void, usizeType),\r\n null,\r\n module.createStore(\r\n type.byteSize,\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createGetLocal(1, nativeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(setterName, setterName);\r\n }\r\n break;\r\n }\r\n\r\n // skip prototype and export instances\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n for (let instance of (element).instances.values()) {\r\n let instanceName = name;\r\n if (instance.is(CommonFlags.GENERIC)) {\r\n let fullName = instance.internalName;\r\n instanceName += fullName.substring(fullName.lastIndexOf(\"<\"));\r\n }\r\n this.makeModuleExport(instanceName, instance, prefix);\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n for (let instance of (element).instances.values()) {\r\n let instanceName = name;\r\n if (instance.is(CommonFlags.GENERIC)) {\r\n let fullName = instance.internalName;\r\n instanceName += fullName.substring(fullName.lastIndexOf(\"<\"));\r\n }\r\n let ctor = instance.constructorInstance;\r\n if (ctor) this.makeModuleExport(instanceName + INSTANCE_DELIMITER + ctor.simpleName, ctor, prefix);\r\n this.makeModuleExport(instanceName, instance, prefix);\r\n }\r\n break;\r\n }\r\n\r\n // all possible members already handled above\r\n case ElementKind.ENUM:\r\n case ElementKind.CLASS:\r\n case ElementKind.NAMESPACE: break;\r\n\r\n default: assert(false);\r\n }\r\n }\r\n\r\n // sources\r\n\r\n /** Compiles a source by looking it up by path first. */\r\n compileSourceByPath(normalizedPathWithoutExtension: string, reportNode: Node): void {\r\n var source = this.program.lookupSourceByPath(normalizedPathWithoutExtension);\r\n if (source) this.compileSource(source);\r\n else {\r\n this.error(\r\n DiagnosticCode.File_0_not_found,\r\n reportNode.range, normalizedPathWithoutExtension\r\n );\r\n }\r\n }\r\n\r\n /** Compiles a source. */\r\n compileSource(source: Source): void {\r\n if (source.is(CommonFlags.COMPILED)) return;\r\n source.set(CommonFlags.COMPILED);\r\n\r\n // compile top-level statements\r\n var noTreeShaking = this.options.noTreeShaking;\r\n var isEntry = source.isEntry;\r\n var startFunctionInstance = this.startFunctionInstance;\r\n var startFunctionBody = this.startFunctionBody;\r\n var statements = source.statements;\r\n for (let i = 0, k = statements.length; i < k; ++i) {\r\n let statement = statements[i];\r\n switch (statement.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) &&\r\n !(statement).isGeneric\r\n ) {\r\n this.compileClassDeclaration(statement, [], null);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: break;\r\n case NodeKind.ENUMDECLARATION: {\r\n if (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) {\r\n this.compileEnumDeclaration(statement);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n if (\r\n (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) &&\r\n !(statement).isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(statement, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.IMPORT: {\r\n this.compileSourceByPath(\r\n (statement).normalizedPath,\r\n (statement).path\r\n );\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n if (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) {\r\n this.compileNamespaceDeclaration(statement);\r\n }\r\n break;\r\n }\r\n case NodeKind.VARIABLE: { // global, always compiled as initializers might have side effects\r\n let variableInit = this.compileVariableStatement(statement);\r\n if (variableInit) startFunctionBody.push(variableInit);\r\n break;\r\n }\r\n case NodeKind.EXPORT: {\r\n if ((statement).normalizedPath != null) {\r\n this.compileSourceByPath(\r\n (statement).normalizedPath,\r\n (statement).path\r\n );\r\n }\r\n if (noTreeShaking || isEntry) {\r\n this.compileExportStatement(statement);\r\n }\r\n break;\r\n }\r\n default: { // otherwise a top-level statement that is part of the start function's body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = startFunctionInstance;\r\n startFunctionBody.push(this.compileStatement(statement));\r\n this.currentFunction = previousFunction;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // globals\r\n\r\n compileGlobalDeclaration(declaration: VariableDeclaration): Global | null {\r\n // look up the initialized program element\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.GLOBAL);\r\n if (!this.compileGlobal(element)) return null; // reports\r\n return element;\r\n }\r\n\r\n compileGlobal(global: Global): bool {\r\n if (global.is(CommonFlags.COMPILED)) return true;\r\n global.set(CommonFlags.COMPILED);\r\n\r\n var module = this.module;\r\n var declaration = global.declaration;\r\n var initExpr: ExpressionRef = 0;\r\n\r\n if (global.type == Type.void) { // type is void if not yet resolved or not annotated\r\n if (declaration) {\r\n\r\n // resolve now if annotated\r\n if (declaration.type) {\r\n let resolvedType = this.resolver.resolveType(declaration.type); // reports\r\n if (!resolvedType) return false;\r\n if (resolvedType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.type.range\r\n );\r\n return false;\r\n }\r\n global.type = resolvedType;\r\n\r\n // infer from initializer if not annotated\r\n } else if (declaration.initializer) { // infer type using void/NONE for literal inference\r\n initExpr = this.compileExpressionRetainType( // reports\r\n declaration.initializer,\r\n Type.void,\r\n WrapMode.WRAP\r\n );\r\n if (this.currentType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.initializer.range, this.currentType.toString(), \"\"\r\n );\r\n return false;\r\n }\r\n global.type = this.currentType;\r\n\r\n // must either be annotated or have an initializer\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.name.range.atEnd\r\n );\r\n return false;\r\n }\r\n } else {\r\n assert(false); // must have a declaration if 'void' (and thus resolved later on)\r\n }\r\n }\r\n\r\n // ambient builtins like 'HEAP_BASE' need to be resolved but are added explicitly\r\n if (global.is(CommonFlags.AMBIENT) && global.hasDecorator(DecoratorFlags.BUILTIN)) return true;\r\n\r\n var nativeType = global.type.toNativeType();\r\n var isDeclaredConstant = global.is(CommonFlags.CONST) || global.is(CommonFlags.STATIC | CommonFlags.READONLY);\r\n\r\n // handle imports\r\n if (global.is(CommonFlags.AMBIENT)) {\r\n\r\n // constant global\r\n if (isDeclaredConstant || this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n global.set(CommonFlags.MODULE_IMPORT);\r\n if (declaration) {\r\n mangleImportName(global, declaration, global.parent);\r\n } else {\r\n mangleImportName_moduleName = \"env\";\r\n mangleImportName_elementName = global.simpleName;\r\n }\r\n module.addGlobalImport(\r\n global.internalName,\r\n mangleImportName_moduleName,\r\n mangleImportName_elementName,\r\n nativeType\r\n );\r\n global.set(CommonFlags.COMPILED);\r\n return true;\r\n\r\n // importing mutable globals is not supported in the MVP\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n assert(declaration).range\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n // the MVP does not yet support initializer expressions other than constant values (and constant\r\n // get_globals), hence such initializations must be performed in the start function for now.\r\n var initializeInStart = false;\r\n\r\n // evaluate initializer if present\r\n if (declaration !== null && declaration.initializer !== null) {\r\n if (!initExpr) {\r\n initExpr = this.compileExpression(\r\n declaration.initializer,\r\n global.type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n );\r\n }\r\n\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (isDeclaredConstant) {\r\n initExpr = module.precomputeExpression(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n declaration.range\r\n );\r\n initializeInStart = true;\r\n }\r\n } else {\r\n initializeInStart = true;\r\n }\r\n }\r\n\r\n // explicitly inline if annotated\r\n if (global.hasDecorator(DecoratorFlags.INLINE)) {\r\n if (!initializeInStart) { // reported above\r\n assert(getExpressionId(initExpr) == ExpressionId.Const);\r\n let exprType = getExpressionType(initExpr);\r\n switch (exprType) {\r\n case NativeType.I32: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(getConstValueI32(initExpr), 0);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(\r\n getConstValueI64Low(initExpr),\r\n getConstValueI64High(initExpr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF32(initExpr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF64(initExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return false;\r\n }\r\n }\r\n global.set(CommonFlags.INLINED); // inline the value from now on\r\n }\r\n }\r\n\r\n // initialize to zero if there's no initializer\r\n } else {\r\n initExpr = global.type.toNativeZero(module);\r\n }\r\n\r\n var internalName = global.internalName;\r\n\r\n if (initializeInStart) { // initialize to mutable zero and set the actual value in start\r\n module.addGlobal(internalName, nativeType, true, global.type.toNativeZero(module));\r\n this.startFunctionBody.push(module.createSetGlobal(internalName, initExpr));\r\n\r\n } else { // compile normally\r\n module.addGlobal(internalName, nativeType, !isDeclaredConstant, initExpr);\r\n }\r\n return true;\r\n }\r\n\r\n // enums\r\n\r\n compileEnumDeclaration(declaration: EnumDeclaration): Enum | null {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(element)) return null;\r\n return element;\r\n }\r\n\r\n compileEnum(element: Enum): bool {\r\n if (element.is(CommonFlags.COMPILED)) return true;\r\n element.set(CommonFlags.COMPILED);\r\n\r\n var module = this.module;\r\n this.currentEnum = element;\r\n var previousValue: EnumValue | null = null;\r\n var previousValueIsMut = false;\r\n\r\n if (element.members) {\r\n for (let member of element.members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) continue; // happens if an enum is also a namespace\r\n let initInStart = false;\r\n let val = member;\r\n let valueDeclaration = val.declaration;\r\n val.set(CommonFlags.COMPILED);\r\n let initExpr: ExpressionRef;\r\n if (valueDeclaration.value) {\r\n initExpr = this.compileExpression(\r\n valueDeclaration.value,\r\n Type.i32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (element.is(CommonFlags.CONST)) {\r\n initExpr = module.precomputeExpression(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n this.error(\r\n DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,\r\n valueDeclaration.value.range\r\n );\r\n initInStart = true;\r\n }\r\n } else {\r\n initInStart = true;\r\n }\r\n }\r\n } else if (previousValue == null) {\r\n initExpr = module.createI32(0);\r\n } else {\r\n if (previousValueIsMut) {\r\n this.error(\r\n DiagnosticCode.Enum_member_must_have_initializer,\r\n valueDeclaration.range\r\n );\r\n }\r\n initExpr = module.createBinary(BinaryOp.AddI32,\r\n module.createGetGlobal(previousValue.internalName, NativeType.I32),\r\n module.createI32(1)\r\n );\r\n initExpr = module.precomputeExpression(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (element.is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,\r\n valueDeclaration.range\r\n );\r\n }\r\n initInStart = true;\r\n }\r\n }\r\n if (initInStart) {\r\n module.addGlobal(val.internalName, NativeType.I32, true, module.createI32(0));\r\n this.startFunctionBody.push(module.createSetGlobal(val.internalName, initExpr));\r\n previousValueIsMut = true;\r\n } else {\r\n module.addGlobal(val.internalName, NativeType.I32, !element.is(CommonFlags.CONST), initExpr);\r\n previousValueIsMut = false;\r\n }\r\n previousValue = val;\r\n }\r\n }\r\n this.currentEnum = null;\r\n return true;\r\n }\r\n\r\n // functions\r\n\r\n /** Compiles a top-level function given its declaration. */\r\n compileFunctionDeclaration(\r\n declaration: FunctionDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null\r\n ): Function | null {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return this.compileFunctionUsingTypeArguments( // reports\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n null, // no outer scope (is top level)\r\n (element).declaration.name\r\n );\r\n }\r\n\r\n /** Resolves the specified type arguments prior to compiling the resulting function instance. */\r\n compileFunctionUsingTypeArguments(\r\n prototype: FunctionPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null,\r\n outerScope: Flow | null,\r\n reportNode: Node\r\n ): Function | null {\r\n var instance = this.resolver.resolveFunctionInclTypeArguments(\r\n prototype,\r\n typeArguments,\r\n contextualTypeArguments,\r\n reportNode\r\n );\r\n if (!instance) return null;\r\n instance.outerScope = outerScope;\r\n if (!this.compileFunction(instance)) return null; // reports\r\n return instance;\r\n }\r\n\r\n /** Either reuses or creates the function type matching the specified signature. */\r\n ensureFunctionType(\r\n parameterTypes: Type[] | null,\r\n returnType: Type,\r\n thisType: Type | null = null\r\n ): FunctionTypeRef {\r\n var numParameters = parameterTypes ? parameterTypes.length : 0;\r\n var paramTypes: NativeType[];\r\n var index = 0;\r\n if (thisType) {\r\n paramTypes = new Array(1 + numParameters);\r\n paramTypes[0] = thisType.toNativeType();\r\n index = 1;\r\n } else {\r\n paramTypes = new Array(numParameters);\r\n }\r\n if (parameterTypes) {\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n paramTypes[index] = parameterTypes[i].toNativeType();\r\n }\r\n }\r\n var resultType = returnType.toNativeType();\r\n var module = this.module;\r\n var typeRef = module.getFunctionTypeBySignature(resultType, paramTypes);\r\n if (!typeRef) {\r\n let name = Signature.makeSignatureString(parameterTypes, returnType, thisType);\r\n typeRef = module.addFunctionType(name, resultType, paramTypes);\r\n }\r\n return typeRef;\r\n }\r\n\r\n /** Compiles a readily resolved function instance. */\r\n compileFunction(instance: Function): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n assert(!(instance.is(CommonFlags.AMBIENT) && instance.hasDecorator(DecoratorFlags.BUILTIN)));\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n // check that modifiers are matching\r\n var declaration = instance.prototype.declaration;\r\n var body = declaration.body;\r\n if (body) {\r\n if (instance.is(CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n if (!instance.is(CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n declaration.name.range\r\n );\r\n }\r\n }\r\n\r\n var ref: FunctionRef;\r\n var signature = instance.signature;\r\n var typeRef = this.ensureFunctionType(signature.parameterTypes, signature.returnType, signature.thisType);\r\n var module = this.module;\r\n if (body) {\r\n let isConstructor = instance.is(CommonFlags.CONSTRUCTOR);\r\n let returnType = instance.signature.returnType;\r\n\r\n // compile body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = instance;\r\n let flow = instance.flow;\r\n let stmt: ExpressionRef;\r\n if (body.kind == NodeKind.EXPRESSION) { // () => expression\r\n assert(!instance.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.GET | CommonFlags.SET | CommonFlags.MAIN));\r\n assert(instance.is(CommonFlags.ARROW));\r\n stmt = this.compileExpression(\r\n (body).expression,\r\n returnType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n flow.set(FlowFlags.RETURNS);\r\n if (!flow.canOverflow(stmt, returnType)) flow.set(FlowFlags.RETURNS_WRAPPED);\r\n flow.finalize();\r\n } else {\r\n assert(body.kind == NodeKind.BLOCK);\r\n let stmts = this.compileStatements((body).statements);\r\n if (instance.is(CommonFlags.MAIN)) {\r\n module.addGlobal(\"~started\", NativeType.I32, true, module.createI32(0));\r\n stmts.unshift(\r\n module.createIf(\r\n module.createUnary(\r\n UnaryOp.EqzI32,\r\n module.createGetGlobal(\"~started\", NativeType.I32)\r\n ),\r\n module.createBlock(null, [\r\n module.createCall(\"start\", null, NativeType.None),\r\n module.createSetGlobal(\"~started\", module.createI32(1))\r\n ])\r\n )\r\n );\r\n }\r\n flow.finalize();\r\n if (isConstructor) {\r\n let nativeSizeType = this.options.nativeSizeType;\r\n assert(instance.is(CommonFlags.INSTANCE));\r\n\r\n // implicitly return `this` if the constructor doesn't always return on its own\r\n if (!flow.is(FlowFlags.RETURNS)) {\r\n\r\n // if all branches are guaranteed to allocate, skip the final conditional allocation\r\n if (flow.is(FlowFlags.ALLOCATES)) {\r\n stmts.push(module.createGetLocal(0, nativeSizeType));\r\n\r\n // if not all branches are guaranteed to allocate, also append a conditional allocation\r\n } else {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n stmts.push(module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, declaration.name)\r\n ));\r\n }\r\n }\r\n\r\n // make sure all branches return\r\n } else if (returnType != Type.void && !flow.is(FlowFlags.RETURNS)) {\r\n this.error(\r\n DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,\r\n declaration.signature.returnType.range\r\n );\r\n }\r\n stmt = !stmts.length\r\n ? module.createNop()\r\n : stmts.length == 1\r\n ? stmts[0]\r\n : module.createBlock(null, stmts, returnType.toNativeType());\r\n }\r\n this.currentFunction = previousFunction;\r\n\r\n // create the function\r\n ref = module.addFunction(\r\n instance.internalName,\r\n typeRef,\r\n typesToNativeTypes(instance.additionalLocals),\r\n stmt\r\n );\r\n\r\n // concrete functions cannot have an annotated external name\r\n if (instance.hasDecorator(DecoratorFlags.EXTERNAL)) {\r\n let decorator = assert(findDecorator(DecoratorKind.EXTERNAL, declaration.decorators));\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n decorator.range\r\n );\r\n }\r\n\r\n } else {\r\n instance.set(CommonFlags.MODULE_IMPORT);\r\n mangleImportName(instance, declaration, instance.prototype.parent); // TODO: check for duplicates\r\n\r\n // create the function import\r\n ref = module.addFunctionImport(\r\n instance.internalName,\r\n mangleImportName_moduleName,\r\n mangleImportName_elementName,\r\n typeRef\r\n );\r\n }\r\n\r\n instance.finalize(module, ref);\r\n return true;\r\n }\r\n\r\n // namespaces\r\n\r\n compileNamespaceDeclaration(declaration: NamespaceDeclaration): void {\r\n var members = declaration.members;\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n switch (member.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileClassDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileInterfaceDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileEnumDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileNamespaceDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n let variableInit = this.compileVariableStatement(member, true);\r\n if (variableInit) this.startFunctionBody.push(variableInit);\r\n }\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n }\r\n\r\n compileNamespace(ns: Namespace): void {\r\n if (!ns.members) return;\r\n\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let element of ns.members.values()) {\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking ||\r\n (element).is(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n this.compileEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking || (element).is(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n if (element.hasDecorator(DecoratorFlags.BUILTIN)) break;\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // exports\r\n\r\n compileExportStatement(statement: ExportStatement): void {\r\n var fileLevelExports = this.program.fileLevelExports;\r\n var members = statement.members;\r\n if (!members) return; // filespace\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n let element = fileLevelExports.get(\r\n statement.range.source.internalPath + PATH_DELIMITER + member.externalName.text\r\n );\r\n if (!element) continue; // reported in Program#initialize\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (!(element).is(CommonFlags.GENERIC)) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n this.compileEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC) &&\r\n statement.range.source.isEntry\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // classes\r\n\r\n compileClassDeclaration(\r\n declaration: ClassDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null\r\n ): void {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.compileClassUsingTypeArguments(\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n declaration\r\n );\r\n }\r\n\r\n compileClassUsingTypeArguments(\r\n prototype: ClassPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n var instance = this.resolver.resolveClassInclTypeArguments(\r\n prototype,\r\n typeArguments,\r\n contextualTypeArguments,\r\n alternativeReportNode || prototype.declaration\r\n );\r\n if (!instance) return;\r\n this.compileClass(instance);\r\n }\r\n\r\n compileClass(instance: Class): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n var staticMembers = instance.prototype.members;\r\n if (staticMembers) {\r\n for (let element of staticMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [], null, null,\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], null, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], null, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n var ctorInstance = instance.constructorInstance;\r\n if (ctorInstance) this.compileFunction(ctorInstance);\r\n var instanceMembers = instance.members;\r\n if (instanceMembers) {\r\n for (let element of instanceMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n instance.contextualTypeArguments,\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n element.set(CommonFlags.COMPILED);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], instance.contextualTypeArguments, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], instance.contextualTypeArguments, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n compileInterfaceDeclaration(\r\n declaration: InterfaceDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n // TODO\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n declaration.range\r\n );\r\n }\r\n\r\n // memory\r\n\r\n /** Adds a static memory segment with the specified data. */\r\n addMemorySegment(buffer: Uint8Array, alignment: i32 = 8): MemorySegment {\r\n var memoryOffset = i64_align(this.memoryOffset, alignment);\r\n var segment = MemorySegment.create(buffer, memoryOffset);\r\n this.memorySegments.push(segment);\r\n this.memoryOffset = i64_add(memoryOffset, i64_new(buffer.length, 0));\r\n return segment;\r\n }\r\n\r\n // function table\r\n\r\n /** Ensures that a table entry exists for the specified function and returns its index. */\r\n ensureFunctionTableEntry(func: Function): i32 {\r\n assert(func.is(CommonFlags.COMPILED));\r\n if (func.functionTableIndex >= 0) {\r\n return func.functionTableIndex;\r\n }\r\n var functionTable = this.functionTable;\r\n var index = functionTable.length;\r\n if (!func.is(CommonFlags.TRAMPOLINE) && func.signature.requiredParameters < func.signature.parameterTypes.length) {\r\n // insert the trampoline if the function has optional parameters\r\n func = this.ensureTrampoline(func);\r\n }\r\n functionTable.push(func.ref);\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 toType.is(TypeFlags.SIGNED) ? UnaryOp.ExtendI32 : UnaryOp.ExtendU32,\r\n this.ensureSmallIntegerWrap(expr, fromType) // must clear garbage bits\r\n );\r\n wrapMode = WrapMode.NONE;\r\n\r\n // i32 to i32\r\n } else {\r\n // small i32 to ...\r\n if (fromType.is(TypeFlags.SHORT)) {\r\n // small i32 to larger i32\r\n if (fromType.size < toType.size) {\r\n expr = this.ensureSmallIntegerWrap(expr, fromType); // must clear garbage bits\r\n wrapMode = WrapMode.NONE;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.currentType = toType;\r\n return wrapMode == WrapMode.WRAP\r\n ? this.ensureSmallIntegerWrap(expr, toType)\r\n : expr;\r\n }\r\n\r\n compileAssertionExpression(expression: AssertionExpression, contextualType: Type): ExpressionRef {\r\n var toType = this.resolver.resolveType( // reports\r\n expression.toType,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!toType) return this.module.createUnreachable();\r\n return this.compileExpression(expression.expression, toType, ConversionKind.EXPLICIT, WrapMode.NONE);\r\n }\r\n\r\n private f32ModInstance: Function | null = null;\r\n private f64ModInstance: Function | null = null;\r\n private f32PowInstance: Function | null = null;\r\n private f64PowInstance: Function | null = null;\r\n\r\n compileBinaryExpression(\r\n expression: BinaryExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var left = expression.left;\r\n var right = expression.right;\r\n\r\n var leftExpr: ExpressionRef;\r\n var leftType: Type;\r\n var rightExpr: ExpressionRef;\r\n var rightType: Type;\r\n var commonType: Type | null;\r\n\r\n var expr: ExpressionRef;\r\n var compound = false;\r\n\r\n var operator = expression.operator;\r\n switch (operator) {\r\n case Token.LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.LT);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"<\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.LtI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.LtI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtI64\r\n : BinaryOp.LtI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.LtU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtU64\r\n : BinaryOp.LtU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.LtU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.LtF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.LtF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.GT);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \">\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.GtI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.GtI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.GtU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtU64\r\n : BinaryOp.GtU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.GtU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.GtF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.GtF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.LESSTHAN_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.LE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"<=\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.LeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeI64\r\n : BinaryOp.LeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.LeI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.LeU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeU64\r\n : BinaryOp.LeU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.LeU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.LeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.LeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.GREATERTHAN_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.GE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \">=\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.GeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeI64\r\n : BinaryOp.GeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.GeI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.GeU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeU64\r\n : BinaryOp.GeU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.GeU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.GeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.GeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n\r\n case Token.EQUALS_EQUALS_EQUALS:\r\n case Token.EQUALS_EQUALS: {\r\n\r\n // NOTE that this favors correctness, in terms of emitting a binary expression, over\r\n // checking for a possible use of unary EQZ. while the most classic of all optimizations,\r\n // that's not what the source told us to do. for reference, `!left` emits unary EQZ.\r\n\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (operator == Token.EQUALS_EQUALS && this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.EQ);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n // still allow '==' with references\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, operatorTokenToString(expression.operator), leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.EqI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.EqI64\r\n : BinaryOp.EqI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.EqI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.EqF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.EqF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.EXCLAMATION_EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (operator == Token.EXCLAMATION_EQUALS && this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.NE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n // still allow '!=' with references\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, operatorTokenToString(expression.operator), leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.NeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.NeI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.NeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.NeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.EQUALS: {\r\n return this.compileAssignment(left, right, contextualType);\r\n }\r\n case Token.PLUS_EQUALS: compound = true;\r\n case Token.PLUS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.ADD);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"+\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // addition might overflow\r\n case TypeKind.I16: // ^\r\n case TypeKind.U8: // ^\r\n case TypeKind.U16: // ^\r\n case TypeKind.BOOL: // ^\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.AddI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AddI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.AddF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.AddF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_EQUALS: compound = true;\r\n case Token.MINUS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.SUB);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"-\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // subtraction might overflow\r\n case TypeKind.I16: // ^\r\n case TypeKind.U8: // ^\r\n case TypeKind.U16: // ^\r\n case TypeKind.BOOL: // ^\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.SubI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.SubF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.SubF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.ASTERISK_EQUALS: compound = true;\r\n case Token.ASTERISK: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.MUL);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"*\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.MulI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.MulI64\r\n : BinaryOp.MulI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.MulI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.MulF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.MulF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.ASTERISK_ASTERISK_EQUALS: compound = true;\r\n case Token.ASTERISK_ASTERISK: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.POW);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n let instance: Function | null;\r\n\r\n // Mathf.pow if lhs is f32 (result is f32)\r\n if (this.currentType.kind == TypeKind.F32) {\r\n rightExpr = this.compileExpression(right, Type.f32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (!(instance = this.f32PowInstance)) {\r\n let namespace = this.program.elementsLookup.get(\"Mathf\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"pow\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf.pow\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f32PowInstance = instance = this.resolver.resolveFunction(prototype, null);\r\n }\r\n\r\n // Math.pow otherwise (result is f64)\r\n // TODO: should the result be converted back?\r\n } else {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n this.currentType,\r\n Type.f64,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(\r\n right,\r\n Type.f64,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n rightType = this.currentType;\r\n if (!(instance = this.f64PowInstance)) {\r\n let namespace = this.program.elementsLookup.get(\"Math\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"pow\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math.pow\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f64PowInstance = instance = this.resolver.resolveFunction(prototype, null);\r\n }\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n case Token.SLASH_EQUALS: compound = true;\r\n case Token.SLASH: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.DIV);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"/\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // signed div on signed small integers might overflow, e.g. -128/-1\r\n case TypeKind.I16: // ^\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.DivI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivI64\r\n : BinaryOp.DivI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.DivI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.DivU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.DivU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivU64\r\n : BinaryOp.DivU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.DivU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.DivF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.DivF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.PERCENT_EQUALS: compound = true;\r\n case Token.PERCENT: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.REM);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"%\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n expr = module.createBinary(BinaryOp.RemI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.RemI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemI64\r\n : BinaryOp.RemI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.RemI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.RemU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.RemU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemU64\r\n : BinaryOp.RemU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.RemU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n let instance = this.f32ModInstance;\r\n if (!instance) {\r\n let namespace = this.program.elementsLookup.get(\"Mathf\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"mod\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf.mod\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f32ModInstance = instance = this.resolver.resolveFunction(prototype, null);\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n let instance = this.f64ModInstance;\r\n if (!instance) {\r\n let namespace = this.program.elementsLookup.get(\"Math\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"mod\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math.mod\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f64ModInstance = instance = this.resolver.resolveFunction(prototype, null);\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.LESSTHAN_LESSTHAN_EQUALS: compound = true;\r\n case Token.LESSTHAN_LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHL);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShlI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShlI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShlI64\r\n : BinaryOp.ShlI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS: compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType); // must clear garbage bits\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n expr = module.createBinary(BinaryOp.ShrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.ShrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.ShrI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrI64\r\n : BinaryOp.ShrI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShrU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS: compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHR_U);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType); // must clear garbage bits\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: { // assumes that unsigned shr on unsigned small integers does not overflow\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n }\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShrU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.AMPERSAND_EQUALS: compound = true;\r\n case Token.AMPERSAND: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overloadd\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_AND);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"&\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.AndI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AndI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AndI64\r\n : BinaryOp.AndI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.BAR_EQUALS: compound = true;\r\n case Token.BAR: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_OR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"|\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.OrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.OrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.OrI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.OrI64\r\n : BinaryOp.OrI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.CARET_EQUALS: compound = true;\r\n case Token.CARET: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_XOR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"^\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.XorI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.XorI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.XorI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n\r\n // logical (no overloading)\r\n\r\n case Token.AMPERSAND_AMPERSAND: { // left && right\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n\r\n // simplify if cloning left without side effects is possible\r\n if (expr = module.cloneExpression(leftExpr, true, 0)) {\r\n this.makeIsTrueish(leftExpr, this.currentType);\r\n expr = module.createIf(\r\n this.makeIsTrueish(leftExpr, this.currentType),\r\n rightExpr,\r\n expr\r\n );\r\n\r\n // if not possible, tee left to a temp. local\r\n } else {\r\n let flow = this.currentFunction.flow;\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(\r\n this.currentType,\r\n !flow.canOverflow(leftExpr, this.currentType)\r\n );\r\n expr = module.createIf(\r\n this.makeIsTrueish(\r\n module.createTeeLocal(tempLocal.index, leftExpr),\r\n this.currentType\r\n ),\r\n rightExpr,\r\n module.createGetLocal(\r\n assert(tempLocal).index, // to be sure\r\n this.currentType.toNativeType()\r\n )\r\n );\r\n }\r\n break;\r\n }\r\n case Token.BAR_BAR: { // left || right\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n\r\n // simplify if cloning left without side effects is possible\r\n if (expr = this.module.cloneExpression(leftExpr, true, 0)) {\r\n expr = this.module.createIf(\r\n this.makeIsTrueish(leftExpr, this.currentType),\r\n expr,\r\n rightExpr\r\n );\r\n\r\n // if not possible, tee left to a temp. local\r\n } else {\r\n let flow = this.currentFunction.flow;\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(\r\n this.currentType,\r\n !flow.canOverflow(leftExpr, this.currentType)\r\n );\r\n expr = module.createIf(\r\n this.makeIsTrueish(\r\n module.createTeeLocal(tempLocal.index, leftExpr),\r\n this.currentType\r\n ),\r\n module.createGetLocal(\r\n assert(tempLocal).index, // to be sure\r\n this.currentType.toNativeType()\r\n ),\r\n rightExpr\r\n );\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = this.module.createUnreachable();\r\n }\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(left, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n\r\n compileUnaryOverload(\r\n operatorInstance: Function,\r\n value: Expression,\r\n valueExpr: ExpressionRef,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n var argumentExpressions: Expression[];\r\n var thisArg: ExpressionRef = 0;\r\n if (operatorInstance.is(CommonFlags.INSTANCE)) {\r\n thisArg = valueExpr; // can reuse the previously evaluated expr as the this value here\r\n argumentExpressions = [];\r\n } else {\r\n argumentExpressions = [ value ]; // annotated type might differ -> recompile\r\n }\r\n return this.compileCallDirect(\r\n operatorInstance,\r\n argumentExpressions,\r\n reportNode,\r\n thisArg,\r\n operatorInstance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n }\r\n\r\n compileBinaryOverload(\r\n operatorInstance: Function,\r\n left: Expression,\r\n leftExpr: ExpressionRef,\r\n right: Expression,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n var argumentExpressions: Expression[];\r\n var thisArg: ExpressionRef = 0;\r\n if (operatorInstance.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(operatorInstance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n thisArg = leftExpr; // can reuse the previously evaluated leftExpr as the this value here\r\n argumentExpressions = [ right ];\r\n } else {\r\n argumentExpressions = [ left, right ]; // annotated type of LHS might differ -> recompile\r\n }\r\n var ret = this.compileCallDirect(\r\n operatorInstance,\r\n argumentExpressions,\r\n reportNode,\r\n thisArg,\r\n operatorInstance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n return ret;\r\n }\r\n\r\n compileAssignment(expression: Expression, valueExpression: Expression, contextualType: Type): ExpressionRef {\r\n var program = this.program;\r\n var resolver = program.resolver;\r\n var currentFunction = this.currentFunction;\r\n var target = resolver.resolveExpression(expression, currentFunction); // reports\r\n if (!target) return this.module.createUnreachable();\r\n\r\n // to compile just the value, we need to know the target's type\r\n var targetType: Type;\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field compiled as a global\r\n return this.module.createUnreachable();\r\n }\r\n assert((target).type != Type.void); // compileGlobal must guarantee this\r\n // fall-through\r\n }\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n targetType = (target).type;\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let setterPrototype = (target).setterPrototype;\r\n if (setterPrototype) {\r\n let instance = this.resolver.resolveFunction(setterPrototype, null);\r\n if (!instance) return this.module.createUnreachable();\r\n assert(instance.signature.parameterTypes.length == 1); // parser must guarantee this\r\n targetType = instance.signature.parameterTypes[0];\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n case ElementKind.CLASS: {\r\n if (resolver.currentElementExpression) { // indexed access\r\n let isUnchecked = currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);\r\n if (!indexedSet) {\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, (target).internalName\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, (target).internalName\r\n );\r\n }\r\n return this.module.createUnreachable();\r\n }\r\n assert(indexedSet.signature.parameterTypes.length == 2); // parser must guarantee this\r\n targetType = indexedSet.signature.parameterTypes[1]; // 2nd parameter is the element\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n\r\n // compile the value and do the assignment\r\n assert(targetType != Type.void);\r\n var valueExpr = this.compileExpression(valueExpression, targetType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n return this.compileAssignmentWithValue(\r\n expression,\r\n valueExpr,\r\n contextualType != Type.void\r\n );\r\n }\r\n\r\n compileAssignmentWithValue(\r\n expression: Expression,\r\n valueWithCorrectType: ExpressionRef,\r\n tee: bool = false\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var target = this.resolver.resolveExpression(expression, this.currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.LOCAL: {\r\n let type = (target).type;\r\n assert(type != Type.void);\r\n this.currentType = tee ? type : Type.void;\r\n if ((target).is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let flow = this.currentFunction.flow;\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped((target).index, !flow.canOverflow(valueWithCorrectType, type));\r\n }\r\n return tee\r\n ? module.createTeeLocal((target).index, valueWithCorrectType)\r\n : module.createSetLocal((target).index, valueWithCorrectType);\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) return module.createUnreachable();\r\n let type = (target).type;\r\n assert(type != Type.void);\r\n this.currentType = tee ? type : Type.void;\r\n if ((target).is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range,\r\n target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n valueWithCorrectType = this.ensureSmallIntegerWrap(valueWithCorrectType, type); // guaranteed\r\n if (tee) {\r\n let nativeType = type.toNativeType();\r\n let internalName = target.internalName;\r\n return module.createBlock(null, [ // emulated teeGlobal\r\n module.createSetGlobal(internalName, valueWithCorrectType),\r\n module.createGetGlobal(internalName, nativeType)\r\n ], nativeType);\r\n } else {\r\n return module.createSetGlobal(target.internalName, valueWithCorrectType);\r\n }\r\n }\r\n case ElementKind.FIELD: {\r\n const declaration = (target).declaration;\r\n if (\r\n (target).is(CommonFlags.READONLY) &&\r\n !(\r\n this.currentFunction.is(CommonFlags.CONSTRUCTOR) ||\r\n declaration == null ||\r\n declaration.initializer != null\r\n )\r\n ) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, (target).internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let thisExpression = assert(this.resolver.currentThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let type = (target).type;\r\n this.currentType = tee ? type : Type.void;\r\n let nativeType = type.toNativeType();\r\n if (type.kind == TypeKind.BOOL) {\r\n // make sure bools are wrapped (usually are) when storing as 8 bits\r\n valueWithCorrectType = this.ensureSmallIntegerWrap(valueWithCorrectType, type);\r\n }\r\n if (tee) {\r\n let currentFunction = this.currentFunction;\r\n let flow = currentFunction.flow;\r\n let tempLocal = currentFunction.getAndFreeTempLocal(\r\n type,\r\n !flow.canOverflow(valueWithCorrectType, type)\r\n );\r\n let tempLocalIndex = tempLocal.index;\r\n // TODO: simplify if valueWithCorrectType has no side effects\r\n // 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 module.createBlock(returnLabel, body, returnType.toNativeType());\r\n }\r\n\r\n /** Gets the trampoline for the specified function. */\r\n ensureTrampoline(original: Function): Function {\r\n // A trampoline is a function that takes a fixed amount of operands with some of them possibly\r\n // being zeroed. It takes one additional argument denoting the number of actual operands\r\n // provided to the call, and takes appropriate steps to initialize zeroed operands to their\r\n // default values using the optional parameter initializers of the original function. Doing so\r\n // allows calls to functions with optional parameters to circumvent the trampoline when all\r\n // parameters are provided as a fast route, respectively setting up omitted operands in a proper\r\n // context otherwise.\r\n var trampoline = original.trampoline;\r\n if (trampoline) return trampoline;\r\n\r\n var originalSignature = original.signature;\r\n var originalName = original.internalName;\r\n var originalParameterTypes = originalSignature.parameterTypes;\r\n var originalParameterDeclarations = original.prototype.declaration.signature.parameters;\r\n var commonReturnType = originalSignature.returnType;\r\n var commonThisType = originalSignature.thisType;\r\n var isInstance = original.is(CommonFlags.INSTANCE);\r\n\r\n // arguments excl. `this`, operands incl. `this`\r\n var minArguments = originalSignature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = originalParameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (isInstance) {\r\n ++minOperands;\r\n ++maxOperands;\r\n }\r\n var numOptional = assert(maxOperands - minOperands);\r\n\r\n var forwardedOperands = new Array(minOperands);\r\n var operandIndex = 0;\r\n\r\n // forward `this` if applicable\r\n var module = this.module;\r\n if (isInstance) {\r\n forwardedOperands[0] = module.createGetLocal(0, this.options.nativeSizeType);\r\n operandIndex = 1;\r\n }\r\n\r\n // forward required arguments\r\n for (let i = 0; i < minArguments; ++i, ++operandIndex) {\r\n forwardedOperands[operandIndex] = module.createGetLocal(operandIndex, originalParameterTypes[i].toNativeType());\r\n }\r\n assert(operandIndex == minOperands);\r\n\r\n // create the trampoline element\r\n var trampolineSignature = new Signature(originalParameterTypes, commonReturnType, commonThisType);\r\n var trampolineName = originalName + \"|trampoline\";\r\n trampolineSignature.requiredParameters = maxArguments;\r\n trampoline = new Function(\r\n original.prototype,\r\n trampolineName,\r\n trampolineSignature,\r\n original.parent,\r\n original.contextualTypeArguments\r\n );\r\n trampoline.set(original.flags | CommonFlags.TRAMPOLINE | CommonFlags.COMPILED);\r\n original.trampoline = trampoline;\r\n\r\n // compile initializers of omitted arguments in scope of the trampoline function\r\n // this is necessary because initializers might need additional locals and a proper this context\r\n var previousFunction = this.currentFunction;\r\n this.currentFunction = trampoline;\r\n\r\n // create a br_table switching over the number of optional parameters provided\r\n var numNames = numOptional + 1; // incl. outer block\r\n var names = new Array(numNames);\r\n var ofN = \"of\" + numOptional.toString(10);\r\n for (let i = 0; i < numNames; ++i) {\r\n let label = i.toString(10) + ofN;\r\n names[i] = label;\r\n }\r\n var body = module.createBlock(names[0], [\r\n module.createBlock(\"outOfRange\", [\r\n module.createSwitch(names, \"outOfRange\",\r\n // condition is number of provided optional arguments, so subtract required arguments\r\n minArguments\r\n ? module.createBinary(\r\n BinaryOp.SubI32,\r\n module.createGetGlobal(\"~argc\", NativeType.I32),\r\n module.createI32(minArguments)\r\n )\r\n : module.createGetGlobal(\"~argc\", NativeType.I32)\r\n )\r\n ]),\r\n module.createUnreachable()\r\n ]);\r\n for (let i = 0; i < numOptional; ++i, ++operandIndex) {\r\n let type = originalParameterTypes[minArguments + i];\r\n let declaration = originalParameterDeclarations[minArguments + i];\r\n let initializer = declaration.initializer;\r\n let initExpr: ExpressionRef;\r\n if (initializer) {\r\n initExpr = module.createSetLocal(operandIndex,\r\n this.compileExpression(\r\n initializer,\r\n type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n )\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Optional_parameter_must_have_an_initializer,\r\n declaration.range\r\n );\r\n initExpr = module.createUnreachable();\r\n }\r\n body = module.createBlock(names[i + 1], [\r\n body,\r\n initExpr,\r\n ]);\r\n forwardedOperands[operandIndex] = module.createGetLocal(operandIndex, type.toNativeType());\r\n }\r\n this.currentFunction = previousFunction;\r\n assert(operandIndex == maxOperands);\r\n\r\n var funcRef = module.addFunction(\r\n trampolineName,\r\n this.ensureFunctionType(\r\n trampolineSignature.parameterTypes,\r\n trampolineSignature.returnType,\r\n trampolineSignature.thisType\r\n ),\r\n typesToNativeTypes(trampoline.additionalLocals),\r\n module.createBlock(null, [\r\n body,\r\n module.createCall(\r\n originalName,\r\n forwardedOperands,\r\n commonReturnType.toNativeType()\r\n )\r\n ], commonReturnType.toNativeType())\r\n );\r\n trampoline.finalize(module, funcRef);\r\n return trampoline;\r\n }\r\n\r\n /** Makes sure that the argument count helper global is present and returns its name. */\r\n private ensureArgcVar(): string {\r\n var internalName = \"~argc\";\r\n if (!this.argcVar) {\r\n let module = this.module;\r\n this.argcVar = module.addGlobal(\r\n internalName,\r\n NativeType.I32,\r\n true,\r\n module.createI32(0)\r\n );\r\n }\r\n return internalName;\r\n }\r\n\r\n /** Makes sure that the argument count helper setter is present and returns its name. */\r\n private ensureArgcSet(): string {\r\n var internalName = \"~setargc\";\r\n if (!this.argcSet) {\r\n let module = this.module;\r\n this.argcSet = module.addFunction(internalName,\r\n this.ensureFunctionType([ Type.u32 ], Type.void),\r\n null,\r\n module.createSetGlobal(this.ensureArgcVar(),\r\n module.createGetLocal(0, NativeType.I32)\r\n )\r\n );\r\n module.addFunctionExport(internalName, \"_setargc\");\r\n }\r\n return internalName;\r\n }\r\n\r\n /** Creates a direct call to the specified function. */\r\n makeCallDirect(\r\n instance: Function,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var numOperands = operands ? operands.length : 0;\r\n var numArguments = numOperands;\r\n var minArguments = instance.signature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = instance.signature.parameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n ++minOperands;\r\n ++maxOperands;\r\n --numArguments;\r\n }\r\n assert(numOperands >= minOperands);\r\n\r\n var module = this.module;\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n var returnType = instance.signature.returnType;\r\n var isCallImport = instance.is(CommonFlags.MODULE_IMPORT);\r\n\r\n // fill up omitted arguments with their initializers, if constant, otherwise with zeroes.\r\n if (numOperands < maxOperands) {\r\n if (!operands) {\r\n operands = new Array(maxOperands);\r\n operands.length = 0;\r\n }\r\n let parameterTypes = instance.signature.parameterTypes;\r\n let parameterNodes = instance.prototype.declaration.signature.parameters;\r\n let allOptionalsAreConstant = true;\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n let initializer = parameterNodes[i].initializer;\r\n if (!(initializer !== null && nodeIsConstantValue(initializer.kind))) {\r\n allOptionalsAreConstant = false;\r\n break;\r\n }\r\n }\r\n if (allOptionalsAreConstant) { // inline into the call\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(\r\n this.compileExpression(\r\n parameterNodes[i].initializer,\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n )\r\n );\r\n }\r\n } else { // otherwise fill up with zeroes and call the trampoline\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(parameterTypes[i].toNativeZero(module));\r\n }\r\n if (!isCallImport) {\r\n let original = instance;\r\n instance = this.ensureTrampoline(instance);\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n instance.flow.flags = original.flow.flags;\r\n this.program.instancesLookup.set(instance.internalName, instance); // so canOverflow can find it\r\n let nativeReturnType = returnType.toNativeType();\r\n this.currentType = returnType;\r\n return module.createBlock(null, [\r\n module.createSetGlobal(this.ensureArgcVar(), module.createI32(numArguments)),\r\n module.createCall(instance.internalName, operands, nativeReturnType)\r\n ], nativeReturnType);\r\n }\r\n }\r\n }\r\n\r\n // otherwise just call through\r\n this.currentType = returnType;\r\n if (isCallImport) return module.createCallImport(instance.internalName, operands, returnType.toNativeType());\r\n var ret = module.createCall(instance.internalName, operands, returnType.toNativeType());\r\n return ret;\r\n }\r\n\r\n /** Compiles an indirect call using an index argument and a signature. */\r\n compileCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n numArguments,\r\n thisArg != 0,\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallIndirect(signature, indexArg, operands);\r\n }\r\n\r\n /** Creates an indirect call to the function at `indexArg` in the function table. */\r\n makeCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var numOperands = operands ? operands.length : 0;\r\n var numArguments = numOperands;\r\n var minArguments = signature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = signature.parameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (signature.thisType) {\r\n ++minOperands;\r\n ++maxOperands;\r\n --numArguments;\r\n }\r\n assert(numOperands >= minOperands);\r\n\r\n this.ensureFunctionType(signature.parameterTypes, signature.returnType, signature.thisType);\r\n var module = this.module;\r\n\r\n // fill up omitted arguments with zeroes\r\n if (numOperands < maxOperands) {\r\n if (!operands) {\r\n operands = new Array(maxOperands);\r\n operands.length = 0;\r\n }\r\n let parameterTypes = signature.parameterTypes;\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(parameterTypes[i].toNativeZero(module));\r\n }\r\n }\r\n\r\n var returnType = signature.returnType;\r\n this.currentType = returnType;\r\n return module.createBlock(null, [\r\n module.createSetGlobal(this.ensureArgcVar(), // might still be calling a trampoline\r\n module.createI32(numArguments)\r\n ),\r\n module.createCallIndirect(indexArg, operands, signature.toSignatureString())\r\n ], returnType.toNativeType()); // not necessarily wrapped\r\n }\r\n\r\n compileCommaExpression(expression: CommaExpression, contextualType: Type): ExpressionRef {\r\n var expressions = expression.expressions;\r\n var numExpressions = expressions.length;\r\n var exprs = new Array(numExpressions--);\r\n for (let i = 0; i < numExpressions; ++i) {\r\n exprs[i] = this.compileExpression(\r\n expressions[i],\r\n Type.void, // drop all\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n exprs[numExpressions] = this.compileExpression(\r\n expressions[numExpressions],\r\n contextualType, // except last\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n return this.module.createBlock(null, exprs, this.currentType.toNativeType());\r\n }\r\n\r\n compileElementAccessExpression(expression: ElementAccessExpression, contextualType: Type): ExpressionRef {\r\n var target = this.resolver.resolveElementAccess(expression, this.currentFunction); // reports\r\n if (!target) return this.module.createUnreachable();\r\n switch (target.kind) {\r\n case ElementKind.CLASS: {\r\n let isUnchecked = this.currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.expression.range, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n let thisArg = this.compileExpression(\r\n expression.expression,\r\n (target).type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n return this.compileCallDirect(indexedGet, [\r\n expression.elementExpression\r\n ], expression, thisArg);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileFunctionExpression(expression: FunctionExpression, contextualType: Type): ExpressionRef {\r\n var declaration = expression.declaration;\r\n var name = declaration.name;\r\n var simpleName = (name.text.length\r\n ? name.text\r\n : \"anonymous\") + \"|\" + this.functionTable.length.toString(10);\r\n var currentFunction = this.currentFunction;\r\n var prototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n currentFunction.internalName + INNER_DELIMITER + simpleName,\r\n declaration,\r\n null,\r\n DecoratorFlags.NONE\r\n );\r\n var flow = currentFunction.flow;\r\n var instance = this.compileFunctionUsingTypeArguments(\r\n prototype,\r\n [],\r\n flow.contextualTypeArguments,\r\n flow,\r\n declaration\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n this.currentType = instance.signature.type; // TODO: get cached type?\r\n // NOTE that, in order to make this work in every case, the function must be represented by a\r\n // value, so we add it and rely on the optimizer to figure out where it can be called directly.\r\n var index = this.ensureFunctionTableEntry(instance); // reports\r\n return index < 0\r\n ? this.module.createUnreachable()\r\n : this.module.createI32(index);\r\n }\r\n\r\n /**\r\n * Compiles an identifier in the specified context.\r\n * @param retainConstantType Retains the type of inlined constants if `true`, otherwise\r\n * precomputes them according to context.\r\n */\r\n compileIdentifierExpression(\r\n expression: IdentifierExpression,\r\n contextualType: Type,\r\n retainConstantType: bool\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // check special keywords first\r\n switch (expression.kind) {\r\n case NodeKind.NULL: {\r\n let options = this.options;\r\n if (!contextualType.classReference) {\r\n this.currentType = options.usizeType;\r\n }\r\n return options.isWasm64\r\n ? module.createI64(0)\r\n : module.createI32(0);\r\n }\r\n case NodeKind.TRUE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(1);\r\n }\r\n case NodeKind.FALSE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(0);\r\n }\r\n case NodeKind.THIS: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n this.currentType = scopedThis.type;\r\n return module.createGetLocal(scopedThis.index, scopedThis.type.toNativeType());\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let thisType = (parent).type;\r\n if (currentFunction.is(CommonFlags.CONSTRUCTOR)) {\r\n if (!flow.is(FlowFlags.ALLOCATES)) {\r\n flow.set(FlowFlags.ALLOCATES);\r\n // must be conditional because `this` could have been provided by a derived class\r\n this.currentType = thisType;\r\n return module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, expression)\r\n );\r\n }\r\n }\r\n this.currentType = thisType;\r\n return module.createGetLocal(0, thisType.toNativeType());\r\n }\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n case NodeKind.SUPER: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n let scopedThisClass = assert(scopedThis.type.classReference);\r\n let base = scopedThisClass.base;\r\n if (base) {\r\n this.currentType = base.type;\r\n return module.createGetLocal(scopedThis.index, base.type.toNativeType());\r\n }\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let base = (parent).base;\r\n if (base) {\r\n let superType = base.type;\r\n this.currentType = superType;\r\n return module.createGetLocal(0, superType.toNativeType());\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise resolve\r\n var target = this.resolver.resolveIdentifier( // reports\r\n expression,\r\n this.currentEnum || currentFunction\r\n );\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.LOCAL: {\r\n let localType = (target).type;\r\n assert(localType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n let localIndex = (target).index;\r\n assert(localIndex >= 0);\r\n this.currentType = localType;\r\n return this.module.createGetLocal(localIndex, localType.toNativeType());\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field\r\n return this.module.createUnreachable();\r\n }\r\n let globalType = (target).type;\r\n assert(globalType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return this.module.createGetGlobal((target).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // here: if referenced from within the same enum\r\n if (!target.is(CommonFlags.COMPILED)) {\r\n this.error(\r\n DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,\r\n expression.range\r\n );\r\n this.currentType = Type.i32;\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.module.createI32((target).constantValue);\r\n }\r\n return this.module.createGetGlobal((target).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let instance = this.resolver.resolveFunction(\r\n target,\r\n null,\r\n currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!(instance && this.compileFunction(instance))) return module.createUnreachable();\r\n let index = this.ensureFunctionTableEntry(instance);\r\n this.currentType = instance.signature.type;\r\n return this.module.createI32(index);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileInstanceOfExpression(\r\n expression: InstanceOfExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n // NOTE that this differs from TypeScript in that the rhs is a type, not an expression. at the\r\n // time of implementation, this seemed more useful because dynamic rhs expressions are not\r\n // possible in AS anyway.\r\n var expr = this.compileExpressionRetainType(expression.expression, this.options.usizeType, WrapMode.NONE);\r\n var type = this.currentType;\r\n var isType = this.resolver.resolveType(expression.isType);\r\n this.currentType = Type.bool;\r\n if (!isType) return module.createUnreachable();\r\n return type.is(TypeFlags.NULLABLE) && !isType.is(TypeFlags.NULLABLE)\r\n ? type.nonNullableType.isAssignableTo(isType)\r\n ? module.createBinary( // not precomputeable\r\n type.is(TypeFlags.LONG)\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n expr,\r\n type.toNativeZero(module)\r\n )\r\n : module.createI32(0)\r\n : module.createI32(type.isAssignableTo(isType, true) ? 1 : 0);\r\n }\r\n\r\n compileLiteralExpression(\r\n expression: LiteralExpression,\r\n contextualType: Type,\r\n implicitNegate: bool = false\r\n ): ExpressionRef {\r\n var module = this.module;\r\n\r\n switch (expression.literalKind) {\r\n case LiteralKind.ARRAY: {\r\n assert(!implicitNegate);\r\n let classType = contextualType.classReference;\r\n if (\r\n classType &&\r\n classType.prototype == this.program.arrayPrototype\r\n ) {\r\n return this.compileArrayLiteral(\r\n assert(classType.typeArguments)[0],\r\n (expression).elementExpressions,\r\n 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.getTempLocal(arrayType, false);\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);\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 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 // shortcut if compiling the getter already failed\r\n if (getExpressionId(getValue) == ExpressionId.Unreachable) return getValue;\r\n var currentType = this.currentType;\r\n\r\n var op: BinaryOp;\r\n var nativeType: NativeType;\r\n var nativeOne: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS_PLUS: {\r\n\r\n // TODO: check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n switch (currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n op = BinaryOp.AddI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = module.createI32(1);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n let options = this.options;\r\n op = options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32;\r\n nativeType = options.nativeSizeType;\r\n nativeOne = currentType.toNativeOne(module);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n op = BinaryOp.AddI64;\r\n nativeType = NativeType.I64;\r\n nativeOne = module.createI64(1);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n op = BinaryOp.AddF32;\r\n nativeType = NativeType.F32;\r\n nativeOne = module.createF32(1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n op = BinaryOp.AddF64;\r\n nativeType = NativeType.F64;\r\n nativeOne = module.createF64(1);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n\r\n // TODO: check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n switch (currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n op = BinaryOp.SubI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = module.createI32(1);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n let options = this.options;\r\n op = options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32;\r\n nativeType = options.nativeSizeType;\r\n nativeOne = currentType.toNativeOne(module);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n op = BinaryOp.SubI64;\r\n nativeType = NativeType.I64;\r\n nativeOne = module.createI64(1);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n op = BinaryOp.SubF32;\r\n nativeType = NativeType.F32;\r\n nativeOne = module.createF32(1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n op = BinaryOp.SubF64;\r\n nativeType = NativeType.F64;\r\n nativeOne = module.createF64(1);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // simplify if dropped anyway\r\n if (contextualType == Type.void) {\r\n return this.compileAssignmentWithValue(expression.operand,\r\n module.createBinary(op,\r\n getValue,\r\n nativeOne\r\n ),\r\n false\r\n );\r\n }\r\n\r\n // otherwise use a temp local for the intermediate value (always possibly overflows)\r\n var tempLocal = currentFunction.getTempLocal(currentType, false);\r\n var setValue = this.compileAssignmentWithValue(expression.operand,\r\n module.createBinary(op,\r\n this.module.createGetLocal(tempLocal.index, nativeType),\r\n nativeOne\r\n ),\r\n false\r\n );\r\n this.currentType = assert(tempLocal).type;\r\n currentFunction.freeTempLocal(tempLocal);\r\n\r\n var localIndex = (tempLocal).index;\r\n return module.createBlock(null, [\r\n module.createSetLocal(localIndex, getValue),\r\n setValue,\r\n module.createGetLocal(localIndex, nativeType)\r\n ], nativeType); // result of 'x++' / 'x--' might overflow\r\n }\r\n\r\n compileUnaryPrefixExpression(\r\n expression: UnaryPrefixExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var compound = false;\r\n var expr: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PLUS);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // nop\r\n break;\r\n }\r\n case Token.MINUS: {\r\n if (expression.operand.kind == NodeKind.LITERAL && (\r\n (expression.operand).literalKind == LiteralKind.INTEGER ||\r\n (expression.operand).literalKind == LiteralKind.FLOAT\r\n )) {\r\n // implicitly negate integer and float literals. also enables proper checking of literal ranges.\r\n expr = this.compileLiteralExpression(expression.operand, contextualType, true);\r\n // compileExpression normally does this:\r\n if (this.options.sourceMap) this.addDebugLocation(expr, expression.range);\r\n break;\r\n }\r\n\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.MINUS);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.SubI32, module.createI32(0), expr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n this.currentType.toNativeZero(module),\r\n expr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, module.createI64(0), expr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createUnary(UnaryOp.NegF32, expr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createUnary(UnaryOp.NegF64, expr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.PLUS_PLUS: {\r\n compound = true;\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PREFIX_INC);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.AddI32, expr, this.module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n expr,\r\n this.currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AddI64, expr, module.createI64(1));\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.AddF32, expr, module.createF32(1));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.AddF64, expr, module.createF64(1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n compound = true;\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PREFIX_DEC);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.SubI32, expr, module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n expr,\r\n this.currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, expr, module.createI64(1));\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.SubF32, expr, module.createF32(1));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.SubF64, expr, module.createF64(1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.EXCLAMATION: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.NOT);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n // allow '!' for references even without an overload\r\n }\r\n\r\n expr = this.makeIsFalseish(expr, this.currentType);\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.TILDE: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType.is(TypeFlags.FLOAT)\r\n ? Type.i64\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_NOT);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n } else {\r\n expr = this.convertExpression(\r\n expr,\r\n this.currentType, this.currentType.intType,\r\n ConversionKind.IMPLICIT, WrapMode.NONE,\r\n expression.operand\r\n );\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.XorI32, expr, module.createI32(-1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n expr,\r\n this.currentType.toNativeNegOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.XorI64, expr, module.createI64(-1, -1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.TYPEOF: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(expression.operand, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n\r\n /** Makes sure that a 32-bit integer value is wrapped to a valid value of the specified type. */\r\n ensureSmallIntegerWrap(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n var flow = this.currentFunction.flow;\r\n switch (type.kind) {\r\n case TypeKind.I8: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = this.options.hasFeature(Feature.SIGN_EXTENSION)\r\n ? module.createUnary(UnaryOp.ExtendI8ToI32, expr)\r\n : module.createBinary(BinaryOp.ShrI32,\r\n module.createBinary(BinaryOp.ShlI32,\r\n expr,\r\n module.createI32(24)\r\n ),\r\n module.createI32(24)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.I16: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = this.options.hasFeature(Feature.SIGN_EXTENSION)\r\n ? module.createUnary(UnaryOp.ExtendI16ToI32, expr)\r\n : module.createBinary(BinaryOp.ShrI32,\r\n module.createBinary(BinaryOp.ShlI32,\r\n expr,\r\n module.createI32(16)\r\n ),\r\n module.createI32(16)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.U8: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xff)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.U16: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xffff)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.BOOL: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0x1)\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n return expr;\r\n }\r\n\r\n /** Creates a comparison whether an expression is 'false' in a broader sense. */\r\n makeIsFalseish(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n switch (type.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = this.ensureSmallIntegerWrap(expr, type);\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return module.createUnary(UnaryOp.EqzI32, expr);\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createUnary(UnaryOp.EqzI64, expr);\r\n }\r\n case TypeKind.USIZE: // TODO: strings?\r\n case TypeKind.ISIZE: {\r\n return module.createUnary(type.size == 64 ? UnaryOp.EqzI64 : UnaryOp.EqzI32, expr);\r\n }\r\n case TypeKind.F32: {\r\n return module.createBinary(BinaryOp.EqF32, expr, module.createF32(0));\r\n }\r\n case TypeKind.F64: {\r\n return module.createBinary(BinaryOp.EqF64, expr, module.createF64(0));\r\n }\r\n default: {\r\n assert(false);\r\n return module.createI32(1);\r\n }\r\n }\r\n }\r\n\r\n /** Creates a comparison whether an expression is 'true' in a broader sense. */\r\n makeIsTrueish(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n switch (type.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = this.ensureSmallIntegerWrap(expr, type);\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return expr;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createBinary(BinaryOp.NeI64, expr, module.createI64(0));\r\n }\r\n case TypeKind.USIZE: // TODO: strings?\r\n case TypeKind.ISIZE: {\r\n return type.size == 64\r\n ? module.createBinary(BinaryOp.NeI64, expr, module.createI64(0))\r\n : expr;\r\n }\r\n case TypeKind.F32: {\r\n return module.createBinary(BinaryOp.NeF32, expr, module.createF32(0));\r\n }\r\n case TypeKind.F64: {\r\n return module.createBinary(BinaryOp.NeF64, expr, module.createF64(0));\r\n }\r\n default: {\r\n assert(false);\r\n return module.createI32(0);\r\n }\r\n }\r\n }\r\n\r\n /** Makes an allocation expression for an instance of the specified class. */\r\n makeAllocate(classInstance: Class, reportNode: Node): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var nativeSizeType = this.options.nativeSizeType;\r\n\r\n // allocate the necessary memory and tee the pointer to a temp. local for reuse\r\n var tempLocal = currentFunction.getTempLocal(classInstance.type, false);\r\n var initializers = new Array();\r\n initializers.push(\r\n module.createSetLocal(tempLocal.index,\r\n compileAllocate(this, classInstance, reportNode)\r\n )\r\n );\r\n\r\n // apply field initializers\r\n if (classInstance.members) {\r\n for (let member of classInstance.members.values()) {\r\n if (member.kind == ElementKind.FIELD) {\r\n let field = member;\r\n let fieldType = field.type;\r\n let nativeFieldType = fieldType.toNativeType();\r\n let fieldDeclaration = field.prototype.declaration;\r\n assert(!field.isAny(CommonFlags.CONST));\r\n if (fieldDeclaration.initializer) { // use initializer\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n this.compileExpression( // reports\r\n fieldDeclaration.initializer,\r\n fieldType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n ),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n } else { // initialize with zero\r\n // TODO: might be unnecessary if the ctor initializes the field\r\n let parameterIndex = (field.prototype.declaration).parameterIndex;\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n parameterIndex >= 0 // initialized via parameter\r\n ? module.createGetLocal(1 + parameterIndex, nativeFieldType)\r\n : fieldType.toNativeZero(module),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n }\r\n }\r\n }\r\n }\r\n\r\n // return `this`\r\n initializers.push(\r\n module.createGetLocal(tempLocal.index, nativeSizeType)\r\n );\r\n\r\n currentFunction.freeTempLocal(tempLocal);\r\n this.currentType = classInstance.type;\r\n return module.createBlock(null, initializers, nativeSizeType);\r\n }\r\n\r\n /** Makes a conditional allocation expression inside of the constructor of the specified class. */\r\n makeConditionalAllocate(classInstance: Class, reportNode: Node): ExpressionRef {\r\n // requires that `this` is the first local\r\n var module = this.module;\r\n var nativeSizeType = this.options.nativeSizeType;\r\n this.currentType = classInstance.type;\r\n return module.createIf(\r\n nativeSizeType == NativeType.I64\r\n ? module.createBinary(\r\n BinaryOp.NeI64,\r\n module.createGetLocal(0, NativeType.I64),\r\n module.createI64(0)\r\n )\r\n : module.createGetLocal(0, NativeType.I32),\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createTeeLocal(0,\r\n this.makeAllocate(classInstance, reportNode)\r\n )\r\n );\r\n }\r\n\r\n /** Adds the debug location of the specified expression at the specified range to the source map. */\r\n addDebugLocation(expr: ExpressionRef, range: Range): void {\r\n var currentFunction = this.currentFunction;\r\n var source = range.source;\r\n if (source.debugInfoIndex < 0) source.debugInfoIndex = this.module.addDebugInfoFile(source.normalizedPath);\r\n range.debugInfoRef = expr;\r\n currentFunction.debugLocations.push(range);\r\n }\r\n}\r\n\r\n// helpers\r\n\r\nfunction mangleImportName(\r\n element: Element,\r\n declaration: DeclarationStatement,\r\n parentElement: Element | null = null\r\n): void {\r\n mangleImportName_moduleName = parentElement ? parentElement.simpleName : declaration.range.source.simplePath;\r\n mangleImportName_elementName = element.simpleName;\r\n\r\n if (!element.hasDecorator(DecoratorFlags.EXTERNAL)) return;\r\n\r\n var program = element.program;\r\n var decorator = assert(findDecorator(DecoratorKind.EXTERNAL, declaration.decorators));\r\n var args = decorator.arguments;\r\n if (args && args.length) {\r\n let arg = args[0];\r\n if (arg.kind == NodeKind.LITERAL && (arg).literalKind == LiteralKind.STRING) {\r\n mangleImportName_elementName = (arg).value;\r\n if (args.length >= 2) {\r\n arg = args[1];\r\n if (arg.kind == NodeKind.LITERAL && (arg).literalKind == LiteralKind.STRING) {\r\n mangleImportName_moduleName = mangleImportName_elementName;\r\n mangleImportName_elementName = (arg).value;\r\n if (args.length > 2) {\r\n program.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n decorator.range, \"2\", args.length.toString()\r\n );\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.String_literal_expected,\r\n arg.range\r\n );\r\n }\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.String_literal_expected,\r\n arg.range\r\n );\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n decorator.range, \"1\", \"0\"\r\n );\r\n }\r\n}\r\n\r\nvar mangleImportName_moduleName: string;\r\nvar mangleImportName_elementName: string;\r\n","/**\r\n * 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 Unterminated_string_literal = 1002,\r\n Identifier_expected = 1003,\r\n _0_expected = 1005,\r\n A_file_cannot_have_a_reference_to_itself = 1006,\r\n Trailing_comma_not_allowed = 1009,\r\n Unexpected_token = 1012,\r\n A_rest_parameter_must_be_last_in_a_parameter_list = 1014,\r\n Parameter_cannot_have_question_mark_and_initializer = 1015,\r\n A_required_parameter_cannot_follow_an_optional_parameter = 1016,\r\n Statements_are_not_allowed_in_ambient_contexts = 1036,\r\n Initializers_are_not_allowed_in_ambient_contexts = 1039,\r\n _0_modifier_cannot_be_used_here = 1042,\r\n A_rest_parameter_cannot_be_optional = 1047,\r\n A_rest_parameter_cannot_have_an_initializer = 1048,\r\n A_set_accessor_must_have_exactly_one_parameter = 1049,\r\n A_set_accessor_parameter_cannot_have_an_initializer = 1052,\r\n A_get_accessor_cannot_have_parameters = 1054,\r\n Enum_member_must_have_initializer = 1061,\r\n Type_parameters_cannot_appear_on_a_constructor_declaration = 1092,\r\n Type_annotation_cannot_appear_on_a_constructor_declaration = 1093,\r\n An_accessor_cannot_have_type_parameters = 1094,\r\n A_set_accessor_cannot_have_a_return_type_annotation = 1095,\r\n Type_parameter_list_cannot_be_empty = 1098,\r\n A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement = 1104,\r\n A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement = 1105,\r\n A_return_statement_can_only_be_used_within_a_function_body = 1108,\r\n Expression_expected = 1109,\r\n Type_expected = 1110,\r\n A_default_clause_cannot_appear_more_than_once_in_a_switch_statement = 1113,\r\n Duplicate_label_0 = 1114,\r\n Octal_literals_are_not_allowed_in_strict_mode = 1121,\r\n Digit_expected = 1124,\r\n Hexadecimal_digit_expected = 1125,\r\n Unexpected_end_of_text = 1126,\r\n Invalid_character = 1127,\r\n _case_or_default_expected = 1130,\r\n A_declare_modifier_cannot_be_used_in_an_already_ambient_context = 1038,\r\n Type_argument_expected = 1140,\r\n String_literal_expected = 1141,\r\n Line_break_not_permitted_here = 1142,\r\n Declaration_expected = 1146,\r\n _const_declarations_must_be_initialized = 1155,\r\n Unterminated_regular_expression_literal = 1161,\r\n Interface_declaration_cannot_have_implements_clause = 1176,\r\n Binary_digit_expected = 1177,\r\n Octal_digit_expected = 1178,\r\n An_implementation_cannot_be_declared_in_ambient_contexts = 1183,\r\n An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive = 1198,\r\n Unterminated_Unicode_escape_sequence = 1199,\r\n Decorators_are_not_valid_here = 1206,\r\n _abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration = 1242,\r\n Method_0_cannot_have_an_implementation_because_it_is_marked_abstract = 1245,\r\n A_class_may_only_extend_another_class = 1311,\r\n A_parameter_property_cannot_be_declared_using_a_rest_parameter = 1317,\r\n Duplicate_identifier_0 = 2300,\r\n Cannot_find_name_0 = 2304,\r\n Module_0_has_no_exported_member_1 = 2305,\r\n Generic_type_0_requires_1_type_argument_s = 2314,\r\n Type_0_is_not_generic = 2315,\r\n Type_0_is_not_assignable_to_type_1 = 2322,\r\n Index_signature_is_missing_in_type_0 = 2329,\r\n _this_cannot_be_referenced_in_current_location = 2332,\r\n _super_can_only_be_referenced_in_a_derived_class = 2335,\r\n Property_0_does_not_exist_on_type_1 = 2339,\r\n Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures = 2349,\r\n Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature = 2351,\r\n A_function_whose_declared_type_is_not_void_must_return_a_value = 2355,\r\n The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access = 2357,\r\n The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access = 2364,\r\n Operator_0_cannot_be_applied_to_types_1_and_2 = 2365,\r\n _get_and_set_accessor_must_have_the_same_type = 2380,\r\n Constructor_implementation_is_missing = 2390,\r\n Function_implementation_is_missing_or_not_immediately_following_the_declaration = 2391,\r\n Multiple_constructor_implementations_are_not_allowed = 2392,\r\n Duplicate_function_implementation = 2393,\r\n Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local = 2395,\r\n Type_0_has_no_property_1 = 2460,\r\n The_0_operator_cannot_be_applied_to_type_1 = 2469,\r\n In_const_enum_declarations_member_initializer_must_be_constant_expression = 2474,\r\n Export_declaration_conflicts_with_exported_declaration_of_0 = 2484,\r\n Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property = 2540,\r\n The_target_of_an_assignment_must_be_a_variable_or_a_property_access = 2541,\r\n Index_signature_in_type_0_only_permits_reading = 2542,\r\n Expected_0_arguments_but_got_1 = 2554,\r\n Expected_at_least_0_arguments_but_got_1 = 2555,\r\n Expected_0_type_arguments_but_got_1 = 2558,\r\n A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums = 2651,\r\n Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration = 2673,\r\n Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration = 2674,\r\n Namespace_0_has_no_exported_member_1 = 2694,\r\n File_0_not_found = 6054,\r\n Numeric_separators_are_not_allowed_here = 6188,\r\n Multiple_consecutive_numeric_separators_are_not_permitted = 6189\r\n}\r\n\r\n/** Translates a diagnostic code to its respective string. */\r\nexport function diagnosticCodeToString(code: DiagnosticCode): string {\r\n switch (code) {\r\n case 100: return \"Operation not supported.\";\r\n case 101: return \"Operation is unsafe.\";\r\n case 102: return \"User-defined: {0}\";\r\n case 200: return \"Conversion from type '{0}' to '{1}' requires an explicit cast.\";\r\n case 201: return \"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.\";\r\n case 202: return \"Type '{0}' cannot be changed to type '{1}'.\";\r\n case 203: return \"Type '{0}' cannot be reinterpreted as type '{1}'.\";\r\n case 204: return \"Basic type '{0}' cannot be nullable.\";\r\n case 205: return \"Cannot export a mutable global.\";\r\n case 206: return \"Compiling constant with non-constant initializer as mutable.\";\r\n case 207: return \"Unmanaged classes cannot extend managed classes and vice-versa.\";\r\n case 208: return \"Unmanaged classes cannot implement interfaces.\";\r\n case 209: return \"Invalid regular expression flags.\";\r\n case 210: return \"Implementation '{0}' must match the signature '{1}'.\";\r\n case 211: return \"Class '{0}' is sealed and cannot be extended.\";\r\n case 212: return \"Decorator '{0}' is not valid here.\";\r\n case 213: return \"Duplicate decorator.\";\r\n case 214: return \"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.\";\r\n case 215: return \"Optional parameter must have an initializer.\";\r\n case 216: return \"Constructor of class '{0}' must not require any arguments.\";\r\n case 217: return \"Function '{0}' cannot be inlined into itself.\";\r\n case 218: return \"Cannot access method '{0}' without calling it as it requires 'this' to be set.\";\r\n case 1002: return \"Unterminated string literal.\";\r\n case 1003: return \"Identifier expected.\";\r\n case 1005: return \"'{0}' expected.\";\r\n case 1006: return \"A file cannot have a reference to itself.\";\r\n case 1009: return \"Trailing comma not allowed.\";\r\n case 1012: return \"Unexpected token.\";\r\n case 1014: return \"A rest parameter must be last in a parameter list.\";\r\n case 1015: return \"Parameter cannot have question mark and initializer.\";\r\n case 1016: return \"A required parameter cannot follow an optional parameter.\";\r\n case 1036: return \"Statements are not allowed in ambient contexts.\";\r\n case 1039: return \"Initializers are not allowed in ambient contexts.\";\r\n case 1042: return \"'{0}' modifier cannot be used here.\";\r\n case 1047: return \"A rest parameter cannot be optional.\";\r\n case 1048: return \"A rest parameter cannot have an initializer.\";\r\n case 1049: return \"A 'set' accessor must have exactly one parameter.\";\r\n case 1052: return \"A 'set' accessor parameter cannot have an initializer.\";\r\n case 1054: return \"A 'get' accessor cannot have parameters.\";\r\n case 1061: return \"Enum member must have initializer.\";\r\n case 1092: return \"Type parameters cannot appear on a constructor declaration.\";\r\n case 1093: return \"Type annotation cannot appear on a constructor declaration.\";\r\n case 1094: return \"An accessor cannot have type parameters.\";\r\n case 1095: return \"A 'set' accessor cannot have a return type annotation.\";\r\n case 1098: return \"Type parameter list cannot be empty.\";\r\n case 1104: return \"A 'continue' statement can only be used within an enclosing iteration statement.\";\r\n case 1105: return \"A 'break' statement can only be used within an enclosing iteration or switch statement.\";\r\n case 1108: return \"A 'return' statement can only be used within a function body.\";\r\n case 1109: return \"Expression expected.\";\r\n case 1110: return \"Type expected.\";\r\n case 1113: return \"A 'default' clause cannot appear more than once in a 'switch' statement.\";\r\n case 1114: return \"Duplicate label '{0}'.\";\r\n case 1121: return \"Octal literals are not allowed in strict mode.\";\r\n case 1124: return \"Digit expected.\";\r\n case 1125: return \"Hexadecimal digit expected.\";\r\n case 1126: return \"Unexpected end of text.\";\r\n case 1127: return \"Invalid character.\";\r\n case 1130: return \"'case' or 'default' expected.\";\r\n case 1038: return \"A 'declare' modifier cannot be used in an already ambient context.\";\r\n case 1140: return \"Type argument expected.\";\r\n case 1141: return \"String literal expected.\";\r\n case 1142: return \"Line break not permitted here.\";\r\n case 1146: return \"Declaration expected.\";\r\n case 1155: return \"'const' declarations must be initialized.\";\r\n case 1161: return \"Unterminated regular expression literal.\";\r\n case 1176: return \"Interface declaration cannot have 'implements' clause.\";\r\n case 1177: return \"Binary digit expected.\";\r\n case 1178: return \"Octal digit expected.\";\r\n case 1183: return \"An implementation cannot be declared in ambient contexts.\";\r\n case 1198: return \"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.\";\r\n case 1199: return \"Unterminated Unicode escape sequence.\";\r\n case 1206: return \"Decorators are not valid here.\";\r\n case 1242: return \"'abstract' modifier can only appear on a class, method, or property declaration.\";\r\n case 1245: return \"Method '{0}' cannot have an implementation because it is marked abstract.\";\r\n case 1311: return \"A class may only extend another class.\";\r\n case 1317: return \"A parameter property cannot be declared using a rest parameter.\";\r\n case 2300: return \"Duplicate identifier '{0}'.\";\r\n case 2304: return \"Cannot find name '{0}'.\";\r\n case 2305: return \"Module '{0}' has no exported member '{1}'.\";\r\n case 2314: return \"Generic type '{0}' requires {1} type argument(s).\";\r\n case 2315: return \"Type '{0}' is not generic.\";\r\n case 2322: return \"Type '{0}' is not assignable to type '{1}'.\";\r\n case 2329: return \"Index signature is missing in type '{0}'.\";\r\n case 2332: return \"'this' cannot be referenced in current location.\";\r\n case 2335: return \"'super' can only be referenced in a derived class.\";\r\n case 2339: return \"Property '{0}' does not exist on type '{1}'.\";\r\n case 2349: return \"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.\";\r\n case 2351: return \"Cannot use 'new' with an expression whose type lacks a construct signature.\";\r\n case 2355: return \"A function whose declared type is not 'void' must return a value.\";\r\n case 2357: return \"The operand of an increment or decrement operator must be a variable or a property access.\";\r\n case 2364: return \"The left-hand side of an assignment expression must be a variable or a property access.\";\r\n case 2365: return \"Operator '{0}' cannot be applied to types '{1}' and '{2}'.\";\r\n case 2380: return \"'get' and 'set' accessor must have the same type.\";\r\n case 2390: return \"Constructor implementation is missing.\";\r\n case 2391: return \"Function implementation is missing or not immediately following the declaration.\";\r\n case 2392: return \"Multiple constructor implementations are not allowed.\";\r\n case 2393: return \"Duplicate function implementation.\";\r\n case 2395: return \"Individual declarations in merged declaration '{0}' must be all exported or all local.\";\r\n case 2460: return \"Type '{0}' has no property '{1}'.\";\r\n case 2469: return \"The '{0}' operator cannot be applied to type '{1}'.\";\r\n case 2474: return \"In 'const' enum declarations member initializer must be constant expression.\";\r\n case 2484: return \"Export declaration conflicts with exported declaration of '{0}'.\";\r\n case 2540: return \"Cannot assign to '{0}' because it is a constant or a read-only property.\";\r\n case 2541: return \"The target of an assignment must be a variable or a property access.\";\r\n case 2542: return \"Index signature in type '{0}' only permits reading.\";\r\n case 2554: return \"Expected {0} arguments, but got {1}.\";\r\n case 2555: return \"Expected at least {0} arguments, but got {1}.\";\r\n case 2558: return \"Expected {0} type arguments, but got {1}.\";\r\n case 2651: return \"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.\";\r\n case 2673: return \"Constructor of class '{0}' is private and only accessible within the class declaration.\";\r\n case 2674: return \"Constructor of class '{0}' is protected and only accessible within the class declaration.\";\r\n case 2694: return \"Namespace '{0}' has no exported member '{1}'.\";\r\n case 6054: return \"File '{0}' not found.\";\r\n case 6188: return \"Numeric separators are not allowed here.\";\r\n case 6189: return \"Multiple consecutive numeric separators are not permitted.\";\r\n default: return \"\";\r\n }\r\n}\r\n","/**\r\n * 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).emitText();\r\n};\r\n\r\nModule.prototype.toAsmjs = function(this: Module) {\r\n return new binaryen.Module(this.ref).emitAsmjs();\r\n};\r\n","// 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\nObject.defineProperties(\r\n globalScope[\"i8\"] = function i8(value) { return value << 24 >> 24; }\r\n, {\r\n \"MIN_VALUE\": { value: -128, writable: false },\r\n \"MAX_VALUE\": { value: 127, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"i16\"] = function i16(value) { return value << 16 >> 16; }\r\n, {\r\n \"MIN_VALUE\": { value: -32768, writable: false },\r\n \"MAX_VALUE\": { value: 32767, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"i32\"] = globalScope[\"isize\"] = function i32(value) { return value | 0; }\r\n, {\r\n \"MIN_VALUE\": { value: -2147483648, writable: false },\r\n \"MAX_VALUE\": { value: 2147483647, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u8\"] = function u8(value) { return value & 0xff; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 255, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u16\"] = function u16(value) { return value & 0xffff; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 65535, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u32\"] = globalScope[\"usize\"] = function u32(value) { return value >>> 0; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 4294967295, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"bool\"] = function bool(value) { return !!value; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 1, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"f32\"] = function f32(value) { return Math.fround(value); }\r\n, {\r\n \"MIN_VALUE\": { value: Math.fround(-3.40282347e+38), writable: false },\r\n \"MAX_VALUE\": { value: Math.fround(3.40282347e+38), writable: false },\r\n \"MIN_POSITIVE_VALUE\": { value: Math.fround(1.175494351e-38), writable: false },\r\n \"MIN_SAFE_INTEGER\": { value: -16777215, writable: false },\r\n \"MAX_SAFE_INTEGER\": { value: 16777215, writable: false },\r\n \"EPSILON\": { value: Math.fround(1.19209290e-07), writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"f64\"] = function f64(value) { return +value; }\r\n, {\r\n \"MIN_VALUE\": { value: -1.7976931348623157e+308, writable: false },\r\n \"MAX_VALUE\": { value: 1.7976931348623157e+308, writable: false },\r\n \"MIN_POSITIVE_VALUE\": { value: 2.2250738585072014e-308 , writable: false },\r\n \"MIN_SAFE_INTEGER\": { value: -9007199254740991, writable: false },\r\n \"MAX_SAFE_INTEGER\": { value: 9007199254740991, writable: false },\r\n \"EPSILON\": { value: 2.2204460492503131e-16, writable: false }\r\n});\r\n\r\nglobalScope[\"clz\"] = Math.clz32;\r\n\r\nglobalScope[\"ctz\"] = function ctz(value) {\r\n var c = Math.clz32(value & -value);\r\n return value ? 31 - c : c;\r\n};\r\n\r\nglobalScope[\"popcnt\"] = function popcnt(value) {\r\n value -= value >>> 1 & 0x55555555;\r\n value = (value & 0x33333333) + (value >>> 2 & 0x33333333);\r\n return (((value + (value >>> 4)) & 0x0F0F0F0F) * 0x01010101) >>> 24;\r\n};\r\n\r\nglobalScope[\"rotl\"] = function rotl(value, shift) {\r\n shift &= 31;\r\n return (value << shift) | (value >>> (32 - shift));\r\n};\r\n\r\nglobalScope[\"rotr\"] = function rotr(value, shift) {\r\n shift &= 31;\r\n return (value >>> shift) | (value << (32 - shift));\r\n};\r\n\r\nglobalScope[\"abs\"] = Math.abs;\r\n\r\nglobalScope[\"max\"] = Math.max;\r\n\r\nglobalScope[\"min\"] = Math.min;\r\n\r\nglobalScope[\"ceil\"] = Math.ceil;\r\n\r\nglobalScope[\"floor\"] = Math.floor;\r\n\r\n// Adopt code from https://github.com/rfk/wasm-polyfill\r\nglobalScope[\"nearest\"] = function nearest(value) {\r\n if (Math.abs(value - Math.trunc(value)) === 0.5) {\r\n return 2.0 * Math.round(value * 0.5);\r\n }\r\n return Math.round(value);\r\n};\r\n\r\nglobalScope[\"select\"] = function select(ifTrue, ifFalse, condition) {\r\n return condition ? ifTrue : ifFalse;\r\n};\r\n\r\nglobalScope[\"sqrt\"] = Math.sqrt;\r\n\r\nglobalScope[\"trunc\"] = Math.trunc;\r\n\r\nglobalScope[\"copysign\"] = function copysign(x, y) {\r\n return Math.abs(x) * Math.sign(y);\r\n};\r\n\r\nglobalScope[\"bswap\"] = function bswap(value) {\r\n var a = value >> 8 & 0x00FF00FF;\r\n var b = (value & 0x00FF00FF) << 8;\r\n value = a | b;\r\n a = value >> 16 & 0x0000FFFF;\r\n b = (value & 0x0000FFFF) << 16;\r\n return a | b;\r\n};\r\n\r\nglobalScope[\"bswap16\"] = function bswap16(value) {\r\n return ((value << 8) & 0xFF00) | ((value >> 8) & 0x00FF) | (value & 0xFFFF0000);\r\n};\r\n\r\nfunction UnreachableError() {\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, UnreachableError);\r\n } else {\r\n this.stack = this.name + \": \" + this.message + \"\\n\" + new Error().stack;\r\n }\r\n}\r\nUnreachableError.prototype = Object.create(Error.prototype);\r\nUnreachableError.prototype.name = \"UnreachableError\";\r\nUnreachableError.prototype.message = \"unreachable\";\r\n\r\nglobalScope[\"unreachable\"] = function unreachable() {\r\n throw new UnreachableError();\r\n};\r\n\r\nfunction AssertionError(message) {\r\n this.message = message || \"assertion failed\";\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, AssertionError);\r\n } else {\r\n this.stack = this.name + \": \" + this.message + \"\\n\" + new Error().stack;\r\n }\r\n}\r\nAssertionError.prototype = Object.create(Error.prototype);\r\nAssertionError.prototype.name = \"AssertionError\";\r\n\r\nglobalScope[\"assert\"] = function assert(isTrueish, message) {\r\n if (isTrueish) return isTrueish;\r\n throw new AssertionError(message);\r\n};\r\n\r\nglobalScope[\"changetype\"] = function changetype(value) {\r\n return value;\r\n};\r\n\r\nglobalScope[\"parseI32\"] = function parseI32(str, radix) {\r\n return parseInt(str, undefined) | 0;\r\n};\r\n\r\nString[\"fromCharCodes\"] = function fromCharCodes(arr) {\r\n return String.fromCharCode.apply(String, arr);\r\n};\r\n\r\nString[\"fromCodePoints\"] = function fromCodePoints(arr) {\r\n return String.fromCodePoint.apply(String, arr);\r\n};\r\n\r\nglobalScope[\"isInteger\"] = Number.isInteger;\r\n\r\nglobalScope[\"isFloat\"] = function isFloat(arg) {\r\n return typeof arg === \"number\";\r\n};\r\n\r\nglobalScope[\"isReference\"] = function isClass(arg) {\r\n return typeof arg === \"object\" || typeof arg === \"string\";\r\n};\r\n\r\nglobalScope[\"isString\"] = function isString(arg) {\r\n return typeof arg === \"string\" || arg instanceof String;\r\n};\r\n\r\nglobalScope[\"isArray\"] = Array.isArray;\r\n\r\nglobalScope[\"unchecked\"] = function(expr) {\r\n return expr;\r\n};\r\n\r\nglobalScope[\"fmod\"] = function fmod(x, y) {\r\n return x % y;\r\n};\r\n\r\nglobalScope[\"fmodf\"] = function fmodf(x, y) {\r\n return Math.fround(x % y);\r\n};\r\n\r\nglobalScope[\"JSMath\"] = Math;\r\n\r\nglobalScope[\"memory\"] = (() => {\r\n var HEAP = new Uint8Array(0);\r\n var HEAP_OFFSET = 0;\r\n return {\r\n allocate: globalScope[\"__memory_allocate\"] || function allocate(size) {\r\n if (!(size >>>= 0)) return 0;\r\n if (HEAP_OFFSET + size > HEAP.length) {\r\n var oldHeap = HEAP;\r\n HEAP = new Uint8Array(Math.max(65536, HEAP.length + size, HEAP.length * 2));\r\n HEAP.set(oldHeap);\r\n }\r\n var ptr = HEAP_OFFSET;\r\n if ((HEAP_OFFSET += size) & 7) HEAP_OFFSET = (HEAP_OFFSET | 7) + 1;\r\n return ptr;\r\n },\r\n free: globalScope[\"__memory_free\"] || function free(ptr) { },\r\n copy: globalScope[\"__memory_copy\"] || function copy(dest, src, size) {\r\n HEAP.copyWithin(dest, src, src + size);\r\n }\r\n };\r\n})();\r\n\r\nglobalScope[\"store\"] = globalScope[\"__store\"] || function store(ptr, value, offset) {\r\n HEAP[ptr + (offset | 0)] = value;\r\n};\r\n\r\nglobalScope[\"load\"] = globalScope[\"__load\"] || function load(ptr, offset) {\r\n return HEAP[ptr + (offset | 0)];\r\n};\r\n","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.createCallImport(\r\n abortInstance.internalName, [\r\n messageArg,\r\n filenameArg,\r\n module.createI32(reportNode.range.line),\r\n module.createI32(reportNode.range.column)\r\n ],\r\n NativeType.None\r\n ),\r\n module.createUnreachable()\r\n ]);\r\n}\r\n\r\n/** Compiles the iterateRoots function if requires. */\r\nexport function compileIterateRoots(compiler: Compiler): void {\r\n var module = compiler.module;\r\n var exprs = new Array();\r\n\r\n for (let element of compiler.program.elementsLookup.values()) {\r\n if (element.kind != ElementKind.GLOBAL) continue;\r\n let global = element;\r\n let classReference = global.type.classReference;\r\n if (\r\n global.is(CommonFlags.COMPILED) &&\r\n classReference !== null &&\r\n !classReference.hasDecorator(DecoratorFlags.UNMANAGED)\r\n ) {\r\n if (global.is(CommonFlags.INLINED)) {\r\n let value = global.constantIntegerValue;\r\n exprs.push(\r\n module.createCallIndirect(\r\n module.createGetLocal(0, NativeType.I32),\r\n [\r\n compiler.options.isWasm64\r\n ? module.createI64(i64_low(value), i64_high(value))\r\n : module.createI32(i64_low(value))\r\n ],\r\n \"iv\"\r\n )\r\n );\r\n } else {\r\n exprs.push(\r\n module.createCallIndirect(\r\n module.createGetLocal(0, NativeType.I32),\r\n [\r\n module.createGetGlobal(\r\n global.internalName,\r\n compiler.options.nativeSizeType\r\n )\r\n ],\r\n \"iv\"\r\n )\r\n );\r\n }\r\n }\r\n }\r\n var typeRef = compiler.ensureFunctionType([ Type.i32 ], Type.void);\r\n module.addFunction(\"~iterateRoots\", typeRef, [],\r\n exprs.length\r\n ? module.createBlock(null, exprs)\r\n : module.createNop()\r\n );\r\n}\r\n\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(0);\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 functionTable[gcHookIndex] = module.addFunction(\r\n classInstance.internalName + \"~gc\",\r\n compiler.ensureFunctionType(null, Type.void, options.usizeType),\r\n null,\r\n module.createBlock(null, body)\r\n );\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.CallImport:\r\n case ExpressionId.CallIndirect: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.GetLocal: {\r\n this.push(\"$\");\r\n this.push(getGetLocalIndex(expr).toString(10));\r\n return;\r\n }\r\n case ExpressionId.SetLocal: {\r\n this.push(\"$\");\r\n this.push(getSetLocalIndex(expr).toString(10));\r\n this.push(\" = \");\r\n this.decompileExpression(getSetLocalValue(expr));\r\n return;\r\n }\r\n case ExpressionId.GetGlobal:\r\n case ExpressionId.SetGlobal: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.Load: {\r\n this.push(\"load<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(getLoadOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getLoadPtr(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Store: {\r\n this.push(\"store<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(getStoreOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getStorePtr(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getStoreValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Const: {\r\n switch (type) {\r\n case NativeType.I32: {\r\n this.push(getConstValueI32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.I64: {\r\n this.push(\r\n i64_to_string(\r\n i64_new(\r\n getConstValueI64Low(expr),\r\n getConstValueI64High(expr)\r\n )\r\n )\r\n );\r\n return;\r\n }\r\n case NativeType.F32: {\r\n this.push(getConstValueF32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.F64: {\r\n this.push(getConstValueF64(expr).toString(10));\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Unary: {\r\n switch (getUnaryOp(expr)) {\r\n case UnaryOp.ClzI32: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI32: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI32: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NegF32:\r\n case UnaryOp.NegF64: {\r\n this.push(\"-\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.AbsF32: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF32: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF32: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF32: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF32: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF32: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.EqzI32:\r\n case UnaryOp.EqzI64: {\r\n this.push(\"!\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ClzI64: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI64: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI64: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.AbsF64: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF64: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF64: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF64: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF64: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF64: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ExtendI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ExtendU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.WrapI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.PromoteF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.DemoteF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Binary: { // TODO: precedence\r\n switch (getBinaryOp(expr)) {\r\n case BinaryOp.AddI32:\r\n case BinaryOp.AddI64:\r\n case BinaryOp.AddF32:\r\n case BinaryOp.AddF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" + \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.SubI32:\r\n case BinaryOp.SubI64:\r\n case BinaryOp.SubF32:\r\n case BinaryOp.SubF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" - \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.MulI32:\r\n case BinaryOp.MulI64:\r\n case BinaryOp.MulF32:\r\n case BinaryOp.MulF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" * \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivI32:\r\n case BinaryOp.DivI64:\r\n case BinaryOp.DivF32:\r\n case BinaryOp.DivF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.AndI32:\r\n case BinaryOp.AndI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" & \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.OrI32:\r\n case BinaryOp.OrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" | \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.XorI32:\r\n case BinaryOp.XorI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" ^ \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShlI32:\r\n case BinaryOp.ShlI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" << \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrU32:\r\n case BinaryOp.ShrU64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >>> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrI32:\r\n case BinaryOp.ShrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI32: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI32: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.EqI32:\r\n case BinaryOp.EqI64:\r\n case BinaryOp.EqF32:\r\n case BinaryOp.EqF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" == \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.NeI32:\r\n case BinaryOp.NeI64:\r\n case BinaryOp.NeF32:\r\n case BinaryOp.NeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" != \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtI32:\r\n case BinaryOp.LtI64:\r\n case BinaryOp.LtF32:\r\n case BinaryOp.LtF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeI32:\r\n case BinaryOp.LeI64:\r\n case BinaryOp.LeF32:\r\n case BinaryOp.LeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtI32:\r\n case BinaryOp.GtI64:\r\n case BinaryOp.GtF32:\r\n case BinaryOp.GtF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeI32:\r\n case BinaryOp.GeI64:\r\n case BinaryOp.GeF32:\r\n case BinaryOp.GeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI64: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI64: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.LtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.CopysignF32: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF32: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF32: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.CopysignF64: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF64: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF64: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n return;\r\n }\r\n case ExpressionId.Select: {\r\n this.push(\"select<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.decompileExpression(getSelectThen(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectElse(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectCondition(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Drop: {\r\n this.decompileExpression(getDropValue(expr));\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Return: {\r\n if (nested = getReturnValue(expr)) {\r\n this.push(\"return \");\r\n this.decompileExpression(nested);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"return;\\n\");\r\n }\r\n return;\r\n }\r\n case ExpressionId.Host: {\r\n switch (getHostOp(expr)) {\r\n case HostOp.CurrentMemory: {\r\n this.push(\"memory.size()\");\r\n return;\r\n }\r\n case HostOp.GrowMemory: {\r\n this.push(\"memory.grow(\");\r\n this.decompileExpression(getHostOperand(expr, 0));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Nop: {\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Unreachable: {\r\n this.push(\"unreachable()\");\r\n return;\r\n }\r\n case ExpressionId.AtomicCmpxchg:\r\n case ExpressionId.AtomicRMW:\r\n case ExpressionId.AtomicWait:\r\n case ExpressionId.AtomicWake:\r\n }\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n private push(text: string): void {\r\n // mostly here so we can add debugging if necessary\r\n this.text.push(text);\r\n }\r\n\r\n finish(): string {\r\n var ret = this.text.join(\"\");\r\n this.text = [];\r\n return ret;\r\n }\r\n}\r\n\r\nfunction nativeTypeToType(type: NativeType): string {\r\n switch (type) {\r\n case NativeType.None: return \"void\";\r\n case NativeType.I32: return \"i32\";\r\n case NativeType.I64: return \"i64\";\r\n case NativeType.F32: return \"f32\";\r\n case NativeType.F64: return \"f64\";\r\n case NativeType.Unreachable: throw new Error(\"unreachable type\");\r\n case NativeType.Auto: throw new Error(\"auto type\");\r\n default: throw new Error(\"unexpected type\");\r\n }\r\n}\r\n","/**\r\n * 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\r\n var type: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n }\r\n\r\n var initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n initializer = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!initializer) return null;\r\n } else {\r\n if (flags & CommonFlags.CONST) {\r\n if (!(flags & CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode._const_declarations_must_be_initialized,\r\n identifier.range\r\n ); // recoverable\r\n }\r\n } else if (!type) { // neither type nor initializer\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range(tn.pos)\r\n ); // recoverable\r\n }\r\n }\r\n return Node.createVariableDeclaration(\r\n identifier,\r\n type,\r\n initializer,\r\n parentDecorators,\r\n flags,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n }\r\n\r\n parseEnum(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): EnumDeclaration | null {\r\n\r\n // at 'enum': Identifier '{' (EnumValueDeclaration (',' EnumValueDeclaration )*)? '}' ';'?\r\n\r\n if (tn.next() != Token.IDENTIFIER) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.next() != Token.OPENBRACE) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n var members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseEnumValue(tn, CommonFlags.NONE);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n var ret = Node.createEnumDeclaration(\r\n identifier,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseEnumValue(\r\n tn: Tokenizer,\r\n parentFlags: CommonFlags\r\n ): EnumValueDeclaration | null {\r\n\r\n // before: Identifier ('=' Expression)?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var value: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n value = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!value) return null;\r\n }\r\n return Node.createEnumValueDeclaration(\r\n identifier,\r\n value,\r\n parentFlags,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n }\r\n\r\n parseReturn(\r\n tn: Tokenizer\r\n ): ReturnStatement | null {\r\n\r\n // at 'return': Expression | (';' | '}' | ...'\\n')\r\n\r\n var expr: Expression | null = null;\r\n if (\r\n tn.peek(true) != Token.SEMICOLON &&\r\n tn.nextToken != Token.CLOSEBRACE &&\r\n !tn.nextTokenOnNewLine\r\n ) {\r\n if (!(expr = this.parseExpression(tn))) return null;\r\n }\r\n\r\n var ret = Node.createReturnStatement(expr, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseTypeParameters(\r\n tn: Tokenizer\r\n ): TypeParameterNode[] | null {\r\n\r\n // at '<': TypeParameter (',' TypeParameter)* '>'\r\n\r\n var typeParameters = new Array();\r\n while (!tn.skip(Token.GREATERTHAN)) {\r\n let typeParameter = this.parseTypeParameter(tn);\r\n if (!typeParameter) return null;\r\n typeParameters.push(typeParameter);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.GREATERTHAN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n if (typeParameters.length === 0) {\r\n this.error(\r\n DiagnosticCode.Type_parameter_list_cannot_be_empty,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n return typeParameters;\r\n }\r\n\r\n parseTypeParameter(\r\n tn: Tokenizer\r\n ): TypeParameterNode | null {\r\n\r\n // before: Identifier ('extends' Type)?\r\n\r\n if (tn.next() == Token.IDENTIFIER) {\r\n let identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n let extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\r\n }\r\n return Node.createTypeParameter(\r\n identifier,\r\n extendsType,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n private parseParametersThis: TypeNode | null = null;\r\n\r\n parseParameters(\r\n tn: Tokenizer,\r\n isConstructor: bool = false\r\n ): ParameterNode[] | null {\r\n\r\n // at '(': (Parameter (',' Parameter)*)? ')'\r\n\r\n var parameters = new Array();\r\n var seenRest: ParameterNode | null = null;\r\n var seenOptional = false;\r\n var reportedRest = false;\r\n var thisType: CommonTypeNode | null = null;\r\n\r\n // check if there is a leading `this` parameter\r\n this.parseParametersThis = null;\r\n if (tn.skip(Token.THIS)) {\r\n if (tn.skip(Token.COLON)) {\r\n thisType = this.parseType(tn); // reports\r\n if (!thisType) return null;\r\n if (thisType.kind == NodeKind.TYPE) {\r\n this.parseParametersThis = thisType;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n thisType.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n return parameters;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n while (!tn.skip(Token.CLOSEPAREN)) {\r\n let param = this.parseParameter(tn, isConstructor); // reports\r\n if (!param) return null;\r\n if (seenRest && !reportedRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,\r\n seenRest.name.range\r\n );\r\n reportedRest = true;\r\n }\r\n switch (param.parameterKind) {\r\n default: {\r\n if (seenOptional) {\r\n this.error(\r\n DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,\r\n param.name.range\r\n );\r\n }\r\n break;\r\n }\r\n case ParameterKind.OPTIONAL: {\r\n seenOptional = true;\r\n break;\r\n }\r\n case ParameterKind.REST: {\r\n seenRest = param;\r\n break;\r\n }\r\n }\r\n parameters.push(param);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return parameters;\r\n }\r\n\r\n parseParameter(\r\n tn: Tokenizer,\r\n isConstructor: bool = false\r\n ): ParameterNode | null {\r\n\r\n // before: ('public' | 'private' | 'protected' | '...')? Identifier '?'? (':' Type)? ('=' Expression)?\r\n\r\n var isRest = false;\r\n var isOptional = false;\r\n var startRange: Range | null = null;\r\n var accessFlags: CommonFlags = CommonFlags.NONE;\r\n if (isConstructor) {\r\n if (tn.skip(Token.PUBLIC)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PROTECTED;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PRIVATE;\r\n }\r\n if (tn.peek() == Token.READONLY) {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek() != Token.COLON) { // modifier\r\n tn.discard(state);\r\n if (!startRange) startRange = tn.range();\r\n accessFlags |= CommonFlags.READONLY;\r\n } else { // identifier\r\n tn.reset(state);\r\n }\r\n }\r\n }\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n if (accessFlags) {\r\n this.error(\r\n DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,\r\n tn.range()\r\n );\r\n } else {\r\n startRange = tn.range();\r\n }\r\n isRest = true;\r\n }\r\n if (tn.skipIdentifier()) {\r\n if (!isRest) startRange = tn.range();\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let type: CommonTypeNode | null = null;\r\n if (isOptional = tn.skip(Token.QUESTION)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n identifier.range\r\n );\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n } else {\r\n type = Node.createOmittedType(tn.range(tn.pos));\r\n }\r\n let initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,\r\n identifier.range\r\n );\r\n }\r\n if (isOptional) {\r\n this.error(\r\n DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,\r\n identifier.range\r\n );\r\n } else {\r\n isOptional = true;\r\n }\r\n initializer = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!initializer) return null;\r\n }\r\n let param = Node.createParameter(\r\n identifier,\r\n type,\r\n initializer,\r\n isRest\r\n ? ParameterKind.REST\r\n : isOptional\r\n ? ParameterKind.OPTIONAL\r\n : ParameterKind.DEFAULT,\r\n Range.join(startRange, tn.range())\r\n );\r\n param.flags |= accessFlags;\r\n return param;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseFunction(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): FunctionDeclaration | null {\r\n\r\n // at 'function':\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // '(' Parameters (':' Type)?\r\n // '{' Statement* '}'\r\n // ';'?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range(tn.pos)\r\n );\r\n return null;\r\n }\r\n\r\n var name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var signatureStart: i32 = -1;\r\n\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n signatureStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n if (signatureStart < 0) {\r\n signatureStart = tn.tokenPos;\r\n }\r\n\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n var thisType = this.parseParametersThis;\r\n\r\n var isSetter = (flags & CommonFlags.SET) != 0;\r\n if (isSetter) {\r\n if (parameters.length != 1) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,\r\n name.range\r\n ); // recoverable\r\n }\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,\r\n name.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n if (flags & CommonFlags.GET) {\r\n if (parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n name.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn, true, isSetter);\r\n if (!returnType) return null;\r\n }\r\n\r\n if (!returnType) {\r\n returnType = Node.createOmittedType(\r\n tn.range(tn.pos)\r\n );\r\n if (!isSetter) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n var body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body) return null;\r\n } else if (!(flags & CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n tn.range(tn.pos)\r\n );\r\n }\r\n\r\n var ret = Node.createFunctionDeclaration(\r\n name,\r\n typeParameters,\r\n signature,\r\n body,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseFunctionExpression(tn: Tokenizer): FunctionExpression | null {\r\n var startPos = tn.tokenPos;\r\n var name: IdentifierExpression;\r\n var isArrow = false;\r\n\r\n // either at 'function':\r\n // Identifier?\r\n // '(' Parameters (':' Type)?\r\n // Statement\r\n\r\n if (tn.token == Token.FUNCTION) {\r\n if (tn.skipIdentifier()) {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else { // empty name\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.pos));\r\n }\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n // or at '(' of arrow function:\r\n // Parameters (':' Type)?\r\n // Statement\r\n\r\n } else {\r\n isArrow = true;\r\n assert(tn.token == Token.OPENPAREN);\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.tokenPos));\r\n }\r\n\r\n // TODO: type parameters? doesn't seem worth it.\r\n\r\n var signatureStart = tn.pos;\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n return this.parseFunctionExpressionCommon(tn, name, parameters, isArrow, startPos, signatureStart);\r\n }\r\n\r\n private parseFunctionExpressionCommon(\r\n tn: Tokenizer,\r\n name: IdentifierExpression,\r\n parameters: ParameterNode[],\r\n isArrow: bool,\r\n startPos: i32 = -1,\r\n signatureStart: i32 = -1\r\n ): FunctionExpression | null {\r\n if (startPos < 0) startPos = name.range.start;\r\n if (signatureStart < 0) signatureStart = startPos;\r\n\r\n var returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n\r\n if (isArrow) {\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"=>\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n var signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n null, // TODO?\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n var body: Statement | null;\r\n if (isArrow) {\r\n body = this.parseStatement(tn, false);\r\n } else {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"{\"\r\n );\r\n return null;\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n }\r\n if (!body) return null;\r\n\r\n var declaration = Node.createFunctionDeclaration(\r\n name,\r\n null,\r\n signature,\r\n body,\r\n null,\r\n isArrow ? CommonFlags.ARROW : CommonFlags.NONE,\r\n tn.range(startPos, tn.pos)\r\n );\r\n return Node.createFunctionExpression(declaration);\r\n }\r\n\r\n parseClassOrInterface(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): ClassDeclaration | null {\r\n\r\n // at ('class' | 'interface'):\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // ('extends' Type)?\r\n // ('implements' Type (',' Type)*)?\r\n // '{' ClassMember* '}'\r\n\r\n var isInterface = tn.token == Token.INTERFACE;\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n var identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n\r\n var typeParameters: TypeParameterNode[] | null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n } else {\r\n typeParameters = [];\r\n }\r\n\r\n var extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\r\n }\r\n\r\n var implementsTypes: TypeNode[] | null = null;\r\n if (tn.skip(Token.IMPLEMENTS)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode.Interface_declaration_cannot_have_implements_clause,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n do {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n if (!isInterface) {\r\n if (!implementsTypes) implementsTypes = [];\r\n implementsTypes.push(type);\r\n }\r\n } while (tn.skip(Token.COMMA));\r\n }\r\n\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n\r\n var members = new Array();\r\n var declaration: ClassDeclaration;\r\n if (isInterface) {\r\n assert(!implementsTypes);\r\n declaration = Node.createInterfaceDeclaration(\r\n identifier,\r\n typeParameters,\r\n extendsType,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n declaration = Node.createClassDeclaration(\r\n identifier,\r\n typeParameters,\r\n extendsType,\r\n implementsTypes,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseClassMember(tn, declaration);\r\n if (!member) return null;\r\n member.parent = declaration;\r\n members.push(member);\r\n } while (!tn.skip(Token.CLOSEBRACE));\r\n }\r\n return declaration;\r\n }\r\n\r\n parseClassExpression(tn: Tokenizer): ClassExpression | null {\r\n\r\n // at 'class': Identifier? '{' ... '}'\r\n\r\n var startPos = tn.tokenPos;\r\n var name: IdentifierExpression;\r\n\r\n if (tn.skipIdentifier()) {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.pos));\r\n }\r\n\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"{\"\r\n );\r\n return null;\r\n }\r\n\r\n var members = new Array();\r\n var declaration = Node.createClassDeclaration(\r\n name,\r\n [],\r\n null,\r\n null,\r\n members,\r\n null,\r\n CommonFlags.NONE,\r\n tn.range(startPos, tn.pos)\r\n );\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseClassMember(tn, declaration);\r\n if (!member) return null;\r\n member.parent = declaration;\r\n members.push(member);\r\n } while (!tn.skip(Token.CLOSEBRACE));\r\n }\r\n return Node.createClassExpression(declaration);\r\n }\r\n\r\n parseClassMember(\r\n tn: Tokenizer,\r\n parent: ClassDeclaration\r\n ): DeclarationStatement | null {\r\n\r\n // before:\r\n // ('public' | 'private' | 'protected')?\r\n // ('static' | 'abstract')?\r\n // 'readonly'?\r\n // ('get' | 'set')?\r\n // Identifier ...\r\n\r\n var startPos = tn.pos;\r\n var isInterface = parent.kind == NodeKind.INTERFACEDECLARATION;\r\n\r\n var decorators = new Array();\r\n while (tn.skip(Token.AT)) {\r\n let decorator = this.parseDecorator(tn);\r\n if (!decorator) break;\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode.Decorators_are_not_valid_here,\r\n decorator.range\r\n );\r\n }\r\n decorators.push(decorator);\r\n }\r\n\r\n // inherit ambient status\r\n var flags = parent.flags & CommonFlags.AMBIENT;\r\n\r\n // implemented methods are virtual\r\n if (isInterface) flags |= CommonFlags.VIRTUAL;\r\n\r\n if (tn.skip(Token.PUBLIC)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"public\"\r\n );\r\n }\r\n flags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"private\"\r\n );\r\n }\r\n flags |= CommonFlags.PRIVATE;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"protected\"\r\n );\r\n }\r\n flags |= CommonFlags.PROTECTED;\r\n }\r\n\r\n var staticStart: i32 = 0;\r\n var staticEnd: i32 = 0;\r\n var abstractStart: i32 = 0;\r\n var abstractEnd: i32 = 0;\r\n if (tn.skip(Token.STATIC)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"static\"\r\n );\r\n }\r\n flags |= CommonFlags.STATIC;\r\n staticStart = tn.tokenPos;\r\n staticEnd = tn.pos;\r\n } else {\r\n flags |= CommonFlags.INSTANCE;\r\n if (tn.skip(Token.ABSTRACT)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"abstract\"\r\n );\r\n }\r\n flags |= CommonFlags.ABSTRACT;\r\n abstractStart = tn.tokenPos;\r\n abstractEnd = tn.pos;\r\n }\r\n if (parent.flags & CommonFlags.GENERIC) {\r\n flags |= CommonFlags.GENERIC_CONTEXT;\r\n }\r\n }\r\n\r\n var readonlyStart: i32 = 0;\r\n var readonlyEnd: i32 = 0;\r\n if (tn.skip(Token.READONLY)) {\r\n flags |= CommonFlags.READONLY;\r\n readonlyStart = tn.tokenPos;\r\n readonlyEnd = tn.pos;\r\n }\r\n\r\n // check if accessor: ('get' | 'set') ^\\n Identifier\r\n var state = tn.mark();\r\n var isConstructor = false;\r\n var isGetter = false;\r\n var getStart: i32 = 0;\r\n var getEnd: i32 = 0;\r\n var isSetter = false;\r\n var setStart: i32 = 0;\r\n var setEnd: i32 = 0;\r\n if (!isInterface) {\r\n if (tn.skip(Token.GET)) {\r\n if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n flags |= CommonFlags.GET;\r\n isGetter = true;\r\n setStart = tn.tokenPos;\r\n setEnd = tn.pos;\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n } else {\r\n tn.reset(state);\r\n }\r\n } else if (tn.skip(Token.SET)) {\r\n if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n flags |= CommonFlags.SET | CommonFlags.SET;\r\n isSetter = true;\r\n setStart = tn.tokenPos;\r\n setEnd = tn.pos;\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n } else {\r\n tn.reset(state);\r\n }\r\n } else if (tn.skip(Token.CONSTRUCTOR)) {\r\n flags |= CommonFlags.CONSTRUCTOR;\r\n isConstructor = true;\r\n if (flags & CommonFlags.STATIC) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(staticStart, staticEnd), \"static\"\r\n ); // recoverable\r\n }\r\n if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(abstractStart, abstractEnd), \"abstract\"\r\n ); // recoverable\r\n }\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n }\r\n }\r\n\r\n if (!isConstructor && !tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n var name = isConstructor\r\n ? Node.createConstructorExpression(tn.range())\r\n : Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n let typeParametersStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,\r\n tn.range(typeParametersStart, tn.pos)\r\n ); // recoverable\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.An_accessor_cannot_have_type_parameters,\r\n tn.range(typeParametersStart, tn.pos)\r\n ); // recoverable\r\n } else {\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n }\r\n\r\n // method: '(' Parameters (':' Type)? '{' Statement* '}' ';'?\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let signatureStart = tn.tokenPos;\r\n let parameters = this.parseParameters(tn, isConstructor);\r\n if (!parameters) return null;\r\n let thisType = this.parseParametersThis;\r\n if (isConstructor) {\r\n for (let i = 0, k = parameters.length; i < k; ++i) {\r\n let parameter = parameters[i];\r\n if (parameter.isAny(\r\n CommonFlags.PUBLIC |\r\n CommonFlags.PROTECTED |\r\n CommonFlags.PRIVATE |\r\n CommonFlags.READONLY\r\n )) {\r\n let implicitFieldDeclaration = Node.createFieldDeclaration(\r\n parameter.name,\r\n parameter.type,\r\n null, // initialized via parameter\r\n null,\r\n parameter.flags | CommonFlags.INSTANCE,\r\n parameter.range\r\n );\r\n implicitFieldDeclaration.parameterIndex = i;\r\n implicitFieldDeclaration.parent = parent;\r\n parameter.implicitFieldDeclaration = implicitFieldDeclaration;\r\n parent.members.push(implicitFieldDeclaration);\r\n }\r\n }\r\n } else if (isGetter) {\r\n if (parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n name.range\r\n );\r\n }\r\n } else if (isSetter) {\r\n if (parameters.length != 1) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,\r\n name.range\r\n );\r\n }\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,\r\n name.range\r\n );\r\n }\r\n }\r\n\r\n let returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n if (name.kind == NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration,\r\n tn.range()\r\n );\r\n } else if (isSetter) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_cannot_have_a_return_type_annotation,\r\n tn.range()\r\n );\r\n }\r\n returnType = this.parseType(tn, name.kind == NodeKind.CONSTRUCTOR || isSetter);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n if (!isSetter && name.kind != NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n let signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n let body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n } else if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract,\r\n tn.range(), name.text\r\n ); // recoverable\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body) return null;\r\n } else if (!(flags & CommonFlags.AMBIENT) && !isInterface) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n let retMethod = Node.createMethodDeclaration(\r\n name,\r\n typeParameters,\r\n signature,\r\n body,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retMethod;\r\n\r\n } else if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Constructor_implementation_is_missing,\r\n name.range\r\n );\r\n\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n name.range\r\n );\r\n\r\n // field: (':' Type)? ('=' Expression)? ';'?\r\n } else {\r\n if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(abstractStart, abstractEnd), \"abstract\"\r\n ); // recoverable\r\n }\r\n\r\n if (flags & CommonFlags.GET) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(getStart, getEnd), \"get\"\r\n ); // recoverable\r\n }\r\n\r\n if (flags & CommonFlags.SET) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(setStart, setEnd), \"set\"\r\n ); // recoverable\r\n }\r\n\r\n let type: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n let initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n initializer = this.parseExpression(tn);\r\n if (!initializer) return null;\r\n }\r\n let retField = Node.createFieldDeclaration(\r\n name,\r\n type,\r\n initializer,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retField;\r\n }\r\n return null;\r\n }\r\n\r\n parseNamespace(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): NamespaceDeclaration | null {\r\n\r\n // at 'namespace': Identifier '{' (Variable | Function)* '}'\r\n\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let members = new Array();\r\n let ns = Node.createNamespaceDeclaration(\r\n identifier,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseTopLevelStatement(tn, ns);\r\n if (!member) return null;\r\n member.parent = ns;\r\n members.push(member);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ns;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExport(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n startPos: i32\r\n ): ExportStatement | null {\r\n\r\n // at 'export': '{' ExportMember (',' ExportMember)* }' ('from' StringLiteral)? ';'?\r\n\r\n var path: StringLiteralExpression | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseExportMember(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n if (tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n let ret = Node.createExportStatement(members, path, flags, tn.range(startPos, tn.pos));\r\n let internalPath = ret.internalPath;\r\n if (internalPath !== null && !this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else if (tn.skip(Token.ASTERISK)) {\r\n if (tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n let ret = Node.createExportStatement(null, path, flags, tn.range(startPos, tn.pos));\r\n let internalPath = assert(ret.internalPath);\r\n let source = tn.source;\r\n if (!source.exportPaths) source.exportPaths = new Set();\r\n source.exportPaths.add(internalPath);\r\n if (!this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"from\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportMember(\r\n tn: Tokenizer\r\n ): ExportMember | null {\r\n\r\n // before: Identifier ('as' Identifier)?\r\n\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifierName()) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createExportMember(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImport(\r\n tn: Tokenizer\r\n ): ImportStatement | null {\r\n\r\n // at 'import':\r\n // ('{' (ImportMember (',' ImportMember)* '}') | ('*' 'as' Identifier)?\r\n // 'from' StringLiteral ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var members: ImportDeclaration[] | null = null;\r\n var namespaceName: IdentifierExpression | null = null;\r\n var skipFrom = false;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseImportDeclaration(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n } else if (tn.skip(Token.ASTERISK)) {\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifier()) {\r\n namespaceName = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"as\"\r\n );\r\n return null;\r\n }\r\n } else {\r\n skipFrom = true;\r\n }\r\n\r\n if (skipFrom || tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n let path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n let ret: ImportStatement;\r\n if (namespaceName) {\r\n assert(!members);\r\n ret = Node.createImportStatementWithWildcard(namespaceName, path, tn.range(startPos, tn.pos));\r\n } else {\r\n ret = Node.createImportStatement(members, path, tn.range(startPos, tn.pos));\r\n }\r\n let internalPath = ret.internalPath;\r\n if (!this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"from\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImportDeclaration(\r\n tn: Tokenizer\r\n ): ImportDeclaration | null {\r\n\r\n // before: Identifier ('as' Identifier)?\r\n\r\n if (tn.skipIdentifierName()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifier()) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createImportDeclaration(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportImport(\r\n tn: Tokenizer,\r\n startPos: i32\r\n ): ExportImportStatement | null {\r\n\r\n // at 'export' 'import': Identifier ('=' Identifier)? ';'?\r\n\r\n if (tn.skipIdentifier()) {\r\n let asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let ret = Node.createExportImportStatement(identifier, asIdentifier, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseStatement(\r\n tn: Tokenizer,\r\n topLevel: bool = false\r\n ): Statement | null {\r\n\r\n // at previous token\r\n\r\n var state = tn.mark();\r\n var token = tn.next();\r\n var statement: Statement | null = null;\r\n switch (token) {\r\n case Token.BREAK: {\r\n statement = this.parseBreak(tn);\r\n break;\r\n }\r\n case Token.CONST: {\r\n statement = this.parseVariable(tn, CommonFlags.CONST, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.CONTINUE: {\r\n statement = this.parseContinue(tn);\r\n break;\r\n }\r\n case Token.DO: {\r\n statement = this.parseDoStatement(tn);\r\n break;\r\n }\r\n case Token.FOR: {\r\n statement = this.parseForStatement(tn);\r\n break;\r\n }\r\n case Token.IF: {\r\n statement = this.parseIfStatement(tn);\r\n break;\r\n }\r\n case Token.LET: {\r\n statement = this.parseVariable(tn, CommonFlags.LET, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.VAR: {\r\n statement = this.parseVariable(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.OPENBRACE: {\r\n statement = this.parseBlockStatement(tn, topLevel);\r\n break;\r\n }\r\n case Token.RETURN: {\r\n if (topLevel) {\r\n this.error(\r\n DiagnosticCode.A_return_statement_can_only_be_used_within_a_function_body,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n statement = this.parseReturn(tn);\r\n break;\r\n }\r\n case Token.SEMICOLON: {\r\n return Node.createEmptyStatement(tn.range(tn.tokenPos));\r\n }\r\n case Token.SWITCH: {\r\n statement = this.parseSwitchStatement(tn);\r\n break;\r\n }\r\n case Token.THROW: {\r\n statement = this.parseThrowStatement(tn);\r\n break;\r\n }\r\n case Token.TRY: {\r\n statement = this.parseTryStatement(tn);\r\n break;\r\n }\r\n case Token.VOID: {\r\n statement = this.parseVoidStatement(tn);\r\n break;\r\n }\r\n case Token.WHILE: {\r\n statement = this.parseWhileStatement(tn);\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n statement = this.parseTypeDeclaration(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: {\r\n tn.reset(state);\r\n statement = this.parseExpressionStatement(tn);\r\n break;\r\n }\r\n }\r\n if (!statement) { // has been reported\r\n tn.reset(state);\r\n this.skipStatement(tn);\r\n } else {\r\n tn.discard(state);\r\n }\r\n return statement;\r\n }\r\n\r\n parseBlockStatement(\r\n tn: Tokenizer,\r\n topLevel: bool\r\n ): BlockStatement | null {\r\n\r\n // at '{': Statement* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let state = tn.mark();\r\n let statement = this.parseStatement(tn, topLevel);\r\n if (!statement) {\r\n if (tn.token == Token.ENDOFFILE) return null;\r\n tn.reset(state);\r\n this.skipStatement(tn);\r\n } else {\r\n tn.discard(state);\r\n statements.push(statement);\r\n }\r\n }\r\n var ret = Node.createBlockStatement(statements, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseBreak(\r\n tn: Tokenizer\r\n ): BreakStatement | null {\r\n\r\n // at 'break': Identifier? ';'?\r\n\r\n var identifier: IdentifierExpression | null = null;\r\n if (tn.peek(true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(IdentifierHandling.PREFER);\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = Node.createBreakStatement(identifier, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseContinue(\r\n tn: Tokenizer\r\n ): ContinueStatement | null {\r\n\r\n // at 'continue': Identifier? ';'?\r\n\r\n var identifier: IdentifierExpression | null = null;\r\n if (tn.peek(true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(IdentifierHandling.PREFER);\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = Node.createContinueStatement(identifier, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseDoStatement(\r\n tn: Tokenizer\r\n ): DoStatement | null {\r\n\r\n // at 'do': Statement 'while' '(' Expression ')' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n if (tn.skip(Token.WHILE)) {\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let ret = Node.createDoStatement(statement, condition, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"while\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExpressionStatement(\r\n tn: Tokenizer\r\n ): ExpressionStatement | null {\r\n\r\n // at previous token\r\n\r\n var expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n\r\n var ret = Node.createExpressionStatement(expr);\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseForStatement(\r\n tn: Tokenizer\r\n ): ForStatement | null {\r\n\r\n // at 'for': '(' Statement? Expression? ';' Expression? ')' Statement\r\n\r\n var startPos = tn.tokenPos;\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let initializer: Statement | null = null;\r\n\r\n if (tn.skip(Token.CONST)) {\r\n initializer = this.parseVariable(tn, CommonFlags.CONST, null, tn.tokenPos);\r\n } else if (tn.skip(Token.LET)) {\r\n initializer = this.parseVariable(tn, CommonFlags.LET, null, tn.tokenPos);\r\n } else if (tn.skip(Token.VAR)) {\r\n initializer = this.parseVariable(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n\r\n } else if (!tn.skip(Token.SEMICOLON)) {\r\n initializer = this.parseExpressionStatement(tn);\r\n if (!initializer) return null;\r\n }\r\n\r\n if (tn.token == Token.SEMICOLON) {\r\n let condition: ExpressionStatement | null = null;\r\n if (!tn.skip(Token.SEMICOLON)) {\r\n condition = this.parseExpressionStatement(tn);\r\n if (!condition) return null;\r\n }\r\n\r\n if (tn.token == Token.SEMICOLON) {\r\n let incrementor: Expression | null = null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n incrementor = this.parseExpression(tn);\r\n if (!incrementor) return null;\r\n\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n return Node.createForStatement(\r\n initializer,\r\n condition\r\n ? condition.expression\r\n : null,\r\n incrementor,\r\n statement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseIfStatement(\r\n tn: Tokenizer\r\n ): IfStatement | null {\r\n\r\n // at 'if': '(' Expression ')' Statement ('else' Statement)?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let elseStatement: Statement | null = null;\r\n if (tn.skip(Token.ELSE)) {\r\n elseStatement = this.parseStatement(tn);\r\n if (!elseStatement) return null;\r\n }\r\n return Node.createIfStatement(\r\n condition,\r\n statement,\r\n elseStatement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchStatement(\r\n tn: Tokenizer\r\n ): SwitchStatement | null {\r\n\r\n // at 'switch': '(' Expression ')' '{' SwitchCase* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let cases = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let case_ = this.parseSwitchCase(tn);\r\n if (!case_) return null;\r\n cases.push(case_);\r\n }\r\n let ret = Node.createSwitchStatement(condition, cases, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchCase(\r\n tn: Tokenizer\r\n ): SwitchCase | null {\r\n\r\n var startPos = tn.tokenPos;\r\n var statements: Statement[],\r\n statement: Statement | null;\r\n\r\n // 'case' Expression ':' Statement*\r\n\r\n if (tn.skip(Token.CASE)) {\r\n let label = this.parseExpression(tn);\r\n if (!label) return null;\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(label, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n\r\n // 'default' ':' Statement*\r\n\r\n } else if (tn.skip(Token.DEFAULT)) {\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(null, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._case_or_default_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseThrowStatement(\r\n tn: Tokenizer\r\n ): ThrowStatement | null {\r\n\r\n // at 'throw': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n var ret = Node.createThrowStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseTryStatement(\r\n tn: Tokenizer\r\n ): TryStatement | null {\r\n\r\n // at 'try':\r\n // '{' Statement* '}'\r\n // ('catch' '(' VariableMember ')' '{' Statement* '}')?\r\n // ('finally' '{' Statement* '}'? ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var stmt: Statement | null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n statements.push(stmt);\r\n }\r\n let catchVariable: IdentifierExpression | null = null;\r\n let catchStatements: Statement[] | null = null;\r\n let finallyStatements: Statement[] | null = null;\r\n if (tn.skip(Token.CATCH)) {\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n catchVariable = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n catchStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n catchStatements.push(stmt);\r\n }\r\n }\r\n if (tn.skip(Token.FINALLY)) {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n finallyStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n finallyStatements.push(stmt);\r\n }\r\n }\r\n if (!(catchStatements || finallyStatements)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"catch\"\r\n );\r\n return null;\r\n }\r\n let ret = Node.createTryStatement(\r\n statements,\r\n catchVariable,\r\n catchStatements,\r\n finallyStatements,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseTypeDeclaration(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): TypeDeclaration | null {\r\n\r\n // at 'type': Identifier ('<' TypeParameters '>')? '=' Type ';'?\r\n\r\n if (tn.skipIdentifier()) {\r\n let name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n if (tn.skip(Token.EQUALS)) {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n let ret = Node.createTypeDeclaration(\r\n name,\r\n typeParameters,\r\n type,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseVoidStatement(\r\n tn: Tokenizer\r\n ): VoidStatement | null {\r\n\r\n // at 'void': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn, Precedence.GROUPING);\r\n if (!expression) return null;\r\n var ret = Node.createVoidStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseWhileStatement(\r\n tn: Tokenizer\r\n ): WhileStatement | null {\r\n\r\n // at 'while': '(' Expression ')' Statement ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let ret = Node.createWhileStatement(expression, statement, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n // expressions\r\n // see: http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm#climbing\r\n\r\n parseExpressionStart(\r\n tn: Tokenizer\r\n ): Expression | null {\r\n\r\n var token = tn.next(IdentifierHandling.PREFER);\r\n var startPos = tn.tokenPos;\r\n var precedence = determinePrecedenceStart(token);\r\n if (precedence != Precedence.NONE) {\r\n let operand: Expression | null;\r\n\r\n // TODO: SpreadExpression, YieldExpression (currently become unsupported UnaryPrefixExpressions)\r\n\r\n // NewExpression\r\n if (token == Token.NEW) {\r\n operand = this.parseExpression(tn, Precedence.CALL);\r\n if (!operand) return null;\r\n if (operand.kind == NodeKind.CALL) {\r\n return Node.createNewExpression(\r\n (operand).expression,\r\n (operand).typeArguments,\r\n (operand).arguments,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n } else {\r\n operand = this.parseExpression(tn, precedence);\r\n if (!operand) return null;\r\n }\r\n\r\n // UnaryPrefixExpression\r\n if (token == Token.PLUS_PLUS || token == Token.MINUS_MINUS) {\r\n if (\r\n operand.kind != NodeKind.IDENTIFIER &&\r\n operand.kind != NodeKind.ELEMENTACCESS &&\r\n operand.kind != NodeKind.PROPERTYACCESS\r\n ) {\r\n this.error(\r\n DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,\r\n operand.range\r\n );\r\n }\r\n }\r\n return Node.createUnaryPrefixExpression(token, operand, tn.range(startPos, tn.pos));\r\n }\r\n\r\n var expr: Expression | null = null;\r\n switch (token) {\r\n\r\n case Token.NULL: return Node.createNullExpression(tn.range());\r\n case Token.TRUE: return Node.createTrueExpression(tn.range());\r\n case Token.FALSE: return Node.createFalseExpression(tn.range());\r\n\r\n // ParenthesizedExpression\r\n // FunctionExpression\r\n case Token.OPENPAREN: {\r\n\r\n // determine whether this is a function expression\r\n if (tn.skip(Token.CLOSEPAREN)) { // must be a function expression (fast route)\r\n return this.parseFunctionExpressionCommon(\r\n tn,\r\n Node.createEmptyIdentifierExpression(tn.range(startPos)),\r\n [],\r\n true\r\n );\r\n }\r\n let state = tn.mark();\r\n let again = true;\r\n do {\r\n switch (tn.next(IdentifierHandling.PREFER)) {\r\n\r\n // function expression\r\n case Token.DOT_DOT_DOT: {\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n switch (tn.next()) {\r\n\r\n // if we got here, check for arrow\r\n case Token.CLOSEPAREN: {\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n again = false;\r\n break;\r\n }\r\n // fall-through\r\n }\r\n // function expression\r\n case Token.COLON: { // type annotation\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.QUESTION: // optional parameter or ternary\r\n case Token.COMMA: {\r\n break; // continue\r\n }\r\n // parenthesized expression\r\n // case Token.EQUALS: // missing type annotation for simplicity\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n // parenthesized expression\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n } while (again);\r\n tn.reset(state);\r\n\r\n // parse parenthesized\r\n expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n return Node.createParenthesizedExpression(expr, tn.range(startPos, tn.pos));\r\n }\r\n // ArrayLiteralExpression\r\n case Token.OPENBRACKET: {\r\n let elementExpressions = new Array();\r\n while (!tn.skip(Token.CLOSEBRACKET)) {\r\n if (tn.peek() == Token.COMMA) {\r\n expr = null; // omitted\r\n } else {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n }\r\n elementExpressions.push(expr);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACKET)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return Node.createArrayLiteralExpression(elementExpressions, tn.range(startPos, tn.pos));\r\n }\r\n // ObjectLiteralExpression\r\n case Token.OPENBRACE: {\r\n let startPos = tn.tokenPos;\r\n let names = new Array();\r\n let values = new Array();\r\n let name: IdentifierExpression;\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n if (!tn.skipIdentifier()) {\r\n if (!tn.skip(Token.STRINGLITERAL)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range(),\r\n );\r\n return null;\r\n }\r\n name = Node.createIdentifierExpression(tn.readString(), tn.range());\r\n name.set(CommonFlags.QUOTED);\r\n } else {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n names.push(name);\r\n if (tn.skip(Token.COLON)) {\r\n let value = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!value) return null;\r\n values.push(value);\r\n } else if (!name.is(CommonFlags.QUOTED)) {\r\n values.push(name);\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return Node.createObjectLiteralExpression(names, values, tn.range(startPos, tn.pos));\r\n }\r\n // AssertionExpression (unary prefix)\r\n case Token.LESSTHAN: {\r\n let toType = this.parseType(tn);\r\n if (!toType) return null;\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n expr = this.parseExpression(tn, Precedence.CALL);\r\n if (!expr) return null;\r\n return Node.createAssertionExpression(\r\n AssertionKind.PREFIX,\r\n expr,\r\n toType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n case Token.IDENTIFIER: {\r\n return Node.createIdentifierExpression(tn.readIdentifier(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.THIS: {\r\n return Node.createThisExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.CONSTRUCTOR: {\r\n return Node.createConstructorExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.SUPER: {\r\n return Node.createSuperExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.STRINGLITERAL: {\r\n return Node.createStringLiteralExpression(tn.readString(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.INTEGERLITERAL: {\r\n return Node.createIntegerLiteralExpression(tn.readInteger(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.FLOATLITERAL: {\r\n return Node.createFloatLiteralExpression(tn.readFloat(), tn.range(startPos, tn.pos));\r\n }\r\n // RegexpLiteralExpression\r\n // note that this also continues on invalid ones so the surrounding AST remains intact\r\n case Token.SLASH: {\r\n let regexpPattern = tn.readRegexpPattern(); // also reports\r\n if (!tn.skip(Token.SLASH)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"/\"\r\n );\r\n return null;\r\n }\r\n return Node.createRegexpLiteralExpression(\r\n regexpPattern,\r\n tn.readRegexpFlags(), // also reports\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n case Token.FUNCTION: {\r\n return this.parseFunctionExpression(tn);\r\n }\r\n case Token.CLASS: {\r\n return this.parseClassExpression(tn);\r\n }\r\n default: {\r\n if (token == Token.ENDOFFILE) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n tn.range(startPos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Expression_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n tryParseTypeArgumentsBeforeArguments(\r\n tn: Tokenizer\r\n ): CommonTypeNode[] | null {\r\n\r\n // at '<': Type (',' Type)* '>' '('\r\n\r\n var state = tn.mark();\r\n if (!tn.skip(Token.LESSTHAN)) return null;\r\n var typeArguments = new Array();\r\n do {\r\n if (tn.peek() === Token.GREATERTHAN) {\r\n break;\r\n }\r\n let type = this.parseType(tn, true, true);\r\n if (!type) {\r\n tn.reset(state);\r\n return null;\r\n }\r\n typeArguments.push(type);\r\n } while (tn.skip(Token.COMMA));\r\n if (tn.skip(Token.GREATERTHAN) && tn.skip(Token.OPENPAREN)) {\r\n return typeArguments;\r\n }\r\n tn.reset(state);\r\n return null;\r\n }\r\n\r\n parseArguments(\r\n tn: Tokenizer\r\n ): Expression[] | null {\r\n\r\n // at '(': (Expression (',' Expression)*)? ')'\r\n\r\n var args = new Array();\r\n while (!tn.skip(Token.CLOSEPAREN)) {\r\n let expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n args.push(expr);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return args;\r\n }\r\n\r\n parseExpression(\r\n tn: Tokenizer,\r\n precedence: Precedence = Precedence.COMMA\r\n ): Expression | null {\r\n assert(precedence != Precedence.NONE);\r\n\r\n var expr = this.parseExpressionStart(tn);\r\n if (!expr) return null;\r\n var startPos = expr.range.start;\r\n\r\n // CallExpression?\r\n if (nodeIsCallable(expr.kind)) {\r\n let typeArguments: CommonTypeNode[] | null = null;\r\n while (\r\n tn.skip(Token.OPENPAREN)\r\n ||\r\n nodeIsGenericCallable(expr.kind) && (typeArguments = this.tryParseTypeArgumentsBeforeArguments(tn)) !== null\r\n ) {\r\n let args = this.parseArguments(tn);\r\n if (!args) return null;\r\n expr = Node.createCallExpression(expr, typeArguments, args, tn.range(startPos, tn.pos)); // is again callable\r\n }\r\n }\r\n\r\n var token: Token;\r\n var next: Expression | null = null;\r\n var nextPrecedence: Precedence;\r\n while (\r\n (nextPrecedence = determinePrecedence(token = tn.peek())) >= precedence\r\n ) { // precedence climbing\r\n tn.next();\r\n switch (token) {\r\n // AssertionExpression\r\n case Token.AS: {\r\n let toType = this.parseType(tn); // reports\r\n if (!toType) return null;\r\n expr = Node.createAssertionExpression(\r\n AssertionKind.AS,\r\n expr,\r\n toType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // InstanceOfExpression\r\n case Token.INSTANCEOF: {\r\n let isType = this.parseType(tn); // reports\r\n if (!isType) return null;\r\n expr = Node.createInstanceOfExpression(\r\n expr,\r\n isType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // ElementAccessExpression\r\n case Token.OPENBRACKET: {\r\n next = this.parseExpression(tn); // reports\r\n if (!next) return null;\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n expr = Node.createElementAccessExpression(\r\n expr,\r\n next,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // UnaryPostfixExpression\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS: {\r\n if (\r\n expr.kind != NodeKind.IDENTIFIER &&\r\n expr.kind != NodeKind.ELEMENTACCESS &&\r\n expr.kind != NodeKind.PROPERTYACCESS\r\n ) {\r\n this.error(\r\n DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,\r\n expr.range\r\n );\r\n }\r\n expr = Node.createUnaryPostfixExpression(\r\n token,\r\n expr,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // TernaryExpression\r\n case Token.QUESTION: {\r\n let ifThen = this.parseExpression(tn);\r\n if (!ifThen) return null;\r\n if (!tn.skip(Token.COLON)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n let ifElse = this.parseExpression(tn, precedence > Precedence.COMMA\r\n ? Precedence.COMMA + 1\r\n : Precedence.COMMA\r\n );\r\n if (!ifElse) return null;\r\n expr = Node.createTernaryExpression(\r\n expr,\r\n ifThen,\r\n ifElse,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // CommaExpression\r\n case Token.COMMA: {\r\n let commaExprs: Expression[] = [ expr ];\r\n do {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n commaExprs.push(expr);\r\n } while (tn.skip(Token.COMMA));\r\n expr = Node.createCommaExpression(commaExprs, tn.range(startPos, tn.pos));\r\n break;\r\n }\r\n default: {\r\n next = this.parseExpression(tn,\r\n isRightAssociative(token)\r\n ? nextPrecedence\r\n : nextPrecedence + 1\r\n );\r\n if (!next) return null;\r\n\r\n // PropertyAccessExpression\r\n if (token == Token.DOT) {\r\n if (next.kind == NodeKind.IDENTIFIER) {\r\n expr = Node.createPropertyAccessExpression(\r\n expr,\r\n next,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else if (next.kind == NodeKind.CALL) { // join\r\n let propertyCall = next;\r\n if (propertyCall.expression.kind == NodeKind.IDENTIFIER) {\r\n propertyCall.expression = Node.createPropertyAccessExpression(\r\n expr,\r\n propertyCall.expression,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n propertyCall.expression.range\r\n );\r\n return null;\r\n }\r\n expr = propertyCall;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n next.range\r\n );\r\n return null;\r\n }\r\n\r\n // BinaryExpression\r\n } else {\r\n expr = Node.createBinaryExpression(token, expr, next, tn.range(startPos, tn.pos));\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n return expr;\r\n }\r\n\r\n /** Skips over a statement on errors in an attempt to reduce unnecessary diagnostic noise. */\r\n skipStatement(tn: Tokenizer): void {\r\n tn.peek(true);\r\n if (tn.nextTokenOnNewLine) tn.next(); // if reset() to the previous line\r\n do {\r\n let nextToken = tn.peek(true);\r\n if (\r\n nextToken == Token.ENDOFFILE || // next step should handle this\r\n nextToken == Token.SEMICOLON // end of the statement for sure\r\n ) {\r\n tn.next();\r\n break;\r\n }\r\n if (tn.nextTokenOnNewLine) break; // end of the statement maybe\r\n switch (tn.next()) {\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n break;\r\n }\r\n case Token.STRINGLITERAL: {\r\n tn.readString();\r\n break;\r\n }\r\n case Token.INTEGERLITERAL: {\r\n tn.readInteger();\r\n break;\r\n }\r\n case Token.FLOATLITERAL: {\r\n tn.readFloat();\r\n break;\r\n }\r\n }\r\n } while (true);\r\n }\r\n\r\n /** Skips over a block on errors in an attempt to reduce unnecessary diagnostic noise. */\r\n skipBlock(tn: Tokenizer): void {\r\n // at '{': ... '}'\r\n var depth = 1;\r\n var again = true;\r\n do {\r\n switch (tn.next()) {\r\n case Token.ENDOFFILE: {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n again = false;\r\n break;\r\n }\r\n case Token.OPENBRACE: {\r\n ++depth;\r\n break;\r\n }\r\n case Token.CLOSEBRACE: {\r\n --depth;\r\n if (!depth) again = false;\r\n break;\r\n }\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n break;\r\n }\r\n case Token.STRINGLITERAL: {\r\n tn.readString();\r\n break;\r\n }\r\n case Token.INTEGERLITERAL: {\r\n tn.readInteger();\r\n break;\r\n }\r\n case Token.FLOATLITERAL: {\r\n tn.readFloat();\r\n break;\r\n }\r\n }\r\n } while (again);\r\n }\r\n}\r\n\r\n/** Operator precedence from least to largest. */\r\nexport const enum Precedence {\r\n NONE,\r\n COMMA,\r\n SPREAD,\r\n YIELD,\r\n ASSIGNMENT,\r\n CONDITIONAL,\r\n LOGICAL_OR,\r\n LOGICAL_AND,\r\n BITWISE_OR,\r\n BITWISE_XOR,\r\n BITWISE_AND,\r\n EQUALITY,\r\n RELATIONAL,\r\n SHIFT,\r\n ADDITIVE,\r\n MULTIPLICATIVE,\r\n EXPONENTIATED,\r\n UNARY_PREFIX,\r\n UNARY_POSTFIX,\r\n CALL,\r\n MEMBERACCESS,\r\n GROUPING\r\n}\r\n\r\n/** Determines the precedence of a starting token. */\r\nfunction determinePrecedenceStart(kind: Token): Precedence {\r\n switch (kind) {\r\n case Token.DOT_DOT_DOT: return Precedence.SPREAD;\r\n case Token.YIELD: return Precedence.YIELD;\r\n case Token.EXCLAMATION:\r\n case Token.TILDE:\r\n case Token.PLUS:\r\n case Token.MINUS:\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS:\r\n case Token.TYPEOF:\r\n case Token.VOID:\r\n case Token.DELETE: return Precedence.UNARY_PREFIX;\r\n case Token.NEW: return Precedence.MEMBERACCESS;\r\n }\r\n return Precedence.NONE;\r\n}\r\n\r\n/** Determines the precende of a non-starting token. */\r\nfunction determinePrecedence(kind: Token): Precedence {\r\n switch (kind) {\r\n case Token.COMMA: return Precedence.COMMA;\r\n case Token.EQUALS:\r\n case Token.PLUS_EQUALS:\r\n case Token.MINUS_EQUALS:\r\n case Token.ASTERISK_ASTERISK_EQUALS:\r\n case Token.ASTERISK_EQUALS:\r\n case Token.SLASH_EQUALS:\r\n case Token.PERCENT_EQUALS:\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.AMPERSAND_EQUALS:\r\n case Token.CARET_EQUALS:\r\n case Token.BAR_EQUALS: return Precedence.ASSIGNMENT;\r\n case Token.QUESTION: return Precedence.CONDITIONAL;\r\n case Token.BAR_BAR: return Precedence.LOGICAL_OR;\r\n case Token.AMPERSAND_AMPERSAND: return Precedence.LOGICAL_AND;\r\n case Token.BAR: return Precedence.BITWISE_OR;\r\n case Token.CARET: return Precedence.BITWISE_XOR;\r\n case Token.AMPERSAND: return Precedence.BITWISE_AND;\r\n case Token.EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS:\r\n case Token.EQUALS_EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS_EQUALS: return Precedence.EQUALITY;\r\n case Token.AS:\r\n case Token.IN:\r\n case Token.INSTANCEOF:\r\n case Token.LESSTHAN:\r\n case Token.GREATERTHAN:\r\n case Token.LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_EQUALS: return Precedence.RELATIONAL;\r\n case Token.LESSTHAN_LESSTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: return Precedence.SHIFT;\r\n case Token.PLUS:\r\n case Token.MINUS: return Precedence.ADDITIVE;\r\n case Token.ASTERISK:\r\n case Token.SLASH:\r\n case Token.PERCENT: return Precedence.MULTIPLICATIVE;\r\n case Token.ASTERISK_ASTERISK: return Precedence.EXPONENTIATED;\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS: return Precedence.UNARY_POSTFIX;\r\n case Token.DOT:\r\n case Token.NEW:\r\n case Token.OPENBRACKET: return Precedence.MEMBERACCESS;\r\n }\r\n return Precedence.NONE;\r\n}\r\n\r\n/** Determines whether a non-starting token is right associative. */\r\nfunction isRightAssociative(kind: Token): bool {\r\n switch (kind) {\r\n case Token.EQUALS:\r\n case Token.PLUS_EQUALS:\r\n case Token.MINUS_EQUALS:\r\n case Token.ASTERISK_ASTERISK_EQUALS:\r\n case Token.ASTERISK_EQUALS:\r\n case Token.SLASH_EQUALS:\r\n case Token.PERCENT_EQUALS:\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.AMPERSAND_EQUALS:\r\n case Token.CARET_EQUALS:\r\n case Token.BAR_EQUALS:\r\n case Token.QUESTION:\r\n case Token.ASTERISK_ASTERISK: return true;\r\n default: return false;\r\n }\r\n}\r\n"],"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","nodeIsGenericCallable","Node","parent","flags","NONE","is","flag","isAny","set","createType","typeArguments","isNullable","type","TypeNode","setParent","createOmittedType","createIdentifierExpression","createTypeParameter","extendsType","elem","TypeParameterNode","createParameter","initializer","ParameterNode","parameterKind","createSignature","parameters","returnType","explicitThisType","sig","SignatureNode","createDecorator","args","stmt","DecoratorNode","arguments","decoratorKind","decoratorNameToKind","createComment","node","CommentNode","commentKind","expr","IdentifierExpression","createEmptyIdentifierExpression","createArrayLiteralExpression","elements","ArrayLiteralExpression","elementExpressions","nodes","k","setParentIfNotNull","createAssertionExpression","assertionKind","expression","toType","AssertionExpression","createBinaryExpression","operator","left","right","BinaryExpression","createCallExpression","typeArgs","CallExpression","createClassExpression","declaration","ClassExpression","createCommaExpression","expressions","CommaExpression","createConstructorExpression","ConstructorExpression","createElementAccessExpression","element","ElementAccessExpression","elementExpression","createFalseExpression","FalseExpression","createFloatLiteralExpression","FloatLiteralExpression","createFunctionExpression","FunctionExpression","ARROW","createInstanceOfExpression","isType","InstanceOfExpression","createIntegerLiteralExpression","IntegerLiteralExpression","createNewExpression","NewExpression","createNullExpression","NullExpression","createObjectLiteralExpression","names","values","ObjectLiteralExpression","createParenthesizedExpression","ParenthesizedExpression","createPropertyAccessExpression","PropertyAccessExpression","createRegexpLiteralExpression","pattern","RegexpLiteralExpression","patternFlags","createTernaryExpression","condition","ifThen","ifElse","TernaryExpression","createStringLiteralExpression","StringLiteralExpression","createSuperExpression","SuperExpression","createThisExpression","ThisExpression","createTrueExpression","TrueExpression","createUnaryPostfixExpression","operand","UnaryPostfixExpression","createUnaryPrefixExpression","UnaryPrefixExpression","createBlockStatement","statements","BlockStatement","createBreakStatement","label","BreakStatement","createClassDeclaration","identifier","typeParameters","implementsTypes","members","decorators","ClassDeclaration","createContinueStatement","ContinueStatement","createDoStatement","statement","DoStatement","createEmptyStatement","EmptyStatement","createEnumDeclaration","EnumDeclaration","createEnumValueDeclaration","EnumValueDeclaration","createExportStatement","path","ExportStatement","normalizePath","startsWith","resolvePath","internalPath","mangleInternalPath","createExportImportStatement","externalName","ExportImportStatement","createExportMember","ExportMember","createExpressionStatement","ExpressionStatement","createIfStatement","ifTrue","ifFalse","IfStatement","createImportStatement","decls","ImportStatement","declarations","namespaceName","createImportStatementWithWildcard","createImportDeclaration","ImportDeclaration","createInterfaceDeclaration","InterfaceDeclaration","createFieldDeclaration","FieldDeclaration","createForStatement","incrementor","ForStatement","createFunctionDeclaration","signature","body","FunctionDeclaration","createMethodDeclaration","MethodDeclaration","createNamespaceDeclaration","NamespaceDeclaration","createReturnStatement","ReturnStatement","createSwitchStatement","cases","SwitchStatement","createSwitchCase","SwitchCase","createThrowStatement","ThrowStatement","createTryStatement","catchVariable","catchStatements","finallyStatements","TryStatement","createTypeDeclaration","alias","TypeDeclaration","createVariableStatement","VariableStatement","createVariableDeclaration","VariableDeclaration","createVoidStatement","VoidStatement","createWhileStatement","WhileStatement","CommonTypeNode","_super","__extends","_this","apply","TYPE","TYPEPARAMETER","ParameterKind","PARAMETER","implicitFieldDeclaration","DecoratorKind","SIGNATURE","nameStr","BUILTIN","EXTERNAL","GLOBAL","INLINE","OPERATOR","SEALED","UNMANAGED","propStr","OPERATOR_BINARY","OPERATOR_PREFIX","OPERATOR_POSTFIX","CUSTOM","DECORATOR","CommentKind","COMMENT","Expression","LiteralKind","LiteralExpression","literalKind","ARRAY","AssertionKind","ASSERTION","BINARY","CLASS","COMMA","CONSTRUCTOR","FLOAT","FUNCTION","INSTANCEOF","INTEGER","NEW","OBJECT","PARENTHESIZED","REGEXP","TERNARY","STRING","SUPER","THIS","UnaryExpression","UNARYPOSTFIX","UNARYPREFIX","isLastStatement","BLOCK","FUNCTIONDECLARATION","METHODDECLARATION","SourceKind","Statement","Source","SOURCE","tokenizer","debugInfoIndex","exportPaths","sourceKind","pos","lastIndexOf","simplePath","ENTRY","LIBRARY","DeclarationStatement","cachedProgramLevelInternalName","cachedFileLevelInternalName","mangleInternalName","VARIABLE","NAMESPACEDECLARATION","EXPORT","isTopLevelExport","CLASSDECLARATION","STATIC","needsExplicitExport","member","VariableLikeDeclarationStatement","BREAK","CONTINUE","DO","EMPTY","ENUMDECLARATION","ENUMVALUEDECLARATION","EXPORTIMPORT","EXPORTMEMBER","EXPRESSION","FIELDDECLARATION","parameterIndex","FOR","IF","IMPORTDECLARATION","IMPORT","INTERFACEDECLARATION","RETURN","SWITCHCASE","SWITCH","THROW","TRY","TYPEDECLARATION","VARIABLEDECLARATION","VOID","WHILE","asGlobal","endsWith","findDecorator","decorator","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","_BinaryenCallImportId","_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","_BinaryenPageSize","_BinaryenCurrentMemory","_BinaryenGrowMemory","_BinaryenHasFeature","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","createCallImport","_BinaryenCallImport","createCallIndirect","typeName","_BinaryenCallIndirect","createUnreachable","_BinaryenUnreachable","addGlobal","mutable","_BinaryenAddGlobal","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","removeImport","_BinaryenRemoveImport","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","MAX_MEMORY_WASM32","MAX_MEMORY_WASM64","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","skipIdentifierName","mark","state","reusableState","State","discard","reset","readIdentifier","quote","Unterminated_string_literal","readEscapeSequence","Unexpected_end_of_text","readExtendedUnicodeEscape","readUnicodeEscape","fromCharCode","readRegexpPattern","escaped","Unterminated_regular_expression_literal","readRegexpFlags","Invalid_regular_expression_flags","readInteger","readHexInteger","readBinaryInteger","readOctalInteger","isOctalDigit","Octal_literals_are_not_allowed_in_strict_mode","readDecimalInteger","i64_16","sepEnd","i64_add","i64_mul","Numeric_separators_are_not_allowed_here","Multiple_consecutive_numeric_separators_are_not_permitted","Hexadecimal_digit_expected","i64_10","Digit_expected","i64_8","Octal_digit_expected","i64_2","i64_1","Binary_digit_expected","readFloat","readDecimalFloat","parseFloat","readHexFloat","remain","value32","invalid","An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive","Unterminated_Unicode_escape_sequence","finish","builtins_1","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","functionTableExported","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","nativeOne","setValue","NegF32","NegF64","makeIsFalseish","ExtendI8ToI32","ExtendI16ToI32","fieldType","nativeFieldType","fieldDeclaration","parentElement","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","emitText","emitAsmjs","Binaryen","__memory_allocate","_malloc","__memory_free","_free","__memory_copy","_memmove","__store","HEAPU8","__load","globalScope","UnreachableError","captureStackTrace","stack","AssertionError","ASC_TARGET","defineProperties","writable","Math","fround","MIN_POSITIVE_VALUE","MIN_SAFE_INTEGER","MAX_SAFE_INTEGER","EPSILON","clz32","abs","floor","trunc","round","sqrt","x","y","sign","isTrueish","radix","parseInt","undefined","fromCodePoint","Number","isInteger","isArray","HEAP","HEAP_OFFSET","oldHeap","copy","dest","src","copyWithin","F64","Float64Array","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","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","CallImport","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","Initializers_are_not_allowed_in_ambient_contexts","parseExpression","parseEnumValue","parseReturn","parseTypeParameters","typeParameter","parseTypeParameter","Type_parameter_list_cannot_be_empty","parseParameters","seenRest","seenOptional","reportedRest","parseParameter","A_rest_parameter_must_be_last_in_a_parameter_list","A_required_parameter_cannot_follow_an_optional_parameter","isRest","isOptional","startRange","accessFlags","A_parameter_property_cannot_be_declared_using_a_rest_parameter","A_rest_parameter_cannot_have_an_initializer","Parameter_cannot_have_question_mark_and_initializer","signatureStart","isSetter","A_set_accessor_must_have_exactly_one_parameter","A_set_accessor_parameter_cannot_have_an_initializer","A_get_accessor_cannot_have_parameters","parseBlockStatement","parseFunctionExpression","isArrow","parseFunctionExpressionCommon","Interface_declaration_cannot_have_implements_clause","parseClassMember","parseClassExpression","staticStart","staticEnd","abstractStart","abstractEnd","readonlyStart","readonlyEnd","setEnd","typeParametersStart","Type_parameters_cannot_appear_on_a_constructor_declaration","An_accessor_cannot_have_type_parameters","Type_annotation_cannot_appear_on_a_constructor_declaration","A_set_accessor_cannot_have_a_return_type_annotation","Method_0_cannot_have_an_implementation_because_it_is_marked_abstract","retMethod","Constructor_implementation_is_missing","retField","parseExportMember","asIdentifier","skipFrom","parseImportDeclaration","topLevel","parseBreak","parseContinue","parseDoStatement","parseForStatement","parseIfStatement","A_return_statement_can_only_be_used_within_a_function_body","parseSwitchStatement","parseThrowStatement","parseTryStatement","parseVoidStatement","parseWhileStatement","parseExpressionStatement","elseStatement","case_","parseSwitchCase","_case_or_default_expected","parseExpressionStart","precedence","determinePrecedenceStart","The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access","again","startPos_1","QUOTED","PREFIX","regexpPattern","Expression_expected","tryParseTypeArgumentsBeforeArguments","nextPrecedence","determinePrecedence","commaExprs","isRightAssociative","propertyCall","skipBlock","depth","Precedence"],"mappings":"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M,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,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,M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","file":"assemblyscript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"binaryen\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"binaryen\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"assemblyscript\"] = factory(require(\"binaryen\"));\n\telse\n\t\troot[\"assemblyscript\"] = factory(root[\"binaryen\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE__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\r\n // Extended modifiers usually derived from basic modifiers\r\n\r\n /** Is ambient, that is either declared or nested in a declared element. */\r\n AMBIENT = 1 << 13,\r\n /** Is generic. */\r\n GENERIC = 1 << 14,\r\n /** Is part of a generic context. */\r\n GENERIC_CONTEXT = 1 << 15,\r\n /** Is an instance member. */\r\n INSTANCE = 1 << 16,\r\n /** Is a constructor. */\r\n CONSTRUCTOR = 1 << 17,\r\n /** Is an arrow function. */\r\n ARROW = 1 << 18,\r\n /** Is a module export. */\r\n MODULE_EXPORT = 1 << 19,\r\n /** Is a module import. */\r\n MODULE_IMPORT = 1 << 20,\r\n\r\n // Compilation states\r\n\r\n /** Is compiled. */\r\n COMPILED = 1 << 21,\r\n /** Has a constant value and is therefore inlined. */\r\n INLINED = 1 << 22,\r\n /** Is scoped. */\r\n SCOPED = 1 << 23,\r\n /** Is a trampoline. */\r\n TRAMPOLINE = 1 << 24,\r\n /** Is a virtual method. */\r\n VIRTUAL = 1 << 25,\r\n /** Is the main function. */\r\n MAIN = 1 << 26,\r\n\r\n // Other\r\n\r\n QUOTED = 1 << 27\r\n}\r\n\r\n/** Path delimiter inserted between file system levels. */\r\nexport const PATH_DELIMITER = \"/\";\r\n/** Substitution used to indicate the parent directory. */\r\nexport const PARENT_SUBST = \"..\";\r\n/** Function name prefix used for getters. */\r\nexport const GETTER_PREFIX = \"get:\";\r\n/** Function name prefix used for setters. */\r\nexport const SETTER_PREFIX = \"set:\";\r\n/** Delimiter used between class names and instance members. */\r\nexport const INSTANCE_DELIMITER = \"#\";\r\n/** Delimiter used between class and namespace names and static members. */\r\nexport const STATIC_DELIMITER = \".\";\r\n/** Delimiter used between a function and its inner elements. */\r\nexport const INNER_DELIMITER = \"~\";\r\n/** Substitution used to indicate a library directory. */\r\nexport const LIBRARY_SUBST = \"~lib\";\r\n/** Library directory prefix. */\r\nexport const LIBRARY_PREFIX = LIBRARY_SUBST + PATH_DELIMITER;\r\n/** Prefix used to indicate a filespace element. */\r\nexport const FILESPACE_PREFIX = \"file:\";\r\n","/**\r\n * Shared diagnostic handling inherited by the parser and the compiler.\r\n * @module diagnostics\r\n * @preferred\r\n *//***/\r\n\r\nimport {\r\n Range\r\n} from \"./ast\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\nimport {\r\n isLineBreak\r\n} from \"./util\";\r\n\r\nexport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\n/** Indicates the category of a {@link DiagnosticMessage}. */\r\nexport enum DiagnosticCategory {\r\n /** Informatory message. */\r\n INFO,\r\n /** Warning message. */\r\n WARNING,\r\n /** Error message. */\r\n ERROR\r\n}\r\n\r\n/** Returns the string representation of the specified diagnostic category. */\r\nexport function diagnosticCategoryToString(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return \"INFO\";\r\n case DiagnosticCategory.WARNING: return \"WARNING\";\r\n case DiagnosticCategory.ERROR: return \"ERROR\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\n/** ANSI escape sequence for blue foreground. */\r\nexport const COLOR_BLUE: string = \"\\u001b[96m\";\r\n/** ANSI escape sequence for yellow foreground. */\r\nexport const COLOR_YELLOW: string = \"\\u001b[93m\";\r\n/** ANSI escape sequence for red foreground. */\r\nexport const COLOR_RED: string = \"\\u001b[91m\";\r\n/** ANSI escape sequence to reset the foreground color. */\r\nexport const COLOR_RESET: string = \"\\u001b[0m\";\r\n\r\n/** Returns the ANSI escape sequence for the specified category. */\r\nexport function diagnosticCategoryToColor(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return COLOR_BLUE;\r\n case DiagnosticCategory.WARNING: return COLOR_YELLOW;\r\n case DiagnosticCategory.ERROR: return COLOR_RED;\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\n/** Represents a diagnostic message. */\r\nexport class DiagnosticMessage {\r\n\r\n /** Message code. */\r\n code: i32;\r\n /** Message category. */\r\n category: DiagnosticCategory;\r\n /** Message text. */\r\n message: string;\r\n /** Respective source range, if any. */\r\n range: Range | null = null;\r\n\r\n /** Constructs a new diagnostic message. */\r\n private constructor(code: i32, category: DiagnosticCategory, message: string) {\r\n this.code = code;\r\n this.category = category;\r\n this.message = message;\r\n }\r\n\r\n /** Creates a new diagnostic message of the specified category. */\r\n static create(\r\n code: DiagnosticCode,\r\n category: DiagnosticCategory,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): DiagnosticMessage {\r\n var message = diagnosticCodeToString(code);\r\n if (arg0 != null) message = message.replace(\"{0}\", arg0);\r\n if (arg1 != null) message = message.replace(\"{1}\", arg1);\r\n if (arg2 != null) message = message.replace(\"{2}\", arg2);\r\n return new DiagnosticMessage(code, category, message);\r\n }\r\n\r\n /** Creates a new informatory diagnostic message. */\r\n static createInfo(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.INFO, arg0, arg1);\r\n }\r\n\r\n /** Creates a new warning diagnostic message. */\r\n static createWarning(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.WARNING, arg0, arg1);\r\n }\r\n\r\n /** Creates a new error diagnostic message. */\r\n static createError(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.ERROR, arg0, arg1);\r\n }\r\n\r\n /** Adds a source range to this message. */\r\n withRange(range: Range): this {\r\n this.range = range;\r\n return this;\r\n }\r\n\r\n /** Converts this message to a string. */\r\n toString(): string {\r\n if (this.range) {\r\n return (\r\n diagnosticCategoryToString(this.category) +\r\n \" \" +\r\n this.code.toString(10) +\r\n \": \\\"\" +\r\n this.message +\r\n \"\\\" in \" +\r\n this.range.source.normalizedPath +\r\n \":\" +\r\n this.range.line.toString(10) +\r\n \":\" +\r\n this.range.column.toString(10)\r\n );\r\n }\r\n return (\r\n diagnosticCategoryToString(this.category) +\r\n \" \" +\r\n this.code.toString(10) +\r\n \": \" +\r\n this.message\r\n );\r\n }\r\n}\r\n\r\n/** Formats a diagnostic message, optionally with terminal colors and source context. */\r\nexport function formatDiagnosticMessage(\r\n message: DiagnosticMessage,\r\n useColors: bool = false,\r\n showContext: bool = false\r\n): string {\r\n\r\n // general information\r\n var sb: string[] = [];\r\n if (useColors) sb.push(diagnosticCategoryToColor(message.category));\r\n sb.push(diagnosticCategoryToString(message.category));\r\n if (useColors) sb.push(COLOR_RESET);\r\n sb.push(message.code < 1000 ? \" AS\" : \" TS\");\r\n sb.push(message.code.toString(10));\r\n sb.push(\": \");\r\n sb.push(message.message);\r\n\r\n // include range information if available\r\n if (message.range) {\r\n\r\n // include context information if requested\r\n let range = message.range;\r\n if (showContext) {\r\n sb.push(\"\\n\");\r\n sb.push(formatDiagnosticContext(message.range, useColors));\r\n }\r\n\r\n sb.push(\"\\n\");\r\n sb.push(\" in \");\r\n sb.push(range.source.normalizedPath);\r\n sb.push(\"(\");\r\n sb.push(range.line.toString(10));\r\n sb.push(\",\");\r\n sb.push(range.column.toString(10));\r\n sb.push(\")\");\r\n }\r\n return sb.join(\"\");\r\n}\r\n\r\n/** Formats the diagnostic context for the specified range, optionally with terminal colors. */\r\nexport function formatDiagnosticContext(range: Range, useColors: bool = false): string {\r\n var text = range.source.text;\r\n var len = text.length;\r\n var start = range.start;\r\n var end = range.end;\r\n while (start > 0 && !isLineBreak(text.charCodeAt(start - 1))) start--;\r\n while (end < len && !isLineBreak(text.charCodeAt(end))) end++;\r\n var sb: string[] = [\r\n \"\\n \",\r\n text.substring(start, end),\r\n \"\\n \"\r\n ];\r\n while (start < range.start) {\r\n sb.push(\" \");\r\n start++;\r\n }\r\n if (useColors) sb.push(COLOR_RED);\r\n if (range.start == range.end) {\r\n sb.push(\"^\");\r\n } else {\r\n while (start++ < range.end) sb.push(\"~\");\r\n }\r\n if (useColors) sb.push(COLOR_RESET);\r\n return sb.join(\"\");\r\n}\r\n\r\n/** Base class of all diagnostic emitters. */\r\nexport abstract class DiagnosticEmitter {\r\n\r\n /** Diagnostic messages emitted so far. */\r\n diagnostics: DiagnosticMessage[];\r\n\r\n /** Initializes this diagnostic emitter. */\r\n protected constructor(diagnostics: DiagnosticMessage[] | null = null) {\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n }\r\n\r\n /** Emits a diagnostic message of the specified category. */\r\n emitDiagnostic(\r\n code: DiagnosticCode,\r\n category: DiagnosticCategory,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n var message = DiagnosticMessage.create(code, category, arg0, arg1, arg2).withRange(range);\r\n this.diagnostics.push(message);\r\n // console.log(formatDiagnosticMessage(message, true, true) + \"\\n\"); // temporary\r\n // console.log(new Error(\"stack\").stack);\r\n }\r\n\r\n /** Emits an informatory diagnostic message. */\r\n info(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.INFO, range, arg0, arg1, arg2);\r\n }\r\n\r\n /** Emits a warning diagnostic message. */\r\n warning(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.WARNING, range, arg0, arg1, arg2);\r\n }\r\n\r\n /** Emits an error diagnostic message. */\r\n error(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.ERROR, range, arg0, arg1, arg2);\r\n }\r\n}\r\n","/**\r\n * 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: 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 CallImport = _BinaryenCallImportId(),\r\n CallIndirect = _BinaryenCallIndirectId(),\r\n GetLocal = _BinaryenGetLocalId(),\r\n SetLocal = _BinaryenSetLocalId(),\r\n GetGlobal = _BinaryenGetGlobalId(),\r\n SetGlobal = _BinaryenSetGlobalId(),\r\n Load = _BinaryenLoadId(),\r\n Store = _BinaryenStoreId(),\r\n Const = _BinaryenConstId(),\r\n Unary = _BinaryenUnaryId(),\r\n Binary = _BinaryenBinaryId(),\r\n Select = _BinaryenSelectId(),\r\n Drop = _BinaryenDropId(),\r\n Return = _BinaryenReturnId(),\r\n Host = _BinaryenHostId(),\r\n Nop = _BinaryenNopId(),\r\n Unreachable = _BinaryenUnreachableId(),\r\n AtomicCmpxchg = _BinaryenAtomicCmpxchgId(),\r\n AtomicRMW = _BinaryenAtomicRMWId(),\r\n AtomicWait = _BinaryenAtomicWaitId(),\r\n AtomicWake = _BinaryenAtomicWakeId()\r\n}\r\n\r\nexport enum UnaryOp {\r\n ClzI32 = _BinaryenClzInt32(),\r\n CtzI32 = _BinaryenCtzInt32(),\r\n PopcntI32 = _BinaryenPopcntInt32(),\r\n NegF32 = _BinaryenNegFloat32(),\r\n AbsF32 = _BinaryenAbsFloat32(),\r\n CeilF32 = _BinaryenCeilFloat32(),\r\n FloorF32 = _BinaryenFloorFloat32(),\r\n TruncF32 = _BinaryenTruncFloat32(),\r\n NearestF32 = _BinaryenNearestFloat32(),\r\n SqrtF32 = _BinaryenSqrtFloat32(),\r\n EqzI32 = _BinaryenEqZInt32(),\r\n ClzI64 = _BinaryenClzInt64(),\r\n CtzI64 = _BinaryenCtzInt64(),\r\n PopcntI64 = _BinaryenPopcntInt64(),\r\n NegF64 = _BinaryenNegFloat64(),\r\n AbsF64 = _BinaryenAbsFloat64(),\r\n CeilF64 = _BinaryenCeilFloat64(),\r\n FloorF64 = _BinaryenFloorFloat64(),\r\n TruncF64 = _BinaryenTruncFloat64(),\r\n NearestF64 = _BinaryenNearestFloat64(),\r\n SqrtF64 = _BinaryenSqrtFloat64(),\r\n EqzI64 = _BinaryenEqZInt64(),\r\n ExtendI32 = _BinaryenExtendSInt32(),\r\n ExtendU32 = _BinaryenExtendUInt32(),\r\n WrapI64 = _BinaryenWrapInt64(),\r\n TruncF32ToI32 = _BinaryenTruncSFloat32ToInt32(),\r\n TruncF32ToI64 = _BinaryenTruncSFloat32ToInt64(),\r\n TruncF32ToU32 = _BinaryenTruncUFloat32ToInt32(),\r\n TruncF32ToU64 = _BinaryenTruncUFloat32ToInt64(),\r\n TruncF64ToI32 = _BinaryenTruncSFloat64ToInt32(),\r\n TruncF64ToI64 = _BinaryenTruncSFloat64ToInt64(),\r\n TruncF64ToU32 = _BinaryenTruncUFloat64ToInt32(),\r\n TruncF64ToU64 = _BinaryenTruncUFloat64ToInt64(),\r\n ReinterpretF32 = _BinaryenReinterpretFloat32(),\r\n ReinterpretF64 = _BinaryenReinterpretFloat64(),\r\n ConvertI32ToF32 = _BinaryenConvertSInt32ToFloat32(),\r\n ConvertI32ToF64 = _BinaryenConvertSInt32ToFloat64(),\r\n ConvertU32ToF32 = _BinaryenConvertUInt32ToFloat32(),\r\n ConvertU32ToF64 = _BinaryenConvertUInt32ToFloat64(),\r\n ConvertI64ToF32 = _BinaryenConvertSInt64ToFloat32(),\r\n ConvertI64ToF64 = _BinaryenConvertSInt64ToFloat64(),\r\n ConvertU64ToF32 = _BinaryenConvertUInt64ToFloat32(),\r\n ConvertU64ToF64 = _BinaryenConvertUInt64ToFloat64(),\r\n PromoteF32 = _BinaryenPromoteFloat32(),\r\n DemoteF64 = _BinaryenDemoteFloat64(),\r\n ReinterpretI32 = _BinaryenReinterpretInt32(),\r\n ReinterpretI64 = _BinaryenReinterpretInt64(),\r\n\r\n // see: https://github.com/WebAssembly/sign-extension-ops\r\n ExtendI8ToI32 = _BinaryenExtendS8Int32(),\r\n ExtendI16ToI32 = _BinaryenExtendS16Int32(),\r\n ExtendI8ToI64 = _BinaryenExtendS8Int64(),\r\n ExtendI16ToI64 = _BinaryenExtendS16Int64(),\r\n ExtendI32ToI64 = _BinaryenExtendS32Int64()\r\n\r\n // see: https://github.com/WebAssembly/nontrapping-float-to-int-conversions\r\n // TruncF32ToI32Sat\r\n // TruncF32ToU32Sat\r\n // TruncF64ToI32Sat\r\n // TruncF64ToU32Sat\r\n // TruncF32ToI64Sat\r\n // TruncF32ToU64Sat\r\n // TruncF64ToI64Sat\r\n // TruncF64ToU64Sat\r\n}\r\n\r\nexport enum BinaryOp {\r\n AddI32 = _BinaryenAddInt32(),\r\n SubI32 = _BinaryenSubInt32(),\r\n MulI32 = _BinaryenMulInt32(),\r\n DivI32 = _BinaryenDivSInt32(),\r\n DivU32 = _BinaryenDivUInt32(),\r\n RemI32 = _BinaryenRemSInt32(),\r\n RemU32 = _BinaryenRemUInt32(),\r\n AndI32 = _BinaryenAndInt32(),\r\n OrI32 = _BinaryenOrInt32(),\r\n XorI32 = _BinaryenXorInt32(),\r\n ShlI32 = _BinaryenShlInt32(),\r\n ShrU32 = _BinaryenShrUInt32(),\r\n ShrI32 = _BinaryenShrSInt32(),\r\n RotlI32 = _BinaryenRotLInt32(),\r\n RotrI32 = _BinaryenRotRInt32(),\r\n EqI32 = _BinaryenEqInt32(),\r\n NeI32 = _BinaryenNeInt32(),\r\n LtI32 = _BinaryenLtSInt32(),\r\n LtU32 = _BinaryenLtUInt32(),\r\n LeI32 = _BinaryenLeSInt32(),\r\n LeU32 = _BinaryenLeUInt32(),\r\n GtI32 = _BinaryenGtSInt32(),\r\n GtU32 = _BinaryenGtUInt32(),\r\n GeI32 = _BinaryenGeSInt32(),\r\n GeU32 = _BinaryenGeUInt32(),\r\n AddI64 = _BinaryenAddInt64(),\r\n SubI64 = _BinaryenSubInt64(),\r\n MulI64 = _BinaryenMulInt64(),\r\n DivI64 = _BinaryenDivSInt64(),\r\n DivU64 = _BinaryenDivUInt64(),\r\n RemI64 = _BinaryenRemSInt64(),\r\n RemU64 = _BinaryenRemUInt64(),\r\n AndI64 = _BinaryenAndInt64(),\r\n OrI64 = _BinaryenOrInt64(),\r\n XorI64 = _BinaryenXorInt64(),\r\n ShlI64 = _BinaryenShlInt64(),\r\n ShrU64 = _BinaryenShrUInt64(),\r\n ShrI64 = _BinaryenShrSInt64(),\r\n RotlI64 = _BinaryenRotLInt64(),\r\n RotrI64 = _BinaryenRotRInt64(),\r\n EqI64 = _BinaryenEqInt64(),\r\n NeI64 = _BinaryenNeInt64(),\r\n LtI64 = _BinaryenLtSInt64(),\r\n LtU64 = _BinaryenLtUInt64(),\r\n LeI64 = _BinaryenLeSInt64(),\r\n LeU64 = _BinaryenLeUInt64(),\r\n GtI64 = _BinaryenGtSInt64(),\r\n GtU64 = _BinaryenGtUInt64(),\r\n GeI64 = _BinaryenGeSInt64(),\r\n GeU64 = _BinaryenGeUInt64(),\r\n AddF32 = _BinaryenAddFloat32(),\r\n SubF32 = _BinaryenSubFloat32(),\r\n MulF32 = _BinaryenMulFloat32(),\r\n DivF32 = _BinaryenDivFloat32(),\r\n CopysignF32 = _BinaryenCopySignFloat32(),\r\n MinF32 = _BinaryenMinFloat32(),\r\n MaxF32 = _BinaryenMaxFloat32(),\r\n EqF32 = _BinaryenEqFloat32(),\r\n NeF32 = _BinaryenNeFloat32(),\r\n LtF32 = _BinaryenLtFloat32(),\r\n LeF32 = _BinaryenLeFloat32(),\r\n GtF32 = _BinaryenGtFloat32(),\r\n GeF32 = _BinaryenGeFloat32(),\r\n AddF64 = _BinaryenAddFloat64(),\r\n SubF64 = _BinaryenSubFloat64(),\r\n MulF64 = _BinaryenMulFloat64(),\r\n DivF64 = _BinaryenDivFloat64(),\r\n CopysignF64 = _BinaryenCopySignFloat64(),\r\n MinF64 = _BinaryenMinFloat64(),\r\n MaxF64 = _BinaryenMaxFloat64(),\r\n EqF64 = _BinaryenEqFloat64(),\r\n NeF64 = _BinaryenNeFloat64(),\r\n LtF64 = _BinaryenLtFloat64(),\r\n LeF64 = _BinaryenLeFloat64(),\r\n GtF64 = _BinaryenGtFloat64(),\r\n GeF64 = _BinaryenGeFloat64()\r\n}\r\n\r\nexport enum HostOp {\r\n PageSize = _BinaryenPageSize(),\r\n CurrentMemory = _BinaryenCurrentMemory(),\r\n GrowMemory = _BinaryenGrowMemory(),\r\n HasFeature = _BinaryenHasFeature(),\r\n\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n // MoveMemory\r\n // SetMemory\r\n}\r\n\r\nexport enum AtomicRMWOp {\r\n Add = _BinaryenAtomicRMWAdd(),\r\n Sub = _BinaryenAtomicRMWSub(),\r\n And = _BinaryenAtomicRMWAnd(),\r\n Or = _BinaryenAtomicRMWOr(),\r\n Xor = _BinaryenAtomicRMWXor(),\r\n Xchg = _BinaryenAtomicRMWXchg()\r\n}\r\n\r\nexport class MemorySegment {\r\n\r\n buffer: Uint8Array;\r\n offset: I64;\r\n\r\n static create(buffer: Uint8Array, offset: I64): MemorySegment {\r\n var segment = new MemorySegment();\r\n segment.buffer = buffer;\r\n segment.offset = offset;\r\n return segment;\r\n }\r\n}\r\n\r\nexport class Module {\r\n\r\n ref: ModuleRef;\r\n\r\n private cachedByValue: usize;\r\n\r\n /** Maximum number of pages when targeting WASM32. */\r\n static readonly MAX_MEMORY_WASM32: Index = 0xffff;\r\n\r\n /** Maximum number of pages when targeting WASM64. */\r\n static readonly MAX_MEMORY_WASM64: Index = 0xffff; // TODO\r\n\r\n static create(): Module {\r\n var module = new Module();\r\n module.ref = _BinaryenModuleCreate();\r\n module.cachedByValue = memory.allocate(16);\r\n return module;\r\n }\r\n\r\n static createFrom(buffer: Uint8Array): Module {\r\n var cArr = allocU8Array(buffer);\r\n try {\r\n let module = new Module();\r\n module.ref = _BinaryenModuleRead(cArr, buffer.length);\r\n module.cachedByValue = memory.allocate(3 * 8); // LLVM C-ABI, max used is 3 * usize\r\n return module;\r\n } finally {\r\n memory.free(changetype(cArr));\r\n }\r\n }\r\n\r\n private constructor() { }\r\n\r\n // types\r\n\r\n addFunctionType(\r\n name: string,\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenAddFunctionType(this.ref, cStr, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n getFunctionTypeBySignature(\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionTypeRef {\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenGetFunctionTypeBySignature(this.ref, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n removeFunctionType(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunctionType(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n // constants\r\n\r\n createI32(value: i32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createI64(valueLow: i32, valueHigh: i32 = 0): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt64(out, valueLow, valueHigh);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF32(value: f32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF64(value: f64): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat64(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n // expressions\r\n\r\n createUnary(\r\n op: UnaryOp,\r\n expr: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenUnary(this.ref, op, expr);\r\n }\r\n\r\n createBinary(\r\n op: BinaryOp,\r\n left: ExpressionRef,\r\n right: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenBinary(this.ref, op, left, right);\r\n }\r\n\r\n createHost(\r\n op: HostOp,\r\n name: string | null = null,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenHost(this.ref, op, cStr, cArr, operands ? (operands).length : 0);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createGetLocal(\r\n index: i32,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenGetLocal(this.ref, index, type);\r\n }\r\n\r\n createTeeLocal(\r\n index: i32,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenTeeLocal(this.ref, index, value);\r\n }\r\n\r\n createGetGlobal(\r\n name: string,\r\n type: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenGetGlobal(this.ref, cStr, type);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createLoad(\r\n bytes: Index,\r\n signed: bool,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenLoad(this.ref, bytes, signed ? 1 : 0, offset, /* always aligned */ bytes, type, ptr);\r\n }\r\n\r\n createStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenStore(this.ref, bytes, offset, /* always aligned */ bytes, ptr, value, type);\r\n }\r\n\r\n createAtomicLoad(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicLoad(this.ref, bytes, offset, type, ptr);\r\n }\r\n\r\n createAtomicStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicStore(this.ref, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicRMW(\r\n op: AtomicRMWOp,\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicRMW(this.ref, op, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicCmpxchg(\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n replacement: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicCmpxchg(this.ref, bytes, offset, ptr, expected, replacement, type);\r\n }\r\n\r\n createAtomicWait(\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n timeout: ExpressionRef,\r\n expectedType: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWait(this.ref, ptr, expected, timeout, expectedType);\r\n }\r\n\r\n createAtomicWake(\r\n ptr: ExpressionRef,\r\n wakeCount: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWake(this.ref, ptr, wakeCount);\r\n }\r\n\r\n // statements\r\n\r\n createSetLocal(\r\n index: Index,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSetLocal(this.ref, index, value);\r\n }\r\n\r\n createSetGlobal(\r\n name: string,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenSetGlobal(this.ref, cStr, value);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createBlock(\r\n label: string | null,\r\n children: ExpressionRef[],\r\n type: NativeType = NativeType.None\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n var cArr = allocPtrArray(children);\r\n try {\r\n return _BinaryenBlock(this.ref, cStr, cArr, children.length, type);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createBreak(\r\n label: string | null,\r\n condition: ExpressionRef = 0,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenBreak(this.ref, cStr, condition, value);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createDrop(\r\n expression: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenDrop(this.ref, expression);\r\n }\r\n\r\n createLoop(\r\n label: string | null,\r\n body: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenLoop(this.ref, cStr, body);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createIf(\r\n condition: ExpressionRef,\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenIf(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createNop(): ExpressionRef {\r\n return _BinaryenNop(this.ref);\r\n }\r\n\r\n createReturn(\r\n expression: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenReturn(this.ref, expression);\r\n }\r\n\r\n createSelect(\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef,\r\n condition: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSelect(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createSwitch(\r\n names: string[],\r\n defaultName: string | null,\r\n condition: ExpressionRef,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numNames = names.length;\r\n var strs = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n strs[i] = allocString(names[i]);\r\n }\r\n var cArr = allocI32Array(strs);\r\n var cStr = allocString(defaultName);\r\n try {\r\n return _BinaryenSwitch(this.ref, cArr, numNames, cStr, condition, value);\r\n } finally {\r\n memory.free(cStr);\r\n memory.free(cArr);\r\n for (let i = numNames - 1; i >= 0; --i) memory.free(strs[i]);\r\n }\r\n }\r\n\r\n createCall(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenCall(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createCallImport(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenCallImport(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n createCallIndirect(\r\n index: ExpressionRef,\r\n operands: ExpressionRef[] | null,\r\n typeName: string\r\n ): ExpressionRef {\r\n var cArr = allocPtrArray(operands);\r\n var cStr = allocString(typeName);\r\n try {\r\n return _BinaryenCallIndirect(this.ref, index, cArr, operands && operands.length || 0, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n createUnreachable(): ExpressionRef {\r\n return _BinaryenUnreachable(this.ref);\r\n }\r\n\r\n // meta\r\n\r\n addGlobal(\r\n name: string,\r\n type: NativeType,\r\n mutable: bool,\r\n initializer: ExpressionRef\r\n ): GlobalRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenAddGlobal(this.ref, cStr, type, mutable ? 1 : 0, initializer);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n addFunction(\r\n name: string,\r\n type: FunctionTypeRef,\r\n varTypes: NativeType[] | null,\r\n body: ExpressionRef\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(varTypes);\r\n try {\r\n return _BinaryenAddFunction(this.ref, cStr, type, cArr, varTypes ? varTypes.length : 0, body);\r\n } finally {\r\n memory.free(cArr);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n removeFunction(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunction(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n private cachedTemporaryName: usize = 0;\r\n private hasTemporaryFunction: bool = false;\r\n\r\n addTemporaryFunction(result: NativeType, paramTypes: NativeType[] | null, body: ExpressionRef): FunctionRef {\r\n this.hasTemporaryFunction = assert(!this.hasTemporaryFunction);\r\n var tempName = this.cachedTemporaryName;\r\n if (!tempName) this.cachedTemporaryName = tempName = allocString(\"\"); // works because strings are interned\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n let typeRef = _BinaryenAddFunctionType(this.ref, tempName, result, cArr, paramTypes ? paramTypes.length : 0);\r\n return _BinaryenAddFunction(this.ref, tempName, typeRef, 0, 0, body);\r\n } finally {\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n removeTemporaryFunction(): void {\r\n this.hasTemporaryFunction = !assert(this.hasTemporaryFunction);\r\n var tempName = assert(this.cachedTemporaryName);\r\n _BinaryenRemoveFunction(this.ref, tempName);\r\n _BinaryenRemoveFunctionType(this.ref, tempName);\r\n }\r\n\r\n addFunctionExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddFunctionExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addTableExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddTableExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addMemoryExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddMemoryExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addGlobalExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddGlobalExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n removeExport(externalName: string): void {\r\n var cStr = allocString(externalName);\r\n try {\r\n _BinaryenRemoveExport(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n addFunctionImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n functionType: FunctionTypeRef\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddFunctionImport(this.ref, cStr1, cStr2, cStr3, functionType);\r\n } finally {\r\n memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addTableImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddTableImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addMemoryImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddMemoryImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n addGlobalImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n globalType: NativeType\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddGlobalImport(this.ref, cStr1, cStr2, cStr3, globalType);\r\n } finally {\r\n memory.free(cStr3);\r\n memory.free(cStr2);\r\n memory.free(cStr1);\r\n }\r\n }\r\n\r\n removeImport(internalName: string): void {\r\n var cStr = allocString(internalName);\r\n try {\r\n _BinaryenRemoveImport(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n setMemory(\r\n initial: Index,\r\n maximum: Index,\r\n segments: MemorySegment[],\r\n target: Target,\r\n exportName: string | null = null\r\n ): void {\r\n var cStr = allocString(exportName);\r\n var k = segments.length;\r\n var segs = new Array(k);\r\n var offs = new Array(k);\r\n var sizs = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let buffer = segments[i].buffer;\r\n let offset = segments[i].offset;\r\n segs[i] = allocU8Array(buffer);\r\n offs[i] = target == Target.WASM64\r\n ? this.createI64(i64_low(offset), i64_high(offset))\r\n : this.createI32(i64_low(offset));\r\n sizs[i] = buffer.length;\r\n }\r\n var cArr1 = allocI32Array(segs);\r\n var cArr2 = allocI32Array(offs);\r\n var cArr3 = allocI32Array(sizs);\r\n try {\r\n _BinaryenSetMemory(this.ref, initial, maximum, cStr, cArr1, cArr2, cArr3, k);\r\n } finally {\r\n memory.free(cArr3);\r\n memory.free(cArr2);\r\n memory.free(cArr1);\r\n for (let i = k - 1; i >= 0; --i) memory.free(segs[i]);\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n setFunctionTable(funcs: FunctionRef[]): void {\r\n var cArr = allocPtrArray(funcs);\r\n try {\r\n _BinaryenSetFunctionTable(this.ref, cArr, funcs.length);\r\n } finally {\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n setStart(func: FunctionRef): void {\r\n _BinaryenSetStart(this.ref, func);\r\n }\r\n\r\n getOptimizeLevel(): i32 {\r\n return _BinaryenGetOptimizeLevel();\r\n }\r\n\r\n setOptimizeLevel(level: i32 = 2): void {\r\n _BinaryenSetOptimizeLevel(level);\r\n }\r\n\r\n getShrinkLevel(): i32 {\r\n return _BinaryenGetShrinkLevel();\r\n }\r\n\r\n setShrinkLevel(level: i32 = 1): void {\r\n _BinaryenSetShrinkLevel(level);\r\n }\r\n\r\n setDebugInfo(on: bool = false): void {\r\n _BinaryenSetDebugInfo(on);\r\n }\r\n\r\n optimize(func: FunctionRef = 0): void {\r\n if (func) {\r\n _BinaryenFunctionOptimize(func, this.ref);\r\n } else {\r\n _BinaryenModuleOptimize(this.ref);\r\n }\r\n }\r\n\r\n runPasses(passes: string[], func: FunctionRef = 0): void {\r\n var numNames = passes.length;\r\n var names = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n names[i] = allocString(passes[i]);\r\n }\r\n var cArr = allocI32Array(names);\r\n try {\r\n if (func) {\r\n _BinaryenFunctionRunPasses(func, this.ref, cArr, numNames);\r\n } else {\r\n _BinaryenModuleRunPasses(this.ref, cArr, numNames);\r\n }\r\n } finally {\r\n memory.free(cArr);\r\n for (let i = numNames; i >= 0; --i) memory.free(names[i]);\r\n }\r\n }\r\n\r\n private cachedPrecomputeName: usize = 0; // for free'ing\r\n private cachedPrecomputeNames: usize = 0;\r\n\r\n precomputeExpression(expr: ExpressionRef): ExpressionRef {\r\n // remember the previous optimize levels and set to max instead, to be sure\r\n var previousOptimizeLevel = _BinaryenGetOptimizeLevel();\r\n var previousShrinkLevel = _BinaryenGetShrinkLevel();\r\n var previousDebugInfo = _BinaryenGetDebugInfo();\r\n _BinaryenSetOptimizeLevel(4);\r\n _BinaryenSetShrinkLevel(0);\r\n _BinaryenSetDebugInfo(false);\r\n\r\n // wrap the expression in a temp. function and run the precompute pass on it\r\n var type = _BinaryenExpressionGetType(expr);\r\n var func = this.addTemporaryFunction(type, null, expr);\r\n var names = this.cachedPrecomputeNames;\r\n if (!names) {\r\n let name = allocString(\"precompute\");\r\n this.cachedPrecomputeName = name;\r\n this.cachedPrecomputeNames = names = allocI32Array([ name ]);\r\n }\r\n _BinaryenFunctionRunPasses(func, this.ref, names, 1);\r\n expr = _BinaryenFunctionGetBody(func);\r\n this.removeTemporaryFunction();\r\n\r\n // reset optimize levels to previous\r\n _BinaryenSetOptimizeLevel(previousOptimizeLevel);\r\n _BinaryenSetShrinkLevel(previousShrinkLevel);\r\n _BinaryenSetDebugInfo(previousDebugInfo);\r\n return expr;\r\n }\r\n\r\n validate(): bool {\r\n return _BinaryenModuleValidate(this.ref) == 1;\r\n }\r\n\r\n interpret(): void {\r\n _BinaryenModuleInterpret(this.ref);\r\n }\r\n\r\n toBinary(sourceMapUrl: string | null): BinaryModule {\r\n var out = this.cachedByValue;\r\n var cStr = allocString(sourceMapUrl);\r\n var binaryPtr: usize = 0;\r\n var sourceMapPtr: usize = 0;\r\n try {\r\n _BinaryenModuleAllocateAndWrite(out, this.ref, cStr);\r\n binaryPtr = readInt(out);\r\n let binaryBytes = readInt(out + 4);\r\n sourceMapPtr = readInt(out + 4 * 2);\r\n let ret = new BinaryModule();\r\n ret.output = readBuffer(binaryPtr, binaryBytes);\r\n ret.sourceMap = readString(sourceMapPtr);\r\n return ret;\r\n } finally {\r\n if (cStr) memory.free(cStr);\r\n if (binaryPtr) memory.free(binaryPtr);\r\n if (sourceMapPtr) memory.free(sourceMapPtr);\r\n }\r\n }\r\n\r\n toText(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n toAsmjs(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n dispose(): void {\r\n assert(this.ref);\r\n memory.free(this.cachedByValue);\r\n memory.free(this.cachedTemporaryName);\r\n memory.free(this.cachedPrecomputeName);\r\n memory.free(this.cachedPrecomputeNames);\r\n _BinaryenModuleDispose(this.ref);\r\n this.ref = 0;\r\n }\r\n\r\n createRelooper(): Relooper {\r\n return Relooper.create(this);\r\n }\r\n\r\n cloneExpression(\r\n expr: ExpressionRef,\r\n noSideEffects: bool = false,\r\n maxDepth: i32 = i32.MAX_VALUE\r\n ): ExpressionRef { // currently supports side effect free expressions only\r\n if (maxDepth < 0) return 0;\r\n maxDepth -= 1;\r\n\r\n var nested1: ExpressionRef,\r\n nested2: ExpressionRef;\r\n\r\n switch (_BinaryenExpressionGetId(expr)) {\r\n case ExpressionId.Const: {\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32: {\r\n return this.createI32(_BinaryenConstGetValueI32(expr));\r\n }\r\n case NativeType.I64: {\r\n return this.createI64(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n }\r\n case NativeType.F32: {\r\n return this.createF32(_BinaryenConstGetValueF32(expr));\r\n }\r\n case NativeType.F64: {\r\n return this.createF64(_BinaryenConstGetValueF64(expr));\r\n }\r\n default: {\r\n throw new Error(\"concrete type expected\");\r\n }\r\n }\r\n }\r\n case ExpressionId.GetLocal: {\r\n return _BinaryenGetLocal(this.ref,\r\n _BinaryenGetLocalGetIndex(expr),\r\n _BinaryenExpressionGetType(expr)\r\n );\r\n }\r\n case ExpressionId.GetGlobal: {\r\n let globalName = _BinaryenGetGlobalGetName(expr);\r\n if (!globalName) break;\r\n return _BinaryenGetGlobal(this.ref, globalName, _BinaryenExpressionGetType(expr));\r\n }\r\n case ExpressionId.Load: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenLoadGetPtr(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return (\r\n _BinaryenLoadIsAtomic(expr)\r\n ? _BinaryenAtomicLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n : _BinaryenLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadIsSigned(expr) ? 1 : 0,\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenLoadGetAlign(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n );\r\n }\r\n case ExpressionId.Unary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenUnaryGetValue(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenUnary(this.ref, _BinaryenUnaryGetOp(expr), nested1);\r\n }\r\n case ExpressionId.Binary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenBinaryGetLeft(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n if (!(nested2 = this.cloneExpression(_BinaryenBinaryGetRight(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenBinary(this.ref, _BinaryenBinaryGetOp(expr), nested1, nested2);\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n // source map generation\r\n\r\n addDebugInfoFile(name: string): Index {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenModuleAddDebugInfoFileName(this.ref, cStr);\r\n } finally {\r\n memory.free(cStr);\r\n }\r\n }\r\n\r\n getDebugInfoFile(index: Index): string | null {\r\n return readString(_BinaryenModuleGetDebugInfoFileName(this.ref, index));\r\n }\r\n\r\n setDebugLocation(\r\n func: FunctionRef,\r\n expr: ExpressionRef,\r\n fileIndex: Index,\r\n lineNumber: Index,\r\n columnNumber: Index\r\n ): void {\r\n _BinaryenFunctionSetDebugLocation(func, expr, fileIndex, lineNumber, columnNumber);\r\n }\r\n}\r\n\r\n// expressions\r\n\r\nexport function getExpressionId(expr: ExpressionRef): ExpressionId {\r\n return _BinaryenExpressionGetId(expr);\r\n}\r\n\r\nexport function getExpressionType(expr: ExpressionRef): NativeType {\r\n return _BinaryenExpressionGetType(expr);\r\n}\r\n\r\nexport function getConstValueI32(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI32(expr);\r\n}\r\n\r\nexport function getConstValueI64Low(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64Low(expr);\r\n}\r\n\r\nexport function getConstValueI64High(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64High(expr);\r\n}\r\n\r\nexport function getConstValueF32(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF32(expr);\r\n}\r\n\r\nexport function getConstValueF64(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF64(expr);\r\n}\r\n\r\nexport function getGetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenGetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenSetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSetLocalGetValue(expr);\r\n}\r\n\r\nexport function isTeeLocal(expr: ExpressionRef): bool {\r\n return _BinaryenSetLocalIsTee(expr);\r\n}\r\n\r\nexport function getBinaryOp(expr: ExpressionRef): BinaryOp {\r\n return _BinaryenBinaryGetOp(expr);\r\n}\r\n\r\nexport function getBinaryLeft(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetLeft(expr);\r\n}\r\n\r\nexport function getBinaryRight(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetRight(expr);\r\n}\r\n\r\nexport function getUnaryOp(expr: ExpressionRef): UnaryOp {\r\n return _BinaryenUnaryGetOp(expr);\r\n}\r\n\r\nexport function getUnaryValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenUnaryGetValue(expr);\r\n}\r\n\r\nexport function getLoadBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetBytes(expr);\r\n}\r\n\r\nexport function getLoadOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetOffset(expr);\r\n}\r\n\r\nexport function getLoadPtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoadGetPtr(expr);\r\n}\r\n\r\nexport function isLoadSigned(expr: ExpressionRef): bool {\r\n return _BinaryenLoadIsSigned(expr);\r\n}\r\n\r\nexport function getStoreBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetBytes(expr);\r\n}\r\n\r\nexport function getStoreOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetOffset(expr);\r\n}\r\n\r\nexport function getStorePtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetPtr(expr);\r\n}\r\n\r\nexport function getStoreValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetValue(expr);\r\n}\r\n\r\nexport function getBlockName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBlockGetName(expr));\r\n}\r\n\r\nexport function getBlockChildCount(expr: ExpressionRef): Index {\r\n return _BinaryenBlockGetNumChildren(expr);\r\n}\r\n\r\nexport function getBlockChild(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenBlockGetChild(expr, index);\r\n}\r\n\r\nexport function getIfCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetCondition(expr);\r\n}\r\n\r\nexport function getIfTrue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfTrue(expr);\r\n}\r\n\r\nexport function getIfFalse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfFalse(expr);\r\n}\r\n\r\nexport function getLoopName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenLoopGetName(expr));\r\n}\r\n\r\nexport function getLoopBody(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoopGetBody(expr);\r\n}\r\n\r\nexport function getBreakName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBreakGetName(expr));\r\n}\r\n\r\nexport function getBreakCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBreakGetCondition(expr);\r\n}\r\n\r\nexport function getSelectThen(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfTrue(expr);\r\n}\r\n\r\nexport function getSelectElse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfFalse(expr);\r\n}\r\n\r\nexport function getSelectCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetCondition(expr);\r\n}\r\n\r\nexport function getDropValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenDropGetValue(expr);\r\n}\r\n\r\nexport function getReturnValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenReturnGetValue(expr);\r\n}\r\n\r\nexport function getCallTarget(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenCallGetTarget(expr));\r\n}\r\n\r\nexport function getHostOp(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenHostGetOp(expr);\r\n}\r\n\r\nexport function getHostOperandCount(expr: ExpressionRef): Index {\r\n return _BinaryenHostGetNumOperands(expr);\r\n}\r\n\r\nexport function getHostOperand(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenHostGetOperand(expr, index);\r\n}\r\n\r\nexport function getHostName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenHostGetNameOperand(expr));\r\n}\r\n\r\n// functions\r\n\r\nexport function getFunctionBody(func: FunctionRef): ExpressionRef {\r\n return _BinaryenFunctionGetBody(func);\r\n}\r\n\r\nexport function getFunctionName(func: FunctionRef): string | null {\r\n return readString(_BinaryenFunctionGetName(func));\r\n}\r\n\r\nexport function getFunctionParamCount(func: FunctionRef): Index {\r\n return _BinaryenFunctionGetNumParams(func);\r\n}\r\n\r\nexport function getFunctionParamType(func: FunctionRef, index: Index): NativeType {\r\n return _BinaryenFunctionGetParam(func, index);\r\n}\r\n\r\nexport function getFunctionResultType(func: FunctionRef): NativeType {\r\n return _BinaryenFunctionGetResult(func);\r\n}\r\n\r\nexport class Relooper {\r\n\r\n module: Module;\r\n ref: RelooperRef;\r\n\r\n static create(module: Module): Relooper {\r\n var relooper = new Relooper();\r\n relooper.module = module;\r\n relooper.ref = _RelooperCreate();\r\n return relooper;\r\n }\r\n\r\n private constructor() {}\r\n\r\n addBlock(code: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlock(this.ref, code);\r\n }\r\n\r\n addBranch(from: RelooperBlockRef, to: RelooperBlockRef, condition: ExpressionRef = 0, code: ExpressionRef = 0): void {\r\n _RelooperAddBranch(from, to, condition, code);\r\n }\r\n\r\n addBlockWithSwitch(code: ExpressionRef, condition: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlockWithSwitch(this.ref, code, condition);\r\n }\r\n\r\n addBranchForSwitch(from: RelooperBlockRef, to: RelooperBlockRef, indexes: i32[], code: ExpressionRef = 0): void {\r\n var cArr = allocI32Array(indexes);\r\n try {\r\n _RelooperAddBranchForSwitch(from, to, cArr, indexes.length, code);\r\n } finally {\r\n memory.free(cArr);\r\n }\r\n }\r\n\r\n renderAndDispose(entry: RelooperBlockRef, labelHelper: Index): ExpressionRef {\r\n return _RelooperRenderAndDispose(this.ref, entry, labelHelper, this.module.ref);\r\n }\r\n}\r\n\r\n// export function hasSideEffects(expr: ExpressionRef): bool {\r\n// switch (_BinaryenExpressionGetId(expr = getPtr(expr))) {\r\n// case ExpressionId.GetLocal:\r\n// case ExpressionId.GetGlobal:\r\n// case ExpressionId.Const:\r\n// case ExpressionId.Nop:\r\n// case ExpressionId.Unreachable: {\r\n// return false;\r\n// }\r\n// case ExpressionId.Block: {\r\n// for (let i = 0, k = _BinaryenBlockGetNumChildren(expr); i < k; ++i) {\r\n// if (hasSideEffects(_BinaryenBlockGetChild(expr, i))) return true;\r\n// }\r\n// return false;\r\n// }\r\n// case ExpressionId.If: {\r\n// return hasSideEffects(_BinaryenIfGetCondition(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfFalse(expr));\r\n// }\r\n// case ExpressionId.Unary: {\r\n// return hasSideEffects(_BinaryenUnaryGetValue(expr));\r\n// }\r\n// case ExpressionId.Binary: {\r\n// return hasSideEffects(_BinaryenBinaryGetLeft(expr))\r\n// || hasSideEffects(_BinaryenBinaryGetRight(expr));\r\n// }\r\n// case ExpressionId.Drop: {\r\n// return hasSideEffects(_BinaryenDropGetValue(expr));\r\n// }\r\n// case ExpressionId.Select: {\r\n// return hasSideEffects(_BinaryenSelectGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenSelectGetIfFalse(expr))\r\n// || hasSideEffects(_BinaryenSelectGetCondition(expr));\r\n// }\r\n// }\r\n// return true;\r\n// }\r\n\r\n// helpers\r\n// can't do stack allocation here: STACKTOP is a global in WASM but a hidden variable in asm.js\r\n\r\nfunction allocU8Array(u8s: Uint8Array | null): usize {\r\n if (!u8s) return 0;\r\n var numValues = u8s.length;\r\n var ptr = memory.allocate(numValues);\r\n var idx = ptr;\r\n for (let i = 0; i < numValues; ++i) {\r\n store(idx++, u8s[i]);\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocI32Array(i32s: i32[] | null): usize {\r\n if (!i32s) return 0;\r\n var ptr = memory.allocate(i32s.length << 2);\r\n var idx = ptr;\r\n for (let i = 0, k = i32s.length; i < k; ++i) {\r\n let val = i32s[i];\r\n // store(idx, val) is not portable\r\n store(idx , ( val & 0xff) as u8);\r\n store(idx + 1, ((val >> 8) & 0xff) as u8);\r\n store(idx + 2, ((val >> 16) & 0xff) as u8);\r\n store(idx + 3, ( val >>> 24 ) as u8);\r\n idx += 4;\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocPtrArray(ptrs: usize[] | null): usize {\r\n return allocI32Array(ptrs); // TODO: WASM64 one day\r\n}\r\n\r\nfunction stringLengthUTF8(str: string): usize {\r\n var len = 0;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n ++len;\r\n } else if (u <= 0x7FF) {\r\n len += 2;\r\n } else if (u <= 0xFFFF) {\r\n len += 3;\r\n } else if (u <= 0x1FFFFF) {\r\n len += 4;\r\n } else if (u <= 0x3FFFFFF) {\r\n len += 5;\r\n } else {\r\n len += 6;\r\n }\r\n }\r\n return len;\r\n}\r\n\r\nfunction allocString(str: string | null): usize {\r\n if (str == null) return 0;\r\n var ptr = memory.allocate(stringLengthUTF8(str) + 1);\r\n // the following is based on Emscripten's stringToUTF8Array\r\n var idx = ptr;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n store(idx++, u as u8);\r\n } else if (u <= 0x7FF) {\r\n store(idx++, (0xC0 | (u >>> 6) ) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0xFFFF) {\r\n store(idx++, (0xE0 | (u >>> 12) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x1FFFFF) {\r\n store(idx++, (0xF0 | (u >>> 18) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x3FFFFFF) {\r\n store(idx++, (0xF8 | (u >>> 24) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else {\r\n store(idx++, (0xFC | (u >>> 30) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 24) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n }\r\n }\r\n store(idx, 0);\r\n return ptr;\r\n}\r\n\r\nfunction readInt(ptr: usize): i32 {\r\n return (\r\n load(ptr ) |\r\n (load(ptr + 1) << 8) |\r\n (load(ptr + 2) << 16) |\r\n (load(ptr + 3) << 24)\r\n );\r\n}\r\n\r\nfunction readBuffer(ptr: usize, length: usize): Uint8Array {\r\n var ret = new Uint8Array(length);\r\n for (let i: usize = 0; i < length; ++i) {\r\n ret[i] = load(ptr + i);\r\n }\r\n return ret;\r\n}\r\n\r\nexport function readString(ptr: usize): string | null {\r\n if (!ptr) return null;\r\n var arr = new Array();\r\n // the following is based on Emscripten's UTF8ArrayToString\r\n var cp: u32;\r\n var u1: u32, u2: u32, u3: u32, u4: u32, u5: u32;\r\n while (cp = load(ptr++)) {\r\n if (!(cp & 0x80)) {\r\n arr.push(cp);\r\n continue;\r\n }\r\n u1 = load(ptr++) & 63;\r\n if ((cp & 0xE0) == 0xC0) {\r\n arr.push(((cp & 31) << 6) | u1);\r\n continue;\r\n }\r\n u2 = load(ptr++) & 63;\r\n if ((cp & 0xF0) == 0xE0) {\r\n cp = ((cp & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u3 = load(ptr++) & 63;\r\n if ((cp & 0xF8) == 0xF0) {\r\n cp = ((cp & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;\r\n } else {\r\n u4 = load(ptr++) & 63;\r\n if ((cp & 0xFC) == 0xF8) {\r\n cp = ((cp & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;\r\n } else {\r\n u5 = load(ptr++) & 63;\r\n cp = ((cp & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;\r\n }\r\n }\r\n }\r\n arr.push(cp);\r\n // if (cp < 0x10000) {\r\n // arr.push(cp);\r\n // } else {\r\n // var ch = cp - 0x10000;\r\n // arr.push(0xD800 | (ch >> 10));\r\n // arr.push(0xDC00 | (ch & 0x3FF));\r\n // }\r\n }\r\n // return String.fromCharCodes(arr);\r\n return String.fromCodePoints(arr);\r\n}\r\n\r\n/** Result structure of {@link Module#toBinary}. */\r\nexport class BinaryModule {\r\n /** WebAssembly binary. */\r\n output: Uint8Array;\r\n /** Source map, if generated. */\r\n sourceMap: string | null;\r\n}\r\n\r\n/** 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;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\r\n} catch (e) {\r\n\t// This works if the window reference is available\r\n\tif (typeof window === \"object\") g = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n","/**\r\n * Mappings from AssemblyScript types to WebAssembly types.\r\n * @module types\r\n *//***/\r\n\r\nimport {\r\n Class,\r\n FunctionTarget,\r\n 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 (!signednessIsRelevant || this.is(TypeFlags.SIGNED) == target.is(TypeFlags.SIGNED)) {\r\n return this.size <= target.size;\r\n }\r\n } else if (target.kind == TypeKind.F32) {\r\n return this.size <= 23; // mantissa bits\r\n } else if (target.kind == TypeKind.F64) {\r\n return this.size <= 52; // ^\r\n }\r\n } else if (this.is(TypeFlags.FLOAT)) {\r\n if (target.is(TypeFlags.FLOAT)) {\r\n return this.size <= target.size;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /** Determines the common compatible type of two types, if any. */\r\n static commonCompatible(left: Type, right: Type, signednessIsImportant: bool): Type | null {\r\n if (right.isAssignableTo(left, signednessIsImportant)) return left;\r\n else if (left.isAssignableTo(right, signednessIsImportant)) return right;\r\n return null;\r\n }\r\n\r\n /** Converts this type to its TypeScript representation. */\r\n toString(kindOnly: bool = false): string {\r\n if (!kindOnly && this.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.classReference;\r\n if (classReference) {\r\n return this.is(TypeFlags.NULLABLE)\r\n ? classReference.toString() + \" | null\"\r\n : classReference.toString();\r\n }\r\n let signatureReference = this.signatureReference;\r\n if (signatureReference) {\r\n return this.is(TypeFlags.NULLABLE)\r\n ? \"(\" + signatureReference.toString(true) + \") | null\"\r\n : signatureReference.toString(true);\r\n }\r\n assert(false);\r\n }\r\n switch (this.kind) {\r\n case TypeKind.I8: return \"i8\";\r\n case TypeKind.I16: return \"i16\";\r\n case TypeKind.I32: return \"i32\";\r\n case TypeKind.I64: return \"i64\";\r\n case TypeKind.ISIZE: return \"isize\";\r\n case TypeKind.U8: return \"u8\";\r\n case TypeKind.U16: return \"u16\";\r\n case TypeKind.U32: return \"u32\";\r\n case TypeKind.U64: return \"u64\";\r\n case TypeKind.USIZE: return \"usize\";\r\n case TypeKind.BOOL: return \"bool\";\r\n case TypeKind.F32: return \"f32\";\r\n case TypeKind.F64: return \"f64\";\r\n default: assert(false);\r\n case TypeKind.VOID: return \"void\";\r\n }\r\n }\r\n\r\n // Binaryen specific\r\n\r\n /** Converts this type to its respective native type. */\r\n toNativeType(): NativeType {\r\n switch (this.kind) {\r\n default: return NativeType.I32;\r\n case TypeKind.I64:\r\n case TypeKind.U64: return NativeType.I64;\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: return this.size == 64 ? NativeType.I64 : NativeType.I32;\r\n case TypeKind.F32: return NativeType.F32;\r\n case TypeKind.F64: return NativeType.F64;\r\n case TypeKind.VOID: return NativeType.None;\r\n }\r\n }\r\n\r\n /** Converts this type to its native `0` value. */\r\n toNativeZero(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n case TypeKind.VOID: assert(false);\r\n default: return module.createI32(0);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(0);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(0);\r\n case TypeKind.F32: return module.createF32(0);\r\n case TypeKind.F64: return module.createF64(0);\r\n }\r\n }\r\n\r\n /** Converts this type to its native `1` value. */\r\n toNativeOne(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n case TypeKind.VOID: assert(false);\r\n default: return module.createI32(1);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(1);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(1);\r\n case TypeKind.F32: return module.createF32(1);\r\n case TypeKind.F64: return module.createF64(1);\r\n }\r\n }\r\n\r\n /** Converts this type to its native `-1` value. */\r\n toNativeNegOne(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n case TypeKind.VOID: assert(false);\r\n default: return module.createI32(-1);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(-1);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(-1, -1);\r\n case TypeKind.F32: return module.createF32(-1);\r\n case TypeKind.F64: return module.createF64(-1);\r\n }\r\n }\r\n\r\n /** Converts this type to its signature string. */\r\n toSignatureString(): string {\r\n switch (this.kind) {\r\n default: return \"i\";\r\n case TypeKind.I64:\r\n case TypeKind.U64: return \"I\";\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: return this.size == 64 ? \"I\" : \"i\";\r\n case TypeKind.F32: return \"f\";\r\n case TypeKind.F64: return \"F\";\r\n case TypeKind.VOID: return \"v\";\r\n }\r\n }\r\n\r\n // Types\r\n\r\n /** An 8-bit signed integer. */\r\n static readonly i8: Type = new Type(TypeKind.I8,\r\n TypeFlags.SIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 8\r\n );\r\n\r\n /** A 16-bit signed integer. */\r\n static readonly i16: Type = new Type(TypeKind.I16,\r\n TypeFlags.SIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 16\r\n );\r\n\r\n /** A 32-bit signed integer. */\r\n static readonly i32: Type = new Type(TypeKind.I32,\r\n TypeFlags.SIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit signed integer. */\r\n static readonly i64: Type = new Type(TypeKind.I64,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 32-bit signed size. WASM32 only. */\r\n static readonly isize32: Type = new Type(TypeKind.ISIZE,\r\n TypeFlags.SIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.POINTER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit signed size. WASM64 only. */\r\n static readonly isize64: Type = new Type(TypeKind.ISIZE,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.POINTER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** An 8-bit unsigned integer. */\r\n static readonly u8: Type = new Type(TypeKind.U8,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 8\r\n );\r\n\r\n /** A 16-bit unsigned integer. */\r\n static readonly u16: Type = new Type(TypeKind.U16,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 16\r\n );\r\n\r\n /** A 32-bit unsigned integer. */\r\n static readonly u32: Type = new Type(TypeKind.U32,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit unsigned integer. */\r\n static readonly u64: Type = new Type(TypeKind.U64,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 32-bit unsigned size. WASM32 only. */\r\n static readonly usize32: Type = new Type(TypeKind.USIZE,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.POINTER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit unsigned size. WASM64 only. */\r\n static readonly usize64: Type = new Type(TypeKind.USIZE,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.POINTER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 1-bit unsigned integer. */\r\n static readonly bool: Type = new Type(TypeKind.BOOL,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 1\r\n );\r\n\r\n /** A 32-bit float. */\r\n static readonly f32: Type = new Type(TypeKind.F32,\r\n TypeFlags.SIGNED |\r\n TypeFlags.FLOAT |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit float. */\r\n static readonly f64: Type = new Type(TypeKind.F64,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.FLOAT |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** No return type. */\r\n static readonly void: Type = new Type(TypeKind.VOID, TypeFlags.NONE, 0);\r\n}\r\n\r\n/** Converts an array of types to an array of native types. */\r\nexport function typesToNativeTypes(types: Type[]): NativeType[] {\r\n var numTypes = types.length;\r\n var ret = new Array(numTypes);\r\n for (let i = 0; i < numTypes; ++i) ret[i] = types[i].toNativeType();\r\n return ret;\r\n}\r\n\r\n/** Converts an array of types to its combined string representation. */\r\nexport function typesToString(types: Type[]): string {\r\n var numTypes = types.length;\r\n if (!numTypes) return \"\";\r\n var sb = new Array(numTypes);\r\n for (let i = 0; i < numTypes; ++i) sb[i] = types[i].toString();\r\n return sb.join(\",\");\r\n}\r\n\r\n/** Represents a fully resolved function signature. */\r\nexport class Signature {\r\n\r\n /** Parameter types, if any, excluding `this`. */\r\n parameterTypes: Type[];\r\n /** Parameter names, if known, excluding `this`. */\r\n parameterNames: string[] | null;\r\n /** Number of required parameters excluding `this`. Other parameters are considered optional. */\r\n requiredParameters: i32;\r\n /** Return type. */\r\n returnType: Type;\r\n /** This type, if an instance signature. */\r\n thisType: Type | null;\r\n /** Whether the last parameter is a rest parameter. */\r\n hasRest: bool;\r\n /** Cached {@link FunctionTarget}. */\r\n cachedFunctionTarget: FunctionTarget | null = null;\r\n /** Respective function type. */\r\n type: Type;\r\n\r\n /** Constructs a new signature. */\r\n constructor(\r\n parameterTypes: Type[] | null = null,\r\n returnType: Type | null = null,\r\n thisType: Type | null = null\r\n ) {\r\n this.parameterTypes = parameterTypes ? parameterTypes : [];\r\n this.parameterNames = null;\r\n this.requiredParameters = 0;\r\n this.returnType = returnType ? returnType : Type.void;\r\n this.thisType = thisType;\r\n this.hasRest = false;\r\n this.type = Type.u32.asFunction(this);\r\n }\r\n\r\n /** Gets the known or, alternatively, generic parameter name at the specified index. */\r\n getParameterName(index: i32): string {\r\n var parameterNames = this.parameterNames;\r\n return parameterNames && parameterNames.length > index\r\n ? parameterNames[index]\r\n : getDefaultParameterName(index);\r\n }\r\n\r\n /** Tests if a value of this function type is assignable to a target of the specified function type. */\r\n isAssignableTo(target: Signature): bool {\r\n // TODO: maybe cache results?\r\n\r\n // check `this` type\r\n var thisThisType = this.thisType;\r\n var targetThisType = target.thisType;\r\n if (thisThisType) {\r\n if (!(targetThisType && thisThisType.isAssignableTo(targetThisType))) return false;\r\n } else if (targetThisType) {\r\n return false;\r\n }\r\n\r\n // check rest parameter\r\n if (this.hasRest != target.hasRest) return false; // TODO\r\n\r\n // check parameter types\r\n var thisParameterTypes = this.parameterTypes;\r\n var targetParameterTypes = target.parameterTypes;\r\n var numParameters = thisParameterTypes.length;\r\n if (numParameters != targetParameterTypes.length) return false;\r\n for (let i = 0; i < numParameters; ++i) {\r\n let thisParameterType = thisParameterTypes[i];\r\n let targetParameterType = targetParameterTypes[i];\r\n if (!thisParameterType.isAssignableTo(targetParameterType)) return false;\r\n }\r\n\r\n // check return type\r\n var thisReturnType = this.returnType;\r\n var targetReturnType = target.returnType;\r\n return thisReturnType == targetReturnType || thisReturnType.isAssignableTo(targetReturnType);\r\n }\r\n\r\n /** Converts a signature to a function type string. */\r\n static makeSignatureString(parameterTypes: Type[] | null, returnType: Type, thisType: Type | null = null): string {\r\n var sb = [];\r\n if (thisType) sb.push(thisType.toSignatureString());\r\n if (parameterTypes) {\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) sb.push(parameterTypes[i].toSignatureString());\r\n }\r\n sb.push(returnType.toSignatureString());\r\n return sb.join(\"\");\r\n }\r\n\r\n /** Converts this signature to a function type string. */\r\n toSignatureString(): string {\r\n return Signature.makeSignatureString(this.parameterTypes, this.returnType, this.thisType);\r\n }\r\n\r\n /** Converts this signature to a string. */\r\n toString(includeThis: bool = false): string {\r\n var sb = new Array();\r\n sb.push(\"(\");\r\n var index = 0;\r\n var thisType = this.thisType;\r\n if (thisType) {\r\n if (includeThis) {\r\n sb.push(\"this: \");\r\n sb.push(thisType.toString());\r\n index = 1;\r\n }\r\n }\r\n var parameters = this.parameterTypes;\r\n var numParameters = parameters.length;\r\n if (numParameters) {\r\n let names = this.parameterNames;\r\n let numNames = names ? names.length : 0;\r\n let optionalStart = this.requiredParameters;\r\n let restIndex = this.hasRest ? numParameters - 1 : -1;\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n if (index) sb.push(\", \");\r\n if (i == restIndex) sb.push(\"...\");\r\n if (i < numNames) sb.push((names)[i]);\r\n else sb.push(getDefaultParameterName(i));\r\n if (i >= optionalStart && i != restIndex) sb.push(\"?: \");\r\n else sb.push(\": \");\r\n sb.push(parameters[i].toString());\r\n }\r\n }\r\n sb.push(\") => \");\r\n sb.push(this.returnType.toString());\r\n return sb.join(\"\");\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n// Cached default parameter names used where names are unknown.\r\nvar cachedDefaultParameterNames: string[] | null = null;\r\n\r\n/** Gets the cached default parameter name for the specified index. */\r\nexport function getDefaultParameterName(index: i32): string {\r\n if (!cachedDefaultParameterNames) cachedDefaultParameterNames = [];\r\n for (let i = cachedDefaultParameterNames.length; i <= index; ++i) {\r\n cachedDefaultParameterNames.push(\"arg$\" + i.toString(10));\r\n }\r\n return cachedDefaultParameterNames[index - 1];\r\n}\r\n","/**\r\n * A TypeScript tokenizer modified for AssemblyScript.\r\n *\r\n * Skips over trivia and provides a general mark/reset mechanism for the parser to utilize on\r\n * ambiguous tokens.\r\n *\r\n * @module tokenizer\r\n *//***/\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticMessage,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Source,\r\n CommentKind\r\n} from \"./ast\";\r\n\r\nimport {\r\n CharCode,\r\n isLineBreak,\r\n isWhiteSpace,\r\n isIdentifierStart,\r\n isIdentifierPart,\r\n isDecimalDigit,\r\n isOctalDigit,\r\n isKeywordCharacter\r\n} from \"./util\";\r\n\r\n/** Named token types. */\r\nexport enum Token {\r\n\r\n // keywords\r\n // discarded: ANY, BOOLEAN, NEVER, NUMBER, STRING, SYMBOL, UNDEFINED, LESSTHAN_SLASH\r\n\r\n ABSTRACT,\r\n AS,\r\n ASYNC,\r\n AWAIT, // ES2017\r\n BREAK, // ES2017\r\n CASE, // ES2017\r\n CATCH, // ES2017\r\n CLASS, // ES2017\r\n CONST, // ES2017\r\n CONTINUE, // ES2017\r\n CONSTRUCTOR,\r\n DEBUGGER, // ES2017\r\n DECLARE,\r\n DEFAULT, // ES2017\r\n DELETE, // ES2017\r\n DO, // ES2017\r\n ELSE, // ES2017\r\n ENUM, // ES2017 future\r\n EXPORT, // ES2017\r\n EXTENDS, // ES2017\r\n FALSE, // ES\r\n FINALLY, // ES2017\r\n FOR, // ES2017\r\n FROM, // AS possible identifier\r\n FUNCTION, // ES2017\r\n GET,\r\n IF, // ES2017\r\n IMPLEMENTS, // ES2017 non-lexical\r\n IMPORT, // ES2017\r\n IN, // ES2017\r\n INSTANCEOF, // ES2017\r\n INTERFACE, // ES2017 non-lexical\r\n IS,\r\n KEYOF,\r\n LET, // ES2017 non-lexical\r\n MODULE, // AS possible identifier\r\n NAMESPACE, // AS possible identifier\r\n NEW, // ES2017\r\n NULL, // ES\r\n OF,\r\n PACKAGE, // ES2017 non-lexical\r\n PRIVATE, // ES2017 non-lexical\r\n PROTECTED, // ES2017 non-lexical\r\n PUBLIC, // ES2017 non-lexical\r\n READONLY,\r\n RETURN, // ES2017\r\n SET,\r\n STATIC, // ES2017 non-lexical\r\n SUPER, // ES2017\r\n SWITCH, // ES2017\r\n THIS, // ES2017\r\n THROW, // ES2017\r\n TRUE, // ES\r\n TRY, // ES2017\r\n TYPE, // AS possible identifier\r\n TYPEOF, // ES2017\r\n VAR, // ES2017\r\n VOID, // ES2017\r\n WHILE, // ES2017\r\n WITH, // ES2017\r\n YIELD, // ES2017\r\n\r\n // punctuation\r\n\r\n OPENBRACE,\r\n CLOSEBRACE,\r\n OPENPAREN,\r\n CLOSEPAREN,\r\n OPENBRACKET,\r\n CLOSEBRACKET,\r\n DOT,\r\n DOT_DOT_DOT,\r\n SEMICOLON,\r\n COMMA,\r\n LESSTHAN,\r\n GREATERTHAN,\r\n LESSTHAN_EQUALS,\r\n GREATERTHAN_EQUALS,\r\n EQUALS_EQUALS,\r\n EXCLAMATION_EQUALS,\r\n EQUALS_EQUALS_EQUALS,\r\n EXCLAMATION_EQUALS_EQUALS,\r\n EQUALS_GREATERTHAN,\r\n PLUS,\r\n MINUS,\r\n ASTERISK_ASTERISK,\r\n ASTERISK,\r\n SLASH,\r\n PERCENT,\r\n PLUS_PLUS,\r\n MINUS_MINUS,\r\n LESSTHAN_LESSTHAN,\r\n GREATERTHAN_GREATERTHAN,\r\n GREATERTHAN_GREATERTHAN_GREATERTHAN,\r\n AMPERSAND,\r\n BAR,\r\n CARET,\r\n EXCLAMATION,\r\n TILDE,\r\n AMPERSAND_AMPERSAND,\r\n BAR_BAR,\r\n QUESTION,\r\n COLON,\r\n EQUALS,\r\n PLUS_EQUALS,\r\n MINUS_EQUALS,\r\n ASTERISK_EQUALS,\r\n ASTERISK_ASTERISK_EQUALS,\r\n SLASH_EQUALS,\r\n PERCENT_EQUALS,\r\n LESSTHAN_LESSTHAN_EQUALS,\r\n GREATERTHAN_GREATERTHAN_EQUALS,\r\n GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS,\r\n AMPERSAND_EQUALS,\r\n BAR_EQUALS,\r\n CARET_EQUALS,\r\n AT,\r\n\r\n // literals\r\n\r\n IDENTIFIER,\r\n STRINGLITERAL,\r\n INTEGERLITERAL,\r\n FLOATLITERAL,\r\n\r\n // meta\r\n\r\n INVALID,\r\n ENDOFFILE\r\n}\r\n\r\nexport enum IdentifierHandling {\r\n DEFAULT,\r\n PREFER,\r\n ALWAYS\r\n}\r\n\r\nexport function tokenFromKeyword(text: string): Token {\r\n assert(text.length);\r\n switch (text.charCodeAt(0)) {\r\n case CharCode.a: {\r\n switch (text) {\r\n case \"abstract\": return Token.ABSTRACT;\r\n case \"as\": return Token.AS;\r\n case \"async\": return Token.ASYNC;\r\n case \"await\": return Token.AWAIT;\r\n }\r\n break;\r\n }\r\n case CharCode.b: {\r\n switch (text) {\r\n case \"break\": return Token.BREAK;\r\n }\r\n break;\r\n }\r\n case CharCode.c: {\r\n switch (text) {\r\n case \"case\": return Token.CASE;\r\n case \"catch\": return Token.CATCH;\r\n case \"class\": return Token.CLASS;\r\n case \"continue\": return Token.CONTINUE;\r\n case \"const\": return Token.CONST;\r\n case \"constructor\": return Token.CONSTRUCTOR;\r\n }\r\n break;\r\n }\r\n case CharCode.d: {\r\n switch (text) {\r\n case \"debugger\": return Token.DEBUGGER;\r\n case \"declare\": return Token.DECLARE;\r\n case \"default\": return Token.DEFAULT;\r\n case \"delete\": return Token.DELETE;\r\n case \"do\": return Token.DO;\r\n }\r\n break;\r\n }\r\n case CharCode.e: {\r\n switch (text) {\r\n case \"else\": return Token.ELSE;\r\n case \"enum\": return Token.ENUM;\r\n case \"export\": return Token.EXPORT;\r\n case \"extends\": return Token.EXTENDS;\r\n }\r\n break;\r\n }\r\n case CharCode.f: {\r\n switch (text) {\r\n case \"false\": return Token.FALSE;\r\n case \"finally\": return Token.FINALLY;\r\n case \"for\": return Token.FOR;\r\n case \"from\": return Token.FROM;\r\n case \"function\": return Token.FUNCTION;\r\n }\r\n break;\r\n }\r\n case CharCode.g: {\r\n switch (text) {\r\n case \"get\": return Token.GET;\r\n }\r\n break;\r\n }\r\n case CharCode.i: {\r\n switch (text) {\r\n case \"if\": return Token.IF;\r\n case \"implements\": return Token.IMPLEMENTS;\r\n case \"import\": return Token.IMPORT;\r\n case \"in\": return Token.IN;\r\n case \"instanceof\": return Token.INSTANCEOF;\r\n case \"interface\": return Token.INTERFACE;\r\n case \"is\": return Token.IS;\r\n }\r\n break;\r\n }\r\n case CharCode.k: {\r\n switch (text) {\r\n case \"keyof\": return Token.KEYOF;\r\n }\r\n break;\r\n }\r\n case CharCode.l: {\r\n switch (text) {\r\n case \"let\": return Token.LET;\r\n }\r\n break;\r\n }\r\n case CharCode.m: {\r\n switch (text) {\r\n case \"module\": return Token.MODULE;\r\n }\r\n break;\r\n }\r\n case CharCode.n: {\r\n switch (text) {\r\n case \"namespace\": return Token.NAMESPACE;\r\n case \"new\": return Token.NEW;\r\n case \"null\": return Token.NULL;\r\n }\r\n break;\r\n }\r\n case CharCode.o: {\r\n switch (text) {\r\n case \"of\": return Token.OF;\r\n }\r\n break;\r\n }\r\n case CharCode.p: {\r\n switch (text) {\r\n case \"package\": return Token.PACKAGE;\r\n case \"private\": return Token.PRIVATE;\r\n case \"protected\": return Token.PROTECTED;\r\n case \"public\": return Token.PUBLIC;\r\n }\r\n break;\r\n }\r\n case CharCode.r: {\r\n switch (text) {\r\n case \"readonly\": return Token.READONLY;\r\n case \"return\": return Token.RETURN;\r\n }\r\n break;\r\n }\r\n case CharCode.s: {\r\n switch (text) {\r\n case \"set\": return Token.SET;\r\n case \"static\": return Token.STATIC;\r\n case \"super\": return Token.SUPER;\r\n case \"switch\": return Token.SWITCH;\r\n }\r\n break;\r\n }\r\n case CharCode.t: {\r\n switch (text) {\r\n case \"this\": return Token.THIS;\r\n case \"throw\": return Token.THROW;\r\n case \"true\": return Token.TRUE;\r\n case \"try\": return Token.TRY;\r\n case \"type\": return Token.TYPE;\r\n case \"typeof\": return Token.TYPEOF;\r\n }\r\n break;\r\n }\r\n case CharCode.v: {\r\n switch (text) {\r\n case \"var\": return Token.VAR;\r\n case \"void\": return Token.VOID;\r\n }\r\n break;\r\n }\r\n case CharCode.w: {\r\n switch (text) {\r\n case \"while\": return Token.WHILE;\r\n case \"with\": return Token.WITH;\r\n }\r\n break;\r\n }\r\n case CharCode.y: {\r\n switch (text) {\r\n case \"yield\": return Token.YIELD;\r\n }\r\n break;\r\n }\r\n }\r\n return Token.INVALID;\r\n}\r\n\r\nexport function tokenIsAlsoIdentifier(token: Token): bool {\r\n switch (token) {\r\n case Token.ABSTRACT:\r\n case Token.AS:\r\n case Token.CONSTRUCTOR:\r\n case Token.DECLARE:\r\n case Token.DELETE:\r\n case Token.FROM:\r\n case Token.FOR:\r\n case Token.GET:\r\n case Token.IS:\r\n case Token.KEYOF:\r\n case Token.MODULE:\r\n case Token.NAMESPACE:\r\n case Token.READONLY:\r\n case Token.SET:\r\n case Token.TYPE: return true;\r\n default: return false;\r\n }\r\n}\r\n\r\nexport function operatorTokenToString(token: Token): string {\r\n switch (token) {\r\n case Token.DELETE: return \"delete\";\r\n case Token.IN: return \"in\";\r\n case Token.INSTANCEOF: return \"instanceof\";\r\n case Token.NEW: return \"new\";\r\n case Token.TYPEOF: return \"typeof\";\r\n case Token.VOID: return \"void\";\r\n case Token.YIELD: return \"yield\";\r\n case Token.DOT_DOT_DOT: return \"...\";\r\n case Token.COMMA: return \",\";\r\n case Token.LESSTHAN: return \"<\";\r\n case Token.GREATERTHAN: return \">\";\r\n case Token.LESSTHAN_EQUALS: return \"<=\";\r\n case Token.GREATERTHAN_EQUALS: return \">=\";\r\n case Token.EQUALS_EQUALS: return \"==\";\r\n case Token.EXCLAMATION_EQUALS: return \"!=\";\r\n case Token.EQUALS_EQUALS_EQUALS: return \"===\";\r\n case Token.EXCLAMATION_EQUALS_EQUALS: return \"!==\";\r\n case Token.PLUS: return \"+\";\r\n case Token.MINUS: return \"-\";\r\n case Token.ASTERISK_ASTERISK: return \"**\";\r\n case Token.ASTERISK: return \"*\";\r\n case Token.SLASH: return \"/\";\r\n case Token.PERCENT: return \"%\";\r\n case Token.PLUS_PLUS: return \"++\";\r\n case Token.MINUS_MINUS: return \"--\";\r\n case Token.LESSTHAN_LESSTHAN: return \"<<\";\r\n case Token.GREATERTHAN_GREATERTHAN: return \">>\";\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: return \">>>\";\r\n case Token.AMPERSAND: return \"&\";\r\n case Token.BAR: return \"|\";\r\n case Token.CARET: return \"^\";\r\n case Token.EXCLAMATION: return \"!\";\r\n case Token.TILDE: return \"~\";\r\n case Token.AMPERSAND_AMPERSAND: return \"&&\";\r\n case Token.BAR_BAR: return \"||\";\r\n case Token.EQUALS: return \"=\";\r\n case Token.PLUS_EQUALS: return \"+=\";\r\n case Token.MINUS_EQUALS: return \"-=\";\r\n case Token.ASTERISK_EQUALS: return \"*=\";\r\n case Token.ASTERISK_ASTERISK_EQUALS: return \"**=\";\r\n case Token.SLASH_EQUALS: return \"/=\";\r\n case Token.PERCENT_EQUALS: return \"%=\";\r\n case Token.LESSTHAN_LESSTHAN_EQUALS: return \"<<=\";\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS: return \">>=\";\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS: return \">>>=\";\r\n case Token.AMPERSAND_EQUALS: return \"&=\";\r\n case Token.BAR_EQUALS: return \"|=\";\r\n case Token.CARET_EQUALS: return \"^=\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\nexport class Range {\r\n\r\n source: Source;\r\n start: i32;\r\n end: i32;\r\n\r\n // TODO: set these while tokenizing\r\n // line: i32;\r\n // column: i32;\r\n\r\n constructor(source: Source, start: i32, end: i32) {\r\n this.source = source;\r\n this.start = start;\r\n this.end = end;\r\n }\r\n\r\n static join(a: Range, b: Range): Range {\r\n if (a.source != b.source) throw new Error(\"source mismatch\");\r\n return new Range(a.source,\r\n a.start < b.start ? a.start : b.start,\r\n a.end > b.end ? a.end : b.end\r\n );\r\n }\r\n\r\n get atStart(): Range {\r\n return new Range(this.source, this.start, this.start);\r\n }\r\n get atEnd(): Range {\r\n return new Range(this.source, this.end, this.end);\r\n }\r\n\r\n get line(): i32 {\r\n var text = this.source.text;\r\n var line = 1;\r\n for (let pos = this.start; pos >= 0; --pos) {\r\n if (text.charCodeAt(pos) == CharCode.LINEFEED) line++;\r\n }\r\n return line;\r\n }\r\n\r\n get column(): i32 {\r\n var text = this.source.text;\r\n var column = 0;\r\n for (let pos = this.start - 1; pos >= 0; --pos) {\r\n if (text.charCodeAt(pos) == CharCode.LINEFEED) break;\r\n ++column;\r\n }\r\n return column;\r\n }\r\n\r\n toString(): string {\r\n return this.source.text.substring(this.start, this.end);\r\n }\r\n\r\n debugInfoRef: usize = 0;\r\n}\r\n\r\ndeclare function parseFloat(str: string): f64;\r\n\r\n/** Handler for intercepting comments while tokenizing. */\r\nexport type CommentHandler = (kind: CommentKind, text: string, range: Range) => void;\r\n\r\n/** Tokenizes a source to individual {@link Token}s. */\r\nexport class Tokenizer extends DiagnosticEmitter {\r\n\r\n source: Source;\r\n end: i32 = 0;\r\n\r\n pos: i32 = 0;\r\n token: Token = -1;\r\n tokenPos: i32 = 0;\r\n\r\n nextToken: Token = -1;\r\n nextTokenPos: i32 = 0;\r\n nextTokenOnNewLine: bool = false;\r\n\r\n onComment: CommentHandler | null = null;\r\n\r\n /** Constructs a new tokenizer. */\r\n constructor(source: Source, diagnostics: DiagnosticMessage[] | null = null) {\r\n super(diagnostics);\r\n this.source = source;\r\n this.pos = 0;\r\n this.end = source.text.length;\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n\r\n var text = source.text;\r\n\r\n // skip bom\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.BYTEORDERMARK\r\n ) {\r\n ++this.pos;\r\n }\r\n\r\n // skip shebang\r\n if (\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.HASH &&\r\n text.charCodeAt(this.pos + 1) == CharCode.EXCLAMATION\r\n ) {\r\n this.pos += 2;\r\n while (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) != CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n // 'next' now starts at lf or eof\r\n }\r\n }\r\n\r\n next(identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT): Token {\r\n this.nextToken = -1;\r\n return this.token = this.unsafeNext(identifierHandling);\r\n }\r\n\r\n private unsafeNext(\r\n identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT,\r\n maxTokenLength: i32 = i32.MAX_VALUE\r\n ): Token {\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n this.tokenPos = this.pos;\r\n let c = text.charCodeAt(this.pos);\r\n switch (c) {\r\n case CharCode.CARRIAGERETURN: {\r\n if (!(\r\n ++this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.LINEFEED\r\n )) break;\r\n // otherwise fall-through\r\n }\r\n case CharCode.LINEFEED:\r\n case CharCode.TAB:\r\n case CharCode.VERTICALTAB:\r\n case CharCode.FORMFEED:\r\n case CharCode.SPACE: {\r\n ++this.pos;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.EXCLAMATION_EQUALS_EQUALS;\r\n }\r\n return Token.EXCLAMATION_EQUALS;\r\n }\r\n return Token.EXCLAMATION;\r\n }\r\n case CharCode.DOUBLEQUOTE:\r\n case CharCode.SINGLEQUOTE:\r\n case CharCode.BACKTICK: { // TODO\r\n return Token.STRINGLITERAL; // expects a call to readString\r\n }\r\n case CharCode.PERCENT: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.PERCENT_EQUALS;\r\n }\r\n return Token.PERCENT;\r\n }\r\n case CharCode.AMPERSAND: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.AMPERSAND) {\r\n ++this.pos;\r\n return Token.AMPERSAND_AMPERSAND;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.AMPERSAND_EQUALS;\r\n }\r\n }\r\n return Token.AMPERSAND;\r\n }\r\n case CharCode.OPENPAREN: {\r\n ++this.pos;\r\n return Token.OPENPAREN;\r\n }\r\n case CharCode.CLOSEPAREN: {\r\n ++this.pos;\r\n return Token.CLOSEPAREN;\r\n }\r\n case CharCode.ASTERISK: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.ASTERISK_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.ASTERISK_ASTERISK_EQUALS;\r\n }\r\n return Token.ASTERISK_ASTERISK;\r\n }\r\n }\r\n return Token.ASTERISK;\r\n }\r\n case CharCode.PLUS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.PLUS) {\r\n ++this.pos;\r\n return Token.PLUS_PLUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.PLUS_EQUALS;\r\n }\r\n }\r\n return Token.PLUS;\r\n }\r\n case CharCode.COMMA: {\r\n ++this.pos;\r\n return Token.COMMA;\r\n }\r\n case CharCode.MINUS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.MINUS) {\r\n ++this.pos;\r\n return Token.MINUS_MINUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.MINUS_EQUALS;\r\n }\r\n }\r\n return Token.MINUS;\r\n }\r\n case CharCode.DOT: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (isDecimalDigit(text.charCodeAt(this.pos))) {\r\n --this.pos;\r\n return Token.FLOATLITERAL; // expects a call to readFloat\r\n }\r\n if (\r\n maxTokenLength > 2 && this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.DOT &&\r\n text.charCodeAt(this.pos + 1) == CharCode.DOT\r\n ) {\r\n this.pos += 2;\r\n return Token.DOT_DOT_DOT;\r\n }\r\n }\r\n return Token.DOT;\r\n }\r\n case CharCode.SLASH: {\r\n let commentStartPos = this.pos;\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.SLASH) { // single-line\r\n let commentKind = CommentKind.LINE;\r\n if (\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n ) {\r\n ++this.pos;\r\n commentKind = CommentKind.TRIPLE;\r\n }\r\n while (++this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.LINEFEED) {\r\n ++this.pos;\r\n break;\r\n }\r\n }\r\n if (this.onComment) {\r\n this.onComment(\r\n commentKind,\r\n text.substring(commentStartPos, this.pos),\r\n this.range(commentStartPos, this.pos)\r\n );\r\n }\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) { // multi-line\r\n let closed = false;\r\n while (++this.pos < this.end) {\r\n c = text.charCodeAt(this.pos);\r\n if (\r\n c == CharCode.ASTERISK &&\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n ) {\r\n this.pos += 2;\r\n closed = true;\r\n break;\r\n }\r\n }\r\n if (!closed) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n this.range(this.pos), \"*/\"\r\n );\r\n } else if (this.onComment) {\r\n this.onComment(\r\n CommentKind.BLOCK,\r\n text.substring(commentStartPos, this.pos),\r\n this.range(commentStartPos, this.pos)\r\n );\r\n }\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.SLASH_EQUALS;\r\n }\r\n }\r\n return Token.SLASH;\r\n }\r\n case CharCode._0:\r\n case CharCode._1:\r\n case CharCode._2:\r\n case CharCode._3:\r\n case CharCode._4:\r\n case CharCode._5:\r\n case CharCode._6:\r\n case CharCode._7:\r\n case CharCode._8:\r\n case CharCode._9: {\r\n return this.testInteger()\r\n ? Token.INTEGERLITERAL // expects a call to readInteger\r\n : Token.FLOATLITERAL; // expects a call to readFloat\r\n }\r\n case CharCode.COLON: {\r\n ++this.pos;\r\n return Token.COLON;\r\n }\r\n case CharCode.SEMICOLON: {\r\n ++this.pos;\r\n return Token.SEMICOLON;\r\n }\r\n case CharCode.LESSTHAN: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.LESSTHAN) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 &&\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.LESSTHAN_LESSTHAN_EQUALS;\r\n }\r\n return Token.LESSTHAN_LESSTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.LESSTHAN_EQUALS;\r\n }\r\n }\r\n return Token.LESSTHAN;\r\n }\r\n case CharCode.EQUALS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 &&\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.EQUALS_EQUALS_EQUALS;\r\n }\r\n return Token.EQUALS_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n return Token.EQUALS_GREATERTHAN;\r\n }\r\n }\r\n return Token.EQUALS;\r\n }\r\n case CharCode.GREATERTHAN: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n if (maxTokenLength > 2 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 3 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS;\r\n }\r\n return Token.GREATERTHAN_GREATERTHAN_GREATERTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_GREATERTHAN_EQUALS;\r\n }\r\n }\r\n return Token.GREATERTHAN_GREATERTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_EQUALS;\r\n }\r\n }\r\n return Token.GREATERTHAN;\r\n }\r\n case CharCode.QUESTION: {\r\n ++this.pos;\r\n return Token.QUESTION;\r\n }\r\n case CharCode.OPENBRACKET: {\r\n ++this.pos;\r\n return Token.OPENBRACKET;\r\n }\r\n case CharCode.CLOSEBRACKET: {\r\n ++this.pos;\r\n return Token.CLOSEBRACKET;\r\n }\r\n case CharCode.CARET: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.CARET_EQUALS;\r\n }\r\n return Token.CARET;\r\n }\r\n case CharCode.OPENBRACE: {\r\n ++this.pos;\r\n return Token.OPENBRACE;\r\n }\r\n case CharCode.BAR: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.BAR) {\r\n ++this.pos;\r\n return Token.BAR_BAR;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.BAR_EQUALS;\r\n }\r\n }\r\n return Token.BAR;\r\n }\r\n case CharCode.CLOSEBRACE: {\r\n ++this.pos;\r\n return Token.CLOSEBRACE;\r\n }\r\n case CharCode.TILDE: {\r\n ++this.pos;\r\n return Token.TILDE;\r\n }\r\n case CharCode.AT: {\r\n ++this.pos;\r\n return Token.AT;\r\n }\r\n default: {\r\n if (isIdentifierStart(c)) {\r\n if (isKeywordCharacter(c)) {\r\n let posBefore = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(c = text.charCodeAt(this.pos))\r\n ) {\r\n if (!isKeywordCharacter(c)) {\r\n this.pos = posBefore;\r\n return Token.IDENTIFIER;\r\n }\r\n }\r\n let keywordText = text.substring(posBefore, this.pos);\r\n let keywordToken = tokenFromKeyword(keywordText);\r\n if (\r\n keywordToken != Token.INVALID &&\r\n identifierHandling !== IdentifierHandling.ALWAYS &&\r\n !(\r\n identifierHandling === IdentifierHandling.PREFER &&\r\n tokenIsAlsoIdentifier(keywordToken)\r\n )\r\n ) {\r\n return keywordToken;\r\n }\r\n this.pos = posBefore;\r\n }\r\n return Token.IDENTIFIER; // expects a call to readIdentifier\r\n } else if (isWhiteSpace(c)) {\r\n ++this.pos;\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Invalid_character,\r\n this.range(this.pos, this.pos + 1)\r\n );\r\n ++this.pos;\r\n return Token.INVALID;\r\n }\r\n }\r\n }\r\n return Token.ENDOFFILE;\r\n }\r\n\r\n peek(\r\n checkOnNewLine: bool = false,\r\n identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT,\r\n maxCompoundLength: i32 = i32.MAX_VALUE\r\n ): Token {\r\n var text = this.source.text;\r\n if (this.nextToken < 0) {\r\n let posBefore = this.pos;\r\n let tokenBefore = this.token;\r\n let tokenPosBefore = this.tokenPos;\r\n this.nextToken = this.unsafeNext(identifierHandling, maxCompoundLength);\r\n this.nextTokenPos = this.tokenPos;\r\n if (checkOnNewLine) {\r\n this.nextTokenOnNewLine = false;\r\n for (let pos = posBefore, end = this.nextTokenPos; pos < end; ++pos) {\r\n if (isLineBreak(text.charCodeAt(pos))) {\r\n this.nextTokenOnNewLine = true;\r\n break;\r\n }\r\n }\r\n }\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n }\r\n return this.nextToken;\r\n }\r\n\r\n skipIdentifier(): bool {\r\n return this.skip(Token.IDENTIFIER, IdentifierHandling.PREFER);\r\n }\r\n\r\n skipIdentifierName(): bool {\r\n return this.skip(Token.IDENTIFIER, IdentifierHandling.ALWAYS);\r\n }\r\n\r\n skip(token: Token, identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT): bool {\r\n var posBefore = this.pos;\r\n var tokenBefore = this.token;\r\n var tokenPosBefore = this.tokenPos;\r\n var maxCompoundLength = i32.MAX_VALUE;\r\n switch (token) {\r\n case Token.GREATERTHAN: { // where parsing type arguments\r\n maxCompoundLength = 1;\r\n break;\r\n }\r\n }\r\n this.token = this.unsafeNext(identifierHandling, maxCompoundLength);\r\n if (this.token == token) {\r\n this.nextToken = -1;\r\n return true;\r\n } else {\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n return false;\r\n }\r\n }\r\n\r\n mark(): State {\r\n var state: State;\r\n if (reusableState) {\r\n state = reusableState;\r\n reusableState = null;\r\n } else {\r\n state = new State();\r\n }\r\n state.pos = this.pos;\r\n state.token = this.token;\r\n state.tokenPos = this.tokenPos;\r\n return state;\r\n }\r\n\r\n discard(state: State): void {\r\n reusableState = state;\r\n }\r\n\r\n reset(state: State): void {\r\n this.pos = state.pos;\r\n this.token = state.token;\r\n this.tokenPos = state.tokenPos;\r\n this.nextToken = -1;\r\n }\r\n\r\n range(start: i32 = -1, end: i32 = -1): Range {\r\n if (start < 0) {\r\n start = this.tokenPos;\r\n end = this.pos;\r\n } else if (end < 0) {\r\n end = start;\r\n }\r\n return new Range(this.source, start, end);\r\n }\r\n\r\n readIdentifier(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(text.charCodeAt(this.pos))\r\n );\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readString(): string {\r\n var text = this.source.text;\r\n var quote = text.charCodeAt(this.pos++);\r\n var start = this.pos;\r\n var result = \"\";\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.end)\r\n );\r\n break;\r\n }\r\n let c = text.charCodeAt(this.pos);\r\n if (c == quote) {\r\n result += text.substring(start, this.pos++);\r\n break;\r\n }\r\n if (c == CharCode.BACKSLASH) {\r\n result += text.substring(start, this.pos);\r\n result += this.readEscapeSequence();\r\n start = this.pos;\r\n continue;\r\n }\r\n if (isLineBreak(c)) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n return result;\r\n }\r\n\r\n readEscapeSequence(): string {\r\n if (++this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.end)\r\n );\r\n return \"\";\r\n }\r\n\r\n var text = this.source.text;\r\n var c = text.charCodeAt(this.pos++);\r\n switch (c) {\r\n case CharCode._0: return \"\\0\";\r\n case CharCode.b: return \"\\b\";\r\n case CharCode.t: return \"\\t\";\r\n case CharCode.n: return \"\\n\";\r\n case CharCode.v: return \"\\v\";\r\n case CharCode.f: return \"\\f\";\r\n case CharCode.r: return \"\\r\";\r\n case CharCode.SINGLEQUOTE: return \"'\";\r\n case CharCode.DOUBLEQUOTE: return \"\\\"\";\r\n case CharCode.u: {\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.OPENBRACE\r\n ) {\r\n ++this.pos;\r\n return this.readExtendedUnicodeEscape(); // \\u{DDDDDDDD}\r\n }\r\n return this.readUnicodeEscape(); // \\uDDDD\r\n }\r\n case CharCode.CARRIAGERETURN: {\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n // fall through\r\n }\r\n case CharCode.LINEFEED:\r\n case CharCode.LINESEPARATOR:\r\n case CharCode.PARAGRAPHSEPARATOR: return \"\";\r\n default: return String.fromCharCode(c);\r\n }\r\n }\r\n\r\n readRegexpPattern(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var escaped = false;\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.end)\r\n );\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.BACKSLASH) {\r\n ++this.pos;\r\n escaped = true;\r\n continue;\r\n }\r\n let c = text.charCodeAt(this.pos);\r\n if (c == CharCode.SLASH && !escaped) break;\r\n if (isLineBreak(c)) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n escaped = false;\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readRegexpFlags(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var flags = 0;\r\n while (this.pos < this.end) {\r\n let c: i32 = text.charCodeAt(this.pos);\r\n if (!isIdentifierPart(c)) break;\r\n ++this.pos;\r\n\r\n // make sure each supported flag is unique\r\n switch (c) {\r\n case CharCode.g: {\r\n flags |= flags & 1 ? -1 : 1;\r\n break;\r\n }\r\n case CharCode.i: {\r\n flags |= flags & 2 ? -1 : 2;\r\n break;\r\n }\r\n case CharCode.m: {\r\n flags |= flags & 4 ? -1 : 4;\r\n break;\r\n }\r\n default: {\r\n flags = -1;\r\n break;\r\n }\r\n }\r\n }\r\n if (flags == -1) {\r\n this.error(\r\n DiagnosticCode.Invalid_regular_expression_flags,\r\n this.range(start, this.pos)\r\n );\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n testInteger(): bool {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 1 < this.end) {\r\n switch (text.charCodeAt(this.pos + 2)) {\r\n case CharCode.X:\r\n case CharCode.x:\r\n case CharCode.B:\r\n case CharCode.b:\r\n case CharCode.O:\r\n case CharCode.o: return true;\r\n }\r\n }\r\n var pos = this.pos;\r\n while (pos < this.end) {\r\n let c = text.charCodeAt(pos);\r\n if (c == CharCode.DOT || c == CharCode.E || c == CharCode.e) {\r\n return false;\r\n }\r\n if ((c < CharCode._0 || c > CharCode._9) && c != CharCode._) break;\r\n // does not validate separator placement (this is done in readXYInteger)\r\n pos++;\r\n }\r\n return true;\r\n }\r\n\r\n readInteger(): I64 {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 2 < this.end) {\r\n switch (text.charCodeAt(this.pos + 1)) {\r\n case CharCode.X:\r\n case CharCode.x: {\r\n this.pos += 2;\r\n return this.readHexInteger();\r\n }\r\n case CharCode.B:\r\n case CharCode.b: {\r\n this.pos += 2;\r\n return this.readBinaryInteger();\r\n }\r\n case CharCode.O:\r\n case CharCode.o: {\r\n this.pos += 2;\r\n return this.readOctalInteger();\r\n }\r\n }\r\n if (isOctalDigit(text.charCodeAt(this.pos + 1))) {\r\n let start = this.pos;\r\n ++this.pos;\r\n let value = this.readOctalInteger();\r\n this.error(\r\n DiagnosticCode.Octal_literals_are_not_allowed_in_strict_mode,\r\n this.range(start, this.pos)\r\n );\r\n return value;\r\n }\r\n }\r\n return this.readDecimalInteger();\r\n }\r\n\r\n readHexInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_16 = i64_new(16, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 16 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n // value = value * 16 + 10 + c - CharCode.A;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.A, 0)\r\n );\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n // value = value * 16 + 10 + c - CharCode.a;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.a, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readDecimalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_10 = i64_new(10, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 10 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_10),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readOctalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_8 = i64_new(8, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._7) {\r\n // value = value * 8 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_8),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Octal_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readBinaryInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_2 = i64_new(2, 0);\r\n var i64_1 = i64_new(1, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c == CharCode._0) {\r\n // value = value * 2;\r\n value = i64_mul(\r\n value,\r\n i64_2\r\n );\r\n } else if (c == CharCode._1) {\r\n // value = value * 2 + 1;\r\n value = i64_add(\r\n i64_mul(value, i64_2),\r\n i64_1\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Binary_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readFloat(): f64 {\r\n // var text = this.source.text;\r\n // if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 2 < this.end) {\r\n // switch (text.charCodeAt(this.pos + 1)) {\r\n // case CharCode.X:\r\n // case CharCode.x: {\r\n // this.pos += 2;\r\n // return this.readHexFloat();\r\n // }\r\n // }\r\n // }\r\n return this.readDecimalFloat();\r\n }\r\n\r\n readDecimalFloat(): f64 {\r\n // TODO: numeric separators (parseFloat can't handle these)\r\n var start = this.pos;\r\n var text = this.source.text;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n if (this.pos < this.end && text.charCodeAt(this.pos) == CharCode.DOT) {\r\n ++this.pos;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n if (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos);\r\n if (c == CharCode.E || c == CharCode.e) {\r\n if (\r\n ++this.pos < this.end && (\r\n text.charCodeAt(this.pos) == CharCode.MINUS ||\r\n text.charCodeAt(this.pos) == CharCode.PLUS\r\n ) &&\r\n isDecimalDigit(text.charCodeAt(this.pos + 1))\r\n ) {\r\n ++this.pos;\r\n }\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n }\r\n return parseFloat(text.substring(start, this.pos));\r\n }\r\n\r\n readHexFloat(): f64 {\r\n throw new Error(\"not implemented\"); // TBD\r\n }\r\n\r\n readUnicodeEscape(): string {\r\n var remain = 4;\r\n var value = 0;\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos++);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n value = value * 16 + c - CharCode._0;\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n value = value * 16 + 10 + c - CharCode.A;\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n value = value * 16 + 10 + c - CharCode.a;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(this.pos - 1, this.pos)\r\n );\r\n return \"\";\r\n }\r\n if (--remain == 0) break;\r\n }\r\n if (remain) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.pos)\r\n );\r\n return \"\";\r\n }\r\n return String.fromCharCode(value);\r\n }\r\n\r\n private readExtendedUnicodeEscape(): string {\r\n var start = this.pos;\r\n var value = this.readHexInteger();\r\n var value32 = i64_low(value);\r\n var invalid = false;\r\n\r\n assert(!i64_high(value));\r\n if (value32 > 0x10FFFF) {\r\n this.error(\r\n DiagnosticCode.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n var text = this.source.text;\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(start, this.end)\r\n );\r\n invalid = true;\r\n } else if (text.charCodeAt(this.pos) == CharCode.CLOSEBRACE) {\r\n ++this.pos;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Unterminated_Unicode_escape_sequence,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n if (invalid) return \"\";\r\n return value32 < 65536\r\n ? String.fromCharCode(value32)\r\n : String.fromCharCode(\r\n (((value32 - 65536) / 1024 | 0) + 0xD800) as i32,\r\n ( (value32 - 65536) % 1024 + 0xDC00) as i32\r\n );\r\n }\r\n\r\n finish(): void {\r\n }\r\n}\r\n\r\n/** Tokenizer state as returned by {@link Tokenizer#mark} and consumed by {@link Tokenizer#reset}. */\r\nexport class State {\r\n /** Current position. */\r\n pos: i32;\r\n /** Current token. */\r\n token: Token;\r\n /** Current token's position. */\r\n tokenPos: i32;\r\n}\r\n\r\n// Reusable state object to reduce allocations\r\nvar reusableState: State | null = null;\r\n","/**\r\n * 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: FunctionRef[] = [];\r\n /** Argument count helper global. */\r\n argcVar: GlobalRef = 0;\r\n /** Argument count helper setter. */\r\n argcSet: FunctionRef = 0;\r\n /** Indicates whether the iterateRoots function must be generated. */\r\n needsIterateRoots: bool = false;\r\n\r\n /** Compiles a {@link Program} to a {@link Module} using the specified options. */\r\n static compile(program: Program, options: Options | null = null): Module {\r\n return new Compiler(program, options).compile();\r\n }\r\n\r\n /** Constructs a new compiler for a {@link Program} using the specified options. */\r\n constructor(program: Program, options: Options | null = null) {\r\n super(program.diagnostics);\r\n this.program = program;\r\n this.resolver = program.resolver;\r\n if (!options) options = new Options();\r\n this.options = options;\r\n this.memoryOffset = i64_new(\r\n // leave space for `null`. also functions as a sentinel for erroneous stores at offset 0.\r\n // note that Binaryen's asm.js output utilizes the first 8 bytes for reinterpretations (#1547)\r\n max(options.memoryBase, 8)\r\n );\r\n this.module = Module.create();\r\n }\r\n\r\n /** Performs compilation of the underlying {@link Program} to a {@link Module}. */\r\n compile(): Module {\r\n var options = this.options;\r\n var module = this.module;\r\n var program = this.program;\r\n\r\n // initialize lookup maps, built-ins, imports, exports, etc.\r\n program.initialize(options);\r\n\r\n // set up the start function\r\n var startFunctionInstance = new Function(program.startFunction, \"start\", new Signature([], Type.void));\r\n this.startFunctionInstance = startFunctionInstance;\r\n var startFunctionBody = new Array();\r\n this.startFunctionBody = startFunctionBody;\r\n this.currentFunction = startFunctionInstance;\r\n\r\n // compile entry file(s) while traversing reachable elements\r\n var sources = program.sources;\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n if (sources[i].isEntry) this.compileSource(sources[i]);\r\n }\r\n\r\n // compile the start function if not empty or called by main\r\n if (startFunctionBody.length || program.mainFunction !== null) {\r\n let signature = startFunctionInstance.signature;\r\n let funcRef = module.addFunction(\r\n startFunctionInstance.internalName,\r\n this.ensureFunctionType(\r\n signature.parameterTypes,\r\n signature.returnType,\r\n signature.thisType\r\n ),\r\n typesToNativeTypes(startFunctionInstance.additionalLocals),\r\n module.createBlock(null, startFunctionBody)\r\n );\r\n startFunctionInstance.finalize(module, funcRef);\r\n if (!program.mainFunction) module.setStart(funcRef);\r\n }\r\n\r\n // set up static memory segments and the heap base pointer\r\n var memoryOffset = this.memoryOffset;\r\n memoryOffset = i64_align(memoryOffset, options.usizeType.byteSize);\r\n this.memoryOffset = memoryOffset;\r\n if (options.isWasm64) {\r\n module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I64,\r\n false,\r\n module.createI64(i64_low(memoryOffset), i64_high(memoryOffset))\r\n );\r\n } else {\r\n module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I32,\r\n false,\r\n module.createI32(i64_low(memoryOffset))\r\n );\r\n }\r\n\r\n // determine initial page size\r\n var numPages = this.memorySegments.length\r\n ? i64_low(i64_shr_u(i64_align(memoryOffset, 0x10000), i64_new(16, 0)))\r\n : 0;\r\n module.setMemory(\r\n numPages,\r\n this.options.isWasm64\r\n ? Module.MAX_MEMORY_WASM64\r\n : Module.MAX_MEMORY_WASM32,\r\n this.memorySegments,\r\n options.target,\r\n \"memory\"\r\n );\r\n\r\n // import memory if requested (default memory is named '0' by Binaryen)\r\n if (options.importMemory) module.addMemoryImport(\"0\", \"env\", \"memory\");\r\n\r\n // set up function table\r\n var functionTable = this.functionTable;\r\n var functionTableSize = functionTable.length;\r\n var functionTableExported = false;\r\n if (functionTableSize) {\r\n module.setFunctionTable(functionTable);\r\n module.addTableExport(\"0\", \"table\");\r\n functionTableExported = true;\r\n }\r\n\r\n // import table if requested (default table is named '0' by Binaryen)\r\n if (options.importTable) {\r\n module.addTableImport(\"0\", \"env\", \"table\");\r\n if (!functionTableExported) module.addTableExport(\"0\", \"table\");\r\n }\r\n\r\n // set up module exports\r\n for (let [name, moduleExport] of program.moduleLevelExports) {\r\n this.makeModuleExport(name, moduleExport.element);\r\n }\r\n\r\n // set up gc\r\n if (this.needsIterateRoots) compileIterateRoots(this);\r\n\r\n return module;\r\n }\r\n\r\n /** Applies the respective module export(s) for the specified element. */\r\n private makeModuleExport(name: string, element: Element, prefix: string = \"\"): void {\r\n\r\n // traverse members\r\n var members = element.members;\r\n if (members) {\r\n let subPrefix = prefix + name + (element.kind == ElementKind.CLASS\r\n ? INSTANCE_DELIMITER\r\n : STATIC_DELIMITER\r\n );\r\n if (element.kind == ElementKind.NAMESPACE) {\r\n for (let member of members.values()) {\r\n if (!member.is(CommonFlags.EXPORT)) continue;\r\n this.makeModuleExport(member.simpleName, member, subPrefix);\r\n }\r\n } else {\r\n for (let member of members.values()) {\r\n if (member.is(CommonFlags.PRIVATE)) continue;\r\n this.makeModuleExport(member.simpleName, member, subPrefix);\r\n }\r\n }\r\n }\r\n\r\n switch (element.kind) {\r\n\r\n // export global\r\n case ElementKind.GLOBAL: {\r\n let isConst = element.is(CommonFlags.CONST) || element.is(CommonFlags.STATIC | CommonFlags.READONLY);\r\n if (!isConst && !this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n let declaration = (element).declaration;\r\n if (declaration) {\r\n this.error(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n this.module.addGlobalExport(element.internalName, prefix + name);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUMVALUE: {\r\n if (!assert(element.parent).is(CommonFlags.CONST) && !this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n let declaration = (element).declaration;\r\n if (declaration) {\r\n this.error(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n this.module.addGlobalExport(element.internalName, prefix + name);\r\n }\r\n break;\r\n }\r\n\r\n // export function\r\n case ElementKind.FUNCTION: {\r\n let instance = element;\r\n let signature = instance.signature;\r\n if (signature.requiredParameters < signature.parameterTypes.length) {\r\n // utilize trampoline to fill in omitted arguments\r\n instance = this.ensureTrampoline(instance);\r\n this.ensureArgcSet();\r\n }\r\n if (instance.is(CommonFlags.COMPILED)) this.module.addFunctionExport(instance.internalName, prefix + name);\r\n break;\r\n }\r\n\r\n // export getter and setter\r\n case ElementKind.PROPERTY: {\r\n let getter = assert((element).getterPrototype);\r\n this.makeModuleExport(GETTER_PREFIX + name, getter, prefix);\r\n let setter = (element).setterPrototype;\r\n if (setter) this.makeModuleExport(SETTER_PREFIX + name, setter, prefix);\r\n break;\r\n }\r\n\r\n // export a getter and a setter\r\n case ElementKind.FIELD: {\r\n let module = this.module;\r\n let type = (element).type;\r\n let nativeType = type.toNativeType();\r\n let offset = (element).memoryOffset;\r\n let usizeType = this.options.usizeType;\r\n let nativeSizeType = this.options.nativeSizeType;\r\n\r\n // make a getter\r\n let getterName = prefix + GETTER_PREFIX + name;\r\n module.addFunction(\r\n getterName,\r\n this.ensureFunctionType(null, type, usizeType),\r\n null,\r\n module.createLoad(\r\n type.byteSize,\r\n type.is(TypeFlags.SIGNED),\r\n module.createGetLocal(0, nativeSizeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(getterName, getterName);\r\n\r\n // make a setter\r\n if (!element.is(CommonFlags.READONLY)) {\r\n let setterName = prefix + SETTER_PREFIX + name;\r\n module.addFunction(\r\n setterName,\r\n this.ensureFunctionType([ type ], Type.void, usizeType),\r\n null,\r\n module.createStore(\r\n type.byteSize,\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createGetLocal(1, nativeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(setterName, setterName);\r\n }\r\n break;\r\n }\r\n\r\n // skip prototype and export instances\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n for (let instance of (element).instances.values()) {\r\n let instanceName = name;\r\n if (instance.is(CommonFlags.GENERIC)) {\r\n let fullName = instance.internalName;\r\n instanceName += fullName.substring(fullName.lastIndexOf(\"<\"));\r\n }\r\n this.makeModuleExport(instanceName, instance, prefix);\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n for (let instance of (element).instances.values()) {\r\n let instanceName = name;\r\n if (instance.is(CommonFlags.GENERIC)) {\r\n let fullName = instance.internalName;\r\n instanceName += fullName.substring(fullName.lastIndexOf(\"<\"));\r\n }\r\n let ctor = instance.constructorInstance;\r\n if (ctor) this.makeModuleExport(instanceName + INSTANCE_DELIMITER + ctor.simpleName, ctor, prefix);\r\n this.makeModuleExport(instanceName, instance, prefix);\r\n }\r\n break;\r\n }\r\n\r\n // all possible members already handled above\r\n case ElementKind.ENUM:\r\n case ElementKind.CLASS:\r\n case ElementKind.NAMESPACE: break;\r\n\r\n default: assert(false);\r\n }\r\n }\r\n\r\n // sources\r\n\r\n /** Compiles a source by looking it up by path first. */\r\n compileSourceByPath(normalizedPathWithoutExtension: string, reportNode: Node): void {\r\n var source = this.program.lookupSourceByPath(normalizedPathWithoutExtension);\r\n if (source) this.compileSource(source);\r\n else {\r\n this.error(\r\n DiagnosticCode.File_0_not_found,\r\n reportNode.range, normalizedPathWithoutExtension\r\n );\r\n }\r\n }\r\n\r\n /** Compiles a source. */\r\n compileSource(source: Source): void {\r\n if (source.is(CommonFlags.COMPILED)) return;\r\n source.set(CommonFlags.COMPILED);\r\n\r\n // compile top-level statements\r\n var noTreeShaking = this.options.noTreeShaking;\r\n var isEntry = source.isEntry;\r\n var startFunctionInstance = this.startFunctionInstance;\r\n var startFunctionBody = this.startFunctionBody;\r\n var statements = source.statements;\r\n for (let i = 0, k = statements.length; i < k; ++i) {\r\n let statement = statements[i];\r\n switch (statement.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) &&\r\n !(statement).isGeneric\r\n ) {\r\n this.compileClassDeclaration(statement, [], null);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: break;\r\n case NodeKind.ENUMDECLARATION: {\r\n if (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) {\r\n this.compileEnumDeclaration(statement);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n if (\r\n (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) &&\r\n !(statement).isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(statement, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.IMPORT: {\r\n this.compileSourceByPath(\r\n (statement).normalizedPath,\r\n (statement).path\r\n );\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n if (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) {\r\n this.compileNamespaceDeclaration(statement);\r\n }\r\n break;\r\n }\r\n case NodeKind.VARIABLE: { // global, always compiled as initializers might have side effects\r\n let variableInit = this.compileVariableStatement(statement);\r\n if (variableInit) startFunctionBody.push(variableInit);\r\n break;\r\n }\r\n case NodeKind.EXPORT: {\r\n if ((statement).normalizedPath != null) {\r\n this.compileSourceByPath(\r\n (statement).normalizedPath,\r\n (statement).path\r\n );\r\n }\r\n if (noTreeShaking || isEntry) {\r\n this.compileExportStatement(statement);\r\n }\r\n break;\r\n }\r\n default: { // otherwise a top-level statement that is part of the start function's body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = startFunctionInstance;\r\n startFunctionBody.push(this.compileStatement(statement));\r\n this.currentFunction = previousFunction;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // globals\r\n\r\n compileGlobalDeclaration(declaration: VariableDeclaration): Global | null {\r\n // look up the initialized program element\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.GLOBAL);\r\n if (!this.compileGlobal(element)) return null; // reports\r\n return element;\r\n }\r\n\r\n compileGlobal(global: Global): bool {\r\n if (global.is(CommonFlags.COMPILED)) return true;\r\n global.set(CommonFlags.COMPILED);\r\n\r\n var module = this.module;\r\n var declaration = global.declaration;\r\n var initExpr: ExpressionRef = 0;\r\n\r\n if (global.type == Type.void) { // type is void if not yet resolved or not annotated\r\n if (declaration) {\r\n\r\n // resolve now if annotated\r\n if (declaration.type) {\r\n let resolvedType = this.resolver.resolveType(declaration.type); // reports\r\n if (!resolvedType) return false;\r\n if (resolvedType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.type.range\r\n );\r\n return false;\r\n }\r\n global.type = resolvedType;\r\n\r\n // infer from initializer if not annotated\r\n } else if (declaration.initializer) { // infer type using void/NONE for literal inference\r\n initExpr = this.compileExpressionRetainType( // reports\r\n declaration.initializer,\r\n Type.void,\r\n WrapMode.WRAP\r\n );\r\n if (this.currentType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.initializer.range, this.currentType.toString(), \"\"\r\n );\r\n return false;\r\n }\r\n global.type = this.currentType;\r\n\r\n // must either be annotated or have an initializer\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.name.range.atEnd\r\n );\r\n return false;\r\n }\r\n } else {\r\n assert(false); // must have a declaration if 'void' (and thus resolved later on)\r\n }\r\n }\r\n\r\n // ambient builtins like 'HEAP_BASE' need to be resolved but are added explicitly\r\n if (global.is(CommonFlags.AMBIENT) && global.hasDecorator(DecoratorFlags.BUILTIN)) return true;\r\n\r\n var nativeType = global.type.toNativeType();\r\n var isDeclaredConstant = global.is(CommonFlags.CONST) || global.is(CommonFlags.STATIC | CommonFlags.READONLY);\r\n\r\n // handle imports\r\n if (global.is(CommonFlags.AMBIENT)) {\r\n\r\n // constant global\r\n if (isDeclaredConstant || this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n global.set(CommonFlags.MODULE_IMPORT);\r\n if (declaration) {\r\n mangleImportName(global, declaration, global.parent);\r\n } else {\r\n mangleImportName_moduleName = \"env\";\r\n mangleImportName_elementName = global.simpleName;\r\n }\r\n module.addGlobalImport(\r\n global.internalName,\r\n mangleImportName_moduleName,\r\n mangleImportName_elementName,\r\n nativeType\r\n );\r\n global.set(CommonFlags.COMPILED);\r\n return true;\r\n\r\n // importing mutable globals is not supported in the MVP\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n assert(declaration).range\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n // the MVP does not yet support initializer expressions other than constant values (and constant\r\n // get_globals), hence such initializations must be performed in the start function for now.\r\n var initializeInStart = false;\r\n\r\n // evaluate initializer if present\r\n if (declaration !== null && declaration.initializer !== null) {\r\n if (!initExpr) {\r\n initExpr = this.compileExpression(\r\n declaration.initializer,\r\n global.type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n );\r\n }\r\n\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (isDeclaredConstant) {\r\n initExpr = module.precomputeExpression(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n declaration.range\r\n );\r\n initializeInStart = true;\r\n }\r\n } else {\r\n initializeInStart = true;\r\n }\r\n }\r\n\r\n // explicitly inline if annotated\r\n if (global.hasDecorator(DecoratorFlags.INLINE)) {\r\n if (!initializeInStart) { // reported above\r\n assert(getExpressionId(initExpr) == ExpressionId.Const);\r\n let exprType = getExpressionType(initExpr);\r\n switch (exprType) {\r\n case NativeType.I32: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(getConstValueI32(initExpr), 0);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(\r\n getConstValueI64Low(initExpr),\r\n getConstValueI64High(initExpr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF32(initExpr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF64(initExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return false;\r\n }\r\n }\r\n global.set(CommonFlags.INLINED); // inline the value from now on\r\n }\r\n }\r\n\r\n // initialize to zero if there's no initializer\r\n } else {\r\n initExpr = global.type.toNativeZero(module);\r\n }\r\n\r\n var internalName = global.internalName;\r\n\r\n if (initializeInStart) { // initialize to mutable zero and set the actual value in start\r\n module.addGlobal(internalName, nativeType, true, global.type.toNativeZero(module));\r\n this.startFunctionBody.push(module.createSetGlobal(internalName, initExpr));\r\n\r\n } else { // compile normally\r\n module.addGlobal(internalName, nativeType, !isDeclaredConstant, initExpr);\r\n }\r\n return true;\r\n }\r\n\r\n // enums\r\n\r\n compileEnumDeclaration(declaration: EnumDeclaration): Enum | null {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(element)) return null;\r\n return element;\r\n }\r\n\r\n compileEnum(element: Enum): bool {\r\n if (element.is(CommonFlags.COMPILED)) return true;\r\n element.set(CommonFlags.COMPILED);\r\n\r\n var module = this.module;\r\n this.currentEnum = element;\r\n var previousValue: EnumValue | null = null;\r\n var previousValueIsMut = false;\r\n\r\n if (element.members) {\r\n for (let member of element.members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) continue; // happens if an enum is also a namespace\r\n let initInStart = false;\r\n let val = member;\r\n let valueDeclaration = val.declaration;\r\n val.set(CommonFlags.COMPILED);\r\n let initExpr: ExpressionRef;\r\n if (valueDeclaration.value) {\r\n initExpr = this.compileExpression(\r\n valueDeclaration.value,\r\n Type.i32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (element.is(CommonFlags.CONST)) {\r\n initExpr = module.precomputeExpression(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n this.error(\r\n DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,\r\n valueDeclaration.value.range\r\n );\r\n initInStart = true;\r\n }\r\n } else {\r\n initInStart = true;\r\n }\r\n }\r\n } else if (previousValue == null) {\r\n initExpr = module.createI32(0);\r\n } else {\r\n if (previousValueIsMut) {\r\n this.error(\r\n DiagnosticCode.Enum_member_must_have_initializer,\r\n valueDeclaration.range\r\n );\r\n }\r\n initExpr = module.createBinary(BinaryOp.AddI32,\r\n module.createGetGlobal(previousValue.internalName, NativeType.I32),\r\n module.createI32(1)\r\n );\r\n initExpr = module.precomputeExpression(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (element.is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.In_const_enum_declarations_member_initializer_must_be_constant_expression,\r\n valueDeclaration.range\r\n );\r\n }\r\n initInStart = true;\r\n }\r\n }\r\n if (initInStart) {\r\n module.addGlobal(val.internalName, NativeType.I32, true, module.createI32(0));\r\n this.startFunctionBody.push(module.createSetGlobal(val.internalName, initExpr));\r\n previousValueIsMut = true;\r\n } else {\r\n module.addGlobal(val.internalName, NativeType.I32, !element.is(CommonFlags.CONST), initExpr);\r\n previousValueIsMut = false;\r\n }\r\n previousValue = val;\r\n }\r\n }\r\n this.currentEnum = null;\r\n return true;\r\n }\r\n\r\n // functions\r\n\r\n /** Compiles a top-level function given its declaration. */\r\n compileFunctionDeclaration(\r\n declaration: FunctionDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null\r\n ): Function | null {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return this.compileFunctionUsingTypeArguments( // reports\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n null, // no outer scope (is top level)\r\n (element).declaration.name\r\n );\r\n }\r\n\r\n /** Resolves the specified type arguments prior to compiling the resulting function instance. */\r\n compileFunctionUsingTypeArguments(\r\n prototype: FunctionPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null,\r\n outerScope: Flow | null,\r\n reportNode: Node\r\n ): Function | null {\r\n var instance = this.resolver.resolveFunctionInclTypeArguments(\r\n prototype,\r\n typeArguments,\r\n contextualTypeArguments,\r\n reportNode\r\n );\r\n if (!instance) return null;\r\n instance.outerScope = outerScope;\r\n if (!this.compileFunction(instance)) return null; // reports\r\n return instance;\r\n }\r\n\r\n /** Either reuses or creates the function type matching the specified signature. */\r\n ensureFunctionType(\r\n parameterTypes: Type[] | null,\r\n returnType: Type,\r\n thisType: Type | null = null\r\n ): FunctionTypeRef {\r\n var numParameters = parameterTypes ? parameterTypes.length : 0;\r\n var paramTypes: NativeType[];\r\n var index = 0;\r\n if (thisType) {\r\n paramTypes = new Array(1 + numParameters);\r\n paramTypes[0] = thisType.toNativeType();\r\n index = 1;\r\n } else {\r\n paramTypes = new Array(numParameters);\r\n }\r\n if (parameterTypes) {\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n paramTypes[index] = parameterTypes[i].toNativeType();\r\n }\r\n }\r\n var resultType = returnType.toNativeType();\r\n var module = this.module;\r\n var typeRef = module.getFunctionTypeBySignature(resultType, paramTypes);\r\n if (!typeRef) {\r\n let name = Signature.makeSignatureString(parameterTypes, returnType, thisType);\r\n typeRef = module.addFunctionType(name, resultType, paramTypes);\r\n }\r\n return typeRef;\r\n }\r\n\r\n /** Compiles a readily resolved function instance. */\r\n compileFunction(instance: Function): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n assert(!(instance.is(CommonFlags.AMBIENT) && instance.hasDecorator(DecoratorFlags.BUILTIN)));\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n // check that modifiers are matching\r\n var declaration = instance.prototype.declaration;\r\n var body = declaration.body;\r\n if (body) {\r\n if (instance.is(CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n if (!instance.is(CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n declaration.name.range\r\n );\r\n }\r\n }\r\n\r\n var ref: FunctionRef;\r\n var signature = instance.signature;\r\n var typeRef = this.ensureFunctionType(signature.parameterTypes, signature.returnType, signature.thisType);\r\n var module = this.module;\r\n if (body) {\r\n let isConstructor = instance.is(CommonFlags.CONSTRUCTOR);\r\n let returnType = instance.signature.returnType;\r\n\r\n // compile body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = instance;\r\n let flow = instance.flow;\r\n let stmt: ExpressionRef;\r\n if (body.kind == NodeKind.EXPRESSION) { // () => expression\r\n assert(!instance.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.GET | CommonFlags.SET | CommonFlags.MAIN));\r\n assert(instance.is(CommonFlags.ARROW));\r\n stmt = this.compileExpression(\r\n (body).expression,\r\n returnType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n flow.set(FlowFlags.RETURNS);\r\n if (!flow.canOverflow(stmt, returnType)) flow.set(FlowFlags.RETURNS_WRAPPED);\r\n flow.finalize();\r\n } else {\r\n assert(body.kind == NodeKind.BLOCK);\r\n let stmts = this.compileStatements((body).statements);\r\n if (instance.is(CommonFlags.MAIN)) {\r\n module.addGlobal(\"~started\", NativeType.I32, true, module.createI32(0));\r\n stmts.unshift(\r\n module.createIf(\r\n module.createUnary(\r\n UnaryOp.EqzI32,\r\n module.createGetGlobal(\"~started\", NativeType.I32)\r\n ),\r\n module.createBlock(null, [\r\n module.createCall(\"start\", null, NativeType.None),\r\n module.createSetGlobal(\"~started\", module.createI32(1))\r\n ])\r\n )\r\n );\r\n }\r\n flow.finalize();\r\n if (isConstructor) {\r\n let nativeSizeType = this.options.nativeSizeType;\r\n assert(instance.is(CommonFlags.INSTANCE));\r\n\r\n // implicitly return `this` if the constructor doesn't always return on its own\r\n if (!flow.is(FlowFlags.RETURNS)) {\r\n\r\n // if all branches are guaranteed to allocate, skip the final conditional allocation\r\n if (flow.is(FlowFlags.ALLOCATES)) {\r\n stmts.push(module.createGetLocal(0, nativeSizeType));\r\n\r\n // if not all branches are guaranteed to allocate, also append a conditional allocation\r\n } else {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n stmts.push(module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, declaration.name)\r\n ));\r\n }\r\n }\r\n\r\n // make sure all branches return\r\n } else if (returnType != Type.void && !flow.is(FlowFlags.RETURNS)) {\r\n this.error(\r\n DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,\r\n declaration.signature.returnType.range\r\n );\r\n }\r\n stmt = !stmts.length\r\n ? module.createNop()\r\n : stmts.length == 1\r\n ? stmts[0]\r\n : module.createBlock(null, stmts, returnType.toNativeType());\r\n }\r\n this.currentFunction = previousFunction;\r\n\r\n // create the function\r\n ref = module.addFunction(\r\n instance.internalName,\r\n typeRef,\r\n typesToNativeTypes(instance.additionalLocals),\r\n stmt\r\n );\r\n\r\n // concrete functions cannot have an annotated external name\r\n if (instance.hasDecorator(DecoratorFlags.EXTERNAL)) {\r\n let decorator = assert(findDecorator(DecoratorKind.EXTERNAL, declaration.decorators));\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n decorator.range\r\n );\r\n }\r\n\r\n } else {\r\n instance.set(CommonFlags.MODULE_IMPORT);\r\n mangleImportName(instance, declaration, instance.prototype.parent); // TODO: check for duplicates\r\n\r\n // create the function import\r\n ref = module.addFunctionImport(\r\n instance.internalName,\r\n mangleImportName_moduleName,\r\n mangleImportName_elementName,\r\n typeRef\r\n );\r\n }\r\n\r\n instance.finalize(module, ref);\r\n return true;\r\n }\r\n\r\n // namespaces\r\n\r\n compileNamespaceDeclaration(declaration: NamespaceDeclaration): void {\r\n var members = declaration.members;\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n switch (member.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileClassDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileInterfaceDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileEnumDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileNamespaceDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n let variableInit = this.compileVariableStatement(member, true);\r\n if (variableInit) this.startFunctionBody.push(variableInit);\r\n }\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n }\r\n\r\n compileNamespace(ns: Namespace): void {\r\n if (!ns.members) return;\r\n\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let element of ns.members.values()) {\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking ||\r\n (element).is(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n this.compileEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking || (element).is(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n if (element.hasDecorator(DecoratorFlags.BUILTIN)) break;\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // exports\r\n\r\n compileExportStatement(statement: ExportStatement): void {\r\n var fileLevelExports = this.program.fileLevelExports;\r\n var members = statement.members;\r\n if (!members) return; // filespace\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n let element = fileLevelExports.get(\r\n statement.range.source.internalPath + PATH_DELIMITER + member.externalName.text\r\n );\r\n if (!element) continue; // reported in Program#initialize\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (!(element).is(CommonFlags.GENERIC)) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n this.compileEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC) &&\r\n statement.range.source.isEntry\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // classes\r\n\r\n compileClassDeclaration(\r\n declaration: ClassDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null\r\n ): void {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.compileClassUsingTypeArguments(\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n declaration\r\n );\r\n }\r\n\r\n compileClassUsingTypeArguments(\r\n prototype: ClassPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n var instance = this.resolver.resolveClassInclTypeArguments(\r\n prototype,\r\n typeArguments,\r\n contextualTypeArguments,\r\n alternativeReportNode || prototype.declaration\r\n );\r\n if (!instance) return;\r\n this.compileClass(instance);\r\n }\r\n\r\n compileClass(instance: Class): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n var staticMembers = instance.prototype.members;\r\n if (staticMembers) {\r\n for (let element of staticMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [], null, null,\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], null, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], null, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n var ctorInstance = instance.constructorInstance;\r\n if (ctorInstance) this.compileFunction(ctorInstance);\r\n var instanceMembers = instance.members;\r\n if (instanceMembers) {\r\n for (let element of instanceMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n instance.contextualTypeArguments,\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n element.set(CommonFlags.COMPILED);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], instance.contextualTypeArguments, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], instance.contextualTypeArguments, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n compileInterfaceDeclaration(\r\n declaration: InterfaceDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n // TODO\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n declaration.range\r\n );\r\n }\r\n\r\n // memory\r\n\r\n /** Adds a static memory segment with the specified data. */\r\n addMemorySegment(buffer: Uint8Array, alignment: i32 = 8): MemorySegment {\r\n var memoryOffset = i64_align(this.memoryOffset, alignment);\r\n var segment = MemorySegment.create(buffer, memoryOffset);\r\n this.memorySegments.push(segment);\r\n this.memoryOffset = i64_add(memoryOffset, i64_new(buffer.length, 0));\r\n return segment;\r\n }\r\n\r\n // function table\r\n\r\n /** Ensures that a table entry exists for the specified function and returns its index. */\r\n ensureFunctionTableEntry(func: Function): i32 {\r\n assert(func.is(CommonFlags.COMPILED));\r\n if (func.functionTableIndex >= 0) {\r\n return func.functionTableIndex;\r\n }\r\n var functionTable = this.functionTable;\r\n var index = functionTable.length;\r\n if (!func.is(CommonFlags.TRAMPOLINE) && func.signature.requiredParameters < func.signature.parameterTypes.length) {\r\n // insert the trampoline if the function has optional parameters\r\n func = this.ensureTrampoline(func);\r\n }\r\n functionTable.push(func.ref);\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 module.createBlock(returnLabel, body, returnType.toNativeType());\r\n }\r\n\r\n /** Gets the trampoline for the specified function. */\r\n ensureTrampoline(original: Function): Function {\r\n // A trampoline is a function that takes a fixed amount of operands with some of them possibly\r\n // being zeroed. It takes one additional argument denoting the number of actual operands\r\n // provided to the call, and takes appropriate steps to initialize zeroed operands to their\r\n // default values using the optional parameter initializers of the original function. Doing so\r\n // allows calls to functions with optional parameters to circumvent the trampoline when all\r\n // parameters are provided as a fast route, respectively setting up omitted operands in a proper\r\n // context otherwise.\r\n var trampoline = original.trampoline;\r\n if (trampoline) return trampoline;\r\n\r\n var originalSignature = original.signature;\r\n var originalName = original.internalName;\r\n var originalParameterTypes = originalSignature.parameterTypes;\r\n var originalParameterDeclarations = original.prototype.declaration.signature.parameters;\r\n var commonReturnType = originalSignature.returnType;\r\n var commonThisType = originalSignature.thisType;\r\n var isInstance = original.is(CommonFlags.INSTANCE);\r\n\r\n // arguments excl. `this`, operands incl. `this`\r\n var minArguments = originalSignature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = originalParameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (isInstance) {\r\n ++minOperands;\r\n ++maxOperands;\r\n }\r\n var numOptional = assert(maxOperands - minOperands);\r\n\r\n var forwardedOperands = new Array(minOperands);\r\n var operandIndex = 0;\r\n\r\n // forward `this` if applicable\r\n var module = this.module;\r\n if (isInstance) {\r\n forwardedOperands[0] = module.createGetLocal(0, this.options.nativeSizeType);\r\n operandIndex = 1;\r\n }\r\n\r\n // forward required arguments\r\n for (let i = 0; i < minArguments; ++i, ++operandIndex) {\r\n forwardedOperands[operandIndex] = module.createGetLocal(operandIndex, originalParameterTypes[i].toNativeType());\r\n }\r\n assert(operandIndex == minOperands);\r\n\r\n // create the trampoline element\r\n var trampolineSignature = new Signature(originalParameterTypes, commonReturnType, commonThisType);\r\n var trampolineName = originalName + \"|trampoline\";\r\n trampolineSignature.requiredParameters = maxArguments;\r\n trampoline = new Function(\r\n original.prototype,\r\n trampolineName,\r\n trampolineSignature,\r\n original.parent,\r\n original.contextualTypeArguments\r\n );\r\n trampoline.set(original.flags | CommonFlags.TRAMPOLINE | CommonFlags.COMPILED);\r\n original.trampoline = trampoline;\r\n\r\n // compile initializers of omitted arguments in scope of the trampoline function\r\n // this is necessary because initializers might need additional locals and a proper this context\r\n var previousFunction = this.currentFunction;\r\n this.currentFunction = trampoline;\r\n\r\n // create a br_table switching over the number of optional parameters provided\r\n var numNames = numOptional + 1; // incl. outer block\r\n var names = new Array(numNames);\r\n var ofN = \"of\" + numOptional.toString(10);\r\n for (let i = 0; i < numNames; ++i) {\r\n let label = i.toString(10) + ofN;\r\n names[i] = label;\r\n }\r\n var body = module.createBlock(names[0], [\r\n module.createBlock(\"outOfRange\", [\r\n module.createSwitch(names, \"outOfRange\",\r\n // condition is number of provided optional arguments, so subtract required arguments\r\n minArguments\r\n ? module.createBinary(\r\n BinaryOp.SubI32,\r\n module.createGetGlobal(\"~argc\", NativeType.I32),\r\n module.createI32(minArguments)\r\n )\r\n : module.createGetGlobal(\"~argc\", NativeType.I32)\r\n )\r\n ]),\r\n module.createUnreachable()\r\n ]);\r\n for (let i = 0; i < numOptional; ++i, ++operandIndex) {\r\n let type = originalParameterTypes[minArguments + i];\r\n let declaration = originalParameterDeclarations[minArguments + i];\r\n let initializer = declaration.initializer;\r\n let initExpr: ExpressionRef;\r\n if (initializer) {\r\n initExpr = module.createSetLocal(operandIndex,\r\n this.compileExpression(\r\n initializer,\r\n type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n )\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Optional_parameter_must_have_an_initializer,\r\n declaration.range\r\n );\r\n initExpr = module.createUnreachable();\r\n }\r\n body = module.createBlock(names[i + 1], [\r\n body,\r\n initExpr,\r\n ]);\r\n forwardedOperands[operandIndex] = module.createGetLocal(operandIndex, type.toNativeType());\r\n }\r\n this.currentFunction = previousFunction;\r\n assert(operandIndex == maxOperands);\r\n\r\n var funcRef = module.addFunction(\r\n trampolineName,\r\n this.ensureFunctionType(\r\n trampolineSignature.parameterTypes,\r\n trampolineSignature.returnType,\r\n trampolineSignature.thisType\r\n ),\r\n typesToNativeTypes(trampoline.additionalLocals),\r\n module.createBlock(null, [\r\n body,\r\n module.createCall(\r\n originalName,\r\n forwardedOperands,\r\n commonReturnType.toNativeType()\r\n )\r\n ], commonReturnType.toNativeType())\r\n );\r\n trampoline.finalize(module, funcRef);\r\n return trampoline;\r\n }\r\n\r\n /** Makes sure that the argument count helper global is present and returns its name. */\r\n private ensureArgcVar(): string {\r\n var internalName = \"~argc\";\r\n if (!this.argcVar) {\r\n let module = this.module;\r\n this.argcVar = module.addGlobal(\r\n internalName,\r\n NativeType.I32,\r\n true,\r\n module.createI32(0)\r\n );\r\n }\r\n return internalName;\r\n }\r\n\r\n /** Makes sure that the argument count helper setter is present and returns its name. */\r\n private ensureArgcSet(): string {\r\n var internalName = \"~setargc\";\r\n if (!this.argcSet) {\r\n let module = this.module;\r\n this.argcSet = module.addFunction(internalName,\r\n this.ensureFunctionType([ Type.u32 ], Type.void),\r\n null,\r\n module.createSetGlobal(this.ensureArgcVar(),\r\n module.createGetLocal(0, NativeType.I32)\r\n )\r\n );\r\n module.addFunctionExport(internalName, \"_setargc\");\r\n }\r\n return internalName;\r\n }\r\n\r\n /** Creates a direct call to the specified function. */\r\n makeCallDirect(\r\n instance: Function,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var numOperands = operands ? operands.length : 0;\r\n var numArguments = numOperands;\r\n var minArguments = instance.signature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = instance.signature.parameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n ++minOperands;\r\n ++maxOperands;\r\n --numArguments;\r\n }\r\n assert(numOperands >= minOperands);\r\n\r\n var module = this.module;\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n var returnType = instance.signature.returnType;\r\n var isCallImport = instance.is(CommonFlags.MODULE_IMPORT);\r\n\r\n // fill up omitted arguments with their initializers, if constant, otherwise with zeroes.\r\n if (numOperands < maxOperands) {\r\n if (!operands) {\r\n operands = new Array(maxOperands);\r\n operands.length = 0;\r\n }\r\n let parameterTypes = instance.signature.parameterTypes;\r\n let parameterNodes = instance.prototype.declaration.signature.parameters;\r\n let allOptionalsAreConstant = true;\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n let initializer = parameterNodes[i].initializer;\r\n if (!(initializer !== null && nodeIsConstantValue(initializer.kind))) {\r\n allOptionalsAreConstant = false;\r\n break;\r\n }\r\n }\r\n if (allOptionalsAreConstant) { // inline into the call\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(\r\n this.compileExpression(\r\n parameterNodes[i].initializer,\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n )\r\n );\r\n }\r\n } else { // otherwise fill up with zeroes and call the trampoline\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(parameterTypes[i].toNativeZero(module));\r\n }\r\n if (!isCallImport) {\r\n let original = instance;\r\n instance = this.ensureTrampoline(instance);\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n instance.flow.flags = original.flow.flags;\r\n this.program.instancesLookup.set(instance.internalName, instance); // so canOverflow can find it\r\n let nativeReturnType = returnType.toNativeType();\r\n this.currentType = returnType;\r\n return module.createBlock(null, [\r\n module.createSetGlobal(this.ensureArgcVar(), module.createI32(numArguments)),\r\n module.createCall(instance.internalName, operands, nativeReturnType)\r\n ], nativeReturnType);\r\n }\r\n }\r\n }\r\n\r\n // otherwise just call through\r\n this.currentType = returnType;\r\n if (isCallImport) return module.createCallImport(instance.internalName, operands, returnType.toNativeType());\r\n var ret = module.createCall(instance.internalName, operands, returnType.toNativeType());\r\n return ret;\r\n }\r\n\r\n /** Compiles an indirect call using an index argument and a signature. */\r\n compileCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n numArguments,\r\n thisArg != 0,\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallIndirect(signature, indexArg, operands);\r\n }\r\n\r\n /** Creates an indirect call to the function at `indexArg` in the function table. */\r\n makeCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var numOperands = operands ? operands.length : 0;\r\n var numArguments = numOperands;\r\n var minArguments = signature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = signature.parameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (signature.thisType) {\r\n ++minOperands;\r\n ++maxOperands;\r\n --numArguments;\r\n }\r\n assert(numOperands >= minOperands);\r\n\r\n this.ensureFunctionType(signature.parameterTypes, signature.returnType, signature.thisType);\r\n var module = this.module;\r\n\r\n // fill up omitted arguments with zeroes\r\n if (numOperands < maxOperands) {\r\n if (!operands) {\r\n operands = new Array(maxOperands);\r\n operands.length = 0;\r\n }\r\n let parameterTypes = signature.parameterTypes;\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(parameterTypes[i].toNativeZero(module));\r\n }\r\n }\r\n\r\n var returnType = signature.returnType;\r\n this.currentType = returnType;\r\n return module.createBlock(null, [\r\n module.createSetGlobal(this.ensureArgcVar(), // might still be calling a trampoline\r\n module.createI32(numArguments)\r\n ),\r\n module.createCallIndirect(indexArg, operands, signature.toSignatureString())\r\n ], returnType.toNativeType()); // not necessarily wrapped\r\n }\r\n\r\n compileCommaExpression(expression: CommaExpression, contextualType: Type): ExpressionRef {\r\n var expressions = expression.expressions;\r\n var numExpressions = expressions.length;\r\n var exprs = new Array(numExpressions--);\r\n for (let i = 0; i < numExpressions; ++i) {\r\n exprs[i] = this.compileExpression(\r\n expressions[i],\r\n Type.void, // drop all\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n exprs[numExpressions] = this.compileExpression(\r\n expressions[numExpressions],\r\n contextualType, // except last\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n return this.module.createBlock(null, exprs, this.currentType.toNativeType());\r\n }\r\n\r\n compileElementAccessExpression(expression: ElementAccessExpression, contextualType: Type): ExpressionRef {\r\n var target = this.resolver.resolveElementAccess(expression, this.currentFunction); // reports\r\n if (!target) return this.module.createUnreachable();\r\n switch (target.kind) {\r\n case ElementKind.CLASS: {\r\n let isUnchecked = this.currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.expression.range, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n let thisArg = this.compileExpression(\r\n expression.expression,\r\n (target).type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n return this.compileCallDirect(indexedGet, [\r\n expression.elementExpression\r\n ], expression, thisArg);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileFunctionExpression(expression: FunctionExpression, contextualType: Type): ExpressionRef {\r\n var declaration = expression.declaration;\r\n var name = declaration.name;\r\n var simpleName = (name.text.length\r\n ? name.text\r\n : \"anonymous\") + \"|\" + this.functionTable.length.toString(10);\r\n var currentFunction = this.currentFunction;\r\n var prototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n currentFunction.internalName + INNER_DELIMITER + simpleName,\r\n declaration,\r\n null,\r\n DecoratorFlags.NONE\r\n );\r\n var flow = currentFunction.flow;\r\n var instance = this.compileFunctionUsingTypeArguments(\r\n prototype,\r\n [],\r\n flow.contextualTypeArguments,\r\n flow,\r\n declaration\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n this.currentType = instance.signature.type; // TODO: get cached type?\r\n // NOTE that, in order to make this work in every case, the function must be represented by a\r\n // value, so we add it and rely on the optimizer to figure out where it can be called directly.\r\n var index = this.ensureFunctionTableEntry(instance); // reports\r\n return index < 0\r\n ? this.module.createUnreachable()\r\n : this.module.createI32(index);\r\n }\r\n\r\n /**\r\n * Compiles an identifier in the specified context.\r\n * @param retainConstantType Retains the type of inlined constants if `true`, otherwise\r\n * precomputes them according to context.\r\n */\r\n compileIdentifierExpression(\r\n expression: IdentifierExpression,\r\n contextualType: Type,\r\n retainConstantType: bool\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // check special keywords first\r\n switch (expression.kind) {\r\n case NodeKind.NULL: {\r\n let options = this.options;\r\n if (!contextualType.classReference) {\r\n this.currentType = options.usizeType;\r\n }\r\n return options.isWasm64\r\n ? module.createI64(0)\r\n : module.createI32(0);\r\n }\r\n case NodeKind.TRUE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(1);\r\n }\r\n case NodeKind.FALSE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(0);\r\n }\r\n case NodeKind.THIS: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n this.currentType = scopedThis.type;\r\n return module.createGetLocal(scopedThis.index, scopedThis.type.toNativeType());\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let thisType = (parent).type;\r\n if (currentFunction.is(CommonFlags.CONSTRUCTOR)) {\r\n if (!flow.is(FlowFlags.ALLOCATES)) {\r\n flow.set(FlowFlags.ALLOCATES);\r\n // must be conditional because `this` could have been provided by a derived class\r\n this.currentType = thisType;\r\n return module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, expression)\r\n );\r\n }\r\n }\r\n this.currentType = thisType;\r\n return module.createGetLocal(0, thisType.toNativeType());\r\n }\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n case NodeKind.SUPER: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n let scopedThisClass = assert(scopedThis.type.classReference);\r\n let base = scopedThisClass.base;\r\n if (base) {\r\n this.currentType = base.type;\r\n return module.createGetLocal(scopedThis.index, base.type.toNativeType());\r\n }\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let base = (parent).base;\r\n if (base) {\r\n let superType = base.type;\r\n this.currentType = superType;\r\n return module.createGetLocal(0, superType.toNativeType());\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise resolve\r\n var target = this.resolver.resolveIdentifier( // reports\r\n expression,\r\n this.currentEnum || currentFunction\r\n );\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.LOCAL: {\r\n let localType = (target).type;\r\n assert(localType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n let localIndex = (target).index;\r\n assert(localIndex >= 0);\r\n this.currentType = localType;\r\n return this.module.createGetLocal(localIndex, localType.toNativeType());\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field\r\n return this.module.createUnreachable();\r\n }\r\n let globalType = (target).type;\r\n assert(globalType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return this.module.createGetGlobal((target).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // here: if referenced from within the same enum\r\n if (!target.is(CommonFlags.COMPILED)) {\r\n this.error(\r\n DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,\r\n expression.range\r\n );\r\n this.currentType = Type.i32;\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.module.createI32((target).constantValue);\r\n }\r\n return this.module.createGetGlobal((target).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let instance = this.resolver.resolveFunction(\r\n target,\r\n null,\r\n currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!(instance && this.compileFunction(instance))) return module.createUnreachable();\r\n let index = this.ensureFunctionTableEntry(instance);\r\n this.currentType = instance.signature.type;\r\n return this.module.createI32(index);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileInstanceOfExpression(\r\n expression: InstanceOfExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n // NOTE that this differs from TypeScript in that the rhs is a type, not an expression. at the\r\n // time of implementation, this seemed more useful because dynamic rhs expressions are not\r\n // possible in AS anyway.\r\n var expr = this.compileExpressionRetainType(expression.expression, this.options.usizeType, WrapMode.NONE);\r\n var type = this.currentType;\r\n var isType = this.resolver.resolveType(expression.isType);\r\n this.currentType = Type.bool;\r\n if (!isType) return module.createUnreachable();\r\n return type.is(TypeFlags.NULLABLE) && !isType.is(TypeFlags.NULLABLE)\r\n ? type.nonNullableType.isAssignableTo(isType)\r\n ? module.createBinary( // not precomputeable\r\n type.is(TypeFlags.LONG)\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n expr,\r\n type.toNativeZero(module)\r\n )\r\n : module.createI32(0)\r\n : module.createI32(type.isAssignableTo(isType, true) ? 1 : 0);\r\n }\r\n\r\n compileLiteralExpression(\r\n expression: LiteralExpression,\r\n contextualType: Type,\r\n implicitNegate: bool = false\r\n ): ExpressionRef {\r\n var module = this.module;\r\n\r\n switch (expression.literalKind) {\r\n case LiteralKind.ARRAY: {\r\n assert(!implicitNegate);\r\n let classType = contextualType.classReference;\r\n if (\r\n classType &&\r\n classType.prototype == this.program.arrayPrototype\r\n ) {\r\n return this.compileArrayLiteral(\r\n assert(classType.typeArguments)[0],\r\n (expression).elementExpressions,\r\n 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.getTempLocal(arrayType, false);\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);\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 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 // shortcut if compiling the getter already failed\r\n if (getExpressionId(getValue) == ExpressionId.Unreachable) return getValue;\r\n var currentType = this.currentType;\r\n\r\n var op: BinaryOp;\r\n var nativeType: NativeType;\r\n var nativeOne: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS_PLUS: {\r\n\r\n // TODO: check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n switch (currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n op = BinaryOp.AddI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = module.createI32(1);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n let options = this.options;\r\n op = options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32;\r\n nativeType = options.nativeSizeType;\r\n nativeOne = currentType.toNativeOne(module);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n op = BinaryOp.AddI64;\r\n nativeType = NativeType.I64;\r\n nativeOne = module.createI64(1);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n op = BinaryOp.AddF32;\r\n nativeType = NativeType.F32;\r\n nativeOne = module.createF32(1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n op = BinaryOp.AddF64;\r\n nativeType = NativeType.F64;\r\n nativeOne = module.createF64(1);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n\r\n // TODO: check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n switch (currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n op = BinaryOp.SubI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = module.createI32(1);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n let options = this.options;\r\n op = options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32;\r\n nativeType = options.nativeSizeType;\r\n nativeOne = currentType.toNativeOne(module);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n op = BinaryOp.SubI64;\r\n nativeType = NativeType.I64;\r\n nativeOne = module.createI64(1);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n op = BinaryOp.SubF32;\r\n nativeType = NativeType.F32;\r\n nativeOne = module.createF32(1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n op = BinaryOp.SubF64;\r\n nativeType = NativeType.F64;\r\n nativeOne = module.createF64(1);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // simplify if dropped anyway\r\n if (contextualType == Type.void) {\r\n return this.compileAssignmentWithValue(expression.operand,\r\n module.createBinary(op,\r\n getValue,\r\n nativeOne\r\n ),\r\n false\r\n );\r\n }\r\n\r\n // otherwise use a temp local for the intermediate value (always possibly overflows)\r\n var tempLocal = currentFunction.getTempLocal(currentType, false);\r\n var setValue = this.compileAssignmentWithValue(expression.operand,\r\n module.createBinary(op,\r\n this.module.createGetLocal(tempLocal.index, nativeType),\r\n nativeOne\r\n ),\r\n false\r\n );\r\n this.currentType = assert(tempLocal).type;\r\n currentFunction.freeTempLocal(tempLocal);\r\n\r\n var localIndex = (tempLocal).index;\r\n return module.createBlock(null, [\r\n module.createSetLocal(localIndex, getValue),\r\n setValue,\r\n module.createGetLocal(localIndex, nativeType)\r\n ], nativeType); // result of 'x++' / 'x--' might overflow\r\n }\r\n\r\n compileUnaryPrefixExpression(\r\n expression: UnaryPrefixExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var compound = false;\r\n var expr: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PLUS);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // nop\r\n break;\r\n }\r\n case Token.MINUS: {\r\n if (expression.operand.kind == NodeKind.LITERAL && (\r\n (expression.operand).literalKind == LiteralKind.INTEGER ||\r\n (expression.operand).literalKind == LiteralKind.FLOAT\r\n )) {\r\n // implicitly negate integer and float literals. also enables proper checking of literal ranges.\r\n expr = this.compileLiteralExpression(expression.operand, contextualType, true);\r\n // compileExpression normally does this:\r\n if (this.options.sourceMap) this.addDebugLocation(expr, expression.range);\r\n break;\r\n }\r\n\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.MINUS);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.SubI32, module.createI32(0), expr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n this.currentType.toNativeZero(module),\r\n expr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, module.createI64(0), expr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createUnary(UnaryOp.NegF32, expr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createUnary(UnaryOp.NegF64, expr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.PLUS_PLUS: {\r\n compound = true;\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PREFIX_INC);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.AddI32, expr, this.module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n expr,\r\n this.currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AddI64, expr, module.createI64(1));\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.AddF32, expr, module.createF32(1));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.AddF64, expr, module.createF64(1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n compound = true;\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PREFIX_DEC);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.SubI32, expr, module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n expr,\r\n this.currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, expr, module.createI64(1));\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.SubF32, expr, module.createF32(1));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.SubF64, expr, module.createF64(1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.EXCLAMATION: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.NOT);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n // allow '!' for references even without an overload\r\n }\r\n\r\n expr = this.makeIsFalseish(expr, this.currentType);\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.TILDE: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType.is(TypeFlags.FLOAT)\r\n ? Type.i64\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_NOT);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n } else {\r\n expr = this.convertExpression(\r\n expr,\r\n this.currentType, this.currentType.intType,\r\n ConversionKind.IMPLICIT, WrapMode.NONE,\r\n expression.operand\r\n );\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.XorI32, expr, module.createI32(-1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n expr,\r\n this.currentType.toNativeNegOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.XorI64, expr, module.createI64(-1, -1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.TYPEOF: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(expression.operand, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n\r\n /** Makes sure that a 32-bit integer value is wrapped to a valid value of the specified type. */\r\n ensureSmallIntegerWrap(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n var flow = this.currentFunction.flow;\r\n switch (type.kind) {\r\n case TypeKind.I8: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = this.options.hasFeature(Feature.SIGN_EXTENSION)\r\n ? module.createUnary(UnaryOp.ExtendI8ToI32, expr)\r\n : module.createBinary(BinaryOp.ShrI32,\r\n module.createBinary(BinaryOp.ShlI32,\r\n expr,\r\n module.createI32(24)\r\n ),\r\n module.createI32(24)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.I16: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = this.options.hasFeature(Feature.SIGN_EXTENSION)\r\n ? module.createUnary(UnaryOp.ExtendI16ToI32, expr)\r\n : module.createBinary(BinaryOp.ShrI32,\r\n module.createBinary(BinaryOp.ShlI32,\r\n expr,\r\n module.createI32(16)\r\n ),\r\n module.createI32(16)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.U8: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xff)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.U16: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xffff)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.BOOL: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0x1)\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n return expr;\r\n }\r\n\r\n /** Creates a comparison whether an expression is 'false' in a broader sense. */\r\n makeIsFalseish(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n switch (type.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = this.ensureSmallIntegerWrap(expr, type);\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return module.createUnary(UnaryOp.EqzI32, expr);\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createUnary(UnaryOp.EqzI64, expr);\r\n }\r\n case TypeKind.USIZE: // TODO: strings?\r\n case TypeKind.ISIZE: {\r\n return module.createUnary(type.size == 64 ? UnaryOp.EqzI64 : UnaryOp.EqzI32, expr);\r\n }\r\n case TypeKind.F32: {\r\n return module.createBinary(BinaryOp.EqF32, expr, module.createF32(0));\r\n }\r\n case TypeKind.F64: {\r\n return module.createBinary(BinaryOp.EqF64, expr, module.createF64(0));\r\n }\r\n default: {\r\n assert(false);\r\n return module.createI32(1);\r\n }\r\n }\r\n }\r\n\r\n /** Creates a comparison whether an expression is 'true' in a broader sense. */\r\n makeIsTrueish(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n switch (type.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = this.ensureSmallIntegerWrap(expr, type);\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return expr;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createBinary(BinaryOp.NeI64, expr, module.createI64(0));\r\n }\r\n case TypeKind.USIZE: // TODO: strings?\r\n case TypeKind.ISIZE: {\r\n return type.size == 64\r\n ? module.createBinary(BinaryOp.NeI64, expr, module.createI64(0))\r\n : expr;\r\n }\r\n case TypeKind.F32: {\r\n return module.createBinary(BinaryOp.NeF32, expr, module.createF32(0));\r\n }\r\n case TypeKind.F64: {\r\n return module.createBinary(BinaryOp.NeF64, expr, module.createF64(0));\r\n }\r\n default: {\r\n assert(false);\r\n return module.createI32(0);\r\n }\r\n }\r\n }\r\n\r\n /** Makes an allocation expression for an instance of the specified class. */\r\n makeAllocate(classInstance: Class, reportNode: Node): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var nativeSizeType = this.options.nativeSizeType;\r\n\r\n // allocate the necessary memory and tee the pointer to a temp. local for reuse\r\n var tempLocal = currentFunction.getTempLocal(classInstance.type, false);\r\n var initializers = new Array();\r\n initializers.push(\r\n module.createSetLocal(tempLocal.index,\r\n compileAllocate(this, classInstance, reportNode)\r\n )\r\n );\r\n\r\n // apply field initializers\r\n if (classInstance.members) {\r\n for (let member of classInstance.members.values()) {\r\n if (member.kind == ElementKind.FIELD) {\r\n let field = member;\r\n let fieldType = field.type;\r\n let nativeFieldType = fieldType.toNativeType();\r\n let fieldDeclaration = field.prototype.declaration;\r\n assert(!field.isAny(CommonFlags.CONST));\r\n if (fieldDeclaration.initializer) { // use initializer\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n this.compileExpression( // reports\r\n fieldDeclaration.initializer,\r\n fieldType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n ),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n } else { // initialize with zero\r\n // TODO: might be unnecessary if the ctor initializes the field\r\n let parameterIndex = (field.prototype.declaration).parameterIndex;\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n parameterIndex >= 0 // initialized via parameter\r\n ? module.createGetLocal(1 + parameterIndex, nativeFieldType)\r\n : fieldType.toNativeZero(module),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n }\r\n }\r\n }\r\n }\r\n\r\n // return `this`\r\n initializers.push(\r\n module.createGetLocal(tempLocal.index, nativeSizeType)\r\n );\r\n\r\n currentFunction.freeTempLocal(tempLocal);\r\n this.currentType = classInstance.type;\r\n return module.createBlock(null, initializers, nativeSizeType);\r\n }\r\n\r\n /** Makes a conditional allocation expression inside of the constructor of the specified class. */\r\n makeConditionalAllocate(classInstance: Class, reportNode: Node): ExpressionRef {\r\n // requires that `this` is the first local\r\n var module = this.module;\r\n var nativeSizeType = this.options.nativeSizeType;\r\n this.currentType = classInstance.type;\r\n return module.createIf(\r\n nativeSizeType == NativeType.I64\r\n ? module.createBinary(\r\n BinaryOp.NeI64,\r\n module.createGetLocal(0, NativeType.I64),\r\n module.createI64(0)\r\n )\r\n : module.createGetLocal(0, NativeType.I32),\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createTeeLocal(0,\r\n this.makeAllocate(classInstance, reportNode)\r\n )\r\n );\r\n }\r\n\r\n /** Adds the debug location of the specified expression at the specified range to the source map. */\r\n addDebugLocation(expr: ExpressionRef, range: Range): void {\r\n var currentFunction = this.currentFunction;\r\n var source = range.source;\r\n if (source.debugInfoIndex < 0) source.debugInfoIndex = this.module.addDebugInfoFile(source.normalizedPath);\r\n range.debugInfoRef = expr;\r\n currentFunction.debugLocations.push(range);\r\n }\r\n}\r\n\r\n// helpers\r\n\r\nfunction mangleImportName(\r\n element: Element,\r\n declaration: DeclarationStatement,\r\n parentElement: Element | null = null\r\n): void {\r\n mangleImportName_moduleName = parentElement ? parentElement.simpleName : declaration.range.source.simplePath;\r\n mangleImportName_elementName = element.simpleName;\r\n\r\n if (!element.hasDecorator(DecoratorFlags.EXTERNAL)) return;\r\n\r\n var program = element.program;\r\n var decorator = assert(findDecorator(DecoratorKind.EXTERNAL, declaration.decorators));\r\n var args = decorator.arguments;\r\n if (args && args.length) {\r\n let arg = args[0];\r\n if (arg.kind == NodeKind.LITERAL && (arg).literalKind == LiteralKind.STRING) {\r\n mangleImportName_elementName = (arg).value;\r\n if (args.length >= 2) {\r\n arg = args[1];\r\n if (arg.kind == NodeKind.LITERAL && (arg).literalKind == LiteralKind.STRING) {\r\n mangleImportName_moduleName = mangleImportName_elementName;\r\n mangleImportName_elementName = (arg).value;\r\n if (args.length > 2) {\r\n program.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n decorator.range, \"2\", args.length.toString()\r\n );\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.String_literal_expected,\r\n arg.range\r\n );\r\n }\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.String_literal_expected,\r\n arg.range\r\n );\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n decorator.range, \"1\", \"0\"\r\n );\r\n }\r\n}\r\n\r\nvar mangleImportName_moduleName: string;\r\nvar mangleImportName_elementName: string;\r\n","/**\r\n * 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 Unterminated_string_literal = 1002,\r\n Identifier_expected = 1003,\r\n _0_expected = 1005,\r\n A_file_cannot_have_a_reference_to_itself = 1006,\r\n Trailing_comma_not_allowed = 1009,\r\n Unexpected_token = 1012,\r\n A_rest_parameter_must_be_last_in_a_parameter_list = 1014,\r\n Parameter_cannot_have_question_mark_and_initializer = 1015,\r\n A_required_parameter_cannot_follow_an_optional_parameter = 1016,\r\n Statements_are_not_allowed_in_ambient_contexts = 1036,\r\n Initializers_are_not_allowed_in_ambient_contexts = 1039,\r\n _0_modifier_cannot_be_used_here = 1042,\r\n A_rest_parameter_cannot_be_optional = 1047,\r\n A_rest_parameter_cannot_have_an_initializer = 1048,\r\n A_set_accessor_must_have_exactly_one_parameter = 1049,\r\n A_set_accessor_parameter_cannot_have_an_initializer = 1052,\r\n A_get_accessor_cannot_have_parameters = 1054,\r\n Enum_member_must_have_initializer = 1061,\r\n Type_parameters_cannot_appear_on_a_constructor_declaration = 1092,\r\n Type_annotation_cannot_appear_on_a_constructor_declaration = 1093,\r\n An_accessor_cannot_have_type_parameters = 1094,\r\n A_set_accessor_cannot_have_a_return_type_annotation = 1095,\r\n Type_parameter_list_cannot_be_empty = 1098,\r\n A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement = 1104,\r\n A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement = 1105,\r\n A_return_statement_can_only_be_used_within_a_function_body = 1108,\r\n Expression_expected = 1109,\r\n Type_expected = 1110,\r\n A_default_clause_cannot_appear_more_than_once_in_a_switch_statement = 1113,\r\n Duplicate_label_0 = 1114,\r\n Octal_literals_are_not_allowed_in_strict_mode = 1121,\r\n Digit_expected = 1124,\r\n Hexadecimal_digit_expected = 1125,\r\n Unexpected_end_of_text = 1126,\r\n Invalid_character = 1127,\r\n _case_or_default_expected = 1130,\r\n A_declare_modifier_cannot_be_used_in_an_already_ambient_context = 1038,\r\n Type_argument_expected = 1140,\r\n String_literal_expected = 1141,\r\n Line_break_not_permitted_here = 1142,\r\n Declaration_expected = 1146,\r\n _const_declarations_must_be_initialized = 1155,\r\n Unterminated_regular_expression_literal = 1161,\r\n Interface_declaration_cannot_have_implements_clause = 1176,\r\n Binary_digit_expected = 1177,\r\n Octal_digit_expected = 1178,\r\n An_implementation_cannot_be_declared_in_ambient_contexts = 1183,\r\n An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive = 1198,\r\n Unterminated_Unicode_escape_sequence = 1199,\r\n Decorators_are_not_valid_here = 1206,\r\n _abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration = 1242,\r\n Method_0_cannot_have_an_implementation_because_it_is_marked_abstract = 1245,\r\n A_class_may_only_extend_another_class = 1311,\r\n A_parameter_property_cannot_be_declared_using_a_rest_parameter = 1317,\r\n Duplicate_identifier_0 = 2300,\r\n Cannot_find_name_0 = 2304,\r\n Module_0_has_no_exported_member_1 = 2305,\r\n Generic_type_0_requires_1_type_argument_s = 2314,\r\n Type_0_is_not_generic = 2315,\r\n Type_0_is_not_assignable_to_type_1 = 2322,\r\n Index_signature_is_missing_in_type_0 = 2329,\r\n _this_cannot_be_referenced_in_current_location = 2332,\r\n _super_can_only_be_referenced_in_a_derived_class = 2335,\r\n Property_0_does_not_exist_on_type_1 = 2339,\r\n Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures = 2349,\r\n Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature = 2351,\r\n A_function_whose_declared_type_is_not_void_must_return_a_value = 2355,\r\n The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access = 2357,\r\n The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access = 2364,\r\n Operator_0_cannot_be_applied_to_types_1_and_2 = 2365,\r\n _get_and_set_accessor_must_have_the_same_type = 2380,\r\n Constructor_implementation_is_missing = 2390,\r\n Function_implementation_is_missing_or_not_immediately_following_the_declaration = 2391,\r\n Multiple_constructor_implementations_are_not_allowed = 2392,\r\n Duplicate_function_implementation = 2393,\r\n Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local = 2395,\r\n Type_0_has_no_property_1 = 2460,\r\n The_0_operator_cannot_be_applied_to_type_1 = 2469,\r\n In_const_enum_declarations_member_initializer_must_be_constant_expression = 2474,\r\n Export_declaration_conflicts_with_exported_declaration_of_0 = 2484,\r\n Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property = 2540,\r\n The_target_of_an_assignment_must_be_a_variable_or_a_property_access = 2541,\r\n Index_signature_in_type_0_only_permits_reading = 2542,\r\n Expected_0_arguments_but_got_1 = 2554,\r\n Expected_at_least_0_arguments_but_got_1 = 2555,\r\n Expected_0_type_arguments_but_got_1 = 2558,\r\n A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums = 2651,\r\n Constructor_of_class_0_is_private_and_only_accessible_within_the_class_declaration = 2673,\r\n Constructor_of_class_0_is_protected_and_only_accessible_within_the_class_declaration = 2674,\r\n Namespace_0_has_no_exported_member_1 = 2694,\r\n File_0_not_found = 6054,\r\n Numeric_separators_are_not_allowed_here = 6188,\r\n Multiple_consecutive_numeric_separators_are_not_permitted = 6189\r\n}\r\n\r\n/** Translates a diagnostic code to its respective string. */\r\nexport function diagnosticCodeToString(code: DiagnosticCode): string {\r\n switch (code) {\r\n case 100: return \"Operation not supported.\";\r\n case 101: return \"Operation is unsafe.\";\r\n case 102: return \"User-defined: {0}\";\r\n case 200: return \"Conversion from type '{0}' to '{1}' requires an explicit cast.\";\r\n case 201: return \"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.\";\r\n case 202: return \"Type '{0}' cannot be changed to type '{1}'.\";\r\n case 203: return \"Type '{0}' cannot be reinterpreted as type '{1}'.\";\r\n case 204: return \"Basic type '{0}' cannot be nullable.\";\r\n case 205: return \"Cannot export a mutable global.\";\r\n case 206: return \"Compiling constant with non-constant initializer as mutable.\";\r\n case 207: return \"Unmanaged classes cannot extend managed classes and vice-versa.\";\r\n case 208: return \"Unmanaged classes cannot implement interfaces.\";\r\n case 209: return \"Invalid regular expression flags.\";\r\n case 210: return \"Implementation '{0}' must match the signature '{1}'.\";\r\n case 211: return \"Class '{0}' is sealed and cannot be extended.\";\r\n case 212: return \"Decorator '{0}' is not valid here.\";\r\n case 213: return \"Duplicate decorator.\";\r\n case 214: return \"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.\";\r\n case 215: return \"Optional parameter must have an initializer.\";\r\n case 216: return \"Constructor of class '{0}' must not require any arguments.\";\r\n case 217: return \"Function '{0}' cannot be inlined into itself.\";\r\n case 218: return \"Cannot access method '{0}' without calling it as it requires 'this' to be set.\";\r\n case 1002: return \"Unterminated string literal.\";\r\n case 1003: return \"Identifier expected.\";\r\n case 1005: return \"'{0}' expected.\";\r\n case 1006: return \"A file cannot have a reference to itself.\";\r\n case 1009: return \"Trailing comma not allowed.\";\r\n case 1012: return \"Unexpected token.\";\r\n case 1014: return \"A rest parameter must be last in a parameter list.\";\r\n case 1015: return \"Parameter cannot have question mark and initializer.\";\r\n case 1016: return \"A required parameter cannot follow an optional parameter.\";\r\n case 1036: return \"Statements are not allowed in ambient contexts.\";\r\n case 1039: return \"Initializers are not allowed in ambient contexts.\";\r\n case 1042: return \"'{0}' modifier cannot be used here.\";\r\n case 1047: return \"A rest parameter cannot be optional.\";\r\n case 1048: return \"A rest parameter cannot have an initializer.\";\r\n case 1049: return \"A 'set' accessor must have exactly one parameter.\";\r\n case 1052: return \"A 'set' accessor parameter cannot have an initializer.\";\r\n case 1054: return \"A 'get' accessor cannot have parameters.\";\r\n case 1061: return \"Enum member must have initializer.\";\r\n case 1092: return \"Type parameters cannot appear on a constructor declaration.\";\r\n case 1093: return \"Type annotation cannot appear on a constructor declaration.\";\r\n case 1094: return \"An accessor cannot have type parameters.\";\r\n case 1095: return \"A 'set' accessor cannot have a return type annotation.\";\r\n case 1098: return \"Type parameter list cannot be empty.\";\r\n case 1104: return \"A 'continue' statement can only be used within an enclosing iteration statement.\";\r\n case 1105: return \"A 'break' statement can only be used within an enclosing iteration or switch statement.\";\r\n case 1108: return \"A 'return' statement can only be used within a function body.\";\r\n case 1109: return \"Expression expected.\";\r\n case 1110: return \"Type expected.\";\r\n case 1113: return \"A 'default' clause cannot appear more than once in a 'switch' statement.\";\r\n case 1114: return \"Duplicate label '{0}'.\";\r\n case 1121: return \"Octal literals are not allowed in strict mode.\";\r\n case 1124: return \"Digit expected.\";\r\n case 1125: return \"Hexadecimal digit expected.\";\r\n case 1126: return \"Unexpected end of text.\";\r\n case 1127: return \"Invalid character.\";\r\n case 1130: return \"'case' or 'default' expected.\";\r\n case 1038: return \"A 'declare' modifier cannot be used in an already ambient context.\";\r\n case 1140: return \"Type argument expected.\";\r\n case 1141: return \"String literal expected.\";\r\n case 1142: return \"Line break not permitted here.\";\r\n case 1146: return \"Declaration expected.\";\r\n case 1155: return \"'const' declarations must be initialized.\";\r\n case 1161: return \"Unterminated regular expression literal.\";\r\n case 1176: return \"Interface declaration cannot have 'implements' clause.\";\r\n case 1177: return \"Binary digit expected.\";\r\n case 1178: return \"Octal digit expected.\";\r\n case 1183: return \"An implementation cannot be declared in ambient contexts.\";\r\n case 1198: return \"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.\";\r\n case 1199: return \"Unterminated Unicode escape sequence.\";\r\n case 1206: return \"Decorators are not valid here.\";\r\n case 1242: return \"'abstract' modifier can only appear on a class, method, or property declaration.\";\r\n case 1245: return \"Method '{0}' cannot have an implementation because it is marked abstract.\";\r\n case 1311: return \"A class may only extend another class.\";\r\n case 1317: return \"A parameter property cannot be declared using a rest parameter.\";\r\n case 2300: return \"Duplicate identifier '{0}'.\";\r\n case 2304: return \"Cannot find name '{0}'.\";\r\n case 2305: return \"Module '{0}' has no exported member '{1}'.\";\r\n case 2314: return \"Generic type '{0}' requires {1} type argument(s).\";\r\n case 2315: return \"Type '{0}' is not generic.\";\r\n case 2322: return \"Type '{0}' is not assignable to type '{1}'.\";\r\n case 2329: return \"Index signature is missing in type '{0}'.\";\r\n case 2332: return \"'this' cannot be referenced in current location.\";\r\n case 2335: return \"'super' can only be referenced in a derived class.\";\r\n case 2339: return \"Property '{0}' does not exist on type '{1}'.\";\r\n case 2349: return \"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.\";\r\n case 2351: return \"Cannot use 'new' with an expression whose type lacks a construct signature.\";\r\n case 2355: return \"A function whose declared type is not 'void' must return a value.\";\r\n case 2357: return \"The operand of an increment or decrement operator must be a variable or a property access.\";\r\n case 2364: return \"The left-hand side of an assignment expression must be a variable or a property access.\";\r\n case 2365: return \"Operator '{0}' cannot be applied to types '{1}' and '{2}'.\";\r\n case 2380: return \"'get' and 'set' accessor must have the same type.\";\r\n case 2390: return \"Constructor implementation is missing.\";\r\n case 2391: return \"Function implementation is missing or not immediately following the declaration.\";\r\n case 2392: return \"Multiple constructor implementations are not allowed.\";\r\n case 2393: return \"Duplicate function implementation.\";\r\n case 2395: return \"Individual declarations in merged declaration '{0}' must be all exported or all local.\";\r\n case 2460: return \"Type '{0}' has no property '{1}'.\";\r\n case 2469: return \"The '{0}' operator cannot be applied to type '{1}'.\";\r\n case 2474: return \"In 'const' enum declarations member initializer must be constant expression.\";\r\n case 2484: return \"Export declaration conflicts with exported declaration of '{0}'.\";\r\n case 2540: return \"Cannot assign to '{0}' because it is a constant or a read-only property.\";\r\n case 2541: return \"The target of an assignment must be a variable or a property access.\";\r\n case 2542: return \"Index signature in type '{0}' only permits reading.\";\r\n case 2554: return \"Expected {0} arguments, but got {1}.\";\r\n case 2555: return \"Expected at least {0} arguments, but got {1}.\";\r\n case 2558: return \"Expected {0} type arguments, but got {1}.\";\r\n case 2651: return \"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.\";\r\n case 2673: return \"Constructor of class '{0}' is private and only accessible within the class declaration.\";\r\n case 2674: return \"Constructor of class '{0}' is protected and only accessible within the class declaration.\";\r\n case 2694: return \"Namespace '{0}' has no exported member '{1}'.\";\r\n case 6054: return \"File '{0}' not found.\";\r\n case 6188: return \"Numeric separators are not allowed here.\";\r\n case 6189: return \"Multiple consecutive numeric separators are not permitted.\";\r\n default: return \"\";\r\n }\r\n}\r\n","/**\r\n * 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).emitText();\r\n};\r\n\r\nModule.prototype.toAsmjs = function(this: Module) {\r\n return new binaryen.Module(this.ref).emitAsmjs();\r\n};\r\n","// 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\nObject.defineProperties(\r\n globalScope[\"i8\"] = function i8(value) { return value << 24 >> 24; }\r\n, {\r\n \"MIN_VALUE\": { value: -128, writable: false },\r\n \"MAX_VALUE\": { value: 127, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"i16\"] = function i16(value) { return value << 16 >> 16; }\r\n, {\r\n \"MIN_VALUE\": { value: -32768, writable: false },\r\n \"MAX_VALUE\": { value: 32767, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"i32\"] = globalScope[\"isize\"] = function i32(value) { return value | 0; }\r\n, {\r\n \"MIN_VALUE\": { value: -2147483648, writable: false },\r\n \"MAX_VALUE\": { value: 2147483647, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u8\"] = function u8(value) { return value & 0xff; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 255, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u16\"] = function u16(value) { return value & 0xffff; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 65535, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"u32\"] = globalScope[\"usize\"] = function u32(value) { return value >>> 0; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 4294967295, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"bool\"] = function bool(value) { return !!value; }\r\n, {\r\n \"MIN_VALUE\": { value: 0, writable: false },\r\n \"MAX_VALUE\": { value: 1, writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"f32\"] = function f32(value) { return Math.fround(value); }\r\n, {\r\n \"MIN_VALUE\": { value: Math.fround(-3.40282347e+38), writable: false },\r\n \"MAX_VALUE\": { value: Math.fround(3.40282347e+38), writable: false },\r\n \"MIN_POSITIVE_VALUE\": { value: Math.fround(1.175494351e-38), writable: false },\r\n \"MIN_SAFE_INTEGER\": { value: -16777215, writable: false },\r\n \"MAX_SAFE_INTEGER\": { value: 16777215, writable: false },\r\n \"EPSILON\": { value: Math.fround(1.19209290e-07), writable: false }\r\n});\r\n\r\nObject.defineProperties(\r\n globalScope[\"f64\"] = function f64(value) { return +value; }\r\n, {\r\n \"MIN_VALUE\": { value: -1.7976931348623157e+308, writable: false },\r\n \"MAX_VALUE\": { value: 1.7976931348623157e+308, writable: false },\r\n \"MIN_POSITIVE_VALUE\": { value: 2.2250738585072014e-308 , writable: false },\r\n \"MIN_SAFE_INTEGER\": { value: -9007199254740991, writable: false },\r\n \"MAX_SAFE_INTEGER\": { value: 9007199254740991, writable: false },\r\n \"EPSILON\": { value: 2.2204460492503131e-16, writable: false }\r\n});\r\n\r\nglobalScope[\"clz\"] = Math.clz32;\r\n\r\nglobalScope[\"ctz\"] = function ctz(value) {\r\n var c = Math.clz32(value & -value);\r\n return value ? 31 - c : c;\r\n};\r\n\r\nglobalScope[\"popcnt\"] = function popcnt(value) {\r\n value -= value >>> 1 & 0x55555555;\r\n value = (value & 0x33333333) + (value >>> 2 & 0x33333333);\r\n return (((value + (value >>> 4)) & 0x0F0F0F0F) * 0x01010101) >>> 24;\r\n};\r\n\r\nglobalScope[\"rotl\"] = function rotl(value, shift) {\r\n shift &= 31;\r\n return (value << shift) | (value >>> (32 - shift));\r\n};\r\n\r\nglobalScope[\"rotr\"] = function rotr(value, shift) {\r\n shift &= 31;\r\n return (value >>> shift) | (value << (32 - shift));\r\n};\r\n\r\nglobalScope[\"abs\"] = Math.abs;\r\n\r\nglobalScope[\"max\"] = Math.max;\r\n\r\nglobalScope[\"min\"] = Math.min;\r\n\r\nglobalScope[\"ceil\"] = Math.ceil;\r\n\r\nglobalScope[\"floor\"] = Math.floor;\r\n\r\n// Adopt code from https://github.com/rfk/wasm-polyfill\r\nglobalScope[\"nearest\"] = function nearest(value) {\r\n if (Math.abs(value - Math.trunc(value)) === 0.5) {\r\n return 2.0 * Math.round(value * 0.5);\r\n }\r\n return Math.round(value);\r\n};\r\n\r\nglobalScope[\"select\"] = function select(ifTrue, ifFalse, condition) {\r\n return condition ? ifTrue : ifFalse;\r\n};\r\n\r\nglobalScope[\"sqrt\"] = Math.sqrt;\r\n\r\nglobalScope[\"trunc\"] = Math.trunc;\r\n\r\nglobalScope[\"copysign\"] = function copysign(x, y) {\r\n return Math.abs(x) * Math.sign(y);\r\n};\r\n\r\nglobalScope[\"bswap\"] = function bswap(value) {\r\n var a = value >> 8 & 0x00FF00FF;\r\n var b = (value & 0x00FF00FF) << 8;\r\n value = a | b;\r\n a = value >> 16 & 0x0000FFFF;\r\n b = (value & 0x0000FFFF) << 16;\r\n return a | b;\r\n};\r\n\r\nglobalScope[\"bswap16\"] = function bswap16(value) {\r\n return ((value << 8) & 0xFF00) | ((value >> 8) & 0x00FF) | (value & 0xFFFF0000);\r\n};\r\n\r\nfunction UnreachableError() {\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, UnreachableError);\r\n } else {\r\n this.stack = this.name + \": \" + this.message + \"\\n\" + new Error().stack;\r\n }\r\n}\r\nUnreachableError.prototype = Object.create(Error.prototype);\r\nUnreachableError.prototype.name = \"UnreachableError\";\r\nUnreachableError.prototype.message = \"unreachable\";\r\n\r\nglobalScope[\"unreachable\"] = function unreachable() {\r\n throw new UnreachableError();\r\n};\r\n\r\nfunction AssertionError(message) {\r\n this.message = message || \"assertion failed\";\r\n if (Error.captureStackTrace) {\r\n Error.captureStackTrace(this, AssertionError);\r\n } else {\r\n this.stack = this.name + \": \" + this.message + \"\\n\" + new Error().stack;\r\n }\r\n}\r\nAssertionError.prototype = Object.create(Error.prototype);\r\nAssertionError.prototype.name = \"AssertionError\";\r\n\r\nglobalScope[\"assert\"] = function assert(isTrueish, message) {\r\n if (isTrueish) return isTrueish;\r\n throw new AssertionError(message);\r\n};\r\n\r\nglobalScope[\"changetype\"] = function changetype(value) {\r\n return value;\r\n};\r\n\r\nglobalScope[\"parseI32\"] = function parseI32(str, radix) {\r\n return parseInt(str, undefined) | 0;\r\n};\r\n\r\nString[\"fromCharCodes\"] = function fromCharCodes(arr) {\r\n return String.fromCharCode.apply(String, arr);\r\n};\r\n\r\nString[\"fromCodePoints\"] = function fromCodePoints(arr) {\r\n return String.fromCodePoint.apply(String, arr);\r\n};\r\n\r\nglobalScope[\"isInteger\"] = Number.isInteger;\r\n\r\nglobalScope[\"isFloat\"] = function isFloat(arg) {\r\n return typeof arg === \"number\";\r\n};\r\n\r\nglobalScope[\"isReference\"] = function isClass(arg) {\r\n return typeof arg === \"object\" || typeof arg === \"string\";\r\n};\r\n\r\nglobalScope[\"isString\"] = function isString(arg) {\r\n return typeof arg === \"string\" || arg instanceof String;\r\n};\r\n\r\nglobalScope[\"isArray\"] = Array.isArray;\r\n\r\nglobalScope[\"unchecked\"] = function(expr) {\r\n return expr;\r\n};\r\n\r\nglobalScope[\"fmod\"] = function fmod(x, y) {\r\n return x % y;\r\n};\r\n\r\nglobalScope[\"fmodf\"] = function fmodf(x, y) {\r\n return Math.fround(x % y);\r\n};\r\n\r\nglobalScope[\"JSMath\"] = Math;\r\n\r\nglobalScope[\"memory\"] = (() => {\r\n var HEAP = new Uint8Array(0);\r\n var HEAP_OFFSET = 0;\r\n return {\r\n allocate: globalScope[\"__memory_allocate\"] || function allocate(size) {\r\n if (!(size >>>= 0)) return 0;\r\n if (HEAP_OFFSET + size > HEAP.length) {\r\n var oldHeap = HEAP;\r\n HEAP = new Uint8Array(Math.max(65536, HEAP.length + size, HEAP.length * 2));\r\n HEAP.set(oldHeap);\r\n }\r\n var ptr = HEAP_OFFSET;\r\n if ((HEAP_OFFSET += size) & 7) HEAP_OFFSET = (HEAP_OFFSET | 7) + 1;\r\n return ptr;\r\n },\r\n free: globalScope[\"__memory_free\"] || function free(ptr) { },\r\n copy: globalScope[\"__memory_copy\"] || function copy(dest, src, size) {\r\n HEAP.copyWithin(dest, src, src + size);\r\n }\r\n };\r\n})();\r\n\r\nglobalScope[\"store\"] = globalScope[\"__store\"] || function store(ptr, value, offset) {\r\n HEAP[ptr + (offset | 0)] = value;\r\n};\r\n\r\nglobalScope[\"load\"] = globalScope[\"__load\"] || function load(ptr, offset) {\r\n return HEAP[ptr + (offset | 0)];\r\n};\r\n","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.createCallImport(\r\n abortInstance.internalName, [\r\n messageArg,\r\n filenameArg,\r\n module.createI32(reportNode.range.line),\r\n module.createI32(reportNode.range.column)\r\n ],\r\n NativeType.None\r\n ),\r\n module.createUnreachable()\r\n ]);\r\n}\r\n\r\n/** Compiles the iterateRoots function if requires. */\r\nexport function compileIterateRoots(compiler: Compiler): void {\r\n var module = compiler.module;\r\n var exprs = new Array();\r\n\r\n for (let element of compiler.program.elementsLookup.values()) {\r\n if (element.kind != ElementKind.GLOBAL) continue;\r\n let global = element;\r\n let classReference = global.type.classReference;\r\n if (\r\n global.is(CommonFlags.COMPILED) &&\r\n classReference !== null &&\r\n !classReference.hasDecorator(DecoratorFlags.UNMANAGED)\r\n ) {\r\n if (global.is(CommonFlags.INLINED)) {\r\n let value = global.constantIntegerValue;\r\n exprs.push(\r\n module.createCallIndirect(\r\n module.createGetLocal(0, NativeType.I32),\r\n [\r\n compiler.options.isWasm64\r\n ? module.createI64(i64_low(value), i64_high(value))\r\n : module.createI32(i64_low(value))\r\n ],\r\n \"iv\"\r\n )\r\n );\r\n } else {\r\n exprs.push(\r\n module.createCallIndirect(\r\n module.createGetLocal(0, NativeType.I32),\r\n [\r\n module.createGetGlobal(\r\n global.internalName,\r\n compiler.options.nativeSizeType\r\n )\r\n ],\r\n \"iv\"\r\n )\r\n );\r\n }\r\n }\r\n }\r\n var typeRef = compiler.ensureFunctionType([ Type.i32 ], Type.void);\r\n module.addFunction(\"~iterateRoots\", typeRef, [],\r\n exprs.length\r\n ? module.createBlock(null, exprs)\r\n : module.createNop()\r\n );\r\n}\r\n\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(0);\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 functionTable[gcHookIndex] = module.addFunction(\r\n classInstance.internalName + \"~gc\",\r\n compiler.ensureFunctionType(null, Type.void, options.usizeType),\r\n null,\r\n module.createBlock(null, body)\r\n );\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.CallImport:\r\n case ExpressionId.CallIndirect: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.GetLocal: {\r\n this.push(\"$\");\r\n this.push(getGetLocalIndex(expr).toString(10));\r\n return;\r\n }\r\n case ExpressionId.SetLocal: {\r\n this.push(\"$\");\r\n this.push(getSetLocalIndex(expr).toString(10));\r\n this.push(\" = \");\r\n this.decompileExpression(getSetLocalValue(expr));\r\n return;\r\n }\r\n case ExpressionId.GetGlobal:\r\n case ExpressionId.SetGlobal: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.Load: {\r\n this.push(\"load<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(getLoadOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getLoadPtr(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Store: {\r\n this.push(\"store<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(getStoreOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getStorePtr(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getStoreValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Const: {\r\n switch (type) {\r\n case NativeType.I32: {\r\n this.push(getConstValueI32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.I64: {\r\n this.push(\r\n i64_to_string(\r\n i64_new(\r\n getConstValueI64Low(expr),\r\n getConstValueI64High(expr)\r\n )\r\n )\r\n );\r\n return;\r\n }\r\n case NativeType.F32: {\r\n this.push(getConstValueF32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.F64: {\r\n this.push(getConstValueF64(expr).toString(10));\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Unary: {\r\n switch (getUnaryOp(expr)) {\r\n case UnaryOp.ClzI32: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI32: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI32: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NegF32:\r\n case UnaryOp.NegF64: {\r\n this.push(\"-\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.AbsF32: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF32: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF32: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF32: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF32: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF32: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.EqzI32:\r\n case UnaryOp.EqzI64: {\r\n this.push(\"!\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ClzI64: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI64: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI64: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.AbsF64: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF64: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF64: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF64: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF64: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF64: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ExtendI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ExtendU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.WrapI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.PromoteF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.DemoteF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Binary: { // TODO: precedence\r\n switch (getBinaryOp(expr)) {\r\n case BinaryOp.AddI32:\r\n case BinaryOp.AddI64:\r\n case BinaryOp.AddF32:\r\n case BinaryOp.AddF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" + \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.SubI32:\r\n case BinaryOp.SubI64:\r\n case BinaryOp.SubF32:\r\n case BinaryOp.SubF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" - \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.MulI32:\r\n case BinaryOp.MulI64:\r\n case BinaryOp.MulF32:\r\n case BinaryOp.MulF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" * \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivI32:\r\n case BinaryOp.DivI64:\r\n case BinaryOp.DivF32:\r\n case BinaryOp.DivF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.AndI32:\r\n case BinaryOp.AndI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" & \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.OrI32:\r\n case BinaryOp.OrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" | \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.XorI32:\r\n case BinaryOp.XorI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" ^ \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShlI32:\r\n case BinaryOp.ShlI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" << \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrU32:\r\n case BinaryOp.ShrU64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >>> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrI32:\r\n case BinaryOp.ShrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI32: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI32: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.EqI32:\r\n case BinaryOp.EqI64:\r\n case BinaryOp.EqF32:\r\n case BinaryOp.EqF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" == \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.NeI32:\r\n case BinaryOp.NeI64:\r\n case BinaryOp.NeF32:\r\n case BinaryOp.NeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" != \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtI32:\r\n case BinaryOp.LtI64:\r\n case BinaryOp.LtF32:\r\n case BinaryOp.LtF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeI32:\r\n case BinaryOp.LeI64:\r\n case BinaryOp.LeF32:\r\n case BinaryOp.LeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtI32:\r\n case BinaryOp.GtI64:\r\n case BinaryOp.GtF32:\r\n case BinaryOp.GtF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeI32:\r\n case BinaryOp.GeI64:\r\n case BinaryOp.GeF32:\r\n case BinaryOp.GeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI64: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI64: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.LtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.CopysignF32: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF32: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF32: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.CopysignF64: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF64: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF64: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n return;\r\n }\r\n case ExpressionId.Select: {\r\n this.push(\"select<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.decompileExpression(getSelectThen(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectElse(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectCondition(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Drop: {\r\n this.decompileExpression(getDropValue(expr));\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Return: {\r\n if (nested = getReturnValue(expr)) {\r\n this.push(\"return \");\r\n this.decompileExpression(nested);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"return;\\n\");\r\n }\r\n return;\r\n }\r\n case ExpressionId.Host: {\r\n switch (getHostOp(expr)) {\r\n case HostOp.CurrentMemory: {\r\n this.push(\"memory.size()\");\r\n return;\r\n }\r\n case HostOp.GrowMemory: {\r\n this.push(\"memory.grow(\");\r\n this.decompileExpression(getHostOperand(expr, 0));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Nop: {\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Unreachable: {\r\n this.push(\"unreachable()\");\r\n return;\r\n }\r\n case ExpressionId.AtomicCmpxchg:\r\n case ExpressionId.AtomicRMW:\r\n case ExpressionId.AtomicWait:\r\n case ExpressionId.AtomicWake:\r\n }\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n private push(text: string): void {\r\n // mostly here so we can add debugging if necessary\r\n this.text.push(text);\r\n }\r\n\r\n finish(): string {\r\n var ret = this.text.join(\"\");\r\n this.text = [];\r\n return ret;\r\n }\r\n}\r\n\r\nfunction nativeTypeToType(type: NativeType): string {\r\n switch (type) {\r\n case NativeType.None: return \"void\";\r\n case NativeType.I32: return \"i32\";\r\n case NativeType.I64: return \"i64\";\r\n case NativeType.F32: return \"f32\";\r\n case NativeType.F64: return \"f64\";\r\n case NativeType.Unreachable: throw new Error(\"unreachable type\");\r\n case NativeType.Auto: throw new Error(\"auto type\");\r\n default: throw new Error(\"unexpected type\");\r\n }\r\n}\r\n","/**\r\n * 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\r\n var type: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n }\r\n\r\n var initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n initializer = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!initializer) return null;\r\n } else {\r\n if (flags & CommonFlags.CONST) {\r\n if (!(flags & CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode._const_declarations_must_be_initialized,\r\n identifier.range\r\n ); // recoverable\r\n }\r\n } else if (!type) { // neither type nor initializer\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range(tn.pos)\r\n ); // recoverable\r\n }\r\n }\r\n return Node.createVariableDeclaration(\r\n identifier,\r\n type,\r\n initializer,\r\n parentDecorators,\r\n flags,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n }\r\n\r\n parseEnum(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): EnumDeclaration | null {\r\n\r\n // at 'enum': Identifier '{' (EnumValueDeclaration (',' EnumValueDeclaration )*)? '}' ';'?\r\n\r\n if (tn.next() != Token.IDENTIFIER) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.next() != Token.OPENBRACE) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n var members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseEnumValue(tn, CommonFlags.NONE);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n var ret = Node.createEnumDeclaration(\r\n identifier,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseEnumValue(\r\n tn: Tokenizer,\r\n parentFlags: CommonFlags\r\n ): EnumValueDeclaration | null {\r\n\r\n // before: Identifier ('=' Expression)?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var value: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n value = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!value) return null;\r\n }\r\n return Node.createEnumValueDeclaration(\r\n identifier,\r\n value,\r\n parentFlags,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n }\r\n\r\n parseReturn(\r\n tn: Tokenizer\r\n ): ReturnStatement | null {\r\n\r\n // at 'return': Expression | (';' | '}' | ...'\\n')\r\n\r\n var expr: Expression | null = null;\r\n if (\r\n tn.peek(true) != Token.SEMICOLON &&\r\n tn.nextToken != Token.CLOSEBRACE &&\r\n !tn.nextTokenOnNewLine\r\n ) {\r\n if (!(expr = this.parseExpression(tn))) return null;\r\n }\r\n\r\n var ret = Node.createReturnStatement(expr, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseTypeParameters(\r\n tn: Tokenizer\r\n ): TypeParameterNode[] | null {\r\n\r\n // at '<': TypeParameter (',' TypeParameter)* '>'\r\n\r\n var typeParameters = new Array();\r\n while (!tn.skip(Token.GREATERTHAN)) {\r\n let typeParameter = this.parseTypeParameter(tn);\r\n if (!typeParameter) return null;\r\n typeParameters.push(typeParameter);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.GREATERTHAN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n if (typeParameters.length === 0) {\r\n this.error(\r\n DiagnosticCode.Type_parameter_list_cannot_be_empty,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n return typeParameters;\r\n }\r\n\r\n parseTypeParameter(\r\n tn: Tokenizer\r\n ): TypeParameterNode | null {\r\n\r\n // before: Identifier ('extends' Type)?\r\n\r\n if (tn.next() == Token.IDENTIFIER) {\r\n let identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n let extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\r\n }\r\n return Node.createTypeParameter(\r\n identifier,\r\n extendsType,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n private parseParametersThis: TypeNode | null = null;\r\n\r\n parseParameters(\r\n tn: Tokenizer,\r\n isConstructor: bool = false\r\n ): ParameterNode[] | null {\r\n\r\n // at '(': (Parameter (',' Parameter)*)? ')'\r\n\r\n var parameters = new Array();\r\n var seenRest: ParameterNode | null = null;\r\n var seenOptional = false;\r\n var reportedRest = false;\r\n var thisType: CommonTypeNode | null = null;\r\n\r\n // check if there is a leading `this` parameter\r\n this.parseParametersThis = null;\r\n if (tn.skip(Token.THIS)) {\r\n if (tn.skip(Token.COLON)) {\r\n thisType = this.parseType(tn); // reports\r\n if (!thisType) return null;\r\n if (thisType.kind == NodeKind.TYPE) {\r\n this.parseParametersThis = thisType;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n thisType.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n return parameters;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n while (!tn.skip(Token.CLOSEPAREN)) {\r\n let param = this.parseParameter(tn, isConstructor); // reports\r\n if (!param) return null;\r\n if (seenRest && !reportedRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,\r\n seenRest.name.range\r\n );\r\n reportedRest = true;\r\n }\r\n switch (param.parameterKind) {\r\n default: {\r\n if (seenOptional) {\r\n this.error(\r\n DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,\r\n param.name.range\r\n );\r\n }\r\n break;\r\n }\r\n case ParameterKind.OPTIONAL: {\r\n seenOptional = true;\r\n break;\r\n }\r\n case ParameterKind.REST: {\r\n seenRest = param;\r\n break;\r\n }\r\n }\r\n parameters.push(param);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return parameters;\r\n }\r\n\r\n parseParameter(\r\n tn: Tokenizer,\r\n isConstructor: bool = false\r\n ): ParameterNode | null {\r\n\r\n // before: ('public' | 'private' | 'protected' | '...')? Identifier '?'? (':' Type)? ('=' Expression)?\r\n\r\n var isRest = false;\r\n var isOptional = false;\r\n var startRange: Range | null = null;\r\n var accessFlags: CommonFlags = CommonFlags.NONE;\r\n if (isConstructor) {\r\n if (tn.skip(Token.PUBLIC)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PROTECTED;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PRIVATE;\r\n }\r\n if (tn.peek() == Token.READONLY) {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek() != Token.COLON) { // modifier\r\n tn.discard(state);\r\n if (!startRange) startRange = tn.range();\r\n accessFlags |= CommonFlags.READONLY;\r\n } else { // identifier\r\n tn.reset(state);\r\n }\r\n }\r\n }\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n if (accessFlags) {\r\n this.error(\r\n DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,\r\n tn.range()\r\n );\r\n } else {\r\n startRange = tn.range();\r\n }\r\n isRest = true;\r\n }\r\n if (tn.skipIdentifier()) {\r\n if (!isRest) startRange = tn.range();\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let type: CommonTypeNode | null = null;\r\n if (isOptional = tn.skip(Token.QUESTION)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n identifier.range\r\n );\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n } else {\r\n type = Node.createOmittedType(tn.range(tn.pos));\r\n }\r\n let initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,\r\n identifier.range\r\n );\r\n }\r\n if (isOptional) {\r\n this.error(\r\n DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,\r\n identifier.range\r\n );\r\n } else {\r\n isOptional = true;\r\n }\r\n initializer = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!initializer) return null;\r\n }\r\n let param = Node.createParameter(\r\n identifier,\r\n type,\r\n initializer,\r\n isRest\r\n ? ParameterKind.REST\r\n : isOptional\r\n ? ParameterKind.OPTIONAL\r\n : ParameterKind.DEFAULT,\r\n Range.join(startRange, tn.range())\r\n );\r\n param.flags |= accessFlags;\r\n return param;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseFunction(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): FunctionDeclaration | null {\r\n\r\n // at 'function':\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // '(' Parameters (':' Type)?\r\n // '{' Statement* '}'\r\n // ';'?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range(tn.pos)\r\n );\r\n return null;\r\n }\r\n\r\n var name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var signatureStart: i32 = -1;\r\n\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n signatureStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n if (signatureStart < 0) {\r\n signatureStart = tn.tokenPos;\r\n }\r\n\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n var thisType = this.parseParametersThis;\r\n\r\n var isSetter = (flags & CommonFlags.SET) != 0;\r\n if (isSetter) {\r\n if (parameters.length != 1) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,\r\n name.range\r\n ); // recoverable\r\n }\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,\r\n name.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n if (flags & CommonFlags.GET) {\r\n if (parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n name.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn, true, isSetter);\r\n if (!returnType) return null;\r\n }\r\n\r\n if (!returnType) {\r\n returnType = Node.createOmittedType(\r\n tn.range(tn.pos)\r\n );\r\n if (!isSetter) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n var body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body) return null;\r\n } else if (!(flags & CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n tn.range(tn.pos)\r\n );\r\n }\r\n\r\n var ret = Node.createFunctionDeclaration(\r\n name,\r\n typeParameters,\r\n signature,\r\n body,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseFunctionExpression(tn: Tokenizer): FunctionExpression | null {\r\n var startPos = tn.tokenPos;\r\n var name: IdentifierExpression;\r\n var isArrow = false;\r\n\r\n // either at 'function':\r\n // Identifier?\r\n // '(' Parameters (':' Type)?\r\n // Statement\r\n\r\n if (tn.token == Token.FUNCTION) {\r\n if (tn.skipIdentifier()) {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else { // empty name\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.pos));\r\n }\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n // or at '(' of arrow function:\r\n // Parameters (':' Type)?\r\n // Statement\r\n\r\n } else {\r\n isArrow = true;\r\n assert(tn.token == Token.OPENPAREN);\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.tokenPos));\r\n }\r\n\r\n // TODO: type parameters? doesn't seem worth it.\r\n\r\n var signatureStart = tn.pos;\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n return this.parseFunctionExpressionCommon(tn, name, parameters, isArrow, startPos, signatureStart);\r\n }\r\n\r\n private parseFunctionExpressionCommon(\r\n tn: Tokenizer,\r\n name: IdentifierExpression,\r\n parameters: ParameterNode[],\r\n isArrow: bool,\r\n startPos: i32 = -1,\r\n signatureStart: i32 = -1\r\n ): FunctionExpression | null {\r\n if (startPos < 0) startPos = name.range.start;\r\n if (signatureStart < 0) signatureStart = startPos;\r\n\r\n var returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n\r\n if (isArrow) {\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"=>\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n var signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n null, // TODO?\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n var body: Statement | null;\r\n if (isArrow) {\r\n body = this.parseStatement(tn, false);\r\n } else {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"{\"\r\n );\r\n return null;\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n }\r\n if (!body) return null;\r\n\r\n var declaration = Node.createFunctionDeclaration(\r\n name,\r\n null,\r\n signature,\r\n body,\r\n null,\r\n isArrow ? CommonFlags.ARROW : CommonFlags.NONE,\r\n tn.range(startPos, tn.pos)\r\n );\r\n return Node.createFunctionExpression(declaration);\r\n }\r\n\r\n parseClassOrInterface(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): ClassDeclaration | null {\r\n\r\n // at ('class' | 'interface'):\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // ('extends' Type)?\r\n // ('implements' Type (',' Type)*)?\r\n // '{' ClassMember* '}'\r\n\r\n var isInterface = tn.token == Token.INTERFACE;\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n var identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n\r\n var typeParameters: TypeParameterNode[] | null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n } else {\r\n typeParameters = [];\r\n }\r\n\r\n var extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\r\n }\r\n\r\n var implementsTypes: TypeNode[] | null = null;\r\n if (tn.skip(Token.IMPLEMENTS)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode.Interface_declaration_cannot_have_implements_clause,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n do {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n if (!isInterface) {\r\n if (!implementsTypes) implementsTypes = [];\r\n implementsTypes.push(type);\r\n }\r\n } while (tn.skip(Token.COMMA));\r\n }\r\n\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n\r\n var members = new Array();\r\n var declaration: ClassDeclaration;\r\n if (isInterface) {\r\n assert(!implementsTypes);\r\n declaration = Node.createInterfaceDeclaration(\r\n identifier,\r\n typeParameters,\r\n extendsType,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n declaration = Node.createClassDeclaration(\r\n identifier,\r\n typeParameters,\r\n extendsType,\r\n implementsTypes,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseClassMember(tn, declaration);\r\n if (!member) return null;\r\n member.parent = declaration;\r\n members.push(member);\r\n } while (!tn.skip(Token.CLOSEBRACE));\r\n }\r\n return declaration;\r\n }\r\n\r\n parseClassExpression(tn: Tokenizer): ClassExpression | null {\r\n\r\n // at 'class': Identifier? '{' ... '}'\r\n\r\n var startPos = tn.tokenPos;\r\n var name: IdentifierExpression;\r\n\r\n if (tn.skipIdentifier()) {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.pos));\r\n }\r\n\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"{\"\r\n );\r\n return null;\r\n }\r\n\r\n var members = new Array();\r\n var declaration = Node.createClassDeclaration(\r\n name,\r\n [],\r\n null,\r\n null,\r\n members,\r\n null,\r\n CommonFlags.NONE,\r\n tn.range(startPos, tn.pos)\r\n );\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseClassMember(tn, declaration);\r\n if (!member) return null;\r\n member.parent = declaration;\r\n members.push(member);\r\n } while (!tn.skip(Token.CLOSEBRACE));\r\n }\r\n return Node.createClassExpression(declaration);\r\n }\r\n\r\n parseClassMember(\r\n tn: Tokenizer,\r\n parent: ClassDeclaration\r\n ): DeclarationStatement | null {\r\n\r\n // before:\r\n // ('public' | 'private' | 'protected')?\r\n // ('static' | 'abstract')?\r\n // 'readonly'?\r\n // ('get' | 'set')?\r\n // Identifier ...\r\n\r\n var startPos = tn.pos;\r\n var isInterface = parent.kind == NodeKind.INTERFACEDECLARATION;\r\n\r\n var decorators = new Array();\r\n while (tn.skip(Token.AT)) {\r\n let decorator = this.parseDecorator(tn);\r\n if (!decorator) break;\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode.Decorators_are_not_valid_here,\r\n decorator.range\r\n );\r\n }\r\n decorators.push(decorator);\r\n }\r\n\r\n // inherit ambient status\r\n var flags = parent.flags & CommonFlags.AMBIENT;\r\n\r\n // implemented methods are virtual\r\n if (isInterface) flags |= CommonFlags.VIRTUAL;\r\n\r\n if (tn.skip(Token.PUBLIC)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"public\"\r\n );\r\n }\r\n flags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"private\"\r\n );\r\n }\r\n flags |= CommonFlags.PRIVATE;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"protected\"\r\n );\r\n }\r\n flags |= CommonFlags.PROTECTED;\r\n }\r\n\r\n var staticStart: i32 = 0;\r\n var staticEnd: i32 = 0;\r\n var abstractStart: i32 = 0;\r\n var abstractEnd: i32 = 0;\r\n if (tn.skip(Token.STATIC)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"static\"\r\n );\r\n }\r\n flags |= CommonFlags.STATIC;\r\n staticStart = tn.tokenPos;\r\n staticEnd = tn.pos;\r\n } else {\r\n flags |= CommonFlags.INSTANCE;\r\n if (tn.skip(Token.ABSTRACT)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(), \"abstract\"\r\n );\r\n }\r\n flags |= CommonFlags.ABSTRACT;\r\n abstractStart = tn.tokenPos;\r\n abstractEnd = tn.pos;\r\n }\r\n if (parent.flags & CommonFlags.GENERIC) {\r\n flags |= CommonFlags.GENERIC_CONTEXT;\r\n }\r\n }\r\n\r\n var readonlyStart: i32 = 0;\r\n var readonlyEnd: i32 = 0;\r\n if (tn.skip(Token.READONLY)) {\r\n flags |= CommonFlags.READONLY;\r\n readonlyStart = tn.tokenPos;\r\n readonlyEnd = tn.pos;\r\n }\r\n\r\n // check if accessor: ('get' | 'set') ^\\n Identifier\r\n var state = tn.mark();\r\n var isConstructor = false;\r\n var isGetter = false;\r\n var getStart: i32 = 0;\r\n var getEnd: i32 = 0;\r\n var isSetter = false;\r\n var setStart: i32 = 0;\r\n var setEnd: i32 = 0;\r\n if (!isInterface) {\r\n if (tn.skip(Token.GET)) {\r\n if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n flags |= CommonFlags.GET;\r\n isGetter = true;\r\n setStart = tn.tokenPos;\r\n setEnd = tn.pos;\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n } else {\r\n tn.reset(state);\r\n }\r\n } else if (tn.skip(Token.SET)) {\r\n if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n flags |= CommonFlags.SET | CommonFlags.SET;\r\n isSetter = true;\r\n setStart = tn.tokenPos;\r\n setEnd = tn.pos;\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n } else {\r\n tn.reset(state);\r\n }\r\n } else if (tn.skip(Token.CONSTRUCTOR)) {\r\n flags |= CommonFlags.CONSTRUCTOR;\r\n isConstructor = true;\r\n if (flags & CommonFlags.STATIC) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(staticStart, staticEnd), \"static\"\r\n ); // recoverable\r\n }\r\n if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(abstractStart, abstractEnd), \"abstract\"\r\n ); // recoverable\r\n }\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n }\r\n }\r\n\r\n if (!isConstructor && !tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n var name = isConstructor\r\n ? Node.createConstructorExpression(tn.range())\r\n : Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n let typeParametersStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,\r\n tn.range(typeParametersStart, tn.pos)\r\n ); // recoverable\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.An_accessor_cannot_have_type_parameters,\r\n tn.range(typeParametersStart, tn.pos)\r\n ); // recoverable\r\n } else {\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n }\r\n\r\n // method: '(' Parameters (':' Type)? '{' Statement* '}' ';'?\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let signatureStart = tn.tokenPos;\r\n let parameters = this.parseParameters(tn, isConstructor);\r\n if (!parameters) return null;\r\n let thisType = this.parseParametersThis;\r\n if (isConstructor) {\r\n for (let i = 0, k = parameters.length; i < k; ++i) {\r\n let parameter = parameters[i];\r\n if (parameter.isAny(\r\n CommonFlags.PUBLIC |\r\n CommonFlags.PROTECTED |\r\n CommonFlags.PRIVATE |\r\n CommonFlags.READONLY\r\n )) {\r\n let implicitFieldDeclaration = Node.createFieldDeclaration(\r\n parameter.name,\r\n parameter.type,\r\n null, // initialized via parameter\r\n null,\r\n parameter.flags | CommonFlags.INSTANCE,\r\n parameter.range\r\n );\r\n implicitFieldDeclaration.parameterIndex = i;\r\n implicitFieldDeclaration.parent = parent;\r\n parameter.implicitFieldDeclaration = implicitFieldDeclaration;\r\n parent.members.push(implicitFieldDeclaration);\r\n }\r\n }\r\n } else if (isGetter) {\r\n if (parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n name.range\r\n );\r\n }\r\n } else if (isSetter) {\r\n if (parameters.length != 1) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,\r\n name.range\r\n );\r\n }\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,\r\n name.range\r\n );\r\n }\r\n }\r\n\r\n let returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n if (name.kind == NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration,\r\n tn.range()\r\n );\r\n } else if (isSetter) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_cannot_have_a_return_type_annotation,\r\n tn.range()\r\n );\r\n }\r\n returnType = this.parseType(tn, name.kind == NodeKind.CONSTRUCTOR || isSetter);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n if (!isSetter && name.kind != NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n let signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n let body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n } else if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode.Method_0_cannot_have_an_implementation_because_it_is_marked_abstract,\r\n tn.range(), name.text\r\n ); // recoverable\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body) return null;\r\n } else if (!(flags & CommonFlags.AMBIENT) && !isInterface) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n let retMethod = Node.createMethodDeclaration(\r\n name,\r\n typeParameters,\r\n signature,\r\n body,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retMethod;\r\n\r\n } else if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Constructor_implementation_is_missing,\r\n name.range\r\n );\r\n\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n name.range\r\n );\r\n\r\n // field: (':' Type)? ('=' Expression)? ';'?\r\n } else {\r\n if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(abstractStart, abstractEnd), \"abstract\"\r\n ); // recoverable\r\n }\r\n\r\n if (flags & CommonFlags.GET) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(getStart, getEnd), \"get\"\r\n ); // recoverable\r\n }\r\n\r\n if (flags & CommonFlags.SET) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(setStart, setEnd), \"set\"\r\n ); // recoverable\r\n }\r\n\r\n let type: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n let initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n initializer = this.parseExpression(tn);\r\n if (!initializer) return null;\r\n }\r\n let retField = Node.createFieldDeclaration(\r\n name,\r\n type,\r\n initializer,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retField;\r\n }\r\n return null;\r\n }\r\n\r\n parseNamespace(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): NamespaceDeclaration | null {\r\n\r\n // at 'namespace': Identifier '{' (Variable | Function)* '}'\r\n\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let members = new Array();\r\n let ns = Node.createNamespaceDeclaration(\r\n identifier,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseTopLevelStatement(tn, ns);\r\n if (!member) return null;\r\n member.parent = ns;\r\n members.push(member);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ns;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExport(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n startPos: i32\r\n ): ExportStatement | null {\r\n\r\n // at 'export': '{' ExportMember (',' ExportMember)* }' ('from' StringLiteral)? ';'?\r\n\r\n var path: StringLiteralExpression | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseExportMember(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n if (tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n let ret = Node.createExportStatement(members, path, flags, tn.range(startPos, tn.pos));\r\n let internalPath = ret.internalPath;\r\n if (internalPath !== null && !this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else if (tn.skip(Token.ASTERISK)) {\r\n if (tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n let ret = Node.createExportStatement(null, path, flags, tn.range(startPos, tn.pos));\r\n let internalPath = assert(ret.internalPath);\r\n let source = tn.source;\r\n if (!source.exportPaths) source.exportPaths = new Set();\r\n source.exportPaths.add(internalPath);\r\n if (!this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"from\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportMember(\r\n tn: Tokenizer\r\n ): ExportMember | null {\r\n\r\n // before: Identifier ('as' Identifier)?\r\n\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifierName()) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createExportMember(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImport(\r\n tn: Tokenizer\r\n ): ImportStatement | null {\r\n\r\n // at 'import':\r\n // ('{' (ImportMember (',' ImportMember)* '}') | ('*' 'as' Identifier)?\r\n // 'from' StringLiteral ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var members: ImportDeclaration[] | null = null;\r\n var namespaceName: IdentifierExpression | null = null;\r\n var skipFrom = false;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseImportDeclaration(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n } else if (tn.skip(Token.ASTERISK)) {\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifier()) {\r\n namespaceName = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"as\"\r\n );\r\n return null;\r\n }\r\n } else {\r\n skipFrom = true;\r\n }\r\n\r\n if (skipFrom || tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n let path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n let ret: ImportStatement;\r\n if (namespaceName) {\r\n assert(!members);\r\n ret = Node.createImportStatementWithWildcard(namespaceName, path, tn.range(startPos, tn.pos));\r\n } else {\r\n ret = Node.createImportStatement(members, path, tn.range(startPos, tn.pos));\r\n }\r\n let internalPath = ret.internalPath;\r\n if (!this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"from\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImportDeclaration(\r\n tn: Tokenizer\r\n ): ImportDeclaration | null {\r\n\r\n // before: Identifier ('as' Identifier)?\r\n\r\n if (tn.skipIdentifierName()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifier()) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createImportDeclaration(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportImport(\r\n tn: Tokenizer,\r\n startPos: i32\r\n ): ExportImportStatement | null {\r\n\r\n // at 'export' 'import': Identifier ('=' Identifier)? ';'?\r\n\r\n if (tn.skipIdentifier()) {\r\n let asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let ret = Node.createExportImportStatement(identifier, asIdentifier, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseStatement(\r\n tn: Tokenizer,\r\n topLevel: bool = false\r\n ): Statement | null {\r\n\r\n // at previous token\r\n\r\n var state = tn.mark();\r\n var token = tn.next();\r\n var statement: Statement | null = null;\r\n switch (token) {\r\n case Token.BREAK: {\r\n statement = this.parseBreak(tn);\r\n break;\r\n }\r\n case Token.CONST: {\r\n statement = this.parseVariable(tn, CommonFlags.CONST, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.CONTINUE: {\r\n statement = this.parseContinue(tn);\r\n break;\r\n }\r\n case Token.DO: {\r\n statement = this.parseDoStatement(tn);\r\n break;\r\n }\r\n case Token.FOR: {\r\n statement = this.parseForStatement(tn);\r\n break;\r\n }\r\n case Token.IF: {\r\n statement = this.parseIfStatement(tn);\r\n break;\r\n }\r\n case Token.LET: {\r\n statement = this.parseVariable(tn, CommonFlags.LET, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.VAR: {\r\n statement = this.parseVariable(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.OPENBRACE: {\r\n statement = this.parseBlockStatement(tn, topLevel);\r\n break;\r\n }\r\n case Token.RETURN: {\r\n if (topLevel) {\r\n this.error(\r\n DiagnosticCode.A_return_statement_can_only_be_used_within_a_function_body,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n statement = this.parseReturn(tn);\r\n break;\r\n }\r\n case Token.SEMICOLON: {\r\n return Node.createEmptyStatement(tn.range(tn.tokenPos));\r\n }\r\n case Token.SWITCH: {\r\n statement = this.parseSwitchStatement(tn);\r\n break;\r\n }\r\n case Token.THROW: {\r\n statement = this.parseThrowStatement(tn);\r\n break;\r\n }\r\n case Token.TRY: {\r\n statement = this.parseTryStatement(tn);\r\n break;\r\n }\r\n case Token.VOID: {\r\n statement = this.parseVoidStatement(tn);\r\n break;\r\n }\r\n case Token.WHILE: {\r\n statement = this.parseWhileStatement(tn);\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n statement = this.parseTypeDeclaration(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: {\r\n tn.reset(state);\r\n statement = this.parseExpressionStatement(tn);\r\n break;\r\n }\r\n }\r\n if (!statement) { // has been reported\r\n tn.reset(state);\r\n this.skipStatement(tn);\r\n } else {\r\n tn.discard(state);\r\n }\r\n return statement;\r\n }\r\n\r\n parseBlockStatement(\r\n tn: Tokenizer,\r\n topLevel: bool\r\n ): BlockStatement | null {\r\n\r\n // at '{': Statement* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let state = tn.mark();\r\n let statement = this.parseStatement(tn, topLevel);\r\n if (!statement) {\r\n if (tn.token == Token.ENDOFFILE) return null;\r\n tn.reset(state);\r\n this.skipStatement(tn);\r\n } else {\r\n tn.discard(state);\r\n statements.push(statement);\r\n }\r\n }\r\n var ret = Node.createBlockStatement(statements, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseBreak(\r\n tn: Tokenizer\r\n ): BreakStatement | null {\r\n\r\n // at 'break': Identifier? ';'?\r\n\r\n var identifier: IdentifierExpression | null = null;\r\n if (tn.peek(true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(IdentifierHandling.PREFER);\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = Node.createBreakStatement(identifier, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseContinue(\r\n tn: Tokenizer\r\n ): ContinueStatement | null {\r\n\r\n // at 'continue': Identifier? ';'?\r\n\r\n var identifier: IdentifierExpression | null = null;\r\n if (tn.peek(true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(IdentifierHandling.PREFER);\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = Node.createContinueStatement(identifier, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseDoStatement(\r\n tn: Tokenizer\r\n ): DoStatement | null {\r\n\r\n // at 'do': Statement 'while' '(' Expression ')' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n if (tn.skip(Token.WHILE)) {\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let ret = Node.createDoStatement(statement, condition, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"while\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExpressionStatement(\r\n tn: Tokenizer\r\n ): ExpressionStatement | null {\r\n\r\n // at previous token\r\n\r\n var expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n\r\n var ret = Node.createExpressionStatement(expr);\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseForStatement(\r\n tn: Tokenizer\r\n ): ForStatement | null {\r\n\r\n // at 'for': '(' Statement? Expression? ';' Expression? ')' Statement\r\n\r\n var startPos = tn.tokenPos;\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let initializer: Statement | null = null;\r\n\r\n if (tn.skip(Token.CONST)) {\r\n initializer = this.parseVariable(tn, CommonFlags.CONST, null, tn.tokenPos);\r\n } else if (tn.skip(Token.LET)) {\r\n initializer = this.parseVariable(tn, CommonFlags.LET, null, tn.tokenPos);\r\n } else if (tn.skip(Token.VAR)) {\r\n initializer = this.parseVariable(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n\r\n } else if (!tn.skip(Token.SEMICOLON)) {\r\n initializer = this.parseExpressionStatement(tn);\r\n if (!initializer) return null;\r\n }\r\n\r\n if (tn.token == Token.SEMICOLON) {\r\n let condition: ExpressionStatement | null = null;\r\n if (!tn.skip(Token.SEMICOLON)) {\r\n condition = this.parseExpressionStatement(tn);\r\n if (!condition) return null;\r\n }\r\n\r\n if (tn.token == Token.SEMICOLON) {\r\n let incrementor: Expression | null = null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n incrementor = this.parseExpression(tn);\r\n if (!incrementor) return null;\r\n\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n return Node.createForStatement(\r\n initializer,\r\n condition\r\n ? condition.expression\r\n : null,\r\n incrementor,\r\n statement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseIfStatement(\r\n tn: Tokenizer\r\n ): IfStatement | null {\r\n\r\n // at 'if': '(' Expression ')' Statement ('else' Statement)?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let elseStatement: Statement | null = null;\r\n if (tn.skip(Token.ELSE)) {\r\n elseStatement = this.parseStatement(tn);\r\n if (!elseStatement) return null;\r\n }\r\n return Node.createIfStatement(\r\n condition,\r\n statement,\r\n elseStatement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchStatement(\r\n tn: Tokenizer\r\n ): SwitchStatement | null {\r\n\r\n // at 'switch': '(' Expression ')' '{' SwitchCase* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let cases = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let case_ = this.parseSwitchCase(tn);\r\n if (!case_) return null;\r\n cases.push(case_);\r\n }\r\n let ret = Node.createSwitchStatement(condition, cases, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchCase(\r\n tn: Tokenizer\r\n ): SwitchCase | null {\r\n\r\n var startPos = tn.tokenPos;\r\n var statements: Statement[],\r\n statement: Statement | null;\r\n\r\n // 'case' Expression ':' Statement*\r\n\r\n if (tn.skip(Token.CASE)) {\r\n let label = this.parseExpression(tn);\r\n if (!label) return null;\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(label, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n\r\n // 'default' ':' Statement*\r\n\r\n } else if (tn.skip(Token.DEFAULT)) {\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(null, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._case_or_default_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseThrowStatement(\r\n tn: Tokenizer\r\n ): ThrowStatement | null {\r\n\r\n // at 'throw': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n var ret = Node.createThrowStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseTryStatement(\r\n tn: Tokenizer\r\n ): TryStatement | null {\r\n\r\n // at 'try':\r\n // '{' Statement* '}'\r\n // ('catch' '(' VariableMember ')' '{' Statement* '}')?\r\n // ('finally' '{' Statement* '}'? ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var stmt: Statement | null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n statements.push(stmt);\r\n }\r\n let catchVariable: IdentifierExpression | null = null;\r\n let catchStatements: Statement[] | null = null;\r\n let finallyStatements: Statement[] | null = null;\r\n if (tn.skip(Token.CATCH)) {\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n catchVariable = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n catchStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n catchStatements.push(stmt);\r\n }\r\n }\r\n if (tn.skip(Token.FINALLY)) {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n finallyStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n finallyStatements.push(stmt);\r\n }\r\n }\r\n if (!(catchStatements || finallyStatements)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"catch\"\r\n );\r\n return null;\r\n }\r\n let ret = Node.createTryStatement(\r\n statements,\r\n catchVariable,\r\n catchStatements,\r\n finallyStatements,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseTypeDeclaration(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): TypeDeclaration | null {\r\n\r\n // at 'type': Identifier ('<' TypeParameters '>')? '=' Type ';'?\r\n\r\n if (tn.skipIdentifier()) {\r\n let name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n if (tn.skip(Token.EQUALS)) {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n let ret = Node.createTypeDeclaration(\r\n name,\r\n typeParameters,\r\n type,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseVoidStatement(\r\n tn: Tokenizer\r\n ): VoidStatement | null {\r\n\r\n // at 'void': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn, Precedence.GROUPING);\r\n if (!expression) return null;\r\n var ret = Node.createVoidStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseWhileStatement(\r\n tn: Tokenizer\r\n ): WhileStatement | null {\r\n\r\n // at 'while': '(' Expression ')' Statement ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let ret = Node.createWhileStatement(expression, statement, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n // expressions\r\n // see: http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm#climbing\r\n\r\n parseExpressionStart(\r\n tn: Tokenizer\r\n ): Expression | null {\r\n\r\n var token = tn.next(IdentifierHandling.PREFER);\r\n var startPos = tn.tokenPos;\r\n var precedence = determinePrecedenceStart(token);\r\n if (precedence != Precedence.NONE) {\r\n let operand: Expression | null;\r\n\r\n // TODO: SpreadExpression, YieldExpression (currently become unsupported UnaryPrefixExpressions)\r\n\r\n // NewExpression\r\n if (token == Token.NEW) {\r\n operand = this.parseExpression(tn, Precedence.CALL);\r\n if (!operand) return null;\r\n if (operand.kind == NodeKind.CALL) {\r\n return Node.createNewExpression(\r\n (operand).expression,\r\n (operand).typeArguments,\r\n (operand).arguments,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n } else {\r\n operand = this.parseExpression(tn, precedence);\r\n if (!operand) return null;\r\n }\r\n\r\n // UnaryPrefixExpression\r\n if (token == Token.PLUS_PLUS || token == Token.MINUS_MINUS) {\r\n if (\r\n operand.kind != NodeKind.IDENTIFIER &&\r\n operand.kind != NodeKind.ELEMENTACCESS &&\r\n operand.kind != NodeKind.PROPERTYACCESS\r\n ) {\r\n this.error(\r\n DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,\r\n operand.range\r\n );\r\n }\r\n }\r\n return Node.createUnaryPrefixExpression(token, operand, tn.range(startPos, tn.pos));\r\n }\r\n\r\n var expr: Expression | null = null;\r\n switch (token) {\r\n\r\n case Token.NULL: return Node.createNullExpression(tn.range());\r\n case Token.TRUE: return Node.createTrueExpression(tn.range());\r\n case Token.FALSE: return Node.createFalseExpression(tn.range());\r\n\r\n // ParenthesizedExpression\r\n // FunctionExpression\r\n case Token.OPENPAREN: {\r\n\r\n // determine whether this is a function expression\r\n if (tn.skip(Token.CLOSEPAREN)) { // must be a function expression (fast route)\r\n return this.parseFunctionExpressionCommon(\r\n tn,\r\n Node.createEmptyIdentifierExpression(tn.range(startPos)),\r\n [],\r\n true\r\n );\r\n }\r\n let state = tn.mark();\r\n let again = true;\r\n do {\r\n switch (tn.next(IdentifierHandling.PREFER)) {\r\n\r\n // function expression\r\n case Token.DOT_DOT_DOT: {\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n switch (tn.next()) {\r\n\r\n // if we got here, check for arrow\r\n case Token.CLOSEPAREN: {\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n again = false;\r\n break;\r\n }\r\n // fall-through\r\n }\r\n // function expression\r\n case Token.COLON: { // type annotation\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.QUESTION: // optional parameter or ternary\r\n case Token.COMMA: {\r\n break; // continue\r\n }\r\n // parenthesized expression\r\n // case Token.EQUALS: // missing type annotation for simplicity\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n // parenthesized expression\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n } while (again);\r\n tn.reset(state);\r\n\r\n // parse parenthesized\r\n expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n return Node.createParenthesizedExpression(expr, tn.range(startPos, tn.pos));\r\n }\r\n // ArrayLiteralExpression\r\n case Token.OPENBRACKET: {\r\n let elementExpressions = new Array();\r\n while (!tn.skip(Token.CLOSEBRACKET)) {\r\n if (tn.peek() == Token.COMMA) {\r\n expr = null; // omitted\r\n } else {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n }\r\n elementExpressions.push(expr);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACKET)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return Node.createArrayLiteralExpression(elementExpressions, tn.range(startPos, tn.pos));\r\n }\r\n // ObjectLiteralExpression\r\n case Token.OPENBRACE: {\r\n let startPos = tn.tokenPos;\r\n let names = new Array();\r\n let values = new Array();\r\n let name: IdentifierExpression;\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n if (!tn.skipIdentifier()) {\r\n if (!tn.skip(Token.STRINGLITERAL)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range(),\r\n );\r\n return null;\r\n }\r\n name = Node.createIdentifierExpression(tn.readString(), tn.range());\r\n name.set(CommonFlags.QUOTED);\r\n } else {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n names.push(name);\r\n if (tn.skip(Token.COLON)) {\r\n let value = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!value) return null;\r\n values.push(value);\r\n } else if (!name.is(CommonFlags.QUOTED)) {\r\n values.push(name);\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return Node.createObjectLiteralExpression(names, values, tn.range(startPos, tn.pos));\r\n }\r\n // AssertionExpression (unary prefix)\r\n case Token.LESSTHAN: {\r\n let toType = this.parseType(tn);\r\n if (!toType) return null;\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n expr = this.parseExpression(tn, Precedence.CALL);\r\n if (!expr) return null;\r\n return Node.createAssertionExpression(\r\n AssertionKind.PREFIX,\r\n expr,\r\n toType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n case Token.IDENTIFIER: {\r\n return Node.createIdentifierExpression(tn.readIdentifier(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.THIS: {\r\n return Node.createThisExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.CONSTRUCTOR: {\r\n return Node.createConstructorExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.SUPER: {\r\n return Node.createSuperExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.STRINGLITERAL: {\r\n return Node.createStringLiteralExpression(tn.readString(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.INTEGERLITERAL: {\r\n return Node.createIntegerLiteralExpression(tn.readInteger(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.FLOATLITERAL: {\r\n return Node.createFloatLiteralExpression(tn.readFloat(), tn.range(startPos, tn.pos));\r\n }\r\n // RegexpLiteralExpression\r\n // note that this also continues on invalid ones so the surrounding AST remains intact\r\n case Token.SLASH: {\r\n let regexpPattern = tn.readRegexpPattern(); // also reports\r\n if (!tn.skip(Token.SLASH)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"/\"\r\n );\r\n return null;\r\n }\r\n return Node.createRegexpLiteralExpression(\r\n regexpPattern,\r\n tn.readRegexpFlags(), // also reports\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n case Token.FUNCTION: {\r\n return this.parseFunctionExpression(tn);\r\n }\r\n case Token.CLASS: {\r\n return this.parseClassExpression(tn);\r\n }\r\n default: {\r\n if (token == Token.ENDOFFILE) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n tn.range(startPos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Expression_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n tryParseTypeArgumentsBeforeArguments(\r\n tn: Tokenizer\r\n ): CommonTypeNode[] | null {\r\n\r\n // at '<': Type (',' Type)* '>' '('\r\n\r\n var state = tn.mark();\r\n if (!tn.skip(Token.LESSTHAN)) return null;\r\n var typeArguments = new Array();\r\n do {\r\n if (tn.peek() === Token.GREATERTHAN) {\r\n break;\r\n }\r\n let type = this.parseType(tn, true, true);\r\n if (!type) {\r\n tn.reset(state);\r\n return null;\r\n }\r\n typeArguments.push(type);\r\n } while (tn.skip(Token.COMMA));\r\n if (tn.skip(Token.GREATERTHAN) && tn.skip(Token.OPENPAREN)) {\r\n return typeArguments;\r\n }\r\n tn.reset(state);\r\n return null;\r\n }\r\n\r\n parseArguments(\r\n tn: Tokenizer\r\n ): Expression[] | null {\r\n\r\n // at '(': (Expression (',' Expression)*)? ')'\r\n\r\n var args = new Array();\r\n while (!tn.skip(Token.CLOSEPAREN)) {\r\n let expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n args.push(expr);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return args;\r\n }\r\n\r\n parseExpression(\r\n tn: Tokenizer,\r\n precedence: Precedence = Precedence.COMMA\r\n ): Expression | null {\r\n assert(precedence != Precedence.NONE);\r\n\r\n var expr = this.parseExpressionStart(tn);\r\n if (!expr) return null;\r\n var startPos = expr.range.start;\r\n\r\n // CallExpression?\r\n if (nodeIsCallable(expr.kind)) {\r\n let typeArguments: CommonTypeNode[] | null = null;\r\n while (\r\n tn.skip(Token.OPENPAREN)\r\n ||\r\n nodeIsGenericCallable(expr.kind) && (typeArguments = this.tryParseTypeArgumentsBeforeArguments(tn)) !== null\r\n ) {\r\n let args = this.parseArguments(tn);\r\n if (!args) return null;\r\n expr = Node.createCallExpression(expr, typeArguments, args, tn.range(startPos, tn.pos)); // is again callable\r\n }\r\n }\r\n\r\n var token: Token;\r\n var next: Expression | null = null;\r\n var nextPrecedence: Precedence;\r\n while (\r\n (nextPrecedence = determinePrecedence(token = tn.peek())) >= precedence\r\n ) { // precedence climbing\r\n tn.next();\r\n switch (token) {\r\n // AssertionExpression\r\n case Token.AS: {\r\n let toType = this.parseType(tn); // reports\r\n if (!toType) return null;\r\n expr = Node.createAssertionExpression(\r\n AssertionKind.AS,\r\n expr,\r\n toType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // InstanceOfExpression\r\n case Token.INSTANCEOF: {\r\n let isType = this.parseType(tn); // reports\r\n if (!isType) return null;\r\n expr = Node.createInstanceOfExpression(\r\n expr,\r\n isType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // ElementAccessExpression\r\n case Token.OPENBRACKET: {\r\n next = this.parseExpression(tn); // reports\r\n if (!next) return null;\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n expr = Node.createElementAccessExpression(\r\n expr,\r\n next,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // UnaryPostfixExpression\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS: {\r\n if (\r\n expr.kind != NodeKind.IDENTIFIER &&\r\n expr.kind != NodeKind.ELEMENTACCESS &&\r\n expr.kind != NodeKind.PROPERTYACCESS\r\n ) {\r\n this.error(\r\n DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,\r\n expr.range\r\n );\r\n }\r\n expr = Node.createUnaryPostfixExpression(\r\n token,\r\n expr,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // TernaryExpression\r\n case Token.QUESTION: {\r\n let ifThen = this.parseExpression(tn);\r\n if (!ifThen) return null;\r\n if (!tn.skip(Token.COLON)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n let ifElse = this.parseExpression(tn, precedence > Precedence.COMMA\r\n ? Precedence.COMMA + 1\r\n : Precedence.COMMA\r\n );\r\n if (!ifElse) return null;\r\n expr = Node.createTernaryExpression(\r\n expr,\r\n ifThen,\r\n ifElse,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // CommaExpression\r\n case Token.COMMA: {\r\n let commaExprs: Expression[] = [ expr ];\r\n do {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n commaExprs.push(expr);\r\n } while (tn.skip(Token.COMMA));\r\n expr = Node.createCommaExpression(commaExprs, tn.range(startPos, tn.pos));\r\n break;\r\n }\r\n default: {\r\n next = this.parseExpression(tn,\r\n isRightAssociative(token)\r\n ? nextPrecedence\r\n : nextPrecedence + 1\r\n );\r\n if (!next) return null;\r\n\r\n // PropertyAccessExpression\r\n if (token == Token.DOT) {\r\n if (next.kind == NodeKind.IDENTIFIER) {\r\n expr = Node.createPropertyAccessExpression(\r\n expr,\r\n next,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else if (next.kind == NodeKind.CALL) { // join\r\n let propertyCall = next;\r\n if (propertyCall.expression.kind == NodeKind.IDENTIFIER) {\r\n propertyCall.expression = Node.createPropertyAccessExpression(\r\n expr,\r\n propertyCall.expression,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n propertyCall.expression.range\r\n );\r\n return null;\r\n }\r\n expr = propertyCall;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n next.range\r\n );\r\n return null;\r\n }\r\n\r\n // BinaryExpression\r\n } else {\r\n expr = Node.createBinaryExpression(token, expr, next, tn.range(startPos, tn.pos));\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n return expr;\r\n }\r\n\r\n /** Skips over a statement on errors in an attempt to reduce unnecessary diagnostic noise. */\r\n skipStatement(tn: Tokenizer): void {\r\n tn.peek(true);\r\n if (tn.nextTokenOnNewLine) tn.next(); // if reset() to the previous line\r\n do {\r\n let nextToken = tn.peek(true);\r\n if (\r\n nextToken == Token.ENDOFFILE || // next step should handle this\r\n nextToken == Token.SEMICOLON // end of the statement for sure\r\n ) {\r\n tn.next();\r\n break;\r\n }\r\n if (tn.nextTokenOnNewLine) break; // end of the statement maybe\r\n switch (tn.next()) {\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n break;\r\n }\r\n case Token.STRINGLITERAL: {\r\n tn.readString();\r\n break;\r\n }\r\n case Token.INTEGERLITERAL: {\r\n tn.readInteger();\r\n break;\r\n }\r\n case Token.FLOATLITERAL: {\r\n tn.readFloat();\r\n break;\r\n }\r\n }\r\n } while (true);\r\n }\r\n\r\n /** Skips over a block on errors in an attempt to reduce unnecessary diagnostic noise. */\r\n skipBlock(tn: Tokenizer): void {\r\n // at '{': ... '}'\r\n var depth = 1;\r\n var again = true;\r\n do {\r\n switch (tn.next()) {\r\n case Token.ENDOFFILE: {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n again = false;\r\n break;\r\n }\r\n case Token.OPENBRACE: {\r\n ++depth;\r\n break;\r\n }\r\n case Token.CLOSEBRACE: {\r\n --depth;\r\n if (!depth) again = false;\r\n break;\r\n }\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n break;\r\n }\r\n case Token.STRINGLITERAL: {\r\n tn.readString();\r\n break;\r\n }\r\n case Token.INTEGERLITERAL: {\r\n tn.readInteger();\r\n break;\r\n }\r\n case Token.FLOATLITERAL: {\r\n tn.readFloat();\r\n break;\r\n }\r\n }\r\n } while (again);\r\n }\r\n}\r\n\r\n/** Operator precedence from least to largest. */\r\nexport const enum Precedence {\r\n NONE,\r\n COMMA,\r\n SPREAD,\r\n YIELD,\r\n ASSIGNMENT,\r\n CONDITIONAL,\r\n LOGICAL_OR,\r\n LOGICAL_AND,\r\n BITWISE_OR,\r\n BITWISE_XOR,\r\n BITWISE_AND,\r\n EQUALITY,\r\n RELATIONAL,\r\n SHIFT,\r\n ADDITIVE,\r\n MULTIPLICATIVE,\r\n EXPONENTIATED,\r\n UNARY_PREFIX,\r\n UNARY_POSTFIX,\r\n CALL,\r\n MEMBERACCESS,\r\n GROUPING\r\n}\r\n\r\n/** Determines the precedence of a starting token. */\r\nfunction determinePrecedenceStart(kind: Token): Precedence {\r\n switch (kind) {\r\n case Token.DOT_DOT_DOT: return Precedence.SPREAD;\r\n case Token.YIELD: return Precedence.YIELD;\r\n case Token.EXCLAMATION:\r\n case Token.TILDE:\r\n case Token.PLUS:\r\n case Token.MINUS:\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS:\r\n case Token.TYPEOF:\r\n case Token.VOID:\r\n case Token.DELETE: return Precedence.UNARY_PREFIX;\r\n case Token.NEW: return Precedence.MEMBERACCESS;\r\n }\r\n return Precedence.NONE;\r\n}\r\n\r\n/** Determines the precende of a non-starting token. */\r\nfunction determinePrecedence(kind: Token): Precedence {\r\n switch (kind) {\r\n case Token.COMMA: return Precedence.COMMA;\r\n case Token.EQUALS:\r\n case Token.PLUS_EQUALS:\r\n case Token.MINUS_EQUALS:\r\n case Token.ASTERISK_ASTERISK_EQUALS:\r\n case Token.ASTERISK_EQUALS:\r\n case Token.SLASH_EQUALS:\r\n case Token.PERCENT_EQUALS:\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.AMPERSAND_EQUALS:\r\n case Token.CARET_EQUALS:\r\n case Token.BAR_EQUALS: return Precedence.ASSIGNMENT;\r\n case Token.QUESTION: return Precedence.CONDITIONAL;\r\n case Token.BAR_BAR: return Precedence.LOGICAL_OR;\r\n case Token.AMPERSAND_AMPERSAND: return Precedence.LOGICAL_AND;\r\n case Token.BAR: return Precedence.BITWISE_OR;\r\n case Token.CARET: return Precedence.BITWISE_XOR;\r\n case Token.AMPERSAND: return Precedence.BITWISE_AND;\r\n case Token.EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS:\r\n case Token.EQUALS_EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS_EQUALS: return Precedence.EQUALITY;\r\n case Token.AS:\r\n case Token.IN:\r\n case Token.INSTANCEOF:\r\n case Token.LESSTHAN:\r\n case Token.GREATERTHAN:\r\n case Token.LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_EQUALS: return Precedence.RELATIONAL;\r\n case Token.LESSTHAN_LESSTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: return Precedence.SHIFT;\r\n case Token.PLUS:\r\n case Token.MINUS: return Precedence.ADDITIVE;\r\n case Token.ASTERISK:\r\n case Token.SLASH:\r\n case Token.PERCENT: return Precedence.MULTIPLICATIVE;\r\n case Token.ASTERISK_ASTERISK: return Precedence.EXPONENTIATED;\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS: return Precedence.UNARY_POSTFIX;\r\n case Token.DOT:\r\n case Token.NEW:\r\n case Token.OPENBRACKET: return Precedence.MEMBERACCESS;\r\n }\r\n return Precedence.NONE;\r\n}\r\n\r\n/** Determines whether a non-starting token is right associative. */\r\nfunction isRightAssociative(kind: Token): bool {\r\n switch (kind) {\r\n case Token.EQUALS:\r\n case Token.PLUS_EQUALS:\r\n case Token.MINUS_EQUALS:\r\n case Token.ASTERISK_ASTERISK_EQUALS:\r\n case Token.ASTERISK_EQUALS:\r\n case Token.SLASH_EQUALS:\r\n case Token.PERCENT_EQUALS:\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.AMPERSAND_EQUALS:\r\n case Token.CARET_EQUALS:\r\n case Token.BAR_EQUALS:\r\n case Token.QUESTION:\r\n case Token.ASTERISK_ASTERISK: return true;\r\n default: return false;\r\n }\r\n}\r\n"],"sourceRoot":""} \ No newline at end of file diff --git a/src/compiler.ts b/src/compiler.ts index 672aebd8..ad1e00fb 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -2641,7 +2641,7 @@ export class Compiler extends DiagnosticEmitter { // i32 or smaller to i64 } else if (toType.is(TypeFlags.LONG)) { expr = module.createUnary( - toType.is(TypeFlags.SIGNED) ? UnaryOp.ExtendI32 : UnaryOp.ExtendU32, + fromType.is(TypeFlags.SIGNED) ? UnaryOp.ExtendI32 : UnaryOp.ExtendU32, this.ensureSmallIntegerWrap(expr, fromType) // must clear garbage bits ); wrapMode = WrapMode.NONE; diff --git a/tests/compiler/binary.optimized.wat b/tests/compiler/binary.optimized.wat index 1e6b5f1a..2b586e66 100644 --- a/tests/compiler/binary.optimized.wat +++ b/tests/compiler/binary.optimized.wat @@ -116,7 +116,7 @@ (f64.reinterpret/i64 (i64.shl (i64.add - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $1) ) (i64.const 1023) @@ -877,7 +877,7 @@ (i64.const 4294967295) ) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $5) ) (i64.const 32) @@ -912,7 +912,7 @@ (tee_local $3 (f64.reinterpret/i64 (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.add (i32.add (i32.or @@ -1321,7 +1321,7 @@ (set_local $3 (f64.reinterpret/i64 (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.and (get_local $7) (i32.xor @@ -1523,7 +1523,7 @@ (i64.const 4294967295) ) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $8) ) (i64.const 32) @@ -3366,7 +3366,7 @@ ) (i64.shl (get_local $2) - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.sub (i32.const 1) (get_local $3) @@ -3422,7 +3422,7 @@ ) (i64.shl (get_local $5) - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.sub (i32.const 1) (get_local $6) @@ -3543,7 +3543,7 @@ (i64.const 4503599627370496) ) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $3) ) (i64.const 52) @@ -3551,7 +3551,7 @@ ) (i64.shr_u (get_local $2) - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.sub (i32.const 1) (get_local $3) @@ -3561,7 +3561,7 @@ ) ) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $8) ) (i64.const 63) diff --git a/tests/compiler/binary.untouched.wat b/tests/compiler/binary.untouched.wat index 1140d885..f5b035f9 100644 --- a/tests/compiler/binary.untouched.wat +++ b/tests/compiler/binary.untouched.wat @@ -123,7 +123,7 @@ (i64.shl (i64.add (i64.const 1023) - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $1) ) ) @@ -932,7 +932,7 @@ (i64.const 4294967295) ) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $7) ) (i64.const 32) @@ -984,7 +984,7 @@ (set_local $30 (f64.reinterpret/i64 (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.add (i32.add (i32.or @@ -1461,7 +1461,7 @@ (set_local $20 (f64.reinterpret/i64 (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.and (get_local $25) (i32.xor @@ -1679,7 +1679,7 @@ (i64.const 4294967295) ) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $24) ) (i64.const 32) @@ -3728,7 +3728,7 @@ (set_local $2 (i64.shl (get_local $2) - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.add (i32.sub (i32.const 0) @@ -3802,7 +3802,7 @@ (set_local $3 (i64.shl (get_local $3) - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.add (i32.sub (i32.const 0) @@ -3968,7 +3968,7 @@ (i64.or (get_local $2) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $4) ) (i64.const 52) @@ -3979,7 +3979,7 @@ (set_local $2 (i64.shr_u (get_local $2) - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.add (i32.sub (i32.const 0) @@ -3995,7 +3995,7 @@ (i64.or (get_local $2) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $6) ) (i64.const 63) diff --git a/tests/compiler/getter-call.optimized.wat b/tests/compiler/getter-call.optimized.wat new file mode 100644 index 00000000..53e54335 --- /dev/null +++ b/tests/compiler/getter-call.optimized.wat @@ -0,0 +1,135 @@ +(module + (type $i (func (result i32))) + (type $ii (func (param i32) (result i32))) + (type $v (func)) + (global $~lib/allocator/arena/startOffset (mut i32) (i32.const 0)) + (global $~lib/allocator/arena/offset (mut i32) (i32.const 0)) + (global $~argc (mut i32) (i32.const 0)) + (table 1 1 anyfunc) + (elem (i32.const 0) $getter-call/C#get:x~anonymous|0) + (memory $0 0) + (export "memory" (memory $0)) + (export "table" (table $0)) + (export "test" (func $getter-call/test)) + (start $start) + (func $~lib/allocator/arena/__memory_allocate (; 0 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) + (local $1 i32) + (local $2 i32) + (local $3 i32) + (if + (i32.gt_u + (get_local $0) + (i32.const 1073741824) + ) + (unreachable) + ) + (if + (i32.gt_u + (tee_local $2 + (i32.and + (i32.add + (i32.add + (tee_local $1 + (get_global $~lib/allocator/arena/offset) + ) + (select + (get_local $0) + (i32.const 1) + (i32.gt_u + (get_local $0) + (i32.const 1) + ) + ) + ) + (i32.const 7) + ) + (i32.const -8) + ) + ) + (i32.shl + (tee_local $3 + (current_memory) + ) + (i32.const 16) + ) + ) + (if + (i32.lt_s + (grow_memory + (select + (get_local $3) + (tee_local $0 + (i32.shr_u + (i32.and + (i32.add + (i32.sub + (get_local $2) + (get_local $1) + ) + (i32.const 65535) + ) + (i32.const -65536) + ) + (i32.const 16) + ) + ) + (i32.gt_s + (get_local $3) + (get_local $0) + ) + ) + ) + (i32.const 0) + ) + (if + (i32.lt_s + (grow_memory + (get_local $0) + ) + (i32.const 0) + ) + (unreachable) + ) + ) + ) + (set_global $~lib/allocator/arena/offset + (get_local $2) + ) + (get_local $1) + ) + (func $~lib/memory/memory.allocate (; 1 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) + (call $~lib/allocator/arena/__memory_allocate + (get_local $0) + ) + ) + (func $getter-call/C#get:x~anonymous|0 (; 2 ;) (; has Stack IR ;) (type $i) (result i32) + (i32.const 42) + ) + (func $getter-call/C#get:x (; 3 ;) (; has Stack IR ;) (type $ii) (param $0 i32) (result i32) + (i32.const 0) + ) + (func $getter-call/test (; 4 ;) (; has Stack IR ;) (type $i) (result i32) + (local $0 i32) + (set_local $0 + (call $~lib/memory/memory.allocate + (i32.const 0) + ) + ) + (set_global $~argc + (i32.const 0) + ) + (call_indirect (type $i) + (call $getter-call/C#get:x + (get_local $0) + ) + ) + ) + (func $start (; 5 ;) (; has Stack IR ;) (type $v) + (set_global $~lib/allocator/arena/startOffset + (i32.const 8) + ) + (set_global $~lib/allocator/arena/offset + (get_global $~lib/allocator/arena/startOffset) + ) + ) +) diff --git a/tests/compiler/portable-conversions.untouched.wat b/tests/compiler/portable-conversions.untouched.wat index 17ca97a7..28172787 100644 --- a/tests/compiler/portable-conversions.untouched.wat +++ b/tests/compiler/portable-conversions.untouched.wat @@ -154,7 +154,7 @@ ) ) (drop - (i64.extend_u/i32 + (i64.extend_s/i32 (get_global $portable-conversions/i) ) ) diff --git a/tests/compiler/std/libm.optimized.wat b/tests/compiler/std/libm.optimized.wat index e849f2fe..90ac8dbd 100644 --- a/tests/compiler/std/libm.optimized.wat +++ b/tests/compiler/std/libm.optimized.wat @@ -2683,7 +2683,7 @@ (f64.reinterpret/i64 (i64.shl (i64.add - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $2) ) (i64.const 1023) @@ -2750,7 +2750,7 @@ (i64.shl (i64.sub (i64.const 1023) - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $2) ) ) @@ -2900,7 +2900,7 @@ (f64.reinterpret/i64 (i64.shl (i64.add - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $1) ) (i64.const 1023) @@ -4954,7 +4954,7 @@ (i64.const 4294967295) ) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $5) ) (i64.const 32) @@ -4989,7 +4989,7 @@ (tee_local $3 (f64.reinterpret/i64 (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.add (i32.add (i32.or @@ -5398,7 +5398,7 @@ (set_local $3 (f64.reinterpret/i64 (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.and (get_local $7) (i32.xor @@ -5600,7 +5600,7 @@ (i64.const 4294967295) ) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $8) ) (i64.const 32) diff --git a/tests/compiler/std/libm.untouched.wat b/tests/compiler/std/libm.untouched.wat index 5c7e3066..8980d416 100644 --- a/tests/compiler/std/libm.untouched.wat +++ b/tests/compiler/std/libm.untouched.wat @@ -3120,7 +3120,7 @@ (i64.shl (i64.add (i64.const 1023) - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $3) ) ) @@ -3189,7 +3189,7 @@ (i64.shl (i64.sub (i64.const 1023) - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $3) ) ) @@ -3347,7 +3347,7 @@ (i64.shl (i64.add (i64.const 1023) - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $1) ) ) @@ -5651,7 +5651,7 @@ (i64.const 4294967295) ) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $7) ) (i64.const 32) @@ -5703,7 +5703,7 @@ (set_local $30 (f64.reinterpret/i64 (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.add (i32.add (i32.or @@ -6180,7 +6180,7 @@ (set_local $20 (f64.reinterpret/i64 (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.and (get_local $25) (i32.xor @@ -6398,7 +6398,7 @@ (i64.const 4294967295) ) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $24) ) (i64.const 32) diff --git a/tests/compiler/std/math.optimized.wat b/tests/compiler/std/math.optimized.wat index 18fa8fa8..12ae19df 100644 --- a/tests/compiler/std/math.optimized.wat +++ b/tests/compiler/std/math.optimized.wat @@ -226,7 +226,7 @@ (f64.reinterpret/i64 (i64.shl (i64.add - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $1) ) (i64.const 1023) @@ -5448,7 +5448,7 @@ (f64.reinterpret/i64 (i64.shl (i64.add - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $2) ) (i64.const 1023) @@ -5515,7 +5515,7 @@ (i64.shl (i64.sub (i64.const 1023) - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $2) ) ) @@ -8705,7 +8705,7 @@ ) (i64.shl (get_local $2) - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.sub (i32.const 1) (get_local $3) @@ -8761,7 +8761,7 @@ ) (i64.shl (get_local $5) - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.sub (i32.const 1) (get_local $6) @@ -8882,7 +8882,7 @@ (i64.const 4503599627370496) ) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $3) ) (i64.const 52) @@ -8890,7 +8890,7 @@ ) (i64.shr_u (get_local $2) - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.sub (i32.const 1) (get_local $3) @@ -8900,7 +8900,7 @@ ) ) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $8) ) (i64.const 63) @@ -10054,7 +10054,7 @@ (i64.const 4294967295) ) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $5) ) (i64.const 32) @@ -10089,7 +10089,7 @@ (tee_local $3 (f64.reinterpret/i64 (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.add (i32.add (i32.or @@ -10498,7 +10498,7 @@ (set_local $3 (f64.reinterpret/i64 (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.and (get_local $7) (i32.xor @@ -10700,7 +10700,7 @@ (i64.const 4294967295) ) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $8) ) (i64.const 32) @@ -12598,7 +12598,7 @@ ) (i64.shl (get_local $2) - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.sub (i32.const 1) (get_local $3) @@ -12653,7 +12653,7 @@ ) (i64.shl (get_local $7) - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.sub (i32.const 1) (get_local $6) @@ -12813,7 +12813,7 @@ (i64.const 4503599627370496) ) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $3) ) (i64.const 52) @@ -12821,7 +12821,7 @@ ) (i64.shr_u (get_local $2) - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.sub (i32.const 1) (get_local $3) diff --git a/tests/compiler/std/math.untouched.wat b/tests/compiler/std/math.untouched.wat index 60e925e5..75390db9 100644 --- a/tests/compiler/std/math.untouched.wat +++ b/tests/compiler/std/math.untouched.wat @@ -265,7 +265,7 @@ (i64.shl (i64.add (i64.const 1023) - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $1) ) ) @@ -6337,7 +6337,7 @@ (i64.shl (i64.add (i64.const 1023) - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $3) ) ) @@ -6406,7 +6406,7 @@ (i64.shl (i64.sub (i64.const 1023) - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $3) ) ) @@ -10061,7 +10061,7 @@ (set_local $2 (i64.shl (get_local $2) - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.add (i32.sub (i32.const 0) @@ -10135,7 +10135,7 @@ (set_local $3 (i64.shl (get_local $3) - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.add (i32.sub (i32.const 0) @@ -10301,7 +10301,7 @@ (i64.or (get_local $2) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $4) ) (i64.const 52) @@ -10312,7 +10312,7 @@ (set_local $2 (i64.shr_u (get_local $2) - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.add (i32.sub (i32.const 0) @@ -10328,7 +10328,7 @@ (i64.or (get_local $2) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $6) ) (i64.const 63) @@ -11614,7 +11614,7 @@ (i64.const 4294967295) ) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $7) ) (i64.const 32) @@ -11666,7 +11666,7 @@ (set_local $30 (f64.reinterpret/i64 (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.add (i32.add (i32.or @@ -12143,7 +12143,7 @@ (set_local $20 (f64.reinterpret/i64 (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.and (get_local $25) (i32.xor @@ -12361,7 +12361,7 @@ (i64.const 4294967295) ) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $24) ) (i64.const 32) @@ -14464,7 +14464,7 @@ (set_local $9 (i64.shl (get_local $9) - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.add (i32.sub (i32.const 0) @@ -14542,7 +14542,7 @@ (set_local $3 (i64.shl (get_local $3) - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.add (i32.sub (i32.const 0) @@ -14749,7 +14749,7 @@ (i64.or (get_local $9) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $4) ) (i64.const 52) @@ -14760,7 +14760,7 @@ (set_local $9 (i64.shr_u (get_local $9) - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.add (i32.sub (i32.const 0) diff --git a/tests/compiler/std/mod.optimized.wat b/tests/compiler/std/mod.optimized.wat index 63ba3772..3fbb0003 100644 --- a/tests/compiler/std/mod.optimized.wat +++ b/tests/compiler/std/mod.optimized.wat @@ -181,7 +181,7 @@ ) (i64.shl (get_local $2) - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.sub (i32.const 1) (get_local $3) @@ -237,7 +237,7 @@ ) (i64.shl (get_local $5) - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.sub (i32.const 1) (get_local $6) @@ -358,7 +358,7 @@ (i64.const 4503599627370496) ) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $3) ) (i64.const 52) @@ -366,7 +366,7 @@ ) (i64.shr_u (get_local $2) - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.sub (i32.const 1) (get_local $3) @@ -376,7 +376,7 @@ ) ) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $8) ) (i64.const 63) diff --git a/tests/compiler/std/mod.untouched.wat b/tests/compiler/std/mod.untouched.wat index 432214b0..cc7feea2 100644 --- a/tests/compiler/std/mod.untouched.wat +++ b/tests/compiler/std/mod.untouched.wat @@ -190,7 +190,7 @@ (set_local $2 (i64.shl (get_local $2) - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.add (i32.sub (i32.const 0) @@ -264,7 +264,7 @@ (set_local $3 (i64.shl (get_local $3) - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.add (i32.sub (i32.const 0) @@ -430,7 +430,7 @@ (i64.or (get_local $2) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $4) ) (i64.const 52) @@ -441,7 +441,7 @@ (set_local $2 (i64.shr_u (get_local $2) - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.add (i32.sub (i32.const 0) @@ -457,7 +457,7 @@ (i64.or (get_local $2) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $6) ) (i64.const 63) diff --git a/tests/compiler/std/operator-overloading.optimized.wat b/tests/compiler/std/operator-overloading.optimized.wat index 600ce012..4ae61358 100644 --- a/tests/compiler/std/operator-overloading.optimized.wat +++ b/tests/compiler/std/operator-overloading.optimized.wat @@ -399,7 +399,7 @@ (f64.reinterpret/i64 (i64.shl (i64.add - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $1) ) (i64.const 1023) @@ -1160,7 +1160,7 @@ (i64.const 4294967295) ) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $5) ) (i64.const 32) @@ -1195,7 +1195,7 @@ (tee_local $3 (f64.reinterpret/i64 (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.add (i32.add (i32.or @@ -1604,7 +1604,7 @@ (set_local $3 (f64.reinterpret/i64 (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.and (get_local $7) (i32.xor @@ -1806,7 +1806,7 @@ (i64.const 4294967295) ) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $8) ) (i64.const 32) diff --git a/tests/compiler/std/operator-overloading.untouched.wat b/tests/compiler/std/operator-overloading.untouched.wat index 4a9f628d..5071adf6 100644 --- a/tests/compiler/std/operator-overloading.untouched.wat +++ b/tests/compiler/std/operator-overloading.untouched.wat @@ -444,7 +444,7 @@ (i64.shl (i64.add (i64.const 1023) - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $1) ) ) @@ -1253,7 +1253,7 @@ (i64.const 4294967295) ) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $7) ) (i64.const 32) @@ -1305,7 +1305,7 @@ (set_local $30 (f64.reinterpret/i64 (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.add (i32.add (i32.or @@ -1782,7 +1782,7 @@ (set_local $20 (f64.reinterpret/i64 (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (i32.and (get_local $25) (i32.xor @@ -2000,7 +2000,7 @@ (i64.const 4294967295) ) (i64.shl - (i64.extend_u/i32 + (i64.extend_s/i32 (get_local $24) ) (i64.const 32) diff --git a/tests/compiler/unary.optimized.wat b/tests/compiler/unary.optimized.wat index cabba720..cb5cd1c3 100644 --- a/tests/compiler/unary.optimized.wat +++ b/tests/compiler/unary.optimized.wat @@ -142,7 +142,7 @@ ) ) (set_global $unary/I - (i64.extend_s/i32 + (i64.extend_u/i32 (i64.eqz (get_global $unary/I) ) @@ -305,7 +305,7 @@ ) ) (set_global $unary/I - (i64.extend_s/i32 + (i64.extend_u/i32 (f64.eq (get_global $unary/F) (f64.const 0) diff --git a/tests/compiler/unary.untouched.wat b/tests/compiler/unary.untouched.wat index 1acd89e2..b7d25b37 100644 --- a/tests/compiler/unary.untouched.wat +++ b/tests/compiler/unary.untouched.wat @@ -224,7 +224,7 @@ (i64.const -1) ) (set_global $unary/I - (i64.extend_s/i32 + (i64.extend_u/i32 (i64.eqz (i64.const 1) ) @@ -246,7 +246,7 @@ ) ) (set_global $unary/I - (i64.extend_s/i32 + (i64.extend_u/i32 (i64.eqz (get_global $unary/I) ) @@ -467,7 +467,7 @@ (f64.const -1.25) ) (set_global $unary/I - (i64.extend_s/i32 + (i64.extend_u/i32 (f64.eq (f64.const 1.25) (f64.const 0) @@ -483,7 +483,7 @@ ) ) (set_global $unary/I - (i64.extend_s/i32 + (i64.extend_u/i32 (f64.eq (get_global $unary/F) (f64.const 0)