From 188b4e48cebeee7165874aad79cc90fc07c5c3d0 Mon Sep 17 00:00:00 2001 From: dcodeIO Date: Sun, 24 Jun 2018 01:04:24 +0200 Subject: [PATCH] Try parsing signatures only if node is callable, see #149; Minor refactoring --- dist/assemblyscript.js | 2 +- dist/assemblyscript.js.map | 2 +- examples/n-body/build/index.asm.js | 348 +++++++++++----- examples/n-body/build/optimized.wasm | Bin 2304 -> 2291 bytes examples/n-body/build/optimized.wat | 583 +++++++++++++-------------- examples/n-body/build/untouched.wat | 512 +++++++++++------------ src/ast.ts | 22 +- src/common.ts | 94 +++++ src/compiler.ts | 28 +- src/definitions.ts | 5 +- src/extra/ast.ts | 2 +- src/index.ts | 5 +- src/parser.ts | 31 +- src/program.ts | 112 +---- 14 files changed, 933 insertions(+), 813 deletions(-) create mode 100644 src/common.ts diff --git a/dist/assemblyscript.js b/dist/assemblyscript.js index d8e3d5ef..a138ba25 100644 --- a/dist/assemblyscript.js +++ b/dist/assemblyscript.js @@ -1,2 +1,2 @@ -!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("binaryen")):"function"==typeof define&&define.amd?define(["binaryen"],t):"object"==typeof exports?exports.assemblyscript=t(require("binaryen")):e.assemblyscript=t(e.binaryen)}("undefined"!=typeof self?self:this,function(e){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=28)}([function(e,t,r){"use strict";var n,i=this&&this.__extends||(n=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])},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),a=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}}}},s=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 o=r(2),c=r(7),p=r(4),l=r(3);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:";var u,h=function(){return function(){}}(),d=function(){return function(){}}(),_=function(){return function(){}}();function y(e,t){switch(assert(t.length),e){case p.DecoratorKind.OPERATOR:case p.DecoratorKind.OPERATOR_BINARY:switch(t.charCodeAt(0)){case 91:if("[]"==t)return u.INDEXED_GET;if("[]="==t)return u.INDEXED_SET;break;case 123:if("{}"==t)return u.UNCHECKED_INDEXED_GET;if("{}="==t)return u.UNCHECKED_INDEXED_SET;break;case 43:if("+"==t)return u.ADD;break;case 45:if("-"==t)return u.SUB;break;case 42:if("*"==t)return u.MUL;if("**"==t)return u.POW;break;case 47:if("/"==t)return u.DIV;break;case 37:if("%"==t)return u.REM;break;case 38:if("&"==t)return u.BITWISE_AND;break;case 124:if("|"==t)return u.BITWISE_OR;break;case 94:if("^"==t)return u.BITWISE_XOR;break;case 61:if("=="==t)return u.EQ;break;case 33:if("!="==t)return u.NE;break;case 62:if(">"==t)return u.GT;if(">="==t)return u.GE;if(">>"==t)return u.BITWISE_SHR;if(">>>"==t)return u.BITWISE_SHR_U;break;case 60:if("<"==t)return u.LT;if("<="==t)return u.LE;if("<<"==t)return u.BITWISE_SHL}break;case p.DecoratorKind.OPERATOR_PREFIX:switch(t.charCodeAt(0)){case 43:if("+"==t)return u.PLUS;if("++"==t)return u.PREFIX_INC;break;case 45:if("-"==t)return u.MINUS;if("--"==t)return u.PREFIX_DEC;break;case 33:if("!"==t)return u.NOT;break;case 126:if("~"==t)return u.BITWISE_NOT}break;case p.DecoratorKind.OPERATOR_POSTFIX:switch(t.charCodeAt(0)){case 43:if("++"==t)return u.POSTFIX_INC;break;case 45:if("--"==t)return u.POSTFIX_DEC}}return u.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"}(u=t.OperatorKind||(t.OperatorKind={}));var m,g,T,E=new Map,f=function(e){function r(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=E,r.typeAliases=new Map,r.fileLevelExports=new Map,r.moduleLevelExports=new Map,r.arrayPrototype=null,r.arrayBufferViewPrototype=null,r.stringInstance=null,r.resolvedThisExpression=null,r.resolvedElementExpression=null,r.sources=[],r}return i(r,e),r.prototype.getSource=function(e){for(var t=this.sources,r=0,n=t.length;r",u+="<"+I+">")}else if(r){var v=r.get(u);if(v)return v}}return(_=this.typesLookup.get(h))||(_=this.typesLookup.get(u))?_:(n&&this.error(o.DiagnosticCode.Cannot_find_name_0,s.name.range,u),null)},r.prototype.resolveTypeArguments=function(e,t,r,n){void 0===r&&(r=null),void 0===n&&(n=null);var i=e.length,a=t?t.length:0;if(i!=a)return a?this.error(o.DiagnosticCode.Expected_0_type_arguments_but_got_1,p.Range.join(t[0].range,t[a-1].range),i.toString(10),a.toString(10)):n&&this.error(o.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range.atEnd,i.toString(10),"0"),null;for(var s=new Array(i),c=0;c"),o=new x(this,K,G,S||h,t),this.instances.set(i,o),this.program.instancesLookup.set(K,o),o},r.prototype.resolvePartial=function(e){assert(this.is(g.INSTANCE));var n=assert(this.classPrototype);if(!e||!e.length)return this;var i=this.simpleName,a=c.typesToString(e),s=new r(this.program,i,n.internalName+"<"+a+">"+t.INSTANCE_DELIMITER+i,this.declaration,n,this.decoratorFlags);return s.flags=this.flags,s.operatorKind=this.operatorKind,s.classTypeArguments=e,s},r.prototype.resolveUsingTypeArguments=function(e,t,r){var n=null;return!this.is(g.GENERIC)||(assert(null!=e&&0!=e.length),n=this.program.resolveTypeArguments(assert(this.declaration.typeParameters),e,t,r))?this.resolve(n,t):null},r.prototype.resolveBuiltinTypeArguments=function(e,t){assert(this.is(g.BUILTIN));var r=null;if(e){var n=e.length;r=new Array(n);for(var i=0;i=0),assert(null!=e.type),e.type.toNativeType()){case l.NativeType.I32:t=this.tempI32s||(this.tempI32s=[]);break;case l.NativeType.I64:t=this.tempI64s||(this.tempI64s=[]);break;case l.NativeType.F32:t=this.tempF32s||(this.tempF32s=[]);break;case l.NativeType.F64:t=this.tempF64s||(this.tempF64s=[]);break;default:throw new Error("concrete type expected")}assert(e.index>=0),t.push(e)}},t.prototype.getAndFreeTempLocal=function(e,t){var r,n;switch(e.toNativeType()){case l.NativeType.I32:r=this.tempI32s||(this.tempI32s=[]);break;case l.NativeType.I64:r=this.tempI64s||(this.tempI64s=[]);break;case l.NativeType.F32:r=this.tempF32s||(this.tempF32s=[]);break;case l.NativeType.F64:r=this.tempF64s||(this.tempF64s=[]);break;default:throw new Error("concrete type expected")}return r.length?(n=r[r.length-1]).type=e:(n=this.addLocal(e),r.push(n)),e.is(36)&&this.flow.setLocalWrapped(n.index,t),n},t.prototype.enterBreakContext=function(){var e=this.nextBreakId++;return this.breakStack?this.breakStack.push(e):this.breakStack=[e],this.breakContext=e.toString(10)},t.prototype.leaveBreakContext=function(){assert(null!=this.breakStack);var e=this.breakStack.length;assert(e>0),this.breakStack.pop(),e>1?this.breakContext=this.breakStack[e-2].toString(10):(this.breakContext=null,this.breakStack=null)},t.prototype.finalize=function(e,t){if(this.ref=t,assert(!this.breakStack||!this.breakStack.length),this.breakStack=null,this.breakContext=null,this.tempI32s=this.tempI64s=this.tempF32s=this.tempF64s=null,this.program.options.sourceMap)for(var r=this.debugLocations,n=0,i=r.length;n",U+="<"+f+">"),(I=new w(this,B,U,e,R)).contextualTypeArguments=r,this.instances.set(f,I),this.program.instancesLookup.set(U,I);var P=0;if(R&&(P=R.currentMemoryOffset,R.members)){I.members||(I.members=new Map);try{for(var M=a(R.members.values()),G=M.next();!G.done;G=M.next()){var K=G.value;I.members.set(K.simpleName,K)}}catch(e){l={error:e}}finally{try{G&&!G.done&&(h=M.return)&&h.call(M)}finally{if(l)throw l.error}}}if(this.constructorPrototype){var z=this.constructorPrototype.resolvePartial(e);z&&(I.constructorInstance=z.resolve())}if(this.instanceMembers)try{for(var V=a(this.instanceMembers.values()),H=V.next();!H.done;H=V.next()){var X=H.value;switch(X.kind){case m.FIELD_PROTOTYPE:I.members||(I.members=new Map);var W=X.declaration;if(!W.type)throw new Error("type expected");var Y=this.program.resolveType(W.type,I.contextualTypeArguments);if(!Y)break;var Q=new F(X,U+t.INSTANCE_DELIMITER+X.simpleName,Y,W,I);switch(Y.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+=Y.byteSize,I.members.set(X.simpleName,Q);break;case m.FUNCTION_PROTOTYPE:I.members||(I.members=new Map);var q=X.resolvePartial(e);q&&(q.internalName=U+t.INSTANCE_DELIMITER+q.simpleName,I.members.set(X.simpleName,q));break;case m.PROPERTY:I.members||(I.members=new Map);var j=assert(X.getterPrototype),Z=X.setterPrototype,$=new D(this.program,X.simpleName,U+t.INSTANCE_DELIMITER+X.simpleName,this),J=j.resolvePartial(e);if(!J)return null;if(J.internalName=U+t.INSTANCE_DELIMITER+J.simpleName,$.getterPrototype=J,Z){var ee=Z.resolvePartial(e);if(!ee)return null;ee.internalName=U+t.INSTANCE_DELIMITER+ee.simpleName,$.setterPrototype=ee}I.members.set(X.simpleName,$);break;default:assert(!1)}}}catch(e){d={error:e}}finally{try{H&&!H.done&&(_=V.return)&&_.call(V)}finally{if(d)throw d.error}}try{for(var te=a(this.overloadPrototypes),re=te.next();!re.done;re=te.next()){var ne=s(re.value,2),ie=ne[0],ae=ne[1];assert(ie!=u.INVALID);var se=void 0;if(ae.is(g.INSTANCE)){var oe=ae.resolvePartial(e);if(!oe)continue;se=oe.resolve()}else se=ae.resolve();if(se){var ce=I.overloads;ce||(I.overloads=ce=new Map),ce.set(ie,se)}}}catch(e){y={error:e}}finally{try{re&&!re.done&&(E=te.return)&&E.call(te)}finally{if(y)throw y.error}}return I.currentMemoryOffset=P,I},r.prototype.resolveUsingTypeArguments=function(e,t,r){var n=null;if(this.is(g.GENERIC)){if(assert(null!=e&&0!=e.length),!(n=this.program.resolveTypeArguments(this.declaration.typeParameters,e,t,r)))return null}else assert(null==e||!e.length);return this.resolve(n,t)},r.prototype.toString=function(){return this.simpleName},r}(v);t.ClassPrototype=P;var w=function(e){function t(t,r,n,i,o){var c,p;void 0===i&&(i=null),void 0===o&&(o=null);var l=e.call(this,t.program,r,n)||this;if(l.kind=m.CLASS,l.contextualTypeArguments=null,l.currentMemoryOffset=0,l.constructorInstance=null,l.overloads=null,l.prototype=t,l.flags=t.flags,l.decoratorFlags=t.decoratorFlags,l.typeArguments=i,l.type=t.program.options.usizeType.asClass(l),l.base=o,o){var u=o.contextualTypeArguments;if(u){l.contextualTypeArguments||(l.contextualTypeArguments=new Map);try{for(var h=a(u),d=h.next();!d.done;d=h.next()){var _=s(d.value,2),y=_[0],g=_[1];l.contextualTypeArguments.set(y,g)}}catch(e){c={error:e}}finally{try{d&&!d.done&&(p=h.return)&&p.call(h)}finally{if(c)throw c.error}}}}var T,E,f=l.prototype.declaration;if(f){var I=f.typeParameters;if(i){if((E=i.length)!=I.length)throw new Error("type argument count mismatch");if(E)for(l.contextualTypeArguments||(l.contextualTypeArguments=new Map),T=0;T=r.length)return!1;t=r[n],e-=64*(n+1)}return i64_ne(i64_and(t,i64_shl(i64_one,i64_new(e))),i64_zero)},e.prototype.setLocalWrapped=function(e,t){var r,n=-1;if(e<64){if(e<0)return;r=this.wrappedLocals}else{var i=this.wrappedLocalsExt;for(n=(e-64)/64|0,i||(this.wrappedLocalsExt=i=new Array(n+1),i.length=0);i.length<=n;)i.push(i64_new(0));r=i[n],e-=64*(n+1)}r=t?i64_or(r,i64_shl(i64_one,i64_new(e))):i64_and(r,i64_not(i64_shl(i64_one,i64_new(e)))),n>=0?this.wrappedLocalsExt[n]=r:this.wrappedLocals=r},e.prototype.inherit=function(e){this.flags|=4127&e.flags,this.wrappedLocals=e.wrappedLocals,this.wrappedLocalsExt=e.wrappedLocalsExt},e.prototype.inheritMutual=function(e,t){this.flags|=e.flags&t.flags&4127,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(l.getBinaryLeft(e),t)&&!(l.getExpressionId(r=l.getBinaryRight(e))==l.ExpressionId.Const&&l.getConstValueI32(r)>=a);case l.BinaryOp.DivU32:case l.BinaryOp.RemI32:case l.BinaryOp.RemU32:return this.canOverflow(l.getBinaryLeft(e),t)||this.canOverflow(l.getBinaryRight(e),t)}break;case l.ExpressionId.Unary:switch(l.getUnaryOp(e)){case l.UnaryOp.EqzI32:case l.UnaryOp.EqzI64:return!1;case l.UnaryOp.ClzI32:case l.UnaryOp.CtzI32:case l.UnaryOp.PopcntI32:return t.size<7}break;case l.ExpressionId.Const:var s=0;switch(l.getExpressionType(e)){case l.NativeType.I32:s=l.getConstValueI32(e);break;case l.NativeType.I64:s=l.getConstValueI64Low(e);break;case l.NativeType.F32:s=i32(l.getConstValueF32(e));break;case l.NativeType.F64:s=i32(l.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 l.ExpressionId.Load:var o=void 0;switch(l.getLoadBytes(e)){case 1:o=l.isLoadSigned(e)?c.Type.i8:c.Type.u8;break;case 2:o=l.isLoadSigned(e)?c.Type.i16:c.Type.u16;break;default:o=l.isLoadSigned(e)?c.Type.i32:c.Type.u32}return z(o,t);case l.ExpressionId.Block:if(!l.getBlockName(e)){var p=assert(l.getBlockChildCount(e)),u=l.getBlockChild(e,p-1);return this.canOverflow(u,t)}break;case l.ExpressionId.If:return this.canOverflow(l.getIfTrue(e),t)||this.canOverflow(assert(l.getIfFalse(e)),t);case l.ExpressionId.Select:return this.canOverflow(l.getSelectThen(e),t)||this.canOverflow(l.getSelectElse(e),t);case l.ExpressionId.Call:var h=this.currentFunction.program,d=assert(h.instancesLookup.get(assert(l.getCallTarget(e))));assert(d.kind==m.FUNCTION);var _=d.signature.returnType;return!d.flow.is(4096)||z(_,t);case l.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";function n(e){for(var r in e)t.hasOwnProperty(r)||(t[r]=e[r])}Object.defineProperty(t,"__esModule",{value:!0}),n(r(20)),n(r(19)),n(r(18)),n(r(17))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,i=r(8),a=r(1),s=r(8);function o(e){switch(e){case n.INFO:return"INFO";case n.WARNING:return"WARNING";case n.ERROR:return"ERROR";default:return assert(!1),""}}function c(e){switch(e){case n.INFO:return t.COLOR_BLUE;case n.WARNING:return t.COLOR_YELLOW;case n.ERROR:return t.COLOR_RED;default:return assert(!1),""}}t.DiagnosticCode=s.DiagnosticCode,t.diagnosticCodeToString=s.diagnosticCodeToString,function(e){e[e.INFO=0]="INFO",e[e.WARNING=1]="WARNING",e[e.ERROR=2]="ERROR"}(n=t.DiagnosticCategory||(t.DiagnosticCategory={})),t.diagnosticCategoryToString=o,t.COLOR_BLUE="",t.COLOR_YELLOW="",t.COLOR_RED="",t.COLOR_RESET="",t.diagnosticCategoryToColor=c;var p=function(){function e(e,t,r){this.range=null,this.code=e,this.category=t,this.message=r}return e.create=function(t,r,n,a,s){void 0===n&&(n=null),void 0===a&&(a=null),void 0===s&&(s=null);var o=i.diagnosticCodeToString(t);return null!=n&&(o=o.replace("{0}",n)),null!=a&&(o=o.replace("{1}",a)),null!=s&&(o=o.replace("{2}",s)),new e(t,r,o)},e.createInfo=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.INFO,r,i)},e.createWarning=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.WARNING,r,i)},e.createError=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.ERROR,r,i)},e.prototype.withRange=function(e){return this.range=e,this},e.prototype.toString=function(){return this.range?o(this.category)+" "+this.code.toString(10)+': "'+this.message+'" in '+this.range.source.normalizedPath+":"+this.range.line.toString(10)+":"+this.range.column.toString(10):o(this.category)+" "+this.code.toString(10)+": "+this.message},e}();function l(e,r){void 0===r&&(r=!1);for(var n=e.source.text,i=n.length,s=e.start,o=e.end;s>0&&!a.isLineBreak(n.charCodeAt(s-1));)s--;for(;o=0;--s)free_memory(a[s])}},e.prototype.createCall=function(e,t,r){var n=h(e),i=u(t);try{return _BinaryenCall(this.ref,n,i,t&&t.length||0,r)}finally{free_memory(i),free_memory(n)}},e.prototype.createCallImport=function(e,t,r){var n=h(e),i=u(t);try{return _BinaryenCallImport(this.ref,n,i,t&&t.length||0,r)}finally{free_memory(i),free_memory(n)}},e.prototype.createCallIndirect=function(e,t,r){var n=u(t),i=h(r);try{return _BinaryenCallIndirect(this.ref,e,n,t&&t.length||0,i)}finally{free_memory(i),free_memory(n)}},e.prototype.createUnreachable=function(){return _BinaryenUnreachable(this.ref)},e.prototype.addGlobal=function(e,t,r,n){var i=h(e);try{return _BinaryenAddGlobal(this.ref,i,t,r?1:0,n)}finally{free_memory(i)}},e.prototype.addFunction=function(e,t,r,n){var i=h(e),a=l(r);try{return _BinaryenAddFunction(this.ref,i,t,a,r?r.length:0,n)}finally{free_memory(a),free_memory(i)}},e.prototype.removeFunction=function(e){var t=h(e);try{_BinaryenRemoveFunction(this.ref,t)}finally{free_memory(t)}},e.prototype.addTemporaryFunction=function(e,t,r){this.hasTemporaryFunction=assert(!this.hasTemporaryFunction);var n=this.cachedTemporaryName;n||(this.cachedTemporaryName=n=h(""));var i=l(t);try{var a=_BinaryenAddFunctionType(this.ref,n,e,i,t?t.length:0);return _BinaryenAddFunction(this.ref,n,a,0,0,r)}finally{free_memory(i)}},e.prototype.removeTemporaryFunction=function(){this.hasTemporaryFunction=!assert(this.hasTemporaryFunction);var e=assert(this.cachedTemporaryName);_BinaryenRemoveFunction(this.ref,e),_BinaryenRemoveFunctionType(this.ref,e)},e.prototype.addFunctionExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddFunctionExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addTableExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddTableExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addMemoryExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddMemoryExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addGlobalExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddGlobalExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.removeExport=function(e){var t=h(e);try{_BinaryenRemoveExport(this.ref,t)}finally{free_memory(t)}},e.prototype.addFunctionImport=function(e,t,r,n){var i=h(e),a=h(t),s=h(r);try{return _BinaryenAddFunctionImport(this.ref,i,a,s,n)}finally{free_memory(s),free_memory(a),free_memory(i)}},e.prototype.addTableImport=function(e,t,r){var n=h(e),i=h(t),a=h(r);try{return _BinaryenAddTableImport(this.ref,n,i,a)}finally{free_memory(a),free_memory(i),free_memory(n)}},e.prototype.addMemoryImport=function(e,t,r){var n=h(e),i=h(t),a=h(r);try{return _BinaryenAddMemoryImport(this.ref,n,i,a)}finally{free_memory(a),free_memory(i),free_memory(n)}},e.prototype.addGlobalImport=function(e,t,r,n){var i=h(e),a=h(t),s=h(r);try{return _BinaryenAddGlobalImport(this.ref,i,a,s,n)}finally{free_memory(s),free_memory(a),free_memory(i)}},e.prototype.removeImport=function(e){var t=h(e);try{_BinaryenRemoveImport(this.ref,t)}finally{free_memory(t)}},e.prototype.setMemory=function(e,t,r,n,i){void 0===i&&(i=null);for(var s=h(i),o=r.length,c=new Array(o),u=new Array(o),d=new Array(o),_=0;_=0;--_)free_memory(c[_]);free_memory(s)}},e.prototype.setFunctionTable=function(e){var t=u(e);try{_BinaryenSetFunctionTable(this.ref,t,e.length)}finally{free_memory(t)}},e.prototype.setStart=function(e){_BinaryenSetStart(this.ref,e)},e.prototype.setOptimizeLevel=function(e){void 0===e&&(e=2),_BinaryenSetOptimizeLevel(e)},e.prototype.setShrinkLevel=function(e){void 0===e&&(e=1),_BinaryenSetShrinkLevel(e)},e.prototype.setDebugInfo=function(e){void 0===e&&(e=!1),_BinaryenSetDebugInfo(e)},e.prototype.optimize=function(e){void 0===e&&(e=0),e?_BinaryenFunctionOptimize(e,this.ref):_BinaryenModuleOptimize(this.ref)},e.prototype.runPasses=function(e,t){void 0===t&&(t=0);for(var r=e.length,n=new Array(r),i=0;i=0;--i)free_memory(n[i])}},e.prototype.precomputeFunction=function(e){var t=this.cachedPrecomputeNames;if(!t){var r=h("precompute");this.cachedPrecomputeName=r,this.cachedPrecomputeNames=t=l([r])}_BinaryenFunctionRunPasses(e,this.ref,t,1)},e.prototype.validate=function(){return 1==_BinaryenModuleValidate(this.ref)},e.prototype.interpret=function(){_BinaryenModuleInterpret(this.ref)},e.prototype.toBinary=function(e){var t=this.cachedByValue,r=h(e),n=0,i=0;try{_BinaryenModuleAllocateAndWrite(t,this.ref,r),n=d(t);var a=d(t+4);i=d(t+8);var s=new y;return s.output=function(e,t){for(var r=new Uint8Array(t),n=0;n>8&255),store(r+2,a>>16&255),store(r+3,a>>>24),r+=4}return t}function u(e){return l(e)}function h(e){if(null==e)return 0;for(var t=allocate_memory(function(e){for(var t=0,r=0,n=e.length;r=55296&&i<=57343&&r+1=55296&&a<=57343&&n+1>>6),store(r++,128|63&a)):a<=65535?(store(r++,224|a>>>12),store(r++,128|a>>>6&63),store(r++,128|63&a)):a<=2097151?(store(r++,240|a>>>18),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a)):a<=67108863?(store(r++,248|a>>>24),store(r++,128|a>>>18&63),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a)):(store(r++,252|a>>>30),store(r++,128|a>>>24&63),store(r++,128|a>>>18&63),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a))}return store(r,0),t}function d(e){return load(e)|load(e+1)<<8|load(e+2)<<16|load(e+3)<<24}function _(e){if(!e)return null;for(var t,r,n,i,a,s=new Array;t=load(e++);)128&t?(r=63&load(e++),192!=(224&t)?(n=63&load(e++),224==(240&t)?t=(15&t)<<12|r<<6|n:(i=63&load(e++),240==(248&t)?t=(7&t)<<18|r<<12|n<<6|i:(a=63&load(e++),t=248==(252&t)?(3&t)<<24|r<<18|n<<12|i<<6|a:(1&t)<<30|r<<24|n<<18|i<<12|a<<6|63&load(e++))),s.push(t)):s.push((31&t)<<6|r)):s.push(t);return String.fromCodePoints(s)}t.Relooper=c,t.readString=_;var y=function(){return function(){}}();t.BinaryModule=y},function(e,t,r){"use strict";var n,i=this&&this.__extends||(n=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])},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0});var a=r(0),s=r(6);t.Token=s.Token,t.Range=s.Range;var o,c=r(1);!function(e){e[e.SOURCE=0]="SOURCE",e[e.TYPE=1]="TYPE",e[e.TYPEPARAMETER=2]="TYPEPARAMETER",e[e.PARAMETER=3]="PARAMETER",e[e.SIGNATURE=4]="SIGNATURE",e[e.IDENTIFIER=5]="IDENTIFIER",e[e.ASSERTION=6]="ASSERTION",e[e.BINARY=7]="BINARY",e[e.CALL=8]="CALL",e[e.COMMA=9]="COMMA",e[e.ELEMENTACCESS=10]="ELEMENTACCESS",e[e.FALSE=11]="FALSE",e[e.FUNCTION=12]="FUNCTION",e[e.INSTANCEOF=13]="INSTANCEOF",e[e.LITERAL=14]="LITERAL",e[e.NEW=15]="NEW",e[e.NULL=16]="NULL",e[e.PARENTHESIZED=17]="PARENTHESIZED",e[e.PROPERTYACCESS=18]="PROPERTYACCESS",e[e.TERNARY=19]="TERNARY",e[e.SUPER=20]="SUPER",e[e.THIS=21]="THIS",e[e.TRUE=22]="TRUE",e[e.CONSTRUCTOR=23]="CONSTRUCTOR",e[e.UNARYPOSTFIX=24]="UNARYPOSTFIX",e[e.UNARYPREFIX=25]="UNARYPREFIX",e[e.BLOCK=26]="BLOCK",e[e.BREAK=27]="BREAK",e[e.CONTINUE=28]="CONTINUE",e[e.DO=29]="DO",e[e.EMPTY=30]="EMPTY",e[e.EXPORT=31]="EXPORT",e[e.EXPORTIMPORT=32]="EXPORTIMPORT",e[e.EXPRESSION=33]="EXPRESSION",e[e.FOR=34]="FOR",e[e.IF=35]="IF",e[e.IMPORT=36]="IMPORT",e[e.RETURN=37]="RETURN",e[e.SWITCH=38]="SWITCH",e[e.THROW=39]="THROW",e[e.TRY=40]="TRY",e[e.VARIABLE=41]="VARIABLE",e[e.VOID=42]="VOID",e[e.WHILE=43]="WHILE",e[e.CLASSDECLARATION=44]="CLASSDECLARATION",e[e.ENUMDECLARATION=45]="ENUMDECLARATION",e[e.ENUMVALUEDECLARATION=46]="ENUMVALUEDECLARATION",e[e.FIELDDECLARATION=47]="FIELDDECLARATION",e[e.FUNCTIONDECLARATION=48]="FUNCTIONDECLARATION",e[e.IMPORTDECLARATION=49]="IMPORTDECLARATION",e[e.INTERFACEDECLARATION=50]="INTERFACEDECLARATION",e[e.METHODDECLARATION=51]="METHODDECLARATION",e[e.NAMESPACEDECLARATION=52]="NAMESPACEDECLARATION",e[e.TYPEDECLARATION=53]="TYPEDECLARATION",e[e.VARIABLEDECLARATION=54]="VARIABLEDECLARATION",e[e.DECORATOR=55]="DECORATOR",e[e.EXPORTMEMBER=56]="EXPORTMEMBER",e[e.SWITCHCASE=57]="SWITCHCASE",e[e.COMMENT=58]="COMMENT"}(o=t.NodeKind||(t.NodeKind={})),t.nodeIsConstantValue=function(e){switch(e){case o.LITERAL:case o.NULL:case o.TRUE:case o.FALSE:return!0}return!1};var p=function(){function e(){this.parent=null,this.flags=a.CommonFlags.NONE}return e.prototype.is=function(e){return(this.flags&e)==e},e.prototype.isAny=function(e){return 0!=(this.flags&e)},e.prototype.set=function(e){this.flags|=e},e.createType=function(e,t,r,n){var i=new u;return i.range=n,i.name=e,e.parent=i,i.typeArguments=t,t&&xe(t,i),i.isNullable=r,i},e.createOmittedType=function(t){return e.createType(e.createIdentifierExpression("",t),null,!1,t)},e.createTypeParameter=function(e,t,r){var n=new h;return n.range=r,n.name=e,e.parent=n,n.extendsType=t,t&&(t.parent=n),n},e.createParameter=function(e,t,r,n,i){var a=new d;return a.range=i,a.name=e,e.parent=a,a.type=t,t&&(t.parent=a),a.initializer=r,r&&(r.parent=a),a.parameterKind=n,a},e.createSignature=function(e,t,r,n,i){var a=new y;return a.range=i,a.parameters=e,xe(e,a),a.returnType=t,t.parent=a,a.explicitThisType=r,r&&(r.parent=a),a.isNullable=n,a},e.createDecorator=function(e,t,r){var n=new g;return n.range=r,n.name=e,e.parent=n,n.arguments=t,t&&xe(t,n),n.decoratorKind=m(e),n},e.createComment=function(e,t,r){var n=new T;return n.range=r,n.commentKind=t,n.text=e,n},e.createIdentifierExpression=function(e,t){var r=new I;return r.range=t,r.text=e,r},e.createEmptyIdentifierExpression=function(e){var t=new I;return t.range=e,t.text="",t},e.createArrayLiteralExpression=function(e,t){var r=new A;return r.range=t,r.elementExpressions=e,function(e,t){for(var r=0,n=e.length;r0},enumerable:!0,configurable:!0}),t}(Z);t.ClassDeclaration=te;var re=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.CONTINUE,t}return i(t,e),t}(q);t.ContinueStatement=re;var ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.DO,t}return i(t,e),t}(q);t.DoStatement=ne;var ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.EMPTY,t}return i(t,e),t}(q);t.EmptyStatement=ie;var ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.ENUMDECLARATION,t}return i(t,e),t}(Z);t.EnumDeclaration=ae;var se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.ENUMVALUEDECLARATION,t}return i(t,e),t}(Z);t.EnumValueDeclaration=se;var oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.EXPORTIMPORT,t}return i(t,e),t}(p);t.ExportImportStatement=oe;var ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.EXPORTMEMBER,t}return i(t,e),t}(p);t.ExportMember=ce;var pe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.EXPORT,t}return i(t,e),t}(q);t.ExportStatement=pe;var le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.EXPRESSION,t}return i(t,e),t}(q);t.ExpressionStatement=le;var ue=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.FIELDDECLARATION,t.parameterIndex=-1,t}return i(t,e),t}($);t.FieldDeclaration=ue;var he=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.FOR,t}return i(t,e),t}(q);t.ForStatement=he;var de=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.FUNCTIONDECLARATION,t}return i(t,e),Object.defineProperty(t.prototype,"isGeneric",{get:function(){var e=this.typeParameters;return null!=e&&e.length>0},enumerable:!0,configurable:!0}),t}(Z);t.FunctionDeclaration=de;var _e=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.IF,t}return i(t,e),t}(q);t.IfStatement=_e;var ye=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.IMPORTDECLARATION,t}return i(t,e),t}(Z);t.ImportDeclaration=ye;var me=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.IMPORT,t}return i(t,e),t}(q);t.ImportStatement=me;var ge=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.INTERFACEDECLARATION,t}return i(t,e),t}(te);t.InterfaceDeclaration=ge;var Te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.METHODDECLARATION,t}return i(t,e),t}(de);t.MethodDeclaration=Te;var Ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.NAMESPACEDECLARATION,t}return i(t,e),t}(Z);t.NamespaceDeclaration=Ee;var fe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.RETURN,t}return i(t,e),t}(q);t.ReturnStatement=fe;var Ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.SWITCHCASE,t}return i(t,e),t}(p);t.SwitchCase=Ie;var ve=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.SWITCH,t}return i(t,e),t}(q);t.SwitchStatement=ve;var Ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.THROW,t}return i(t,e),t}(q);t.ThrowStatement=Ae;var Ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.TRY,t}return i(t,e),t}(q);t.TryStatement=Ne;var Ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.TYPEDECLARATION,t}return i(t,e),t}(Z);t.TypeDeclaration=Ce;var Oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.VARIABLEDECLARATION,t}return i(t,e),t}($);t.VariableDeclaration=Oe;var Se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.VARIABLE,t}return i(t,e),t}(q);t.VariableStatement=Se;var Le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.VOID,t}return i(t,e),t}(q);t.VoidStatement=Le;var be=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.WHILE,t}return i(t,e),t}(q);function ke(e,t){void 0===t&&(t=!1);var r=e.name.text,n=e.parent;return n&&(e.kind!=o.VARIABLEDECLARATION||n.kind!=o.VARIABLE||(n=n.parent))?n.kind==o.CLASSDECLARATION?ke(n,t)+(e.is(a.CommonFlags.STATIC)?a.STATIC_DELIMITER:a.INSTANCE_DELIMITER)+r:n.kind==o.NAMESPACEDECLARATION||n.kind==o.ENUMDECLARATION?ke(n,t)+a.STATIC_DELIMITER+r:t?r:e.range.source.internalPath+a.PATH_DELIMITER+r:r}function Re(e){return e.endsWith(".ts")&&(e=e.substring(0,e.length-3)),e}function xe(e,t){for(var r=0,n=e.length;r";case a.LESSTHAN_EQUALS:return"<=";case a.GREATERTHAN_EQUALS:return">=";case a.EQUALS_EQUALS:return"==";case a.EXCLAMATION_EQUALS:return"!=";case a.EQUALS_EQUALS_EQUALS:return"===";case a.EXCLAMATION_EQUALS_EQUALS:return"!==";case a.PLUS:return"+";case a.MINUS:return"-";case a.ASTERISK_ASTERISK:return"**";case a.ASTERISK:return"*";case a.SLASH:return"/";case a.PERCENT:return"%";case a.PLUS_PLUS:return"++";case a.MINUS_MINUS:return"--";case a.LESSTHAN_LESSTHAN:return"<<";case a.GREATERTHAN_GREATERTHAN:return">>";case a.GREATERTHAN_GREATERTHAN_GREATERTHAN:return">>>";case a.AMPERSAND:return"&";case a.BAR:return"|";case a.CARET:return"^";case a.EXCLAMATION:return"!";case a.TILDE:return"~";case a.AMPERSAND_AMPERSAND:return"&&";case a.BAR_BAR:return"||";case a.EQUALS:return"=";case a.PLUS_EQUALS:return"+=";case a.MINUS_EQUALS:return"-=";case a.ASTERISK_EQUALS:return"*=";case a.ASTERISK_ASTERISK_EQUALS:return"**=";case a.SLASH_EQUALS:return"/=";case a.PERCENT_EQUALS:return"%=";case a.LESSTHAN_LESSTHAN_EQUALS:return"<<=";case a.GREATERTHAN_GREATERTHAN_EQUALS:return">>=";case a.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:return">>>=";case a.AMPERSAND_EQUALS:return"&=";case a.BAR_EQUALS:return"|=";case a.CARET_EQUALS:return"^=";default:return assert(!1),""}};var h=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=h;var d=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,r)||this;n.end=0,n.pos=0,n.token=-1,n.tokenPos=0,n.nextToken=-1,n.nextTokenPos=0,n.nextTokenOnNewLine=!1,n.onComment=null,n.source=t,n.pos=0,n.end=t.text.length,n.diagnostics=r||new Array;var i=t.text;if(n.pos1&&this.pos2&&this.pos1&&this.pos1&&this.pos1&&this.pos2&&this.pos1&&this.pos1&&this.pos1&&this.pos2&&this.pos+11&&this.pos1&&this.pos2&&this.pos1&&this.pos2&&this.pos1&&this.pos2&&this.pos3&&this.pos1&&this.pos1&&this.posi;)if(p.isLineBreak(n.charCodeAt(this.tokenPos))){this.nextTokenOnNewLine=!0;break}this.pos=i,this.token=a,this.tokenPos=o}return this.nextToken},t.prototype.skipIdentifier=function(){return this.skip(a.IDENTIFIER,s.PREFER)},t.prototype.skipIdentifierName=function(){return this.skip(a.IDENTIFIER,s.ALWAYS)},t.prototype.skip=function(e,t){void 0===t&&(t=s.DEFAULT);var r=this.pos,n=this.token,i=this.tokenPos,o=i32.MAX_VALUE;switch(e){case a.GREATERTHAN:o=1}return this.token=this.unsafeNext(t,o),this.token==e?(this.nextToken=-1,!0):(this.pos=r,this.token=n,this.tokenPos=i,!1)},t.prototype.mark=function(){var e;return y?(e=y,y=null):e=new _,e.pos=this.pos,e.token=this.token,e.tokenPos=this.tokenPos,e},t.prototype.discard=function(e){y=e},t.prototype.reset=function(e){this.pos=e.pos,this.token=e.token,this.tokenPos=e.tokenPos,this.nextToken=-1},t.prototype.range=function(e,t){return void 0===e&&(e=-1),void 0===t&&(t=-1),e<0?(e=this.tokenPos,t=this.pos):t<0&&(t=e),new h(this.source,e,t)},t.prototype.readIdentifier=function(){for(var e=this.source.text,t=this.pos;++this.pos=this.end){n+=e.substring(r,this.pos),this.error(o.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(p.isLineBreak(i)){n+=e.substring(r,this.pos),this.error(o.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(o.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(o.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(p.isLineBreak(n)){this.error(o.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&&s<=57)r=i64_add(i64_mul(r,n),i64_new(s-48,0));else if(s>=65&&s<=70)r=i64_add(i64_mul(r,n),i64_new(10+s-65,0));else if(s>=97&&s<=102)r=i64_add(i64_mul(r,n),i64_new(10+s-97,0));else{if(95!=s)break;i==a&&this.error(i==t?o.DiagnosticCode.Numeric_separators_are_not_allowed_here:o.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}this.pos=a+1}return this.pos==t?this.error(o.DiagnosticCode.Hexadecimal_digit_expected,this.range(t)):i==this.pos&&this.error(o.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&&s<=57)r=i64_add(i64_mul(r,n),i64_new(s-48,0));else{if(95!=s)break;i==a&&this.error(i==t?o.DiagnosticCode.Numeric_separators_are_not_allowed_here:o.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}this.pos=a+1}return this.pos==t?this.error(o.DiagnosticCode.Digit_expected,this.range(t)):i==this.pos&&this.error(o.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&&s<=55)r=i64_add(i64_mul(r,n),i64_new(s-48,0));else{if(95!=s)break;i==a&&this.error(i==t?o.DiagnosticCode.Numeric_separators_are_not_allowed_here:o.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}++this.pos}return this.pos==t?this.error(o.DiagnosticCode.Octal_digit_expected,this.range(t)):i==this.pos&&this.error(o.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(o.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(o.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(o.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(o.DiagnosticCode.Unexpected_end_of_text,this.range(e,this.end)),n=!0):125==i.charCodeAt(this.pos)?++this.pos:(this.error(o.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}(o.DiagnosticEmitter);t.Tokenizer=d;var _=function(){return function(){}}();t.State=_;var y=null},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(3);!function(e){e[e.I8=0]="I8",e[e.I16=1]="I16",e[e.I32=2]="I32",e[e.I64=3]="I64",e[e.ISIZE=4]="ISIZE",e[e.U8=5]="U8",e[e.U16=6]="U16",e[e.U32=7]="U32",e[e.U64=8]="U64",e[e.USIZE=9]="USIZE",e[e.BOOL=10]="BOOL",e[e.F32=11]="F32",e[e.F64=12]="F64",e[e.VOID=13]="VOID"}(t.TypeKind||(t.TypeKind={})),function(e){e[e.NONE=0]="NONE",e[e.SIGNED=1]="SIGNED",e[e.UNSIGNED=2]="UNSIGNED",e[e.INTEGER=4]="INTEGER",e[e.FLOAT=8]="FLOAT",e[e.POINTER=16]="POINTER",e[e.SHORT=32]="SHORT",e[e.LONG=64]="LONG",e[e.VALUE=128]="VALUE",e[e.REFERENCE=256]="REFERENCE",e[e.NULLABLE=512]="NULLABLE"}(t.TypeFlags||(t.TypeFlags={}));var i=function(){function e(e,t,r){this.cachedNullableType=null,this.kind=e,this.flags=t,this.size=r,this.byteSize=ceil(r/8),this.classReference=null,this.signatureReference=null,this.nonNullableType=this}return Object.defineProperty(e.prototype,"intType",{get:function(){switch(this.kind){case 0:return e.i8;case 1:return e.i16;case 11:case 2:return e.i32;case 12:case 3:return e.i64;case 4:return 64==this.size?e.isize64:e.isize32;case 5:return e.u8;case 6:return e.u16;case 7:return e.u32;case 8:return e.u64;case 9:return 64==this.size?e.usize64:e.usize32;case 10:default:return e.i32}},enumerable:!0,configurable:!0}),e.prototype.computeSmallIntegerShift=function(e){return e.size-this.size},e.prototype.computeSmallIntegerMask=function(e){var t=this.is(2)?this.size:this.size-1;return-1>>>e.size-t},e.prototype.is=function(e){return(this.flags&e)==e},e.prototype.isAny=function(e){return 0!=(this.flags&e)},e.prototype.asClass=function(t){assert(9==this.kind&&!this.classReference);var r=new e(this.kind,-129&this.flags|256,this.size);return r.classReference=t,r},e.prototype.asFunction=function(t){assert(7==this.kind&&!this.signatureReference);var r=new e(this.kind,-129&this.flags|256,this.size);return r.signatureReference=t,r},e.prototype.asNullable=function(){return assert(this.is(256)),this.cachedNullableType||(assert(!this.is(512)),this.cachedNullableType=new e(this.kind,512|this.flags,this.size),this.cachedNullableType.nonNullableType=this,this.cachedNullableType.classReference=this.classReference,this.cachedNullableType.signatureReference=this.signatureReference),this.cachedNullableType},e.prototype.isAssignableTo=function(e,t){var r,n,i,a;if(void 0===t&&(t=!1),this.is(256)){if(e.is(256)&&(!this.is(512)||e.is(512)))if(r=this.classReference){if(n=e.classReference)return r.isAssignableTo(n)}else if((i=this.signatureReference)&&(a=e.signatureReference))return i.isAssignableTo(a)}else if(!e.is(256))if(this.is(4))if(e.is(4)){if(!t||this.is(1)==e.is(1))return this.size<=e.size}else{if(11==e.kind)return this.size<=23;if(12==e.kind)return this.size<=52}else if(this.is(8)&&e.is(8))return this.size<=e.size;return!1},e.commonCompatible=function(e,t,r){return t.isAssignableTo(e,r)?e:e.isAssignableTo(t,r)?t:null},e.prototype.toString=function(e){if(void 0===e&&(e=!1),!e&&this.is(256)){var t=this.classReference;if(t)return this.is(512)?t.toString()+" | null":t.toString();var r=this.signatureReference;if(r)return this.is(512)?"("+r.toString(!0)+") | null":r.toString(!0);assert(!1)}switch(this.kind){case 0:return"i8";case 1:return"i16";case 2:return"i32";case 3:return"i64";case 4:return"isize";case 5:return"u8";case 6:return"u16";case 7:return"u32";case 8:return"u64";case 9:return"usize";case 10:return"bool";case 11:return"f32";case 12:return"f64";default:assert(!1);case 13:return"void"}},e.prototype.toNativeType=function(){switch(this.kind){default:return n.NativeType.I32;case 3:case 8:return n.NativeType.I64;case 4:case 9:return 64==this.size?n.NativeType.I64:n.NativeType.I32;case 11:return n.NativeType.F32;case 12:return n.NativeType.F64;case 13:return n.NativeType.None}},e.prototype.toNativeZero=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(0);case 4:case 9:if(64!=this.size)return e.createI32(0);case 3:case 8:return e.createI64(0);case 11:return e.createF32(0);case 12:return e.createF64(0)}},e.prototype.toNativeOne=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(1);case 4:case 9:if(64!=this.size)return e.createI32(1);case 3:case 8:return e.createI64(1);case 11:return e.createF32(1);case 12:return e.createF64(1)}},e.prototype.toNativeNegOne=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(-1);case 4:case 9:if(64!=this.size)return e.createI32(-1);case 3:case 8:return e.createI64(-1,-1);case 11:return e.createF32(-1);case 12:return e.createF64(-1)}},e.prototype.toSignatureString=function(){switch(this.kind){default:return"i";case 3:case 8:return"I";case 4:case 9:return 64==this.size?"I":"i";case 11:return"f";case 12:return"F";case 13:return"v"}},e.i8=new e(0,165,8),e.i16=new e(1,165,16),e.i32=new e(2,133,32),e.i64=new e(3,197,64),e.isize32=new e(4,149,32),e.isize64=new e(4,213,64),e.u8=new e(5,166,8),e.u16=new e(6,166,16),e.u32=new e(7,134,32),e.u64=new e(8,198,64),e.usize32=new e(9,150,32),e.usize64=new e(9,214,64),e.bool=new e(10,166,1),e.f32=new e(11,137,32),e.f64=new e(12,201,64),e.void=new e(13,0,0),e}();t.Type=i,t.typesToNativeTypes=function(e){for(var t=e.length,r=new Array(t),n=0;ne?t[e]:o(e)},e.prototype.isAssignableTo=function(e){var t=this.thisType,r=e.thisType;if(t){if(!r||!t.isAssignableTo(r))return!1}else if(r)return!1;if(this.hasRest!=e.hasRest)return!1;var n=this.parameterTypes,i=e.parameterTypes,a=n.length;if(a!=i.length)return!1;for(var s=0;s=p&&u!=l?t.push("?: "):t.push(": "),t.push(i[u].toString());return t.push(") => "),t.push(this.returnType.toString()),t.join("")},e}();t.Signature=a;var s=null;function o(e){s||(s=[]);for(var t=s.length;t<=e;++t)s.push("arg$"+t.toString(10));return s[e-1]}t.getDefaultParameterName=o},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.Operation_not_supported=100]="Operation_not_supported",e[e.Operation_is_unsafe=101]="Operation_is_unsafe",e[e.Conversion_from_type_0_to_1_requires_an_explicit_cast=200]="Conversion_from_type_0_to_1_requires_an_explicit_cast",e[e.Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit=201]="Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit",e[e.Type_0_cannot_be_changed_to_type_1=202]="Type_0_cannot_be_changed_to_type_1",e[e.Type_0_cannot_be_reinterpreted_as_type_1=203]="Type_0_cannot_be_reinterpreted_as_type_1",e[e.Basic_type_0_cannot_be_nullable=204]="Basic_type_0_cannot_be_nullable",e[e.Cannot_export_a_mutable_global=205]="Cannot_export_a_mutable_global",e[e.Compiling_constant_with_non_constant_initializer_as_mutable=206]="Compiling_constant_with_non_constant_initializer_as_mutable",e[e.Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa=207]="Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa",e[e.Unmanaged_classes_cannot_implement_interfaces=208]="Unmanaged_classes_cannot_implement_interfaces",e[e.Invalid_regular_expression_flags=209]="Invalid_regular_expression_flags",e[e.Implementation_0_must_match_the_signature_1=210]="Implementation_0_must_match_the_signature_1",e[e.Class_0_is_sealed_and_cannot_be_extended=211]="Class_0_is_sealed_and_cannot_be_extended",e[e.Decorator_0_is_not_valid_here=212]="Decorator_0_is_not_valid_here",e[e.Duplicate_decorator=213]="Duplicate_decorator",e[e.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf=214]="An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf",e[e.Optional_parameter_must_have_an_initializer=215]="Optional_parameter_must_have_an_initializer",e[e.Unterminated_string_literal=1002]="Unterminated_string_literal",e[e.Identifier_expected=1003]="Identifier_expected",e[e._0_expected=1005]="_0_expected",e[e.A_file_cannot_have_a_reference_to_itself=1006]="A_file_cannot_have_a_reference_to_itself",e[e.Trailing_comma_not_allowed=1009]="Trailing_comma_not_allowed",e[e.Unexpected_token=1012]="Unexpected_token",e[e.A_rest_parameter_must_be_last_in_a_parameter_list=1014]="A_rest_parameter_must_be_last_in_a_parameter_list",e[e.Parameter_cannot_have_question_mark_and_initializer=1015]="Parameter_cannot_have_question_mark_and_initializer",e[e.A_required_parameter_cannot_follow_an_optional_parameter=1016]="A_required_parameter_cannot_follow_an_optional_parameter",e[e.Enum_member_must_have_initializer=1061]="Enum_member_must_have_initializer",e[e.Statements_are_not_allowed_in_ambient_contexts=1036]="Statements_are_not_allowed_in_ambient_contexts",e[e.Initializers_are_not_allowed_in_ambient_contexts=1039]="Initializers_are_not_allowed_in_ambient_contexts",e[e._0_modifier_cannot_be_used_here=1042]="_0_modifier_cannot_be_used_here",e[e.A_rest_parameter_cannot_be_optional=1047]="A_rest_parameter_cannot_be_optional",e[e.A_rest_parameter_cannot_have_an_initializer=1048]="A_rest_parameter_cannot_have_an_initializer",e[e.A_set_accessor_must_have_exactly_one_parameter=1049]="A_set_accessor_must_have_exactly_one_parameter",e[e.A_set_accessor_parameter_cannot_have_an_initializer=1052]="A_set_accessor_parameter_cannot_have_an_initializer",e[e.A_get_accessor_cannot_have_parameters=1054]="A_get_accessor_cannot_have_parameters",e[e.Type_parameters_cannot_appear_on_a_constructor_declaration=1092]="Type_parameters_cannot_appear_on_a_constructor_declaration",e[e.Type_annotation_cannot_appear_on_a_constructor_declaration=1093]="Type_annotation_cannot_appear_on_a_constructor_declaration",e[e.An_accessor_cannot_have_type_parameters=1094]="An_accessor_cannot_have_type_parameters",e[e.A_set_accessor_cannot_have_a_return_type_annotation=1095]="A_set_accessor_cannot_have_a_return_type_annotation",e[e.Type_parameter_list_cannot_be_empty=1098]="Type_parameter_list_cannot_be_empty",e[e.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement=1104]="A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement",e[e.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement=1105]="A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement",e[e.A_return_statement_can_only_be_used_within_a_function_body=1108]="A_return_statement_can_only_be_used_within_a_function_body",e[e.Expression_expected=1109]="Expression_expected",e[e.Type_expected=1110]="Type_expected",e[e.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement=1113]="A_default_clause_cannot_appear_more_than_once_in_a_switch_statement",e[e.Duplicate_label_0=1114]="Duplicate_label_0",e[e.Octal_literals_are_not_allowed_in_strict_mode=1121]="Octal_literals_are_not_allowed_in_strict_mode",e[e.Digit_expected=1124]="Digit_expected",e[e.Hexadecimal_digit_expected=1125]="Hexadecimal_digit_expected",e[e.Unexpected_end_of_text=1126]="Unexpected_end_of_text",e[e.Invalid_character=1127]="Invalid_character",e[e._case_or_default_expected=1130]="_case_or_default_expected",e[e.A_declare_modifier_cannot_be_used_in_an_already_ambient_context=1038]="A_declare_modifier_cannot_be_used_in_an_already_ambient_context",e[e.Type_argument_expected=1140]="Type_argument_expected",e[e.String_literal_expected=1141]="String_literal_expected",e[e.Line_break_not_permitted_here=1142]="Line_break_not_permitted_here",e[e.Declaration_expected=1146]="Declaration_expected",e[e._const_declarations_must_be_initialized=1155]="_const_declarations_must_be_initialized",e[e.Unterminated_regular_expression_literal=1161]="Unterminated_regular_expression_literal",e[e.Interface_declaration_cannot_have_implements_clause=1176]="Interface_declaration_cannot_have_implements_clause",e[e.Binary_digit_expected=1177]="Binary_digit_expected",e[e.Octal_digit_expected=1178]="Octal_digit_expected",e[e.An_implementation_cannot_be_declared_in_ambient_contexts=1183]="An_implementation_cannot_be_declared_in_ambient_contexts",e[e.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive=1198]="An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive",e[e.Unterminated_Unicode_escape_sequence=1199]="Unterminated_Unicode_escape_sequence",e[e.Decorators_are_not_valid_here=1206]="Decorators_are_not_valid_here",e[e._abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration=1242]="_abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration",e[e.A_class_may_only_extend_another_class=1311]="A_class_may_only_extend_another_class",e[e.A_parameter_property_cannot_be_declared_using_a_rest_parameter=1317]="A_parameter_property_cannot_be_declared_using_a_rest_parameter",e[e.Duplicate_identifier_0=2300]="Duplicate_identifier_0",e[e.Cannot_find_name_0=2304]="Cannot_find_name_0",e[e.Module_0_has_no_exported_member_1=2305]="Module_0_has_no_exported_member_1",e[e.Generic_type_0_requires_1_type_argument_s=2314]="Generic_type_0_requires_1_type_argument_s",e[e.Type_0_is_not_generic=2315]="Type_0_is_not_generic",e[e.Type_0_is_not_assignable_to_type_1=2322]="Type_0_is_not_assignable_to_type_1",e[e.Index_signature_is_missing_in_type_0=2329]="Index_signature_is_missing_in_type_0",e[e._this_cannot_be_referenced_in_current_location=2332]="_this_cannot_be_referenced_in_current_location",e[e._super_can_only_be_referenced_in_a_derived_class=2335]="_super_can_only_be_referenced_in_a_derived_class",e[e.Property_0_does_not_exist_on_type_1=2339]="Property_0_does_not_exist_on_type_1",e[e.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures=2349]="Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures",e[e.Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature=2351]="Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature",e[e.A_function_whose_declared_type_is_not_void_must_return_a_value=2355]="A_function_whose_declared_type_is_not_void_must_return_a_value",e[e.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access=2357]="The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access",e[e.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access=2364]="The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access",e[e.Operator_0_cannot_be_applied_to_types_1_and_2=2365]="Operator_0_cannot_be_applied_to_types_1_and_2",e[e._get_and_set_accessor_must_have_the_same_type=2380]="_get_and_set_accessor_must_have_the_same_type",e[e.Constructor_implementation_is_missing=2390]="Constructor_implementation_is_missing",e[e.Function_implementation_is_missing_or_not_immediately_following_the_declaration=2391]="Function_implementation_is_missing_or_not_immediately_following_the_declaration",e[e.Multiple_constructor_implementations_are_not_allowed=2392]="Multiple_constructor_implementations_are_not_allowed",e[e.Duplicate_function_implementation=2393]="Duplicate_function_implementation",e[e.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local=2395]="Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local",e[e.Type_0_has_no_property_1=2460]="Type_0_has_no_property_1",e[e.The_0_operator_cannot_be_applied_to_type_1=2469]="The_0_operator_cannot_be_applied_to_type_1",e[e.Export_declaration_conflicts_with_exported_declaration_of_0=2484]="Export_declaration_conflicts_with_exported_declaration_of_0",e[e.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property=2540]="Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property",e[e.The_target_of_an_assignment_must_be_a_variable_or_a_property_access=2541]="The_target_of_an_assignment_must_be_a_variable_or_a_property_access",e[e.Index_signature_in_type_0_only_permits_reading=2542]="Index_signature_in_type_0_only_permits_reading",e[e.Expected_0_arguments_but_got_1=2554]="Expected_0_arguments_but_got_1",e[e.Expected_at_least_0_arguments_but_got_1=2555]="Expected_at_least_0_arguments_but_got_1",e[e.Expected_0_type_arguments_but_got_1=2558]="Expected_0_type_arguments_but_got_1",e[e.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums=2651]="A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums",e[e.Namespace_0_has_no_exported_member_1=2694]="Namespace_0_has_no_exported_member_1",e[e.File_0_not_found=6054]="File_0_not_found",e[e.Numeric_separators_are_not_allowed_here=6188]="Numeric_separators_are_not_allowed_here",e[e.Multiple_consecutive_numeric_separators_are_not_permitted=6189]="Multiple_consecutive_numeric_separators_are_not_permitted"}(t.DiagnosticCode||(t.DiagnosticCode={})),t.diagnosticCodeToString=function(e){switch(e){case 100:return"Operation not supported.";case 101:return"Operation is unsafe.";case 200:return"Conversion from type '{0}' to '{1}' requires an explicit cast.";case 201:return"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.";case 202:return"Type '{0}' cannot be changed to type '{1}'.";case 203:return"Type '{0}' cannot be reinterpreted as type '{1}'.";case 204:return"Basic type '{0}' cannot be nullable.";case 205:return"Cannot export a mutable global.";case 206:return"Compiling constant with non-constant initializer as mutable.";case 207:return"Unmanaged classes cannot extend managed classes and vice-versa.";case 208:return"Unmanaged classes cannot implement interfaces.";case 209:return"Invalid regular expression flags.";case 210:return"Implementation '{0}' must match the signature '{1}'.";case 211:return"Class '{0}' is sealed and cannot be extended.";case 212:return"Decorator '{0}' is not valid here.";case 213:return"Duplicate decorator.";case 214:return"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.";case 215:return"Optional parameter must have an initializer.";case 1002:return"Unterminated string literal.";case 1003:return"Identifier expected.";case 1005:return"'{0}' expected.";case 1006:return"A file cannot have a reference to itself.";case 1009:return"Trailing comma not allowed.";case 1012:return"Unexpected token.";case 1014:return"A rest parameter must be last in a parameter list.";case 1015:return"Parameter cannot have question mark and initializer.";case 1016:return"A required parameter cannot follow an optional parameter.";case 1061:return"Enum member must have initializer.";case 1036:return"Statements are not allowed in ambient contexts.";case 1039:return"Initializers are not allowed in ambient contexts.";case 1042:return"'{0}' modifier cannot be used here.";case 1047:return"A rest parameter cannot be optional.";case 1048:return"A rest parameter cannot have an initializer.";case 1049:return"A 'set' accessor must have exactly one parameter.";case 1052:return"A 'set' accessor parameter cannot have an initializer.";case 1054:return"A 'get' accessor cannot have parameters.";case 1092:return"Type parameters cannot appear on a constructor declaration.";case 1093:return"Type annotation cannot appear on a constructor declaration.";case 1094:return"An accessor cannot have type parameters.";case 1095:return"A 'set' accessor cannot have a return type annotation.";case 1098:return"Type parameter list cannot be empty.";case 1104:return"A 'continue' statement can only be used within an enclosing iteration statement.";case 1105:return"A 'break' statement can only be used within an enclosing iteration or switch statement.";case 1108:return"A 'return' statement can only be used within a function body.";case 1109:return"Expression expected.";case 1110:return"Type expected.";case 1113:return"A 'default' clause cannot appear more than once in a 'switch' statement.";case 1114:return"Duplicate label '{0}'.";case 1121:return"Octal literals are not allowed in strict mode.";case 1124:return"Digit expected.";case 1125:return"Hexadecimal digit expected.";case 1126:return"Unexpected end of text.";case 1127:return"Invalid character.";case 1130:return"'case' or 'default' expected.";case 1038:return"A 'declare' modifier cannot be used in an already ambient context.";case 1140:return"Type argument expected.";case 1141:return"String literal expected.";case 1142:return"Line break not permitted here.";case 1146:return"Declaration expected.";case 1155:return"'const' declarations must be initialized.";case 1161:return"Unterminated regular expression literal.";case 1176:return"Interface declaration cannot have 'implements' clause.";case 1177:return"Binary digit expected.";case 1178:return"Octal digit expected.";case 1183:return"An implementation cannot be declared in ambient contexts.";case 1198:return"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.";case 1199:return"Unterminated Unicode escape sequence.";case 1206:return"Decorators are not valid here.";case 1242:return"'abstract' modifier can only appear on a class, method, or property declaration.";case 1311:return"A class may only extend another class.";case 1317:return"A parameter property cannot be declared using a rest parameter.";case 2300:return"Duplicate identifier '{0}'.";case 2304:return"Cannot find name '{0}'.";case 2305:return"Module '{0}' has no exported member '{1}'.";case 2314:return"Generic type '{0}' requires {1} type argument(s).";case 2315:return"Type '{0}' is not generic.";case 2322:return"Type '{0}' is not assignable to type '{1}'.";case 2329:return"Index signature is missing in type '{0}'.";case 2332:return"'this' cannot be referenced in current location.";case 2335:return"'super' can only be referenced in a derived class.";case 2339:return"Property '{0}' does not exist on type '{1}'.";case 2349:return"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.";case 2351:return"Cannot use 'new' with an expression whose type lacks a construct signature.";case 2355:return"A function whose declared type is not 'void' must return a value.";case 2357:return"The operand of an increment or decrement operator must be a variable or a property access.";case 2364:return"The left-hand side of an assignment expression must be a variable or a property access.";case 2365:return"Operator '{0}' cannot be applied to types '{1}' and '{2}'.";case 2380:return"'get' and 'set' accessor must have the same type.";case 2390:return"Constructor implementation is missing.";case 2391:return"Function implementation is missing or not immediately following the declaration.";case 2392:return"Multiple constructor implementations are not allowed.";case 2393:return"Duplicate function implementation.";case 2395:return"Individual declarations in merged declaration '{0}' must be all exported or all local.";case 2460:return"Type '{0}' has no property '{1}'.";case 2469:return"The '{0}' operator cannot be applied to type '{1}'.";case 2484:return"Export declaration conflicts with exported declaration of '{0}'.";case 2540:return"Cannot assign to '{0}' because it is a constant or a read-only property.";case 2541:return"The target of an assignment must be a variable or a property access.";case 2542:return"Index signature in type '{0}' only permits reading.";case 2554:return"Expected {0} arguments, but got {1}.";case 2555:return"Expected at least {0} arguments, but got {1}.";case 2558:return"Expected {0} type arguments, but got {1}.";case 2651:return"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.";case 2694:return"Namespace '{0}' has no exported member '{1}'.";case 6054:return"File '{0}' not found.";case 6188:return"Numeric separators are not allowed here.";case 6189:return"Multiple consecutive numeric separators are not permitted.";default:return""}}},function(e,t,r){"use strict";var n,i=this&&this.__extends||(n=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])},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),a=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 s,o=r(21),c=r(2),p=r(3),l=r(0),u=r(6),h=r(4),d=r(7),_=r(1);!function(e){e[e.WASM32=0]="WASM32",e[e.WASM64=1]="WASM64"}(s=t.Target||(t.Target={}));var y=function(){function e(){this.target=s.WASM32,this.noTreeShaking=!1,this.noAssert=!1,this.noMemory=!1,this.importMemory=!1,this.importTable=!1,this.memoryBase=0,this.sourceMap=!1,this.globalAliases=null,this.features=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?d.Type.usize64:d.Type.usize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isizeType",{get:function(){return this.target==s.WASM64?d.Type.isize64:d.Type.isize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"nativeSizeType",{get:function(){return this.target==s.WASM64?p.NativeType.I64:p.NativeType.I32},enumerable:!0,configurable:!0}),e.prototype.hasFeature=function(e){return 0!=(this.features&e)},e}();t.Options=y,function(e){e[e.NONE=0]="NONE",e[e.SIGN_EXTENSION=1]="SIGN_EXTENSION",e[e.MUTABLE_GLOBAL=2]="MUTABLE_GLOBAL"}(t.Feature||(t.Feature={})),function(e){e[e.NONE=0]="NONE",e[e.IMPLICIT=1]="IMPLICIT",e[e.EXPLICIT=2]="EXPLICIT"}(t.ConversionKind||(t.ConversionKind={})),function(e){e[e.NONE=0]="NONE",e[e.WRAP=1]="WRAP"}(t.WrapMode||(t.WrapMode={}));var m=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,t.diagnostics)||this;return n.outerFunction=null,n.currentEnum=null,n.currentType=d.Type.void,n.startFunctionBody=[],n.memorySegments=[],n.stringSegments=new Map,n.functionTable=[],n.argcVar=0,n.argcSet=0,n.f32ModInstance=null,n.f64ModInstance=null,n.f32PowInstance=null,n.f64PowInstance=null,n.program=t,r||(r=new y),n.options=r,n.memoryOffset=i64_new(max(r.memoryBase,8)),n.module=p.Module.create(),n}return i(t,e),t.compile=function(e,r){return void 0===r&&(r=null),new t(e,r).compile()},t.prototype.compile=function(){var e=this.options,t=this.module,r=this.program;r.initialize(e);var n=assert(r.elementsLookup.get("start"));assert(n.kind==l.ElementKind.FUNCTION_PROTOTYPE);var i=new l.Function(n,n.internalName,new d.Signature([],d.Type.void));this.startFunction=i,this.currentFunction=i;for(var a=r.sources,s=0,o=a.length;s"),!1;e.type=this.currentType}else assert(!1);if(e.is(l.CommonFlags.AMBIENT|l.CommonFlags.BUILTIN))return!0;var a=e.type.toNativeType(),s=e.isAny(l.CommonFlags.CONST)||e.is(l.CommonFlags.STATIC|l.CommonFlags.READONLY);if(e.is(l.CommonFlags.AMBIENT))return s||this.options.hasFeature(2)?(e.set(l.CommonFlags.MODULE_IMPORT),t.addGlobalImport(e.internalName,e.parent?e.parent.simpleName:"env",e.simpleName,a),e.set(l.CommonFlags.COMPILED),!0):(this.error(c.DiagnosticCode.Operation_not_supported,assert(r).range),!1);var o=!1;e.is(l.CommonFlags.INLINED)?n=this.compileInlineConstant(e,e.type,!0):r&&r.initializer?(n||(n=this.compileExpression(r.initializer,e.type,1,1)),p.getExpressionId(n)!=p.ExpressionId.Const&&(s?(n=this.precomputeExpressionRef(n),p.getExpressionId(n)!=p.ExpressionId.Const&&(this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,r.range),o=!0)):o=!0)):n=e.type.toNativeZero(t);var u=e.internalName;if(o)t.addGlobal(u,a,!0,e.type.toNativeZero(t)),this.startFunctionBody.push(t.createSetGlobal(u,n));else if(s){switch(p.getExpressionType(n)){case p.NativeType.I32:e.constantValueKind=1,e.constantIntegerValue=i64_new(p.getConstValueI32(n),0);break;case p.NativeType.I64:e.constantValueKind=1,e.constantIntegerValue=i64_new(p.getConstValueI64Low(n),p.getConstValueI64High(n));break;case p.NativeType.F32:e.constantValueKind=2,e.constantFloatValue=p.getConstValueF32(n);break;case p.NativeType.F64:e.constantValueKind=2,e.constantFloatValue=p.getConstValueF64(n);break;default:return assert(!1),!1}e.set(l.CommonFlags.INLINED),e.is(l.CommonFlags.MODULE_EXPORT)?(t.addGlobal(u,a,!1,n),t.addGlobalExport(u,g(e))):r&&r.isTopLevel&&t.addGlobal(u,a,!1,n)}else t.addGlobal(u,a,!s,n);return!0},t.prototype.compileEnumDeclaration=function(e){var t=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(t.kind==l.ElementKind.ENUM),this.compileEnum(t)?t:null},t.prototype.compileEnum=function(e){var t,r;if(e.is(l.CommonFlags.COMPILED))return!0;e.set(l.CommonFlags.COMPILED);var n=this.module;this.currentEnum=e;var i=null;if(e.members)try{for(var s=a(e.members.values()),o=s.next();!o.done;o=s.next()){var u=o.value;if(u.kind==l.ElementKind.ENUMVALUE){var h=!1,_=u,y=_.declaration;if(_.set(l.CommonFlags.COMPILED),_.is(l.CommonFlags.INLINED))e.declaration.isTopLevelExport&&n.addGlobal(_.internalName,p.NativeType.I32,!1,n.createI32(_.constantValue));else{var m=void 0;y.value?(m=this.compileExpression(y.value,d.Type.i32,1,0),p.getExpressionId(m)!=p.ExpressionId.Const&&(m=this.precomputeExpressionRef(m),p.getExpressionId(m)!=p.ExpressionId.Const&&(e.is(l.CommonFlags.CONST)&&this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range),h=!0))):null==i?m=n.createI32(0):i.is(l.CommonFlags.INLINED)?m=n.createI32(i.constantValue+1):(m=n.createBinary(p.BinaryOp.AddI32,n.createGetGlobal(i.internalName,p.NativeType.I32),n.createI32(1)),e.is(l.CommonFlags.CONST)&&this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range),h=!0),h?(n.addGlobal(_.internalName,p.NativeType.I32,!0,n.createI32(0)),this.startFunctionBody.push(n.createSetGlobal(_.internalName,m))):(n.addGlobal(_.internalName,p.NativeType.I32,!1,m),p.getExpressionType(m)==p.NativeType.I32?(_.constantValue=p.getConstValueI32(m),_.set(l.CommonFlags.INLINED)):(assert(!1),_.constantValue=0))}i=_,e.is(l.CommonFlags.MODULE_EXPORT)&&(u.is(l.CommonFlags.INLINED)||this.options.hasFeature(2)?n.addGlobalExport(u.internalName,g(u)):y&&this.warning(c.DiagnosticCode.Cannot_export_a_mutable_global,y.range))}}}catch(e){t={error:e}}finally{try{o&&!o.done&&(r=s.return)&&r.call(s)}finally{if(t)throw t.error}}return this.currentEnum=null,!0},t.prototype.compileFunctionDeclaration=function(e,t,r){void 0===r&&(r=null);var n=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(n.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.compileFunctionUsingTypeArguments(n,t,r,null,n.declaration.name)},t.prototype.compileFunctionUsingTypeArguments=function(e,t,r,n,i){var a=e.resolveUsingTypeArguments(t,r,i);return a?(a.outerScope=n,this.compileFunction(a)?a:null):null},t.prototype.ensureFunctionType=function(e,t,r){void 0===r&&(r=null);var n,i=e?e.length:0,a=0;if(r?((n=new Array(1+i))[0]=r.toNativeType(),a=1):n=new Array(i),e)for(var s=0;s=0)return e.functionTableIndex;var t=this.functionTable,r=t.length;return!e.is(l.CommonFlags.TRAMPOLINE)&&e.signature.requiredParameters=0?"case"+u.toString(10):"break")+"|"+a);var y=t.createBlock("case0|"+a,c,p.NativeType.None),m=!0,g=!0,T=!0,E=!0;for(h=0;h=0){v=r.flow;m&&v.set(1),g&&v.set(4096),T&&v.set(2),E&&v.set(16)}return y},t.prototype.compileThrowStatement=function(e){var t=this.currentFunction.flow;return t.set(2),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.startFunction&&e.parent&&e.parent.kind==h.NodeKind.SOURCE){for(var s=0;s");continue}m=this.currentType}var T=!1;if(_.is(l.CommonFlags.CONST))if(g)if(g=this.precomputeExpressionRef(g),p.getExpressionId(g)==p.ExpressionId.Const){var E=new l.Local(r,y,-1,m);switch(p.getExpressionType(g)){case p.NativeType.I32:E=E.withConstantIntegerValue(p.getConstValueI32(g),0);break;case p.NativeType.I64:E=E.withConstantIntegerValue(p.getConstValueI64Low(g),p.getConstValueI64High(g));break;case p.NativeType.F32:E=E.withConstantFloatValue(p.getConstValueF32(g));break;case p.NativeType.F64:E=E.withConstantFloatValue(p.getConstValueF64(g));break;default:return assert(!1),this.module.createUnreachable()}var f=n.flow.scopedLocals;if(f){if(f.has(y))return this.error(c.DiagnosticCode.Duplicate_identifier_0,_.name.range,y),this.module.createUnreachable()}else n.flow.scopedLocals=f=new Map;f.set(y,E),T=!0}else this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,_.range);else this.error(c.DiagnosticCode._const_declarations_must_be_initialized,_.range);if(!T){E=void 0;E=_.isAny(l.CommonFlags.LET|l.CommonFlags.CONST)||u.is(1024)?u.addScopedLocal(m,y,!1,_):n.addLocal(m,y,_),g?(o.push(this.compileAssignmentWithValue(_.name,g)),E.type.is(36)&&u.setLocalWrapped(E.index,!u.canOverflow(g,m))):E.type.is(36)&&u.setLocalWrapped(E.index,!0)}}return o.length?1==o.length?o[0]:this.module.createBlock(null,o,p.NativeType.None):0},t.prototype.compileVoidStatement=function(e){return this.compileExpression(e.expression,d.Type.void,2,0)},t.prototype.compileWhileStatement=function(e){var t=this.module,r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,d.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(l.CommonFlags.GENERIC|l.CommonFlags.GENERIC_CONTEXT)){var n=this.precomputeExpressionRef(r);if(p.getExpressionId(n)==p.ExpressionId.Const&&p.getExpressionType(n)==p.NativeType.I32){if(!p.getConstValueI32(n))return t.createNop()}else r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,d.Type.bool,0),this.currentType)}var i=this.currentFunction,a=i.enterBreakContext(),s=i.flow.enterBranchOrScope();i.flow=s;var o="break|"+a;s.breakLabel=o;var c="continue|"+a;s.continueLabel=c;var u=this.compileStatement(e.statement);i.flow=s.leaveBranchOrScope(),i.leaveBreakContext();var h=t.createBlock(o,[t.createLoop(c,t.createIf(r,s.isAny(13)?u:t.createBlock(null,[u,t.createBreak(c)],p.NativeType.None)))],p.NativeType.None);return h},t.prototype.compileInlineConstant=function(e,t,r){assert(e.is(l.CommonFlags.INLINED));var n=e.type;switch(!r&&n.is(4)&&t.is(4)&&n.size>i:0);case 5:case 6:case 10:var a=e.type.computeSmallIntegerMask(d.Type.i32);return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue)&a:0);case 2:case 7:return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 4:case 9:if(!e.program.options.isWasm64)return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 3:case 8:return 1==e.constantValueKind?this.module.createI64(i64_low(e.constantIntegerValue),i64_high(e.constantIntegerValue)):this.module.createI64(0);case 12:if(!e.is(l.CommonFlags.BUILTIN)||t!=d.Type.f32)return this.module.createF64(e.constantFloatValue);this.currentType=d.Type.f32;case 11:return this.module.createF32(e.constantFloatValue);default:return assert(!1),this.module.createUnreachable()}},t.prototype.compileExpression=function(e,t,r,n){var i;switch(this.currentType=t,e.kind){case h.NodeKind.ASSERTION:i=this.compileAssertionExpression(e,t);break;case h.NodeKind.BINARY:i=this.compileBinaryExpression(e,t);break;case h.NodeKind.CALL:i=this.compileCallExpression(e,t);break;case h.NodeKind.COMMA:i=this.compileCommaExpression(e,t);break;case h.NodeKind.ELEMENTACCESS:i=this.compileElementAccessExpression(e,t);break;case h.NodeKind.FUNCTION:i=this.compileFunctionExpression(e,t);break;case h.NodeKind.IDENTIFIER:case h.NodeKind.FALSE:case h.NodeKind.NULL:case h.NodeKind.THIS:case h.NodeKind.SUPER:case h.NodeKind.TRUE:i=this.compileIdentifierExpression(e,t,0==r);break;case h.NodeKind.INSTANCEOF:i=this.compileInstanceOfExpression(e,t);break;case h.NodeKind.LITERAL:i=this.compileLiteralExpression(e,t);break;case h.NodeKind.NEW:i=this.compileNewExpression(e,t);break;case h.NodeKind.PARENTHESIZED:i=this.compileParenthesizedExpression(e,t);break;case h.NodeKind.PROPERTYACCESS:i=this.compilePropertyAccessExpression(e,t,0==r);break;case h.NodeKind.TERNARY:i=this.compileTernaryExpression(e,t);break;case h.NodeKind.UNARYPOSTFIX:i=this.compileUnaryPostfixExpression(e,t);break;case h.NodeKind.UNARYPREFIX:i=this.compileUnaryPrefixExpression(e,t);break;default:assert(!1),i=this.module.createUnreachable()}var a=this.currentType;return 0!=r&&a!=t?(i=this.convertExpression(i,a,t,r,n,e),this.currentType=t):1==n&&(i=this.ensureSmallIntegerWrap(i,a)),this.options.sourceMap&&this.addDebugLocation(i,e.range),i},t.prototype.compileExpressionRetainType=function(e,t,r){return this.compileExpression(e,t==d.Type.void?d.Type.i32:t,0,r)},t.prototype.precomputeExpression=function(e,t,r,n){return this.precomputeExpressionRef(this.compileExpression(e,t,r,n))},t.prototype.precomputeExpressionRef=function(e){var t=this.module,r=this.currentType.toNativeType(),n=t.addTemporaryFunction(r,null,e);t.runPasses(["precompute"],n);var i=p.getFunctionBody(n);return t.removeTemporaryFunction(),i},t.prototype.convertExpression=function(e,t,r,n,i,a){assert(0!=n);var s=this.module;return 13==t.kind?(assert(13!=r.kind),this.error(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(p.UnaryOp.PromoteF32,e)):11==r.kind&&(e=s.createUnary(p.UnaryOp.DemoteF64,e)):r.is(4)?e=11==t.kind?r.is(1)?r.is(64)?s.createUnary(p.UnaryOp.TruncF32ToI64,e):s.createUnary(p.UnaryOp.TruncF32ToI32,e):r.is(64)?s.createUnary(p.UnaryOp.TruncF32ToU64,e):s.createUnary(p.UnaryOp.TruncF32ToU32,e):r.is(1)?r.is(64)?s.createUnary(p.UnaryOp.TruncF64ToI64,e):s.createUnary(p.UnaryOp.TruncF64ToI32,e):r.is(64)?s.createUnary(p.UnaryOp.TruncF64ToU64,e):s.createUnary(p.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)?p.UnaryOp.ConvertI64ToF32:p.UnaryOp.ConvertU64ToF32,e):s.createUnary(t.is(1)?p.UnaryOp.ConvertI32ToF32:p.UnaryOp.ConvertU32ToF32,e):t.is(64)?s.createUnary(t.is(1)?p.UnaryOp.ConvertI64ToF64:p.UnaryOp.ConvertU64ToF64,e):s.createUnary(t.is(1)?p.UnaryOp.ConvertI32ToF64:p.UnaryOp.ConvertU32ToF64,e):t.is(64)?r.is(64)||(e=s.createUnary(p.UnaryOp.WrapI64,e)):r.is(64)?(e=s.createUnary(r.is(1)?p.UnaryOp.ExtendI32:p.UnaryOp.ExtendU32,this.ensureSmallIntegerWrap(e,t)),i=0):t.is(32)&&t.size",n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,y),s.kind){case 0:case 1:case 2:o=h.createBinary(p.BinaryOp.GtI32,r,i);break;case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.GtI64:p.BinaryOp.GtI32,r,i);break;case 3:o=h.createBinary(p.BinaryOp.GtI64,r,i);break;case 5:case 6:case 7:case 10:o=h.createBinary(p.BinaryOp.GtU32,r,i);break;case 9:o=h.createBinary(this.options.isWasm64?p.BinaryOp.GtU64:p.BinaryOp.GtU32,r,i);break;case 8:o=h.createBinary(p.BinaryOp.GtU64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.GtF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.GtF64,r,i);break;default:assert(!1),o=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.LESSTHAN_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.LE)){o=this.compileBinaryOverload(v,_,r,y,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.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,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,y),s.kind){case 0:case 1:case 2:o=h.createBinary(p.BinaryOp.LeI32,r,i);break;case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.LeI64:p.BinaryOp.LeI32,r,i);break;case 3:o=h.createBinary(p.BinaryOp.LeI64,r,i);break;case 5:case 6:case 7:case 10:o=h.createBinary(p.BinaryOp.LeU32,r,i);break;case 9:o=h.createBinary(this.options.isWasm64?p.BinaryOp.LeU64:p.BinaryOp.LeU32,r,i);break;case 8:o=h.createBinary(p.BinaryOp.LeU64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.LeF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.LeF64,r,i);break;default:assert(!1),o=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.GREATERTHAN_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.GE)){o=this.compileBinaryOverload(v,_,r,y,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.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,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,y),s.kind){case 0:case 1:case 2:o=h.createBinary(p.BinaryOp.GeI32,r,i);break;case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.GeI64:p.BinaryOp.GeI32,r,i);break;case 3:o=h.createBinary(p.BinaryOp.GeI64,r,i);break;case 5:case 6:case 7:case 10:o=h.createBinary(p.BinaryOp.GeU32,r,i);break;case 9:o=h.createBinary(this.options.isWasm64?p.BinaryOp.GeU64:p.BinaryOp.GeU32,r,i);break;case 8:o=h.createBinary(p.BinaryOp.GeU64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.GeF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.GeF64,r,i);break;default:assert(!1),o=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.EQUALS_EQUALS_EQUALS:case u.Token.EQUALS_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,g==u.Token.EQUALS_EQUALS&&this.currentType.is(256))if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.EQ)){o=this.compileBinaryOverload(v,_,r,y,e);break}if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,u.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,y),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:o=h.createBinary(p.BinaryOp.EqI32,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.EqI64:p.BinaryOp.EqI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.EqI64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.EqF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.EqF64,r,i);break;default:assert(!1),o=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.EXCLAMATION_EQUALS_EQUALS:case u.Token.EXCLAMATION_EQUALS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,g==u.Token.EXCLAMATION_EQUALS&&this.currentType.is(256))if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.NE)){o=this.compileBinaryOverload(v,_,r,y,e);break}if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,u.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,h.createUnreachable();switch(r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,y),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:o=h.createBinary(p.BinaryOp.NeI32,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.NeI64:p.BinaryOp.NeI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.NeI64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.NeF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.NeF64,r,i);break;default:assert(!1),o=h.createUnreachable()}this.currentType=d.Type.bool;break;case u.Token.EQUALS:return this.compileAssignment(_,y,t);case u.Token.PLUS_EQUALS:m=!0;case u.Token.PLUS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.ADD)){o=this.compileBinaryOverload(v,_,r,y,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(m)i=this.compileExpression(y,n,1,0);else{if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.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,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,y)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=h.createBinary(p.BinaryOp.AddI32,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.AddI64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.AddF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.AddF64,r,i);break;default:assert(!1),o=h.createUnreachable()}break;case u.Token.MINUS_EQUALS:m=!0;case u.Token.MINUS:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.SUB)){o=this.compileBinaryOverload(v,_,r,y,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(m)i=this.compileExpression(y,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.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,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,y)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=h.createBinary(p.BinaryOp.SubI32,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.SubI64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.SubF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.SubF64,r,i);break;default:assert(!1),o=h.createUnreachable()}break;case u.Token.ASTERISK_EQUALS:m=!0;case u.Token.ASTERISK:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.MUL)){o=this.compileBinaryOverload(v,_,r,y,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(m)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(y,n,1,1);else{if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.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,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,y)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=h.createBinary(p.BinaryOp.MulI32,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.MulI64:p.BinaryOp.MulI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.MulI64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.MulF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.MulF64,r,i);break;default:assert(!1),o=h.createUnreachable()}break;case u.Token.ASTERISK_ASTERISK_EQUALS:m=!0;case u.Token.ASTERISK_ASTERISK:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.POW)){o=this.compileBinaryOverload(v,_,r,y,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}var T=void 0;if(11==this.currentType.kind){if(i=this.compileExpression(y,d.Type.f32,1,0),a=this.currentType,!(T=this.f32PowInstance)){if(!(E=this.program.elementsLookup.get("Mathf"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),o=h.createUnreachable();break}if(!(f=E.members?E.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.pow"),o=h.createUnreachable();break}assert(f.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f32PowInstance=T=f.resolve()}}else if(r=this.convertExpression(r,this.currentType,d.Type.f64,1,0,_),n=this.currentType,i=this.compileExpression(y,d.Type.f64,1,0),a=this.currentType,!(T=this.f64PowInstance)){if(!(E=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),o=h.createUnreachable();break}if(!(f=E.members?E.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.pow"),o=h.createUnreachable();break}assert(f.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f64PowInstance=T=f.resolve()}o=T&&this.compileFunction(T)?this.makeCallDirect(T,[r,i]):h.createUnreachable();break;case u.Token.SLASH_EQUALS:m=!0;case u.Token.SLASH:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.DIV)){o=this.compileBinaryOverload(v,_,r,y,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(m)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(y,n,1,1),a=this.currentType;else{if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.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,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,y)}switch(this.currentType.kind){case 0:case 1:case 2:o=h.createBinary(p.BinaryOp.DivI32,r,i);break;case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.DivI64:p.BinaryOp.DivI32,r,i);break;case 3:o=h.createBinary(p.BinaryOp.DivI64,r,i);break;case 5:case 6:case 10:case 7:o=h.createBinary(p.BinaryOp.DivU32,r,i);break;case 9:o=h.createBinary(this.options.isWasm64?p.BinaryOp.DivU64:p.BinaryOp.DivU32,r,i);break;case 8:o=h.createBinary(p.BinaryOp.DivU64,r,i);break;case 11:o=h.createBinary(p.BinaryOp.DivF32,r,i);break;case 12:o=h.createBinary(p.BinaryOp.DivF64,r,i);break;default:assert(!1),o=h.createUnreachable()}break;case u.Token.PERCENT_EQUALS:m=!0;case u.Token.PERCENT:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.REM)){o=this.compileBinaryOverload(v,_,r,y,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(m)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(y,n,1,1),a=this.currentType;else{if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.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,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,1,_),i=this.convertExpression(i,a,a=s,1,1,y)}switch(this.currentType.kind){case 0:case 1:case 2:o=h.createBinary(p.BinaryOp.RemI32,r,i);break;case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.RemI64:p.BinaryOp.RemI32,r,i);break;case 3:o=h.createBinary(p.BinaryOp.RemI64,r,i);break;case 5:case 6:case 10:case 7:o=h.createBinary(p.BinaryOp.RemU32,r,i);break;case 9:o=h.createBinary(this.options.isWasm64?p.BinaryOp.RemU64:p.BinaryOp.RemU32,r,i);break;case 8:o=h.createBinary(p.BinaryOp.RemU64,r,i);break;case 11:if(!(T=this.f32ModInstance)){if(!(E=this.program.elementsLookup.get("Mathf"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),o=h.createUnreachable();break}if(!(f=E.members?E.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.mod"),o=h.createUnreachable();break}assert(f.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f32ModInstance=T=f.resolve()}o=T&&this.compileFunction(T)?this.makeCallDirect(T,[r,i]):h.createUnreachable();break;case 12:if(!(T=this.f64ModInstance)){var E,f;if(!(E=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),o=h.createUnreachable();break}if(!(f=E.members?E.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.mod"),o=h.createUnreachable();break}assert(f.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f64ModInstance=T=f.resolve()}o=T&&this.compileFunction(T)?this.makeCallDirect(T,[r,i]):h.createUnreachable();break;default:assert(!1),o=h.createUnreachable()}break;case u.Token.LESSTHAN_LESSTHAN_EQUALS:m=!0;case u.Token.LESSTHAN_LESSTHAN:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_SHL)){o=this.compileBinaryOverload(v,_,r,y,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(i=this.compileExpression(y,n,1,0),a=this.currentType,this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=h.createBinary(p.BinaryOp.ShlI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.ShlI64,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.ShlI64:p.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,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),o=h.createUnreachable()}break;case u.Token.GREATERTHAN_GREATERTHAN_EQUALS:m=!0;case u.Token.GREATERTHAN_GREATERTHAN:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_SHR)){o=this.compileBinaryOverload(v,_,r,y,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(y,n,1,1),a=this.currentType,this.currentType.kind){case 0:case 1:case 2:o=h.createBinary(p.BinaryOp.ShrI32,r,i);break;case 3:o=h.createBinary(p.BinaryOp.ShrI64,r,i);break;case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.ShrI64:p.BinaryOp.ShrI32,r,i);break;case 5:case 6:case 10:case 7:o=h.createBinary(p.BinaryOp.ShrU32,r,i);break;case 8:o=h.createBinary(p.BinaryOp.ShrU64,r,i);break;case 9:o=h.createBinary(this.options.isWasm64?p.BinaryOp.ShrU64:p.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,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),o=h.createUnreachable()}break;case u.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:m=!0;case u.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_SHR_U)){o=this.compileBinaryOverload(v,_,r,y,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(y,n,1,0),a=this.currentType,this.currentType.kind){case 5:case 6:case 10:o=h.createBinary(p.BinaryOp.ShrU32,r,i);case 0:case 1:case 2:case 7:o=h.createBinary(p.BinaryOp.ShrU32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.ShrU64,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.ShrU64:p.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,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),o=h.createUnreachable()}break;case u.Token.AMPERSAND_EQUALS:m=!0;case u.Token.AMPERSAND:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_AND)){o=this.compileBinaryOverload(v,_,r,y,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(m)i=this.compileExpression(y,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.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,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,y)}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 10:case 7:o=h.createBinary(p.BinaryOp.AndI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.AndI64,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.AndI64:p.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,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),o=h.createUnreachable()}break;case u.Token.BAR_EQUALS:m=!0;case u.Token.BAR:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_OR)){o=this.compileBinaryOverload(v,_,r,y,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(m)i=this.compileExpression(y,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.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,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,y)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:o=h.createBinary(p.BinaryOp.OrI32,r,i);break;case 2:case 7:o=h.createBinary(p.BinaryOp.OrI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.OrI64,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.OrI64:p.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,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),o=h.createUnreachable()}break;case u.Token.CARET_EQUALS:m=!0;case u.Token.CARET:if(r=this.compileExpressionRetainType(_,t.intType,0),n=this.currentType,this.currentType.is(256)){var I,v;if(I=n.classReference)if(v=I.lookupOverload(l.OperatorKind.BITWISE_XOR)){o=this.compileBinaryOverload(v,_,r,y,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(m)i=this.compileExpression(y,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(y,n,0),a=this.currentType,!(s=d.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,h.createUnreachable();r=this.convertExpression(r,n,n=s,1,0,_),i=this.convertExpression(i,a,a=s,1,0,y)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:o=h.createBinary(p.BinaryOp.XorI32,r,i);break;case 2:case 7:o=h.createBinary(p.BinaryOp.XorI32,r,i);break;case 3:case 8:o=h.createBinary(p.BinaryOp.XorI64,r,i);break;case 9:case 4:o=h.createBinary(this.options.isWasm64?p.BinaryOp.XorI64:p.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,u.operatorTokenToString(e.operator),this.currentType.toString()),h.createUnreachable();default:assert(!1),o=h.createUnreachable()}break;case u.Token.AMPERSAND_AMPERSAND:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,i=this.compileExpression(y,n,1,0),a=this.currentType,o=h.cloneExpression(r,!0,0))this.makeIsTrueish(r,this.currentType),o=h.createIf(this.makeIsTrueish(r,this.currentType),i,o);else{var A=this.currentFunction.flow,N=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));o=h.createIf(this.makeIsTrueish(h.createTeeLocal(N.index,r),this.currentType),i,h.createGetLocal(assert(N).index,this.currentType.toNativeType()))}break;case u.Token.BAR_BAR:if(r=this.compileExpressionRetainType(_,t,0),n=this.currentType,i=this.compileExpression(y,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,N=this.currentFunction.getAndFreeTempLocal(this.currentType,!A.canOverflow(r,this.currentType));o=h.createIf(this.makeIsTrueish(h.createTeeLocal(N.index,r),this.currentType),h.createGetLocal(assert(N).index,this.currentType.toNativeType()),i)}break;default:assert(!1),o=this.module.createUnreachable()}return m?this.compileAssignmentWithValue(_,o,t!=d.Type.void):o},t.prototype.compileUnaryOverload=function(e,t,r,n){var i,a=0;return e.is(l.CommonFlags.INSTANCE)?(a=r,i=[]):i=[t],this.compileCallDirect(e,i,n,a,e.hasDecorator(l.DecoratorFlags.INLINE))},t.prototype.compileBinaryOverload=function(e,t,r,n,i){var a,s=0;if(e.is(l.CommonFlags.INSTANCE)){var o=assert(e.parent);assert(o.kind==l.ElementKind.CLASS),s=r,a=[n]}else a=[t,n];return this.compileCallDirect(e,a,i,s,e.hasDecorator(l.DecoratorFlags.INLINE))},t.prototype.compileAssignment=function(e,t,r){var n,i=this.program,a=this.currentFunction,s=i.resolveExpression(e,a);if(!s)return this.module.createUnreachable();switch(s.kind){case l.ElementKind.GLOBAL:if(!this.compileGlobal(s))return this.module.createUnreachable();assert(s.type!=d.Type.void);case l.ElementKind.LOCAL:case l.ElementKind.FIELD:n=s.type;break;case l.ElementKind.PROPERTY:var o=s.setterPrototype;if(o){var p=o.resolve();if(!p)return this.module.createUnreachable();assert(1==p.signature.parameterTypes.length),n=p.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 l.ElementKind.CLASS:if(i.resolvedElementExpression){var u=a.flow.is(2048),h=s.lookupOverload(l.OperatorKind.INDEXED_SET,u);if(!h)return s.lookupOverload(l.OperatorKind.INDEXED_GET,u)?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!=d.Type.void);var _=this.compileExpression(t,n,1,0);return this.compileAssignmentWithValue(e,_,r!=d.Type.void)},t.prototype.compileAssignmentWithValue=function(e,t,r){void 0===r&&(r=!1);var n=this.module,i=this.program.resolveExpression(e,this.currentFunction);if(!i)return n.createUnreachable();switch(i.kind){case l.ElementKind.LOCAL:var a=i.type;if(assert(a!=d.Type.void),this.currentType=r?a:d.Type.void,i.is(l.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 l.ElementKind.GLOBAL:if(!this.compileGlobal(i))return n.createUnreachable();a=i.type;if(assert(a!=d.Type.void),this.currentType=r?a:d.Type.void,i.is(l.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(),p=i.internalName;return n.createBlock(null,[n.createSetGlobal(p,t),n.createGetGlobal(p,o)],o)}return n.createSetGlobal(i.internalName,t);case l.ElementKind.FIELD:var u=i.declaration;if(i.is(l.CommonFlags.READONLY)&&!this.currentFunction.is(l.CommonFlags.CONSTRUCTOR)&&null!=u&&null==u.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 h=assert(this.program.resolvedThisExpression),_=this.compileExpressionRetainType(h,this.options.usizeType,0);a=i.type;this.currentType=r?a:d.Type.void;o=a.toNativeType();if(10==a.kind&&(t=this.ensureSmallIntegerWrap(t,a)),r){s=(S=this.currentFunction).flow;var y=S.getAndFreeTempLocal(a,!s.canOverflow(t,a)).index;return n.createBlock(null,[n.createSetLocal(y,t),n.createStore(a.byteSize,_,n.createGetLocal(y,o),o,i.memoryOffset),n.createGetLocal(y,o)],o)}return n.createStore(a.byteSize,_,t,o,i.memoryOffset);case l.ElementKind.PROPERTY:var m=i.setterPrototype;if(m){var g=m.resolve();if(!g)return n.createUnreachable();if(!r){if(g.is(l.CommonFlags.INSTANCE)){h=assert(this.program.resolvedThisExpression),_=this.compileExpressionRetainType(h,this.options.usizeType,0);return this.makeCallDirect(g,[_,t])}return this.makeCallDirect(g,[t])}var T=i.getterPrototype;assert(null!=T);var E=T.resolve();if(!E)return n.createUnreachable();var f=(k=E.signature.returnType).toNativeType();if(g.is(l.CommonFlags.INSTANCE)){h=assert(this.program.resolvedThisExpression),_=this.compileExpressionRetainType(h,this.options.usizeType,0),y=this.currentFunction.getAndFreeTempLocal(k,!1).index;return n.createBlock(null,[this.makeCallDirect(g,[n.createTeeLocal(y,_),t]),this.makeCallDirect(E,[n.createGetLocal(y,f)])],f)}return n.createBlock(null,[this.makeCallDirect(g,[t]),this.makeCallDirect(E)],f)}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 l.ElementKind.CLASS:var I=this.program.resolvedElementExpression;if(I){var v=this.currentFunction.flow.is(2048),A=i.lookupOverload(l.OperatorKind.INDEXED_GET,v);if(!A)return this.error(c.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,i.internalName),n.createUnreachable();var N=i.lookupOverload(l.OperatorKind.INDEXED_SET,v);if(!N)return this.error(c.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,i.internalName),this.currentType=r?A.signature.returnType:d.Type.void,n.createUnreachable();var C=i.type,O=(h=assert(this.program.resolvedThisExpression),_=this.compileExpressionRetainType(h,this.options.usizeType,0),this.compileExpression(I,d.Type.i32,1,0));if(r){var S,L=(S=this.currentFunction).getTempLocal(C,!1),b=S.getAndFreeTempLocal(this.currentType,!1),k=A.signature.returnType;return this.currentFunction.freeTempLocal(L),n.createBlock(null,[this.makeCallDirect(N,[n.createTeeLocal(L.index,_),n.createTeeLocal(b.index,O),t]),this.makeCallDirect(A,[n.createGetLocal(L.index,L.type.toNativeType()),n.createGetLocal(b.index,b.type.toNativeType())])],k.toNativeType())}return this.makeCallDirect(N,[_,O,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.program.resolveExpression(e.expression,a);if(!s)return i.createUnreachable();switch(s.kind){case l.ElementKind.FUNCTION_PROTOTYPE:var o=s,u=e.typeArguments;if(o.is(l.CommonFlags.AMBIENT|l.CommonFlags.BUILTIN))return this.compileCallExpressionBuiltin(o,e,t);var _=null;if(u){if(!o.is(l.CommonFlags.GENERIC))return this.error(c.DiagnosticCode.Type_0_is_not_generic,e.expression.range,o.internalName),i.createUnreachable();_=o.resolveUsingTypeArguments(u,this.currentFunction.flow.contextualTypeArguments,e)}else{if(o.is(l.CommonFlags.GENERIC)){for(var y=new Map,m=assert(o.declaration.typeParameters),g=m.length,T=0;Ts&&!i)||(this.error(c.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,s.toString(),t.toString()),!1)},t.prototype.compileCallDirect=function(e,t,r,n,i){void 0===n&&(n=0),void 0===i&&(i=!1);var a=t.length,s=e.signature;if(!this.checkCallSignature(s,a,0!=n,r))return this.module.createUnreachable();if(i)return assert(!e.is(l.CommonFlags.TRAMPOLINE)),this.compileCallInlineUnchecked(e,t,r,n);var o=n?a+1:a,c=new Array(o),p=0;n&&(c[0]=n,p=1);for(var u=s.parameterTypes,h=0;h=i);var o=this.module;if(!this.compileFunction(e))return o.createUnreachable();var c=e.signature.returnType,p=e.is(l.CommonFlags.MODULE_IMPORT);if(r=a),this.ensureFunctionType(e.parameterTypes,e.returnType,e.thisType);var c=this.module;if(n=0),this.currentType=T,this.module.createGetLocal(E,T.toNativeType());case l.ElementKind.GLOBAL:if(!this.compileGlobal(g))return this.module.createUnreachable();var f=g.type;return assert(f!=d.Type.void),g.is(l.CommonFlags.INLINED)?this.compileInlineConstant(g,t,r):(this.currentType=f,this.module.createGetGlobal(g.internalName,f.toNativeType()));case l.ElementKind.ENUMVALUE:return g.is(l.CommonFlags.COMPILED)?(this.currentType=d.Type.i32,g.is(l.CommonFlags.INLINED)?this.module.createI32(g.constantValue):this.module.createGetGlobal(g.internalName,p.NativeType.I32)):(this.error(c.DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,e.range),this.currentType=d.Type.i32,this.module.createUnreachable());case l.ElementKind.FUNCTION_PROTOTYPE:var I=g.resolve(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.program.resolveType(e.isType);return this.currentType=d.Type.bool,a?i.is(512)&&!a.is(512)?i.nonNullableType.isAssignableTo(a)?r.createBinary(i.is(64)?p.BinaryOp.NeI64:p.BinaryOp.NeI32,n,i.toNativeZero(r)):r.createI32(0):r.createI32(i.isAssignableTo(a,!0)?1:0):r.createUnreachable()},t.prototype.compileLiteralExpression=function(e,t,r){void 0===r&&(r=!1);var n=this.module;switch(e.literalKind){case h.LiteralKind.ARRAY:assert(!r);var i=t.classReference;return i&&i.prototype==this.program.arrayPrototype?this.compileArrayLiteral(assert(i.typeArguments)[0],e.elementExpressions,e):(this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable());case h.LiteralKind.FLOAT:var a=e.value;return r&&(a=-a),t==d.Type.f32?n.createF32(a):(this.currentType=d.Type.f64,n.createF64(a));case h.LiteralKind.INTEGER:var s=e.value;switch(r&&(s=i64_sub(i64_new(0),s)),t.kind){case 0:if(i64_is_i8(s))return n.createI32(i64_low(s));break;case 5:if(i64_is_u8(s))return n.createI32(i64_low(s));break;case 1:if(i64_is_i16(s))return n.createI32(i64_low(s));break;case 6:if(i64_is_u16(s))return n.createI32(i64_low(s));break;case 2:if(i64_is_i32(s))return n.createI32(i64_low(s));break;case 7:if(i64_is_u32(s))return n.createI32(i64_low(s));break;case 10:if(i64_is_bool(s))return n.createI32(i64_low(s));break;case 4:if(!this.options.isWasm64){if(i64_is_i32(s))return n.createI32(i64_low(s));break}return n.createI64(i64_low(s),i64_high(s));case 9:if(!this.options.isWasm64){if(i64_is_u32(s))return n.createI32(i64_low(s));break}return n.createI64(i64_low(s),i64_high(s));case 3:case 8:return n.createI64(i64_low(s),i64_high(s));case 11:if(i64_is_f32(s))return n.createF32(i64_to_f32(s));break;case 12:if(i64_is_f64(s))return n.createF64(i64_to_f64(s));break;case 13:break;default:return assert(!1),n.createUnreachable()}return i64_is_i32(s)?(this.currentType=d.Type.i32,n.createI32(i64_low(s))):i64_is_u32(s)?(this.currentType=d.Type.u32,n.createI32(i64_low(s))):(this.currentType=d.Type.i64,n.createI64(i64_low(s),i64_high(s)));case h.LiteralKind.STRING:return assert(!r),this.compileStaticString(e.value)}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.currentType=t,n.createUnreachable()},t.prototype.compileStaticString=function(e){var t=this.module,r=this.options,n=this.stringSegments,i=n.get(e);if(!i){var a=e.length,s=new Uint8Array(4+2*a);s[0]=255&a,s[1]=a>>>8&255,s[2]=a>>>16&255,s[3]=a>>>24&255;for(var o=0;o>>8&255;i=this.addMemorySegment(s,r.usizeType.byteSize),n.set(e,i)}var c=i.offset,p=this.program.typesLookup.get("string");return this.currentType=p||r.usizeType,r.isWasm64?t.createI64(i64_low(c),i64_high(c)):(assert(i64_is_i32(c)),t.createI32(i64_low(c)))},t.prototype.compileArrayLiteral=function(e,t,r){var n=!0,i=this.module,a=assert(this.program.arrayPrototype);if(!a||a.kind!=l.ElementKind.CLASS_PROTOTYPE)return i.createUnreachable();var s=a.resolve([e]);if(!s)return i.createUnreachable();var o=s.type,u=t.length;if(u){var h=e.toNativeType(),d=void 0,y=void 0;switch(h){case p.NativeType.I32:d=changetype(new Int32Array(u)),y=4*u;break;case p.NativeType.I64:d=changetype(new Array(u)),y=8*u;break;case p.NativeType.F32:d=changetype(new Float32Array(u)),y=4*u;break;case p.NativeType.F64:d=changetype(new Float64Array(u)),y=8*u;break;default:return assert(!1),i.createUnreachable()}for(var m=new Array(u),g=void 0,T=0;T=0);var h=this.compileExpressionRetainType(u,this.options.usizeType,0);return this.currentType=a.type,i.createLoad(a.type.byteSize,a.type.is(5),h,a.type.toNativeType(),a.memoryOffset);case l.ElementKind.PROPERTY:var _=a.getterPrototype;if(_){var y=_.resolve(null);if(!y)return i.createUnreachable();var m=y.signature;if(!this.checkCallSignature(m,0,y.is(l.CommonFlags.INSTANCE),e))return i.createUnreachable();var g=0!=(y.decoratorFlags&l.DecoratorFlags.INLINE);if(y.is(l.CommonFlags.INSTANCE)){o=assert(y.parent);assert(o.kind==l.ElementKind.CLASS);u=assert(n.resolvedThisExpression),h=this.compileExpressionRetainType(u,this.options.usizeType,0);return this.currentType=m.returnType,this.compileCallDirect(y,[],e,h,g)}return this.currentType=m.returnType,this.compileCallDirect(y,[],e,0,g)}return this.error(c.DiagnosticCode.Property_0_does_not_exist_on_type_1,e.range,a.simpleName,a.parent.toString()),i.createUnreachable()}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable()},t.prototype.compileTernaryExpression=function(e,t){var r,n,i,a,s=e.ifThen,o=e.ifElse,u=this.currentFunction,h=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,d.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(l.CommonFlags.GENERIC|l.CommonFlags.GENERIC_CONTEXT)){var _=this.precomputeExpressionRef(h);if(p.getExpressionId(_)==p.ExpressionId.Const&&p.getExpressionType(_)==p.NativeType.I32)return p.getConstValueI32(_)?this.compileExpressionRetainType(s,t,0):this.compileExpressionRetainType(o,t,0);h=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,d.Type.bool,0),this.currentType)}if(u.is(l.CommonFlags.CONSTRUCTOR)){var y=u.flow;y=y.enterBranchOrScope(),u.flow=y,r=this.compileExpressionRetainType(s,t,0),i=this.currentType;var m=y.is(16);y=y.leaveBranchOrScope(),u.flow=y,y=y.enterBranchOrScope(),u.flow=y,n=this.compileExpressionRetainType(o,t,0),a=this.currentType;var g=y.is(16);y=y.leaveBranchOrScope(),u.flow=y,m&&g&&y.set(16)}else r=this.compileExpressionRetainType(s,t,0),i=this.currentType,n=this.compileExpressionRetainType(o,t,0),a=this.currentType;var T=d.Type.commonCompatible(i,a,!1);return T?(r=this.convertExpression(r,i,T,1,0,s),n=this.convertExpression(n,a,T,1,0,o),this.currentType=T,this.module.createIf(h,r,n)):(this.error(c.DiagnosticCode.Type_0_is_not_assignable_to_type_1,e.range,i.toString(),a.toString()),this.currentType=t,this.module.createUnreachable())},t.prototype.compileUnaryPostfixExpression=function(e,t){var r=this.module,n=this.currentFunction,i=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0);if(p.getExpressionId(i)==p.ExpressionId.Unreachable)return i;var a,s,o,l=this.currentType;switch(e.operator){case u.Token.PLUS_PLUS:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(l.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=p.BinaryOp.AddI32,s=p.NativeType.I32,o=r.createI32(1);break;case 9:case 4:a=(h=this.options).isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,s=h.nativeSizeType,o=l.toNativeOne(r);break;case 3:case 8:a=p.BinaryOp.AddI64,s=p.NativeType.I64,o=r.createI64(1);break;case 11:a=p.BinaryOp.AddF32,s=p.NativeType.F32,o=r.createF32(1);break;case 12:a=p.BinaryOp.AddF64,s=p.NativeType.F64,o=r.createF64(1);break;default:return assert(!1),r.createUnreachable()}break;case u.Token.MINUS_MINUS:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(l.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=p.BinaryOp.SubI32,s=p.NativeType.I32,o=r.createI32(1);break;case 9:case 4:var h;a=(h=this.options).isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,s=h.nativeSizeType,o=l.toNativeOne(r);break;case 3:case 8:a=p.BinaryOp.SubI64,s=p.NativeType.I64,o=r.createI64(1);break;case 11:a=p.BinaryOp.SubF32,s=p.NativeType.F32,o=r.createF32(1);break;case 12:a=p.BinaryOp.SubF64,s=p.NativeType.F64,o=r.createF64(1);break;default:return assert(!1),r.createUnreachable()}break;default:return assert(!1),r.createUnreachable()}if(t==d.Type.void)return this.compileAssignmentWithValue(e.operand,r.createBinary(a,i,o),!1);var _=n.getTempLocal(l,!1),y=this.compileAssignmentWithValue(e.operand,r.createBinary(a,this.module.createGetLocal(_.index,s),o),!1);this.currentType=assert(_).type,n.freeTempLocal(_);var m=_.index;return r.createBlock(null,[r.createSetLocal(m,i),y,r.createGetLocal(m,s)],s)},t.prototype.compileUnaryPrefixExpression=function(e,t){var r,n=this.module,i=!1;switch(e.operator){case u.Token.PLUS:if(r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.PLUS)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}break;case u.Token.MINUS:if(e.operand.kind==h.NodeKind.LITERAL&&(e.operand.literalKind==h.LiteralKind.INTEGER||e.operand.literalKind==h.LiteralKind.FLOAT)){r=this.compileLiteralExpression(e.operand,t,!0),this.options.sourceMap&&this.addDebugLocation(r,e.range);break}if(r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.MINUS)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(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(p.BinaryOp.SubI32,n.createI32(0),r);break;case 9:case 4:r=n.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,this.currentType.toNativeZero(n),r);break;case 3:case 8:r=n.createBinary(p.BinaryOp.SubI64,n.createI64(0),r);break;case 11:r=n.createUnary(p.UnaryOp.NegF32,r);break;case 12:r=n.createUnary(p.UnaryOp.NegF64,r);break;default:assert(!1),r=n.createUnreachable()}break;case u.Token.PLUS_PLUS:if(i=!0,r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.PREFIX_INC)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(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(p.BinaryOp.AddI32,r,this.module.createI32(1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(p.BinaryOp.AddI64,r,n.createI64(1));break;case 11:r=n.createBinary(p.BinaryOp.AddF32,r,n.createF32(1));break;case 12:r=n.createBinary(p.BinaryOp.AddF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case u.Token.MINUS_MINUS:if(i=!0,r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.PREFIX_DEC)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(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(p.BinaryOp.SubI32,r,n.createI32(1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(p.BinaryOp.SubI64,r,n.createI64(1));break;case 11:r=n.createBinary(p.BinaryOp.SubF32,r,n.createF32(1));break;case 12:r=n.createBinary(p.BinaryOp.SubF64,r,n.createF64(1));break;default:assert(!1),r=n.createUnreachable()}break;case u.Token.EXCLAMATION:if(r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,0),this.currentType.is(256))if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.NOT)){r=this.compileUnaryOverload(s,e.operand,r,e);break}r=this.makeIsFalseish(r,this.currentType),this.currentType=d.Type.bool;break;case u.Token.TILDE:if(r=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t.is(8)?d.Type.i64:t,0,0),this.currentType.is(256)){var a,s;if(a=this.currentType.classReference)if(s=a.lookupOverload(l.OperatorKind.BITWISE_NOT)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(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(p.BinaryOp.XorI32,r,n.createI32(-1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?p.BinaryOp.XorI64:p.BinaryOp.XorI32,r,this.currentType.toNativeNegOne(n));break;case 3:case 8:r=n.createBinary(p.BinaryOp.XorI64,r,n.createI64(-1,-1));break;default:assert(!1),r=n.createUnreachable()}break;case u.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!=d.Type.void):r},t.prototype.ensureSmallIntegerWrap=function(e,t){var r=this.module,n=this.currentFunction.flow;switch(t.kind){case 0:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(p.UnaryOp.ExtendI8ToI32,e):r.createBinary(p.BinaryOp.ShrI32,r.createBinary(p.BinaryOp.ShlI32,e,r.createI32(24)),r.createI32(24)));break;case 1:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(p.UnaryOp.ExtendI16ToI32,e):r.createBinary(p.BinaryOp.ShrI32,r.createBinary(p.BinaryOp.ShlI32,e,r.createI32(16)),r.createI32(16)));break;case 5:n.canOverflow(e,t)&&(e=r.createBinary(p.BinaryOp.AndI32,e,r.createI32(255)));break;case 6:n.canOverflow(e,t)&&(e=r.createBinary(p.BinaryOp.AndI32,e,r.createI32(65535)));break;case 10:n.canOverflow(e,t)&&(e=r.createBinary(p.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(p.UnaryOp.EqzI32,e);case 3:case 8:return r.createUnary(p.UnaryOp.EqzI64,e);case 9:case 4:return r.createUnary(64==t.size?p.UnaryOp.EqzI64:p.UnaryOp.EqzI32,e);case 11:return r.createBinary(p.BinaryOp.EqF32,e,r.createF32(0));case 12:return r.createBinary(p.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(p.BinaryOp.NeI64,e,r.createI64(0));case 9:case 4:return 64==t.size?r.createBinary(p.BinaryOp.NeI64,e,r.createI64(0)):e;case 11:return r.createBinary(p.BinaryOp.NeF32,e,r.createF32(0));case 12:return r.createBinary(p.BinaryOp.NeF64,e,r.createF64(0));default:return assert(!1),r.createI32(0)}},t.prototype.makeAllocate=function(e,t){var r,n,i=this.module,s=this.currentFunction,c=this.options.nativeSizeType,p=s.getTempLocal(e.type,!1),u=new Array;if(u.push(i.createSetLocal(p.index,o.compileAllocate(this,e,t))),e.members)try{for(var h=a(e.members.values()),d=h.next();!d.done;d=h.next()){var _=d.value;if(_.kind==l.ElementKind.FIELD){var y=_,m=y.type,g=m.toNativeType(),T=y.prototype.declaration;if(assert(!y.isAny(l.CommonFlags.CONST)),T.initializer)u.push(i.createStore(m.byteSize,i.createGetLocal(p.index,c),this.compileExpression(T.initializer,m,1,0),g,y.memoryOffset));else{var E=y.prototype.declaration.parameterIndex;u.push(i.createStore(m.byteSize,i.createGetLocal(p.index,c),E>=0?i.createGetLocal(1+E,g):m.toNativeZero(i),g,y.memoryOffset))}}}}catch(e){r={error:e}}finally{try{d&&!d.done&&(n=h.return)&&n.call(h)}finally{if(r)throw r.error}}return u.push(i.createGetLocal(p.index,c)),s.freeTempLocal(p),this.currentType=e.type,i.createBlock(null,u,c)},t.prototype.makeConditionalAllocate=function(e,t){var r=this.module,n=this.options.nativeSizeType;return this.currentType=e.type,r.createIf(n==p.NativeType.I64?r.createBinary(p.BinaryOp.NeI64,r.createGetLocal(0,p.NativeType.I64),r.createI64(0)):r.createGetLocal(0,p.NativeType.I32),r.createGetLocal(0,n),r.createTeeLocal(0,this.makeAllocate(e,t)))},t.prototype.addDebugLocation=function(e,t){var r=this.currentFunction,n=t.source;n.debugInfoIndex<0&&(n.debugInfoIndex=this.module.addDebugInfoFile(n.normalizedPath)),t.debugInfoRef=e,r.debugLocations.push(t)},t}(c.DiagnosticEmitter);function g(e,t){switch(void 0===t&&(t=e.simpleName),e.kind){case l.ElementKind.FUNCTION:return(r=e.parent||e.prototype.parent)?g(r)+(e.is(l.CommonFlags.INSTANCE)?l.INSTANCE_DELIMITER:l.STATIC_DELIMITER)+t:t;case l.ElementKind.FIELD:case l.ElementKind.ENUMVALUE:return g(r=assert(e.parent))+(e.is(l.CommonFlags.INSTANCE)?l.INSTANCE_DELIMITER:l.STATIC_DELIMITER)+t;case l.ElementKind.CLASS:return(r=e.prototype.parent)?g(r)+l.STATIC_DELIMITER+t:t;default:var r;return(r=e.parent)?g(r)+l.STATIC_DELIMITER+t:t}}t.Compiler=m},function(e,t,r){"use strict";var n,i=this&&this.__extends||(n=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])},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0});var a=r(0),s=r(6),o=r(2),c=r(1),p=r(4),l=a.LIBRARY_PREFIX+"builtins.ts",u=function(e){function t(){var t=e.call(this)||this;return t.backlog=new Array,t.seenlog=new Set,t.donelog=new Set,t.onComment=null,t.tryParseSignatureIsSignature=!1,t.parseParametersThis=null,t.program=new a.Program(t.diagnostics),t}return i(t,e),t.prototype.parseFile=function(e,t,r){var n=c.normalizePath(t),i=p.mangleInternalPath(n);if(!this.donelog.has(i)){this.donelog.add(i),this.seenlog.add(i);var o=new p.Source(n,e,r?p.SourceKind.ENTRY:t.startsWith(a.LIBRARY_PREFIX)&&t.indexOf(a.PATH_DELIMITER,a.LIBRARY_PREFIX.length)<0?p.SourceKind.LIBRARY:p.SourceKind.DEFAULT),u=this.program;u.sources.push(o),o.normalizedPath==l&&o.set(a.CommonFlags.BUILTIN);var h=new s.Tokenizer(o,u.diagnostics);h.onComment=this.onComment,o.tokenizer=h;for(var d=o.statements;!h.skip(s.Token.ENDOFFILE);){var _=this.parseTopLevelStatement(h);_&&(_.parent=o,d.push(_))}h.finish()}},t.prototype.parseTopLevelStatement=function(e,t){void 0===t&&(t=null);for(var r=a.CommonFlags.NONE,n=-1,i=null;e.skip(s.Token.AT);){n<0&&(n=e.tokenPos);var c=this.parseDecorator(e);c?(i||(i=[]),i.push(c)):this.skipStatement(e)}r|=e.source.flags&a.CommonFlags.BUILTIN;var p=0,l=0;e.skip(s.Token.EXPORT)&&(e.skip(s.Token.DEFAULT)&&this.error(o.DiagnosticCode.Operation_not_supported,e.range()),n<0&&(n=e.tokenPos),r|=a.CommonFlags.EXPORT,p=e.tokenPos,l=e.pos);var u=null!=t&&t.is(a.CommonFlags.AMBIENT);e.skip(s.Token.DECLARE)?(n<0&&(n=e.tokenPos),u&&this.error(o.DiagnosticCode.A_declare_modifier_cannot_be_used_in_an_already_ambient_context,e.range()),r|=a.CommonFlags.DECLARE|a.CommonFlags.AMBIENT):u&&(r|=a.CommonFlags.AMBIENT);var h=null,d=e.peek();switch(n<0&&(n=e.nextTokenPos),d){case s.Token.CONST:if(e.next(),r|=a.CommonFlags.CONST,e.skip(s.Token.ENUM)){h=this.parseEnum(e,r,i,n);break}h=this.parseVariable(e,r,i,n),i=null;break;case s.Token.LET:r|=a.CommonFlags.LET;case s.Token.VAR:e.next(),h=this.parseVariable(e,r,i,n),i=null;break;case s.Token.ENUM:e.next(),h=this.parseEnum(e,r,i,n),i=null;break;case s.Token.FUNCTION:e.next(),h=this.parseFunction(e,r,i,n),i=null;break;case s.Token.ABSTRACT:var _=e.mark();if(e.next(),!e.skip(s.Token.CLASS)){e.reset(_),h=this.parseStatement(e,!0);break}e.discard(_),r|=a.CommonFlags.ABSTRACT;case s.Token.CLASS:case s.Token.INTERFACE:e.next(),h=this.parseClassOrInterface(e,r,i,n),i=null;break;case s.Token.NAMESPACE:_=e.mark();e.next(),e.peek(!1,s.IdentifierHandling.PREFER)==s.Token.IDENTIFIER?(e.discard(_),h=this.parseNamespace(e,r,i,n),i=null):(e.reset(_),h=this.parseStatement(e,!0));break;case s.Token.IMPORT:e.next(),h=(r|=a.CommonFlags.IMPORT)&a.CommonFlags.EXPORT?this.parseExportImport(e,n):this.parseImport(e);break;case s.Token.TYPE:_=e.mark();e.next(),e.peek(!1,s.IdentifierHandling.PREFER)==s.Token.IDENTIFIER?(e.discard(_),h=this.parseTypeDeclaration(e,r,i,n),i=null):(e.reset(_),h=this.parseStatement(e,!0));break;default:r&a.CommonFlags.EXPORT?h=this.parseExport(e,r,n):(l&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(p,l),"export"),t||(h=this.parseStatement(e,!0)))}if(i)for(var y=0,m=i.length;y"),null}if(e.skip(s.Token.BAR)){if(!e.skip(s.Token.NULL))return r||this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"null"),null;_=!0}n=p.Node.createType(h,d,_,e.range(a,e.pos))}for(;e.skip(s.Token.OPENBRACKET);){var m=e.tokenPos;if(!e.skip(s.Token.CLOSEBRACKET))return r||this.error(o.DiagnosticCode._0_expected,e.range(),"]"),null;var g=e.range(m,e.pos);_=!1;if(e.skip(s.Token.BAR)){if(!e.skip(s.Token.NULL))return r||this.error(o.DiagnosticCode._0_expected,e.range(),"null"),null;_=!0}if(n=p.Node.createType(p.Node.createIdentifierExpression("Array",g),[n],_,e.range(a,e.pos)),_)break}return n},t.prototype.tryParseSignature=function(e){var t,r=e.mark(),n=e.tokenPos,i=null,a=null,c=!1;if(e.skip(s.Token.CLOSEPAREN))c=!0,e.discard(r),i=[];else{c=!1;do{var l=p.ParameterKind.DEFAULT;if(e.skip(s.Token.DOT_DOT_DOT)&&(c=!0,e.discard(r),l=p.ParameterKind.REST),e.skip(s.Token.THIS)){if(!e.skip(s.Token.COLON))return e.reset(r),this.tryParseSignatureIsSignature=!1,null;c=!0,e.discard(r);var u=this.parseType(e,!1);if(!u)return null;if(u.kind!=p.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,u.range),this.tryParseSignatureIsSignature=!0,null;a=u}else{if(!e.skipIdentifier())return c?this.error(o.DiagnosticCode.Identifier_expected,e.range()):e.reset(r),this.tryParseSignatureIsSignature=c,null;var h=p.Node.createIdentifierExpression(e.readIdentifier(),e.range(e.tokenPos,e.pos));if(e.skip(s.Token.QUESTION)&&(c=!0,e.discard(r),l==p.ParameterKind.REST?this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,e.range()):l=p.ParameterKind.OPTIONAL),e.skip(s.Token.COLON)){c=!0,e.discard(r);var d=this.parseType(e);if(!d)return this.tryParseSignatureIsSignature=c,null;var _=new p.ParameterNode;_.parameterKind=l,_.name=h,_.type=d,i?i.push(_):i=[_]}else c&&this.error(o.DiagnosticCode.Type_expected,e.range())}}while(e.skip(s.Token.COMMA));if(!e.skip(s.Token.CLOSEPAREN))return this.error(o.DiagnosticCode._0_expected,e.range(),")"),this.tryParseSignatureIsSignature=c,null}return e.skip(s.Token.EQUALS_GREATERTHAN)?(c=!0,e.discard(r),(t=this.parseType(e))?(this.tryParseSignatureIsSignature=!0,p.Node.createSignature(i||[],t,a,!1,e.range(n,e.pos))):(this.tryParseSignatureIsSignature=c,null)):(c?this.error(o.DiagnosticCode._0_expected,e.range(),"=>"):e.reset(r),this.tryParseSignatureIsSignature=c,null)},t.prototype.parseDecorator=function(e){var t=e.tokenPos;if(e.skipIdentifier()){for(var r=e.readIdentifier(),n=p.Node.createIdentifierExpression(r,e.range(t,e.pos));e.skip(s.Token.DOT);){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;r=e.readIdentifier(),n=p.Node.createPropertyAccessExpression(n,p.Node.createIdentifierExpression(r,e.range()),e.range(t,e.pos))}var i=void 0;if(!e.skip(s.Token.OPENPAREN))return p.Node.createDecorator(n,null,e.range(t,e.pos));if(i=this.parseArguments(e))return p.Node.createDecorator(n,i,e.range(t,e.pos))}else this.error(o.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseVariable=function(e,t,r,n){var i=new Array;do{var a=this.parseVariableDeclaration(e,t,r);if(!a)return null;i.push(a)}while(e.skip(s.Token.COMMA));var o=p.Node.createVariableStatement(i,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),o},t.prototype.parseVariableDeclaration=function(e,t,r){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var n=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),i=t,c=null;e.skip(s.Token.COLON)&&(c=this.parseType(e));var l=null;if(e.skip(s.Token.EQUALS)){if(i&a.CommonFlags.AMBIENT&&this.error(o.DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,e.range()),!(l=this.parseExpression(e,1)))return null}else i&a.CommonFlags.CONST?i&a.CommonFlags.AMBIENT||this.error(o.DiagnosticCode._const_declarations_must_be_initialized,n.range):c||this.error(o.DiagnosticCode.Type_expected,e.range(e.pos));return p.Node.createVariableDeclaration(n,c,l,r,i,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 i=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.next()!=s.Token.OPENBRACE)return this.error(o.DiagnosticCode._0_expected,e.range(),"{"),null;for(var c=new Array;!e.skip(s.Token.CLOSEBRACE);){var l=this.parseEnumValue(e,a.CommonFlags.NONE);if(!l)return null;if(c.push(l),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEBRACE))break;return this.error(o.DiagnosticCode._0_expected,e.range(),"}"),null}}var u=p.Node.createEnumDeclaration(i,c,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),u},t.prototype.parseEnumValue=function(e,t){if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var r=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),n=null;return e.skip(s.Token.EQUALS)&&!(n=this.parseExpression(e,1))?null:p.Node.createEnumValueDeclaration(r,n,t,s.Range.join(r.range,e.range()))},t.prototype.parseReturn=function(e){var t=null;if(e.peek(!0)!=s.Token.SEMICOLON&&e.nextToken!=s.Token.CLOSEBRACE&&!e.nextTokenOnNewLine&&!(t=this.parseExpression(e)))return null;var r=p.Node.createReturnStatement(t,e.range());return e.skip(s.Token.SEMICOLON),r},t.prototype.parseTypeParameters=function(e){for(var t=new Array;!e.skip(s.Token.GREATERTHAN);){var r=this.parseTypeParameter(e);if(!r)return null;if(t.push(r),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.GREATERTHAN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),">"),null}}return 0===t.length&&this.error(o.DiagnosticCode.Type_parameter_list_cannot_be_empty,e.range()),t},t.prototype.parseTypeParameter=function(e){if(e.next()==s.Token.IDENTIFIER){var t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(s.Token.EXTENDS)){var n=this.parseType(e);if(!n)return null;if(n.kind!=p.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,n.range),null;r=n}return p.Node.createTypeParameter(t,r,s.Range.join(t.range,e.range()))}return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseParameters=function(e,t){void 0===t&&(t=!1);var r=new Array,n=null,i=!1,a=!1,c=null;if(this.parseParametersThis=null,e.skip(s.Token.THIS)){if(!e.skip(s.Token.COLON))return this.error(o.DiagnosticCode._0_expected,e.range(),":"),null;if(!(c=this.parseType(e)))return null;if(c.kind==p.NodeKind.TYPE?this.parseParametersThis=c:this.error(o.DiagnosticCode.Operation_not_supported,c.range),!e.skip(s.Token.COMMA))return e.skip(s.Token.CLOSEPAREN)?r:(this.error(o.DiagnosticCode._0_expected,e.range(),")"),null)}for(;!e.skip(s.Token.CLOSEPAREN);){var l=this.parseParameter(e,t);if(!l)return null;switch(n&&!a&&(this.error(o.DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,n.name.range),a=!0),l.parameterKind){default:i&&this.error(o.DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,l.name.range);break;case p.ParameterKind.OPTIONAL:i=!0;break;case p.ParameterKind.REST:n=l}if(r.push(l),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEPAREN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),")"),null}}return r},t.prototype.parseParameter=function(e,t){void 0===t&&(t=!1);var r=!1,n=!1,i=null,c=a.CommonFlags.NONE;if(t&&(e.skip(s.Token.PUBLIC)?(i=e.range(),c|=a.CommonFlags.PUBLIC):e.skip(s.Token.PROTECTED)?(i=e.range(),c|=a.CommonFlags.PROTECTED):e.skip(s.Token.PRIVATE)&&(i=e.range(),c|=a.CommonFlags.PRIVATE),e.peek()==s.Token.READONLY)){var l=e.mark();e.next(),e.peek()!=s.Token.COLON?(e.discard(l),i||(i=e.range()),c|=a.CommonFlags.READONLY):e.reset(l)}if(e.skip(s.Token.DOT_DOT_DOT)&&(c?this.error(o.DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,e.range()):i=e.range(),r=!0),e.skipIdentifier()){r||(i=e.range());var u=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),h=null;if((n=e.skip(s.Token.QUESTION))&&r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_be_optional,u.range),e.skip(s.Token.COLON)){if(!(h=this.parseType(e)))return null}else h=p.Node.createOmittedType(e.range(e.pos));var d=null;if(e.skip(s.Token.EQUALS)&&(r&&this.error(o.DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,u.range),n?this.error(o.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,u.range):n=!0,!(d=this.parseExpression(e,1))))return null;var _=p.Node.createParameter(u,h,d,r?p.ParameterKind.REST:n?p.ParameterKind.OPTIONAL:p.ParameterKind.DEFAULT,s.Range.join(i,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 i=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),c=-1,l=null;if(e.skip(s.Token.LESSTHAN)){if(c=e.tokenPos,!(l=this.parseTypeParameters(e)))return null;t|=a.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&a.CommonFlags.SET);d&&(1!=u.length&&this.error(o.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,i.range),u.length&&u[0].initializer&&this.error(o.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,i.range)),t&a.CommonFlags.GET&&u.length&&this.error(o.DiagnosticCode.A_get_accessor_cannot_have_parameters,i.range);var _=null;if(e.skip(s.Token.COLON)&&!(_=this.parseType(e,!0,d)))return null;_||(_=p.Node.createOmittedType(e.range(e.pos)),d||this.error(o.DiagnosticCode.Type_expected,_.range));var y=p.Node.createSignature(u,_,h,!1,e.range(c,e.pos)),m=null;if(e.skip(s.Token.OPENBRACE)){if(t&a.CommonFlags.AMBIENT&&this.error(o.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,e.range()),!(m=this.parseBlockStatement(e,!1)))return null}else t&a.CommonFlags.AMBIENT||this.error(o.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,e.range(e.pos));var g=p.Node.createFunctionDeclaration(i,l,y,m,r,t,e.range(n,e.pos));return e.skip(s.Token.SEMICOLON),g},t.prototype.parseFunctionExpression=function(e){var t,r=e.tokenPos,n=!1;if(e.token==s.Token.FUNCTION){if(t=e.skipIdentifier()?p.Node.createIdentifierExpression(e.readIdentifier(),e.range()):p.Node.createEmptyIdentifierExpression(e.range(e.pos)),!e.skip(s.Token.OPENPAREN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"("),null}else n=!0,assert(e.token==s.Token.OPENPAREN),t=p.Node.createEmptyIdentifierExpression(e.range(e.tokenPos));var i=e.pos,a=this.parseParameters(e);return a?this.parseFunctionExpressionCommon(e,t,a,n,r,i):null},t.prototype.parseFunctionExpressionCommon=function(e,t,r,n,i,c){void 0===i&&(i=-1),void 0===c&&(c=-1),i<0&&(i=t.range.start),c<0&&(c=i);var l=null;if(e.skip(s.Token.COLON)){if(!(l=this.parseType(e)))return null}else l=p.Node.createOmittedType(e.range(e.pos)),this.error(o.DiagnosticCode.Type_expected,l.range);if(n&&!e.skip(s.Token.EQUALS_GREATERTHAN))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"=>"),null;var u,h=p.Node.createSignature(r,l,null,!1,e.range(c,e.pos));if(n)u=this.parseStatement(e,!1);else{if(!e.skip(s.Token.OPENBRACE))return this.error(o.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;u=this.parseBlockStatement(e,!1)}if(!u)return null;var d=p.Node.createFunctionDeclaration(t,null,h,u,null,n?a.CommonFlags.ARROW:a.CommonFlags.NONE,e.range(i,e.pos));return p.Node.createFunctionExpression(d)},t.prototype.parseClassOrInterface=function(e,t,r,n){var i=e.token==s.Token.INTERFACE;if(!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var c,l=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(s.Token.LESSTHAN)){if(!(c=this.parseTypeParameters(e)))return null;t|=a.CommonFlags.GENERIC}else c=[];var u=null;if(e.skip(s.Token.EXTENDS)){var h=this.parseType(e);if(!h)return null;if(h.kind!=p.NodeKind.TYPE)return this.error(o.DiagnosticCode.Operation_not_supported,h.range),null;u=h}var d=null;if(e.skip(s.Token.IMPLEMENTS)){i&&this.error(o.DiagnosticCode.Interface_declaration_cannot_have_implements_clause,e.range());do{var _=this.parseType(e);if(!_)return null;i||(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 y,m=new Array;if(i?(assert(!d),y=p.Node.createInterfaceDeclaration(l,c,u,m,r,t,e.range(n,e.pos))):y=p.Node.createClassDeclaration(l,c,u,d,m,r,t,e.range(n,e.pos)),!e.skip(s.Token.CLOSEBRACE))do{var g=this.parseClassMember(e,y);if(!g)return null;g.parent=y,m.push(g)}while(!e.skip(s.Token.CLOSEBRACE));return y},t.prototype.parseClassMember=function(e,t){for(var r=e.pos,n=new Array;e.skip(s.Token.AT);){var i=this.parseDecorator(e);if(!i)break;n.push(i)}var c=t.flags&a.CommonFlags.AMBIENT;e.skip(s.Token.PUBLIC)?c|=a.CommonFlags.PUBLIC:e.skip(s.Token.PRIVATE)?c|=a.CommonFlags.PRIVATE:e.skip(s.Token.PROTECTED)&&(c|=a.CommonFlags.PROTECTED);var l=0,u=0,h=0,d=0;e.skip(s.Token.STATIC)?(c|=a.CommonFlags.STATIC,l=e.tokenPos,u=e.pos):(e.skip(s.Token.ABSTRACT)?(c|=a.CommonFlags.ABSTRACT|a.CommonFlags.INSTANCE,h=e.tokenPos,d=e.pos):c|=a.CommonFlags.INSTANCE,t.flags&a.CommonFlags.GENERIC&&(c|=a.CommonFlags.GENERIC_CONTEXT));var _=0,y=0;e.skip(s.Token.READONLY)&&(c|=a.CommonFlags.READONLY,_=e.tokenPos,y=e.pos);var m=e.mark(),g=!1,T=!1,E=!1,f=0,I=0;if(e.skip(s.Token.GET)?e.peek(!0,s.IdentifierHandling.PREFER)!=s.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(m):(c|=a.CommonFlags.GET,T=!0,f=e.tokenPos,I=e.pos,c&a.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(_,y),"readonly")):e.skip(s.Token.SET)?e.peek(!0,s.IdentifierHandling.PREFER)!=s.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(m):(c|=a.CommonFlags.SET|a.CommonFlags.SET,E=!0,f=e.tokenPos,I=e.pos,c&a.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(_,y),"readonly")):e.skip(s.Token.CONSTRUCTOR)&&(g=!0,(c|=a.CommonFlags.CONSTRUCTOR)&a.CommonFlags.STATIC&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(l,u),"static"),c&a.CommonFlags.ABSTRACT&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(h,d),"abstract"),c&a.CommonFlags.READONLY&&this.error(o.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(_,y),"readonly")),!g&&!e.skipIdentifier())return this.error(o.DiagnosticCode.Identifier_expected,e.range()),null;var v=g?p.Node.createConstructorExpression(e.range()):p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),A=null;if(e.skip(s.Token.LESSTHAN)){var N=e.tokenPos;if(!(A=this.parseTypeParameters(e)))return null;g?this.error(o.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,e.range(N,e.pos)):T||E?this.error(o.DiagnosticCode.An_accessor_cannot_have_type_parameters,e.range(N,e.pos)):c|=a.CommonFlags.GENERIC}if(e.skip(s.Token.OPENPAREN)){var C=e.tokenPos,O=this.parseParameters(e,g);if(!O)return null;var S=this.parseParametersThis;if(g)for(var L=0,b=O.length;L"),null):null;case s.Token.IDENTIFIER:return p.Node.createIdentifierExpression(e.readIdentifier(),e.range(r,e.pos));case s.Token.THIS:return p.Node.createThisExpression(e.range(r,e.pos));case s.Token.CONSTRUCTOR:return p.Node.createConstructorExpression(e.range(r,e.pos));case s.Token.SUPER:return p.Node.createSuperExpression(e.range(r,e.pos));case s.Token.STRINGLITERAL:return p.Node.createStringLiteralExpression(e.readString(),e.range(r,e.pos));case s.Token.INTEGERLITERAL:return p.Node.createIntegerLiteralExpression(e.readInteger(),e.range(r,e.pos));case s.Token.FLOATLITERAL:return p.Node.createFloatLiteralExpression(e.readFloat(),e.range(r,e.pos));case s.Token.SLASH:var d=e.readRegexpPattern();return e.skip(s.Token.SLASH)?p.Node.createRegexpLiteralExpression(d,e.readRegexpFlags(),e.range(r,e.pos)):(this.error(o.DiagnosticCode._0_expected,e.range(),"/"),null);case s.Token.FUNCTION:return this.parseFunctionExpression(e);default:return this.error(o.DiagnosticCode.Expression_expected,e.range()),null}},t.prototype.tryParseTypeArgumentsBeforeArguments=function(e){var t=e.mark();if(!e.skip(s.Token.LESSTHAN))return null;var r=new Array;do{if(e.peek()===s.Token.GREATERTHAN)break;var n=this.parseType(e,!0,!0);if(!n)return e.reset(t),null;r.push(n)}while(e.skip(s.Token.COMMA));return e.skip(s.Token.GREATERTHAN)&&e.skip(s.Token.OPENPAREN)?r:(e.reset(t),null)},t.prototype.parseArguments=function(e){for(var t=new Array;!e.skip(s.Token.CLOSEPAREN);){var r=this.parseExpression(e,1);if(!r)return null;if(t.push(r),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEPAREN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),")"),null}}return t},t.prototype.parseExpression=function(e,t){void 0===t&&(t=0);var r=this.parseExpressionStart(e);if(!r)return null;for(var n,i,a=r.range.start;(n=this.tryParseTypeArgumentsBeforeArguments(e))||e.skip(s.Token.OPENPAREN);){var c=this.parseArguments(e);if(!c)return null;r=p.Node.createCallExpression(r,n,c,e.range(a,e.pos))}for(var l,u=null;(l=h(i=e.peek()))>=t;)switch(e.next(),i){case s.Token.AS:var _=this.parseType(e);if(!_)return null;r=p.Node.createAssertionExpression(p.AssertionKind.AS,r,_,e.range(a,e.pos));break;case s.Token.INSTANCEOF:var y=this.parseType(e);if(!y)return null;r=p.Node.createInstanceOfExpression(r,y,e.range(a,e.pos));break;case s.Token.OPENBRACKET:if(!(u=this.parseExpression(e)))return null;if(!e.skip(s.Token.CLOSEBRACKET))return this.error(o.DiagnosticCode._0_expected,e.range(),"]"),null;r=p.Node.createElementAccessExpression(r,u,e.range(a,e.pos));break;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:r.kind!=p.NodeKind.IDENTIFIER&&r.kind!=p.NodeKind.ELEMENTACCESS&&r.kind!=p.NodeKind.PROPERTYACCESS&&this.error(o.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,r.range),r=p.Node.createUnaryPostfixExpression(i,r,e.range(a,e.pos));break;case s.Token.QUESTION:var m=this.parseExpression(e);if(!m)return null;if(!e.skip(s.Token.COLON))return this.error(o.DiagnosticCode._0_expected,e.range(),":"),null;var g=this.parseExpression(e,t>0?1:0);if(!g)return null;r=p.Node.createTernaryExpression(r,m,g,e.range(a,e.pos));break;case s.Token.COMMA:var T=[r];do{if(!(r=this.parseExpression(e,1)))return null;T.push(r)}while(e.skip(s.Token.COMMA));r=p.Node.createCommaExpression(T,e.range(a,e.pos));break;default:if(!(u=this.parseExpression(e,d(i)?l:l+1)))return null;if(i==s.Token.DOT)if(u.kind==p.NodeKind.IDENTIFIER)r=p.Node.createPropertyAccessExpression(r,u,e.range(a,e.pos));else{if(u.kind!=p.NodeKind.CALL)return this.error(o.DiagnosticCode.Identifier_expected,u.range),null;var E=u;if(E.expression.kind!=p.NodeKind.IDENTIFIER)return this.error(o.DiagnosticCode.Identifier_expected,E.expression.range),null;E.expression=p.Node.createPropertyAccessExpression(r,E.expression,e.range(a,e.pos)),r=E}else r=p.Node.createBinaryExpression(i,r,u,e.range(a,e.pos))}return r},t.prototype.skipStatement=function(e){for(e.peek(!0),e.nextTokenOnNewLine&&e.next();;){var t=e.peek(!0);if(t==s.Token.ENDOFFILE||t==s.Token.SEMICOLON){e.next();break}if(e.nextTokenOnNewLine)break;switch(e.next()){case s.Token.IDENTIFIER:e.readIdentifier();break;case s.Token.STRINGLITERAL:e.readString();break;case s.Token.INTEGERLITERAL:e.readInteger();break;case s.Token.FLOATLITERAL:e.readFloat()}}},t}(o.DiagnosticEmitter);function h(e){switch(e){case s.Token.COMMA:return 0;case s.Token.EQUALS:case s.Token.PLUS_EQUALS:case s.Token.MINUS_EQUALS:case s.Token.ASTERISK_ASTERISK_EQUALS:case s.Token.ASTERISK_EQUALS:case s.Token.SLASH_EQUALS:case s.Token.PERCENT_EQUALS:case s.Token.LESSTHAN_LESSTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.AMPERSAND_EQUALS:case s.Token.CARET_EQUALS:case s.Token.BAR_EQUALS:return 3;case s.Token.QUESTION:return 4;case s.Token.BAR_BAR:return 5;case s.Token.AMPERSAND_AMPERSAND:return 6;case s.Token.BAR:return 7;case s.Token.CARET:return 8;case s.Token.AMPERSAND:return 9;case s.Token.EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS:case s.Token.EQUALS_EQUALS_EQUALS:case s.Token.EXCLAMATION_EQUALS_EQUALS:return 10;case s.Token.AS:case s.Token.IN:case s.Token.INSTANCEOF:case s.Token.LESSTHAN:case s.Token.GREATERTHAN:case s.Token.LESSTHAN_EQUALS:case s.Token.GREATERTHAN_EQUALS:return 11;case s.Token.LESSTHAN_LESSTHAN:case s.Token.GREATERTHAN_GREATERTHAN:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:return 12;case s.Token.PLUS:case s.Token.MINUS:return 13;case s.Token.ASTERISK:case s.Token.SLASH:case s.Token.PERCENT:return 14;case s.Token.ASTERISK_ASTERISK:return 15;case s.Token.PLUS_PLUS:case s.Token.MINUS_MINUS:return 17;case s.Token.DOT:case s.Token.NEW:case s.Token.OPENBRACKET:return 19;default:return-1}}function d(e){switch(e){case s.Token.EQUALS:case s.Token.PLUS_EQUALS:case s.Token.MINUS_EQUALS:case s.Token.ASTERISK_ASTERISK_EQUALS:case s.Token.ASTERISK_EQUALS:case s.Token.SLASH_EQUALS:case s.Token.PERCENT_EQUALS:case s.Token.LESSTHAN_LESSTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case s.Token.AMPERSAND_EQUALS:case s.Token.CARET_EQUALS:case s.Token.BAR_EQUALS:case s.Token.QUESTION:case s.Token.ASTERISK_ASTERISK:return!0;default:return!1}}t.Parser=u,function(e){e[e.COMMA=0]="COMMA",e[e.SPREAD=1]="SPREAD",e[e.YIELD=2]="YIELD",e[e.ASSIGNMENT=3]="ASSIGNMENT",e[e.CONDITIONAL=4]="CONDITIONAL",e[e.LOGICAL_OR=5]="LOGICAL_OR",e[e.LOGICAL_AND=6]="LOGICAL_AND",e[e.BITWISE_OR=7]="BITWISE_OR",e[e.BITWISE_XOR=8]="BITWISE_XOR",e[e.BITWISE_AND=9]="BITWISE_AND",e[e.EQUALITY=10]="EQUALITY",e[e.RELATIONAL=11]="RELATIONAL",e[e.SHIFT=12]="SHIFT",e[e.ADDITIVE=13]="ADDITIVE",e[e.MULTIPLICATIVE=14]="MULTIPLICATIVE",e[e.EXPONENTIATED=15]="EXPONENTIATED",e[e.UNARY_PREFIX=16]="UNARY_PREFIX",e[e.UNARY_POSTFIX=17]="UNARY_POSTFIX",e[e.CALL=18]="CALL",e[e.MEMBERACCESS=19]="MEMBERACCESS",e[e.GROUPING=20]="GROUPING",e[e.INVALID=-1]="INVALID"}(t.Precedence||(t.Precedence={}))},function(e,t,r){"use strict";var n,i=this&&this.__extends||(n=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])},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),a=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}}}},s=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 o=r(0),c=r(1),p=function(){function e(e,t){void 0===t&&(t=!1),this.todo=[],this.seen=new Set,this.program=e,this.includePrivate}return e.prototype.walk=function(){var e,t;try{for(var r=a(this.program.moduleLevelExports.values()),n=r.next();!n.done;n=r.next()){var i=n.value;this.visitElement(i)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}for(var s=this.todo;00&&this.push(", "),this.push("$"),this.push(i.toString(10)),this.push(": "),this.push(a(n.getFunctionParamType(e,i)));this.push("): "),this.push(a(n.getFunctionResultType(e))),this.push(" "),n.getExpressionId(r)!=n.ExpressionId.Block&&this.push("{\n"),this.decompileExpression(r),n.getExpressionId(r)!=n.ExpressionId.Block&&this.push("\n}\n"),++this.functionId},e.prototype.decompileExpression=function(e){var t,r,i,s,o=n.getExpressionId(e),c=n.getExpressionType(e);switch(o){case n.ExpressionId.Block:for(null!=(r=n.getBlockName(e))&&(this.push(r),this.push(": ")),this.push("{\n"),s=n.getBlockChildCount(e),i=0;i("),this.push(n.getLoadOffset(e).toString(10)),this.push(" + "),this.decompileExpression(n.getLoadPtr(e)),void this.push(")");case n.ExpressionId.Store:return this.push("store<"),this.push(a(c)),this.push(">("),this.push(n.getStoreOffset(e).toString(10)),this.push(" + "),this.decompileExpression(n.getStorePtr(e)),this.push(", "),this.decompileExpression(n.getStoreValue(e)),void this.push(")");case n.ExpressionId.Const:switch(c){case n.NativeType.I32:return void this.push(n.getConstValueI32(e).toString(10));case n.NativeType.I64:return void this.push(i64_to_string(i64_new(n.getConstValueI64Low(e),n.getConstValueI64High(e))));case n.NativeType.F32:return void this.push(n.getConstValueF32(e).toString(10));case n.NativeType.F64:return void this.push(n.getConstValueF64(e).toString(10))}break;case n.ExpressionId.Unary:switch(n.getUnaryOp(e)){case n.UnaryOp.ClzI32:return this.push("clz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CtzI32:return this.push("ctz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.PopcntI32:return this.push("popcnt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NegF32:case n.UnaryOp.NegF64:return this.push("-"),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.AbsF32:return this.push("abs("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CeilF32:return this.push("ceil("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.FloorF32:return this.push("floor("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.TruncF32:return this.push("trunc("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NearestF32:return this.push("nearest("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.SqrtF32:return this.push("sqrt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.EqzI32:case n.UnaryOp.EqzI64:return this.push("!"),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ClzI64:return this.push("clz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CtzI64:return this.push("ctz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.PopcntI64:return this.push("popcnt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.AbsF64:return this.push("abs("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CeilF64:return this.push("ceil("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.FloorF64:return this.push("floor("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.TruncF64:return this.push("trunc("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NearestF64:return this.push("nearest("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.SqrtF64:return this.push("sqrt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ExtendI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ExtendU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.WrapI64:case n.UnaryOp.TruncF32ToI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToI64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToU64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToI64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToU64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ReinterpretF32:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ReinterpretF64:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ConvertI32ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI32ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU32ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU32ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI64ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI64ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU64ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU64ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.PromoteF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.DemoteF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ReinterpretI32:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ReinterpretI64:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")")}break;case n.ExpressionId.Binary:switch(n.getBinaryOp(e)){case n.BinaryOp.AddI32:case n.BinaryOp.AddI64:case n.BinaryOp.AddF32:case n.BinaryOp.AddF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" + "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.SubI32:case n.BinaryOp.SubI64:case n.BinaryOp.SubF32:case n.BinaryOp.SubF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" - "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.MulI32:case n.BinaryOp.MulI64:case n.BinaryOp.MulF32:case n.BinaryOp.MulF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" * "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivI32:case n.BinaryOp.DivI64:case n.BinaryOp.DivF32:case n.BinaryOp.DivF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivU32:return this.push("("),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RemI32:case n.BinaryOp.RemI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" % "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RemU32:return this.push("("),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.AndI32:case n.BinaryOp.AndI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" & "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.OrI32:case n.BinaryOp.OrI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" | "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.XorI32:case n.BinaryOp.XorI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" ^ "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShlI32:case n.BinaryOp.ShlI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" << "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShrU32:case n.BinaryOp.ShrU64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >>> "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShrI32:case n.BinaryOp.ShrI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >> "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RotlI32:return this.push("rotl("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RotrI32:return this.push("rotr("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.EqI32:case n.BinaryOp.EqI64:case n.BinaryOp.EqF32:case n.BinaryOp.EqF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" == "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.NeI32:case n.BinaryOp.NeI64:case n.BinaryOp.NeF32:case n.BinaryOp.NeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" != "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LtI32:case n.BinaryOp.LtI64:case n.BinaryOp.LtF32:case n.BinaryOp.LtF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LtU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeI32:case n.BinaryOp.LeI64:case n.BinaryOp.LeF32:case n.BinaryOp.LeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtI32:case n.BinaryOp.GtI64:case n.BinaryOp.GtF32:case n.BinaryOp.GtF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeI32:case n.BinaryOp.GeI64:case n.BinaryOp.GeF32:case n.BinaryOp.GeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RemU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" % "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RotlI64:return this.push("rotl("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RotrI64:return this.push("rotr("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.LtU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.CopysignF32:return this.push("copysign("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MinF32:return this.push("min("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MaxF32:return this.push("max("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.CopysignF64:return this.push("copysign("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MinF64:return this.push("min("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MaxF64:return this.push("max("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")")}return;case n.ExpressionId.Select:return this.push("select<"),this.push(a(c)),this.push(">("),this.decompileExpression(n.getSelectThen(e)),this.push(", "),this.decompileExpression(n.getSelectElse(e)),this.push(", "),this.decompileExpression(n.getSelectCondition(e)),void this.push(")");case n.ExpressionId.Drop:return this.decompileExpression(n.getDropValue(e)),void this.push(";\n");case n.ExpressionId.Return:return void((t=n.getReturnValue(e))?(this.push("return "),this.decompileExpression(t),this.push(";\n")):this.push("return;\n"));case n.ExpressionId.Host:switch(n.getHostOp(e)){case n.HostOp.CurrentMemory:return void this.push("current_memory()");case n.HostOp.GrowMemory:return this.push("grow_memory("),this.decompileExpression(n.getHostOperand(e,0)),void this.push(")")}break;case n.ExpressionId.Nop:return void this.push(";\n");case n.ExpressionId.Unreachable:return void this.push("unreachable()");case n.ExpressionId.AtomicCmpxchg:case n.ExpressionId.AtomicRMW:case n.ExpressionId.AtomicWait:case n.ExpressionId.AtomicWake:}throw new Error("not implemented")},e.prototype.push=function(e){this.text.push(e)},e.prototype.finish=function(){var e=this.text.join("");return this.text=[],e},e}();function a(e){switch(e){case n.NativeType.None:return"void";case n.NativeType.I32:return"i32";case n.NativeType.I64:return"i64";case n.NativeType.F32:return"f32";case n.NativeType.F64:return"f64";case n.NativeType.Unreachable:throw new Error("unreachable type");case n.NativeType.Auto:throw new Error("auto type");default:throw new Error("unexpected type")}}t.Decompiler=i},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(9),i=r(12),a=r(11),s=r(2);t.formatDiagnostic=s.formatDiagnosticMessage;var o=r(10),c=r(0);t.LIBRARY_PREFIX=c.LIBRARY_PREFIX,t.parseFile=function(e,t,r,n){return void 0===r&&(r=!1),void 0===n&&(n=null),n||(n=new o.Parser),n.parseFile(e,t,r),n},t.nextFile=function(e){return e.nextFile()},t.nextDiagnostic=function(e){var t=e.program;return t.diagnosticsOffset>>=0)&&e<256)&&(n=s[e])?n:(r=p(e,(0|e)<0?-1:0,!0),i&&(s[e]=r),r):(i=-128<=(e|=0)&&e<128)&&(n=a[e])?n:(r=p(e,e<0?-1:0,!1),i&&(a[e]=r),r)}function c(e,t){if(isNaN(e))return t?T:g;if(t){if(e<0)return T;if(e>=_)return A}else{if(e<=-y)return N;if(e+1>=y)return v}return e<0?c(-e,t).neg():p(e%d|0,e/d|0,t)}function p(e,t,r){return new n(e,t,r)}n.fromInt=o,n.fromNumber=c,n.fromBits=p;var l=Math.pow;function u(e,t,r){if(0===e.length)throw Error("empty string");if("NaN"===e||"Infinity"===e||"+Infinity"===e||"-Infinity"===e)return g;if("number"==typeof t?(r=t,t=!1):t=!!t,(r=r||10)<2||360)throw Error("interior hyphen");if(0===n)return u(e.substring(1),t,r).neg();for(var i=c(l(r,8)),a=g,s=0;s>>0:this.low},C.toNumber=function(){return this.unsigned?(this.high>>>0)*d+(this.low>>>0):this.high*d+(this.low>>>0)},C.toString=function(e){if((e=e||10)<2||36>>0).toString(e);if((a=o).isZero())return p+s;for(;p.length<6;)p="0"+p;s=""+p+s}},C.getHighBits=function(){return this.high},C.getHighBitsUnsigned=function(){return this.high>>>0},C.getLowBits=function(){return this.low},C.getLowBitsUnsigned=function(){return this.low>>>0},C.getNumBitsAbs=function(){if(this.isNegative())return this.eq(N)?64:this.neg().getNumBitsAbs();for(var e=0!=this.high?this.high:this.low,t=31;t>0&&0==(e&1<=0},C.isOdd=function(){return 1==(1&this.low)},C.isEven=function(){return 0==(1&this.low)},C.equals=function(e){return i(e)||(e=h(e)),(this.unsigned===e.unsigned||this.high>>>31!=1||e.high>>>31!=1)&&(this.high===e.high&&this.low===e.low)},C.eq=C.equals,C.notEquals=function(e){return!this.eq(e)},C.neq=C.notEquals,C.ne=C.notEquals,C.lessThan=function(e){return this.comp(e)<0},C.lt=C.lessThan,C.lessThanOrEqual=function(e){return this.comp(e)<=0},C.lte=C.lessThanOrEqual,C.le=C.lessThanOrEqual,C.greaterThan=function(e){return this.comp(e)>0},C.gt=C.greaterThan,C.greaterThanOrEqual=function(e){return this.comp(e)>=0},C.gte=C.greaterThanOrEqual,C.ge=C.greaterThanOrEqual,C.compare=function(e){if(i(e)||(e=h(e)),this.eq(e))return 0;var t=this.isNegative(),r=e.isNegative();return t&&!r?-1:!t&&r?1:this.unsigned?e.high>>>0>this.high>>>0||e.high===this.high&&e.low>>>0>this.low>>>0?-1:1:this.sub(e).isNegative()?-1:1},C.comp=C.compare,C.negate=function(){return!this.unsigned&&this.eq(N)?N:this.not().add(E)},C.neg=C.negate,C.add=function(e){i(e)||(e=h(e));var t=this.high>>>16,r=65535&this.high,n=this.low>>>16,a=65535&this.low,s=e.high>>>16,o=65535&e.high,c=e.low>>>16,l=0,u=0,d=0,_=0;return d+=(_+=a+(65535&e.low))>>>16,u+=(d+=n+c)>>>16,l+=(u+=r+o)>>>16,l+=t+s,p((d&=65535)<<16|(_&=65535),(l&=65535)<<16|(u&=65535),this.unsigned)},C.subtract=function(e){return i(e)||(e=h(e)),this.add(e.neg())},C.sub=C.subtract,C.multiply=function(e){if(this.isZero())return g;if(i(e)||(e=h(e)),r)return p(r.mul(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned);if(e.isZero())return g;if(this.eq(N))return e.isOdd()?N:g;if(e.eq(N))return this.isOdd()?N:g;if(this.isNegative())return e.isNegative()?this.neg().mul(e.neg()):this.neg().mul(e).neg();if(e.isNegative())return this.mul(e.neg()).neg();if(this.lt(m)&&e.lt(m))return c(this.toNumber()*e.toNumber(),this.unsigned);var t=this.high>>>16,n=65535&this.high,a=this.low>>>16,s=65535&this.low,o=e.high>>>16,l=65535&e.high,u=e.low>>>16,d=65535&e.low,_=0,y=0,T=0,E=0;return T+=(E+=s*d)>>>16,y+=(T+=a*d)>>>16,T&=65535,y+=(T+=s*u)>>>16,_+=(y+=n*d)>>>16,y&=65535,_+=(y+=a*u)>>>16,y&=65535,_+=(y+=s*l)>>>16,_+=t*d+n*u+a*l+s*o,p((T&=65535)<<16|(E&=65535),(_&=65535)<<16|(y&=65535),this.unsigned)},C.mul=C.multiply,C.divide=function(e){if(i(e)||(e=h(e)),e.isZero())throw Error("division by zero");var t,n,a;if(r)return this.unsigned||-2147483648!==this.high||-1!==e.low||-1!==e.high?p((this.unsigned?r.div_u:r.div_s)(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned):this;if(this.isZero())return this.unsigned?T:g;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return T;if(e.gt(this.shru(1)))return f;a=T}else{if(this.eq(N))return e.eq(E)||e.eq(I)?N:e.eq(N)?E:(t=this.shr(1).div(e).shl(1)).eq(g)?e.isNegative()?E:I:(n=this.sub(e.mul(t)),a=t.add(n.div(e)));else if(e.eq(N))return this.unsigned?T:g;if(this.isNegative())return e.isNegative()?this.neg().div(e.neg()):this.neg().div(e).neg();if(e.isNegative())return this.div(e.neg()).neg();a=g}for(n=this;n.gte(e);){t=Math.max(1,Math.floor(n.toNumber()/e.toNumber()));for(var s=Math.ceil(Math.log(t)/Math.LN2),o=s<=48?1:l(2,s-48),u=c(t),d=u.mul(e);d.isNegative()||d.gt(n);)d=(u=c(t-=o,this.unsigned)).mul(e);u.isZero()&&(u=E),a=a.add(u),n=n.sub(d)}return a},C.div=C.divide,C.modulo=function(e){return i(e)||(e=h(e)),r?p((this.unsigned?r.rem_u:r.rem_s)(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned):this.sub(this.div(e).mul(e))},C.mod=C.modulo,C.rem=C.modulo,C.not=function(){return p(~this.low,~this.high,this.unsigned)},C.and=function(e){return i(e)||(e=h(e)),p(this.low&e.low,this.high&e.high,this.unsigned)},C.or=function(e){return i(e)||(e=h(e)),p(this.low|e.low,this.high|e.high,this.unsigned)},C.xor=function(e){return i(e)||(e=h(e)),p(this.low^e.low,this.high^e.high,this.unsigned)},C.shiftLeft=function(e){return i(e)&&(e=e.toInt()),0==(e&=63)?this:e<32?p(this.low<>>32-e,this.unsigned):p(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):p(this.high>>e-32,this.high>=0?0:-1,this.unsigned)},C.shr=C.shiftRight,C.shiftRightUnsigned=function(e){if(i(e)&&(e=e.toInt()),0===(e&=63))return this;var t=this.high;return e<32?p(this.low>>>e|t<<32-e,t>>>e,this.unsigned):p(32===e?t:t>>>e-32,0,this.unsigned)},C.shru=C.shiftRightUnsigned,C.shr_u=C.shiftRightUnsigned,C.toSigned=function(){return this.unsigned?p(this.low,this.high,!1):this},C.toUnsigned=function(){return this.unsigned?this:p(this.low,this.high,!0)},C.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()},C.toBytesLE=function(){var e=this.high,t=this.low;return[255&t,t>>>8&255,t>>>16&255,t>>>24,255&e,e>>>8&255,e>>>16&255,e>>>24]},C.toBytesBE=function(){var e=this.high,t=this.low;return[e>>>24,e>>>16&255,e>>>8&255,255&e,t>>>24,t>>>16&255,t>>>8&255,255&t]},n.fromBytes=function(e,t,r){return r?n.fromBytesLE(e,t):n.fromBytesBE(e,t)},n.fromBytesLE=function(e,t){return new n(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)},n.fromBytesBE=function(e,t){return new n(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}},function(e,t,r){(function(e){const t=e.Long||r(15);e.i64_zero=t.ZERO,e.i64_one=t.ONE,e.i64_new=function(e,r){return t.fromBits(e,r)},e.i64_low=function(e){return e.low},e.i64_high=function(e){return e.high},e.i64_add=function(e,t){return e.add(t)},e.i64_sub=function(e,t){return e.sub(t)},e.i64_mul=function(e,t){return e.mul(t)},e.i64_div=function(e,t){return e.div(t)},e.i64_div_u=function(e,t){return e.toUnsigned().div(t.toUnsigned()).toSigned()},e.i64_rem=function(e,t){return e.mod(t)},e.i64_rem_u=function(e,t){return e.toUnsigned().mod(t.toUnsigned()).toSigned()},e.i64_and=function(e,t){return e.and(t)},e.i64_or=function(e,t){return e.or(t)},e.i64_xor=function(e,t){return e.xor(t)},e.i64_shl=function(e,t){return e.shl(t)},e.i64_shr=function(e,t){return e.shr(t)},e.i64_shr_u=function(e,t){return e.shru(t)},e.i64_not=function(e){return e.not()},e.i64_eq=function(e,t){return e.eq(t)},e.i64_ne=function(e,t){return e.ne(t)},e.i64_align=function(e,r){assert(r&&0==(r&r-1));var n=t.fromInt(r-1);return e.add(n).and(n.not())},e.i64_is_i8=function(e){return 0===e.high&&e.low>=0&&e.low<=i8.MAX_VALUE||-1===e.high&&e.low>=i8.MIN_VALUE&&e.low<0},e.i64_is_i16=function(e){return 0===e.high&&e.low>=0&&e.low<=i16.MAX_VALUE||-1===e.high&&e.low>=i16.MIN_VALUE&&e.low<0},e.i64_is_i32=function(e){return 0===e.high&&e.low>=0||-1===e.high&&e.low<0},e.i64_is_u8=function(e){return 0===e.high&&e.low>=0&&e.low<=u8.MAX_VALUE},e.i64_is_u16=function(e){return 0===e.high&&e.low>=0&&e.low<=u16.MAX_VALUE},e.i64_is_u32=function(e){return 0===e.high},e.i64_is_bool=function(e){return 0===e.high&&(0===e.low||1===e.low)};const n=t.fromNumber(f32.MIN_SAFE_INTEGER),i=t.fromNumber(f32.MAX_SAFE_INTEGER);e.i64_is_f32=function(e){return e.gte(n)&&e.lte(i)};const a=t.fromNumber(f64.MIN_SAFE_INTEGER),s=t.fromNumber(f64.MAX_SAFE_INTEGER);e.i64_is_f64=function(e){return e.gte(a)&&e.lte(s)},e.i64_to_f32=function(t){return e.Math.fround(t.toNumber())},e.i64_to_f64=function(e){return e.toNumber()},e.i64_to_string=function(e,t){return(t?e.toUnsigned():e).toString(10)}}).call(this,r(5))},function(e,t,r){"use strict";function n(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24}function i(e,t,r){t[r]=e,t[r+1]=e>>>8,t[r+2]=e>>>16,t[r+3]=e>>>24}function a(e,t){var r=n(e,t),i=n(e,t+4);return i64_new(r,i)}Object.defineProperty(t,"__esModule",{value:!0}),t.readI32=n,t.writeI32=i,t.readI64=a,t.writeI64=function(e,t,r){i(i64_low(e),t,r),i(i64_high(e),t,r+4)},t.readF32=function(e,t){return i32_as_f32(n(e,t))},t.writeF32=function(e,t,r){i(f32_as_i32(e),t,r)},t.readF64=function(e,t){return i64_as_f64(a(e,t))},t.writeF64=function(e,t,r){var n=f64_as_i64(e);i(i64_low(n),t,r),i(i64_high(n),t,r+4)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=" ",i=" ",a=" ";t.indent=function(e,t){for(;t>=4;)e.push(a),t-=4;t>=2&&(e.push(i),t-=2),t&&e.push(n)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=47;function i(e){for(var t,r=0,i=e.length;r+10||i=0;)if(e.charCodeAt(a)==n){r-a==3&&46==e.charCodeAt(a+1)&&46==e.charCodeAt(a+2)||(e=t?e.substring(0,a):e.substring(0,a)+e.substring(r+3),i-=r+3-a,r=a-1);break}if(a<0&&r>0&&(2!=r||46!=e.charCodeAt(0)||46!=e.charCodeAt(1))){i=(e=e.substring(r+4)).length;continue}}}r++}return i>0?e:"."}function a(e){for(var t=e.length;--t>0;)if(e.charCodeAt(t)==n)return e.substring(0,t);return"."}t.normalizePath=i,t.resolvePath=function(e,t){return e.startsWith("std/")?e:i(a(t)+String.fromCharCode(n)+e)},t.dirname=a},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.NULL=0]="NULL",e[e.LINEFEED=10]="LINEFEED",e[e.CARRIAGERETURN=13]="CARRIAGERETURN",e[e.LINESEPARATOR=8232]="LINESEPARATOR",e[e.PARAGRAPHSEPARATOR=8233]="PARAGRAPHSEPARATOR",e[e.NEXTLINE=133]="NEXTLINE",e[e.SPACE=32]="SPACE",e[e.NONBREAKINGSPACE=160]="NONBREAKINGSPACE",e[e.ENQUAD=8192]="ENQUAD",e[e.EMQUAD=8193]="EMQUAD",e[e.ENSPACE=8194]="ENSPACE",e[e.EMSPACE=8195]="EMSPACE",e[e.THREEPEREMSPACE=8196]="THREEPEREMSPACE",e[e.FOURPEREMSPACE=8197]="FOURPEREMSPACE",e[e.SIXPEREMSPACE=8198]="SIXPEREMSPACE",e[e.FIGURESPACE=8199]="FIGURESPACE",e[e.PUNCTUATIONSPACE=8200]="PUNCTUATIONSPACE",e[e.THINSPACE=8201]="THINSPACE",e[e.HAIRSPACE=8202]="HAIRSPACE",e[e.ZEROWIDTHSPACE=8203]="ZEROWIDTHSPACE",e[e.NARROWNOBREAKSPACE=8239]="NARROWNOBREAKSPACE",e[e.IDEOGRAPHICSPACE=12288]="IDEOGRAPHICSPACE",e[e.MATHEMATICALSPACE=8287]="MATHEMATICALSPACE",e[e.OGHAM=5760]="OGHAM",e[e._=95]="_",e[e._0=48]="_0",e[e._1=49]="_1",e[e._2=50]="_2",e[e._3=51]="_3",e[e._4=52]="_4",e[e._5=53]="_5",e[e._6=54]="_6",e[e._7=55]="_7",e[e._8=56]="_8",e[e._9=57]="_9",e[e.a=97]="a",e[e.b=98]="b",e[e.c=99]="c",e[e.d=100]="d",e[e.e=101]="e",e[e.f=102]="f",e[e.g=103]="g",e[e.h=104]="h",e[e.i=105]="i",e[e.j=106]="j",e[e.k=107]="k",e[e.l=108]="l",e[e.m=109]="m",e[e.n=110]="n",e[e.o=111]="o",e[e.p=112]="p",e[e.q=113]="q",e[e.r=114]="r",e[e.s=115]="s",e[e.t=116]="t",e[e.u=117]="u",e[e.v=118]="v",e[e.w=119]="w",e[e.x=120]="x",e[e.y=121]="y",e[e.z=122]="z",e[e.A=65]="A",e[e.B=66]="B",e[e.C=67]="C",e[e.D=68]="D",e[e.E=69]="E",e[e.F=70]="F",e[e.G=71]="G",e[e.H=72]="H",e[e.I=73]="I",e[e.J=74]="J",e[e.K=75]="K",e[e.L=76]="L",e[e.M=77]="M",e[e.N=78]="N",e[e.O=79]="O",e[e.P=80]="P",e[e.Q=81]="Q",e[e.R=82]="R",e[e.S=83]="S",e[e.T=84]="T",e[e.U=85]="U",e[e.V=86]="V",e[e.W=87]="W",e[e.X=88]="X",e[e.Y=89]="Y",e[e.Z=90]="Z",e[e.AMPERSAND=38]="AMPERSAND",e[e.ASTERISK=42]="ASTERISK",e[e.AT=64]="AT",e[e.BACKSLASH=92]="BACKSLASH",e[e.BACKTICK=96]="BACKTICK",e[e.BAR=124]="BAR",e[e.CARET=94]="CARET",e[e.CLOSEBRACE=125]="CLOSEBRACE",e[e.CLOSEBRACKET=93]="CLOSEBRACKET",e[e.CLOSEPAREN=41]="CLOSEPAREN",e[e.COLON=58]="COLON",e[e.COMMA=44]="COMMA",e[e.DOLLAR=36]="DOLLAR",e[e.DOT=46]="DOT",e[e.DOUBLEQUOTE=34]="DOUBLEQUOTE",e[e.EQUALS=61]="EQUALS",e[e.EXCLAMATION=33]="EXCLAMATION",e[e.GREATERTHAN=62]="GREATERTHAN",e[e.HASH=35]="HASH",e[e.LESSTHAN=60]="LESSTHAN",e[e.MINUS=45]="MINUS",e[e.OPENBRACE=123]="OPENBRACE",e[e.OPENBRACKET=91]="OPENBRACKET",e[e.OPENPAREN=40]="OPENPAREN",e[e.PERCENT=37]="PERCENT",e[e.PLUS=43]="PLUS",e[e.QUESTION=63]="QUESTION",e[e.SEMICOLON=59]="SEMICOLON",e[e.SINGLEQUOTE=39]="SINGLEQUOTE",e[e.SLASH=47]="SLASH",e[e.TILDE=126]="TILDE",e[e.BACKSPACE=8]="BACKSPACE",e[e.FORMFEED=12]="FORMFEED",e[e.BYTEORDERMARK=65279]="BYTEORDERMARK",e[e.TAB=9]="TAB",e[e.VERTICALTAB=11]="VERTICALTAB"}(t.CharCode||(t.CharCode={})),t.isLineBreak=function(e){switch(e){case 10:case 13:case 8232:case 8233:return!0;default:return!1}},t.isWhiteSpace=function(e){switch(e){case 32:case 9:case 11:case 12:case 160:case 133:case 5760:case 8239:case 8287:case 12288:case 65279:return!0;default:return e>=8192&&e<=8203}},t.isDecimalDigit=function(e){return e>=48&&e<=57},t.isOctalDigit=function(e){return e>=48&&e<=55},t.isIdentifierStart=function(e){return e>=65&&e<=90||e>=97&&e<=122||36==e||95==e||e>127&&!((t=e)<0||t>65535)&&a(t,n);var t},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&&!((t=e)<0||t>65535)&&a(t,i);var t};var n=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,880,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1162,1319,1329,1366,1369,1369,1377,1415,1488,1514,1520,1522,1568,1610,1646,1647,1649,1747,1749,1749,1765,1766,1774,1775,1786,1788,1791,1791,1808,1808,1810,1839,1869,1957,1969,1969,1994,2026,2036,2037,2042,2042,2048,2069,2074,2074,2084,2084,2088,2088,2112,2136,2208,2208,2210,2220,2308,2361,2365,2365,2384,2384,2392,2401,2417,2423,2425,2431,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2493,2493,2510,2510,2524,2525,2527,2529,2544,2545,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2649,2652,2654,2654,2674,2676,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2749,2749,2768,2768,2784,2785,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2877,2877,2908,2909,2911,2913,2929,2929,2947,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3024,3024,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3133,3160,3161,3168,3169,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3261,3261,3294,3294,3296,3297,3313,3314,3333,3340,3342,3344,3346,3386,3389,3389,3406,3406,3424,3425,3450,3455,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3585,3632,3634,3635,3648,3654,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3760,3762,3763,3773,3773,3776,3780,3782,3782,3804,3807,3840,3840,3904,3911,3913,3948,3976,3980,4096,4138,4159,4159,4176,4181,4186,4189,4193,4193,4197,4198,4206,4208,4213,4225,4238,4238,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5905,5920,5937,5952,5969,5984,5996,5998,6e3,6016,6067,6103,6103,6108,6108,6176,6263,6272,6312,6314,6314,6320,6389,6400,6428,6480,6509,6512,6516,6528,6571,6593,6599,6656,6678,6688,6740,6823,6823,6917,6963,6981,6987,7043,7072,7086,7087,7098,7141,7168,7203,7245,7247,7258,7293,7401,7404,7406,7409,7413,7414,7424,7615,7680,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8305,8305,8319,8319,8336,8348,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11502,11506,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11648,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11823,11823,12293,12295,12321,12329,12337,12341,12344,12348,12353,12438,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42527,42538,42539,42560,42606,42623,42647,42656,42735,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43009,43011,43013,43015,43018,43020,43042,43072,43123,43138,43187,43250,43255,43259,43259,43274,43301,43312,43334,43360,43388,43396,43442,43471,43471,43520,43560,43584,43586,43588,43595,43616,43638,43642,43642,43648,43695,43697,43697,43701,43702,43705,43709,43712,43712,43714,43714,43739,43741,43744,43754,43762,43764,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44002,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64285,64287,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65136,65140,65142,65276,65313,65338,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500],i=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,768,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1155,1159,1162,1319,1329,1366,1369,1369,1377,1415,1425,1469,1471,1471,1473,1474,1476,1477,1479,1479,1488,1514,1520,1522,1552,1562,1568,1641,1646,1747,1749,1756,1759,1768,1770,1788,1791,1791,1808,1866,1869,1969,1984,2037,2042,2042,2048,2093,2112,2139,2208,2208,2210,2220,2276,2302,2304,2403,2406,2415,2417,2423,2425,2431,2433,2435,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2492,2500,2503,2504,2507,2510,2519,2519,2524,2525,2527,2531,2534,2545,2561,2563,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2620,2620,2622,2626,2631,2632,2635,2637,2641,2641,2649,2652,2654,2654,2662,2677,2689,2691,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2748,2757,2759,2761,2763,2765,2768,2768,2784,2787,2790,2799,2817,2819,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2876,2884,2887,2888,2891,2893,2902,2903,2908,2909,2911,2915,2918,2927,2929,2929,2946,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3006,3010,3014,3016,3018,3021,3024,3024,3031,3031,3046,3055,3073,3075,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3140,3142,3144,3146,3149,3157,3158,3160,3161,3168,3171,3174,3183,3202,3203,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3260,3268,3270,3272,3274,3277,3285,3286,3294,3294,3296,3299,3302,3311,3313,3314,3330,3331,3333,3340,3342,3344,3346,3386,3389,3396,3398,3400,3402,3406,3415,3415,3424,3427,3430,3439,3450,3455,3458,3459,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3530,3530,3535,3540,3542,3542,3544,3551,3570,3571,3585,3642,3648,3662,3664,3673,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3769,3771,3773,3776,3780,3782,3782,3784,3789,3792,3801,3804,3807,3840,3840,3864,3865,3872,3881,3893,3893,3895,3895,3897,3897,3902,3911,3913,3948,3953,3972,3974,3991,3993,4028,4038,4038,4096,4169,4176,4253,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4957,4959,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5908,5920,5940,5952,5971,5984,5996,5998,6e3,6002,6003,6016,6099,6103,6103,6108,6109,6112,6121,6155,6157,6160,6169,6176,6263,6272,6314,6320,6389,6400,6428,6432,6443,6448,6459,6470,6509,6512,6516,6528,6571,6576,6601,6608,6617,6656,6683,6688,6750,6752,6780,6783,6793,6800,6809,6823,6823,6912,6987,6992,7001,7019,7027,7040,7155,7168,7223,7232,7241,7245,7293,7376,7378,7380,7414,7424,7654,7676,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8204,8205,8255,8256,8276,8276,8305,8305,8319,8319,8336,8348,8400,8412,8417,8417,8421,8432,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11647,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11744,11775,11823,11823,12293,12295,12321,12335,12337,12341,12344,12348,12353,12438,12441,12442,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42539,42560,42607,42612,42621,42623,42647,42655,42737,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43047,43072,43123,43136,43204,43216,43225,43232,43255,43259,43259,43264,43309,43312,43347,43360,43388,43392,43456,43471,43481,43520,43574,43584,43597,43600,43609,43616,43638,43642,43643,43648,43714,43739,43741,43744,43759,43762,43766,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44010,44012,44013,44016,44025,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65024,65039,65056,65062,65075,65076,65101,65103,65136,65140,65142,65276,65296,65305,65313,65338,65343,65343,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500];function a(e,t){if(e2?(r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),c.length<1?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"1",c.length.toString(10)):e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",c.length.toString(10)),E.createUnreachable()):r&&1==r.length?(y=e.compileExpression(c[0],e.options.usizeType,1,0),(b=2==c.length?u(e,c[1]):0)<0?E.createUnreachable():(e.currentType=r[0],E.createLoad(r[0].byteSize,r[0].is(5),y,r[0].is(4)&&h.is(4)&&h.size>r[0].size?(e.currentType=h).toNativeType():(e.currentType=r[0]).toNativeType(),b))):(r&&r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),E.createUnreachable());case"store":if(e.currentType=a.Type.void,c.length<2||c.length>3)return r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),c.length<2?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"2",c.length.toString(10)):e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),E.createUnreachable();if(!r||1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),E.createUnreachable();y=e.compileExpression(c[0],e.options.usizeType,1,0),m=e.compileExpression(c[1],r[0],r[0].is(4)?0:1,0);f=void 0;return r[0].is(4)&&(!e.currentType.is(4)||e.currentType.size1)return r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),E.createUnreachable();if(!r||1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),E.createUnreachable();var L;if(!(L=r[0].classReference))return e.error(n.DiagnosticCode.Operation_not_supported,d.range),E.createUnreachable();var b=void 0;if(c.length){if(c[0].kind!=i.NodeKind.LITERAL||c[0].literalKind!=i.LiteralKind.STRING)return e.error(n.DiagnosticCode.String_literal_expected,c[0].range),E.createUnreachable();var k=c[0].value,R=L.members?L.members.get(k):null;if(!R||R.kind!=o.ElementKind.FIELD)return e.error(n.DiagnosticCode.Type_0_has_no_property_1,c[0].range,L.internalName,k),E.createUnreachable();b=R.memoryOffset}else b=L.currentMemoryOffset;return e.options.isWasm64?h.is(4)&&h.size<=32?(e.currentType=a.Type.u32,E.createI32(b)):E.createI64(b):h.is(4)&&64==h.size?(e.currentType=a.Type.u64,E.createI64(b)):E.createI32(b);case"select":if(3!=c.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),E.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),E.createUnreachable();y=e.compileExpression(c[0],r[0],1,0)}else y=e.compileExpressionRetainType(c[0],a.Type.i32,0);f=e.currentType;switch(m=e.compileExpression(c[1],f,1,0),g=e.makeIsTrueish(e.compileExpressionRetainType(c[2],a.Type.bool,0),e.currentType),e.currentType=f,e.currentType.kind){case 0:case 1:case 5:case 6:case 10:default:T=E.createSelect(y,m,g);break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),T=E.createUnreachable()}return T;case"unreachable":return 0!=c.length&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",c.length.toString(10)),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),E.createUnreachable();case"current_memory":return e.currentType=a.Type.i32,0!=c.length&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",c.length.toString(10)),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),E.createHost(s.HostOp.CurrentMemory);case"grow_memory":return e.currentType=a.Type.i32,1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",c.length.toString(10)),y=E.createUnreachable()):y=e.compileExpression(c[0],a.Type.i32,1,0),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),E.createHost(s.HostOp.GrowMemory,null,[y]);case"move_memory":if(r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),3!=c.length)return e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),e.currentType=a.Type.void,E.createUnreachable();throw y=e.compileExpression(c[0],e.options.usizeType,1,0),m=e.compileExpression(c[1],e.options.usizeType,1,0),g=e.compileExpression(c[2],e.options.usizeType,1,0),e.currentType=a.Type.void,new Error("not implemented");case"set_memory":if(r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),3!=c.length)return e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),e.currentType=a.Type.void,E.createUnreachable();throw y=e.compileExpression(c[0],e.options.usizeType,1,0),m=e.compileExpression(c[1],a.Type.u32,1,0),g=e.compileExpression(c[2],e.options.usizeType,1,0),e.currentType=a.Type.void,new Error("not implemented");case"changetype":return r&&1==r.length?1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=r[0],E.createUnreachable()):(y=e.compileExpressionRetainType(c[0],r[0],0),e.currentType=r[0],e.currentType.size!=r[0].size?(e.error(n.DiagnosticCode.Operation_not_supported,d.range),E.createUnreachable()):y):(r&&r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),E.createUnreachable());case"assert":if(c.length<1||c.length>2)return r&&(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),c.length<1?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"1",c.length.toString(10)):c.length>2&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",c.length.toString(10)),E.createUnreachable();if(r){if(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),E.createUnreachable();y=e.compileExpression(c[0],r[0],1,1)}else y=e.compileExpressionRetainType(c[0],a.Type.bool,1);f=e.currentType;if(e.currentType=f.nonNullableType,e.options.noAssert)return h==a.Type.void?(e.currentType=a.Type.void,E.createNop()):y;var x=_(e,2==c.length?c[1]:null,d);if(e.currentType=f.nonNullableType,h==a.Type.void){switch(e.currentType.kind){default:T=E.createIf(E.createUnary(s.UnaryOp.EqzI32,y),x);break;case 3:case 8:T=E.createIf(E.createUnary(s.UnaryOp.EqzI64,y),x);break;case 4:case 9:T=E.createIf(E.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,y),x);break;case 11:T=E.createIf(E.createBinary(s.BinaryOp.EqF32,y,E.createF32(0)),x);break;case 12:T=E.createIf(E.createBinary(s.BinaryOp.EqF64,y,E.createF64(0)),x);break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),T=x}e.currentType=a.Type.void}else switch(e.currentType.kind){case 0:case 1:case 5:case 6:case 10:A=e.currentFunction.flow,v=e.currentFunction.getAndFreeTempLocal(e.currentType,!A.canOverflow(y,e.currentType));T=E.createIf(E.createTeeLocal(v.index,y),E.createGetLocal(v.index,s.NativeType.I32),x);break;case 2:case 7:default:v=e.currentFunction.getAndFreeTempLocal(a.Type.i32,!1);T=E.createIf(E.createTeeLocal(v.index,y),E.createGetLocal(v.index,s.NativeType.I32),x);break;case 3:case 8:v=e.currentFunction.getAndFreeTempLocal(a.Type.i64,!1);T=E.createIf(E.createUnary(s.UnaryOp.EqzI64,E.createTeeLocal(v.index,y)),x,E.createGetLocal(v.index,s.NativeType.I64));break;case 4:case 9:v=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);T=E.createIf(E.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,E.createTeeLocal(v.index,y)),x,E.createGetLocal(v.index,e.options.nativeSizeType));break;case 11:v=e.currentFunction.getAndFreeTempLocal(a.Type.f32,!1);T=E.createIf(E.createBinary(s.BinaryOp.EqF32,E.createTeeLocal(v.index,y),E.createF32(0)),x,E.createGetLocal(v.index,s.NativeType.F32));break;case 12:v=e.currentFunction.getAndFreeTempLocal(a.Type.f64,!1);T=E.createIf(E.createBinary(s.BinaryOp.EqF64,E.createTeeLocal(v.index,y),E.createF64(0)),x,E.createGetLocal(v.index,s.NativeType.F64));break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),T=x}return T;case"unchecked":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),E.createUnreachable()):((A=e.currentFunction.flow).set(2048),T=e.compileExpressionRetainType(c[0],h,0),A.unset(2048),T);case"call_indirect":if(c.length<1)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),E.createUnreachable();var B=void 0;if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),E.createUnreachable();B=r[0]}else B=h;if(y=e.compileExpressionRetainType(c[0],a.Type.u32,0),7!=e.currentType.kind)return e.error(n.DiagnosticCode.Operation_not_supported,c[0].range),E.createUnreachable();for(var U=c.length-1,F=new Array(U),D=new Array(U+1),P=B.toNativeType(),w=new Array(U),M=0;M1&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,i.range,"1",t.length.toString(10)),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,i.range,"1",r.length.toString(10)),null}function u(e,t){var r,i;return e.options.isWasm64?(r=e.precomputeExpression(t,a.Type.usize64,1,0),(s.getExpressionId(r)!=s.ExpressionId.Const||s.getExpressionType(r)!=s.NativeType.I64||0!=s.getConstValueI64High(r)||(i=s.getConstValueI64Low(r))<0)&&(e.error(n.DiagnosticCode.Operation_not_supported,t.range),i=-1)):(r=e.precomputeExpression(t,a.Type.usize32,1,0),(s.getExpressionId(r)!=s.ExpressionId.Const||s.getExpressionType(r)!=s.NativeType.I32||(i=s.getConstValueI32(r))<0)&&(e.error(n.DiagnosticCode.Operation_not_supported,t.range),i=-1)),i}t.compileCall=c;var h="allocate_memory";t.compileAllocate=function(e,t,r){var i=e.program;assert(t.program==i);var a=e.module,s=e.options,c=i.elementsLookup.get(h);if(!c)return i.error(n.DiagnosticCode.Cannot_find_name_0,r.range,h),i.info(n.DiagnosticCode.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf,r.range),a.createUnreachable();if(c.kind!=o.ElementKind.FUNCTION_PROTOTYPE)return i.error(n.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,r.range,c.internalName),a.createUnreachable();var p=c.resolve();return p&&e.compileFunction(p)?(e.currentType=t.type,a.createCall(p.internalName,[s.isWasm64?a.createI64(t.currentMemoryOffset):a.createI32(t.currentMemoryOffset)],s.nativeSizeType)):a.createUnreachable()};var d="abort";function _(e,t,r){var n=e.program,i=e.module,c=n.typesLookup.get("string");if(!c)return i.createUnreachable();var p=n.elementsLookup.get(d);if(!p||p.kind!=o.ElementKind.FUNCTION_PROTOTYPE)return i.createUnreachable();var l=p.resolve();if(!l||!e.compileFunction(l))return i.createUnreachable();var u=null!=t?e.compileExpression(t,c,1,0):c.toNativeZero(i),h=e.compileStaticString(r.range.source.normalizedPath);return e.currentType=a.Type.void,i.createBlock(null,[i.createCallImport(l.internalName,[u,h,i.createI32(r.range.line),i.createI32(r.range.column)],s.NativeType.None),i.createUnreachable()])}t.compileAbort=_},function(t,r){t.exports=e},function(e,t,r){(function(e){const t=e.Binaryen||r(22);for(var n in t)(n.startsWith("_Binaryen")||n.startsWith("_Relooper"))&&(e[n]=t[n]);e.allocate_memory=function(e){return e?t._malloc(e):0},e.free_memory=function(e){e&&t._free(e)},e.move_memory=function(e,r,n){return t._memmove(e,r,n)},e.store=function(e,r){t.HEAPU8[e]=r},e.load=function(e){return t.HEAPU8[e]};const i=r(3).Module;i.prototype.toText=function(){var e=t.print,r="";return t.print=function(e){r+=e+"\n"},_BinaryenModulePrint(this.ref),t.print=e,r},i.prototype.toAsmjs=function(){var e=t.print,r="";return t.print=function(e){r+=e+"\n"},_BinaryenModulePrintAsmjs(this.ref),t.print=e,r}}).call(this,r(5))},function(e,t){e.exports=(e=>{var t=new Uint8Array(0),r=0;e.allocate_memory=function(e){if(!(e>>>=0))return 0;if(r+e>t.length){var n=t;(t=new Uint8Array(Math.max(65536,t.length+e,2*t.length))).set(n)}var i=r;return 7&(r+=e)&&(r=1+(7|r)),i},e.free_memory=function(e){},e.move_memory=function(e,r,n){t.copyWithin(e,r,r+n)},e.store=function(e,r,n){t[e+(0|n)]=r},e.load=function(e,r){return t[e+(0|r)]}})},function(e,t){e.exports=(e=>{e.JSMath=Math})},function(e,t,r){(function(e){var t="undefined"!=typeof window&&window||void 0!==e&&e||self;function n(){Error.captureStackTrace?Error.captureStackTrace(this,n):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}function i(e){this.message=e||"assertion failed",Error.captureStackTrace?Error.captureStackTrace(this,i):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}Object.defineProperties(t.i8=function(e){return e<<24>>24},{MIN_VALUE:{value:-128,writable:!1},MAX_VALUE:{value:127,writable:!1}}),Object.defineProperties(t.i16=function(e){return e<<16>>16},{MIN_VALUE:{value:-32768,writable:!1},MAX_VALUE:{value:32767,writable:!1}}),Object.defineProperties(t.i32=t.isize=function(e){return 0|e},{MIN_VALUE:{value:-2147483648,writable:!1},MAX_VALUE:{value:2147483647,writable:!1}}),Object.defineProperties(t.u8=function(e){return 255&e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:255,writable:!1}}),Object.defineProperties(t.u16=function(e){return 65535&e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:65535,writable:!1}}),Object.defineProperties(t.u32=t.usize=function(e){return e>>>0},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:4294967295,writable:!1}}),Object.defineProperties(t.bool=function(e){return!!e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:1,writable:!1}}),Object.defineProperties(t.f32=function(e){return Math.fround(e)},{MIN_VALUE:{value:Math.fround(-3.40282347e38),writable:!1},MAX_VALUE:{value:Math.fround(3.40282347e38),writable:!1},MIN_POSITIVE_VALUE:{value:Math.fround(1.175494351e-38),writable:!1},MIN_SAFE_INTEGER:{value:-16777215,writable:!1},MAX_SAFE_INTEGER:{value:16777215,writable:!1},EPSILON:{value:Math.fround(1.1920929e-7),writable:!1}}),Object.defineProperties(t.f64=function(e){return+e},{MIN_VALUE:{value:-1.7976931348623157e308,writable:!1},MAX_VALUE:{value:1.7976931348623157e308,writable:!1},MIN_POSITIVE_VALUE:{value:2.2250738585072014e-308,writable:!1},MIN_SAFE_INTEGER:{value:-9007199254740991,writable:!1},MAX_SAFE_INTEGER:{value:9007199254740991,writable:!1},EPSILON:{value:2.220446049250313e-16,writable:!1}}),t.clz=Math.clz32,t.ctz=function(e){var t=Math.clz32(e&-e);return e?31-t:t},t.popcnt=function(e){return 16843009*((e=(858993459&(e-=e>>>1&1431655765))+(e>>>2&858993459))+(e>>>4)&252645135)>>>24},t.rotl=function(e,t){return e<<(t&=31)|e>>>32-t},t.rotr=function(e,t){return e>>>(t&=31)|e<<32-t},t.abs=Math.abs,t.max=Math.max,t.min=Math.min,t.ceil=Math.ceil,t.floor=Math.floor,t.nearest=function(e){return.5===Math.abs(e-Math.trunc(e))?2*Math.round(.5*e):Math.round(e)},t.select=function(e,t,r){return r?e:t},t.sqrt=Math.sqrt,t.trunc=Math.trunc,t.copysign=function(e,t){return Math.abs(e)*Math.sign(t)},t.bswap=function(e){var t=e>>8&16711935,r=(16711935&e)<<8;return(t=(e=t|r)>>16&65535)|(r=(65535&e)<<16)},t.bswap16=function(e){return e<<8&65280|e>>8&255|4294901760&e},n.prototype=Object.create(Error.prototype),n.prototype.name="UnreachableError",n.prototype.message="unreachable",t.unreachable=function(){throw new n},i.prototype=Object.create(Error.prototype),i.prototype.name="AssertionError",t.assert=function(e,t){if(e)return e;throw new i(t)},t.changetype=function(e){return e},t.parseI32=function(e,t){return 0|parseInt(e,void 0)},String.fromCharCodes=function(e){return String.fromCharCode.apply(String,e)},String.fromCodePoints=function(e){return String.fromCodePoint.apply(String,e)},t.isInteger=Number.isInteger,t.isFloat=function(e){return"number"==typeof e},t.isReference=function(e){return"object"==typeof e||"string"==typeof e},t.isString=function(e){return"string"==typeof e||e instanceof String},t.isArray=Array.isArray,t.unchecked=function(e){return e},t.fmod=function(e,t){return e%t},t.fmodf=function(e,t){return Math.fround(e%t)},r(25)(t),r(24)(t)}).call(this,r(5))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(26),r(23),r(16),r(14)},function(e,t,r){r(27),e.exports=r(13)}])}); +!function(e,t){"object"==typeof exports&&"object"==typeof module?module.exports=t(require("binaryen")):"function"==typeof define&&define.amd?define(["binaryen"],t):"object"==typeof exports?exports.assemblyscript=t(require("binaryen")):e.assemblyscript=t(e.binaryen)}("undefined"!=typeof self?self:this,function(e){return function(e){var t={};function r(n){if(t[n])return t[n].exports;var i=t[n]={i:n,l:!1,exports:{}};return e[n].call(i.exports,i,i.exports,r),i.l=!0,i.exports}return r.m=e,r.c=t,r.d=function(e,t,n){r.o(e,t)||Object.defineProperty(e,t,{enumerable:!0,get:n})},r.r=function(e){"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(e,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(e,"__esModule",{value:!0})},r.t=function(e,t){if(1&t&&(e=r(e)),8&t)return e;if(4&t&&"object"==typeof e&&e&&e.__esModule)return e;var n=Object.create(null);if(r.r(n),Object.defineProperty(n,"default",{enumerable:!0,value:e}),2&t&&"string"!=typeof e)for(var i in e)r.d(n,i,function(t){return e[t]}.bind(null,i));return n},r.n=function(e){var t=e&&e.__esModule?function(){return e.default}:function(){return e};return r.d(t,"a",t),t},r.o=function(e,t){return Object.prototype.hasOwnProperty.call(e,t)},r.p="",r(r.s=29)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.NONE=0]="NONE",e[e.IMPORT=1]="IMPORT",e[e.EXPORT=2]="EXPORT",e[e.DECLARE=4]="DECLARE",e[e.CONST=8]="CONST",e[e.LET=16]="LET",e[e.STATIC=32]="STATIC",e[e.READONLY=64]="READONLY",e[e.ABSTRACT=128]="ABSTRACT",e[e.PUBLIC=256]="PUBLIC",e[e.PRIVATE=512]="PRIVATE",e[e.PROTECTED=1024]="PROTECTED",e[e.GET=2048]="GET",e[e.SET=4096]="SET",e[e.AMBIENT=8192]="AMBIENT",e[e.GENERIC=16384]="GENERIC",e[e.GENERIC_CONTEXT=32768]="GENERIC_CONTEXT",e[e.INSTANCE=65536]="INSTANCE",e[e.CONSTRUCTOR=131072]="CONSTRUCTOR",e[e.ARROW=262144]="ARROW",e[e.MODULE_EXPORT=524288]="MODULE_EXPORT",e[e.MODULE_IMPORT=1048576]="MODULE_IMPORT",e[e.BUILTIN=2097152]="BUILTIN",e[e.COMPILED=4194304]="COMPILED",e[e.INLINED=8388608]="INLINED",e[e.SCOPED=16777216]="SCOPED",e[e.TRAMPOLINE=33554432]="TRAMPOLINE",e[e.VIRTUAL=67108864]="VIRTUAL"}(t.CommonFlags||(t.CommonFlags={})),t.PATH_DELIMITER="/",t.PARENT_SUBST="..",t.GETTER_PREFIX="get:",t.SETTER_PREFIX="set:",t.INSTANCE_DELIMITER="#",t.STATIC_DELIMITER=".",t.INNER_DELIMITER="~",t.LIBRARY_SUBST="~lib",t.LIBRARY_PREFIX=t.LIBRARY_SUBST+t.PATH_DELIMITER,t.FILESPACE_PREFIX="file:"},function(e,t,r){"use strict";function n(e){for(var r in e)t.hasOwnProperty(r)||(t[r]=e[r])}Object.defineProperty(t,"__esModule",{value:!0}),n(r(21)),n(r(20)),n(r(19)),n(r(18))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,i=r(9),a=r(1),s=r(9);function o(e){switch(e){case n.INFO:return"INFO";case n.WARNING:return"WARNING";case n.ERROR:return"ERROR";default:return assert(!1),""}}function c(e){switch(e){case n.INFO:return t.COLOR_BLUE;case n.WARNING:return t.COLOR_YELLOW;case n.ERROR:return t.COLOR_RED;default:return assert(!1),""}}t.DiagnosticCode=s.DiagnosticCode,t.diagnosticCodeToString=s.diagnosticCodeToString,function(e){e[e.INFO=0]="INFO",e[e.WARNING=1]="WARNING",e[e.ERROR=2]="ERROR"}(n=t.DiagnosticCategory||(t.DiagnosticCategory={})),t.diagnosticCategoryToString=o,t.COLOR_BLUE="",t.COLOR_YELLOW="",t.COLOR_RED="",t.COLOR_RESET="",t.diagnosticCategoryToColor=c;var p=function(){function e(e,t,r){this.range=null,this.code=e,this.category=t,this.message=r}return e.create=function(t,r,n,a,s){void 0===n&&(n=null),void 0===a&&(a=null),void 0===s&&(s=null);var o=i.diagnosticCodeToString(t);return null!=n&&(o=o.replace("{0}",n)),null!=a&&(o=o.replace("{1}",a)),null!=s&&(o=o.replace("{2}",s)),new e(t,r,o)},e.createInfo=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.INFO,r,i)},e.createWarning=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.WARNING,r,i)},e.createError=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.ERROR,r,i)},e.prototype.withRange=function(e){return this.range=e,this},e.prototype.toString=function(){return this.range?o(this.category)+" "+this.code.toString(10)+': "'+this.message+'" in '+this.range.source.normalizedPath+":"+this.range.line.toString(10)+":"+this.range.column.toString(10):o(this.category)+" "+this.code.toString(10)+": "+this.message},e}();function l(e,r){void 0===r&&(r=!1);for(var n=e.source.text,i=n.length,s=e.start,o=e.end;s>0&&!a.isLineBreak(n.charCodeAt(s-1));)s--;for(;o=0;--s)free_memory(a[s])}},e.prototype.createCall=function(e,t,r){var n=h(e),i=u(t);try{return _BinaryenCall(this.ref,n,i,t&&t.length||0,r)}finally{free_memory(i),free_memory(n)}},e.prototype.createCallImport=function(e,t,r){var n=h(e),i=u(t);try{return _BinaryenCallImport(this.ref,n,i,t&&t.length||0,r)}finally{free_memory(i),free_memory(n)}},e.prototype.createCallIndirect=function(e,t,r){var n=u(t),i=h(r);try{return _BinaryenCallIndirect(this.ref,e,n,t&&t.length||0,i)}finally{free_memory(i),free_memory(n)}},e.prototype.createUnreachable=function(){return _BinaryenUnreachable(this.ref)},e.prototype.addGlobal=function(e,t,r,n){var i=h(e);try{return _BinaryenAddGlobal(this.ref,i,t,r?1:0,n)}finally{free_memory(i)}},e.prototype.addFunction=function(e,t,r,n){var i=h(e),a=l(r);try{return _BinaryenAddFunction(this.ref,i,t,a,r?r.length:0,n)}finally{free_memory(a),free_memory(i)}},e.prototype.removeFunction=function(e){var t=h(e);try{_BinaryenRemoveFunction(this.ref,t)}finally{free_memory(t)}},e.prototype.addTemporaryFunction=function(e,t,r){this.hasTemporaryFunction=assert(!this.hasTemporaryFunction);var n=this.cachedTemporaryName;n||(this.cachedTemporaryName=n=h(""));var i=l(t);try{var a=_BinaryenAddFunctionType(this.ref,n,e,i,t?t.length:0);return _BinaryenAddFunction(this.ref,n,a,0,0,r)}finally{free_memory(i)}},e.prototype.removeTemporaryFunction=function(){this.hasTemporaryFunction=!assert(this.hasTemporaryFunction);var e=assert(this.cachedTemporaryName);_BinaryenRemoveFunction(this.ref,e),_BinaryenRemoveFunctionType(this.ref,e)},e.prototype.addFunctionExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddFunctionExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addTableExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddTableExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addMemoryExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddMemoryExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addGlobalExport=function(e,t){var r=h(e),n=h(t);try{return _BinaryenAddGlobalExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.removeExport=function(e){var t=h(e);try{_BinaryenRemoveExport(this.ref,t)}finally{free_memory(t)}},e.prototype.addFunctionImport=function(e,t,r,n){var i=h(e),a=h(t),s=h(r);try{return _BinaryenAddFunctionImport(this.ref,i,a,s,n)}finally{free_memory(s),free_memory(a),free_memory(i)}},e.prototype.addTableImport=function(e,t,r){var n=h(e),i=h(t),a=h(r);try{return _BinaryenAddTableImport(this.ref,n,i,a)}finally{free_memory(a),free_memory(i),free_memory(n)}},e.prototype.addMemoryImport=function(e,t,r){var n=h(e),i=h(t),a=h(r);try{return _BinaryenAddMemoryImport(this.ref,n,i,a)}finally{free_memory(a),free_memory(i),free_memory(n)}},e.prototype.addGlobalImport=function(e,t,r,n){var i=h(e),a=h(t),s=h(r);try{return _BinaryenAddGlobalImport(this.ref,i,a,s,n)}finally{free_memory(s),free_memory(a),free_memory(i)}},e.prototype.removeImport=function(e){var t=h(e);try{_BinaryenRemoveImport(this.ref,t)}finally{free_memory(t)}},e.prototype.setMemory=function(e,t,r,n,i){void 0===i&&(i=null);for(var s=h(i),o=r.length,c=new Array(o),u=new Array(o),d=new Array(o),_=0;_=0;--_)free_memory(c[_]);free_memory(s)}},e.prototype.setFunctionTable=function(e){var t=u(e);try{_BinaryenSetFunctionTable(this.ref,t,e.length)}finally{free_memory(t)}},e.prototype.setStart=function(e){_BinaryenSetStart(this.ref,e)},e.prototype.setOptimizeLevel=function(e){void 0===e&&(e=2),_BinaryenSetOptimizeLevel(e)},e.prototype.setShrinkLevel=function(e){void 0===e&&(e=1),_BinaryenSetShrinkLevel(e)},e.prototype.setDebugInfo=function(e){void 0===e&&(e=!1),_BinaryenSetDebugInfo(e)},e.prototype.optimize=function(e){void 0===e&&(e=0),e?_BinaryenFunctionOptimize(e,this.ref):_BinaryenModuleOptimize(this.ref)},e.prototype.runPasses=function(e,t){void 0===t&&(t=0);for(var r=e.length,n=new Array(r),i=0;i=0;--i)free_memory(n[i])}},e.prototype.precomputeFunction=function(e){var t=this.cachedPrecomputeNames;if(!t){var r=h("precompute");this.cachedPrecomputeName=r,this.cachedPrecomputeNames=t=l([r])}_BinaryenFunctionRunPasses(e,this.ref,t,1)},e.prototype.validate=function(){return 1==_BinaryenModuleValidate(this.ref)},e.prototype.interpret=function(){_BinaryenModuleInterpret(this.ref)},e.prototype.toBinary=function(e){var t=this.cachedByValue,r=h(e),n=0,i=0;try{_BinaryenModuleAllocateAndWrite(t,this.ref,r),n=d(t);var a=d(t+4);i=d(t+8);var s=new m;return s.output=function(e,t){for(var r=new Uint8Array(t),n=0;n>8&255),store(r+2,a>>16&255),store(r+3,a>>>24),r+=4}return t}function u(e){return l(e)}function h(e){if(null==e)return 0;for(var t=allocate_memory(function(e){for(var t=0,r=0,n=e.length;r=55296&&i<=57343&&r+1=55296&&a<=57343&&n+1>>6),store(r++,128|63&a)):a<=65535?(store(r++,224|a>>>12),store(r++,128|a>>>6&63),store(r++,128|63&a)):a<=2097151?(store(r++,240|a>>>18),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a)):a<=67108863?(store(r++,248|a>>>24),store(r++,128|a>>>18&63),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a)):(store(r++,252|a>>>30),store(r++,128|a>>>24&63),store(r++,128|a>>>18&63),store(r++,128|a>>>12&63),store(r++,128|a>>>6&63),store(r++,128|63&a))}return store(r,0),t}function d(e){return load(e)|load(e+1)<<8|load(e+2)<<16|load(e+3)<<24}function _(e){if(!e)return null;for(var t,r,n,i,a,s=new Array;t=load(e++);)128&t?(r=63&load(e++),192!=(224&t)?(n=63&load(e++),224==(240&t)?t=(15&t)<<12|r<<6|n:(i=63&load(e++),240==(248&t)?t=(7&t)<<18|r<<12|n<<6|i:(a=63&load(e++),t=248==(252&t)?(3&t)<<24|r<<18|n<<12|i<<6|a:(1&t)<<30|r<<24|n<<18|i<<12|a<<6|63&load(e++))),s.push(t)):s.push((31&t)<<6|r)):s.push(t);return String.fromCodePoints(s)}t.Relooper=c,t.readString=_;var m=function(){return function(){}}();t.BinaryModule=m},function(e,t,r){"use strict";var n,i=this&&this.__extends||(n=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])},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0});var a=r(0),s=r(8);t.Token=s.Token,t.Range=s.Range;var o,c=r(1);!function(e){e[e.SOURCE=0]="SOURCE",e[e.TYPE=1]="TYPE",e[e.TYPEPARAMETER=2]="TYPEPARAMETER",e[e.PARAMETER=3]="PARAMETER",e[e.SIGNATURE=4]="SIGNATURE",e[e.IDENTIFIER=5]="IDENTIFIER",e[e.ASSERTION=6]="ASSERTION",e[e.BINARY=7]="BINARY",e[e.CALL=8]="CALL",e[e.COMMA=9]="COMMA",e[e.ELEMENTACCESS=10]="ELEMENTACCESS",e[e.FALSE=11]="FALSE",e[e.FUNCTION=12]="FUNCTION",e[e.INSTANCEOF=13]="INSTANCEOF",e[e.LITERAL=14]="LITERAL",e[e.NEW=15]="NEW",e[e.NULL=16]="NULL",e[e.PARENTHESIZED=17]="PARENTHESIZED",e[e.PROPERTYACCESS=18]="PROPERTYACCESS",e[e.TERNARY=19]="TERNARY",e[e.SUPER=20]="SUPER",e[e.THIS=21]="THIS",e[e.TRUE=22]="TRUE",e[e.CONSTRUCTOR=23]="CONSTRUCTOR",e[e.UNARYPOSTFIX=24]="UNARYPOSTFIX",e[e.UNARYPREFIX=25]="UNARYPREFIX",e[e.BLOCK=26]="BLOCK",e[e.BREAK=27]="BREAK",e[e.CONTINUE=28]="CONTINUE",e[e.DO=29]="DO",e[e.EMPTY=30]="EMPTY",e[e.EXPORT=31]="EXPORT",e[e.EXPORTIMPORT=32]="EXPORTIMPORT",e[e.EXPRESSION=33]="EXPRESSION",e[e.FOR=34]="FOR",e[e.IF=35]="IF",e[e.IMPORT=36]="IMPORT",e[e.RETURN=37]="RETURN",e[e.SWITCH=38]="SWITCH",e[e.THROW=39]="THROW",e[e.TRY=40]="TRY",e[e.VARIABLE=41]="VARIABLE",e[e.VOID=42]="VOID",e[e.WHILE=43]="WHILE",e[e.CLASSDECLARATION=44]="CLASSDECLARATION",e[e.ENUMDECLARATION=45]="ENUMDECLARATION",e[e.ENUMVALUEDECLARATION=46]="ENUMVALUEDECLARATION",e[e.FIELDDECLARATION=47]="FIELDDECLARATION",e[e.FUNCTIONDECLARATION=48]="FUNCTIONDECLARATION",e[e.IMPORTDECLARATION=49]="IMPORTDECLARATION",e[e.INTERFACEDECLARATION=50]="INTERFACEDECLARATION",e[e.METHODDECLARATION=51]="METHODDECLARATION",e[e.NAMESPACEDECLARATION=52]="NAMESPACEDECLARATION",e[e.TYPEDECLARATION=53]="TYPEDECLARATION",e[e.VARIABLEDECLARATION=54]="VARIABLEDECLARATION",e[e.DECORATOR=55]="DECORATOR",e[e.EXPORTMEMBER=56]="EXPORTMEMBER",e[e.SWITCHCASE=57]="SWITCHCASE",e[e.COMMENT=58]="COMMENT"}(o=t.NodeKind||(t.NodeKind={})),t.nodeIsConstantValue=function(e){switch(e){case o.LITERAL:case o.NULL:case o.TRUE:case o.FALSE:return!0}return!1},t.nodeIsCallable=function(e){switch(e){case o.IDENTIFIER:case o.CALL:case o.ELEMENTACCESS:case o.PROPERTYACCESS:return!0}return!1},t.nodeIsGenericCallable=function(e){switch(e){case o.IDENTIFIER:case o.PROPERTYACCESS:return!0}return!1};var p=function(){function e(){this.parent=null,this.flags=a.CommonFlags.NONE}return e.prototype.is=function(e){return(this.flags&e)==e},e.prototype.isAny=function(e){return 0!=(this.flags&e)},e.prototype.set=function(e){this.flags|=e},e.createType=function(e,t,r,n){var i=new u;return i.range=n,i.name=e,e.parent=i,i.typeArguments=t,t&&xe(t,i),i.isNullable=r,i},e.createOmittedType=function(t){return e.createType(e.createIdentifierExpression("",t),null,!1,t)},e.createTypeParameter=function(e,t,r){var n=new h;return n.range=r,n.name=e,e.parent=n,n.extendsType=t,t&&(t.parent=n),n},e.createParameter=function(e,t,r,n,i){var a=new d;return a.range=i,a.name=e,e.parent=a,a.type=t,t&&(t.parent=a),a.initializer=r,r&&(r.parent=a),a.parameterKind=n,a},e.createSignature=function(e,t,r,n,i){var a=new m;return a.range=i,a.parameters=e,xe(e,a),a.returnType=t,t.parent=a,a.explicitThisType=r,r&&(r.parent=a),a.isNullable=n,a},e.createDecorator=function(e,t,r){var n=new g;return n.range=r,n.name=e,e.parent=n,n.arguments=t,t&&xe(t,n),n.decoratorKind=y(e),n},e.createComment=function(e,t,r){var n=new T;return n.range=r,n.commentKind=t,n.text=e,n},e.createIdentifierExpression=function(e,t){var r=new I;return r.range=t,r.text=e,r},e.createEmptyIdentifierExpression=function(e){var t=new I;return t.range=e,t.text="",t},e.createArrayLiteralExpression=function(e,t){var r=new A;return r.range=t,r.elementExpressions=e,function(e,t){for(var r=0,n=e.length;r0},enumerable:!0,configurable:!0}),t}(Z);t.ClassDeclaration=te;var re=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.CONTINUE,t}return i(t,e),t}(q);t.ContinueStatement=re;var ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.DO,t}return i(t,e),t}(q);t.DoStatement=ne;var ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.EMPTY,t}return i(t,e),t}(q);t.EmptyStatement=ie;var ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.ENUMDECLARATION,t}return i(t,e),t}(Z);t.EnumDeclaration=ae;var se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.ENUMVALUEDECLARATION,t}return i(t,e),t}(Z);t.EnumValueDeclaration=se;var oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.EXPORTIMPORT,t}return i(t,e),t}(p);t.ExportImportStatement=oe;var ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.EXPORTMEMBER,t}return i(t,e),t}(p);t.ExportMember=ce;var pe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.EXPORT,t}return i(t,e),t}(q);t.ExportStatement=pe;var le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.EXPRESSION,t}return i(t,e),t}(q);t.ExpressionStatement=le;var ue=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.FIELDDECLARATION,t.parameterIndex=-1,t}return i(t,e),t}($);t.FieldDeclaration=ue;var he=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.FOR,t}return i(t,e),t}(q);t.ForStatement=he;var de=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.FUNCTIONDECLARATION,t}return i(t,e),Object.defineProperty(t.prototype,"isGeneric",{get:function(){var e=this.typeParameters;return null!=e&&e.length>0},enumerable:!0,configurable:!0}),t}(Z);t.FunctionDeclaration=de;var _e=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.IF,t}return i(t,e),t}(q);t.IfStatement=_e;var me=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.IMPORTDECLARATION,t}return i(t,e),t}(Z);t.ImportDeclaration=me;var ye=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.IMPORT,t}return i(t,e),t}(q);t.ImportStatement=ye;var ge=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.INTERFACEDECLARATION,t}return i(t,e),t}(te);t.InterfaceDeclaration=ge;var Te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.METHODDECLARATION,t}return i(t,e),t}(de);t.MethodDeclaration=Te;var Ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.NAMESPACEDECLARATION,t}return i(t,e),t}(Z);t.NamespaceDeclaration=Ee;var fe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.RETURN,t}return i(t,e),t}(q);t.ReturnStatement=fe;var Ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.SWITCHCASE,t}return i(t,e),t}(p);t.SwitchCase=Ie;var ve=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.SWITCH,t}return i(t,e),t}(q);t.SwitchStatement=ve;var Ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.THROW,t}return i(t,e),t}(q);t.ThrowStatement=Ae;var Ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.TRY,t}return i(t,e),t}(q);t.TryStatement=Ce;var Ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.TYPEDECLARATION,t}return i(t,e),t}(Z);t.TypeDeclaration=Ne;var Se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.VARIABLEDECLARATION,t}return i(t,e),t}($);t.VariableDeclaration=Se;var Oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.VARIABLE,t}return i(t,e),t}(q);t.VariableStatement=Oe;var Le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.VOID,t}return i(t,e),t}(q);t.VoidStatement=Le;var be=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=o.WHILE,t}return i(t,e),t}(q);function ke(e,t){void 0===t&&(t=!1);var r=e.name.text,n=e.parent;return n&&(e.kind!=o.VARIABLEDECLARATION||n.kind!=o.VARIABLE||(n=n.parent))?n.kind==o.CLASSDECLARATION?ke(n,t)+(e.is(a.CommonFlags.STATIC)?a.STATIC_DELIMITER:a.INSTANCE_DELIMITER)+r:n.kind==o.NAMESPACEDECLARATION||n.kind==o.ENUMDECLARATION?ke(n,t)+a.STATIC_DELIMITER+r:t?r:e.range.source.internalPath+a.PATH_DELIMITER+r:r}function Re(e){return e.endsWith(".ts")&&(e=e.substring(0,e.length-3)),e}function xe(e,t){for(var r=0,n=e.length;r=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}},s=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 o,c=r(0),p=r(2),l=r(7),u=r(4),h=r(3),d=function(){return function(){}}(),_=function(){return function(){}}(),m=function(){return function(){}}();function y(e,t){switch(assert(t.length),e){case u.DecoratorKind.OPERATOR:case u.DecoratorKind.OPERATOR_BINARY:switch(t.charCodeAt(0)){case 91:if("[]"==t)return o.INDEXED_GET;if("[]="==t)return o.INDEXED_SET;break;case 123:if("{}"==t)return o.UNCHECKED_INDEXED_GET;if("{}="==t)return o.UNCHECKED_INDEXED_SET;break;case 43:if("+"==t)return o.ADD;break;case 45:if("-"==t)return o.SUB;break;case 42:if("*"==t)return o.MUL;if("**"==t)return o.POW;break;case 47:if("/"==t)return o.DIV;break;case 37:if("%"==t)return o.REM;break;case 38:if("&"==t)return o.BITWISE_AND;break;case 124:if("|"==t)return o.BITWISE_OR;break;case 94:if("^"==t)return o.BITWISE_XOR;break;case 61:if("=="==t)return o.EQ;break;case 33:if("!="==t)return o.NE;break;case 62:if(">"==t)return o.GT;if(">="==t)return o.GE;if(">>"==t)return o.BITWISE_SHR;if(">>>"==t)return o.BITWISE_SHR_U;break;case 60:if("<"==t)return o.LT;if("<="==t)return o.LE;if("<<"==t)return o.BITWISE_SHL}break;case u.DecoratorKind.OPERATOR_PREFIX:switch(t.charCodeAt(0)){case 43:if("+"==t)return o.PLUS;if("++"==t)return o.PREFIX_INC;break;case 45:if("-"==t)return o.MINUS;if("--"==t)return o.PREFIX_DEC;break;case 33:if("!"==t)return o.NOT;break;case 126:if("~"==t)return o.BITWISE_NOT}break;case u.DecoratorKind.OPERATOR_POSTFIX:switch(t.charCodeAt(0)){case 43:if("++"==t)return o.POSTFIX_INC;break;case 45:if("--"==t)return o.POSTFIX_DEC}}return o.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"}(o=t.OperatorKind||(t.OperatorKind={}));var g,T,E=new Map,f=function(e){function t(t){void 0===t&&(t=null);var r=e.call(this,t)||this;return r.diagnosticsOffset=0,r.elementsLookup=new Map,r.instancesLookup=new Map,r.typesLookup=E,r.typeAliases=new Map,r.fileLevelExports=new Map,r.moduleLevelExports=new Map,r.arrayPrototype=null,r.arrayBufferViewPrototype=null,r.stringInstance=null,r.resolvedThisExpression=null,r.resolvedElementExpression=null,r.sources=[],r}return i(t,e),t.prototype.getSource=function(e){for(var t=this.sources,r=0,n=t.length;r",o+="<"+I+">")}else if(t){var v=t.get(o);if(v)return v}}return(_=this.typesLookup.get(h))||(_=this.typesLookup.get(o))?_:(r&&this.error(p.DiagnosticCode.Cannot_find_name_0,a.name.range,o),null)},t.prototype.resolveTypeArguments=function(e,t,r,n){void 0===r&&(r=null),void 0===n&&(n=null);var i=e.length,a=t?t.length:0;if(i!=a)return a?this.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,u.Range.join(t[0].range,t[a-1].range),i.toString(10),a.toString(10)):n&&this.error(p.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range.atEnd,i.toString(10),"0"),null;for(var s=new Array(i),o=0;o"),o=new x(this,K,G,O||d,t),this.instances.set(i,o),this.program.instancesLookup.set(K,o),o},t.prototype.resolvePartial=function(e){assert(this.is(c.CommonFlags.INSTANCE));var r=assert(this.classPrototype);if(!e||!e.length)return this;var n=this.simpleName,i=l.typesToString(e),a=new t(this.program,n,r.internalName+"<"+i+">"+c.INSTANCE_DELIMITER+n,this.declaration,r,this.decoratorFlags);return a.flags=this.flags,a.operatorKind=this.operatorKind,a.classTypeArguments=e,a},t.prototype.resolveUsingTypeArguments=function(e,t,r){var n=null;return!this.is(c.CommonFlags.GENERIC)||(assert(null!=e&&0!=e.length),n=this.program.resolveTypeArguments(assert(this.declaration.typeParameters),e,t,r))?this.resolve(n,t):null},t.prototype.resolveBuiltinTypeArguments=function(e,t){assert(this.is(c.CommonFlags.BUILTIN));var r=null;if(e){var n=e.length;r=new Array(n);for(var i=0;i=0),assert(null!=e.type),e.type.toNativeType()){case h.NativeType.I32:t=this.tempI32s||(this.tempI32s=[]);break;case h.NativeType.I64:t=this.tempI64s||(this.tempI64s=[]);break;case h.NativeType.F32:t=this.tempF32s||(this.tempF32s=[]);break;case h.NativeType.F64:t=this.tempF64s||(this.tempF64s=[]);break;default:throw new Error("concrete type expected")}assert(e.index>=0),t.push(e)}},t.prototype.getAndFreeTempLocal=function(e,t){var r,n;switch(e.toNativeType()){case h.NativeType.I32:r=this.tempI32s||(this.tempI32s=[]);break;case h.NativeType.I64:r=this.tempI64s||(this.tempI64s=[]);break;case h.NativeType.F32:r=this.tempF32s||(this.tempF32s=[]);break;case h.NativeType.F64:r=this.tempF64s||(this.tempF64s=[]);break;default:throw new Error("concrete type expected")}return r.length?(n=r[r.length-1]).type=e:(n=this.addLocal(e),r.push(n)),e.is(36)&&this.flow.setLocalWrapped(n.index,t),n},t.prototype.enterBreakContext=function(){var e=this.nextBreakId++;return this.breakStack?this.breakStack.push(e):this.breakStack=[e],this.breakContext=e.toString(10)},t.prototype.leaveBreakContext=function(){assert(null!=this.breakStack);var e=this.breakStack.length;assert(e>0),this.breakStack.pop(),e>1?this.breakContext=this.breakStack[e-2].toString(10):(this.breakContext=null,this.breakStack=null)},t.prototype.finalize=function(e,t){if(this.ref=t,assert(!this.breakStack||!this.breakStack.length),this.breakStack=null,this.breakContext=null,this.tempI32s=this.tempI64s=this.tempF32s=this.tempF64s=null,this.program.options.sourceMap)for(var r=this.debugLocations,n=0,i=r.length;n",F+="<"+E+">"),(f=new w(this,x,F,e,k)).contextualTypeArguments=t,this.instances.set(E,f),this.program.instancesLookup.set(F,f);var B=0;if(k&&(B=k.currentMemoryOffset,k.members)){f.members||(f.members=new Map);try{for(var P=a(k.members.values()),M=P.next();!M.done;M=P.next()){var G=M.value;f.members.set(G.simpleName,G)}}catch(e){i={error:e}}finally{try{M&&!M.done&&(h=P.return)&&h.call(P)}finally{if(i)throw i.error}}}if(this.constructorPrototype){var K=this.constructorPrototype.resolvePartial(e);K&&(f.constructorInstance=K.resolve())}if(this.instanceMembers)try{for(var z=a(this.instanceMembers.values()),V=z.next();!V.done;V=z.next()){var H=V.value;switch(H.kind){case g.FIELD_PROTOTYPE:f.members||(f.members=new Map);var X=H.declaration;if(!X.type)throw new Error("type expected");var W=this.program.resolveType(X.type,f.contextualTypeArguments);if(!W)break;var Y=new U(H,F+c.INSTANCE_DELIMITER+H.simpleName,W,X,f);switch(W.byteSize){case 1:break;case 2:1&B&&++B;break;case 4:3&B&&(B=1+(3|B));break;case 8:7&B&&(B=1+(7|B));break;default:assert(!1)}Y.memoryOffset=B,B+=W.byteSize,f.members.set(H.simpleName,Y);break;case g.FUNCTION_PROTOTYPE:f.members||(f.members=new Map);var Q=H.resolvePartial(e);Q&&(Q.internalName=F+c.INSTANCE_DELIMITER+Q.simpleName,f.members.set(H.simpleName,Q));break;case g.PROPERTY:f.members||(f.members=new Map);var q=assert(H.getterPrototype),j=H.setterPrototype,Z=new D(this.program,H.simpleName,F+c.INSTANCE_DELIMITER+H.simpleName,this),$=q.resolvePartial(e);if(!$)return null;if($.internalName=F+c.INSTANCE_DELIMITER+$.simpleName,Z.getterPrototype=$,j){var J=j.resolvePartial(e);if(!J)return null;J.internalName=F+c.INSTANCE_DELIMITER+J.simpleName,Z.setterPrototype=J}f.members.set(H.simpleName,Z);break;default:assert(!1)}}}catch(e){d={error:e}}finally{try{V&&!V.done&&(_=z.return)&&_.call(z)}finally{if(d)throw d.error}}try{for(var ee=a(this.overloadPrototypes),te=ee.next();!te.done;te=ee.next()){var re=s(te.value,2),ne=re[0],ie=re[1];assert(ne!=o.INVALID);var ae=void 0;if(ie.is(c.CommonFlags.INSTANCE)){var se=ie.resolvePartial(e);if(!se)continue;ae=se.resolve()}else ae=ie.resolve();if(ae){var oe=f.overloads;oe||(f.overloads=oe=new Map),oe.set(ne,ae)}}}catch(e){m={error:e}}finally{try{te&&!te.done&&(y=ee.return)&&y.call(ee)}finally{if(m)throw m.error}}return f.currentMemoryOffset=B,f},t.prototype.resolveUsingTypeArguments=function(e,t,r){var n=null;if(this.is(c.CommonFlags.GENERIC)){if(assert(null!=e&&0!=e.length),!(n=this.program.resolveTypeArguments(this.declaration.typeParameters,e,t,r)))return null}else assert(null==e||!e.length);return this.resolve(n,t)},t.prototype.toString=function(){return this.simpleName},t}(v);t.ClassPrototype=P;var w=function(e){function t(t,r,n,i,o){var c,p;void 0===i&&(i=null),void 0===o&&(o=null);var l=e.call(this,t.program,r,n)||this;if(l.kind=g.CLASS,l.contextualTypeArguments=null,l.currentMemoryOffset=0,l.constructorInstance=null,l.overloads=null,l.prototype=t,l.flags=t.flags,l.decoratorFlags=t.decoratorFlags,l.typeArguments=i,l.type=t.program.options.usizeType.asClass(l),l.base=o,o){var u=o.contextualTypeArguments;if(u){l.contextualTypeArguments||(l.contextualTypeArguments=new Map);try{for(var h=a(u),d=h.next();!d.done;d=h.next()){var _=s(d.value,2),m=_[0],y=_[1];l.contextualTypeArguments.set(m,y)}}catch(e){c={error:e}}finally{try{d&&!d.done&&(p=h.return)&&p.call(h)}finally{if(c)throw c.error}}}}var T,E,f=l.prototype.declaration;if(f){var I=f.typeParameters;if(i){if((E=i.length)!=I.length)throw new Error("type argument count mismatch");if(E)for(l.contextualTypeArguments||(l.contextualTypeArguments=new Map),T=0;T=r.length)return!1;t=r[n],e-=64*(n+1)}return i64_ne(i64_and(t,i64_shl(i64_one,i64_new(e))),i64_zero)},e.prototype.setLocalWrapped=function(e,t){var r,n=-1;if(e<64){if(e<0)return;r=this.wrappedLocals}else{var i=this.wrappedLocalsExt;for(n=(e-64)/64|0,i||(this.wrappedLocalsExt=i=new Array(n+1),i.length=0);i.length<=n;)i.push(i64_new(0));r=i[n],e-=64*(n+1)}r=t?i64_or(r,i64_shl(i64_one,i64_new(e))):i64_and(r,i64_not(i64_shl(i64_one,i64_new(e)))),n>=0?this.wrappedLocalsExt[n]=r:this.wrappedLocals=r},e.prototype.inherit=function(e){this.flags|=4127&e.flags,this.wrappedLocals=e.wrappedLocals,this.wrappedLocalsExt=e.wrappedLocalsExt},e.prototype.inheritMutual=function(e,t){this.flags|=e.flags&t.flags&4127,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(h.getBinaryLeft(e),t)&&!(h.getExpressionId(r=h.getBinaryRight(e))==h.ExpressionId.Const&&h.getConstValueI32(r)>=a);case h.BinaryOp.DivU32:case h.BinaryOp.RemI32:case h.BinaryOp.RemU32:return this.canOverflow(h.getBinaryLeft(e),t)||this.canOverflow(h.getBinaryRight(e),t)}break;case h.ExpressionId.Unary:switch(h.getUnaryOp(e)){case h.UnaryOp.EqzI32:case h.UnaryOp.EqzI64:return!1;case h.UnaryOp.ClzI32:case h.UnaryOp.CtzI32:case h.UnaryOp.PopcntI32:return t.size<7}break;case h.ExpressionId.Const:var s=0;switch(h.getExpressionType(e)){case h.NativeType.I32:s=h.getConstValueI32(e);break;case h.NativeType.I64:s=h.getConstValueI64Low(e);break;case h.NativeType.F32:s=i32(h.getConstValueF32(e));break;case h.NativeType.F64:s=i32(h.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 h.ExpressionId.Load:var o=void 0;switch(h.getLoadBytes(e)){case 1:o=h.isLoadSigned(e)?l.Type.i8:l.Type.u8;break;case 2:o=h.isLoadSigned(e)?l.Type.i16:l.Type.u16;break;default:o=h.isLoadSigned(e)?l.Type.i32:l.Type.u32}return z(o,t);case h.ExpressionId.Block:if(!h.getBlockName(e)){var c=assert(h.getBlockChildCount(e)),p=h.getBlockChild(e,c-1);return this.canOverflow(p,t)}break;case h.ExpressionId.If:return this.canOverflow(h.getIfTrue(e),t)||this.canOverflow(assert(h.getIfFalse(e)),t);case h.ExpressionId.Select:return this.canOverflow(h.getSelectThen(e),t)||this.canOverflow(h.getSelectElse(e),t);case h.ExpressionId.Call:var u=this.currentFunction.program,d=assert(u.instancesLookup.get(assert(h.getCallTarget(e))));assert(d.kind==g.FUNCTION);var _=d.signature.returnType;return!d.flow.is(4096)||z(_,t);case h.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){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(3);!function(e){e[e.I8=0]="I8",e[e.I16=1]="I16",e[e.I32=2]="I32",e[e.I64=3]="I64",e[e.ISIZE=4]="ISIZE",e[e.U8=5]="U8",e[e.U16=6]="U16",e[e.U32=7]="U32",e[e.U64=8]="U64",e[e.USIZE=9]="USIZE",e[e.BOOL=10]="BOOL",e[e.F32=11]="F32",e[e.F64=12]="F64",e[e.VOID=13]="VOID"}(t.TypeKind||(t.TypeKind={})),function(e){e[e.NONE=0]="NONE",e[e.SIGNED=1]="SIGNED",e[e.UNSIGNED=2]="UNSIGNED",e[e.INTEGER=4]="INTEGER",e[e.FLOAT=8]="FLOAT",e[e.POINTER=16]="POINTER",e[e.SHORT=32]="SHORT",e[e.LONG=64]="LONG",e[e.VALUE=128]="VALUE",e[e.REFERENCE=256]="REFERENCE",e[e.NULLABLE=512]="NULLABLE"}(t.TypeFlags||(t.TypeFlags={}));var i=function(){function e(e,t,r){this.cachedNullableType=null,this.kind=e,this.flags=t,this.size=r,this.byteSize=ceil(r/8),this.classReference=null,this.signatureReference=null,this.nonNullableType=this}return Object.defineProperty(e.prototype,"intType",{get:function(){switch(this.kind){case 0:return e.i8;case 1:return e.i16;case 11:case 2:return e.i32;case 12:case 3:return e.i64;case 4:return 64==this.size?e.isize64:e.isize32;case 5:return e.u8;case 6:return e.u16;case 7:return e.u32;case 8:return e.u64;case 9:return 64==this.size?e.usize64:e.usize32;case 10:default:return e.i32}},enumerable:!0,configurable:!0}),e.prototype.computeSmallIntegerShift=function(e){return e.size-this.size},e.prototype.computeSmallIntegerMask=function(e){var t=this.is(2)?this.size:this.size-1;return-1>>>e.size-t},e.prototype.is=function(e){return(this.flags&e)==e},e.prototype.isAny=function(e){return 0!=(this.flags&e)},e.prototype.asClass=function(t){assert(9==this.kind&&!this.classReference);var r=new e(this.kind,-129&this.flags|256,this.size);return r.classReference=t,r},e.prototype.asFunction=function(t){assert(7==this.kind&&!this.signatureReference);var r=new e(this.kind,-129&this.flags|256,this.size);return r.signatureReference=t,r},e.prototype.asNullable=function(){return assert(this.is(256)),this.cachedNullableType||(assert(!this.is(512)),this.cachedNullableType=new e(this.kind,512|this.flags,this.size),this.cachedNullableType.nonNullableType=this,this.cachedNullableType.classReference=this.classReference,this.cachedNullableType.signatureReference=this.signatureReference),this.cachedNullableType},e.prototype.isAssignableTo=function(e,t){var r,n,i,a;if(void 0===t&&(t=!1),this.is(256)){if(e.is(256)&&(!this.is(512)||e.is(512)))if(r=this.classReference){if(n=e.classReference)return r.isAssignableTo(n)}else if((i=this.signatureReference)&&(a=e.signatureReference))return i.isAssignableTo(a)}else if(!e.is(256))if(this.is(4))if(e.is(4)){if(!t||this.is(1)==e.is(1))return this.size<=e.size}else{if(11==e.kind)return this.size<=23;if(12==e.kind)return this.size<=52}else if(this.is(8)&&e.is(8))return this.size<=e.size;return!1},e.commonCompatible=function(e,t,r){return t.isAssignableTo(e,r)?e:e.isAssignableTo(t,r)?t:null},e.prototype.toString=function(e){if(void 0===e&&(e=!1),!e&&this.is(256)){var t=this.classReference;if(t)return this.is(512)?t.toString()+" | null":t.toString();var r=this.signatureReference;if(r)return this.is(512)?"("+r.toString(!0)+") | null":r.toString(!0);assert(!1)}switch(this.kind){case 0:return"i8";case 1:return"i16";case 2:return"i32";case 3:return"i64";case 4:return"isize";case 5:return"u8";case 6:return"u16";case 7:return"u32";case 8:return"u64";case 9:return"usize";case 10:return"bool";case 11:return"f32";case 12:return"f64";default:assert(!1);case 13:return"void"}},e.prototype.toNativeType=function(){switch(this.kind){default:return n.NativeType.I32;case 3:case 8:return n.NativeType.I64;case 4:case 9:return 64==this.size?n.NativeType.I64:n.NativeType.I32;case 11:return n.NativeType.F32;case 12:return n.NativeType.F64;case 13:return n.NativeType.None}},e.prototype.toNativeZero=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(0);case 4:case 9:if(64!=this.size)return e.createI32(0);case 3:case 8:return e.createI64(0);case 11:return e.createF32(0);case 12:return e.createF64(0)}},e.prototype.toNativeOne=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(1);case 4:case 9:if(64!=this.size)return e.createI32(1);case 3:case 8:return e.createI64(1);case 11:return e.createF32(1);case 12:return e.createF64(1)}},e.prototype.toNativeNegOne=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(-1);case 4:case 9:if(64!=this.size)return e.createI32(-1);case 3:case 8:return e.createI64(-1,-1);case 11:return e.createF32(-1);case 12:return e.createF64(-1)}},e.prototype.toSignatureString=function(){switch(this.kind){default:return"i";case 3:case 8:return"I";case 4:case 9:return 64==this.size?"I":"i";case 11:return"f";case 12:return"F";case 13:return"v"}},e.i8=new e(0,165,8),e.i16=new e(1,165,16),e.i32=new e(2,133,32),e.i64=new e(3,197,64),e.isize32=new e(4,149,32),e.isize64=new e(4,213,64),e.u8=new e(5,166,8),e.u16=new e(6,166,16),e.u32=new e(7,134,32),e.u64=new e(8,198,64),e.usize32=new e(9,150,32),e.usize64=new e(9,214,64),e.bool=new e(10,166,1),e.f32=new e(11,137,32),e.f64=new e(12,201,64),e.void=new e(13,0,0),e}();t.Type=i,t.typesToNativeTypes=function(e){for(var t=e.length,r=new Array(t),n=0;ne?t[e]:o(e)},e.prototype.isAssignableTo=function(e){var t=this.thisType,r=e.thisType;if(t){if(!r||!t.isAssignableTo(r))return!1}else if(r)return!1;if(this.hasRest!=e.hasRest)return!1;var n=this.parameterTypes,i=e.parameterTypes,a=n.length;if(a!=i.length)return!1;for(var s=0;s=p&&u!=l?t.push("?: "):t.push(": "),t.push(i[u].toString());return t.push(") => "),t.push(this.returnType.toString()),t.join("")},e}();t.Signature=a;var s=null;function o(e){s||(s=[]);for(var t=s.length;t<=e;++t)s.push("arg$"+t.toString(10));return s[e-1]}t.getDefaultParameterName=o},function(e,t,r){"use strict";var n,i=this&&this.__extends||(n=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])},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0});var a,s,o=r(2),c=r(4),p=r(1);function l(e){switch(assert(e.length),e.charCodeAt(0)){case 97:switch(e){case"abstract":return a.ABSTRACT;case"as":return a.AS;case"async":return a.ASYNC;case"await":return a.AWAIT}break;case 98:switch(e){case"break":return a.BREAK}break;case 99:switch(e){case"case":return a.CASE;case"catch":return a.CATCH;case"class":return a.CLASS;case"continue":return a.CONTINUE;case"const":return a.CONST;case"constructor":return a.CONSTRUCTOR}break;case 100:switch(e){case"debugger":return a.DEBUGGER;case"declare":return a.DECLARE;case"default":return a.DEFAULT;case"delete":return a.DELETE;case"do":return a.DO}break;case 101:switch(e){case"else":return a.ELSE;case"enum":return a.ENUM;case"export":return a.EXPORT;case"extends":return a.EXTENDS}break;case 102:switch(e){case"false":return a.FALSE;case"finally":return a.FINALLY;case"for":return a.FOR;case"from":return a.FROM;case"function":return a.FUNCTION}break;case 103:switch(e){case"get":return a.GET}break;case 105:switch(e){case"if":return a.IF;case"implements":return a.IMPLEMENTS;case"import":return a.IMPORT;case"in":return a.IN;case"instanceof":return a.INSTANCEOF;case"interface":return a.INTERFACE;case"is":return a.IS}break;case 107:switch(e){case"keyof":return a.KEYOF}break;case 108:switch(e){case"let":return a.LET}break;case 109:switch(e){case"module":return a.MODULE}break;case 110:switch(e){case"namespace":return a.NAMESPACE;case"new":return a.NEW;case"null":return a.NULL}break;case 111:switch(e){case"of":return a.OF}break;case 112:switch(e){case"package":return a.PACKAGE;case"private":return a.PRIVATE;case"protected":return a.PROTECTED;case"public":return a.PUBLIC}break;case 114:switch(e){case"readonly":return a.READONLY;case"return":return a.RETURN}break;case 115:switch(e){case"set":return a.SET;case"static":return a.STATIC;case"super":return a.SUPER;case"switch":return a.SWITCH}break;case 116:switch(e){case"this":return a.THIS;case"throw":return a.THROW;case"true":return a.TRUE;case"try":return a.TRY;case"type":return a.TYPE;case"typeof":return a.TYPEOF}break;case 118:switch(e){case"var":return a.VAR;case"void":return a.VOID}break;case 119:switch(e){case"while":return a.WHILE;case"with":return a.WITH}break;case 121:switch(e){case"yield":return a.YIELD}}return a.INVALID}function u(e){switch(e){case a.ABSTRACT:case a.AS:case a.CONSTRUCTOR:case a.DECLARE:case a.DELETE:case a.FROM:case a.FOR:case a.GET:case a.IS:case a.KEYOF:case a.MODULE:case a.NAMESPACE:case a.READONLY:case a.SET:case a.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"}(a=t.Token||(t.Token={})),function(e){e[e.DEFAULT=0]="DEFAULT",e[e.PREFER=1]="PREFER",e[e.ALWAYS=2]="ALWAYS"}(s=t.IdentifierHandling||(t.IdentifierHandling={})),t.tokenFromKeyword=l,t.tokenIsAlsoIdentifier=u,t.operatorTokenToString=function(e){switch(e){case a.DELETE:return"delete";case a.IN:return"in";case a.INSTANCEOF:return"instanceof";case a.NEW:return"new";case a.TYPEOF:return"typeof";case a.VOID:return"void";case a.YIELD:return"yield";case a.DOT_DOT_DOT:return"...";case a.COMMA:return",";case a.LESSTHAN:return"<";case a.GREATERTHAN:return">";case a.LESSTHAN_EQUALS:return"<=";case a.GREATERTHAN_EQUALS:return">=";case a.EQUALS_EQUALS:return"==";case a.EXCLAMATION_EQUALS:return"!=";case a.EQUALS_EQUALS_EQUALS:return"===";case a.EXCLAMATION_EQUALS_EQUALS:return"!==";case a.PLUS:return"+";case a.MINUS:return"-";case a.ASTERISK_ASTERISK:return"**";case a.ASTERISK:return"*";case a.SLASH:return"/";case a.PERCENT:return"%";case a.PLUS_PLUS:return"++";case a.MINUS_MINUS:return"--";case a.LESSTHAN_LESSTHAN:return"<<";case a.GREATERTHAN_GREATERTHAN:return">>";case a.GREATERTHAN_GREATERTHAN_GREATERTHAN:return">>>";case a.AMPERSAND:return"&";case a.BAR:return"|";case a.CARET:return"^";case a.EXCLAMATION:return"!";case a.TILDE:return"~";case a.AMPERSAND_AMPERSAND:return"&&";case a.BAR_BAR:return"||";case a.EQUALS:return"=";case a.PLUS_EQUALS:return"+=";case a.MINUS_EQUALS:return"-=";case a.ASTERISK_EQUALS:return"*=";case a.ASTERISK_ASTERISK_EQUALS:return"**=";case a.SLASH_EQUALS:return"/=";case a.PERCENT_EQUALS:return"%=";case a.LESSTHAN_LESSTHAN_EQUALS:return"<<=";case a.GREATERTHAN_GREATERTHAN_EQUALS:return">>=";case a.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:return">>>=";case a.AMPERSAND_EQUALS:return"&=";case a.BAR_EQUALS:return"|=";case a.CARET_EQUALS:return"^=";default:return assert(!1),""}};var h=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=h;var d=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,r)||this;n.end=0,n.pos=0,n.token=-1,n.tokenPos=0,n.nextToken=-1,n.nextTokenPos=0,n.nextTokenOnNewLine=!1,n.onComment=null,n.source=t,n.pos=0,n.end=t.text.length,n.diagnostics=r||new Array;var i=t.text;if(n.pos1&&this.pos2&&this.pos1&&this.pos1&&this.pos1&&this.pos2&&this.pos1&&this.pos1&&this.pos1&&this.pos2&&this.pos+11&&this.pos1&&this.pos2&&this.pos1&&this.pos2&&this.pos1&&this.pos2&&this.pos3&&this.pos1&&this.pos1&&this.posi;)if(p.isLineBreak(n.charCodeAt(this.tokenPos))){this.nextTokenOnNewLine=!0;break}this.pos=i,this.token=a,this.tokenPos=o}return this.nextToken},t.prototype.skipIdentifier=function(){return this.skip(a.IDENTIFIER,s.PREFER)},t.prototype.skipIdentifierName=function(){return this.skip(a.IDENTIFIER,s.ALWAYS)},t.prototype.skip=function(e,t){void 0===t&&(t=s.DEFAULT);var r=this.pos,n=this.token,i=this.tokenPos,o=i32.MAX_VALUE;switch(e){case a.GREATERTHAN:o=1}return this.token=this.unsafeNext(t,o),this.token==e?(this.nextToken=-1,!0):(this.pos=r,this.token=n,this.tokenPos=i,!1)},t.prototype.mark=function(){var e;return m?(e=m,m=null):e=new _,e.pos=this.pos,e.token=this.token,e.tokenPos=this.tokenPos,e},t.prototype.discard=function(e){m=e},t.prototype.reset=function(e){this.pos=e.pos,this.token=e.token,this.tokenPos=e.tokenPos,this.nextToken=-1},t.prototype.range=function(e,t){return void 0===e&&(e=-1),void 0===t&&(t=-1),e<0?(e=this.tokenPos,t=this.pos):t<0&&(t=e),new h(this.source,e,t)},t.prototype.readIdentifier=function(){for(var e=this.source.text,t=this.pos;++this.pos=this.end){n+=e.substring(r,this.pos),this.error(o.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(p.isLineBreak(i)){n+=e.substring(r,this.pos),this.error(o.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(o.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(o.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(p.isLineBreak(n)){this.error(o.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&&s<=57)r=i64_add(i64_mul(r,n),i64_new(s-48,0));else if(s>=65&&s<=70)r=i64_add(i64_mul(r,n),i64_new(10+s-65,0));else if(s>=97&&s<=102)r=i64_add(i64_mul(r,n),i64_new(10+s-97,0));else{if(95!=s)break;i==a&&this.error(i==t?o.DiagnosticCode.Numeric_separators_are_not_allowed_here:o.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}this.pos=a+1}return this.pos==t?this.error(o.DiagnosticCode.Hexadecimal_digit_expected,this.range(t)):i==this.pos&&this.error(o.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&&s<=57)r=i64_add(i64_mul(r,n),i64_new(s-48,0));else{if(95!=s)break;i==a&&this.error(i==t?o.DiagnosticCode.Numeric_separators_are_not_allowed_here:o.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}this.pos=a+1}return this.pos==t?this.error(o.DiagnosticCode.Digit_expected,this.range(t)):i==this.pos&&this.error(o.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&&s<=55)r=i64_add(i64_mul(r,n),i64_new(s-48,0));else{if(95!=s)break;i==a&&this.error(i==t?o.DiagnosticCode.Numeric_separators_are_not_allowed_here:o.DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,this.range(a)),i=a+1}++this.pos}return this.pos==t?this.error(o.DiagnosticCode.Octal_digit_expected,this.range(t)):i==this.pos&&this.error(o.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(o.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(o.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(o.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(o.DiagnosticCode.Unexpected_end_of_text,this.range(e,this.end)),n=!0):125==i.charCodeAt(this.pos)?++this.pos:(this.error(o.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}(o.DiagnosticEmitter);t.Tokenizer=d;var _=function(){return function(){}}();t.State=_;var m=null},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.Operation_not_supported=100]="Operation_not_supported",e[e.Operation_is_unsafe=101]="Operation_is_unsafe",e[e.Conversion_from_type_0_to_1_requires_an_explicit_cast=200]="Conversion_from_type_0_to_1_requires_an_explicit_cast",e[e.Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit=201]="Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit",e[e.Type_0_cannot_be_changed_to_type_1=202]="Type_0_cannot_be_changed_to_type_1",e[e.Type_0_cannot_be_reinterpreted_as_type_1=203]="Type_0_cannot_be_reinterpreted_as_type_1",e[e.Basic_type_0_cannot_be_nullable=204]="Basic_type_0_cannot_be_nullable",e[e.Cannot_export_a_mutable_global=205]="Cannot_export_a_mutable_global",e[e.Compiling_constant_with_non_constant_initializer_as_mutable=206]="Compiling_constant_with_non_constant_initializer_as_mutable",e[e.Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa=207]="Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa",e[e.Unmanaged_classes_cannot_implement_interfaces=208]="Unmanaged_classes_cannot_implement_interfaces",e[e.Invalid_regular_expression_flags=209]="Invalid_regular_expression_flags",e[e.Implementation_0_must_match_the_signature_1=210]="Implementation_0_must_match_the_signature_1",e[e.Class_0_is_sealed_and_cannot_be_extended=211]="Class_0_is_sealed_and_cannot_be_extended",e[e.Decorator_0_is_not_valid_here=212]="Decorator_0_is_not_valid_here",e[e.Duplicate_decorator=213]="Duplicate_decorator",e[e.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf=214]="An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf",e[e.Optional_parameter_must_have_an_initializer=215]="Optional_parameter_must_have_an_initializer",e[e.Unterminated_string_literal=1002]="Unterminated_string_literal",e[e.Identifier_expected=1003]="Identifier_expected",e[e._0_expected=1005]="_0_expected",e[e.A_file_cannot_have_a_reference_to_itself=1006]="A_file_cannot_have_a_reference_to_itself",e[e.Trailing_comma_not_allowed=1009]="Trailing_comma_not_allowed",e[e.Unexpected_token=1012]="Unexpected_token",e[e.A_rest_parameter_must_be_last_in_a_parameter_list=1014]="A_rest_parameter_must_be_last_in_a_parameter_list",e[e.Parameter_cannot_have_question_mark_and_initializer=1015]="Parameter_cannot_have_question_mark_and_initializer",e[e.A_required_parameter_cannot_follow_an_optional_parameter=1016]="A_required_parameter_cannot_follow_an_optional_parameter",e[e.Enum_member_must_have_initializer=1061]="Enum_member_must_have_initializer",e[e.Statements_are_not_allowed_in_ambient_contexts=1036]="Statements_are_not_allowed_in_ambient_contexts",e[e.Initializers_are_not_allowed_in_ambient_contexts=1039]="Initializers_are_not_allowed_in_ambient_contexts",e[e._0_modifier_cannot_be_used_here=1042]="_0_modifier_cannot_be_used_here",e[e.A_rest_parameter_cannot_be_optional=1047]="A_rest_parameter_cannot_be_optional",e[e.A_rest_parameter_cannot_have_an_initializer=1048]="A_rest_parameter_cannot_have_an_initializer",e[e.A_set_accessor_must_have_exactly_one_parameter=1049]="A_set_accessor_must_have_exactly_one_parameter",e[e.A_set_accessor_parameter_cannot_have_an_initializer=1052]="A_set_accessor_parameter_cannot_have_an_initializer",e[e.A_get_accessor_cannot_have_parameters=1054]="A_get_accessor_cannot_have_parameters",e[e.Type_parameters_cannot_appear_on_a_constructor_declaration=1092]="Type_parameters_cannot_appear_on_a_constructor_declaration",e[e.Type_annotation_cannot_appear_on_a_constructor_declaration=1093]="Type_annotation_cannot_appear_on_a_constructor_declaration",e[e.An_accessor_cannot_have_type_parameters=1094]="An_accessor_cannot_have_type_parameters",e[e.A_set_accessor_cannot_have_a_return_type_annotation=1095]="A_set_accessor_cannot_have_a_return_type_annotation",e[e.Type_parameter_list_cannot_be_empty=1098]="Type_parameter_list_cannot_be_empty",e[e.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement=1104]="A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement",e[e.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement=1105]="A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement",e[e.A_return_statement_can_only_be_used_within_a_function_body=1108]="A_return_statement_can_only_be_used_within_a_function_body",e[e.Expression_expected=1109]="Expression_expected",e[e.Type_expected=1110]="Type_expected",e[e.A_default_clause_cannot_appear_more_than_once_in_a_switch_statement=1113]="A_default_clause_cannot_appear_more_than_once_in_a_switch_statement",e[e.Duplicate_label_0=1114]="Duplicate_label_0",e[e.Octal_literals_are_not_allowed_in_strict_mode=1121]="Octal_literals_are_not_allowed_in_strict_mode",e[e.Digit_expected=1124]="Digit_expected",e[e.Hexadecimal_digit_expected=1125]="Hexadecimal_digit_expected",e[e.Unexpected_end_of_text=1126]="Unexpected_end_of_text",e[e.Invalid_character=1127]="Invalid_character",e[e._case_or_default_expected=1130]="_case_or_default_expected",e[e.A_declare_modifier_cannot_be_used_in_an_already_ambient_context=1038]="A_declare_modifier_cannot_be_used_in_an_already_ambient_context",e[e.Type_argument_expected=1140]="Type_argument_expected",e[e.String_literal_expected=1141]="String_literal_expected",e[e.Line_break_not_permitted_here=1142]="Line_break_not_permitted_here",e[e.Declaration_expected=1146]="Declaration_expected",e[e._const_declarations_must_be_initialized=1155]="_const_declarations_must_be_initialized",e[e.Unterminated_regular_expression_literal=1161]="Unterminated_regular_expression_literal",e[e.Interface_declaration_cannot_have_implements_clause=1176]="Interface_declaration_cannot_have_implements_clause",e[e.Binary_digit_expected=1177]="Binary_digit_expected",e[e.Octal_digit_expected=1178]="Octal_digit_expected",e[e.An_implementation_cannot_be_declared_in_ambient_contexts=1183]="An_implementation_cannot_be_declared_in_ambient_contexts",e[e.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive=1198]="An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive",e[e.Unterminated_Unicode_escape_sequence=1199]="Unterminated_Unicode_escape_sequence",e[e.Decorators_are_not_valid_here=1206]="Decorators_are_not_valid_here",e[e._abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration=1242]="_abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration",e[e.A_class_may_only_extend_another_class=1311]="A_class_may_only_extend_another_class",e[e.A_parameter_property_cannot_be_declared_using_a_rest_parameter=1317]="A_parameter_property_cannot_be_declared_using_a_rest_parameter",e[e.Duplicate_identifier_0=2300]="Duplicate_identifier_0",e[e.Cannot_find_name_0=2304]="Cannot_find_name_0",e[e.Module_0_has_no_exported_member_1=2305]="Module_0_has_no_exported_member_1",e[e.Generic_type_0_requires_1_type_argument_s=2314]="Generic_type_0_requires_1_type_argument_s",e[e.Type_0_is_not_generic=2315]="Type_0_is_not_generic",e[e.Type_0_is_not_assignable_to_type_1=2322]="Type_0_is_not_assignable_to_type_1",e[e.Index_signature_is_missing_in_type_0=2329]="Index_signature_is_missing_in_type_0",e[e._this_cannot_be_referenced_in_current_location=2332]="_this_cannot_be_referenced_in_current_location",e[e._super_can_only_be_referenced_in_a_derived_class=2335]="_super_can_only_be_referenced_in_a_derived_class",e[e.Property_0_does_not_exist_on_type_1=2339]="Property_0_does_not_exist_on_type_1",e[e.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures=2349]="Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures",e[e.Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature=2351]="Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature",e[e.A_function_whose_declared_type_is_not_void_must_return_a_value=2355]="A_function_whose_declared_type_is_not_void_must_return_a_value",e[e.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access=2357]="The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access",e[e.The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access=2364]="The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access",e[e.Operator_0_cannot_be_applied_to_types_1_and_2=2365]="Operator_0_cannot_be_applied_to_types_1_and_2",e[e._get_and_set_accessor_must_have_the_same_type=2380]="_get_and_set_accessor_must_have_the_same_type",e[e.Constructor_implementation_is_missing=2390]="Constructor_implementation_is_missing",e[e.Function_implementation_is_missing_or_not_immediately_following_the_declaration=2391]="Function_implementation_is_missing_or_not_immediately_following_the_declaration",e[e.Multiple_constructor_implementations_are_not_allowed=2392]="Multiple_constructor_implementations_are_not_allowed",e[e.Duplicate_function_implementation=2393]="Duplicate_function_implementation",e[e.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local=2395]="Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local",e[e.Type_0_has_no_property_1=2460]="Type_0_has_no_property_1",e[e.The_0_operator_cannot_be_applied_to_type_1=2469]="The_0_operator_cannot_be_applied_to_type_1",e[e.Export_declaration_conflicts_with_exported_declaration_of_0=2484]="Export_declaration_conflicts_with_exported_declaration_of_0",e[e.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property=2540]="Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property",e[e.The_target_of_an_assignment_must_be_a_variable_or_a_property_access=2541]="The_target_of_an_assignment_must_be_a_variable_or_a_property_access",e[e.Index_signature_in_type_0_only_permits_reading=2542]="Index_signature_in_type_0_only_permits_reading",e[e.Expected_0_arguments_but_got_1=2554]="Expected_0_arguments_but_got_1",e[e.Expected_at_least_0_arguments_but_got_1=2555]="Expected_at_least_0_arguments_but_got_1",e[e.Expected_0_type_arguments_but_got_1=2558]="Expected_0_type_arguments_but_got_1",e[e.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums=2651]="A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums",e[e.Namespace_0_has_no_exported_member_1=2694]="Namespace_0_has_no_exported_member_1",e[e.File_0_not_found=6054]="File_0_not_found",e[e.Numeric_separators_are_not_allowed_here=6188]="Numeric_separators_are_not_allowed_here",e[e.Multiple_consecutive_numeric_separators_are_not_permitted=6189]="Multiple_consecutive_numeric_separators_are_not_permitted"}(t.DiagnosticCode||(t.DiagnosticCode={})),t.diagnosticCodeToString=function(e){switch(e){case 100:return"Operation not supported.";case 101:return"Operation is unsafe.";case 200:return"Conversion from type '{0}' to '{1}' requires an explicit cast.";case 201:return"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.";case 202:return"Type '{0}' cannot be changed to type '{1}'.";case 203:return"Type '{0}' cannot be reinterpreted as type '{1}'.";case 204:return"Basic type '{0}' cannot be nullable.";case 205:return"Cannot export a mutable global.";case 206:return"Compiling constant with non-constant initializer as mutable.";case 207:return"Unmanaged classes cannot extend managed classes and vice-versa.";case 208:return"Unmanaged classes cannot implement interfaces.";case 209:return"Invalid regular expression flags.";case 210:return"Implementation '{0}' must match the signature '{1}'.";case 211:return"Class '{0}' is sealed and cannot be extended.";case 212:return"Decorator '{0}' is not valid here.";case 213:return"Duplicate decorator.";case 214:return"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.";case 215:return"Optional parameter must have an initializer.";case 1002:return"Unterminated string literal.";case 1003:return"Identifier expected.";case 1005:return"'{0}' expected.";case 1006:return"A file cannot have a reference to itself.";case 1009:return"Trailing comma not allowed.";case 1012:return"Unexpected token.";case 1014:return"A rest parameter must be last in a parameter list.";case 1015:return"Parameter cannot have question mark and initializer.";case 1016:return"A required parameter cannot follow an optional parameter.";case 1061:return"Enum member must have initializer.";case 1036:return"Statements are not allowed in ambient contexts.";case 1039:return"Initializers are not allowed in ambient contexts.";case 1042:return"'{0}' modifier cannot be used here.";case 1047:return"A rest parameter cannot be optional.";case 1048:return"A rest parameter cannot have an initializer.";case 1049:return"A 'set' accessor must have exactly one parameter.";case 1052:return"A 'set' accessor parameter cannot have an initializer.";case 1054:return"A 'get' accessor cannot have parameters.";case 1092:return"Type parameters cannot appear on a constructor declaration.";case 1093:return"Type annotation cannot appear on a constructor declaration.";case 1094:return"An accessor cannot have type parameters.";case 1095:return"A 'set' accessor cannot have a return type annotation.";case 1098:return"Type parameter list cannot be empty.";case 1104:return"A 'continue' statement can only be used within an enclosing iteration statement.";case 1105:return"A 'break' statement can only be used within an enclosing iteration or switch statement.";case 1108:return"A 'return' statement can only be used within a function body.";case 1109:return"Expression expected.";case 1110:return"Type expected.";case 1113:return"A 'default' clause cannot appear more than once in a 'switch' statement.";case 1114:return"Duplicate label '{0}'.";case 1121:return"Octal literals are not allowed in strict mode.";case 1124:return"Digit expected.";case 1125:return"Hexadecimal digit expected.";case 1126:return"Unexpected end of text.";case 1127:return"Invalid character.";case 1130:return"'case' or 'default' expected.";case 1038:return"A 'declare' modifier cannot be used in an already ambient context.";case 1140:return"Type argument expected.";case 1141:return"String literal expected.";case 1142:return"Line break not permitted here.";case 1146:return"Declaration expected.";case 1155:return"'const' declarations must be initialized.";case 1161:return"Unterminated regular expression literal.";case 1176:return"Interface declaration cannot have 'implements' clause.";case 1177:return"Binary digit expected.";case 1178:return"Octal digit expected.";case 1183:return"An implementation cannot be declared in ambient contexts.";case 1198:return"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.";case 1199:return"Unterminated Unicode escape sequence.";case 1206:return"Decorators are not valid here.";case 1242:return"'abstract' modifier can only appear on a class, method, or property declaration.";case 1311:return"A class may only extend another class.";case 1317:return"A parameter property cannot be declared using a rest parameter.";case 2300:return"Duplicate identifier '{0}'.";case 2304:return"Cannot find name '{0}'.";case 2305:return"Module '{0}' has no exported member '{1}'.";case 2314:return"Generic type '{0}' requires {1} type argument(s).";case 2315:return"Type '{0}' is not generic.";case 2322:return"Type '{0}' is not assignable to type '{1}'.";case 2329:return"Index signature is missing in type '{0}'.";case 2332:return"'this' cannot be referenced in current location.";case 2335:return"'super' can only be referenced in a derived class.";case 2339:return"Property '{0}' does not exist on type '{1}'.";case 2349:return"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.";case 2351:return"Cannot use 'new' with an expression whose type lacks a construct signature.";case 2355:return"A function whose declared type is not 'void' must return a value.";case 2357:return"The operand of an increment or decrement operator must be a variable or a property access.";case 2364:return"The left-hand side of an assignment expression must be a variable or a property access.";case 2365:return"Operator '{0}' cannot be applied to types '{1}' and '{2}'.";case 2380:return"'get' and 'set' accessor must have the same type.";case 2390:return"Constructor implementation is missing.";case 2391:return"Function implementation is missing or not immediately following the declaration.";case 2392:return"Multiple constructor implementations are not allowed.";case 2393:return"Duplicate function implementation.";case 2395:return"Individual declarations in merged declaration '{0}' must be all exported or all local.";case 2460:return"Type '{0}' has no property '{1}'.";case 2469:return"The '{0}' operator cannot be applied to type '{1}'.";case 2484:return"Export declaration conflicts with exported declaration of '{0}'.";case 2540:return"Cannot assign to '{0}' because it is a constant or a read-only property.";case 2541:return"The target of an assignment must be a variable or a property access.";case 2542:return"Index signature in type '{0}' only permits reading.";case 2554:return"Expected {0} arguments, but got {1}.";case 2555:return"Expected at least {0} arguments, but got {1}.";case 2558:return"Expected {0} type arguments, but got {1}.";case 2651:return"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.";case 2694:return"Namespace '{0}' has no exported member '{1}'.";case 6054:return"File '{0}' not found.";case 6188:return"Numeric separators are not allowed here.";case 6189:return"Multiple consecutive numeric separators are not permitted.";default:return""}}},function(e,t,r){"use strict";var n,i=this&&this.__extends||(n=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])},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),a=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 s,o=r(22),c=r(2),p=r(3),l=r(0),u=r(5),h=r(8),d=r(4),_=r(7),m=r(1);!function(e){e[e.WASM32=0]="WASM32",e[e.WASM64=1]="WASM64"}(s=t.Target||(t.Target={}));var y=function(){function e(){this.target=s.WASM32,this.noTreeShaking=!1,this.noAssert=!1,this.noMemory=!1,this.importMemory=!1,this.importTable=!1,this.memoryBase=0,this.sourceMap=!1,this.globalAliases=null,this.features=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?p.NativeType.I64:p.NativeType.I32},enumerable:!0,configurable:!0}),e.prototype.hasFeature=function(e){return 0!=(this.features&e)},e}();t.Options=y,function(e){e[e.NONE=0]="NONE",e[e.SIGN_EXTENSION=1]="SIGN_EXTENSION",e[e.MUTABLE_GLOBAL=2]="MUTABLE_GLOBAL"}(t.Feature||(t.Feature={})),function(e){e[e.NONE=0]="NONE",e[e.IMPLICIT=1]="IMPLICIT",e[e.EXPLICIT=2]="EXPLICIT"}(t.ConversionKind||(t.ConversionKind={})),function(e){e[e.NONE=0]="NONE",e[e.WRAP=1]="WRAP"}(t.WrapMode||(t.WrapMode={}));var g=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,t.diagnostics)||this;return n.outerFunction=null,n.currentEnum=null,n.currentType=_.Type.void,n.startFunctionBody=[],n.memorySegments=[],n.stringSegments=new Map,n.functionTable=[],n.argcVar=0,n.argcSet=0,n.f32ModInstance=null,n.f64ModInstance=null,n.f32PowInstance=null,n.f64PowInstance=null,n.program=t,r||(r=new y),n.options=r,n.memoryOffset=i64_new(max(r.memoryBase,8)),n.module=p.Module.create(),n}return i(t,e),t.compile=function(e,r){return void 0===r&&(r=null),new t(e,r).compile()},t.prototype.compile=function(){var e=this.options,t=this.module,r=this.program;r.initialize(e);var n=assert(r.elementsLookup.get("start"));assert(n.kind==u.ElementKind.FUNCTION_PROTOTYPE);var i=new u.Function(n,n.internalName,new _.Signature([],_.Type.void));this.startFunction=i,this.currentFunction=i;for(var a=r.sources,s=0,o=a.length;s"),!1;e.type=this.currentType}else assert(!1);if(e.is(l.CommonFlags.AMBIENT|l.CommonFlags.BUILTIN))return!0;var a=e.type.toNativeType(),s=e.isAny(l.CommonFlags.CONST)||e.is(l.CommonFlags.STATIC|l.CommonFlags.READONLY);if(e.is(l.CommonFlags.AMBIENT))return s||this.options.hasFeature(2)?(e.set(l.CommonFlags.MODULE_IMPORT),t.addGlobalImport(e.internalName,e.parent?e.parent.simpleName:"env",e.simpleName,a),e.set(l.CommonFlags.COMPILED),!0):(this.error(c.DiagnosticCode.Operation_not_supported,assert(r).range),!1);var o=!1;e.is(l.CommonFlags.INLINED)?n=this.compileInlineConstant(e,e.type,!0):r&&r.initializer?(n||(n=this.compileExpression(r.initializer,e.type,1,1)),p.getExpressionId(n)!=p.ExpressionId.Const&&(s?(n=this.precomputeExpressionRef(n),p.getExpressionId(n)!=p.ExpressionId.Const&&(this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,r.range),o=!0)):o=!0)):n=e.type.toNativeZero(t);var u=e.internalName;if(o)t.addGlobal(u,a,!0,e.type.toNativeZero(t)),this.startFunctionBody.push(t.createSetGlobal(u,n));else if(s){switch(p.getExpressionType(n)){case p.NativeType.I32:e.constantValueKind=1,e.constantIntegerValue=i64_new(p.getConstValueI32(n),0);break;case p.NativeType.I64:e.constantValueKind=1,e.constantIntegerValue=i64_new(p.getConstValueI64Low(n),p.getConstValueI64High(n));break;case p.NativeType.F32:e.constantValueKind=2,e.constantFloatValue=p.getConstValueF32(n);break;case p.NativeType.F64:e.constantValueKind=2,e.constantFloatValue=p.getConstValueF64(n);break;default:return assert(!1),!1}e.set(l.CommonFlags.INLINED),e.is(l.CommonFlags.MODULE_EXPORT)?(t.addGlobal(u,a,!1,n),t.addGlobalExport(u,T(e))):r&&r.isTopLevel&&t.addGlobal(u,a,!1,n)}else t.addGlobal(u,a,!s,n);return!0},t.prototype.compileEnumDeclaration=function(e){var t=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(t.kind==u.ElementKind.ENUM),this.compileEnum(t)?t:null},t.prototype.compileEnum=function(e){var t,r;if(e.is(l.CommonFlags.COMPILED))return!0;e.set(l.CommonFlags.COMPILED);var n=this.module;this.currentEnum=e;var i=null;if(e.members)try{for(var s=a(e.members.values()),o=s.next();!o.done;o=s.next()){var h=o.value;if(h.kind==u.ElementKind.ENUMVALUE){var d=!1,m=h,y=m.declaration;if(m.set(l.CommonFlags.COMPILED),m.is(l.CommonFlags.INLINED))e.declaration.isTopLevelExport&&n.addGlobal(m.internalName,p.NativeType.I32,!1,n.createI32(m.constantValue));else{var g=void 0;y.value?(g=this.compileExpression(y.value,_.Type.i32,1,0),p.getExpressionId(g)!=p.ExpressionId.Const&&(g=this.precomputeExpressionRef(g),p.getExpressionId(g)!=p.ExpressionId.Const&&(e.is(l.CommonFlags.CONST)&&this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range),d=!0))):null==i?g=n.createI32(0):i.is(l.CommonFlags.INLINED)?g=n.createI32(i.constantValue+1):(g=n.createBinary(p.BinaryOp.AddI32,n.createGetGlobal(i.internalName,p.NativeType.I32),n.createI32(1)),e.is(l.CommonFlags.CONST)&&this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range),d=!0),d?(n.addGlobal(m.internalName,p.NativeType.I32,!0,n.createI32(0)),this.startFunctionBody.push(n.createSetGlobal(m.internalName,g))):(n.addGlobal(m.internalName,p.NativeType.I32,!1,g),p.getExpressionType(g)==p.NativeType.I32?(m.constantValue=p.getConstValueI32(g),m.set(l.CommonFlags.INLINED)):(assert(!1),m.constantValue=0))}i=m,e.is(l.CommonFlags.MODULE_EXPORT)&&(h.is(l.CommonFlags.INLINED)||this.options.hasFeature(2)?n.addGlobalExport(h.internalName,T(h)):y&&this.warning(c.DiagnosticCode.Cannot_export_a_mutable_global,y.range))}}}catch(e){t={error:e}}finally{try{o&&!o.done&&(r=s.return)&&r.call(s)}finally{if(t)throw t.error}}return this.currentEnum=null,!0},t.prototype.compileFunctionDeclaration=function(e,t,r){void 0===r&&(r=null);var n=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(n.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.compileFunctionUsingTypeArguments(n,t,r,null,n.declaration.name)},t.prototype.compileFunctionUsingTypeArguments=function(e,t,r,n,i){var a=e.resolveUsingTypeArguments(t,r,i);return a?(a.outerScope=n,this.compileFunction(a)?a:null):null},t.prototype.ensureFunctionType=function(e,t,r){void 0===r&&(r=null);var n,i=e?e.length:0,a=0;if(r?((n=new Array(1+i))[0]=r.toNativeType(),a=1):n=new Array(i),e)for(var s=0;s=0)return e.functionTableIndex;var t=this.functionTable,r=t.length;return!e.is(l.CommonFlags.TRAMPOLINE)&&e.signature.requiredParameters=0?"case"+u.toString(10):"break")+"|"+a);var m=t.createBlock("case0|"+a,c,p.NativeType.None),y=!0,g=!0,T=!0,E=!0;for(h=0;h=0){v=r.flow;y&&v.set(1),g&&v.set(4096),T&&v.set(2),E&&v.set(16)}return m},t.prototype.compileThrowStatement=function(e){var t=this.currentFunction.flow;return t.set(2),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.startFunction&&e.parent&&e.parent.kind==d.NodeKind.SOURCE){for(var s=0;s");continue}g=this.currentType}var E=!1;if(m.is(l.CommonFlags.CONST))if(T)if(T=this.precomputeExpressionRef(T),p.getExpressionId(T)==p.ExpressionId.Const){var f=new u.Local(r,y,-1,g);switch(p.getExpressionType(T)){case p.NativeType.I32:f=f.withConstantIntegerValue(p.getConstValueI32(T),0);break;case p.NativeType.I64:f=f.withConstantIntegerValue(p.getConstValueI64Low(T),p.getConstValueI64High(T));break;case p.NativeType.F32:f=f.withConstantFloatValue(p.getConstValueF32(T));break;case p.NativeType.F64:f=f.withConstantFloatValue(p.getConstValueF64(T));break;default:return assert(!1),this.module.createUnreachable()}var I=n.flow.scopedLocals;if(I){if(I.has(y))return this.error(c.DiagnosticCode.Duplicate_identifier_0,m.name.range,y),this.module.createUnreachable()}else n.flow.scopedLocals=I=new Map;I.set(y,f),E=!0}else this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,m.range);else this.error(c.DiagnosticCode._const_declarations_must_be_initialized,m.range);if(!E){f=void 0;f=m.isAny(l.CommonFlags.LET|l.CommonFlags.CONST)||h.is(1024)?h.addScopedLocal(g,y,!1,m):n.addLocal(g,y,m),T?(o.push(this.compileAssignmentWithValue(m.name,T)),f.type.is(36)&&h.setLocalWrapped(f.index,!h.canOverflow(T,g))):f.type.is(36)&&h.setLocalWrapped(f.index,!0)}}return o.length?1==o.length?o[0]:this.module.createBlock(null,o,p.NativeType.None):0},t.prototype.compileVoidStatement=function(e){return this.compileExpression(e.expression,_.Type.void,2,0)},t.prototype.compileWhileStatement=function(e){var t=this.module,r=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,_.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(l.CommonFlags.GENERIC|l.CommonFlags.GENERIC_CONTEXT)){var n=this.precomputeExpressionRef(r);if(p.getExpressionId(n)==p.ExpressionId.Const&&p.getExpressionType(n)==p.NativeType.I32){if(!p.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.enterBranchOrScope();i.flow=s;var o="break|"+a;s.breakLabel=o;var c="continue|"+a;s.continueLabel=c;var u=this.compileStatement(e.statement);i.flow=s.leaveBranchOrScope(),i.leaveBreakContext();var h=t.createBlock(o,[t.createLoop(c,t.createIf(r,s.isAny(13)?u:t.createBlock(null,[u,t.createBreak(c)],p.NativeType.None)))],p.NativeType.None);return h},t.prototype.compileInlineConstant=function(e,t,r){assert(e.is(l.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.is(l.CommonFlags.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:assert(!1),i=this.module.createUnreachable()}var a=this.currentType;return 0!=r&&a!=t?(i=this.convertExpression(i,a,t,r,n,e),this.currentType=t):1==n&&(i=this.ensureSmallIntegerWrap(i,a)),this.options.sourceMap&&this.addDebugLocation(i,e.range),i},t.prototype.compileExpressionRetainType=function(e,t,r){return this.compileExpression(e,t==_.Type.void?_.Type.i32:t,0,r)},t.prototype.precomputeExpression=function(e,t,r,n){return this.precomputeExpressionRef(this.compileExpression(e,t,r,n))},t.prototype.precomputeExpressionRef=function(e){var t=this.module,r=this.currentType.toNativeType(),n=t.addTemporaryFunction(r,null,e);t.runPasses(["precompute"],n);var i=p.getFunctionBody(n);return t.removeTemporaryFunction(),i},t.prototype.convertExpression=function(e,t,r,n,i,a){assert(0!=n);var s=this.module;return 13==t.kind?(assert(13!=r.kind),this.error(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(p.UnaryOp.PromoteF32,e)):11==r.kind&&(e=s.createUnary(p.UnaryOp.DemoteF64,e)):r.is(4)?e=11==t.kind?r.is(1)?r.is(64)?s.createUnary(p.UnaryOp.TruncF32ToI64,e):s.createUnary(p.UnaryOp.TruncF32ToI32,e):r.is(64)?s.createUnary(p.UnaryOp.TruncF32ToU64,e):s.createUnary(p.UnaryOp.TruncF32ToU32,e):r.is(1)?r.is(64)?s.createUnary(p.UnaryOp.TruncF64ToI64,e):s.createUnary(p.UnaryOp.TruncF64ToI32,e):r.is(64)?s.createUnary(p.UnaryOp.TruncF64ToU64,e):s.createUnary(p.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)?p.UnaryOp.ConvertI64ToF32:p.UnaryOp.ConvertU64ToF32,e):s.createUnary(t.is(1)?p.UnaryOp.ConvertI32ToF32:p.UnaryOp.ConvertU32ToF32,e):t.is(64)?s.createUnary(t.is(1)?p.UnaryOp.ConvertI64ToF64:p.UnaryOp.ConvertU64ToF64,e):s.createUnary(t.is(1)?p.UnaryOp.ConvertI32ToF64:p.UnaryOp.ConvertU32ToF64,e):t.is(64)?r.is(64)||(e=s.createUnary(p.UnaryOp.WrapI64,e)):r.is(64)?(e=s.createUnary(r.is(1)?p.UnaryOp.ExtendI32:p.UnaryOp.ExtendU32,this.ensureSmallIntegerWrap(e,t)),i=0):t.is(32)&&t.size",n.toString(),a.toString()),this.currentType=t,l.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=l.createBinary(p.BinaryOp.GtI32,r,i);break;case 4:o=l.createBinary(this.options.isWasm64?p.BinaryOp.GtI64:p.BinaryOp.GtI32,r,i);break;case 3:o=l.createBinary(p.BinaryOp.GtI64,r,i);break;case 5:case 6:case 7:case 10:o=l.createBinary(p.BinaryOp.GtU32,r,i);break;case 9:o=l.createBinary(this.options.isWasm64?p.BinaryOp.GtU64:p.BinaryOp.GtU32,r,i);break;case 8:o=l.createBinary(p.BinaryOp.GtU64,r,i);break;case 11:o=l.createBinary(p.BinaryOp.GtF32,r,i);break;case 12:o=l.createBinary(p.BinaryOp.GtF64,r,i);break;default:assert(!1),o=l.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,l.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=l.createBinary(p.BinaryOp.LeI32,r,i);break;case 4:o=l.createBinary(this.options.isWasm64?p.BinaryOp.LeI64:p.BinaryOp.LeI32,r,i);break;case 3:o=l.createBinary(p.BinaryOp.LeI64,r,i);break;case 5:case 6:case 7:case 10:o=l.createBinary(p.BinaryOp.LeU32,r,i);break;case 9:o=l.createBinary(this.options.isWasm64?p.BinaryOp.LeU64:p.BinaryOp.LeU32,r,i);break;case 8:o=l.createBinary(p.BinaryOp.LeU64,r,i);break;case 11:o=l.createBinary(p.BinaryOp.LeF32,r,i);break;case 12:o=l.createBinary(p.BinaryOp.LeF64,r,i);break;default:assert(!1),o=l.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,l.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=l.createBinary(p.BinaryOp.GeI32,r,i);break;case 4:o=l.createBinary(this.options.isWasm64?p.BinaryOp.GeI64:p.BinaryOp.GeI32,r,i);break;case 3:o=l.createBinary(p.BinaryOp.GeI64,r,i);break;case 5:case 6:case 7:case 10:o=l.createBinary(p.BinaryOp.GeU32,r,i);break;case 9:o=l.createBinary(this.options.isWasm64?p.BinaryOp.GeU64:p.BinaryOp.GeU32,r,i);break;case 8:o=l.createBinary(p.BinaryOp.GeU64,r,i);break;case 11:o=l.createBinary(p.BinaryOp.GeF32,r,i);break;case 12:o=l.createBinary(p.BinaryOp.GeF64,r,i);break;default:assert(!1),o=l.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.EQUALS_EQUALS_EQUALS:case h.Token.EQUALS_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,g==h.Token.EQUALS_EQUALS&&this.currentType.is(256))if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.EQ)){o=this.compileBinaryOverload(v,d,r,m,e);break}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,h.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,l.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=l.createBinary(p.BinaryOp.EqI32,r,i);break;case 9:case 4:o=l.createBinary(this.options.isWasm64?p.BinaryOp.EqI64:p.BinaryOp.EqI32,r,i);break;case 3:case 8:o=l.createBinary(p.BinaryOp.EqI64,r,i);break;case 11:o=l.createBinary(p.BinaryOp.EqF32,r,i);break;case 12:o=l.createBinary(p.BinaryOp.EqF64,r,i);break;default:assert(!1),o=l.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.EXCLAMATION_EQUALS_EQUALS:case h.Token.EXCLAMATION_EQUALS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,g==h.Token.EXCLAMATION_EQUALS&&this.currentType.is(256))if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.NE)){o=this.compileBinaryOverload(v,d,r,m,e);break}if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,h.operatorTokenToString(e.operator),n.toString(),a.toString()),this.currentType=t,l.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=l.createBinary(p.BinaryOp.NeI32,r,i);break;case 9:case 4:o=l.createBinary(this.options.isWasm64?p.BinaryOp.NeI64:p.BinaryOp.NeI32,r,i);break;case 3:case 8:o=l.createBinary(p.BinaryOp.NeI64,r,i);break;case 11:o=l.createBinary(p.BinaryOp.NeF32,r,i);break;case 12:o=l.createBinary(p.BinaryOp.NeF64,r,i);break;default:assert(!1),o=l.createUnreachable()}this.currentType=_.Type.bool;break;case h.Token.EQUALS:return this.compileAssignment(d,m,t);case h.Token.PLUS_EQUALS:y=!0;case h.Token.PLUS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.ADD)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0);else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"+",n.toString(),a.toString()),this.currentType=t,l.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=l.createBinary(p.BinaryOp.AddI32,r,i);break;case 9:case 4:o=l.createBinary(this.options.isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,r,i);break;case 3:case 8:o=l.createBinary(p.BinaryOp.AddI64,r,i);break;case 11:o=l.createBinary(p.BinaryOp.AddF32,r,i);break;case 12:o=l.createBinary(p.BinaryOp.AddF64,r,i);break;default:assert(!1),o=l.createUnreachable()}break;case h.Token.MINUS_EQUALS:y=!0;case h.Token.MINUS:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.SUB)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"-",n.toString(),a.toString()),this.currentType=t,l.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=l.createBinary(p.BinaryOp.SubI32,r,i);break;case 9:case 4:o=l.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,r,i);break;case 3:case 8:o=l.createBinary(p.BinaryOp.SubI64,r,i);break;case 11:o=l.createBinary(p.BinaryOp.SubF32,r,i);break;case 12:o=l.createBinary(p.BinaryOp.SubF64,r,i);break;default:assert(!1),o=l.createUnreachable()}break;case h.Token.ASTERISK_EQUALS:y=!0;case h.Token.ASTERISK:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.MUL)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1);else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"*",n.toString(),a.toString()),this.currentType=t,l.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=l.createBinary(p.BinaryOp.MulI32,r,i);break;case 9:case 4:o=l.createBinary(this.options.isWasm64?p.BinaryOp.MulI64:p.BinaryOp.MulI32,r,i);break;case 3:case 8:o=l.createBinary(p.BinaryOp.MulI64,r,i);break;case 11:o=l.createBinary(p.BinaryOp.MulF32,r,i);break;case 12:o=l.createBinary(p.BinaryOp.MulF64,r,i);break;default:assert(!1),o=l.createUnreachable()}break;case h.Token.ASTERISK_ASTERISK_EQUALS:y=!0;case h.Token.ASTERISK_ASTERISK:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.POW)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}var T=void 0;if(11==this.currentType.kind){if(i=this.compileExpression(m,_.Type.f32,1,0),a=this.currentType,!(T=this.f32PowInstance)){if(!(E=this.program.elementsLookup.get("Mathf"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),o=l.createUnreachable();break}if(!(f=E.members?E.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.pow"),o=l.createUnreachable();break}assert(f.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f32PowInstance=T=f.resolve()}}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,!(T=this.f64PowInstance)){if(!(E=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),o=l.createUnreachable();break}if(!(f=E.members?E.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.pow"),o=l.createUnreachable();break}assert(f.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f64PowInstance=T=f.resolve()}o=T&&this.compileFunction(T)?this.makeCallDirect(T,[r,i]):l.createUnreachable();break;case h.Token.SLASH_EQUALS:y=!0;case h.Token.SLASH:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.DIV)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"/",n.toString(),a.toString()),this.currentType=t,l.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=l.createBinary(p.BinaryOp.DivI32,r,i);break;case 4:o=l.createBinary(this.options.isWasm64?p.BinaryOp.DivI64:p.BinaryOp.DivI32,r,i);break;case 3:o=l.createBinary(p.BinaryOp.DivI64,r,i);break;case 5:case 6:case 10:case 7:o=l.createBinary(p.BinaryOp.DivU32,r,i);break;case 9:o=l.createBinary(this.options.isWasm64?p.BinaryOp.DivU64:p.BinaryOp.DivU32,r,i);break;case 8:o=l.createBinary(p.BinaryOp.DivU64,r,i);break;case 11:o=l.createBinary(p.BinaryOp.DivF32,r,i);break;case 12:o=l.createBinary(p.BinaryOp.DivF64,r,i);break;default:assert(!1),o=l.createUnreachable()}break;case h.Token.PERCENT_EQUALS:y=!0;case h.Token.PERCENT:if(r=this.compileExpressionRetainType(d,t,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.REM)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"%",n.toString(),a.toString()),this.currentType=t,l.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=l.createBinary(p.BinaryOp.RemI32,r,i);break;case 4:o=l.createBinary(this.options.isWasm64?p.BinaryOp.RemI64:p.BinaryOp.RemI32,r,i);break;case 3:o=l.createBinary(p.BinaryOp.RemI64,r,i);break;case 5:case 6:case 10:case 7:o=l.createBinary(p.BinaryOp.RemU32,r,i);break;case 9:o=l.createBinary(this.options.isWasm64?p.BinaryOp.RemU64:p.BinaryOp.RemU32,r,i);break;case 8:o=l.createBinary(p.BinaryOp.RemU64,r,i);break;case 11:if(!(T=this.f32ModInstance)){if(!(E=this.program.elementsLookup.get("Mathf"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),o=l.createUnreachable();break}if(!(f=E.members?E.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.mod"),o=l.createUnreachable();break}assert(f.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f32ModInstance=T=f.resolve()}o=T&&this.compileFunction(T)?this.makeCallDirect(T,[r,i]):l.createUnreachable();break;case 12:if(!(T=this.f64ModInstance)){var E,f;if(!(E=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),o=l.createUnreachable();break}if(!(f=E.members?E.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.mod"),o=l.createUnreachable();break}assert(f.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.f64ModInstance=T=f.resolve()}o=T&&this.compileFunction(T)?this.makeCallDirect(T,[r,i]):l.createUnreachable();break;default:assert(!1),o=l.createUnreachable()}break;case h.Token.LESSTHAN_LESSTHAN_EQUALS:y=!0;case h.Token.LESSTHAN_LESSTHAN:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_SHL)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(i=this.compileExpression(m,n,1,0),a=this.currentType,this.currentType.kind){case 0:case 1:case 5:case 6:case 10:case 2:case 7:o=l.createBinary(p.BinaryOp.ShlI32,r,i);break;case 3:case 8:o=l.createBinary(p.BinaryOp.ShlI64,r,i);break;case 9:case 4:o=l.createBinary(this.options.isWasm64?p.BinaryOp.ShlI64:p.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()),l.createUnreachable();default:assert(!1),o=l.createUnreachable()}break;case h.Token.GREATERTHAN_GREATERTHAN_EQUALS:y=!0;case h.Token.GREATERTHAN_GREATERTHAN:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_SHR)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,1),a=this.currentType,this.currentType.kind){case 0:case 1:case 2:o=l.createBinary(p.BinaryOp.ShrI32,r,i);break;case 3:o=l.createBinary(p.BinaryOp.ShrI64,r,i);break;case 4:o=l.createBinary(this.options.isWasm64?p.BinaryOp.ShrI64:p.BinaryOp.ShrI32,r,i);break;case 5:case 6:case 10:case 7:o=l.createBinary(p.BinaryOp.ShrU32,r,i);break;case 8:o=l.createBinary(p.BinaryOp.ShrU64,r,i);break;case 9:o=l.createBinary(this.options.isWasm64?p.BinaryOp.ShrU64:p.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()),l.createUnreachable();default:assert(!1),o=l.createUnreachable()}break;case h.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:y=!0;case h.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_SHR_U)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}switch(r=this.ensureSmallIntegerWrap(r,n),i=this.compileExpression(m,n,1,0),a=this.currentType,this.currentType.kind){case 5:case 6:case 10:o=l.createBinary(p.BinaryOp.ShrU32,r,i);case 0:case 1:case 2:case 7:o=l.createBinary(p.BinaryOp.ShrU32,r,i);break;case 3:case 8:o=l.createBinary(p.BinaryOp.ShrU64,r,i);break;case 9:case 4:o=l.createBinary(this.options.isWasm64?p.BinaryOp.ShrU64:p.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()),l.createUnreachable();default:assert(!1),o=l.createUnreachable()}break;case h.Token.AMPERSAND_EQUALS:y=!0;case h.Token.AMPERSAND:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_AND)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"&",n.toString(),a.toString()),this.currentType=t,l.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=l.createBinary(p.BinaryOp.AndI32,r,i);break;case 3:case 8:o=l.createBinary(p.BinaryOp.AndI64,r,i);break;case 9:case 4:o=l.createBinary(this.options.isWasm64?p.BinaryOp.AndI64:p.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()),l.createUnreachable();default:assert(!1),o=l.createUnreachable()}break;case h.Token.BAR_EQUALS:y=!0;case h.Token.BAR:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_OR)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"|",n.toString(),a.toString()),this.currentType=t,l.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=l.createBinary(p.BinaryOp.OrI32,r,i);break;case 2:case 7:o=l.createBinary(p.BinaryOp.OrI32,r,i);break;case 3:case 8:o=l.createBinary(p.BinaryOp.OrI64,r,i);break;case 9:case 4:o=l.createBinary(this.options.isWasm64?p.BinaryOp.OrI64:p.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()),l.createUnreachable();default:assert(!1),o=l.createUnreachable()}break;case h.Token.CARET_EQUALS:y=!0;case h.Token.CARET:if(r=this.compileExpressionRetainType(d,t.intType,0),n=this.currentType,this.currentType.is(256)){var I,v;if(I=n.classReference)if(v=I.lookupOverload(u.OperatorKind.BITWISE_XOR)){o=this.compileBinaryOverload(v,d,r,m,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}if(y)i=this.compileExpression(m,n,1,0),a=this.currentType;else{if(i=this.compileExpressionRetainType(m,n,0),a=this.currentType,!(s=_.Type.commonCompatible(n,a,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"^",n.toString(),a.toString()),this.currentType=t,l.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=l.createBinary(p.BinaryOp.XorI32,r,i);break;case 2:case 7:o=l.createBinary(p.BinaryOp.XorI32,r,i);break;case 3:case 8:o=l.createBinary(p.BinaryOp.XorI64,r,i);break;case 9:case 4:o=l.createBinary(this.options.isWasm64?p.BinaryOp.XorI64:p.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()),l.createUnreachable();default:assert(!1),o=l.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=l.cloneExpression(r,!0,0))this.makeIsTrueish(r,this.currentType),o=l.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=l.createIf(this.makeIsTrueish(l.createTeeLocal(C.index,r),this.currentType),i,l.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=l.createIf(this.makeIsTrueish(l.createTeeLocal(C.index,r),this.currentType),l.createGetLocal(assert(C).index,this.currentType.toNativeType()),i)}break;default:assert(!1),o=this.module.createUnreachable()}return y?this.compileAssignmentWithValue(d,o,t!=_.Type.void):o},t.prototype.compileUnaryOverload=function(e,t,r,n){var i,a=0;return e.is(l.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(l.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,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 p=o.resolve();if(!p)return this.module.createUnreachable();assert(1==p.signature.parameterTypes.length),n=p.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.resolvedElementExpression){var l=a.flow.is(2048),h=s.lookupOverload(u.OperatorKind.INDEXED_SET,l);if(!h)return s.lookupOverload(u.OperatorKind.INDEXED_GET,l)?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.program.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(l.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(l.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(),p=i.internalName;return n.createBlock(null,[n.createSetGlobal(p,t),n.createGetGlobal(p,o)],o)}return n.createSetGlobal(i.internalName,t);case u.ElementKind.FIELD:var h=i.declaration;if(i.is(l.CommonFlags.READONLY)&&!this.currentFunction.is(l.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.program.resolvedThisExpression),m=this.compileExpressionRetainType(d,this.options.usizeType,0);a=i.type;this.currentType=r?a:_.Type.void;o=a.toNativeType();if(10==a.kind&&(t=this.ensureSmallIntegerWrap(t,a)),r){s=(L=this.currentFunction).flow;var y=L.getAndFreeTempLocal(a,!s.canOverflow(t,a)).index;return n.createBlock(null,[n.createSetLocal(y,t),n.createStore(a.byteSize,m,n.createGetLocal(y,o),o,i.memoryOffset),n.createGetLocal(y,o)],o)}return n.createStore(a.byteSize,m,t,o,i.memoryOffset);case u.ElementKind.PROPERTY:var g=i.setterPrototype;if(g){var T=g.resolve();if(!T)return n.createUnreachable();if(!r){if(T.is(l.CommonFlags.INSTANCE)){d=assert(this.program.resolvedThisExpression),m=this.compileExpressionRetainType(d,this.options.usizeType,0);return this.makeCallDirect(T,[m,t])}return this.makeCallDirect(T,[t])}var E=i.getterPrototype;assert(null!=E);var f=E.resolve();if(!f)return n.createUnreachable();var I=(R=f.signature.returnType).toNativeType();if(T.is(l.CommonFlags.INSTANCE)){d=assert(this.program.resolvedThisExpression),m=this.compileExpressionRetainType(d,this.options.usizeType,0),y=this.currentFunction.getAndFreeTempLocal(R,!1).index;return n.createBlock(null,[this.makeCallDirect(T,[n.createTeeLocal(y,m),t]),this.makeCallDirect(f,[n.createGetLocal(y,I)])],I)}return n.createBlock(null,[this.makeCallDirect(T,[t]),this.makeCallDirect(f)],I)}return this.error(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.program.resolvedElementExpression;if(v){var A=this.currentFunction.flow.is(2048),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 S=i.type,O=(d=assert(this.program.resolvedThisExpression),m=this.compileExpressionRetainType(d,this.options.usizeType,0),this.compileExpression(v,_.Type.i32,1,0));if(r){var L,b=(L=this.currentFunction).getTempLocal(S,!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,O),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,O,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.program.resolveExpression(e.expression,a);if(!s)return i.createUnreachable();switch(s.kind){case u.ElementKind.FUNCTION_PROTOTYPE:var o=s,h=e.typeArguments;if(o.is(l.CommonFlags.AMBIENT|l.CommonFlags.BUILTIN))return this.compileCallExpressionBuiltin(o,e,t);var m=null;if(h){if(!o.is(l.CommonFlags.GENERIC))return this.error(c.DiagnosticCode.Type_0_is_not_generic,e.expression.range,o.internalName),i.createUnreachable();m=o.resolveUsingTypeArguments(h,this.currentFunction.flow.contextualTypeArguments,e)}else{if(o.is(l.CommonFlags.GENERIC)){for(var y=new Map,g=assert(o.declaration.typeParameters),T=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)return assert(!e.is(l.CommonFlags.TRAMPOLINE)),this.compileCallInlineUnchecked(e,t,r,n);var o=n?a+1:a,c=new Array(o),p=0;n&&(c[0]=n,p=1);for(var u=s.parameterTypes,h=0;h=i);var o=this.module;if(!this.compileFunction(e))return o.createUnreachable();var c=e.signature.returnType,p=e.is(l.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(T))return this.module.createUnreachable();var I=T.type;return assert(I!=_.Type.void),T.is(l.CommonFlags.INLINED)?this.compileInlineConstant(T,t,r):(this.currentType=I,this.module.createGetGlobal(T.internalName,I.toNativeType()));case u.ElementKind.ENUMVALUE:return T.is(l.CommonFlags.COMPILED)?(this.currentType=_.Type.i32,T.is(l.CommonFlags.INLINED)?this.module.createI32(T.constantValue):this.module.createGetGlobal(T.internalName,p.NativeType.I32)):(this.error(c.DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,e.range),this.currentType=_.Type.i32,this.module.createUnreachable());case u.ElementKind.FUNCTION_PROTOTYPE:var v=T.resolve(null,i.flow.contextualTypeArguments);if(!v||!this.compileFunction(v))return n.createUnreachable();var A=this.ensureFunctionTableEntry(v);return this.currentType=v.signature.type,this.module.createI32(A)}return this.error(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.program.resolveType(e.isType);return this.currentType=_.Type.bool,a?i.is(512)&&!a.is(512)?i.nonNullableType.isAssignableTo(a)?r.createBinary(i.is(64)?p.BinaryOp.NeI64:p.BinaryOp.NeI32,n,i.toNativeZero(r)):r.createI32(0):r.createI32(i.isAssignableTo(a,!0)?1:0):r.createUnreachable()},t.prototype.compileLiteralExpression=function(e,t,r){void 0===r&&(r=!1);var n=this.module;switch(e.literalKind){case d.LiteralKind.ARRAY:assert(!r);var i=t.classReference;return i&&i.prototype==this.program.arrayPrototype?this.compileArrayLiteral(assert(i.typeArguments)[0],e.elementExpressions,e):(this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable());case d.LiteralKind.FLOAT:var a=e.value;return r&&(a=-a),t==_.Type.f32?n.createF32(a):(this.currentType=_.Type.f64,n.createF64(a));case d.LiteralKind.INTEGER:var s=e.value;switch(r&&(s=i64_sub(i64_new(0),s)),t.kind){case 0:if(i64_is_i8(s))return n.createI32(i64_low(s));break;case 5:if(i64_is_u8(s))return n.createI32(i64_low(s));break;case 1:if(i64_is_i16(s))return n.createI32(i64_low(s));break;case 6:if(i64_is_u16(s))return n.createI32(i64_low(s));break;case 2:if(i64_is_i32(s))return n.createI32(i64_low(s));break;case 7:if(i64_is_u32(s))return n.createI32(i64_low(s));break;case 10:if(i64_is_bool(s))return n.createI32(i64_low(s));break;case 4:if(!this.options.isWasm64){if(i64_is_i32(s))return n.createI32(i64_low(s));break}return n.createI64(i64_low(s),i64_high(s));case 9:if(!this.options.isWasm64){if(i64_is_u32(s))return n.createI32(i64_low(s));break}return n.createI64(i64_low(s),i64_high(s));case 3:case 8:return n.createI64(i64_low(s),i64_high(s));case 11:if(i64_is_f32(s))return n.createF32(i64_to_f32(s));break;case 12:if(i64_is_f64(s))return n.createF64(i64_to_f64(s));break;case 13:break;default:return assert(!1),n.createUnreachable()}return i64_is_i32(s)?(this.currentType=_.Type.i32,n.createI32(i64_low(s))):i64_is_u32(s)?(this.currentType=_.Type.u32,n.createI32(i64_low(s))):(this.currentType=_.Type.i64,n.createI64(i64_low(s),i64_high(s)));case d.LiteralKind.STRING:return assert(!r),this.compileStaticString(e.value)}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.currentType=t,n.createUnreachable()},t.prototype.compileStaticString=function(e){var t=this.module,r=this.options,n=this.stringSegments,i=n.get(e);if(!i){var a=e.length,s=new Uint8Array(4+2*a);s[0]=255&a,s[1]=a>>>8&255,s[2]=a>>>16&255,s[3]=a>>>24&255;for(var o=0;o>>8&255;i=this.addMemorySegment(s,r.usizeType.byteSize),n.set(e,i)}var c=i.offset,p=this.program.typesLookup.get("string");return this.currentType=p||r.usizeType,r.isWasm64?t.createI64(i64_low(c),i64_high(c)):(assert(i64_is_i32(c)),t.createI32(i64_low(c)))},t.prototype.compileArrayLiteral=function(e,t,r){var n=!0,i=this.module,a=assert(this.program.arrayPrototype);if(!a||a.kind!=u.ElementKind.CLASS_PROTOTYPE)return i.createUnreachable();var s=a.resolve([e]);if(!s)return i.createUnreachable();var o=s.type,l=t.length;if(l){var h=e.toNativeType(),d=void 0,_=void 0;switch(h){case p.NativeType.I32:d=changetype(new Int32Array(l)),_=4*l;break;case p.NativeType.I64:d=changetype(new Array(l)),_=8*l;break;case p.NativeType.F32:d=changetype(new Float32Array(l)),_=4*l;break;case p.NativeType.F64:d=changetype(new Float64Array(l)),_=8*l;break;default:return assert(!1),i.createUnreachable()}for(var y=new Array(l),g=void 0,T=0;T=0);var d=this.compileExpressionRetainType(h,this.options.usizeType,0);return this.currentType=a.type,i.createLoad(a.type.byteSize,a.type.is(5),d,a.type.toNativeType(),a.memoryOffset);case u.ElementKind.PROPERTY:var m=a.getterPrototype;if(m){var y=m.resolve(null);if(!y)return i.createUnreachable();var g=y.signature;if(!this.checkCallSignature(g,0,y.is(l.CommonFlags.INSTANCE),e))return i.createUnreachable();var T=0!=(y.decoratorFlags&u.DecoratorFlags.INLINE);if(y.is(l.CommonFlags.INSTANCE)){o=assert(y.parent);assert(o.kind==u.ElementKind.CLASS);h=assert(n.resolvedThisExpression),d=this.compileExpressionRetainType(h,this.options.usizeType,0);return this.currentType=g.returnType,this.compileCallDirect(y,[],e,d,T)}return this.currentType=g.returnType,this.compileCallDirect(y,[],e,0,T)}return this.error(c.DiagnosticCode.Property_0_does_not_exist_on_type_1,e.range,a.simpleName,a.parent.toString()),i.createUnreachable()}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable()},t.prototype.compileTernaryExpression=function(e,t){var r,n,i,a,s=e.ifThen,o=e.ifElse,u=this.currentFunction,h=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,_.Type.bool,0),this.currentType);if(!this.options.noTreeShaking||this.currentFunction.isAny(l.CommonFlags.GENERIC|l.CommonFlags.GENERIC_CONTEXT)){var d=this.precomputeExpressionRef(h);if(p.getExpressionId(d)==p.ExpressionId.Const&&p.getExpressionType(d)==p.NativeType.I32)return p.getConstValueI32(d)?this.compileExpressionRetainType(s,t,0):this.compileExpressionRetainType(o,t,0);h=this.makeIsTrueish(this.compileExpressionRetainType(e.condition,_.Type.bool,0),this.currentType)}if(u.is(l.CommonFlags.CONSTRUCTOR)){var m=u.flow;m=m.enterBranchOrScope(),u.flow=m,r=this.compileExpressionRetainType(s,t,0),i=this.currentType;var y=m.is(16);m=m.leaveBranchOrScope(),u.flow=m,m=m.enterBranchOrScope(),u.flow=m,n=this.compileExpressionRetainType(o,t,0),a=this.currentType;var g=m.is(16);m=m.leaveBranchOrScope(),u.flow=m,y&&g&&m.set(16)}else r=this.compileExpressionRetainType(s,t,0),i=this.currentType,n=this.compileExpressionRetainType(o,t,0),a=this.currentType;var T=_.Type.commonCompatible(i,a,!1);return T?(r=this.convertExpression(r,i,T,1,0,s),n=this.convertExpression(n,a,T,1,0,o),this.currentType=T,this.module.createIf(h,r,n)):(this.error(c.DiagnosticCode.Type_0_is_not_assignable_to_type_1,e.range,i.toString(),a.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(p.getExpressionId(i)==p.ExpressionId.Unreachable)return i;var a,s,o,l=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(l.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=p.BinaryOp.AddI32,s=p.NativeType.I32,o=r.createI32(1);break;case 9:case 4:a=(u=this.options).isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,s=u.nativeSizeType,o=l.toNativeOne(r);break;case 3:case 8:a=p.BinaryOp.AddI64,s=p.NativeType.I64,o=r.createI64(1);break;case 11:a=p.BinaryOp.AddF32,s=p.NativeType.F32,o=r.createF32(1);break;case 12:a=p.BinaryOp.AddF64,s=p.NativeType.F64,o=r.createF64(1);break;default:return assert(!1),r.createUnreachable()}break;case h.Token.MINUS_MINUS:if(this.currentType.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(l.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:a=p.BinaryOp.SubI32,s=p.NativeType.I32,o=r.createI32(1);break;case 9:case 4:var u;a=(u=this.options).isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,s=u.nativeSizeType,o=l.toNativeOne(r);break;case 3:case 8:a=p.BinaryOp.SubI64,s=p.NativeType.I64,o=r.createI64(1);break;case 11:a=p.BinaryOp.SubF32,s=p.NativeType.F32,o=r.createF32(1);break;case 12:a=p.BinaryOp.SubF64,s=p.NativeType.F64,o=r.createF64(1);break;default:return assert(!1),r.createUnreachable()}break;default:return assert(!1),r.createUnreachable()}if(t==_.Type.void)return this.compileAssignmentWithValue(e.operand,r.createBinary(a,i,o),!1);var d=n.getTempLocal(l,!1),m=this.compileAssignmentWithValue(e.operand,r.createBinary(a,this.module.createGetLocal(d.index,s),o),!1);this.currentType=assert(d).type,n.freeTempLocal(d);var y=d.index;return r.createBlock(null,[r.createSetLocal(y,i),m,r.createGetLocal(y,s)],s)},t.prototype.compileUnaryPrefixExpression=function(e,t){var r,n=this.module,i=!1;switch(e.operator){case h.Token.PLUS:if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.PLUS)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}break;case h.Token.MINUS:if(e.operand.kind==d.NodeKind.LITERAL&&(e.operand.literalKind==d.LiteralKind.INTEGER||e.operand.literalKind==d.LiteralKind.FLOAT)){r=this.compileLiteralExpression(e.operand,t,!0),this.options.sourceMap&&this.addDebugLocation(r,e.range);break}if(r=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,0),this.currentType.is(256)){if(a=this.currentType.classReference)if(s=a.lookupOverload(u.OperatorKind.MINUS)){r=this.compileUnaryOverload(s,e.operand,r,e);break}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}switch(this.currentType.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:r=n.createBinary(p.BinaryOp.SubI32,n.createI32(0),r);break;case 9:case 4:r=n.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,this.currentType.toNativeZero(n),r);break;case 3:case 8:r=n.createBinary(p.BinaryOp.SubI64,n.createI64(0),r);break;case 11:r=n.createUnary(p.UnaryOp.NegF32,r);break;case 12:r=n.createUnary(p.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(p.BinaryOp.AddI32,r,this.module.createI32(1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(p.BinaryOp.AddI64,r,n.createI64(1));break;case 11:r=n.createBinary(p.BinaryOp.AddF32,r,n.createF32(1));break;case 12:r=n.createBinary(p.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(p.BinaryOp.SubI32,r,n.createI32(1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,r,this.currentType.toNativeOne(n));break;case 3:case 8:r=n.createBinary(p.BinaryOp.SubI64,r,n.createI64(1));break;case 11:r=n.createBinary(p.BinaryOp.SubF32,r,n.createF32(1));break;case 12:r=n.createBinary(p.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(p.BinaryOp.XorI32,r,n.createI32(-1));break;case 9:case 4:r=n.createBinary(this.options.isWasm64?p.BinaryOp.XorI64:p.BinaryOp.XorI32,r,this.currentType.toNativeNegOne(n));break;case 3:case 8:r=n.createBinary(p.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(p.UnaryOp.ExtendI8ToI32,e):r.createBinary(p.BinaryOp.ShrI32,r.createBinary(p.BinaryOp.ShlI32,e,r.createI32(24)),r.createI32(24)));break;case 1:n.canOverflow(e,t)&&(e=this.options.hasFeature(1)?r.createUnary(p.UnaryOp.ExtendI16ToI32,e):r.createBinary(p.BinaryOp.ShrI32,r.createBinary(p.BinaryOp.ShlI32,e,r.createI32(16)),r.createI32(16)));break;case 5:n.canOverflow(e,t)&&(e=r.createBinary(p.BinaryOp.AndI32,e,r.createI32(255)));break;case 6:n.canOverflow(e,t)&&(e=r.createBinary(p.BinaryOp.AndI32,e,r.createI32(65535)));break;case 10:n.canOverflow(e,t)&&(e=r.createBinary(p.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(p.UnaryOp.EqzI32,e);case 3:case 8:return r.createUnary(p.UnaryOp.EqzI64,e);case 9:case 4:return r.createUnary(64==t.size?p.UnaryOp.EqzI64:p.UnaryOp.EqzI32,e);case 11:return r.createBinary(p.BinaryOp.EqF32,e,r.createF32(0));case 12:return r.createBinary(p.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(p.BinaryOp.NeI64,e,r.createI64(0));case 9:case 4:return 64==t.size?r.createBinary(p.BinaryOp.NeI64,e,r.createI64(0)):e;case 11:return r.createBinary(p.BinaryOp.NeF32,e,r.createF32(0));case 12:return r.createBinary(p.BinaryOp.NeF64,e,r.createF64(0));default:return assert(!1),r.createI32(0)}},t.prototype.makeAllocate=function(e,t){var r,n,i=this.module,s=this.currentFunction,c=this.options.nativeSizeType,p=s.getTempLocal(e.type,!1),h=new Array;if(h.push(i.createSetLocal(p.index,o.compileAllocate(this,e,t))),e.members)try{for(var d=a(e.members.values()),_=d.next();!_.done;_=d.next()){var m=_.value;if(m.kind==u.ElementKind.FIELD){var y=m,g=y.type,T=g.toNativeType(),E=y.prototype.declaration;if(assert(!y.isAny(l.CommonFlags.CONST)),E.initializer)h.push(i.createStore(g.byteSize,i.createGetLocal(p.index,c),this.compileExpression(E.initializer,g,1,0),T,y.memoryOffset));else{var f=y.prototype.declaration.parameterIndex;h.push(i.createStore(g.byteSize,i.createGetLocal(p.index,c),f>=0?i.createGetLocal(1+f,T):g.toNativeZero(i),T,y.memoryOffset))}}}}catch(e){r={error:e}}finally{try{_&&!_.done&&(n=d.return)&&n.call(d)}finally{if(r)throw r.error}}return h.push(i.createGetLocal(p.index,c)),s.freeTempLocal(p),this.currentType=e.type,i.createBlock(null,h,c)},t.prototype.makeConditionalAllocate=function(e,t){var r=this.module,n=this.options.nativeSizeType;return this.currentType=e.type,r.createIf(n==p.NativeType.I64?r.createBinary(p.BinaryOp.NeI64,r.createGetLocal(0,p.NativeType.I64),r.createI64(0)):r.createGetLocal(0,p.NativeType.I32),r.createGetLocal(0,n),r.createTeeLocal(0,this.makeAllocate(e,t)))},t.prototype.addDebugLocation=function(e,t){var r=this.currentFunction,n=t.source;n.debugInfoIndex<0&&(n.debugInfoIndex=this.module.addDebugInfoFile(n.normalizedPath)),t.debugInfoRef=e,r.debugLocations.push(t)},t}(c.DiagnosticEmitter);function T(e,t){switch(void 0===t&&(t=e.simpleName),e.kind){case u.ElementKind.FUNCTION:return(r=e.parent||e.prototype.parent)?T(r)+(e.is(l.CommonFlags.INSTANCE)?l.INSTANCE_DELIMITER:l.STATIC_DELIMITER)+t:t;case u.ElementKind.FIELD:case u.ElementKind.ENUMVALUE:return T(r=assert(e.parent))+(e.is(l.CommonFlags.INSTANCE)?l.INSTANCE_DELIMITER:l.STATIC_DELIMITER)+t;case u.ElementKind.CLASS:return(r=e.prototype.parent)?T(r)+l.STATIC_DELIMITER+t:t;default:var r;return(r=e.parent)?T(r)+l.STATIC_DELIMITER+t:t}}t.Compiler=g},function(e,t,r){"use strict";var n,i=this&&this.__extends||(n=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])},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)});Object.defineProperty(t,"__esModule",{value:!0});var a=r(0),s=r(5),o=r(8),c=r(2),p=r(1),l=r(4),u=a.LIBRARY_PREFIX+"builtins.ts",h=function(e){function t(){var t=e.call(this)||this;return t.backlog=new Array,t.seenlog=new Set,t.donelog=new Set,t.onComment=null,t.tryParseSignatureIsSignature=!1,t.parseParametersThis=null,t.program=new s.Program(t.diagnostics),t}return i(t,e),t.prototype.parseFile=function(e,t,r){var n=p.normalizePath(t),i=l.mangleInternalPath(n);if(!this.donelog.has(i)){this.donelog.add(i),this.seenlog.add(i);var s=new l.Source(n,e,r?l.SourceKind.ENTRY:t.startsWith(a.LIBRARY_PREFIX)&&t.indexOf(a.PATH_DELIMITER,a.LIBRARY_PREFIX.length)<0?l.SourceKind.LIBRARY:l.SourceKind.DEFAULT),c=this.program;c.sources.push(s),s.normalizedPath==u&&s.set(a.CommonFlags.BUILTIN);var h=new o.Tokenizer(s,c.diagnostics);h.onComment=this.onComment,s.tokenizer=h;for(var d=s.statements;!h.skip(o.Token.ENDOFFILE);){var _=this.parseTopLevelStatement(h);_&&(_.parent=s,d.push(_))}h.finish()}},t.prototype.parseTopLevelStatement=function(e,t){void 0===t&&(t=null);for(var r=a.CommonFlags.NONE,n=-1,i=null;e.skip(o.Token.AT);){n<0&&(n=e.tokenPos);var s=this.parseDecorator(e);s?(i||(i=[]),i.push(s)):this.skipStatement(e)}r|=e.source.flags&a.CommonFlags.BUILTIN;var p=0,l=0;e.skip(o.Token.EXPORT)&&(e.skip(o.Token.DEFAULT)&&this.error(c.DiagnosticCode.Operation_not_supported,e.range()),n<0&&(n=e.tokenPos),r|=a.CommonFlags.EXPORT,p=e.tokenPos,l=e.pos);var u=null!=t&&t.is(a.CommonFlags.AMBIENT);e.skip(o.Token.DECLARE)?(n<0&&(n=e.tokenPos),u&&this.error(c.DiagnosticCode.A_declare_modifier_cannot_be_used_in_an_already_ambient_context,e.range()),r|=a.CommonFlags.DECLARE|a.CommonFlags.AMBIENT):u&&(r|=a.CommonFlags.AMBIENT);var h=null,d=e.peek();switch(n<0&&(n=e.nextTokenPos),d){case o.Token.CONST:if(e.next(),r|=a.CommonFlags.CONST,e.skip(o.Token.ENUM)){h=this.parseEnum(e,r,i,n);break}h=this.parseVariable(e,r,i,n),i=null;break;case o.Token.LET:r|=a.CommonFlags.LET;case o.Token.VAR:e.next(),h=this.parseVariable(e,r,i,n),i=null;break;case o.Token.ENUM:e.next(),h=this.parseEnum(e,r,i,n),i=null;break;case o.Token.FUNCTION:e.next(),h=this.parseFunction(e,r,i,n),i=null;break;case o.Token.ABSTRACT:var _=e.mark();if(e.next(),!e.skip(o.Token.CLASS)){e.reset(_),h=this.parseStatement(e,!0);break}e.discard(_),r|=a.CommonFlags.ABSTRACT;case o.Token.CLASS:case o.Token.INTERFACE:e.next(),h=this.parseClassOrInterface(e,r,i,n),i=null;break;case o.Token.NAMESPACE:_=e.mark();e.next(),e.peek(!1,o.IdentifierHandling.PREFER)==o.Token.IDENTIFIER?(e.discard(_),h=this.parseNamespace(e,r,i,n),i=null):(e.reset(_),h=this.parseStatement(e,!0));break;case o.Token.IMPORT:e.next(),h=(r|=a.CommonFlags.IMPORT)&a.CommonFlags.EXPORT?this.parseExportImport(e,n):this.parseImport(e);break;case o.Token.TYPE:_=e.mark();e.next(),e.peek(!1,o.IdentifierHandling.PREFER)==o.Token.IDENTIFIER?(e.discard(_),h=this.parseTypeDeclaration(e,r,i,n),i=null):(e.reset(_),h=this.parseStatement(e,!0));break;default:r&a.CommonFlags.EXPORT?h=this.parseExport(e,r,n):(l&&this.error(c.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(p,l),"export"),t||(h=this.parseStatement(e,!0)))}if(i)for(var m=0,y=i.length;m"),null}if(e.skip(o.Token.BAR)){if(!e.skip(o.Token.NULL))return r||this.error(c.DiagnosticCode._0_expected,e.range(e.pos),"null"),null;_=!0}n=l.Node.createType(h,d,_,e.range(a,e.pos))}for(;e.skip(o.Token.OPENBRACKET);){var y=e.tokenPos;if(!e.skip(o.Token.CLOSEBRACKET))return r||this.error(c.DiagnosticCode._0_expected,e.range(),"]"),null;var g=e.range(y,e.pos);_=!1;if(e.skip(o.Token.BAR)){if(!e.skip(o.Token.NULL))return r||this.error(c.DiagnosticCode._0_expected,e.range(),"null"),null;_=!0}if(n=l.Node.createType(l.Node.createIdentifierExpression("Array",g),[n],_,e.range(a,e.pos)),_)break}return n},t.prototype.tryParseSignature=function(e){var t,r=e.mark(),n=e.tokenPos,i=null,a=null,s=!1;if(e.skip(o.Token.CLOSEPAREN))s=!0,e.discard(r),i=[];else{s=!1;do{var p=l.ParameterKind.DEFAULT;if(e.skip(o.Token.DOT_DOT_DOT)&&(s=!0,e.discard(r),p=l.ParameterKind.REST),e.skip(o.Token.THIS)){if(!e.skip(o.Token.COLON))return e.reset(r),this.tryParseSignatureIsSignature=!1,null;s=!0,e.discard(r);var u=this.parseType(e,!1);if(!u)return null;if(u.kind!=l.NodeKind.TYPE)return this.error(c.DiagnosticCode.Operation_not_supported,u.range),this.tryParseSignatureIsSignature=!0,null;a=u}else{if(!e.skipIdentifier())return s?this.error(c.DiagnosticCode.Identifier_expected,e.range()):e.reset(r),this.tryParseSignatureIsSignature=s,null;var h=l.Node.createIdentifierExpression(e.readIdentifier(),e.range(e.tokenPos,e.pos));if(e.skip(o.Token.QUESTION)&&(s=!0,e.discard(r),p==l.ParameterKind.REST?this.error(c.DiagnosticCode.A_rest_parameter_cannot_be_optional,e.range()):p=l.ParameterKind.OPTIONAL),e.skip(o.Token.COLON)){s=!0,e.discard(r);var d=this.parseType(e);if(!d)return this.tryParseSignatureIsSignature=s,null;var _=new l.ParameterNode;_.parameterKind=p,_.name=h,_.type=d,i?i.push(_):i=[_]}else s&&this.error(c.DiagnosticCode.Type_expected,e.range())}}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEPAREN))return this.error(c.DiagnosticCode._0_expected,e.range(),")"),this.tryParseSignatureIsSignature=s,null}return e.skip(o.Token.EQUALS_GREATERTHAN)?(s=!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=s,null)):(s?this.error(c.DiagnosticCode._0_expected,e.range(),"=>"):e.reset(r),this.tryParseSignatureIsSignature=s,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(o.Token.DOT);){if(!e.skipIdentifier())return this.error(c.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(o.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(c.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(o.Token.COMMA));var s=l.Node.createVariableStatement(i,r,t,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),s},t.prototype.parseVariableDeclaration=function(e,t,r){if(!e.skipIdentifier())return this.error(c.DiagnosticCode.Identifier_expected,e.range()),null;var n=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),i=t,s=null;e.skip(o.Token.COLON)&&(s=this.parseType(e));var p=null;if(e.skip(o.Token.EQUALS)){if(i&a.CommonFlags.AMBIENT&&this.error(c.DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,e.range()),!(p=this.parseExpression(e,1)))return null}else i&a.CommonFlags.CONST?i&a.CommonFlags.AMBIENT||this.error(c.DiagnosticCode._const_declarations_must_be_initialized,n.range):s||this.error(c.DiagnosticCode.Type_expected,e.range(e.pos));return l.Node.createVariableDeclaration(n,s,p,r,i,o.Range.join(n.range,e.range()))},t.prototype.parseEnum=function(e,t,r,n){if(e.next()!=o.Token.IDENTIFIER)return this.error(c.DiagnosticCode.Identifier_expected,e.range()),null;var i=l.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.next()!=o.Token.OPENBRACE)return this.error(c.DiagnosticCode._0_expected,e.range(),"{"),null;for(var s=new Array;!e.skip(o.Token.CLOSEBRACE);){var p=this.parseEnumValue(e,a.CommonFlags.NONE);if(!p)return null;if(s.push(p),!e.skip(o.Token.COMMA)){if(e.skip(o.Token.CLOSEBRACE))break;return this.error(c.DiagnosticCode._0_expected,e.range(),"}"),null}}var u=l.Node.createEnumDeclaration(i,s,r,t,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),u},t.prototype.parseEnumValue=function(e,t){if(!e.skipIdentifier())return this.error(c.DiagnosticCode.Identifier_expected,e.range()),null;var r=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),n=null;return e.skip(o.Token.EQUALS)&&!(n=this.parseExpression(e,1))?null:l.Node.createEnumValueDeclaration(r,n,t,o.Range.join(r.range,e.range()))},t.prototype.parseReturn=function(e){var t=null;if(e.peek(!0)!=o.Token.SEMICOLON&&e.nextToken!=o.Token.CLOSEBRACE&&!e.nextTokenOnNewLine&&!(t=this.parseExpression(e)))return null;var r=l.Node.createReturnStatement(t,e.range());return e.skip(o.Token.SEMICOLON),r},t.prototype.parseTypeParameters=function(e){for(var t=new Array;!e.skip(o.Token.GREATERTHAN);){var r=this.parseTypeParameter(e);if(!r)return null;if(t.push(r),!e.skip(o.Token.COMMA)){if(e.skip(o.Token.GREATERTHAN))break;return this.error(c.DiagnosticCode._0_expected,e.range(),">"),null}}return 0===t.length&&this.error(c.DiagnosticCode.Type_parameter_list_cannot_be_empty,e.range()),t},t.prototype.parseTypeParameter=function(e){if(e.next()==o.Token.IDENTIFIER){var t=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(o.Token.EXTENDS)){var n=this.parseType(e);if(!n)return null;if(n.kind!=l.NodeKind.TYPE)return this.error(c.DiagnosticCode.Operation_not_supported,n.range),null;r=n}return l.Node.createTypeParameter(t,r,o.Range.join(t.range,e.range()))}return this.error(c.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,s=null;if(this.parseParametersThis=null,e.skip(o.Token.THIS)){if(!e.skip(o.Token.COLON))return this.error(c.DiagnosticCode._0_expected,e.range(),":"),null;if(!(s=this.parseType(e)))return null;if(s.kind==l.NodeKind.TYPE?this.parseParametersThis=s:this.error(c.DiagnosticCode.Operation_not_supported,s.range),!e.skip(o.Token.COMMA))return e.skip(o.Token.CLOSEPAREN)?r:(this.error(c.DiagnosticCode._0_expected,e.range(),")"),null)}for(;!e.skip(o.Token.CLOSEPAREN);){var p=this.parseParameter(e,t);if(!p)return null;switch(n&&!a&&(this.error(c.DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,n.name.range),a=!0),p.parameterKind){default:i&&this.error(c.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(o.Token.COMMA)){if(e.skip(o.Token.CLOSEPAREN))break;return this.error(c.DiagnosticCode._0_expected,e.range(),")"),null}}return r},t.prototype.parseParameter=function(e,t){void 0===t&&(t=!1);var r=!1,n=!1,i=null,s=a.CommonFlags.NONE;if(t&&(e.skip(o.Token.PUBLIC)?(i=e.range(),s|=a.CommonFlags.PUBLIC):e.skip(o.Token.PROTECTED)?(i=e.range(),s|=a.CommonFlags.PROTECTED):e.skip(o.Token.PRIVATE)&&(i=e.range(),s|=a.CommonFlags.PRIVATE),e.peek()==o.Token.READONLY)){var p=e.mark();e.next(),e.peek()!=o.Token.COLON?(e.discard(p),i||(i=e.range()),s|=a.CommonFlags.READONLY):e.reset(p)}if(e.skip(o.Token.DOT_DOT_DOT)&&(s?this.error(c.DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,e.range()):i=e.range(),r=!0),e.skipIdentifier()){r||(i=e.range());var u=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),h=null;if((n=e.skip(o.Token.QUESTION))&&r&&this.error(c.DiagnosticCode.A_rest_parameter_cannot_be_optional,u.range),e.skip(o.Token.COLON)){if(!(h=this.parseType(e)))return null}else h=l.Node.createOmittedType(e.range(e.pos));var d=null;if(e.skip(o.Token.EQUALS)&&(r&&this.error(c.DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,u.range),n?this.error(c.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,u.range):n=!0,!(d=this.parseExpression(e,1))))return null;var _=l.Node.createParameter(u,h,d,r?l.ParameterKind.REST:n?l.ParameterKind.OPTIONAL:l.ParameterKind.DEFAULT,o.Range.join(i,e.range()));return _.flags|=s,_}return this.error(c.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseFunction=function(e,t,r,n){if(!e.skipIdentifier())return this.error(c.DiagnosticCode.Identifier_expected,e.range(e.pos)),null;var i=l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),s=-1,p=null;if(e.skip(o.Token.LESSTHAN)){if(s=e.tokenPos,!(p=this.parseTypeParameters(e)))return null;t|=a.CommonFlags.GENERIC}if(!e.skip(o.Token.OPENPAREN))return this.error(c.DiagnosticCode._0_expected,e.range(e.pos),"("),null;s<0&&(s=e.tokenPos);var u=this.parseParameters(e);if(!u)return null;var h=this.parseParametersThis,d=0!=(t&a.CommonFlags.SET);d&&(1!=u.length&&this.error(c.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,i.range),u.length&&u[0].initializer&&this.error(c.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,i.range)),t&a.CommonFlags.GET&&u.length&&this.error(c.DiagnosticCode.A_get_accessor_cannot_have_parameters,i.range);var _=null;if(e.skip(o.Token.COLON)&&!(_=this.parseType(e,!0,d)))return null;_||(_=l.Node.createOmittedType(e.range(e.pos)),d||this.error(c.DiagnosticCode.Type_expected,_.range));var m=l.Node.createSignature(u,_,h,!1,e.range(s,e.pos)),y=null;if(e.skip(o.Token.OPENBRACE)){if(t&a.CommonFlags.AMBIENT&&this.error(c.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,e.range()),!(y=this.parseBlockStatement(e,!1)))return null}else t&a.CommonFlags.AMBIENT||this.error(c.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,e.range(e.pos));var g=l.Node.createFunctionDeclaration(i,p,m,y,r,t,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),g},t.prototype.parseFunctionExpression=function(e){var t,r=e.tokenPos,n=!1;if(e.token==o.Token.FUNCTION){if(t=e.skipIdentifier()?l.Node.createIdentifierExpression(e.readIdentifier(),e.range()):l.Node.createEmptyIdentifierExpression(e.range(e.pos)),!e.skip(o.Token.OPENPAREN))return this.error(c.DiagnosticCode._0_expected,e.range(e.pos),"("),null}else n=!0,assert(e.token==o.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,i,s){void 0===i&&(i=-1),void 0===s&&(s=-1),i<0&&(i=t.range.start),s<0&&(s=i);var p=null;if(e.skip(o.Token.COLON)){if(!(p=this.parseType(e)))return null}else p=l.Node.createOmittedType(e.range(e.pos)),this.error(c.DiagnosticCode.Type_expected,p.range);if(n&&!e.skip(o.Token.EQUALS_GREATERTHAN))return this.error(c.DiagnosticCode._0_expected,e.range(e.pos),"=>"),null;var u,h=l.Node.createSignature(r,p,null,!1,e.range(s,e.pos));if(n)u=this.parseStatement(e,!1);else{if(!e.skip(o.Token.OPENBRACE))return this.error(c.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?a.CommonFlags.ARROW:a.CommonFlags.NONE,e.range(i,e.pos));return l.Node.createFunctionExpression(d)},t.prototype.parseClassOrInterface=function(e,t,r,n){var i=e.token==o.Token.INTERFACE;if(!e.skipIdentifier())return this.error(c.DiagnosticCode.Identifier_expected,e.range()),null;var s,p=l.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(o.Token.LESSTHAN)){if(!(s=this.parseTypeParameters(e)))return null;t|=a.CommonFlags.GENERIC}else s=[];var u=null;if(e.skip(o.Token.EXTENDS)){var h=this.parseType(e);if(!h)return null;if(h.kind!=l.NodeKind.TYPE)return this.error(c.DiagnosticCode.Operation_not_supported,h.range),null;u=h}var d=null;if(e.skip(o.Token.IMPLEMENTS)){i&&this.error(c.DiagnosticCode.Interface_declaration_cannot_have_implements_clause,e.range());do{var _=this.parseType(e);if(!_)return null;i||(d||(d=[]),d.push(_))}while(e.skip(o.Token.COMMA))}if(!e.skip(o.Token.OPENBRACE))return this.error(c.DiagnosticCode._0_expected,e.range(),"{"),null;var m,y=new Array;if(i?(assert(!d),m=l.Node.createInterfaceDeclaration(p,s,u,y,r,t,e.range(n,e.pos))):m=l.Node.createClassDeclaration(p,s,u,d,y,r,t,e.range(n,e.pos)),!e.skip(o.Token.CLOSEBRACE))do{var g=this.parseClassMember(e,m);if(!g)return null;g.parent=m,y.push(g)}while(!e.skip(o.Token.CLOSEBRACE));return m},t.prototype.parseClassMember=function(e,t){for(var r=e.pos,n=new Array;e.skip(o.Token.AT);){var i=this.parseDecorator(e);if(!i)break;n.push(i)}var s=t.flags&a.CommonFlags.AMBIENT;e.skip(o.Token.PUBLIC)?s|=a.CommonFlags.PUBLIC:e.skip(o.Token.PRIVATE)?s|=a.CommonFlags.PRIVATE:e.skip(o.Token.PROTECTED)&&(s|=a.CommonFlags.PROTECTED);var p=0,u=0,h=0,d=0;e.skip(o.Token.STATIC)?(s|=a.CommonFlags.STATIC,p=e.tokenPos,u=e.pos):(e.skip(o.Token.ABSTRACT)?(s|=a.CommonFlags.ABSTRACT|a.CommonFlags.INSTANCE,h=e.tokenPos,d=e.pos):s|=a.CommonFlags.INSTANCE,t.flags&a.CommonFlags.GENERIC&&(s|=a.CommonFlags.GENERIC_CONTEXT));var _=0,m=0;e.skip(o.Token.READONLY)&&(s|=a.CommonFlags.READONLY,_=e.tokenPos,m=e.pos);var y=e.mark(),g=!1,T=!1,E=!1,f=0,I=0;if(e.skip(o.Token.GET)?e.peek(!0,o.IdentifierHandling.PREFER)!=o.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(y):(s|=a.CommonFlags.GET,T=!0,f=e.tokenPos,I=e.pos,s&a.CommonFlags.READONLY&&this.error(c.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(_,m),"readonly")):e.skip(o.Token.SET)?e.peek(!0,o.IdentifierHandling.PREFER)!=o.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(y):(s|=a.CommonFlags.SET|a.CommonFlags.SET,E=!0,f=e.tokenPos,I=e.pos,s&a.CommonFlags.READONLY&&this.error(c.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(_,m),"readonly")):e.skip(o.Token.CONSTRUCTOR)&&(g=!0,(s|=a.CommonFlags.CONSTRUCTOR)&a.CommonFlags.STATIC&&this.error(c.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(p,u),"static"),s&a.CommonFlags.ABSTRACT&&this.error(c.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(h,d),"abstract"),s&a.CommonFlags.READONLY&&this.error(c.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(_,m),"readonly")),!g&&!e.skipIdentifier())return this.error(c.DiagnosticCode.Identifier_expected,e.range()),null;var v=g?l.Node.createConstructorExpression(e.range()):l.Node.createIdentifierExpression(e.readIdentifier(),e.range()),A=null;if(e.skip(o.Token.LESSTHAN)){var C=e.tokenPos;if(!(A=this.parseTypeParameters(e)))return null;g?this.error(c.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,e.range(C,e.pos)):T||E?this.error(c.DiagnosticCode.An_accessor_cannot_have_type_parameters,e.range(C,e.pos)):s|=a.CommonFlags.GENERIC}if(e.skip(o.Token.OPENPAREN)){var N=e.tokenPos,S=this.parseParameters(e,g);if(!S)return null;var O=this.parseParametersThis;if(g)for(var L=0,b=S.length;L"),null):null;case o.Token.IDENTIFIER:return l.Node.createIdentifierExpression(e.readIdentifier(),e.range(r,e.pos));case o.Token.THIS:return l.Node.createThisExpression(e.range(r,e.pos));case o.Token.CONSTRUCTOR:return l.Node.createConstructorExpression(e.range(r,e.pos));case o.Token.SUPER:return l.Node.createSuperExpression(e.range(r,e.pos));case o.Token.STRINGLITERAL:return l.Node.createStringLiteralExpression(e.readString(),e.range(r,e.pos));case o.Token.INTEGERLITERAL:return l.Node.createIntegerLiteralExpression(e.readInteger(),e.range(r,e.pos));case o.Token.FLOATLITERAL:return l.Node.createFloatLiteralExpression(e.readFloat(),e.range(r,e.pos));case o.Token.SLASH:var d=e.readRegexpPattern();return e.skip(o.Token.SLASH)?l.Node.createRegexpLiteralExpression(d,e.readRegexpFlags(),e.range(r,e.pos)):(this.error(c.DiagnosticCode._0_expected,e.range(),"/"),null);case o.Token.FUNCTION:return this.parseFunctionExpression(e);default:return this.error(c.DiagnosticCode.Expression_expected,e.range()),null}},t.prototype.tryParseTypeArgumentsBeforeArguments=function(e){var t=e.mark();if(!e.skip(o.Token.LESSTHAN))return null;var r=new Array;do{if(e.peek()===o.Token.GREATERTHAN)break;var n=this.parseType(e,!0,!0);if(!n)return e.reset(t),null;r.push(n)}while(e.skip(o.Token.COMMA));return e.skip(o.Token.GREATERTHAN)&&e.skip(o.Token.OPENPAREN)?r:(e.reset(t),null)},t.prototype.parseArguments=function(e){for(var t=new Array;!e.skip(o.Token.CLOSEPAREN);){var r=this.parseExpression(e,1);if(!r)return null;if(t.push(r),!e.skip(o.Token.COMMA)){if(e.skip(o.Token.CLOSEPAREN))break;return this.error(c.DiagnosticCode._0_expected,e.range(),")"),null}}return t},t.prototype.parseExpression=function(e,t){void 0===t&&(t=0);var r=this.parseExpressionStart(e);if(!r)return null;var n,i=r.range.start;if(l.nodeIsCallable(r.kind))for(var a=null;e.skip(o.Token.OPENPAREN)||l.nodeIsGenericCallable(r.kind)&&null!==(a=this.tryParseTypeArgumentsBeforeArguments(e));){var s=this.parseArguments(e);if(!s)return null;r=l.Node.createCallExpression(r,a,s,e.range(i,e.pos))}for(var p,u=null;(p=d(n=e.peek()))>=t;)switch(e.next(),n){case o.Token.AS:var h=this.parseType(e);if(!h)return null;r=l.Node.createAssertionExpression(l.AssertionKind.AS,r,h,e.range(i,e.pos));break;case o.Token.INSTANCEOF:var m=this.parseType(e);if(!m)return null;r=l.Node.createInstanceOfExpression(r,m,e.range(i,e.pos));break;case o.Token.OPENBRACKET:if(!(u=this.parseExpression(e)))return null;if(!e.skip(o.Token.CLOSEBRACKET))return this.error(c.DiagnosticCode._0_expected,e.range(),"]"),null;r=l.Node.createElementAccessExpression(r,u,e.range(i,e.pos));break;case o.Token.PLUS_PLUS:case o.Token.MINUS_MINUS:r.kind!=l.NodeKind.IDENTIFIER&&r.kind!=l.NodeKind.ELEMENTACCESS&&r.kind!=l.NodeKind.PROPERTYACCESS&&this.error(c.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 o.Token.QUESTION:var y=this.parseExpression(e);if(!y)return null;if(!e.skip(o.Token.COLON))return this.error(c.DiagnosticCode._0_expected,e.range(),":"),null;var g=this.parseExpression(e,t>0?1:0);if(!g)return null;r=l.Node.createTernaryExpression(r,y,g,e.range(i,e.pos));break;case o.Token.COMMA:var T=[r];do{if(!(r=this.parseExpression(e,1)))return null;T.push(r)}while(e.skip(o.Token.COMMA));r=l.Node.createCommaExpression(T,e.range(i,e.pos));break;default:if(!(u=this.parseExpression(e,_(n)?p:p+1)))return null;if(n==o.Token.DOT)if(u.kind==l.NodeKind.IDENTIFIER)r=l.Node.createPropertyAccessExpression(r,u,e.range(i,e.pos));else{if(u.kind!=l.NodeKind.CALL)return this.error(c.DiagnosticCode.Identifier_expected,u.range),null;var E=u;if(E.expression.kind!=l.NodeKind.IDENTIFIER)return this.error(c.DiagnosticCode.Identifier_expected,E.expression.range),null;E.expression=l.Node.createPropertyAccessExpression(r,E.expression,e.range(i,e.pos)),r=E}else r=l.Node.createBinaryExpression(n,r,u,e.range(i,e.pos))}return r},t.prototype.skipStatement=function(e){for(e.peek(!0),e.nextTokenOnNewLine&&e.next();;){var t=e.peek(!0);if(t==o.Token.ENDOFFILE||t==o.Token.SEMICOLON){e.next();break}if(e.nextTokenOnNewLine)break;switch(e.next()){case o.Token.IDENTIFIER:e.readIdentifier();break;case o.Token.STRINGLITERAL:e.readString();break;case o.Token.INTEGERLITERAL:e.readInteger();break;case o.Token.FLOATLITERAL:e.readFloat()}}},t}(c.DiagnosticEmitter);function d(e){switch(e){case o.Token.COMMA:return 0;case o.Token.EQUALS:case o.Token.PLUS_EQUALS:case o.Token.MINUS_EQUALS:case o.Token.ASTERISK_ASTERISK_EQUALS:case o.Token.ASTERISK_EQUALS:case o.Token.SLASH_EQUALS:case o.Token.PERCENT_EQUALS:case o.Token.LESSTHAN_LESSTHAN_EQUALS:case o.Token.GREATERTHAN_GREATERTHAN_EQUALS:case o.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case o.Token.AMPERSAND_EQUALS:case o.Token.CARET_EQUALS:case o.Token.BAR_EQUALS:return 3;case o.Token.QUESTION:return 4;case o.Token.BAR_BAR:return 5;case o.Token.AMPERSAND_AMPERSAND:return 6;case o.Token.BAR:return 7;case o.Token.CARET:return 8;case o.Token.AMPERSAND:return 9;case o.Token.EQUALS_EQUALS:case o.Token.EXCLAMATION_EQUALS:case o.Token.EQUALS_EQUALS_EQUALS:case o.Token.EXCLAMATION_EQUALS_EQUALS:return 10;case o.Token.AS:case o.Token.IN:case o.Token.INSTANCEOF:case o.Token.LESSTHAN:case o.Token.GREATERTHAN:case o.Token.LESSTHAN_EQUALS:case o.Token.GREATERTHAN_EQUALS:return 11;case o.Token.LESSTHAN_LESSTHAN:case o.Token.GREATERTHAN_GREATERTHAN:case o.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:return 12;case o.Token.PLUS:case o.Token.MINUS:return 13;case o.Token.ASTERISK:case o.Token.SLASH:case o.Token.PERCENT:return 14;case o.Token.ASTERISK_ASTERISK:return 15;case o.Token.PLUS_PLUS:case o.Token.MINUS_MINUS:return 17;case o.Token.DOT:case o.Token.NEW:case o.Token.OPENBRACKET:return 19;default:return-1}}function _(e){switch(e){case o.Token.EQUALS:case o.Token.PLUS_EQUALS:case o.Token.MINUS_EQUALS:case o.Token.ASTERISK_ASTERISK_EQUALS:case o.Token.ASTERISK_EQUALS:case o.Token.SLASH_EQUALS:case o.Token.PERCENT_EQUALS:case o.Token.LESSTHAN_LESSTHAN_EQUALS:case o.Token.GREATERTHAN_GREATERTHAN_EQUALS:case o.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case o.Token.AMPERSAND_EQUALS:case o.Token.CARET_EQUALS:case o.Token.BAR_EQUALS:case o.Token.QUESTION:case o.Token.ASTERISK_ASTERISK:return!0;default:return!1}}t.Parser=h,function(e){e[e.COMMA=0]="COMMA",e[e.SPREAD=1]="SPREAD",e[e.YIELD=2]="YIELD",e[e.ASSIGNMENT=3]="ASSIGNMENT",e[e.CONDITIONAL=4]="CONDITIONAL",e[e.LOGICAL_OR=5]="LOGICAL_OR",e[e.LOGICAL_AND=6]="LOGICAL_AND",e[e.BITWISE_OR=7]="BITWISE_OR",e[e.BITWISE_XOR=8]="BITWISE_XOR",e[e.BITWISE_AND=9]="BITWISE_AND",e[e.EQUALITY=10]="EQUALITY",e[e.RELATIONAL=11]="RELATIONAL",e[e.SHIFT=12]="SHIFT",e[e.ADDITIVE=13]="ADDITIVE",e[e.MULTIPLICATIVE=14]="MULTIPLICATIVE",e[e.EXPONENTIATED=15]="EXPONENTIATED",e[e.UNARY_PREFIX=16]="UNARY_PREFIX",e[e.UNARY_POSTFIX=17]="UNARY_POSTFIX",e[e.CALL=18]="CALL",e[e.MEMBERACCESS=19]="MEMBERACCESS",e[e.GROUPING=20]="GROUPING",e[e.INVALID=-1]="INVALID"}(t.Precedence||(t.Precedence={}))},function(e,t,r){"use strict";var n,i=this&&this.__extends||(n=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])},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),a=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}}}},s=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 o=r(0),c=r(5),p=r(1),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=a(this.program.moduleLevelExports.values()),n=r.next();!n.done;n=r.next()){var i=n.value;this.visitElement(i)}}catch(t){e={error:t}}finally{try{n&&!n.done&&(t=r.return)&&t.call(r)}finally{if(e)throw e.error}}for(var s=this.todo;00&&this.push(", "),this.push("$"),this.push(i.toString(10)),this.push(": "),this.push(a(n.getFunctionParamType(e,i)));this.push("): "),this.push(a(n.getFunctionResultType(e))),this.push(" "),n.getExpressionId(r)!=n.ExpressionId.Block&&this.push("{\n"),this.decompileExpression(r),n.getExpressionId(r)!=n.ExpressionId.Block&&this.push("\n}\n"),++this.functionId},e.prototype.decompileExpression=function(e){var t,r,i,s,o=n.getExpressionId(e),c=n.getExpressionType(e);switch(o){case n.ExpressionId.Block:for(null!=(r=n.getBlockName(e))&&(this.push(r),this.push(": ")),this.push("{\n"),s=n.getBlockChildCount(e),i=0;i("),this.push(n.getLoadOffset(e).toString(10)),this.push(" + "),this.decompileExpression(n.getLoadPtr(e)),void this.push(")");case n.ExpressionId.Store:return this.push("store<"),this.push(a(c)),this.push(">("),this.push(n.getStoreOffset(e).toString(10)),this.push(" + "),this.decompileExpression(n.getStorePtr(e)),this.push(", "),this.decompileExpression(n.getStoreValue(e)),void this.push(")");case n.ExpressionId.Const:switch(c){case n.NativeType.I32:return void this.push(n.getConstValueI32(e).toString(10));case n.NativeType.I64:return void this.push(i64_to_string(i64_new(n.getConstValueI64Low(e),n.getConstValueI64High(e))));case n.NativeType.F32:return void this.push(n.getConstValueF32(e).toString(10));case n.NativeType.F64:return void this.push(n.getConstValueF64(e).toString(10))}break;case n.ExpressionId.Unary:switch(n.getUnaryOp(e)){case n.UnaryOp.ClzI32:return this.push("clz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CtzI32:return this.push("ctz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.PopcntI32:return this.push("popcnt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NegF32:case n.UnaryOp.NegF64:return this.push("-"),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.AbsF32:return this.push("abs("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CeilF32:return this.push("ceil("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.FloorF32:return this.push("floor("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.TruncF32:return this.push("trunc("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NearestF32:return this.push("nearest("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.SqrtF32:return this.push("sqrt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.EqzI32:case n.UnaryOp.EqzI64:return this.push("!"),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ClzI64:return this.push("clz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CtzI64:return this.push("ctz("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.PopcntI64:return this.push("popcnt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.AbsF64:return this.push("abs("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.CeilF64:return this.push("ceil("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.FloorF64:return this.push("floor("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.TruncF64:return this.push("trunc("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.NearestF64:return this.push("nearest("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.SqrtF64:return this.push("sqrt("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ExtendI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ExtendU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.WrapI64:case n.UnaryOp.TruncF32ToI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToI64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF32ToU64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToI32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToI64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToU32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.TruncF64ToU64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ReinterpretF32:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ReinterpretF64:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ConvertI32ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI32ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU32ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU32ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI64ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertI64ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU64ToF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ConvertU64ToF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.PromoteF32:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.DemoteF64:return this.push(""),void this.decompileExpression(n.getUnaryValue(e));case n.UnaryOp.ReinterpretI32:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")");case n.UnaryOp.ReinterpretI64:return this.push("reinterpret("),this.decompileExpression(n.getUnaryValue(e)),void this.push(")")}break;case n.ExpressionId.Binary:switch(n.getBinaryOp(e)){case n.BinaryOp.AddI32:case n.BinaryOp.AddI64:case n.BinaryOp.AddF32:case n.BinaryOp.AddF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" + "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.SubI32:case n.BinaryOp.SubI64:case n.BinaryOp.SubF32:case n.BinaryOp.SubF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" - "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.MulI32:case n.BinaryOp.MulI64:case n.BinaryOp.MulF32:case n.BinaryOp.MulF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" * "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivI32:case n.BinaryOp.DivI64:case n.BinaryOp.DivF32:case n.BinaryOp.DivF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivU32:return this.push("("),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RemI32:case n.BinaryOp.RemI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" % "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RemU32:return this.push("("),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.AndI32:case n.BinaryOp.AndI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" & "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.OrI32:case n.BinaryOp.OrI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" | "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.XorI32:case n.BinaryOp.XorI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" ^ "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShlI32:case n.BinaryOp.ShlI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" << "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShrU32:case n.BinaryOp.ShrU64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >>> "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.ShrI32:case n.BinaryOp.ShrI64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >> "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RotlI32:return this.push("rotl("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RotrI32:return this.push("rotr("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.EqI32:case n.BinaryOp.EqI64:case n.BinaryOp.EqF32:case n.BinaryOp.EqF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" == "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.NeI32:case n.BinaryOp.NeI64:case n.BinaryOp.NeF32:case n.BinaryOp.NeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" != "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LtI32:case n.BinaryOp.LtI64:case n.BinaryOp.LtF32:case n.BinaryOp.LtF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LtU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeI32:case n.BinaryOp.LeI64:case n.BinaryOp.LeF32:case n.BinaryOp.LeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtI32:case n.BinaryOp.GtI64:case n.BinaryOp.GtF32:case n.BinaryOp.GtF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeI32:case n.BinaryOp.GeI64:case n.BinaryOp.GeF32:case n.BinaryOp.GeF64:return this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeU32:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.DivU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" / "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RemU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" % "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.RotlI64:return this.push("rotl("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.RotrI64:return this.push("rotr("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.LtU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" < "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.LeU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" <= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GtU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" > "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.GeU64:return this.push(""),this.decompileExpression(n.getBinaryLeft(e)),this.push(" >= "),void this.decompileExpression(n.getBinaryRight(e));case n.BinaryOp.CopysignF32:return this.push("copysign("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MinF32:return this.push("min("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MaxF32:return this.push("max("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.CopysignF64:return this.push("copysign("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MinF64:return this.push("min("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")");case n.BinaryOp.MaxF64:return this.push("max("),this.decompileExpression(n.getBinaryLeft(e)),this.push(", "),this.decompileExpression(n.getBinaryRight(e)),void this.push(")")}return;case n.ExpressionId.Select:return this.push("select<"),this.push(a(c)),this.push(">("),this.decompileExpression(n.getSelectThen(e)),this.push(", "),this.decompileExpression(n.getSelectElse(e)),this.push(", "),this.decompileExpression(n.getSelectCondition(e)),void this.push(")");case n.ExpressionId.Drop:return this.decompileExpression(n.getDropValue(e)),void this.push(";\n");case n.ExpressionId.Return:return void((t=n.getReturnValue(e))?(this.push("return "),this.decompileExpression(t),this.push(";\n")):this.push("return;\n"));case n.ExpressionId.Host:switch(n.getHostOp(e)){case n.HostOp.CurrentMemory:return void this.push("current_memory()");case n.HostOp.GrowMemory:return this.push("grow_memory("),this.decompileExpression(n.getHostOperand(e,0)),void this.push(")")}break;case n.ExpressionId.Nop:return void this.push(";\n");case n.ExpressionId.Unreachable:return void this.push("unreachable()");case n.ExpressionId.AtomicCmpxchg:case n.ExpressionId.AtomicRMW:case n.ExpressionId.AtomicWait:case n.ExpressionId.AtomicWake:}throw new Error("not implemented")},e.prototype.push=function(e){this.text.push(e)},e.prototype.finish=function(){var e=this.text.join("");return this.text=[],e},e}();function a(e){switch(e){case n.NativeType.None:return"void";case n.NativeType.I32:return"i32";case n.NativeType.I64:return"i64";case n.NativeType.F32:return"f32";case n.NativeType.F64:return"f64";case n.NativeType.Unreachable:throw new Error("unreachable type");case n.NativeType.Auto:throw new Error("auto type");default:throw new Error("unexpected type")}}t.Decompiler=i},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(10),i=r(13),a=r(12),s=r(2);t.formatDiagnostic=s.formatDiagnosticMessage;var o=r(11);t.parseFile=function(e,t,r,n){return void 0===r&&(r=!1),void 0===n&&(n=null),n||(n=new o.Parser),n.parseFile(e,t,r),n},t.nextFile=function(e){return e.nextFile()},t.nextDiagnostic=function(e){var t=e.program;return t.diagnosticsOffset>>=0)&&e<256)&&(n=s[e])?n:(r=p(e,(0|e)<0?-1:0,!0),i&&(s[e]=r),r):(i=-128<=(e|=0)&&e<128)&&(n=a[e])?n:(r=p(e,e<0?-1:0,!1),i&&(a[e]=r),r)}function c(e,t){if(isNaN(e))return t?T:g;if(t){if(e<0)return T;if(e>=_)return A}else{if(e<=-m)return C;if(e+1>=m)return v}return e<0?c(-e,t).neg():p(e%d|0,e/d|0,t)}function p(e,t,r){return new n(e,t,r)}n.fromInt=o,n.fromNumber=c,n.fromBits=p;var l=Math.pow;function u(e,t,r){if(0===e.length)throw Error("empty string");if("NaN"===e||"Infinity"===e||"+Infinity"===e||"-Infinity"===e)return g;if("number"==typeof t?(r=t,t=!1):t=!!t,(r=r||10)<2||360)throw Error("interior hyphen");if(0===n)return u(e.substring(1),t,r).neg();for(var i=c(l(r,8)),a=g,s=0;s>>0:this.low},N.toNumber=function(){return this.unsigned?(this.high>>>0)*d+(this.low>>>0):this.high*d+(this.low>>>0)},N.toString=function(e){if((e=e||10)<2||36>>0).toString(e);if((a=o).isZero())return p+s;for(;p.length<6;)p="0"+p;s=""+p+s}},N.getHighBits=function(){return this.high},N.getHighBitsUnsigned=function(){return this.high>>>0},N.getLowBits=function(){return this.low},N.getLowBitsUnsigned=function(){return this.low>>>0},N.getNumBitsAbs=function(){if(this.isNegative())return this.eq(C)?64:this.neg().getNumBitsAbs();for(var e=0!=this.high?this.high:this.low,t=31;t>0&&0==(e&1<=0},N.isOdd=function(){return 1==(1&this.low)},N.isEven=function(){return 0==(1&this.low)},N.equals=function(e){return i(e)||(e=h(e)),(this.unsigned===e.unsigned||this.high>>>31!=1||e.high>>>31!=1)&&(this.high===e.high&&this.low===e.low)},N.eq=N.equals,N.notEquals=function(e){return!this.eq(e)},N.neq=N.notEquals,N.ne=N.notEquals,N.lessThan=function(e){return this.comp(e)<0},N.lt=N.lessThan,N.lessThanOrEqual=function(e){return this.comp(e)<=0},N.lte=N.lessThanOrEqual,N.le=N.lessThanOrEqual,N.greaterThan=function(e){return this.comp(e)>0},N.gt=N.greaterThan,N.greaterThanOrEqual=function(e){return this.comp(e)>=0},N.gte=N.greaterThanOrEqual,N.ge=N.greaterThanOrEqual,N.compare=function(e){if(i(e)||(e=h(e)),this.eq(e))return 0;var t=this.isNegative(),r=e.isNegative();return t&&!r?-1:!t&&r?1:this.unsigned?e.high>>>0>this.high>>>0||e.high===this.high&&e.low>>>0>this.low>>>0?-1:1:this.sub(e).isNegative()?-1:1},N.comp=N.compare,N.negate=function(){return!this.unsigned&&this.eq(C)?C:this.not().add(E)},N.neg=N.negate,N.add=function(e){i(e)||(e=h(e));var t=this.high>>>16,r=65535&this.high,n=this.low>>>16,a=65535&this.low,s=e.high>>>16,o=65535&e.high,c=e.low>>>16,l=0,u=0,d=0,_=0;return d+=(_+=a+(65535&e.low))>>>16,u+=(d+=n+c)>>>16,l+=(u+=r+o)>>>16,l+=t+s,p((d&=65535)<<16|(_&=65535),(l&=65535)<<16|(u&=65535),this.unsigned)},N.subtract=function(e){return i(e)||(e=h(e)),this.add(e.neg())},N.sub=N.subtract,N.multiply=function(e){if(this.isZero())return g;if(i(e)||(e=h(e)),r)return p(r.mul(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned);if(e.isZero())return g;if(this.eq(C))return e.isOdd()?C:g;if(e.eq(C))return this.isOdd()?C:g;if(this.isNegative())return e.isNegative()?this.neg().mul(e.neg()):this.neg().mul(e).neg();if(e.isNegative())return this.mul(e.neg()).neg();if(this.lt(y)&&e.lt(y))return c(this.toNumber()*e.toNumber(),this.unsigned);var t=this.high>>>16,n=65535&this.high,a=this.low>>>16,s=65535&this.low,o=e.high>>>16,l=65535&e.high,u=e.low>>>16,d=65535&e.low,_=0,m=0,T=0,E=0;return T+=(E+=s*d)>>>16,m+=(T+=a*d)>>>16,T&=65535,m+=(T+=s*u)>>>16,_+=(m+=n*d)>>>16,m&=65535,_+=(m+=a*u)>>>16,m&=65535,_+=(m+=s*l)>>>16,_+=t*d+n*u+a*l+s*o,p((T&=65535)<<16|(E&=65535),(_&=65535)<<16|(m&=65535),this.unsigned)},N.mul=N.multiply,N.divide=function(e){if(i(e)||(e=h(e)),e.isZero())throw Error("division by zero");var t,n,a;if(r)return this.unsigned||-2147483648!==this.high||-1!==e.low||-1!==e.high?p((this.unsigned?r.div_u:r.div_s)(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned):this;if(this.isZero())return this.unsigned?T:g;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return T;if(e.gt(this.shru(1)))return f;a=T}else{if(this.eq(C))return e.eq(E)||e.eq(I)?C:e.eq(C)?E:(t=this.shr(1).div(e).shl(1)).eq(g)?e.isNegative()?E:I:(n=this.sub(e.mul(t)),a=t.add(n.div(e)));else if(e.eq(C))return this.unsigned?T:g;if(this.isNegative())return e.isNegative()?this.neg().div(e.neg()):this.neg().div(e).neg();if(e.isNegative())return this.div(e.neg()).neg();a=g}for(n=this;n.gte(e);){t=Math.max(1,Math.floor(n.toNumber()/e.toNumber()));for(var s=Math.ceil(Math.log(t)/Math.LN2),o=s<=48?1:l(2,s-48),u=c(t),d=u.mul(e);d.isNegative()||d.gt(n);)d=(u=c(t-=o,this.unsigned)).mul(e);u.isZero()&&(u=E),a=a.add(u),n=n.sub(d)}return a},N.div=N.divide,N.modulo=function(e){return i(e)||(e=h(e)),r?p((this.unsigned?r.rem_u:r.rem_s)(this.low,this.high,e.low,e.high),r.get_high(),this.unsigned):this.sub(this.div(e).mul(e))},N.mod=N.modulo,N.rem=N.modulo,N.not=function(){return p(~this.low,~this.high,this.unsigned)},N.and=function(e){return i(e)||(e=h(e)),p(this.low&e.low,this.high&e.high,this.unsigned)},N.or=function(e){return i(e)||(e=h(e)),p(this.low|e.low,this.high|e.high,this.unsigned)},N.xor=function(e){return i(e)||(e=h(e)),p(this.low^e.low,this.high^e.high,this.unsigned)},N.shiftLeft=function(e){return i(e)&&(e=e.toInt()),0==(e&=63)?this:e<32?p(this.low<>>32-e,this.unsigned):p(0,this.low<>>e|this.high<<32-e,this.high>>e,this.unsigned):p(this.high>>e-32,this.high>=0?0:-1,this.unsigned)},N.shr=N.shiftRight,N.shiftRightUnsigned=function(e){if(i(e)&&(e=e.toInt()),0===(e&=63))return this;var t=this.high;return e<32?p(this.low>>>e|t<<32-e,t>>>e,this.unsigned):p(32===e?t:t>>>e-32,0,this.unsigned)},N.shru=N.shiftRightUnsigned,N.shr_u=N.shiftRightUnsigned,N.toSigned=function(){return this.unsigned?p(this.low,this.high,!1):this},N.toUnsigned=function(){return this.unsigned?this:p(this.low,this.high,!0)},N.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()},N.toBytesLE=function(){var e=this.high,t=this.low;return[255&t,t>>>8&255,t>>>16&255,t>>>24,255&e,e>>>8&255,e>>>16&255,e>>>24]},N.toBytesBE=function(){var e=this.high,t=this.low;return[e>>>24,e>>>16&255,e>>>8&255,255&e,t>>>24,t>>>16&255,t>>>8&255,255&t]},n.fromBytes=function(e,t,r){return r?n.fromBytesLE(e,t):n.fromBytesBE(e,t)},n.fromBytesLE=function(e,t){return new n(e[0]|e[1]<<8|e[2]<<16|e[3]<<24,e[4]|e[5]<<8|e[6]<<16|e[7]<<24,t)},n.fromBytesBE=function(e,t){return new n(e[4]<<24|e[5]<<16|e[6]<<8|e[7],e[0]<<24|e[1]<<16|e[2]<<8|e[3],t)}},function(e,t,r){(function(e){const t=e.Long||r(16);e.i64_zero=t.ZERO,e.i64_one=t.ONE,e.i64_new=function(e,r){return t.fromBits(e,r)},e.i64_low=function(e){return e.low},e.i64_high=function(e){return e.high},e.i64_add=function(e,t){return e.add(t)},e.i64_sub=function(e,t){return e.sub(t)},e.i64_mul=function(e,t){return e.mul(t)},e.i64_div=function(e,t){return e.div(t)},e.i64_div_u=function(e,t){return e.toUnsigned().div(t.toUnsigned()).toSigned()},e.i64_rem=function(e,t){return e.mod(t)},e.i64_rem_u=function(e,t){return e.toUnsigned().mod(t.toUnsigned()).toSigned()},e.i64_and=function(e,t){return e.and(t)},e.i64_or=function(e,t){return e.or(t)},e.i64_xor=function(e,t){return e.xor(t)},e.i64_shl=function(e,t){return e.shl(t)},e.i64_shr=function(e,t){return e.shr(t)},e.i64_shr_u=function(e,t){return e.shru(t)},e.i64_not=function(e){return e.not()},e.i64_eq=function(e,t){return e.eq(t)},e.i64_ne=function(e,t){return e.ne(t)},e.i64_align=function(e,r){assert(r&&0==(r&r-1));var n=t.fromInt(r-1);return e.add(n).and(n.not())},e.i64_is_i8=function(e){return 0===e.high&&e.low>=0&&e.low<=i8.MAX_VALUE||-1===e.high&&e.low>=i8.MIN_VALUE&&e.low<0},e.i64_is_i16=function(e){return 0===e.high&&e.low>=0&&e.low<=i16.MAX_VALUE||-1===e.high&&e.low>=i16.MIN_VALUE&&e.low<0},e.i64_is_i32=function(e){return 0===e.high&&e.low>=0||-1===e.high&&e.low<0},e.i64_is_u8=function(e){return 0===e.high&&e.low>=0&&e.low<=u8.MAX_VALUE},e.i64_is_u16=function(e){return 0===e.high&&e.low>=0&&e.low<=u16.MAX_VALUE},e.i64_is_u32=function(e){return 0===e.high},e.i64_is_bool=function(e){return 0===e.high&&(0===e.low||1===e.low)};const n=t.fromNumber(f32.MIN_SAFE_INTEGER),i=t.fromNumber(f32.MAX_SAFE_INTEGER);e.i64_is_f32=function(e){return e.gte(n)&&e.lte(i)};const a=t.fromNumber(f64.MIN_SAFE_INTEGER),s=t.fromNumber(f64.MAX_SAFE_INTEGER);e.i64_is_f64=function(e){return e.gte(a)&&e.lte(s)},e.i64_to_f32=function(t){return e.Math.fround(t.toNumber())},e.i64_to_f64=function(e){return e.toNumber()},e.i64_to_string=function(e,t){return(t?e.toUnsigned():e).toString(10)}}).call(this,r(6))},function(e,t,r){"use strict";function n(e,t){return e[t]|e[t+1]<<8|e[t+2]<<16|e[t+3]<<24}function i(e,t,r){t[r]=e,t[r+1]=e>>>8,t[r+2]=e>>>16,t[r+3]=e>>>24}function a(e,t){var r=n(e,t),i=n(e,t+4);return i64_new(r,i)}Object.defineProperty(t,"__esModule",{value:!0}),t.readI32=n,t.writeI32=i,t.readI64=a,t.writeI64=function(e,t,r){i(i64_low(e),t,r),i(i64_high(e),t,r+4)},t.readF32=function(e,t){return i32_as_f32(n(e,t))},t.writeF32=function(e,t,r){i(f32_as_i32(e),t,r)},t.readF64=function(e,t){return i64_as_f64(a(e,t))},t.writeF64=function(e,t,r){var n=f64_as_i64(e);i(i64_low(n),t,r),i(i64_high(n),t,r+4)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=" ",i=" ",a=" ";t.indent=function(e,t){for(;t>=4;)e.push(a),t-=4;t>=2&&(e.push(i),t-=2),t&&e.push(n)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=47;function i(e){for(var t,r=0,i=e.length;r+10||i=0;)if(e.charCodeAt(a)==n){r-a==3&&46==e.charCodeAt(a+1)&&46==e.charCodeAt(a+2)||(e=t?e.substring(0,a):e.substring(0,a)+e.substring(r+3),i-=r+3-a,r=a-1);break}if(a<0&&r>0&&(2!=r||46!=e.charCodeAt(0)||46!=e.charCodeAt(1))){i=(e=e.substring(r+4)).length;continue}}}r++}return i>0?e:"."}function a(e){for(var t=e.length;--t>0;)if(e.charCodeAt(t)==n)return e.substring(0,t);return"."}t.normalizePath=i,t.resolvePath=function(e,t){return e.startsWith("std/")?e:i(a(t)+String.fromCharCode(n)+e)},t.dirname=a},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.NULL=0]="NULL",e[e.LINEFEED=10]="LINEFEED",e[e.CARRIAGERETURN=13]="CARRIAGERETURN",e[e.LINESEPARATOR=8232]="LINESEPARATOR",e[e.PARAGRAPHSEPARATOR=8233]="PARAGRAPHSEPARATOR",e[e.NEXTLINE=133]="NEXTLINE",e[e.SPACE=32]="SPACE",e[e.NONBREAKINGSPACE=160]="NONBREAKINGSPACE",e[e.ENQUAD=8192]="ENQUAD",e[e.EMQUAD=8193]="EMQUAD",e[e.ENSPACE=8194]="ENSPACE",e[e.EMSPACE=8195]="EMSPACE",e[e.THREEPEREMSPACE=8196]="THREEPEREMSPACE",e[e.FOURPEREMSPACE=8197]="FOURPEREMSPACE",e[e.SIXPEREMSPACE=8198]="SIXPEREMSPACE",e[e.FIGURESPACE=8199]="FIGURESPACE",e[e.PUNCTUATIONSPACE=8200]="PUNCTUATIONSPACE",e[e.THINSPACE=8201]="THINSPACE",e[e.HAIRSPACE=8202]="HAIRSPACE",e[e.ZEROWIDTHSPACE=8203]="ZEROWIDTHSPACE",e[e.NARROWNOBREAKSPACE=8239]="NARROWNOBREAKSPACE",e[e.IDEOGRAPHICSPACE=12288]="IDEOGRAPHICSPACE",e[e.MATHEMATICALSPACE=8287]="MATHEMATICALSPACE",e[e.OGHAM=5760]="OGHAM",e[e._=95]="_",e[e._0=48]="_0",e[e._1=49]="_1",e[e._2=50]="_2",e[e._3=51]="_3",e[e._4=52]="_4",e[e._5=53]="_5",e[e._6=54]="_6",e[e._7=55]="_7",e[e._8=56]="_8",e[e._9=57]="_9",e[e.a=97]="a",e[e.b=98]="b",e[e.c=99]="c",e[e.d=100]="d",e[e.e=101]="e",e[e.f=102]="f",e[e.g=103]="g",e[e.h=104]="h",e[e.i=105]="i",e[e.j=106]="j",e[e.k=107]="k",e[e.l=108]="l",e[e.m=109]="m",e[e.n=110]="n",e[e.o=111]="o",e[e.p=112]="p",e[e.q=113]="q",e[e.r=114]="r",e[e.s=115]="s",e[e.t=116]="t",e[e.u=117]="u",e[e.v=118]="v",e[e.w=119]="w",e[e.x=120]="x",e[e.y=121]="y",e[e.z=122]="z",e[e.A=65]="A",e[e.B=66]="B",e[e.C=67]="C",e[e.D=68]="D",e[e.E=69]="E",e[e.F=70]="F",e[e.G=71]="G",e[e.H=72]="H",e[e.I=73]="I",e[e.J=74]="J",e[e.K=75]="K",e[e.L=76]="L",e[e.M=77]="M",e[e.N=78]="N",e[e.O=79]="O",e[e.P=80]="P",e[e.Q=81]="Q",e[e.R=82]="R",e[e.S=83]="S",e[e.T=84]="T",e[e.U=85]="U",e[e.V=86]="V",e[e.W=87]="W",e[e.X=88]="X",e[e.Y=89]="Y",e[e.Z=90]="Z",e[e.AMPERSAND=38]="AMPERSAND",e[e.ASTERISK=42]="ASTERISK",e[e.AT=64]="AT",e[e.BACKSLASH=92]="BACKSLASH",e[e.BACKTICK=96]="BACKTICK",e[e.BAR=124]="BAR",e[e.CARET=94]="CARET",e[e.CLOSEBRACE=125]="CLOSEBRACE",e[e.CLOSEBRACKET=93]="CLOSEBRACKET",e[e.CLOSEPAREN=41]="CLOSEPAREN",e[e.COLON=58]="COLON",e[e.COMMA=44]="COMMA",e[e.DOLLAR=36]="DOLLAR",e[e.DOT=46]="DOT",e[e.DOUBLEQUOTE=34]="DOUBLEQUOTE",e[e.EQUALS=61]="EQUALS",e[e.EXCLAMATION=33]="EXCLAMATION",e[e.GREATERTHAN=62]="GREATERTHAN",e[e.HASH=35]="HASH",e[e.LESSTHAN=60]="LESSTHAN",e[e.MINUS=45]="MINUS",e[e.OPENBRACE=123]="OPENBRACE",e[e.OPENBRACKET=91]="OPENBRACKET",e[e.OPENPAREN=40]="OPENPAREN",e[e.PERCENT=37]="PERCENT",e[e.PLUS=43]="PLUS",e[e.QUESTION=63]="QUESTION",e[e.SEMICOLON=59]="SEMICOLON",e[e.SINGLEQUOTE=39]="SINGLEQUOTE",e[e.SLASH=47]="SLASH",e[e.TILDE=126]="TILDE",e[e.BACKSPACE=8]="BACKSPACE",e[e.FORMFEED=12]="FORMFEED",e[e.BYTEORDERMARK=65279]="BYTEORDERMARK",e[e.TAB=9]="TAB",e[e.VERTICALTAB=11]="VERTICALTAB"}(t.CharCode||(t.CharCode={})),t.isLineBreak=function(e){switch(e){case 10:case 13:case 8232:case 8233:return!0;default:return!1}},t.isWhiteSpace=function(e){switch(e){case 32:case 9:case 11:case 12:case 160:case 133:case 5760:case 8239:case 8287:case 12288:case 65279:return!0;default:return e>=8192&&e<=8203}},t.isDecimalDigit=function(e){return e>=48&&e<=57},t.isOctalDigit=function(e){return e>=48&&e<=55},t.isIdentifierStart=function(e){return e>=65&&e<=90||e>=97&&e<=122||36==e||95==e||e>127&&!((t=e)<0||t>65535)&&a(t,n);var t},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&&!((t=e)<0||t>65535)&&a(t,i);var t};var n=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,880,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1162,1319,1329,1366,1369,1369,1377,1415,1488,1514,1520,1522,1568,1610,1646,1647,1649,1747,1749,1749,1765,1766,1774,1775,1786,1788,1791,1791,1808,1808,1810,1839,1869,1957,1969,1969,1994,2026,2036,2037,2042,2042,2048,2069,2074,2074,2084,2084,2088,2088,2112,2136,2208,2208,2210,2220,2308,2361,2365,2365,2384,2384,2392,2401,2417,2423,2425,2431,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2493,2493,2510,2510,2524,2525,2527,2529,2544,2545,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2649,2652,2654,2654,2674,2676,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2749,2749,2768,2768,2784,2785,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2877,2877,2908,2909,2911,2913,2929,2929,2947,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3024,3024,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3133,3160,3161,3168,3169,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3261,3261,3294,3294,3296,3297,3313,3314,3333,3340,3342,3344,3346,3386,3389,3389,3406,3406,3424,3425,3450,3455,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3585,3632,3634,3635,3648,3654,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3760,3762,3763,3773,3773,3776,3780,3782,3782,3804,3807,3840,3840,3904,3911,3913,3948,3976,3980,4096,4138,4159,4159,4176,4181,4186,4189,4193,4193,4197,4198,4206,4208,4213,4225,4238,4238,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5905,5920,5937,5952,5969,5984,5996,5998,6e3,6016,6067,6103,6103,6108,6108,6176,6263,6272,6312,6314,6314,6320,6389,6400,6428,6480,6509,6512,6516,6528,6571,6593,6599,6656,6678,6688,6740,6823,6823,6917,6963,6981,6987,7043,7072,7086,7087,7098,7141,7168,7203,7245,7247,7258,7293,7401,7404,7406,7409,7413,7414,7424,7615,7680,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8305,8305,8319,8319,8336,8348,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11502,11506,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11648,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11823,11823,12293,12295,12321,12329,12337,12341,12344,12348,12353,12438,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42527,42538,42539,42560,42606,42623,42647,42656,42735,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43009,43011,43013,43015,43018,43020,43042,43072,43123,43138,43187,43250,43255,43259,43259,43274,43301,43312,43334,43360,43388,43396,43442,43471,43471,43520,43560,43584,43586,43588,43595,43616,43638,43642,43642,43648,43695,43697,43697,43701,43702,43705,43709,43712,43712,43714,43714,43739,43741,43744,43754,43762,43764,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44002,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64285,64287,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65136,65140,65142,65276,65313,65338,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500],i=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,768,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1155,1159,1162,1319,1329,1366,1369,1369,1377,1415,1425,1469,1471,1471,1473,1474,1476,1477,1479,1479,1488,1514,1520,1522,1552,1562,1568,1641,1646,1747,1749,1756,1759,1768,1770,1788,1791,1791,1808,1866,1869,1969,1984,2037,2042,2042,2048,2093,2112,2139,2208,2208,2210,2220,2276,2302,2304,2403,2406,2415,2417,2423,2425,2431,2433,2435,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2492,2500,2503,2504,2507,2510,2519,2519,2524,2525,2527,2531,2534,2545,2561,2563,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2620,2620,2622,2626,2631,2632,2635,2637,2641,2641,2649,2652,2654,2654,2662,2677,2689,2691,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2748,2757,2759,2761,2763,2765,2768,2768,2784,2787,2790,2799,2817,2819,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2876,2884,2887,2888,2891,2893,2902,2903,2908,2909,2911,2915,2918,2927,2929,2929,2946,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3006,3010,3014,3016,3018,3021,3024,3024,3031,3031,3046,3055,3073,3075,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3140,3142,3144,3146,3149,3157,3158,3160,3161,3168,3171,3174,3183,3202,3203,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3260,3268,3270,3272,3274,3277,3285,3286,3294,3294,3296,3299,3302,3311,3313,3314,3330,3331,3333,3340,3342,3344,3346,3386,3389,3396,3398,3400,3402,3406,3415,3415,3424,3427,3430,3439,3450,3455,3458,3459,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3530,3530,3535,3540,3542,3542,3544,3551,3570,3571,3585,3642,3648,3662,3664,3673,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3769,3771,3773,3776,3780,3782,3782,3784,3789,3792,3801,3804,3807,3840,3840,3864,3865,3872,3881,3893,3893,3895,3895,3897,3897,3902,3911,3913,3948,3953,3972,3974,3991,3993,4028,4038,4038,4096,4169,4176,4253,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4957,4959,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5908,5920,5940,5952,5971,5984,5996,5998,6e3,6002,6003,6016,6099,6103,6103,6108,6109,6112,6121,6155,6157,6160,6169,6176,6263,6272,6314,6320,6389,6400,6428,6432,6443,6448,6459,6470,6509,6512,6516,6528,6571,6576,6601,6608,6617,6656,6683,6688,6750,6752,6780,6783,6793,6800,6809,6823,6823,6912,6987,6992,7001,7019,7027,7040,7155,7168,7223,7232,7241,7245,7293,7376,7378,7380,7414,7424,7654,7676,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8204,8205,8255,8256,8276,8276,8305,8305,8319,8319,8336,8348,8400,8412,8417,8417,8421,8432,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11647,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11744,11775,11823,11823,12293,12295,12321,12335,12337,12341,12344,12348,12353,12438,12441,12442,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42539,42560,42607,42612,42621,42623,42647,42655,42737,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43047,43072,43123,43136,43204,43216,43225,43232,43255,43259,43259,43264,43309,43312,43347,43360,43388,43392,43456,43471,43481,43520,43574,43584,43597,43600,43609,43616,43638,43642,43643,43648,43714,43739,43741,43744,43759,43762,43766,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44010,44012,44013,44016,44025,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65024,65039,65056,65062,65075,65076,65101,65103,65136,65140,65142,65276,65296,65305,65313,65338,65343,65343,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500];function a(e,t){if(e2?(r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),c.length<1?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"1",c.length.toString(10)):e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",c.length.toString(10)),E.createUnreachable()):r&&1==r.length?(m=e.compileExpression(c[0],e.options.usizeType,1,0),(b=2==c.length?u(e,c[1]):0)<0?E.createUnreachable():(e.currentType=r[0],E.createLoad(r[0].byteSize,r[0].is(5),m,r[0].is(4)&&h.is(4)&&h.size>r[0].size?(e.currentType=h).toNativeType():(e.currentType=r[0]).toNativeType(),b))):(r&&r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),E.createUnreachable());case"store":if(e.currentType=a.Type.void,c.length<2||c.length>3)return r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),c.length<2?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"2",c.length.toString(10)):e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),E.createUnreachable();if(!r||1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),E.createUnreachable();m=e.compileExpression(c[0],e.options.usizeType,1,0),y=e.compileExpression(c[1],r[0],r[0].is(4)?0:1,0);f=void 0;return r[0].is(4)&&(!e.currentType.is(4)||e.currentType.size1)return r&&1==r.length||e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),E.createUnreachable();if(!r||1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),E.createUnreachable();var L;if(!(L=r[0].classReference))return e.error(n.DiagnosticCode.Operation_not_supported,d.range),E.createUnreachable();var b=void 0;if(c.length){if(c[0].kind!=i.NodeKind.LITERAL||c[0].literalKind!=i.LiteralKind.STRING)return e.error(n.DiagnosticCode.String_literal_expected,c[0].range),E.createUnreachable();var k=c[0].value,R=L.members?L.members.get(k):null;if(!R||R.kind!=o.ElementKind.FIELD)return e.error(n.DiagnosticCode.Type_0_has_no_property_1,c[0].range,L.internalName,k),E.createUnreachable();b=R.memoryOffset}else b=L.currentMemoryOffset;return e.options.isWasm64?h.is(4)&&h.size<=32?(e.currentType=a.Type.u32,E.createI32(b)):E.createI64(b):h.is(4)&&64==h.size?(e.currentType=a.Type.u64,E.createI64(b)):E.createI32(b);case"select":if(3!=c.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),E.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),E.createUnreachable();m=e.compileExpression(c[0],r[0],1,0)}else m=e.compileExpressionRetainType(c[0],a.Type.i32,0);f=e.currentType;switch(y=e.compileExpression(c[1],f,1,0),g=e.makeIsTrueish(e.compileExpressionRetainType(c[2],a.Type.bool,0),e.currentType),e.currentType=f,e.currentType.kind){case 0:case 1:case 5:case 6:case 10:default:T=E.createSelect(m,y,g);break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),T=E.createUnreachable()}return T;case"unreachable":return 0!=c.length&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",c.length.toString(10)),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),E.createUnreachable();case"current_memory":return e.currentType=a.Type.i32,0!=c.length&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",c.length.toString(10)),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),E.createHost(s.HostOp.CurrentMemory);case"grow_memory":return e.currentType=a.Type.i32,1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",c.length.toString(10)),m=E.createUnreachable()):m=e.compileExpression(c[0],a.Type.i32,1,0),r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),E.createHost(s.HostOp.GrowMemory,null,[m]);case"move_memory":if(r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),3!=c.length)return e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),e.currentType=a.Type.void,E.createUnreachable();throw m=e.compileExpression(c[0],e.options.usizeType,1,0),y=e.compileExpression(c[1],e.options.usizeType,1,0),g=e.compileExpression(c[2],e.options.usizeType,1,0),e.currentType=a.Type.void,new Error("not implemented");case"set_memory":if(r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),3!=c.length)return e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",c.length.toString(10)),e.currentType=a.Type.void,E.createUnreachable();throw m=e.compileExpression(c[0],e.options.usizeType,1,0),y=e.compileExpression(c[1],a.Type.u32,1,0),g=e.compileExpression(c[2],e.options.usizeType,1,0),e.currentType=a.Type.void,new Error("not implemented");case"changetype":return r&&1==r.length?1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),e.currentType=r[0],E.createUnreachable()):(m=e.compileExpressionRetainType(c[0],r[0],0),e.currentType=r[0],e.currentType.size!=r[0].size?(e.error(n.DiagnosticCode.Operation_not_supported,d.range),E.createUnreachable()):m):(r&&r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),E.createUnreachable());case"assert":if(c.length<1||c.length>2)return r&&(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),c.length<1?e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"1",c.length.toString(10)):c.length>2&&e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",c.length.toString(10)),E.createUnreachable();if(r){if(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),E.createUnreachable();m=e.compileExpression(c[0],r[0],1,1)}else m=e.compileExpressionRetainType(c[0],a.Type.bool,1);f=e.currentType;if(e.currentType=f.nonNullableType,e.options.noAssert)return h==a.Type.void?(e.currentType=a.Type.void,E.createNop()):m;var x=_(e,2==c.length?c[1]:null,d);if(e.currentType=f.nonNullableType,h==a.Type.void){switch(e.currentType.kind){default:T=E.createIf(E.createUnary(s.UnaryOp.EqzI32,m),x);break;case 3:case 8:T=E.createIf(E.createUnary(s.UnaryOp.EqzI64,m),x);break;case 4:case 9:T=E.createIf(E.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,m),x);break;case 11:T=E.createIf(E.createBinary(s.BinaryOp.EqF32,m,E.createF32(0)),x);break;case 12:T=E.createIf(E.createBinary(s.BinaryOp.EqF64,m,E.createF64(0)),x);break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),T=x}e.currentType=a.Type.void}else switch(e.currentType.kind){case 0:case 1:case 5:case 6:case 10:A=e.currentFunction.flow,v=e.currentFunction.getAndFreeTempLocal(e.currentType,!A.canOverflow(m,e.currentType));T=E.createIf(E.createTeeLocal(v.index,m),E.createGetLocal(v.index,s.NativeType.I32),x);break;case 2:case 7:default:v=e.currentFunction.getAndFreeTempLocal(a.Type.i32,!1);T=E.createIf(E.createTeeLocal(v.index,m),E.createGetLocal(v.index,s.NativeType.I32),x);break;case 3:case 8:v=e.currentFunction.getAndFreeTempLocal(a.Type.i64,!1);T=E.createIf(E.createUnary(s.UnaryOp.EqzI64,E.createTeeLocal(v.index,m)),x,E.createGetLocal(v.index,s.NativeType.I64));break;case 4:case 9:v=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);T=E.createIf(E.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,E.createTeeLocal(v.index,m)),x,E.createGetLocal(v.index,e.options.nativeSizeType));break;case 11:v=e.currentFunction.getAndFreeTempLocal(a.Type.f32,!1);T=E.createIf(E.createBinary(s.BinaryOp.EqF32,E.createTeeLocal(v.index,m),E.createF32(0)),x,E.createGetLocal(v.index,s.NativeType.F32));break;case 12:v=e.currentFunction.getAndFreeTempLocal(a.Type.f64,!1);T=E.createIf(E.createBinary(s.BinaryOp.EqF64,E.createTeeLocal(v.index,m),E.createF64(0)),x,E.createGetLocal(v.index,s.NativeType.F64));break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),T=x}return T;case"unchecked":return r&&e.error(n.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=c.length?(e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),E.createUnreachable()):((A=e.currentFunction.flow).set(2048),T=e.compileExpressionRetainType(c[0],h,0),A.unset(2048),T);case"call_indirect":if(c.length<1)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(n.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"1",c.length.toString(10)),E.createUnreachable();var F=void 0;if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),E.createUnreachable();F=r[0]}else F=h;if(m=e.compileExpressionRetainType(c[0],a.Type.u32,0),7!=e.currentType.kind)return e.error(n.DiagnosticCode.Operation_not_supported,c[0].range),E.createUnreachable();for(var B=c.length-1,U=new Array(B),D=new Array(B+1),P=F.toNativeType(),w=new Array(B),M=0;M1&&e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,i.range,"1",t.length.toString(10)),e.error(n.DiagnosticCode.Expected_0_arguments_but_got_1,i.range,"1",r.length.toString(10)),null}function u(e,t){var r,i;return e.options.isWasm64?(r=e.precomputeExpression(t,a.Type.usize64,1,0),(s.getExpressionId(r)!=s.ExpressionId.Const||s.getExpressionType(r)!=s.NativeType.I64||0!=s.getConstValueI64High(r)||(i=s.getConstValueI64Low(r))<0)&&(e.error(n.DiagnosticCode.Operation_not_supported,t.range),i=-1)):(r=e.precomputeExpression(t,a.Type.usize32,1,0),(s.getExpressionId(r)!=s.ExpressionId.Const||s.getExpressionType(r)!=s.NativeType.I32||(i=s.getConstValueI32(r))<0)&&(e.error(n.DiagnosticCode.Operation_not_supported,t.range),i=-1)),i}t.compileCall=c;var h="allocate_memory";t.compileAllocate=function(e,t,r){var i=e.program;assert(t.program==i);var a=e.module,s=e.options,c=i.elementsLookup.get(h);if(!c)return i.error(n.DiagnosticCode.Cannot_find_name_0,r.range,h),i.info(n.DiagnosticCode.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf,r.range),a.createUnreachable();if(c.kind!=o.ElementKind.FUNCTION_PROTOTYPE)return i.error(n.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,r.range,c.internalName),a.createUnreachable();var p=c.resolve();return p&&e.compileFunction(p)?(e.currentType=t.type,a.createCall(p.internalName,[s.isWasm64?a.createI64(t.currentMemoryOffset):a.createI32(t.currentMemoryOffset)],s.nativeSizeType)):a.createUnreachable()};var d="abort";function _(e,t,r){var n=e.program,i=e.module,c=n.typesLookup.get("string");if(!c)return i.createUnreachable();var p=n.elementsLookup.get(d);if(!p||p.kind!=o.ElementKind.FUNCTION_PROTOTYPE)return i.createUnreachable();var l=p.resolve();if(!l||!e.compileFunction(l))return i.createUnreachable();var u=null!=t?e.compileExpression(t,c,1,0):c.toNativeZero(i),h=e.compileStaticString(r.range.source.normalizedPath);return e.currentType=a.Type.void,i.createBlock(null,[i.createCallImport(l.internalName,[u,h,i.createI32(r.range.line),i.createI32(r.range.column)],s.NativeType.None),i.createUnreachable()])}t.compileAbort=_},function(t,r){t.exports=e},function(e,t,r){(function(e){const t=e.Binaryen||r(23);for(var n in t)(n.startsWith("_Binaryen")||n.startsWith("_Relooper"))&&(e[n]=t[n]);e.allocate_memory=function(e){return e?t._malloc(e):0},e.free_memory=function(e){e&&t._free(e)},e.move_memory=function(e,r,n){return t._memmove(e,r,n)},e.store=function(e,r){t.HEAPU8[e]=r},e.load=function(e){return t.HEAPU8[e]};const i=r(3).Module;i.prototype.toText=function(){var e=t.print,r="";return t.print=function(e){r+=e+"\n"},_BinaryenModulePrint(this.ref),t.print=e,r},i.prototype.toAsmjs=function(){var e=t.print,r="";return t.print=function(e){r+=e+"\n"},_BinaryenModulePrintAsmjs(this.ref),t.print=e,r}}).call(this,r(6))},function(e,t){e.exports=(e=>{var t=new Uint8Array(0),r=0;e.allocate_memory=function(e){if(!(e>>>=0))return 0;if(r+e>t.length){var n=t;(t=new Uint8Array(Math.max(65536,t.length+e,2*t.length))).set(n)}var i=r;return 7&(r+=e)&&(r=1+(7|r)),i},e.free_memory=function(e){},e.move_memory=function(e,r,n){t.copyWithin(e,r,r+n)},e.store=function(e,r,n){t[e+(0|n)]=r},e.load=function(e,r){return t[e+(0|r)]}})},function(e,t){e.exports=(e=>{e.JSMath=Math})},function(e,t,r){(function(e){var t="undefined"!=typeof window&&window||void 0!==e&&e||self;function n(){Error.captureStackTrace?Error.captureStackTrace(this,n):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}function i(e){this.message=e||"assertion failed",Error.captureStackTrace?Error.captureStackTrace(this,i):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}Object.defineProperties(t.i8=function(e){return e<<24>>24},{MIN_VALUE:{value:-128,writable:!1},MAX_VALUE:{value:127,writable:!1}}),Object.defineProperties(t.i16=function(e){return e<<16>>16},{MIN_VALUE:{value:-32768,writable:!1},MAX_VALUE:{value:32767,writable:!1}}),Object.defineProperties(t.i32=t.isize=function(e){return 0|e},{MIN_VALUE:{value:-2147483648,writable:!1},MAX_VALUE:{value:2147483647,writable:!1}}),Object.defineProperties(t.u8=function(e){return 255&e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:255,writable:!1}}),Object.defineProperties(t.u16=function(e){return 65535&e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:65535,writable:!1}}),Object.defineProperties(t.u32=t.usize=function(e){return e>>>0},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:4294967295,writable:!1}}),Object.defineProperties(t.bool=function(e){return!!e},{MIN_VALUE:{value:0,writable:!1},MAX_VALUE:{value:1,writable:!1}}),Object.defineProperties(t.f32=function(e){return Math.fround(e)},{MIN_VALUE:{value:Math.fround(-3.40282347e38),writable:!1},MAX_VALUE:{value:Math.fround(3.40282347e38),writable:!1},MIN_POSITIVE_VALUE:{value:Math.fround(1.175494351e-38),writable:!1},MIN_SAFE_INTEGER:{value:-16777215,writable:!1},MAX_SAFE_INTEGER:{value:16777215,writable:!1},EPSILON:{value:Math.fround(1.1920929e-7),writable:!1}}),Object.defineProperties(t.f64=function(e){return+e},{MIN_VALUE:{value:-1.7976931348623157e308,writable:!1},MAX_VALUE:{value:1.7976931348623157e308,writable:!1},MIN_POSITIVE_VALUE:{value:2.2250738585072014e-308,writable:!1},MIN_SAFE_INTEGER:{value:-9007199254740991,writable:!1},MAX_SAFE_INTEGER:{value:9007199254740991,writable:!1},EPSILON:{value:2.220446049250313e-16,writable:!1}}),t.clz=Math.clz32,t.ctz=function(e){var t=Math.clz32(e&-e);return e?31-t:t},t.popcnt=function(e){return 16843009*((e=(858993459&(e-=e>>>1&1431655765))+(e>>>2&858993459))+(e>>>4)&252645135)>>>24},t.rotl=function(e,t){return e<<(t&=31)|e>>>32-t},t.rotr=function(e,t){return e>>>(t&=31)|e<<32-t},t.abs=Math.abs,t.max=Math.max,t.min=Math.min,t.ceil=Math.ceil,t.floor=Math.floor,t.nearest=function(e){return.5===Math.abs(e-Math.trunc(e))?2*Math.round(.5*e):Math.round(e)},t.select=function(e,t,r){return r?e:t},t.sqrt=Math.sqrt,t.trunc=Math.trunc,t.copysign=function(e,t){return Math.abs(e)*Math.sign(t)},t.bswap=function(e){var t=e>>8&16711935,r=(16711935&e)<<8;return(t=(e=t|r)>>16&65535)|(r=(65535&e)<<16)},t.bswap16=function(e){return e<<8&65280|e>>8&255|4294901760&e},n.prototype=Object.create(Error.prototype),n.prototype.name="UnreachableError",n.prototype.message="unreachable",t.unreachable=function(){throw new n},i.prototype=Object.create(Error.prototype),i.prototype.name="AssertionError",t.assert=function(e,t){if(e)return e;throw new i(t)},t.changetype=function(e){return e},t.parseI32=function(e,t){return 0|parseInt(e,void 0)},String.fromCharCodes=function(e){return String.fromCharCode.apply(String,e)},String.fromCodePoints=function(e){return String.fromCodePoint.apply(String,e)},t.isInteger=Number.isInteger,t.isFloat=function(e){return"number"==typeof e},t.isReference=function(e){return"object"==typeof e||"string"==typeof e},t.isString=function(e){return"string"==typeof e||e instanceof String},t.isArray=Array.isArray,t.unchecked=function(e){return e},t.fmod=function(e,t){return e%t},t.fmodf=function(e,t){return Math.fround(e%t)},r(26)(t),r(25)(t)}).call(this,r(6))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(27),r(24),r(17),r(15)},function(e,t,r){r(28),e.exports=r(14)}])}); //# sourceMappingURL=assemblyscript.js.map \ No newline at end of file diff --git a/dist/assemblyscript.js.map b/dist/assemblyscript.js.map index 3e46e787..d1bb26f7 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/program.ts","webpack://assemblyscript/./src/util/index.ts","webpack://assemblyscript/./src/diagnostics.ts","webpack://assemblyscript/./src/module.ts","webpack://assemblyscript/./src/ast.ts","webpack://assemblyscript/(webpack)/buildin/global.js","webpack://assemblyscript/./src/tokenizer.ts","webpack://assemblyscript/./src/types.ts","webpack://assemblyscript/./src/diagnosticMessages.generated.ts","webpack://assemblyscript/./src/compiler.ts","webpack://assemblyscript/./src/parser.ts","webpack://assemblyscript/./src/definitions.ts","webpack://assemblyscript/./src/decompiler.ts","webpack://assemblyscript/./src/index.ts","webpack://assemblyscript/./src/glue/js/float.js","webpack://assemblyscript/./node_modules/long/src/long.js","webpack://assemblyscript/./src/glue/js/i64.js","webpack://assemblyscript/./src/util/binary.ts","webpack://assemblyscript/./src/util/text.ts","webpack://assemblyscript/./src/util/path.ts","webpack://assemblyscript/./src/util/charcode.ts","webpack://assemblyscript/./src/builtins.ts","webpack://assemblyscript/external \"binaryen\"","webpack://assemblyscript/./src/glue/js/binaryen.js","webpack://assemblyscript/./std/portable/memory.js","webpack://assemblyscript/./std/portable/math.js","webpack://assemblyscript/./std/portable.js","webpack://assemblyscript/./src/glue/js/index.ts"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__22__","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","diagnostics_1","types_1","ast_1","module_1","PATH_DELIMITER","PARENT_SUBST","GETTER_PREFIX","SETTER_PREFIX","INSTANCE_DELIMITER","STATIC_DELIMITER","INNER_DELIMITER","LIBRARY_SUBST","LIBRARY_PREFIX","FILESPACE_PREFIX","OperatorKind","QueuedImport","QueuedExport","TypeAlias","operatorKindFromDecorator","decoratorKind","arg","assert","length","DecoratorKind","OPERATOR","OPERATOR_BINARY","charCodeAt","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","OPERATOR_PREFIX","PLUS","PREFIX_INC","MINUS","PREFIX_DEC","NOT","BITWISE_NOT","OPERATOR_POSTFIX","POSTFIX_INC","POSTFIX_DEC","INVALID","ElementKind","CommonFlags","DecoratorFlags","noTypesYet","Map","Program","_super","diagnostics","_this","diagnosticsOffset","elementsLookup","instancesLookup","typesLookup","typeAliases","fileLevelExports","moduleLevelExports","arrayPrototype","arrayBufferViewPrototype","stringInstance","resolvedThisExpression","resolvedElementExpression","sources","__extends","getSource","normalizedPath","k","source","lookupSourceByPath","normalizedPathWithoutExtension","tmp","initialize","options","Type","i8","i16","i32","i64","isizeType","u8","u16","u32","u64","usizeType","bool","f32","f64","void","queuedImports","Array","queuedExports","queuedExtends","queuedImplements","filespace","Filespace","set","internalName","currentFilespace","statements","j","statement","kind","NodeKind","CLASSDECLARATION","initializeClass","ENUMDECLARATION","initializeEnum","EXPORT","initializeExports","FUNCTIONDECLARATION","initializeFunction","IMPORT","initializeImports","INTERFACEDECLARATION","initializeInterface","NAMESPACEDECLARATION","initializeNamespace","TYPEDECLARATION","initializeTypeAlias","VARIABLE","initializeVariables","queuedImport","declaration","element","tryResolveImport","externalName","localName","splice","externalNameAlt","error","DiagnosticCode","Module_0_has_no_exported_member_1","range","parent","path","text","queuedExports_1","__values","queuedExports_1_1","next","done","_c","__read","exportName","queuedExport","currentExport","isReExport","member","setExportAndCheckLibrary","Cannot_find_name_0","derivedPrototype","derivedDeclaration","derivedType","extendsType","baseElement","resolveIdentifier","CLASS_PROTOTYPE","basePrototype","A_class_may_only_extend_another_class","globalAliases","globalAliases_1","globalAliases_1_1","_d","alias","Error","INTERFACE_PROTOTYPE","stringPrototype","resolve","has","Duplicate_identifier_0","programLevelInternalName","type","queuedNamedExports","filterDecorators","decorators","acceptedFlags","presentFlags","NONE","decorator","flag","decoratorKindToFlag","decoratorNameToKind","Duplicate_decorator","toString","Decorator_0_is_not_valid_here","checkGlobalOptions","parentNode","hasDecorator","GLOBAL","is","BUILTIN","isLibrary","SOURCE","globalName","namespace","fileLevelInternalName","simpleName","ClassPrototype","SEALED","UNMANAGED","implementsTypes","numImplementsTypes","Unmanaged_classes_cannot_implement_interfaces","Range","join","push","members","MODULE_EXPORT","Export_declaration_conflicts_with_exported_declaration_of_0","isEntry","memberDeclarations","memberDeclaration","FIELDDECLARATION","initializeField","METHODDECLARATION","isAny","GET","SET","initializeAccessor","initializeMethod","classPrototype","STATIC","staticField","Global","instanceMembers","instanceField","FieldPrototype","decoratorFlags","INLINE","CONSTRUCTOR","FunctionPrototype","constructorPrototype","Multiple_constructor_implementations_are_not_allowed","checkOperatorOverloads","numArgs","arguments","firstArg","LITERAL","literalKind","LiteralKind","STRING","Operation_not_supported","overloads","overloadPrototypes","Duplicate_function_implementation","operatorKind","String_literal_expected","Expected_0_arguments_but_got_1","internalPropertyName","propertyElement","isGetter","isNew","PROPERTY","getterPrototype","setterPrototype","Property","baseName","staticName","staticPrototype","instanceName","instancePrototype","Enum","values","initializeEnumValue","enm","EnumValue","initializeExport","internalPath","identifier","prefix","FILESPACE","referencedName","referencedElement","seen","Set","add","declarations","initializeImport","namespaceName","indexPart","endsWith","substring","InterfacePrototype","parentNamespace","Namespace","existingExport","Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local","typeParameters","global_1","resolveSignature","node","contextualTypeArguments","reportNotFound","explicitThisType","thisType","resolveType","parameterTypeNodes","parameters","numParameters","parameterTypes","parameterNames","requiredParameters","hasRest","parameterTypeNode","parameterKind","ParameterKind","DEFAULT","REST","parameterType","returnType","returnTypeNode","signature","Signature","SIGNATURE","isNullable","asNullable","typeNode","ENUM","instance","resolveUsingTypeArguments","typeArguments","paramTypes","paramType","instanceKey","typesToString","placeholderType","resolveTypeArguments","typeArgumentNodes","alternativeReportNode","parameterCount","argumentCount","Expected_0_type_arguments_but_got_1","atEnd","contextualFunction","contextualEnum","ENUMVALUE","flow","getScopedLocal","resolvePropertyAccess","propertyAccess","targetExpression","expression","target","resolveExpression","propertyName","LOCAL","FIELD","classReference","Property_0_does_not_exist_on_type_1","CLASS","elementExpression","indexedGet","lookupOverload","Index_signature_is_missing_in_type_0","base","resolveElementAccess","elementAccess","PARENTHESIZED","ASSERTION","toType","classType","BINARY","THIS","explicitLocal","_this_cannot_be_referenced_in_current_location","SUPER","_super_can_only_be_referenced_in_a_derived_class","IDENTIFIER","PROPERTYACCESS","ELEMENTACCESS","CALL","FUNCTION_PROTOTYPE","signatureReference","functionTarget","cachedFunctionTarget","FunctionTarget","Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures","DiagnosticEmitter","Element","program","flags","NAMESPACE","constantValue","ConstantValueKind","VariableLikeElement","constantValueKind","withConstantIntegerValue","lo","hi","constantIntegerValue","i64_new","CONST","INLINED","withConstantFloatValue","constantFloatValue","Parameter","initializer","Local","index","scopedGlobal","instances","classTypeArguments","functionTypeArguments","isInstance","INSTANCE","inheritedTypeArguments","inheritedTypeArguments_1","inheritedTypeArguments_1_1","_b","inheritedName","inheritedType","classTypeParameters","numClassTypeParameters","numFunctionTypeArguments","signatureNode","functionTypeParameters","classInstance","signatureParameters","signatureParameterCount","parameterDeclaration","Function","resolvePartial","partialKey","partialPrototype","reportNode","resolvedTypeArguments","GENERIC","resolveBuiltinTypeArguments","resolvedType","FUNCTION","localsByName","localsByIndex","additionalLocals","breakContext","debugLocations","ref","functionTableIndex","trampoline","outerScope","nextBreakId","breakStack","nextInlineId","tempI32s","tempI64s","tempF32s","tempF64s","AMBIENT","DECLARE","localIndex","local","inheritedTypeArguments_2","inheritedTypeArguments_2_1","parameterName","getParameterName","Flow","addLocal","getTempLocal","wrapped","temps","toNativeType","NativeType","I32","I64","F32","F64","pop","setLocalWrapped","freeTempLocal","getAndFreeTempLocal","enterBreakContext","id","leaveBreakContext","finalize","sourceMap","debugLocation","setDebugLocation","debugInfoRef","debugInfoIndex","line","column","FUNCTION_TARGET","toSignatureString","asFunction","FIELD_PROTOTYPE","Field","memoryOffset","inheritedTypeArguments_3","inheritedTypeArguments_3_1","_e","baseClass","baseClassType","Class_0_is_sealed_and_cannot_be_extended","Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa","Class","currentMemoryOffset","_f","_g","inheritedMember","partialConstructor","constructorInstance","_h","_j","fieldDeclaration","fieldType","fieldInstance","byteSize","instanceProperty","partialGetterPrototype","partialSetterPrototype","_k","_l","_m","operatorInstance","operatorPartial","asClass","inheritedTypeArguments_4","inheritedTypeArguments_4_1","baseType","isAssignableTo","current","unchecked","uncheckedOverload","overload","Interface","INTERFACE","FlowFlags","scopedLocals","currentFunction","parentFlow","continueLabel","breakLabel","returnLabel","wrappedLocals","wrappedLocalsExt","unset","enterBranchOrScope","branch","slice","leaveBranchOrScope","propagate","scopedLocal","SCOPED","addScopedLocal","existingLocal","addScopedLocalAlias","scopedAlias","isLocalWrapped","map","ext","i64_ne","i64_and","i64_shl","i64_one","i64_zero","off","i64_or","i64_not","inherit","other","inheritMutual","left","right","leftExt","rightExt","thisExt","minLength","min","canOverflow","expr","operand","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","__export","DiagnosticCategory","diagnosticMessages_generated_1","util_1","diagnosticMessages_generated_2","diagnosticCategoryToString","category","INFO","WARNING","ERROR","diagnosticCategoryToColor","COLOR_BLUE","COLOR_YELLOW","COLOR_RED","diagnosticCodeToString","COLOR_RESET","DiagnosticMessage","code","message","arg0","arg1","arg2","replace","createInfo","createWarning","createError","withRange","formatDiagnosticContext","useColors","len","start","end","isLineBreak","sb","formatDiagnosticMessage","showContext","emitDiagnostic","info","warning","compiler_1","_BinaryenTypeNone","_BinaryenTypeInt32","_BinaryenTypeInt64","_BinaryenTypeFloat32","_BinaryenTypeFloat64","_BinaryenTypeUnreachable","_BinaryenTypeAuto","_BinaryenInvalidId","_BinaryenBlockId","_BinaryenIfId","_BinaryenLoopId","_BinaryenBreakId","_BinaryenSwitchId","_BinaryenCallId","_BinaryenCallImportId","_BinaryenCallIndirectId","_BinaryenGetLocalId","_BinaryenSetLocalId","_BinaryenGetGlobalId","_BinaryenSetGlobalId","_BinaryenLoadId","_BinaryenStoreId","_BinaryenConstId","_BinaryenUnaryId","_BinaryenBinaryId","_BinaryenSelectId","_BinaryenDropId","_BinaryenReturnId","_BinaryenHostId","_BinaryenNopId","_BinaryenUnreachableId","_BinaryenAtomicCmpxchgId","_BinaryenAtomicRMWId","_BinaryenAtomicWaitId","_BinaryenAtomicWakeId","_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","allocate_memory","createFrom","cArr","allocU8Array","_BinaryenModuleRead","free_memory","changetype","addFunctionType","result","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","label","children","None","_BinaryenBlock","createBreak","condition","_BinaryenBreak","createDrop","_BinaryenDrop","createLoop","body","_BinaryenLoop","createIf","ifTrue","ifFalse","_BinaryenIf","createNop","_BinaryenNop","createReturn","_BinaryenReturn","createSelect","_BinaryenSelect","createSwitch","names","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","setOptimizeLevel","level","_BinaryenSetOptimizeLevel","setShrinkLevel","_BinaryenSetShrinkLevel","setDebugInfo","on","_BinaryenSetDebugInfo","optimize","_BinaryenFunctionOptimize","_BinaryenModuleOptimize","runPasses","passes","_BinaryenFunctionRunPasses","_BinaryenModuleRunPasses","precomputeFunction","validate","_BinaryenModuleValidate","interpret","_BinaryenModuleInterpret","toBinary","sourceMapUrl","binaryPtr","sourceMapPtr","_BinaryenModuleAllocateAndWrite","readInt","binaryBytes","ret","BinaryModule","output","Uint8Array","load","readBuffer","readString","toText","toAsmjs","dispose","_BinaryenModuleDispose","createRelooper","Relooper","cloneExpression","noSideEffects","maxDepth","nested1","nested2","_BinaryenExpressionGetId","_BinaryenExpressionGetType","_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","_BinaryenFunctionGetBody","getFunctionName","_BinaryenFunctionGetName","getFunctionParamCount","_BinaryenFunctionGetNumParams","getFunctionParamType","_BinaryenFunctionGetParam","getFunctionResultType","_BinaryenFunctionGetResult","relooper","_RelooperCreate","addBlock","_RelooperAddBlock","addBranch","from","to","_RelooperAddBranch","addBlockWithSwitch","_RelooperAddBlockWithSwitch","addBranchForSwitch","indexes","_RelooperAddBranchForSwitch","renderAndDispose","entry","labelHelper","_RelooperRenderAndDispose","u8s","numValues","idx","store","i32s","val","ptrs","str","u","stringLengthUTF8","cp","u1","u2","u3","u4","arr","String","fromCodePoints","program_1","tokenizer_1","Token","nodeIsConstantValue","NULL","TRUE","FALSE","Node","createType","TypeNode","setParent","createOmittedType","createIdentifierExpression","createTypeParameter","elem","TypeParameterNode","createParameter","ParameterNode","createSignature","sig","SignatureNode","createDecorator","args","stmt","DecoratorNode","createComment","CommentNode","commentKind","IdentifierExpression","createEmptyIdentifierExpression","createArrayLiteralExpression","elements","ArrayLiteralExpression","elementExpressions","nodes","setParentIfNotNull","createAssertionExpression","assertionKind","AssertionExpression","createBinaryExpression","operator","BinaryExpression","createCallExpression","typeArgs","CallExpression","createCommaExpression","expressions","CommaExpression","createConstructorExpression","ConstructorExpression","createElementAccessExpression","ElementAccessExpression","createFalseExpression","FalseExpression","createFloatLiteralExpression","FloatLiteralExpression","createFunctionExpression","FunctionExpression","ARROW","createInstanceOfExpression","isType","InstanceOfExpression","createIntegerLiteralExpression","IntegerLiteralExpression","createNewExpression","NewExpression","createNullExpression","NullExpression","createParenthesizedExpression","ParenthesizedExpression","createPropertyAccessExpression","PropertyAccessExpression","createRegexpLiteralExpression","pattern","RegexpLiteralExpression","patternFlags","createTernaryExpression","ifThen","ifElse","TernaryExpression","createStringLiteralExpression","StringLiteralExpression","createSuperExpression","SuperExpression","createThisExpression","ThisExpression","createTrueExpression","TrueExpression","createUnaryPostfixExpression","UnaryPostfixExpression","createUnaryPrefixExpression","UnaryPrefixExpression","createBlockStatement","BlockStatement","createBreakStatement","BreakStatement","createClassDeclaration","ClassDeclaration","createContinueStatement","ContinueStatement","createDoStatement","DoStatement","createEmptyStatement","EmptyStatement","createEnumDeclaration","EnumDeclaration","createEnumValueDeclaration","EnumValueDeclaration","createExportStatement","ExportStatement","normalizePath","startsWith","resolvePath","mangleInternalPath","createExportImportStatement","ExportImportStatement","createExportMember","ExportMember","createExpressionStatement","ExpressionStatement","createIfStatement","IfStatement","createImportStatement","decls","ImportStatement","createImportStatementWithWildcard","createImportDeclaration","ImportDeclaration","createInterfaceDeclaration","InterfaceDeclaration","createFieldDeclaration","FieldDeclaration","createForStatement","incrementor","ForStatement","createFunctionDeclaration","FunctionDeclaration","createMethodDeclaration","MethodDeclaration","createNamespaceDeclaration","NamespaceDeclaration","createReturnStatement","ReturnStatement","createSwitchStatement","cases","SwitchStatement","createSwitchCase","SwitchCase","createThrowStatement","ThrowStatement","createTryStatement","catchVariable","catchStatements","finallyStatements","TryStatement","createTypeDeclaration","TypeDeclaration","createVariableStatement","VariableStatement","createVariableDeclaration","VariableDeclaration","createVoidStatement","VoidStatement","createWhileStatement","WhileStatement","CommonTypeNode","apply","TYPE","TYPEPARAMETER","PARAMETER","implicitFieldDeclaration","nameStr","propStr","CUSTOM","DECORATOR","CommentKind","COMMENT","Expression","LiteralExpression","ARRAY","AssertionKind","COMMA","FLOAT","INSTANCEOF","INTEGER","NEW","REGEXP","TERNARY","UnaryExpression","UNARYPOSTFIX","UNARYPREFIX","isLastStatement","BLOCK","SourceKind","Statement","Source","tokenizer","exportPaths","sourceKind","ENTRY","LIBRARY","DeclarationStatement","cachedProgramLevelInternalName","cachedFileLevelInternalName","mangleInternalName","isTopLevelExport","needsExplicitExport","VariableLikeDeclarationStatement","BREAK","CONTINUE","DO","EMPTY","ENUMVALUEDECLARATION","EXPORTIMPORT","EXPORTMEMBER","EXPRESSION","parameterIndex","FOR","IF","IMPORTDECLARATION","RETURN","SWITCHCASE","SWITCH","THROW","TRY","VARIABLEDECLARATION","VOID","WHILE","asGlobal","g","eval","e","window","IdentifierHandling","tokenFromKeyword","ABSTRACT","AS","ASYNC","AWAIT","CASE","CATCH","DEBUGGER","DELETE","ELSE","EXTENDS","FINALLY","FROM","IMPLEMENTS","IN","IS","KEYOF","LET","MODULE","OF","PACKAGE","PRIVATE","PROTECTED","PUBLIC","READONLY","TYPEOF","VAR","WITH","YIELD","tokenIsAlsoIdentifier","token","operatorTokenToString","DOT_DOT_DOT","LESSTHAN","GREATERTHAN","LESSTHAN_EQUALS","GREATERTHAN_EQUALS","EQUALS_EQUALS","EXCLAMATION_EQUALS","EQUALS_EQUALS_EQUALS","EXCLAMATION_EQUALS_EQUALS","ASTERISK_ASTERISK","ASTERISK","SLASH","PERCENT","PLUS_PLUS","MINUS_MINUS","LESSTHAN_LESSTHAN","GREATERTHAN_GREATERTHAN","GREATERTHAN_GREATERTHAN_GREATERTHAN","AMPERSAND","BAR","CARET","EXCLAMATION","TILDE","AMPERSAND_AMPERSAND","BAR_BAR","EQUALS","PLUS_EQUALS","MINUS_EQUALS","ASTERISK_EQUALS","ASTERISK_ASTERISK_EQUALS","SLASH_EQUALS","PERCENT_EQUALS","LESSTHAN_LESSTHAN_EQUALS","GREATERTHAN_GREATERTHAN_EQUALS","GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS","AMPERSAND_EQUALS","BAR_EQUALS","CARET_EQUALS","a","b","pos","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","TypeKind","TypeFlags","cachedNullableType","ceil","nonNullableType","isize64","isize32","usize64","usize32","computeSmallIntegerShift","targetType","signednessIsRelevant","currentClass","targetClass","targetFunction","commonCompatible","signednessIsImportant","kindOnly","toNativeZero","toNativeOne","toNativeNegOne","typesToNativeTypes","types","numTypes","getDefaultParameterName","thisThisType","targetThisType","thisParameterTypes","targetParameterTypes","thisParameterType","targetParameterType","thisReturnType","targetReturnType","makeSignatureString","includeThis","optionalStart","restIndex","cachedDefaultParameterNames","builtins_1","Options","WASM32","noTreeShaking","noAssert","noMemory","importMemory","importTable","memoryBase","features","hasFeature","feature","Feature","ConversionKind","WrapMode","Compiler","outerFunction","currentEnum","currentType","startFunctionBody","memorySegments","stringSegments","functionTable","argcVar","argcSet","f32ModInstance","f64ModInstance","f32PowInstance","f64PowInstance","max","compile","startFunctionPrototype","startFunctionInstance","startFunction","compileSource","funcRef","ensureFunctionType","i64_align","isWasm64","pages","i64_shr_u","functionTableSize","functionTableExported","entries","compileSourceByPath","File_0_not_found","COMPILED","isGeneric","compileClassDeclaration","compileEnumDeclaration","compileFunctionDeclaration","compileNamespaceDeclaration","variableInit","compileVariableStatement","compileExportStatement","previousFunction","compileStatement","compileGlobalDeclaration","compileGlobal","global","initExpr","Type_expected","compileExpressionRetainType","Type_0_is_not_assignable_to_type_1","nativeType","isConstant","MODULE_IMPORT","initializeInStart","compileInlineConstant","compileExpression","precomputeExpressionRef","Compiling_constant_with_non_constant_initializer_as_mutable","mangleExportName","isTopLevel","compileEnum","previousValue","initInStart","valueDeclaration","AddI32","Cannot_export_a_mutable_global","compileFunctionUsingTypeArguments","compileFunction","resultType","An_implementation_cannot_be_declared_in_ambient_contexts","Function_implementation_is_missing_or_not_immediately_following_the_declaration","isConstructor","nativeSizeType","makeConditionalAllocate","A_function_whose_declared_type_is_not_void_must_return_a_value","ensureTrampoline","ensureArgcSet","compileInterfaceDeclaration","compileNamespace","compileClassUsingTypeArguments","internalExportName","functionInstance","functionDeclaration","globalDeclaration","compileClass","staticMembers","setter","ctorInstance","getterName","setterName","addMemorySegment","alignment","ensureFunctionTableEntry","TRAMPOLINE","compileBlockStatement","compileBreakStatement","compileContinueStatement","compileDoStatement","compileEmptyStatement","compileExpressionStatement","compileForStatement","compileIfStatement","compileReturnStatement","compileSwitchStatement","compileThrowStatement","compileTryStatement","compileVoidStatement","compileWhileStatement","addDebugLocation","compileStatements","numStatements","stmts","count","Nop","blockFlow","lastType","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","repeatLabel","alwaysTrue","condPre","incrExpr","bodyExpr","breakBlock","repeatBlock","GENERIC_CONTEXT","condExprPrecomp","ifTrueFlow","ifFalseFlow","ifTrueExpr","ifFalseExpr","numCases","context","tempLocal","tempLocalIndex","breaks","breakIndex","defaultIndex","currentBlock","alwaysReturns","alwaysReturnsWrapped","alwaysThrows","alwaysAllocates","isLast","nextLabel","terminated","compileAbort","isKnownGlobal","numDeclarations","initializers","isInlined","_const_declarations_must_be_initialized","compileAssignmentWithValue","contextualType","retainType","mask","conversionKind","wrapMode","compileAssertionExpression","compileBinaryExpression","compileCallExpression","compileCommaExpression","compileElementAccessExpression","compileFunctionExpression","compileIdentifierExpression","compileInstanceOfExpression","compileLiteralExpression","compileNewExpression","compileParenthesizedExpression","compilePropertyAccessExpression","compileTernaryExpression","compileUnaryPostfixExpression","compileUnaryPrefixExpression","convertExpression","ensureSmallIntegerWrap","precomputeExpression","Conversion_from_type_0_to_1_requires_an_explicit_cast","PromoteF32","DemoteF64","TruncF32ToI64","TruncF32ToI32","TruncF32ToU64","TruncF32ToU32","TruncF64ToI64","TruncF64ToI32","TruncF64ToU64","TruncF64ToU32","ConvertI64ToF32","ConvertU64ToF32","ConvertI32ToF32","ConvertU32ToF32","ConvertI64ToF64","ConvertU64ToF64","ConvertI32ToF64","ConvertU32ToF64","WrapI64","ExtendI32","ExtendU32","leftExpr","leftType","rightExpr","rightType","commonType","compound","compileBinaryOverload","Operator_0_cannot_be_applied_to_types_1_and_2","compileAssignment","AddI64","AddF32","AddF64","SubI32","SubI64","SubF32","SubF64","MulI64","MulF32","MulF64","makeCallDirect","DivI32","DivI64","DivU64","DivF32","DivF64","RemI64","RemU64","intType","ShlI64","The_0_operator_cannot_be_applied_to_type_1","ShrI64","ShrU64","AndI64","OrI32","OrI64","XorI32","XorI64","compileUnaryOverload","valueExpr","argumentExpressions","thisArg","compileCallDirect","valueExpression","Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property","isUnchecked","indexedSet","Index_signature_in_type_0_only_permits_reading","valueWithCorrectType","tee","thisExpression","thisExpr","setterInstance","getterInstance","nativeReturnType","elementExpr","tempLocalTarget","tempLocalElement","indexArg","compileCallExpressionBuiltin","Type_0_is_not_generic","inferredTypes","numTypeParameters","numParameterTypes","numArguments","argumentExprs","argumentExpression","inferredType","concreteType","compileCallIndirect","compileCall","checkCallSignature","hasThis","minimum","Expected_at_least_0_arguments_but_got_1","inline","compileCallInlineUnchecked","numArgumentsInclThis","previousFlow","thisLocal","paramExpr","argumentLocal","bodyStatement","original","originalSignature","originalName","originalParameterTypes","originalParameterDeclarations","commonReturnType","commonThisType","minArguments","minOperands","maxArguments","maxOperands","numOptional","forwardedOperands","operandIndex","trampolineSignature","trampolineName","ofN","Optional_parameter_must_have_an_initializer","ensureArgcVar","numOperands","isCallImport","parameterNodes","allOptionalsAreConstant","makeCallIndirect","numExpressions","exprs","retainConstantType","scopedThis","superType","localType","A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums","implicitNegate","compileArrayLiteral","floatValue","intValue","i64_sub","i64_is_i8","i64_is_u8","i64_is_i16","i64_is_u16","i64_is_i32","i64_is_u32","i64_is_bool","i64_is_f32","i64_to_f32","i64_is_f64","i64_to_f64","compileStaticString","stringValue","stringSegment","stringLength","stringBuffer","stringOffset","stringType","elementType","isStatic","arrayInstance","arrayType","elementCount","nativeElementType","byteLength","Int32Array","Float32Array","Float64Array","usizeTypeSize","arraySize","bufferTotalSize","clz","data","writeI64","writeI32","writeF32","writeF64","nativeArrayType","Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature","currentClassInstance","makeAllocate","ifThenExpr","ifElseExpr","ifThenType","ifElseType","ifThenAllocates","ifElseAllocates","getValue","nativeOne","setValue","NegF32","NegF64","makeIsFalseish","ExtendI8ToI32","ExtendI16ToI32","compileAllocate","field","nativeFieldType","builtinsFile","Parser","backlog","seenlog","donelog","tryParseSignatureIsSignature","parseParametersThis","parseFile","indexOf","tn","parseTopLevelStatement","startPos","parseDecorator","skipStatement","exportStart","exportEnd","contextIsAmbient","A_declare_modifier_cannot_be_used_in_an_already_ambient_context","first","parseEnum","parseVariable","parseFunction","parseStatement","parseClassOrInterface","parseNamespace","parseExportImport","parseImport","parseTypeDeclaration","parseExport","_0_modifier_cannot_be_used_here","Decorators_are_not_valid_here","nextFile","clear","parseType","acceptParenthesized","suppressErrors","isNullableSignature","tryParseSignature","Unexpected_token","innerType","Identifier_expected","nullable","parameter","bracketStart","bracketRange","isSignature","A_rest_parameter_cannot_be_optional","OPTIONAL","param","parseArguments","parseVariableDeclaration","parentFlags","parentDecorators","Initializers_are_not_allowed_in_ambient_contexts","parseExpression","parseEnumValue","parseReturn","parseTypeParameters","typeParameter","parseTypeParameter","Type_parameter_list_cannot_be_empty","parseParameters","seenRest","seenOptional","reportedRest","parseParameter","A_rest_parameter_must_be_last_in_a_parameter_list","A_required_parameter_cannot_follow_an_optional_parameter","isRest","isOptional","startRange","accessFlags","A_parameter_property_cannot_be_declared_using_a_rest_parameter","A_rest_parameter_cannot_have_an_initializer","Parameter_cannot_have_question_mark_and_initializer","signatureStart","isSetter","A_set_accessor_must_have_exactly_one_parameter","A_set_accessor_parameter_cannot_have_an_initializer","A_get_accessor_cannot_have_parameters","parseBlockStatement","parseFunctionExpression","isArrow","parseFunctionExpressionCommon","isInterface","Interface_declaration_cannot_have_implements_clause","parseClassMember","staticStart","staticEnd","abstractStart","abstractEnd","readonlyStart","readonlyEnd","setEnd","typeParametersStart","Type_parameters_cannot_appear_on_a_constructor_declaration","An_accessor_cannot_have_type_parameters","Type_annotation_cannot_appear_on_a_constructor_declaration","A_set_accessor_cannot_have_a_return_type_annotation","retMethod","Constructor_implementation_is_missing","retField","parseExportMember","asIdentifier","skipFrom","parseImportDeclaration","topLevel","parseBreak","parseContinue","parseDoStatement","parseForStatement","parseIfStatement","A_return_statement_can_only_be_used_within_a_function_body","parseSwitchStatement","parseThrowStatement","parseTryStatement","parseVoidStatement","parseWhileStatement","parseExpressionStatement","elseStatement","case_","parseSwitchCase","_case_or_default_expected","parseExpressionStart","precedence","determinePrecedenceStart","The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access","again","PREFIX","regexpPattern","Expression_expected","tryParseTypeArgumentsBeforeArguments","nextPrecedence","determinePrecedence","commaExprs","isRightAssociative","propertyCall","Precedence","ExportsWalker","includePrivate","todo","walk","visitElement","visitGlobal","visitEnum","visitFunctionInstances","visitClassInstances","visitField","prop","hasCompiledMember","visitNamespace","visitFunction","visitClass","IDLBuilder","indentLevel","build","isConst","indent","typeToString","i64_to_string","members_1","members_1_1","visitInterface","TSDBuilder","numMembers","members_2","members_2_1","ctor","Decompiler","functionId","decompile","decompiler","decompileFunction","nativeTypeToType","decompileExpression","nested","string","Loop","Break","Switch","CallImport","CallIndirect","SetGlobal","Store","AbsF32","CeilF32","FloorF32","TruncF32","NearestF32","SqrtF32","ClzI64","CtzI64","PopcntI64","AbsF64","CeilF64","FloorF64","TruncF64","NearestF64","SqrtF64","ReinterpretF32","ReinterpretF64","ReinterpretI32","ReinterpretI64","RotlI32","RotrI32","RotlI64","RotrI64","CopysignF32","MinF32","MaxF32","CopysignF64","MinF64","MaxF64","Drop","Return","Host","CurrentMemory","GrowMemory","AtomicCmpxchg","AtomicRMW","AtomicWait","AtomicWake","Auto","decompiler_1","definitions_1","formatDiagnostic","parser_1","parser","nextDiagnostic","isInfo","isWarning","isError","createOptions","setTarget","setNoTreeShaking","setNoAssert","setNoMemory","setImportMemory","setImportTable","setSourceMap","setMemoryBase","setGlobalAlias","FEATURE_SIGN_EXTENSION","FEATURE_MUTABLE_GLOBAL","enableFeature","finishParsing","compileProgram","decompileModule","buildIDL","buildTSD","f32_as_i32","i32_as_f32","f64_as_i64","i64_as_f64","Long","wasm","WebAssembly","Instance","low","high","unsigned","isLong","obj","__isLong__","INT_CACHE","UINT_CACHE","fromInt","cachedObj","cache","fromBits","fromNumber","isNaN","UZERO","ZERO","TWO_PWR_64_DBL","MAX_UNSIGNED_VALUE","TWO_PWR_63_DBL","neg","TWO_PWR_32_DBL","lowBits","highBits","pow_dbl","Math","pow","fromString","radix","RangeError","radixToPower","parseInt","power","mul","fromValue","TWO_PWR_16_DBL","TWO_PWR_24","ONE","UONE","NEG_ONE","LongPrototype","toInt","toNumber","isZero","isNegative","eq","radixLong","div","rem1","sub","rem","remDiv","digits","getHighBits","getHighBitsUnsigned","getLowBits","getLowBitsUnsigned","getNumBitsAbs","bit","eqz","isPositive","isOdd","isEven","equals","notEquals","neq","ne","lessThan","comp","lt","lessThanOrEqual","lte","le","greaterThan","gt","greaterThanOrEqual","gte","ge","compare","thisNeg","otherNeg","negate","not","addend","a48","a32","a16","a00","b48","b32","b16","c48","c32","c16","c00","subtract","subtrahend","multiply","multiplier","get_high","b00","divide","divisor","approx","res","div_u","div_s","toUnsigned","shru","shr","shl","floor","log2","log","LN2","delta","approxRes","approxRem","modulo","rem_u","rem_s","mod","and","or","xor","shiftLeft","numBits","shiftRight","shiftRightUnsigned","shr_u","toSigned","toBytes","toBytesLE","toBytesBE","fromBytes","fromBytesLE","fromBytesBE","i64_div","i64_div_u","i64_rem","i64_rem_u","i64_xor","i64_shr","i64_eq","minSafeF32","MIN_SAFE_INTEGER","maxSafeF32","MAX_SAFE_INTEGER","minSafeF64","maxSafeF64","fround","readI32","readI64","readF32","readF64","valueI64","indentX1","indentX2","indentX4","separator","ipos","dirname","origin","CharCode","lookupInUnicodeMap","unicodeIdentifierStart","unicodeIdentifierPart","mid","compiler","evaluateConstantType","tempLocal0","tempLocal1","evaluateConstantOffset","alignLog2","fieldName","Type_0_has_no_property_1","abort","operandExprs","signatureParts","nativeParamTypes","operandType","deferASM","deferASMCall","typeArgument","valueType","allocateInternalName","allocatePrototype","An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf","allocateInstance","abortInternalName","abortPrototype","abortInstance","messageArg","filenameArg","binaryen","Binaryen","_malloc","_free","move_memory","dest","src","_memmove","HEAPU8","previousPrint","print","x","_BinaryenModulePrint","_BinaryenModulePrintAsmjs","globalScope","HEAP","HEAP_OFFSET","oldHeap","copyWithin","UnreachableError","captureStackTrace","stack","AssertionError","defineProperties","writable","MIN_POSITIVE_VALUE","EPSILON","clz32","abs","trunc","round","sqrt","y","sign","isTrueish","undefined","fromCodePoint","Number","isInteger","isArray"],"mappings":"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,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,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,OAEtCC,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,SAAAF,EAA4B1wD,EAAWrI,GACrC,GAAIqI,EAAOrI,EAAI,GAAI,OAAO,EAM1B,IAJA,IAEIk5D,EAFAljE,EAAK,EACLC,EAAK+J,EAAIhiB,OAGNgY,EAAK,EAAIC,GAAI,CAGlB,GAFAijE,EAAMljE,GAAMC,EAAKD,GAAM,EAEnBgK,EADJk5D,GAAOA,EAAM,IACG7wD,GAAQA,GAAQrI,EAAIk5D,EAAM,GACxC,OAAO,EAEL7wD,EAAOrI,EAAIk5D,GACbjjE,EAAKijE,EAELljE,EAAKkjE,EAAM,EAGf,OAAO,kFCjWT,IAAAx8E,EAAAlC,EAAA,GAIAoC,EAAApC,EAAA,GASAmC,EAAAnC,EAAA,GAMAqC,EAAArC,EAAA,GAcAgwC,EAAAhwC,EAAA,GAUA,SAAAu9D,EACEohB,EACA78E,EACAuV,EACA4lB,EACAo5B,EACAx4C,GAEA,IAEIkQ,EACAC,EACAC,EACAkZ,EALA3nC,EAASm/E,EAASn/E,OAWtB,OAAQsC,EAAUuH,cAIhB,IAAK,YACH,IAAI2E,EAAO4wE,EAAqBD,EAAUtnE,EAAe4lB,EAAUpf,GAEnE,OADA8gE,EAAS7xB,YAAc3qD,EAAA2F,KAAKW,KACvBuF,EACEA,EAAKkB,GAAE,KAAwBlB,EAAKkB,GAAE,KACzC1P,EAAOu8B,UAAU,GACjBv8B,EAAOu8B,UAAU,GAHHv8B,EAAOkiC,oBAK3B,IAAK,UACC1zB,EAAO4wE,EAAqBD,EAAUtnE,EAAe4lB,EAAUpf,GAEnE,OADA8gE,EAAS7xB,YAAc3qD,EAAA2F,KAAKW,KACvBuF,EACEA,EAAKkB,GAAE,GACV1P,EAAOu8B,UAAU,GACjBv8B,EAAOu8B,UAAU,GAHHv8B,EAAOkiC,oBAK3B,IAAK,WACC1zB,EAAO4wE,EAAqBD,EAAUtnE,EAAe4lB,EAAUpf,GAEnE,OADA8gE,EAAS7xB,YAAc3qD,EAAA2F,KAAKW,KACvBuF,EACEA,EAAKkB,GAAE,GACV1P,EAAOu8B,UAAU,GACjBv8B,EAAOu8B,UAAU,GAHHv8B,EAAOkiC,oBAK3B,IAAK,cACC1zB,EAAO4wE,EAAqBD,EAAUtnE,EAAe4lB,EAAUpf,GAEnE,OADA8gE,EAAS7xB,YAAc3qD,EAAA2F,KAAKW,KACvBuF,GACL2wE,EAAS7xB,YAAc3qD,EAAA2F,KAAKW,KACrBuF,EAAKkB,GAAE,KACV1P,EAAOu8B,UAAU,GACjBv8B,EAAOu8B,UAAU,IAJHv8B,EAAOkiC,oBAM3B,IAAK,WACC1zB,EAAO4wE,EAAqBD,EAAUtnE,EAAe4lB,EAAUpf,GAEnE,GADA8gE,EAAS7xB,YAAc3qD,EAAA2F,KAAKW,MACvBuF,EAAM,OAAOxO,EAAOkiC,oBAEzB,GADI7nB,EAAY7L,EAAKgL,eACN,CACb,IAAIhS,EAAiB23E,EAAS3jE,QAAQhU,eACtC,GAAIA,GAAkB6S,EAAU8J,eAAe3c,GAAiB,OAAOxH,EAAOu8B,UAAU,GAE1F,OAAOv8B,EAAOu8B,UAAU,GAE1B,IAAK,UACC/tB,EAAO4wE,EAAqBD,EAAUtnE,EAAe4lB,EAAUpf,GAEnE,OADA8gE,EAAS7xB,YAAc3qD,EAAA2F,KAAKW,KACvBuF,EAEe,OADhB6L,EAAY7L,EAAKgL,iBAC6D,MAAtDa,EAAUR,eAAe22B,EAAAhtC,aAAaa,aAC9DrE,EAAOu8B,UAAU,GACjBv8B,EAAOu8B,UAAU,GAJHv8B,EAAOkiC,oBAS3B,IAAK,MACH,GAAuB,GAAnBzE,EAASz5B,OAcX,OAbI6T,IACEA,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IACnC,GAAxBA,EAAc7T,QAChBm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,MAI3D+vE,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAE3CpP,EAAOkiC,oBAEhB,GAAIrqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc7T,OAMhB,OALI6T,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IAC/DsnE,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,KAEhDpP,EAAOkiC,oBAEhB3T,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI5lB,EAAc,GAAE,UAE/D0W,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI96B,EAAA2F,KAAKG,IAAG,KAEzD,OAAQ02E,EAAS7xB,YAAYpjD,MAC3B,OACA,OACA,OACA,OACEy9B,EAAM3nC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQG,OAAQgD,GACzC,MAEF,QACA,OACA,OACEoZ,EAAM3nC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQG,OAAQgD,GACzC,MAEF,OACE,GAAI4wD,EAAS7xB,YAAY59C,GAAE,KAAuB,CAChDyvE,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBACb,MAIJ,OACEyF,EAAM3nC,EAAOm9B,YACXgiD,EAAS92E,QAAQqmD,SACb7rD,EAAAuoB,QAAQolD,OACR3tE,EAAAuoB,QAAQG,OACZgD,GAEF,MAEF,OACA,OACEoZ,EAAM3nC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQolD,OAAQjiD,GACzC,MAEF,QACE4wD,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBAIjB,OAAOyF,EAET,IAAK,MACH,GAAuB,GAAnBlK,EAASz5B,OAcX,OAbI6T,IACEA,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IACnC,GAAxBA,EAAc7T,QAChBm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,MAI3D+vE,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAE3CpP,EAAOkiC,oBAEhB,GAAIrqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc7T,OAMhB,OALI6T,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IAC/DsnE,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,KAEhDpP,EAAOkiC,oBAEhB3T,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI5lB,EAAc,GAAE,UAE/D0W,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI96B,EAAA2F,KAAKG,IAAG,KAEzD,OAAQ02E,EAAS7xB,YAAYpjD,MAC3B,OACA,OACA,OACA,OACEy9B,EAAM3nC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQI,OAAQ+C,GACzC,MAEF,QACA,OACA,OACEoZ,EAAM3nC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQI,OAAQ+C,GACzC,MAEF,OACE,GAAI4wD,EAAS7xB,YAAY59C,GAAE,KAAuB,CAChDyvE,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBACb,MAIJ,OACEyF,EAAM3nC,EAAOm9B,YACXgiD,EAAS92E,QAAQqmD,SACb7rD,EAAAuoB,QAAQqlD,OACR5tE,EAAAuoB,QAAQI,OACZ+C,GAEF,MAEF,OACA,OACEoZ,EAAM3nC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQqlD,OAAQliD,GACzC,MAEF,QACE4wD,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBAIjB,OAAOyF,EAET,IAAK,SACH,GAAuB,GAAnBlK,EAASz5B,OAcX,OAbI6T,IACEA,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IACnC,GAAxBA,EAAc7T,QAChBm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,MAI3D+vE,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAE3CpP,EAAOkiC,oBAEhB,GAAIrqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc7T,OAMhB,OALI6T,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IAC/DsnE,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,KAEhDpP,EAAOkiC,oBAEhB3T,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI5lB,EAAc,GAAE,UAE/D0W,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI96B,EAAA2F,KAAKG,IAAG,KAEzD,OAAQ02E,EAAS7xB,YAAYpjD,MAC3B,OACA,OACA,OACA,OACEy9B,EAAM3nC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQK,UAAW8C,GAC5C,MAEF,QACA,OACA,OACEoZ,EAAM3nC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQK,UAAW8C,GAC5C,MAEF,OACE,GAAI4wD,EAAS7xB,YAAY59C,GAAE,KAAuB,CAChDyvE,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBACb,MAIJ,OACEyF,EAAM3nC,EAAOm9B,YACXgiD,EAAS92E,QAAQqmD,SACb7rD,EAAAuoB,QAAQslD,UACR7tE,EAAAuoB,QAAQK,UACZ8C,GAEF,MAEF,OACA,OACEoZ,EAAM3nC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQslD,UAAWniD,GAC5C,MAEF,QACE4wD,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBAIjB,OAAOyF,EAET,IAAK,OACH,GAAuB,GAAnBlK,EAASz5B,OAcX,OAbI6T,IACEA,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IACnC,GAAxBA,EAAc7T,QAChBm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,MAI3D+vE,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAE3CpP,EAAOkiC,oBAEhB,GAAIrqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc7T,OAMhB,OALI6T,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IAC/DsnE,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,KAEhDpP,EAAOkiC,oBAEhB3T,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI5lB,EAAc,GAAE,UAE/D0W,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI96B,EAAA2F,KAAKG,IAAG,KAGzD,OADA+lB,EAAO2wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI0hD,EAAS7xB,YAAW,KAC3D6xB,EAAS7xB,YAAYpjD,MAC3B,OACA,OACA,OACA,OACA,QACEy9B,EAAMw3C,EAASjnB,uBACbl4D,EAAOs9B,aAAaz6B,EAAAqlB,SAASmpD,QAAS9iD,EAAMC,GAC5C2wD,EAAS7xB,aAIb,OACA,OACE3lB,EAAM3nC,EAAOs9B,aAAaz6B,EAAAqlB,SAASmpD,QAAS9iD,EAAMC,GAClD,MAEF,OACE,GAAI2wD,EAAS7xB,YAAY59C,GAAE,KAAuB,CAChDyvE,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBACb,MAIJ,OACEyF,EAAM3nC,EAAOs9B,aACX6hD,EAAS92E,QAAQqmD,SACb7rD,EAAAqlB,SAASqpD,QACT1uE,EAAAqlB,SAASmpD,QACb9iD,EACAC,GAEF,MAEF,OACA,OACEmZ,EAAM3nC,EAAOs9B,aAAaz6B,EAAAqlB,SAASqpD,QAAShjD,EAAMC,GAClD,MAEF,QACE2wD,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBAIjB,OAAOyF,EAET,IAAK,OACH,GAAuB,GAAnBlK,EAASz5B,OAcX,OAbI6T,IACEA,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IACnC,GAAxBA,EAAc7T,QAChBm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,MAI3D+vE,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAE3CpP,EAAOkiC,oBAEhB,GAAIrqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc7T,OAMhB,OALI6T,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IAC/DsnE,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,KAEhDpP,EAAOkiC,oBAEhB3T,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI5lB,EAAc,GAAE,UAE/D0W,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI96B,EAAA2F,KAAKG,IAAG,KAGzD,OADA+lB,EAAO2wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI0hD,EAAS7xB,YAAW,KAC3D6xB,EAAS7xB,YAAYpjD,MAC3B,OACA,OACA,OACA,OACA,QACEy9B,EAAMw3C,EAASjnB,uBACbl4D,EAAOs9B,aAAaz6B,EAAAqlB,SAASopD,QAAS/iD,EAAMC,GAC5C2wD,EAAS7xB,aAEX,MAEF,OACA,OACE3lB,EAAM3nC,EAAOs9B,aAAaz6B,EAAAqlB,SAASopD,QAAS/iD,EAAMC,GAClD,MAEF,OACE,GAAI2wD,EAAS7xB,YAAY59C,GAAE,KAAuB,CAChDyvE,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBACb,MAIJ,OACEyF,EAAM3nC,EAAOs9B,aACX6hD,EAAS92E,QAAQqmD,SACb7rD,EAAAqlB,SAASspD,QACT3uE,EAAAqlB,SAASopD,QACb/iD,EACAC,GAEF,MAEF,OACA,OACEmZ,EAAM3nC,EAAOs9B,aAAaz6B,EAAAqlB,SAASspD,QAASjjD,EAAMC,GAClD,MAEF,QACE2wD,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBAIjB,OAAOyF,EAET,IAAK,MACH,GAAuB,GAAnBlK,EAASz5B,OAcX,OAbI6T,IACEA,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IACnC,GAAxBA,EAAc7T,QAChBm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,MAI3D+vE,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAE3CpP,EAAOkiC,oBAEhB,GAAIrqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc7T,OAMhB,OALI6T,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IAC/DsnE,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,KAEhDpP,EAAOkiC,oBAEhB3T,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI5lB,EAAc,GAAE,UAE/D0W,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI96B,EAAA2F,KAAKa,IAAG,KAEzD,OAAQg2E,EAAS7xB,YAAYpjD,MAC3B,OACA,OACA,OAEE,IAAIurD,EAAY0pB,EAASv6D,gBAAgB3D,oBAAoBte,EAAA2F,KAAKG,KAAK,GACvEk/B,EAAM3nC,EAAOmhC,aACXnhC,EAAO89B,eAAe23B,EAAU94C,MAAO4R,GACvCvuB,EAAOs9B,aAAaz6B,EAAAqlB,SAASoyC,OAC3Bt6D,EAAOu8B,UAAU,GACjBv8B,EAAO49B,eAAe63B,EAAU94C,MAAO9Z,EAAA4d,WAAWC,MAEpD1gB,EAAOs9B,aAAaz6B,EAAAqlB,SAASqB,MAC3BvpB,EAAO49B,eAAe63B,EAAU94C,MAAO9Z,EAAA4d,WAAWC,KAClD1gB,EAAOu8B,UAAU,KAGrB,MAEF,OACMk5B,EAAY0pB,EAASv6D,gBAAgB3D,oBAAoBk+D,EAAS92E,QAAQW,WAAW,GACzF2+B,EAAM3nC,EAAOmhC,aACXnhC,EAAO89B,eAAe23B,EAAU94C,MAAO4R,GACvCvuB,EAAOs9B,aACL6hD,EAAS92E,QAAQqmD,SACb7rD,EAAAqlB,SAASqyC,OACT13D,EAAAqlB,SAASoyC,OACb6kB,EAAS92E,QAAQW,UAAUgiD,aAAahrD,GACxCA,EAAO49B,eAAe63B,EAAU94C,MAAOwiE,EAAS92E,QAAQqpD,iBAE1D1xD,EAAOs9B,aACL6hD,EAAS92E,QAAQqmD,SACb7rD,EAAAqlB,SAASuB,MACT5mB,EAAAqlB,SAASqB,MACbvpB,EAAO49B,eAAe63B,EAAU94C,MAAOwiE,EAAS92E,QAAQqpD,gBACxDytB,EAAS92E,QAAQW,UAAUgiD,aAAahrD,KAG5C,MAEF,OACMy1D,EAAY0pB,EAASv6D,gBAAgB3D,oBAAoBte,EAAA2F,KAAKI,KAAK,GACvEi/B,EAAM3nC,EAAOmhC,aACXnhC,EAAO89B,eAAe23B,EAAU94C,MAAO4R,GACvCvuB,EAAOs9B,aAAaz6B,EAAAqlB,SAASqyC,OAC3Bv6D,EAAO28B,UAAU,EAAG,GACpB38B,EAAO49B,eAAe63B,EAAU94C,MAAO9Z,EAAA4d,WAAWE,MAEpD3gB,EAAOs9B,aAAaz6B,EAAAqlB,SAASuB,MAC3BzpB,EAAO49B,eAAe63B,EAAU94C,MAAO9Z,EAAA4d,WAAWE,KAClD3gB,EAAO28B,UAAU,EAAG,KAGxB,MAEF,OACE,GAAIwiD,EAAS7xB,YAAY59C,GAAE,KAAuB,CAChDyvE,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBACb,MAIJ,OACA,OACA,OACA,OACA,QACEyF,EAAMpZ,EACN,MAEF,QACEoZ,EAAM3nC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQ8kD,OAAQ3hD,GACzC,MAEF,QACEoZ,EAAM3nC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQulD,OAAQpiD,GACzC,MAEF,QACEoZ,EAAM3nC,EAAOkiC,oBACb,MAEF,QACEi9C,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBAIjB,OAAOyF,EAET,IAAK,MACH,GAAuB,GAAnBlK,EAASz5B,OAcX,OAbI6T,IACEA,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IACnC,GAAxBA,EAAc7T,QAChBm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,MAI3D+vE,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAE3CpP,EAAOkiC,oBAEhB,GAAIrqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc7T,OAMhB,OALI6T,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IAC/DsnE,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,KAEhDpP,EAAOkiC,oBAEhB3T,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI5lB,EAAc,GAAE,UAE/D0W,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI96B,EAAA2F,KAAKa,IAAG,KAGzD,OADAqlB,EAAO2wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI0hD,EAAS7xB,YAAW,KAC3D6xB,EAAS7xB,YAAYpjD,MAC3B,OACA,OACA,OACE,IAAI2O,EAAOsmE,EAASv6D,gBAAgB/L,KAChCwmE,EAAaF,EAASv6D,gBAAgBvE,aACxC8+D,EAAS7xB,aACRz0C,EAAKuO,YAAYmH,EAAM4wD,EAAS7xB,cAE/BgyB,EAAaH,EAASv6D,gBAAgB3D,oBACxCk+D,EAAS7xB,aACRz0C,EAAKuO,YAAYoH,EAAM2wD,EAAS7xB,cAEnC6xB,EAASv6D,gBAAgB5D,cAAcq+D,GACvC13C,EAAM3nC,EAAOmhC,aACXnhC,EAAO89B,eAAeuhD,EAAW1iE,MAAO4R,GACxCvuB,EAAO89B,eAAewhD,EAAW3iE,MAAO6R,GACxCxuB,EAAOs9B,aAAaz6B,EAAAqlB,SAASqB,MAC3BvpB,EAAO49B,eAAeyhD,EAAW1iE,MAAO9Z,EAAA4d,WAAWC,KACnD1gB,EAAO49B,eAAe0hD,EAAW3iE,MAAO9Z,EAAA4d,WAAWC,OAGvD,MAEF,OACA,OACA,OACA,QACM7H,EAAOsmE,EAASv6D,gBAAgB/L,KAChCwmE,EAAaF,EAASv6D,gBAAgBvE,aACxC8+D,EAAS7xB,aACRz0C,EAAKuO,YAAYmH,EAAM4wD,EAAS7xB,cAE/BgyB,EAAaH,EAASv6D,gBAAgB3D,oBACxCk+D,EAAS7xB,aACRz0C,EAAKuO,YAAYoH,EAAM2wD,EAAS7xB,cAEnC6xB,EAASv6D,gBAAgB5D,cAAcq+D,GACvC13C,EAAM3nC,EAAOmhC,aACXnhC,EAAO89B,eAAeuhD,EAAW1iE,MAAO4R,GACxCvuB,EAAO89B,eAAewhD,EAAW3iE,MAAO6R,GACxCxuB,EAAOs9B,aAAaz6B,EAAAqlB,SAASsB,MAC3BxpB,EAAO49B,eAAeyhD,EAAW1iE,MAAO9Z,EAAA4d,WAAWC,KACnD1gB,EAAO49B,eAAe0hD,EAAW3iE,MAAO9Z,EAAA4d,WAAWC,OAGvD,MAEF,OACM2+D,EAAaF,EAASv6D,gBAAgBvE,aAAa1d,EAAA2F,KAAKI,KAAK,GAC7D42E,EAAaH,EAASv6D,gBAAgB3D,oBAAoBte,EAAA2F,KAAKI,KAAK,GACxEy2E,EAASv6D,gBAAgB5D,cAAcq+D,GACvC13C,EAAM3nC,EAAOmhC,aACXnhC,EAAO89B,eAAeuhD,EAAW1iE,MAAO4R,GACxCvuB,EAAO89B,eAAewhD,EAAW3iE,MAAO6R,GACxCxuB,EAAOs9B,aAAaz6B,EAAAqlB,SAASuB,MAC3BzpB,EAAO49B,eAAeyhD,EAAW1iE,MAAO9Z,EAAA4d,WAAWE,KACnD3gB,EAAO49B,eAAe0hD,EAAW3iE,MAAO9Z,EAAA4d,WAAWE,OAGvD,MAEF,OACM0+D,EAAaF,EAASv6D,gBAAgBvE,aAAa1d,EAAA2F,KAAKI,KAAK,GAC7D42E,EAAaH,EAASv6D,gBAAgB3D,oBAAoBte,EAAA2F,KAAKI,KAAK,GACxEy2E,EAASv6D,gBAAgB5D,cAAcq+D,GACvC13C,EAAM3nC,EAAOmhC,aACXnhC,EAAO89B,eAAeuhD,EAAW1iE,MAAO4R,GACxCvuB,EAAO89B,eAAewhD,EAAW3iE,MAAO6R,GACxCxuB,EAAOs9B,aAAaz6B,EAAAqlB,SAASwB,MAC3B1pB,EAAO49B,eAAeyhD,EAAW1iE,MAAO9Z,EAAA4d,WAAWE,KACnD3gB,EAAO49B,eAAe0hD,EAAW3iE,MAAO9Z,EAAA4d,WAAWE,OAGvD,MAEF,OACM0+D,EAAaF,EAASv6D,gBAAgBvE,aAAa8+D,EAAS92E,QAAQW,WAAW,GAC/Es2E,EAAaH,EAASv6D,gBAAgB3D,oBAAoBk+D,EAAS92E,QAAQW,WAAW,GAC1Fm2E,EAASv6D,gBAAgB5D,cAAcq+D,GACvC13C,EAAM3nC,EAAOmhC,aACXnhC,EAAO89B,eAAeuhD,EAAW1iE,MAAO4R,GACxCvuB,EAAO89B,eAAewhD,EAAW3iE,MAAO6R,GACxCxuB,EAAOs9B,aACL6hD,EAAS92E,QAAQqmD,SACb7rD,EAAAqlB,SAASuB,MACT5mB,EAAAqlB,SAASqB,MACbvpB,EAAO49B,eAAeyhD,EAAW1iE,MAAOwiE,EAAS92E,QAAQqpD,gBACzD1xD,EAAO49B,eAAe0hD,EAAW3iE,MAAOwiE,EAAS92E,QAAQqpD,kBAG7D,MAEF,OACE,GAAIytB,EAAS7xB,YAAY59C,GAAE,KAAuB,CAChDyvE,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBACb,MAEEm9C,EAAaF,EAASv6D,gBAAgBvE,aAAa8+D,EAAS92E,QAAQW,WAAW,GAC/Es2E,EAAaH,EAASv6D,gBAAgB3D,oBAAoBk+D,EAAS92E,QAAQW,WAAW,GAC1Fm2E,EAASv6D,gBAAgB5D,cAAcq+D,GACvC13C,EAAM3nC,EAAOmhC,aACXnhC,EAAO89B,eAAeuhD,EAAW1iE,MAAO4R,GACxCvuB,EAAO89B,eAAewhD,EAAW3iE,MAAO6R,GACxCxuB,EAAOs9B,aACL6hD,EAAS92E,QAAQqmD,SACb7rD,EAAAqlB,SAASwB,MACT7mB,EAAAqlB,SAASsB,MACbxpB,EAAO49B,eAAeyhD,EAAW1iE,MAAOwiE,EAAS92E,QAAQqpD,gBACzD1xD,EAAO49B,eAAe0hD,EAAW3iE,MAAOwiE,EAAS92E,QAAQqpD,kBAG7D,MAEF,QACE/pB,EAAM3nC,EAAOs9B,aAAaz6B,EAAAqlB,SAASypD,OAAQpjD,EAAMC,GACjD,MAEF,QACEmZ,EAAM3nC,EAAOs9B,aAAaz6B,EAAAqlB,SAAS4pD,OAAQvjD,EAAMC,GACjD,MAEF,QACE2wD,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBAIjB,OAAOyF,EAET,IAAK,MACH,GAAuB,GAAnBlK,EAASz5B,OAcX,OAbI6T,IACEA,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IACnC,GAAxBA,EAAc7T,QAChBm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,MAI3D+vE,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAE3CpP,EAAOkiC,oBAEhB,GAAIrqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc7T,OAMhB,OALI6T,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IAC/DsnE,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,KAEhDpP,EAAOkiC,oBAEhB3T,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI5lB,EAAc,GAAE,UAE/D0W,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI96B,EAAA2F,KAAKa,IAAG,KAGzD,OADAqlB,EAAO2wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI0hD,EAAS7xB,YAAW,KAC3D6xB,EAAS7xB,YAAYpjD,MAC3B,OACA,OACA,OACM2O,EAAOsmE,EAASv6D,gBAAgB/L,KAChCwmE,EAAaF,EAASv6D,gBAAgBvE,aACxC8+D,EAAS7xB,aACRz0C,EAAKuO,YAAYmH,EAAM4wD,EAAS7xB,cAE/BgyB,EAAaH,EAASv6D,gBAAgB3D,oBACxCk+D,EAAS7xB,aACRz0C,EAAKuO,YAAYoH,EAAM2wD,EAAS7xB,cAEnC6xB,EAASv6D,gBAAgB5D,cAAcq+D,GACvC13C,EAAM3nC,EAAOmhC,aACXnhC,EAAO89B,eAAeuhD,EAAW1iE,MAAO4R,GACxCvuB,EAAO89B,eAAewhD,EAAW3iE,MAAO6R,GACxCxuB,EAAOs9B,aAAaz6B,EAAAqlB,SAASS,MAC3B3oB,EAAO49B,eAAeyhD,EAAW1iE,MAAO9Z,EAAA4d,WAAWC,KACnD1gB,EAAO49B,eAAe0hD,EAAW3iE,MAAO9Z,EAAA4d,WAAWC,OAGvD,MAEF,OACA,OACA,OACA,QACM7H,EAAOsmE,EAASv6D,gBAAgB/L,KAChCwmE,EAAaF,EAASv6D,gBAAgBvE,aACxC8+D,EAAS7xB,aACRz0C,EAAKuO,YAAYmH,EAAM4wD,EAAS7xB,cAE/BgyB,EAAaH,EAASv6D,gBAAgB3D,oBACxCk+D,EAAS7xB,aACRz0C,EAAKuO,YAAYoH,EAAM2wD,EAAS7xB,cAEnC6xB,EAASv6D,gBAAgB5D,cAAcq+D,GACvC13C,EAAM3nC,EAAOmhC,aACXnhC,EAAO89B,eAAeuhD,EAAW1iE,MAAO4R,GACxCvuB,EAAO89B,eAAewhD,EAAW3iE,MAAO6R,GACxCxuB,EAAOs9B,aAAaz6B,EAAAqlB,SAASU,MAC3B5oB,EAAO49B,eAAeyhD,EAAW1iE,MAAO9Z,EAAA4d,WAAWC,KACnD1gB,EAAO49B,eAAe0hD,EAAW3iE,MAAO9Z,EAAA4d,WAAWC,OAGvD,MAEF,OACM2+D,EAAaF,EAASv6D,gBAAgBvE,aAAa1d,EAAA2F,KAAKI,KAAK,GAC7D42E,EAAaH,EAASv6D,gBAAgB3D,oBAAoBte,EAAA2F,KAAKI,KAAK,GACxEy2E,EAASv6D,gBAAgB5D,cAAcq+D,GACvC13C,EAAM3nC,EAAOmhC,aACXnhC,EAAO89B,eAAeuhD,EAAW1iE,MAAO4R,GACxCvuB,EAAO89B,eAAewhD,EAAW3iE,MAAO6R,GACxCxuB,EAAOs9B,aAAaz6B,EAAAqlB,SAASW,MAC3B7oB,EAAO49B,eAAeyhD,EAAW1iE,MAAO9Z,EAAA4d,WAAWE,KACnD3gB,EAAO49B,eAAe0hD,EAAW3iE,MAAO9Z,EAAA4d,WAAWE,OAGvD,MAEF,OACM0+D,EAAaF,EAASv6D,gBAAgBvE,aAAa1d,EAAA2F,KAAKI,KAAK,GAC7D42E,EAAaH,EAASv6D,gBAAgB3D,oBAAoBte,EAAA2F,KAAKI,KAAK,GACxEy2E,EAASv6D,gBAAgB5D,cAAcq+D,GACvC13C,EAAM3nC,EAAOmhC,aACXnhC,EAAO89B,eAAeuhD,EAAW1iE,MAAO4R,GACxCvuB,EAAO89B,eAAewhD,EAAW3iE,MAAO6R,GACxCxuB,EAAOs9B,aAAaz6B,EAAAqlB,SAASY,MAC3B9oB,EAAO49B,eAAeyhD,EAAW1iE,MAAO9Z,EAAA4d,WAAWE,KACnD3gB,EAAO49B,eAAe0hD,EAAW3iE,MAAO9Z,EAAA4d,WAAWE,OAGvD,MAEF,OACM0+D,EAAaF,EAASv6D,gBAAgBvE,aAAa8+D,EAAS92E,QAAQW,WAAW,GAC/Es2E,EAAaH,EAASv6D,gBAAgB3D,oBAAoBk+D,EAAS92E,QAAQW,WAAW,GAC1Fm2E,EAASv6D,gBAAgB5D,cAAcq+D,GACvC13C,EAAM3nC,EAAOmhC,aACXnhC,EAAO89B,eAAeuhD,EAAW1iE,MAAO4R,GACxCvuB,EAAO89B,eAAewhD,EAAW3iE,MAAO6R,GACxCxuB,EAAOs9B,aACL6hD,EAAS92E,QAAQqmD,SACb7rD,EAAAqlB,SAASW,MACThmB,EAAAqlB,SAASS,MACb3oB,EAAO49B,eAAeyhD,EAAW1iE,MAAOwiE,EAAS92E,QAAQqpD,gBACzD1xD,EAAO49B,eAAe0hD,EAAW3iE,MAAOwiE,EAAS92E,QAAQqpD,kBAG7D,MAEF,OACE,GAAIytB,EAAS7xB,YAAY59C,GAAE,KAAuB,CAChDyvE,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBACb,MAEEm9C,EAAaF,EAASv6D,gBAAgBvE,aAAa8+D,EAAS92E,QAAQW,WAAW,GAC/Es2E,EAAaH,EAASv6D,gBAAgB3D,oBAAoBk+D,EAAS92E,QAAQW,WAAW,GAC1Fm2E,EAASv6D,gBAAgB5D,cAAcq+D,GACvC13C,EAAM3nC,EAAOmhC,aACXnhC,EAAO89B,eAAeuhD,EAAW1iE,MAAO4R,GACxCvuB,EAAO89B,eAAewhD,EAAW3iE,MAAO6R,GACxCxuB,EAAOs9B,aACL6hD,EAAS92E,QAAQqmD,SACb7rD,EAAAqlB,SAASY,MACTjmB,EAAAqlB,SAASU,MACb5oB,EAAO49B,eAAeyhD,EAAW1iE,MAAOwiE,EAAS92E,QAAQqpD,gBACzD1xD,EAAO49B,eAAe0hD,EAAW3iE,MAAOwiE,EAAS92E,QAAQqpD,kBAG7D,MAEF,QACE/pB,EAAM3nC,EAAOs9B,aAAaz6B,EAAAqlB,SAASwpD,OAAQnjD,EAAMC,GACjD,MAEF,QACEmZ,EAAM3nC,EAAOs9B,aAAaz6B,EAAAqlB,SAAS2pD,OAAQtjD,EAAMC,GACjD,MAEF,QACE2wD,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBAIjB,OAAOyF,EAET,IAAK,OACH,GAAuB,GAAnBlK,EAASz5B,OAcX,OAbI6T,IACEA,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IACnC,GAAxBA,EAAc7T,QAChBm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,MAI3D+vE,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAE3CpP,EAAOkiC,oBAEhB,GAAIrqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc7T,OAMhB,OALI6T,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IAC/DsnE,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,KAEhDpP,EAAOkiC,oBAEhB3T,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI5lB,EAAc,GAAE,UAE/D0W,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI96B,EAAA2F,KAAKa,IAAG,KAEzD,OAAQg2E,EAAS7xB,YAAYpjD,MAC3B,OACE,GAAIi1E,EAAS7xB,YAAY59C,GAAE,KAAuB,CAChDyvE,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBACb,MAIJ,QACEyF,EAAMpZ,EACN,MAEF,QACEoZ,EAAM3nC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQ+kD,QAAS5hD,GAC1C,MAEF,QACEoZ,EAAM3nC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQwlD,QAASriD,GAC1C,MAEF,QACE4wD,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBAIjB,OAAOyF,EAET,IAAK,QACH,GAAuB,GAAnBlK,EAASz5B,OAcX,OAbI6T,IACEA,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IACnC,GAAxBA,EAAc7T,QAChBm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,MAI3D+vE,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAE3CpP,EAAOkiC,oBAEhB,GAAIrqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc7T,OAMhB,OALI6T,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IAC/DsnE,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,KAEhDpP,EAAOkiC,oBAEhB3T,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI5lB,EAAc,GAAE,UAE/D0W,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI96B,EAAA2F,KAAKa,IAAG,KAEzD,OAAQg2E,EAAS7xB,YAAYpjD,MAC3B,OACE,GAAIi1E,EAAS7xB,YAAY59C,GAAE,KAAuB,CAChDyvE,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBACb,MAIJ,QACEyF,EAAMpZ,EACN,MAEF,QACEoZ,EAAM3nC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQglD,SAAU7hD,GAC3C,MAEF,QACEoZ,EAAM3nC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQylD,SAAUtiD,GAC3C,MAEF,QACE4wD,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBAIjB,OAAOyF,EAET,IAAK,WACH,GAAuB,GAAnBlK,EAASz5B,OAcX,OAbI6T,IACEA,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IACnC,GAAxBA,EAAc7T,QAChBm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,MAI3D+vE,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAE3CpP,EAAOkiC,oBAEhB,GAAIrqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc7T,OAMhB,OALI6T,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IAC/DsnE,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,KAEhDpP,EAAOkiC,oBAEhB3T,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI5lB,EAAc,GAAE,UAE/D0W,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI96B,EAAA2F,KAAKa,IAAG,KAGzD,OADAqlB,EAAO2wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI0hD,EAAS7xB,YAAW,KAC3D6xB,EAAS7xB,YAAYpjD,MAC3B,QACEy9B,EAAM3nC,EAAOs9B,aAAaz6B,EAAAqlB,SAASupD,YAAaljD,EAAMC,GACtD,MAEF,QACEmZ,EAAM3nC,EAAOs9B,aAAaz6B,EAAAqlB,SAAS0pD,YAAarjD,EAAMC,GACtD,MAEF,QACE2wD,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBAIjB,OAAOyF,EAET,IAAK,UACH,GAAuB,GAAnBlK,EAASz5B,OAcX,OAbI6T,IACEA,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IACnC,GAAxBA,EAAc7T,QAChBm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,MAI3D+vE,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAE3CpP,EAAOkiC,oBAEhB,GAAIrqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc7T,OAMhB,OALI6T,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IAC/DsnE,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,KAEhDpP,EAAOkiC,oBAEhB3T,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI5lB,EAAc,GAAE,UAE/D0W,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI96B,EAAA2F,KAAKa,IAAG,KAEzD,OAAQg2E,EAAS7xB,YAAYpjD,MAC3B,OACE,GAAIi1E,EAAS7xB,YAAY59C,GAAE,KAAuB,CAChDyvE,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBACb,MAIJ,QACEyF,EAAMpZ,EACN,MAEF,QACEoZ,EAAM3nC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQklD,WAAY/hD,GAC7C,MAEF,QACEoZ,EAAM3nC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQ2lD,WAAYxiD,GAC7C,MAEF,QACE4wD,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBAIjB,OAAOyF,EAET,IAAK,cACH,GAAuB,GAAnBlK,EAASz5B,OAYX,OAXM6T,GAAyC,GAAxBA,EAAc7T,SAC/B6T,GAAiBA,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IAChFsnE,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAgBA,EAAc7T,OAAOoL,SAAS,IAAM,MAG/E+vE,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAE3CpP,EAAOkiC,oBAEhB,IAAMrqB,GAAyC,GAAxBA,EAAc7T,OAMnC,OALI6T,GAAiBA,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IAChFsnE,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAgBA,EAAc7T,OAAOoL,SAAS,IAAM,KAEtEpP,EAAOkiC,oBAEhB,OAAQrqB,EAAc,GAAG3N,MACvB,OACA,OACEqkB,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI96B,EAAA2F,KAAKY,IAAG,KACvDy+B,EAAM3nC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQ6lD,eAAgB1iD,GACjD,MAEF,OACA,OACEA,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI96B,EAAA2F,KAAKa,IAAG,KACvDw+B,EAAM3nC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQ8lD,eAAgB3iD,GACjD,MAEF,OACE,GAAI1W,EAAc,GAAGnI,GAAE,KAMrB,OALAyvE,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEbkzE,EAAS7xB,YAAcz1C,EAAc,GAC9B7X,EAAOkiC,oBAIlB,OACE3T,EAAO4wD,EAAS1uB,kBACdhzB,EAAS,GACT0hD,EAAS92E,QAAQqmD,SACb/rD,EAAA2F,KAAKa,IACLxG,EAAA2F,KAAKY,IAAG,KAIdy+B,EAAM3nC,EAAOm9B,YACXgiD,EAAS92E,QAAQqmD,SACb7rD,EAAAuoB,QAAQ8lD,eACRruE,EAAAuoB,QAAQ6lD,eACZ1iD,GAEF,MAEF,QACEA,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI96B,EAAA2F,KAAKG,IAAG,KACvDk/B,EAAM3nC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQ+lD,eAAgB5iD,GACjD,MAEF,QACEA,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI96B,EAAA2F,KAAKI,IAAG,KACvDi/B,EAAM3nC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQgmD,eAAgB7iD,GACjD,MAEF,QACE4wD,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBAKjB,OADAi9C,EAAS7xB,YAAcz1C,EAAc,GAC9B8vB,EAET,IAAK,OACH,GAAuB,GAAnBlK,EAASz5B,OAcX,OAbI6T,IACEA,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IACnC,GAAxBA,EAAc7T,QAChBm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,MAI3D+vE,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAE3CpP,EAAOkiC,oBAEhB,GAAIrqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc7T,OAMhB,OALI6T,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IAC/DsnE,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,KAEhDpP,EAAOkiC,oBAEhB3T,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI5lB,EAAc,GAAE,UAE/D0W,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI96B,EAAA2F,KAAKa,IAAG,KAEzD,OAAQg2E,EAAS7xB,YAAYpjD,MAC3B,QACEy9B,EAAM3nC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQmlD,QAAShiD,GAC1C,MAEF,QACEoZ,EAAM3nC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQ4lD,QAASziD,GAC1C,MAGF,QACE4wD,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBAIjB,OAAOyF,EAET,IAAK,QACH,GAAuB,GAAnBlK,EAASz5B,OAcX,OAbI6T,IACEA,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IACnC,GAAxBA,EAAc7T,QAChBm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,MAI3D+vE,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAE3CpP,EAAOkiC,oBAEhB,GAAIrqB,GAAiBA,EAAc7T,OAAQ,CAEzC,GADAm7E,EAAS7xB,YAAcz1C,EAAc,GACT,GAAxBA,EAAc7T,OAMhB,OALI6T,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IAC/DsnE,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,KAEhDpP,EAAOkiC,oBAEhB3T,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI5lB,EAAc,GAAE,UAE/D0W,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI96B,EAAA2F,KAAKa,IAAG,KAEzD,OAAQg2E,EAAS7xB,YAAYpjD,MAC3B,OACE,GAAIi1E,EAAS7xB,YAAY59C,GAAE,KAAuB,CAChDyvE,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBACb,MAIJ,QACEyF,EAAMpZ,EACN,MAGF,QACEoZ,EAAM3nC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQilD,SAAU9hD,GAC3C,MAEF,QACEoZ,EAAM3nC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQ0lD,SAAUviD,GAC3C,MAEF,QACE4wD,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBAIjB,OAAOyF,EAKT,IAAK,OACH,OAAIlK,EAASz5B,OAAS,GAAKy5B,EAASz5B,OAAS,GACrC6T,GAAyC,GAAxBA,EAAc7T,QACnCm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAgBA,EAAc7T,OAAOoL,SAAS,IAAM,KAG3EquB,EAASz5B,OAAS,EACpBm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeoyD,wCACf9/C,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAGlD+vE,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAG7CpP,EAAOkiC,qBAEVrqB,GAAyC,GAAxBA,EAAc7T,QAQrCuqB,EAAO4wD,EAAS1uB,kBACdhzB,EAAS,GACT0hD,EAAS92E,QAAQW,UAAS,MAIxB6xB,EAA4B,GAAnB4C,EAASz5B,OAAcu7E,EAAuBJ,EAAU1hD,EAAS,IAAM,GACvE,EACJz9B,EAAOkiC,qBAEhBi9C,EAAS7xB,YAAcz1C,EAAc,GAC9B7X,EAAOk+B,WACZrmB,EAAc,GAAGyL,SACjBzL,EAAc,GAAGnI,GAAG,GACpB6e,EACA1W,EAAc,GAAGnI,GAAE,IACnBmnD,EAAennD,GAAE,IACjBmnD,EAAejsC,KAAO/S,EAAc,GAAG+S,MAClCu0D,EAAS7xB,YAAcuJ,GAAgBr2C,gBACvC2+D,EAAS7xB,YAAcz1C,EAAc,IAAI2I,eAC9Cqa,MA3BIhjB,GAAiBA,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IAChFsnE,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAgBA,EAAc7T,OAAOoL,SAAS,IAAM,KAEtEpP,EAAOkiC,qBAyBlB,IAAK,QAEH,GADAi9C,EAAS7xB,YAAc3qD,EAAA2F,KAAKc,KACxBq0B,EAASz5B,OAAS,GAAKy5B,EAASz5B,OAAS,EAkB3C,OAjBM6T,GAAyC,GAAxBA,EAAc7T,QACnCm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAgBA,EAAc7T,OAAOoL,SAAS,IAAM,KAG3EquB,EAASz5B,OAAS,EACpBm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeoyD,wCACf9/C,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAGlD+vE,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAG7CpP,EAAOkiC,oBAEhB,IAAMrqB,GAAyC,GAAxBA,EAAc7T,OAKnC,OAJAm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAgBA,EAAc7T,OAAOoL,SAAS,IAAM,KAEtEpP,EAAOkiC,oBAEhB3T,EAAO4wD,EAAS1uB,kBACdhzB,EAAS,GACT0hD,EAAS92E,QAAQW,UAAS,KAI5BwlB,EAAO2wD,EAAS1uB,kBACdhzB,EAAS,GACT5lB,EAAc,GACdA,EAAc,GAAGnI,GAAE,GAChB,EACA,EAAwB,GAGzBlB,OAAI,EAoBR,OAlBEqJ,EAAc,GAAGnI,GAAE,MAEhByvE,EAAS7xB,YAAY59C,GAAE,IACxByvE,EAAS7xB,YAAY1iC,KAAO/S,EAAc,GAAG+S,OAG/C4D,EAAO2wD,EAASlnB,kBACdzpC,EACA2wD,EAAS7xB,YAAaz1C,EAAc,GAAE,IAGtC4lB,EAAS,IAEXjvB,EAAOqJ,EAAc,IAErBrJ,EAAO2wE,EAAS7xB,aAEdzyB,EAA4B,GAAnB4C,EAASz5B,OAAcu7E,EAAuBJ,EAAU1hD,EAAS,IAAM,GACvE,EACJz9B,EAAOkiC,qBAEhBi9C,EAAS7xB,YAAc3qD,EAAA2F,KAAKc,KACrBpJ,EAAOu+B,YAAY1mB,EAAc,GAAGyL,SAAUiL,EAAMC,EAAMhgB,EAAKgS,eAAgBqa,IAExF,IAAK,SAEH,GADAskD,EAAS7xB,YAAc6xB,EAAS92E,QAAQW,UACjB,GAAnBy0B,EAASz5B,OAWX,OAVM6T,GAAyC,GAAxBA,EAAc7T,QACnCm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAgBA,EAAc7T,OAAOoL,SAAS,IAAM,KAG/E+vE,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAE3CpP,EAAOkiC,oBAEVrqB,GAAyC,GAAxBA,EAAc7T,QACnCm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAgBA,EAAc7T,OAAOoL,SAAS,IAAM,KAG/E,IAAIkU,EAAoBzL,EAAe,GAAGyL,SAkB1C,OAjBI67D,EAAS92E,QAAQqmD,SAEfmI,EAAennD,GAAE,IAAuBmnD,EAAejsC,MAAQ,IACjEu0D,EAAS7xB,YAAc3qD,EAAA2F,KAAKQ,IAC5B6+B,EAAM3nC,EAAOu8B,UAAUjZ,IAEvBqkB,EAAM3nC,EAAO28B,UAAUrZ,EAAU,GAI/BuzC,EAAennD,GAAE,IAA8C,IAAvBmnD,EAAejsC,MACzDu0D,EAAS7xB,YAAc3qD,EAAA2F,KAAKS,IAC5B4+B,EAAM3nC,EAAO28B,UAAUrZ,EAAU,IAEjCqkB,EAAM3nC,EAAOu8B,UAAUjZ,GAGpBqkB,EAET,IAAK,UAEH,GADAw3C,EAAS7xB,YAAc6xB,EAAS92E,QAAQW,UACjB,GAAnBy0B,EAASz5B,OAWX,OAVM6T,GAAyC,GAAxBA,EAAc7T,QACnCm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAgBA,EAAc7T,OAAOoL,SAAS,IAAM,KAG/E+vE,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAE3CpP,EAAOkiC,oBAEhB,IAAMrqB,GAAyC,GAAxBA,EAAc7T,OAKnC,OAJAm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAgBA,EAAc7T,OAAOoL,SAAS,IAAM,KAEtEpP,EAAOkiC,oBAEhB,IACIs9C,OAAS,EACb,OAFIl8D,EAAoBzL,EAAe,GAAGyL,UAGxC,KAAK,EAAKk8D,EAAY,EAAG,MACzB,KAAK,EAAKA,EAAY,EAAG,MACzB,KAAK,EAAKA,EAAY,EAAG,MACzB,KAAK,EAAKA,EAAY,EAAG,MACzB,QAA0B,OAAfz7E,QAAO,GAAe/D,EAAOkiC,oBAmB1C,OAjBIi9C,EAAS92E,QAAQqmD,SAEfmI,EAAennD,GAAE,IAAuBmnD,EAAejsC,MAAQ,IACjEu0D,EAAS7xB,YAAc3qD,EAAA2F,KAAKQ,IAC5B6+B,EAAM3nC,EAAOu8B,UAAUijD,IAEvB73C,EAAM3nC,EAAO28B,UAAU6iD,EAAW,GAIhC3oB,EAAennD,GAAE,IAA8C,IAAvBmnD,EAAejsC,MACzDu0D,EAAS7xB,YAAc3qD,EAAA2F,KAAKS,IAC5B4+B,EAAM3nC,EAAO28B,UAAU6iD,EAAW,IAElC73C,EAAM3nC,EAAOu8B,UAAUijD,GAGpB73C,EAET,IAAK,WAEH,GADAw3C,EAAS7xB,YAAc6xB,EAAS92E,QAAQW,UACpCy0B,EAASz5B,OAAS,EAWpB,OAVM6T,GAAyC,GAAxBA,EAAc7T,QACnCm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAgBA,EAAc7T,OAAOoL,SAAS,IAAM,KAG/E+vE,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAE3CpP,EAAOkiC,oBAEhB,IAAMrqB,GAAyC,GAAxBA,EAAc7T,OAKnC,OAJAm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAgBA,EAAc7T,OAAOoL,SAAS,IAAM,KAEtEpP,EAAOkiC,oBAEhB,IAAI7nB,EACJ,KADIA,EAAYxC,EAAc,GAAG2B,gBAM/B,OAJA2lE,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAENjM,EAAOkiC,oBAEhB,IAAIrH,OAAM,EACV,GAAI4C,EAASz5B,OAAQ,CACnB,GACEy5B,EAAS,GAAGvzB,MAAQtH,EAAAuH,SAASuI,SACT+qB,EAAS,GAAI9qB,aAAe/P,EAAAgQ,YAAYC,OAM5D,OAJAssE,EAASrzE,MACPpJ,EAAAqJ,eAAeoH,wBACfsqB,EAAS,GAAGxxB,OAEPjM,EAAOkiC,oBAEhB,IAAIu9C,EAAsChiD,EAAS,GAAI97B,MACnD6iE,EAAQnqD,EAAU1J,QAAU0J,EAAU1J,QAAQpP,IAAIk+E,GAAa,KACnE,IAAMjb,GAASA,EAAMt6D,MAAQsmC,EAAAlqC,YAAYiT,MAKvC,OAJA4lE,EAASrzE,MACPpJ,EAAAqJ,eAAe2zE,yBACfjiD,EAAS,GAAGxxB,MAAOoO,EAAUxQ,aAAc41E,GAEtCz/E,EAAOkiC,oBAEhBrH,EAAiB2pC,EAAOtiD,kBAExB2Y,EAASxgB,EAAUsI,oBAErB,OAAIw8D,EAAS92E,QAAQqmD,SAEfmI,EAAennD,GAAE,IAAuBmnD,EAAejsC,MAAQ,IACjEu0D,EAAS7xB,YAAc3qD,EAAA2F,KAAKQ,IACrB9I,EAAOu8B,UAAU1B,IAEjB76B,EAAO28B,UAAU9B,GAItBg8B,EAAennD,GAAE,IAA8C,IAAvBmnD,EAAejsC,MACzDu0D,EAAS7xB,YAAc3qD,EAAA2F,KAAKS,IACrB/I,EAAO28B,UAAU9B,IAEjB76B,EAAOu8B,UAAU1B,GAO9B,IAAK,SACH,GAAuB,GAAnB4C,EAASz5B,OAcX,OAbI6T,IACEA,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IACnC,GAAxBA,EAAc7T,QAChBm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,MAI3D+vE,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAE3CpP,EAAOkiC,oBAEhB,GAAIrqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc7T,OAMhB,OALI6T,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IAC/DsnE,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,KAEhDpP,EAAOkiC,oBAEhB3T,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI5lB,EAAc,GAAE,UAE/D0W,EAAO4wD,EAASjvB,4BAA4BzyB,EAAS,GAAI96B,EAAA2F,KAAKG,IAAG,GAE/D+F,EAAO2wE,EAAS7xB,YAOpB,OANA9+B,EAAO2wD,EAAS1uB,kBAAkBhzB,EAAS,GAAIjvB,EAAI,KACnDigB,EAAO0wD,EAAS1qB,cACd0qB,EAASjvB,4BAA4BzyB,EAAS,GAAI96B,EAAA2F,KAAKW,KAAI,GAC3Dk2E,EAAS7xB,aAEX6xB,EAAS7xB,YAAc9+C,EACf2wE,EAAS7xB,YAAYpjD,MAC3B,OACA,OACA,OACA,OACA,QAIA,QACEy9B,EAAM3nC,EAAOmhC,aAAa5S,EAAMC,EAAMC,GACtC,MAEF,QACE0wD,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAM3nC,EAAOkiC,oBAIjB,OAAOyF,EAET,IAAK,cAaH,OAZuB,GAAnBlK,EAASz5B,QACXm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAGhDyI,GACFsnE,EAASrzE,MACPpJ,EAAAqJ,eAAesxD,sBACfh/C,EAAWpS,MAAO3J,EAAUuH,cAGzB7J,EAAOkiC,oBAKhB,IAAK,iBAcH,OAbAi9C,EAAS7xB,YAAc3qD,EAAA2F,KAAKG,IACL,GAAnBg1B,EAASz5B,QACXm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAGhDyI,GACFsnE,EAASrzE,MACPpJ,EAAAqJ,eAAesxD,sBACfh/C,EAAWpS,MAAO3J,EAAUuH,cAGzB7J,EAAOw9B,WAAW36B,EAAAk3B,OAAOm4C,eAElC,IAAK,cAiBH,OAhBAiN,EAAS7xB,YAAc3qD,EAAA2F,KAAKG,IACL,GAAnBg1B,EAASz5B,QACXm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAElDmf,EAAOvuB,EAAOkiC,qBAEd3T,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI96B,EAAA2F,KAAKG,IAAG,KAErDoP,GACFsnE,EAASrzE,MACPpJ,EAAAqJ,eAAesxD,sBACfh/C,EAAWpS,MAAO3J,EAAUuH,cAGzB7J,EAAOw9B,WAAW36B,EAAAk3B,OAAOo4C,WAAY,MAAQ5jD,IAGtD,IAAK,cAOH,GANI1W,GACFsnE,EAASrzE,MACPpJ,EAAAqJ,eAAesxD,sBACfh/C,EAAWpS,MAAO3J,EAAUuH,cAGT,GAAnB4zB,EAASz5B,OAMX,OALAm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAElD+vE,EAAS7xB,YAAc3qD,EAAA2F,KAAKc,KACrBpJ,EAAOkiC,oBAqBhB,MAnBA3T,EAAO4wD,EAAS1uB,kBACdhzB,EAAS,GACT0hD,EAAS92E,QAAQW,UAAS,KAI5BwlB,EAAO2wD,EAAS1uB,kBACdhzB,EAAS,GACT0hD,EAAS92E,QAAQW,UAAS,KAI5BylB,EAAO0wD,EAAS1uB,kBACdhzB,EAAS,GACT0hD,EAAS92E,QAAQW,UAAS,KAI5Bm2E,EAAS7xB,YAAc3qD,EAAA2F,KAAKc,KACtB,IAAI6E,MAAM,mBAGlB,IAAK,aAOH,GANI4J,GACFsnE,EAASrzE,MACPpJ,EAAAqJ,eAAesxD,sBACfh/C,EAAWpS,MAAO3J,EAAUuH,cAGT,GAAnB4zB,EAASz5B,OAMX,OALAm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAElD+vE,EAAS7xB,YAAc3qD,EAAA2F,KAAKc,KACrBpJ,EAAOkiC,oBAqBhB,MAnBA3T,EAAO4wD,EAAS1uB,kBACdhzB,EAAS,GACT0hD,EAAS92E,QAAQW,UAAS,KAI5BwlB,EAAO2wD,EAAS1uB,kBACdhzB,EAAS,GACT96B,EAAA2F,KAAKQ,IAAG,KAIV2lB,EAAO0wD,EAAS1uB,kBACdhzB,EAAS,GACT0hD,EAAS92E,QAAQW,UAAS,KAI5Bm2E,EAAS7xB,YAAc3qD,EAAA2F,KAAKc,KACtB,IAAI6E,MAAM,mBAMlB,IAAK,aACH,OAAM4J,GAAyC,GAAxBA,EAAc7T,OAQd,GAAnBy5B,EAASz5B,QACXm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAElD+vE,EAAS7xB,YAAcz1C,EAAc,GAC9B7X,EAAOkiC,sBAEhB3T,EAAO4wD,EAASjvB,4BACdzyB,EAAS,GACT5lB,EAAc,GAAE,GAGlBsnE,EAAS7xB,YAAcz1C,EAAc,GACjCsnE,EAAS7xB,YAAY1iC,MAAQ/S,EAAc,GAAG+S,MAChDu0D,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAENjM,EAAOkiC,qBAIT3T,IA9BD1W,GAAiBA,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IAChFsnE,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAgBA,EAAc7T,OAAOoL,SAAS,IAAM,KAEtEpP,EAAOkiC,qBA2BlB,IAAK,SACH,GAAIzE,EAASz5B,OAAS,GAAKy5B,EAASz5B,OAAS,EAqB3C,OApBI6T,IACEA,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,GAAGqyC,iBACtC,GAAxBryC,EAAc7T,QAChBm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,MAIvDquB,EAASz5B,OAAS,EACpBm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeoyD,wCACf9/C,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAEzCquB,EAASz5B,OAAS,GAC3Bm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAG7CpP,EAAOkiC,oBAEhB,GAAIrqB,EAAe,CAEjB,GADIA,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,GAAGqyC,iBACtC,GAAxBryC,EAAc7T,OAKhB,OAJAm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,KAEhDpP,EAAOkiC,oBAEhB3T,EAAO4wD,EAAS1uB,kBAAkBhzB,EAAS,GAAI5lB,EAAc,GAAE,UAE/D0W,EAAO4wD,EAASjvB,4BAA4BzyB,EAAS,GAAI96B,EAAA2F,KAAKW,KAAI,GAGhEuF,EAAO2wE,EAAS7xB,YAIpB,GAHA6xB,EAAS7xB,YAAc9+C,EAAK07C,gBAGxBi1B,EAAS92E,QAAQmkD,SACnB,OAAIqK,GAAkBl0D,EAAA2F,KAAKc,MACzB+1E,EAAS7xB,YAAc3qD,EAAA2F,KAAKc,KACrBpJ,EAAO+gC,aAETxS,EAGT,IAAIoxD,EAAQrpB,EAAa6oB,EAA6B,GAAnB1hD,EAASz5B,OAAcy5B,EAAS,GAAK,KAAMpf,GAI9E,GAFA8gE,EAAS7xB,YAAc9+C,EAAK07C,gBAExB2M,GAAkBl0D,EAAA2F,KAAKc,KAAM,CAC/B,OAAQ+1E,EAAS7xB,YAAYpjD,MAC3B,QACEy9B,EAAM3nC,EAAO2gC,SACX3gC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQC,OACzBkD,GAEFoxD,GAEF,MAEF,OACA,OACEh4C,EAAM3nC,EAAO2gC,SACX3gC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQE,OACzBiD,GAEFoxD,GAEF,MAEF,OACA,OACEh4C,EAAM3nC,EAAO2gC,SACX3gC,EAAOm9B,YACLgiD,EAAS92E,QAAQqmD,SACb7rD,EAAAuoB,QAAQE,OACRzoB,EAAAuoB,QAAQC,OACZkD,GAEFoxD,GAEF,MAGF,QACEh4C,EAAM3nC,EAAO2gC,SACX3gC,EAAOs9B,aAAaz6B,EAAAqlB,SAASG,MAC3BkG,EACAvuB,EAAO+8B,UAAU,IAEnB4iD,GAEF,MAEF,QACEh4C,EAAM3nC,EAAO2gC,SACX3gC,EAAOs9B,aAAaz6B,EAAAqlB,SAASI,MAC3BiG,EACAvuB,EAAOi9B,UAAU,IAEnB0iD,GAEF,MAEF,QACER,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAMg4C,EAIVR,EAAS7xB,YAAc3qD,EAAA2F,KAAKc,UAE5B,OAAQ+1E,EAAS7xB,YAAYpjD,MAC3B,OACA,OACA,OACA,OACA,QACM2O,EAAOsmE,EAASv6D,gBAAgB/L,KAChC48C,EAAY0pB,EAASv6D,gBAAgB3D,oBACvCk+D,EAAS7xB,aACRz0C,EAAKuO,YAAYmH,EAAM4wD,EAAS7xB,cAEnC3lB,EAAM3nC,EAAO2gC,SACX3gC,EAAO89B,eAAe23B,EAAU94C,MAAO4R,GACvCvuB,EAAO49B,eAAe63B,EAAU94C,MAAO9Z,EAAA4d,WAAWC,KAClDi/D,GAEF,MAEF,OACA,OACA,QACMlqB,EAAY0pB,EAASv6D,gBAAgB3D,oBAAoBte,EAAA2F,KAAKG,KAAK,GACvEk/B,EAAM3nC,EAAO2gC,SACX3gC,EAAO89B,eAAe23B,EAAU94C,MAAO4R,GACvCvuB,EAAO49B,eAAe63B,EAAU94C,MAAO9Z,EAAA4d,WAAWC,KAClDi/D,GAEF,MAEF,OACA,OACMlqB,EAAY0pB,EAASv6D,gBAAgB3D,oBAAoBte,EAAA2F,KAAKI,KAAK,GACvEi/B,EAAM3nC,EAAO2gC,SACX3gC,EAAOm9B,YAAYt6B,EAAAuoB,QAAQE,OACzBtrB,EAAO89B,eAAe23B,EAAU94C,MAAO4R,IAEzCoxD,EACA3/E,EAAO49B,eAAe63B,EAAU94C,MAAO9Z,EAAA4d,WAAWE,MAEpD,MAEF,OACA,OACM80C,EAAY0pB,EAASv6D,gBAAgB3D,oBAAoBk+D,EAAS92E,QAAQW,WAAW,GACzF2+B,EAAM3nC,EAAO2gC,SACX3gC,EAAOm9B,YACLgiD,EAAS92E,QAAQqmD,SACb7rD,EAAAuoB,QAAQE,OACRzoB,EAAAuoB,QAAQC,OACZrrB,EAAO89B,eAAe23B,EAAU94C,MAAO4R,IAEzCoxD,EACA3/E,EAAO49B,eAAe63B,EAAU94C,MAAOwiE,EAAS92E,QAAQqpD,iBAE1D,MAEF,QACM+D,EAAY0pB,EAASv6D,gBAAgB3D,oBAAoBte,EAAA2F,KAAKY,KAAK,GACvEy+B,EAAM3nC,EAAO2gC,SACX3gC,EAAOs9B,aAAaz6B,EAAAqlB,SAASG,MAC3BroB,EAAO89B,eAAe23B,EAAU94C,MAAO4R,GACvCvuB,EAAO+8B,UAAU,IAEnB4iD,EACA3/E,EAAO49B,eAAe63B,EAAU94C,MAAO9Z,EAAA4d,WAAWG,MAEpD,MAEF,QACM60C,EAAY0pB,EAASv6D,gBAAgB3D,oBAAoBte,EAAA2F,KAAKa,KAAK,GACvEw+B,EAAM3nC,EAAO2gC,SACX3gC,EAAOs9B,aAAaz6B,EAAAqlB,SAASI,MAC3BtoB,EAAO89B,eAAe23B,EAAU94C,MAAO4R,GACvCvuB,EAAOi9B,UAAU,IAEnB0iD,EACA3/E,EAAO49B,eAAe63B,EAAU94C,MAAO9Z,EAAA4d,WAAWI,MAEpD,MAEF,QACEs+D,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAEb07B,EAAMg4C,EAKZ,OAAOh4C,EAET,IAAK,YAOH,OANI9vB,GACFsnE,EAASrzE,MACPpJ,EAAAqJ,eAAesxD,sBACfh/C,EAAWpS,MAAO3J,EAAUuH,cAGT,GAAnB4zB,EAASz5B,QACXm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAE3CpP,EAAOkiC,uBAEZrpB,EAAOsmE,EAASv6D,gBAAgB/L,MAC/BjP,IAAG,MACR+9B,EAAMw3C,EAASjvB,4BAA4BzyB,EAAS,GAAIo5B,EAAc,GACtEh+C,EAAKsM,MAAK,MACHwiB,GAET,IAAK,gBACH,GAAIlK,EAASz5B,OAAS,EAcpB,OAbI6T,IACEA,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IACnC,GAAxBA,EAAc7T,QAChBm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,MAI3D+vE,EAASrzE,MACPpJ,EAAAqJ,eAAeoyD,wCACf9/C,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAE3CpP,EAAOkiC,oBAEhB,IAAIhrB,OAAU,EACd,GAAIW,EAAe,CACjB,GAA4B,GAAxBA,EAAc7T,OAMhB,OALI6T,EAAc7T,SAAQm7E,EAAS7xB,YAAcz1C,EAAc,IAC/DsnE,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,KAEhDpP,EAAOkiC,oBAEhBhrB,EAAaW,EAAc,QAE3BX,EAAa2/C,EAGf,GADAtoC,EAAO4wD,EAASjvB,4BAA4BzyB,EAAS,GAAI96B,EAAA2F,KAAKQ,IAAG,GACpC,GAAzBq2E,EAAS7xB,YAAYpjD,KAKvB,OAJAi1E,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACf2qB,EAAS,GAAGxxB,OAEPjM,EAAOkiC,oBAOhB,IALA,IAAI69B,EAActiC,EAASz5B,OAAS,EAChC47E,EAAe,IAAIt2E,MAAqBy2D,GACxC8f,EAAiB,IAAIv2E,MAAcy2D,EAAc,GACjDhD,EAAmB7lD,EAAWsJ,eAC9Bs/D,EAAmB,IAAIx2E,MAAkBy2D,GACpCr/D,EAAI,EAAGA,EAAIq/D,IAAer/D,EAAG,CACpCk/E,EAAal/E,GAAKy+E,EAASjvB,4BAA4BzyB,EAAS,EAAI/8B,GAAIiC,EAAA2F,KAAKG,IAAG,GAChF,IAAIs3E,EAAcZ,EAAS7xB,YAC3BuyB,EAAen/E,GAAKq/E,EAAYj+D,oBAChCg+D,EAAiBp/E,GAAKq/E,EAAYv/D,eAEpCq/D,EAAe9f,GAAe7oD,EAAW4K,oBACzC,IAAIkgB,EAAW69C,EAAepvE,KAAK,IAC/BqyB,EAAU9iC,EAAOm8B,2BAA2B4gC,EAAkB+iB,GAKlE,OAJKh9C,IAASA,EAAU9iC,EAAO67B,gBAAgBmG,EAAU+6B,EAAkB+iB,IAC3EX,EAAS7xB,YAAcp2C,EAGhBlX,EAAO+hC,mBAAmBxT,EAAMqxD,EAAc59C,GAKvD,IAAK,KAOH,OANInqB,GACFsnE,EAASrzE,MACPpJ,EAAAqJ,eAAesxD,sBACfh/C,EAAWpS,MAAO3J,EAAUuH,cAGT,GAAnB4zB,EAASz5B,QACXm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAElD+vE,EAAS7xB,YAAc3qD,EAAA2F,KAAKC,GACrBvI,EAAOkiC,qBAETi9C,EAAS1uB,kBACdhzB,EAAS,GACT96B,EAAA2F,KAAKC,GAAE,KAKX,IAAK,MAOH,OANIsP,GACFsnE,EAASrzE,MACPpJ,EAAAqJ,eAAesxD,sBACfh/C,EAAWpS,MAAO3J,EAAUuH,cAGT,GAAnB4zB,EAASz5B,QACXm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAElD+vE,EAAS7xB,YAAc3qD,EAAA2F,KAAKE,IACrBxI,EAAOkiC,qBAETi9C,EAAS1uB,kBACdhzB,EAAS,GACT96B,EAAA2F,KAAKE,IAAG,KAKZ,IAAK,MAOH,OANIqP,GACFsnE,EAASrzE,MACPpJ,EAAAqJ,eAAesxD,sBACfh/C,EAAWpS,MAAO3J,EAAUuH,cAGT,GAAnB4zB,EAASz5B,QACXm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAElD+vE,EAAS7xB,YAAc3qD,EAAA2F,KAAKG,IACrBzI,EAAOkiC,qBAETi9C,EAAS1uB,kBACdhzB,EAAS,GACT96B,EAAA2F,KAAKG,IAAG,KAKZ,IAAK,MAOH,OANIoP,GACFsnE,EAASrzE,MACPpJ,EAAAqJ,eAAesxD,sBACfh/C,EAAWpS,MAAO3J,EAAUuH,cAGT,GAAnB4zB,EAASz5B,QACXm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAElD+vE,EAAS7xB,YAAc3qD,EAAA2F,KAAKI,IACrB1I,EAAOkiC,qBAETi9C,EAAS1uB,kBACdhzB,EAAS,GACT96B,EAAA2F,KAAKI,IAAG,KAKZ,IAAK,QAOH,OANImP,GACFsnE,EAASrzE,MACPpJ,EAAAqJ,eAAesxD,sBACfh/C,EAAWpS,MAAO3J,EAAUuH,cAGT,GAAnB4zB,EAASz5B,QACXm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAElD+vE,EAAS7xB,YAAc6xB,EAAS92E,QAAQqmD,SACpC/rD,EAAA2F,KAAK6hD,QACLxnD,EAAA2F,KAAK8hD,QACFpqD,EAAOkiC,qBAETi9C,EAAS1uB,kBACdhzB,EAAS,GACT0hD,EAAS92E,QAAQqmD,SACb/rD,EAAA2F,KAAK6hD,QACLxnD,EAAA2F,KAAK8hD,QAAO,KAKpB,IAAK,KAOH,OANIvyC,GACFsnE,EAASrzE,MACPpJ,EAAAqJ,eAAesxD,sBACfh/C,EAAWpS,MAAO3J,EAAUuH,cAGT,GAAnB4zB,EAASz5B,QACXm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAElD+vE,EAAS7xB,YAAc3qD,EAAA2F,KAAKM,GACrB5I,EAAOkiC,qBAETi9C,EAAS1uB,kBACdhzB,EAAS,GACT96B,EAAA2F,KAAKM,GAAE,KAKX,IAAK,MAOH,OANIiP,GACFsnE,EAASrzE,MACPpJ,EAAAqJ,eAAesxD,sBACfh/C,EAAWpS,MAAO3J,EAAUuH,cAGT,GAAnB4zB,EAASz5B,QACXm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAElD+vE,EAAS7xB,YAAc3qD,EAAA2F,KAAKO,IACrB7I,EAAOkiC,qBAETi9C,EAAS1uB,kBACdhzB,EAAS,GACT96B,EAAA2F,KAAKO,IAAG,KAKZ,IAAK,MAOH,OANIgP,GACFsnE,EAASrzE,MACPpJ,EAAAqJ,eAAesxD,sBACfh/C,EAAWpS,MAAO3J,EAAUuH,cAGT,GAAnB4zB,EAASz5B,QACXm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAElD+vE,EAAS7xB,YAAc3qD,EAAA2F,KAAKQ,IACrB9I,EAAOkiC,qBAETi9C,EAAS1uB,kBACdhzB,EAAS,GACT96B,EAAA2F,KAAKQ,IAAG,KAKZ,IAAK,MAOH,OANI+O,GACFsnE,EAASrzE,MACPpJ,EAAAqJ,eAAesxD,sBACfh/C,EAAWpS,MAAO3J,EAAUuH,cAGT,GAAnB4zB,EAASz5B,QACXm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAElD+vE,EAAS7xB,YAAc3qD,EAAA2F,KAAKS,IACrB/I,EAAOkiC,qBAETi9C,EAAS1uB,kBACdhzB,EAAS,GACT96B,EAAA2F,KAAKS,IAAG,KAKZ,IAAK,QAOH,OANI8O,GACFsnE,EAASrzE,MACPpJ,EAAAqJ,eAAesxD,sBACfh/C,EAAWpS,MAAO3J,EAAUuH,cAGT,GAAnB4zB,EAASz5B,QACXm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAElD+vE,EAAS7xB,YAAc6xB,EAAS92E,QAAQW,UACjChJ,EAAOkiC,qBAETi9C,EAAS1uB,kBACdhzB,EAAS,GACT0hD,EAAS92E,QAAQW,UAAS,KAK9B,IAAK,OAOH,OANI6O,GACFsnE,EAASrzE,MACPpJ,EAAAqJ,eAAesxD,sBACfh/C,EAAWpS,MAAO3J,EAAUuH,cAGT,GAAnB4zB,EAASz5B,QACXm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAElD+vE,EAAS7xB,YAAc3qD,EAAA2F,KAAKW,KACrBjJ,EAAOkiC,qBAETi9C,EAAS1uB,kBACdhzB,EAAS,GACT96B,EAAA2F,KAAKW,KAAI,KAKb,IAAK,MAOH,OANI4O,GACFsnE,EAASrzE,MACPpJ,EAAAqJ,eAAesxD,sBACfh/C,EAAWpS,MAAO3J,EAAUuH,cAGT,GAAnB4zB,EAASz5B,QACXm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAElD+vE,EAAS7xB,YAAc3qD,EAAA2F,KAAKY,IACrBlJ,EAAOkiC,qBAETi9C,EAAS1uB,kBACdhzB,EAAS,GACT96B,EAAA2F,KAAKY,IAAG,KAKZ,IAAK,MAOH,OANI2O,GACFsnE,EAASrzE,MACPpJ,EAAAqJ,eAAesxD,sBACfh/C,EAAWpS,MAAO3J,EAAUuH,cAGT,GAAnB4zB,EAASz5B,QACXm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAElD+vE,EAAS7xB,YAAc3qD,EAAA2F,KAAKa,IACrBnJ,EAAOkiC,qBAETi9C,EAAS1uB,kBACdhzB,EAAS,GACT96B,EAAA2F,KAAKa,IAAG,KAMd,IAAIke,EAkBN,SACE83D,EACA78E,EACAm7B,EACAo5B,EACAx4C,GAEA,OAAQ/b,EAAUuH,cAOhB,IAAK,UAAW,OAAOm2E,EAAS,MAAOb,EAAUx8E,EAAA2F,KAAKG,IAAKg1B,EAAU96B,EAAA2F,KAAKG,IAAK4V,GAC/E,IAAK,UAAW,OAAO2hE,EAAS,MAAOb,EAAUx8E,EAAA2F,KAAKI,IAAK+0B,EAAU96B,EAAA2F,KAAKI,IAAK2V,GAE/E,IAAK,UAAW,OAAO2hE,EAAS,MAAOb,EAAUx8E,EAAA2F,KAAKG,IAAKg1B,EAAU96B,EAAA2F,KAAKG,IAAK4V,GAC/E,IAAK,UAAW,OAAO2hE,EAAS,MAAOb,EAAUx8E,EAAA2F,KAAKI,IAAK+0B,EAAU96B,EAAA2F,KAAKI,IAAK2V,GAE/E,IAAK,aAAc,OAAO2hE,EAAS,SAAUb,EAAUx8E,EAAA2F,KAAKG,IAAKg1B,EAAU96B,EAAA2F,KAAKG,IAAK4V,GACrF,IAAK,aAAc,OAAO2hE,EAAS,SAAUb,EAAUx8E,EAAA2F,KAAKI,IAAK+0B,EAAU96B,EAAA2F,KAAKI,IAAK2V,GAErF,IAAK,WAAY,OAAO2hE,EAAS,OAAQb,EAAUx8E,EAAA2F,KAAKG,IAAKg1B,EAAU96B,EAAA2F,KAAKG,IAAK4V,GACjF,IAAK,WAAY,OAAO2hE,EAAS,OAAQb,EAAUx8E,EAAA2F,KAAKI,IAAK+0B,EAAU96B,EAAA2F,KAAKI,IAAK2V,GAEjF,IAAK,WAAY,OAAO2hE,EAAS,OAAQb,EAAUx8E,EAAA2F,KAAKG,IAAKg1B,EAAU96B,EAAA2F,KAAKG,IAAK4V,GACjF,IAAK,WAAY,OAAO2hE,EAAS,OAAQb,EAAUx8E,EAAA2F,KAAKI,IAAK+0B,EAAU96B,EAAA2F,KAAKI,IAAK2V,GAEjF,IAAK,UAAW,OAAO2hE,EAAS,MAAOb,EAAUx8E,EAAA2F,KAAKY,IAAKu0B,EAAU96B,EAAA2F,KAAKY,IAAKmV,GAC/E,IAAK,UAAW,OAAO2hE,EAAS,MAAOb,EAAUx8E,EAAA2F,KAAKa,IAAKs0B,EAAU96B,EAAA2F,KAAKa,IAAKkV,GAE/E,IAAK,UAAW,OAAO2hE,EAAS,MAAOb,EAAUx8E,EAAA2F,KAAKY,IAAKu0B,EAAU96B,EAAA2F,KAAKY,IAAKmV,GAC/E,IAAK,UAAW,OAAO2hE,EAAS,MAAOb,EAAUx8E,EAAA2F,KAAKa,IAAKs0B,EAAU96B,EAAA2F,KAAKa,IAAKkV,GAE/E,IAAK,UAAW,OAAO2hE,EAAS,MAAOb,EAAUx8E,EAAA2F,KAAKY,IAAKu0B,EAAU96B,EAAA2F,KAAKY,IAAKmV,GAC/E,IAAK,UAAW,OAAO2hE,EAAS,MAAOb,EAAUx8E,EAAA2F,KAAKa,IAAKs0B,EAAU96B,EAAA2F,KAAKa,IAAKkV,GAE/E,IAAK,WAAY,OAAO2hE,EAAS,OAAQb,EAAUx8E,EAAA2F,KAAKY,IAAKu0B,EAAU96B,EAAA2F,KAAKY,IAAKmV,GACjF,IAAK,WAAY,OAAO2hE,EAAS,OAAQb,EAAUx8E,EAAA2F,KAAKa,IAAKs0B,EAAU96B,EAAA2F,KAAKa,IAAKkV,GAEjF,IAAK,YAAa,OAAO2hE,EAAS,QAASb,EAAUx8E,EAAA2F,KAAKY,IAAKu0B,EAAU96B,EAAA2F,KAAKY,IAAKmV,GACnF,IAAK,YAAa,OAAO2hE,EAAS,QAASb,EAAUx8E,EAAA2F,KAAKa,IAAKs0B,EAAU96B,EAAA2F,KAAKa,IAAKkV,GAEnF,IAAK,eAAgB,OAAO2hE,EAAS,WAAYb,EAAUx8E,EAAA2F,KAAKY,IAAKu0B,EAAU96B,EAAA2F,KAAKY,IAAKmV,GACzF,IAAK,eAAgB,OAAO2hE,EAAS,WAAYb,EAAUx8E,EAAA2F,KAAKa,IAAKs0B,EAAU96B,EAAA2F,KAAKa,IAAKkV,GAEzF,IAAK,cAAe,OAAO2hE,EAAS,UAAWb,EAAUx8E,EAAA2F,KAAKY,IAAKu0B,EAAU96B,EAAA2F,KAAKY,IAAKmV,GACvF,IAAK,cAAe,OAAO2hE,EAAS,UAAWb,EAAUx8E,EAAA2F,KAAKa,IAAKs0B,EAAU96B,EAAA2F,KAAKa,IAAKkV,GAEvF,IAAK,sBAAuB,OAAO2hE,EAAS,cAAeb,EAAUx8E,EAAA2F,KAAKG,IAAKg1B,EAAU96B,EAAA2F,KAAKY,IAAKmV,GACnG,IAAK,sBAAuB,OAAO2hE,EAAS,cAAeb,EAAUx8E,EAAA2F,KAAKI,IAAK+0B,EAAU96B,EAAA2F,KAAKa,IAAKkV,GACnG,IAAK,sBAAuB,OAAO2hE,EAAS,cAAeb,EAAUx8E,EAAA2F,KAAKY,IAAKu0B,EAAU96B,EAAA2F,KAAKG,IAAK4V,GACnG,IAAK,sBAAuB,OAAO2hE,EAAS,cAAeb,EAAUx8E,EAAA2F,KAAKa,IAAKs0B,EAAU96B,EAAA2F,KAAKI,IAAK2V,GAEnG,IAAK,WAAY,OAAO2hE,EAAS,OAAQb,EAAUx8E,EAAA2F,KAAKY,IAAKu0B,EAAU96B,EAAA2F,KAAKY,IAAKmV,GACjF,IAAK,WAAY,OAAO2hE,EAAS,OAAQb,EAAUx8E,EAAA2F,KAAKa,IAAKs0B,EAAU96B,EAAA2F,KAAKa,IAAKkV,GAEjF,IAAK,YAAa,OAAO2hE,EAAS,QAASb,EAAUx8E,EAAA2F,KAAKY,IAAKu0B,EAAU96B,EAAA2F,KAAKY,IAAKmV,GACnF,IAAK,YAAa,OAAO2hE,EAAS,QAASb,EAAUx8E,EAAA2F,KAAKa,IAAKs0B,EAAU96B,EAAA2F,KAAKa,IAAKkV,GAEnF,IAAK,cAAe,OAAO2hE,EAAS,OAAQb,EAAUx8E,EAAA2F,KAAKC,GAAIk1B,EAAU96B,EAAA2F,KAAKG,IAAK4V,GACnF,IAAK,cAAe,OAAO2hE,EAAS,OAAQb,EAAUx8E,EAAA2F,KAAKM,GAAI60B,EAAU96B,EAAA2F,KAAKQ,IAAKuV,GACnF,IAAK,eAAgB,OAAO2hE,EAAS,OAAQb,EAAUx8E,EAAA2F,KAAKE,IAAKi1B,EAAU96B,EAAA2F,KAAKG,IAAK4V,GACrF,IAAK,eAAgB,OAAO2hE,EAAS,OAAQb,EAAUx8E,EAAA2F,KAAKO,IAAK40B,EAAU96B,EAAA2F,KAAKQ,IAAKuV,GACrF,IAAK,WAAY,OAAO2hE,EAAS,OAAQb,EAAUx8E,EAAA2F,KAAKG,IAAKg1B,EAAU96B,EAAA2F,KAAKG,IAAK4V,GACjF,IAAK,cAAe,OAAO2hE,EAAS,OAAQb,EAAUx8E,EAAA2F,KAAKC,GAAIk1B,EAAU96B,EAAA2F,KAAKI,IAAK2V,GACnF,IAAK,cAAe,OAAO2hE,EAAS,OAAQb,EAAUx8E,EAAA2F,KAAKM,GAAI60B,EAAU96B,EAAA2F,KAAKS,IAAKsV,GACnF,IAAK,eAAgB,OAAO2hE,EAAS,OAAQb,EAAUx8E,EAAA2F,KAAKE,IAAKi1B,EAAU96B,EAAA2F,KAAKI,IAAK2V,GACrF,IAAK,eAAgB,OAAO2hE,EAAS,OAAQb,EAAUx8E,EAAA2F,KAAKO,IAAK40B,EAAU96B,EAAA2F,KAAKS,IAAKsV,GACrF,IAAK,eAAgB,OAAO2hE,EAAS,OAAQb,EAAUx8E,EAAA2F,KAAKG,IAAKg1B,EAAU96B,EAAA2F,KAAKI,IAAK2V,GACrF,IAAK,eAAgB,OAAO2hE,EAAS,OAAQb,EAAUx8E,EAAA2F,KAAKQ,IAAK20B,EAAU96B,EAAA2F,KAAKS,IAAKsV,GACrF,IAAK,WAAY,OAAO2hE,EAAS,OAAQb,EAAUx8E,EAAA2F,KAAKI,IAAK+0B,EAAU96B,EAAA2F,KAAKI,IAAK2V,GACjF,IAAK,WAAY,OAAO2hE,EAAS,OAAQb,EAAUx8E,EAAA2F,KAAKY,IAAKu0B,EAAU96B,EAAA2F,KAAKY,IAAKmV,GACjF,IAAK,WAAY,OAAO2hE,EAAS,OAAQb,EAAUx8E,EAAA2F,KAAKa,IAAKs0B,EAAU96B,EAAA2F,KAAKa,IAAKkV,GAEjF,IAAK,aAAc,OAAO2hE,EAAS,QAASb,EAAUx8E,EAAA2F,KAAKC,GAAIk1B,EAAU96B,EAAA2F,KAAKG,IAAK4V,GACnF,IAAK,cAAe,OAAO2hE,EAAS,QAASb,EAAUx8E,EAAA2F,KAAKE,IAAKi1B,EAAU96B,EAAA2F,KAAKG,IAAK4V,GACrF,IAAK,YAAa,OAAO2hE,EAAS,QAASb,EAAUx8E,EAAA2F,KAAKG,IAAKg1B,EAAU96B,EAAA2F,KAAKG,IAAK4V,GACnF,IAAK,aAAc,OAAO2hE,EAAS,QAASb,EAAUx8E,EAAA2F,KAAKC,GAAIk1B,EAAU96B,EAAA2F,KAAKI,IAAK2V,GACnF,IAAK,cAAe,OAAO2hE,EAAS,QAASb,EAAUx8E,EAAA2F,KAAKE,IAAKi1B,EAAU96B,EAAA2F,KAAKI,IAAK2V,GACrF,IAAK,cAAe,OAAO2hE,EAAS,QAASb,EAAUx8E,EAAA2F,KAAKG,IAAKg1B,EAAU96B,EAAA2F,KAAKI,IAAK2V,GACrF,IAAK,YAAa,OAAO2hE,EAAS,QAASb,EAAUx8E,EAAA2F,KAAKI,IAAK+0B,EAAU96B,EAAA2F,KAAKI,IAAK2V,GACnF,IAAK,YAAa,OAAO2hE,EAAS,QAASb,EAAUx8E,EAAA2F,KAAKY,IAAKu0B,EAAU96B,EAAA2F,KAAKY,IAAKmV,GACnF,IAAK,YAAa,OAAO2hE,EAAS,QAASb,EAAUx8E,EAAA2F,KAAKa,IAAKs0B,EAAU96B,EAAA2F,KAAKa,IAAKkV,GAErF,OAAO,EAxGI4hE,CAAad,EAAU78E,EAAWm7B,EAAUo5B,EAAgBx4C,GACvE,OAAIgJ,GACExP,GAAiBA,EAAc7T,QACjCm7E,EAASrzE,MACPpJ,EAAAqJ,eAAesxD,sBACfh/C,EAAWpS,MAAO3J,EAAUuH,cAGzBwd,IAET83D,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfuL,EAAWpS,OAENjM,EAAOkiC,qBA8FhB,SAAA89C,EACE/+E,EACAk+E,EACAe,EACAziD,EACA0iD,EACA9hE,GAEA,IAAI/b,EAAYyB,OAAOo7E,EAAS3jE,QAAQxU,eAAezF,IAAIN,IAE3D,OADA8C,OAAOzB,EAAU4H,MAAQsmC,EAAAlqC,YAAY0U,oBAC9B+iD,EAAYohB,EAA6B78E,GAAa49E,GAAgBziD,EAAU0iD,EAAW9hE,GAIpG,SAAA+gE,EACED,EACAtnE,EACA4lB,EACApf,GAEA,GAAuB,GAAnBof,EAASz5B,OACX,OAAK6T,GAAyC,GAAxBA,EAAc7T,OAO7B6T,EAAc,IANnBsnE,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAgBA,EAAc7T,OAAOoL,SAAS,IAAM,KAEtE,MAIX,GAAuB,GAAnBquB,EAASz5B,OAAa,CACxB,GAAI6T,EACF,GAA4B,GAAxBA,EAAc7T,OAChBm7E,EAAS1uB,kBAAkBhzB,EAAS,GAAI5lB,EAAc,GAAE,SACnD,CACL,GAAIA,EAAc7T,OAKhB,OAJAm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,KAEhD,KAET+vE,EAASjvB,4BAA4BzyB,EAAS,GAAI96B,EAAA2F,KAAKG,IAAG,QAG5D02E,EAASjvB,4BAA4BzyB,EAAS,GAAI96B,EAAA2F,KAAKG,IAAG,GAE5D,OAAO02E,EAAS7xB,YAYlB,OAVIz1C,GAAiBA,EAAc7T,OAAS,GAC1Cm7E,EAASrzE,MACPpJ,EAAAqJ,eAAeyM,oCACf6F,EAAWpS,MAAO,IAAK4L,EAAc7T,OAAOoL,SAAS,KAGzD+vE,EAASrzE,MACPpJ,EAAAqJ,eAAeqH,+BACfiL,EAAWpS,MAAO,IAAKwxB,EAASz5B,OAAOoL,SAAS,KAE3C,KAIT,SAAAmwE,EAAgCJ,EAAoBjmE,GAClD,IAAImO,EACA1lB,EA6BJ,OA5BIw9E,EAAS92E,QAAQqmD,UACnBrnC,EAAO83D,EAAShnB,qBAAqBj/C,EAAYvW,EAAA2F,KAAK+hD,QAAO,MAE3DxnD,EAAA0kB,gBAAgBF,IAASxkB,EAAA2kB,aAAa6C,OACtCxnB,EAAA6oB,kBAAkBrE,IAASxkB,EAAA4d,WAAWE,KACR,GAA9B9d,EAAA8nC,qBAAqBtjB,KACpB1lB,EAAQkB,EAAA8oB,oBAAoBtE,IAAS,KAEtC83D,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfoG,EAAWjN,OAEbtK,GAAS,KAGX0lB,EAAO83D,EAAShnB,qBAAqBj/C,EAAYvW,EAAA2F,KAAKgiD,QAAO,MAE3DznD,EAAA0kB,gBAAgBF,IAASxkB,EAAA2kB,aAAa6C,OACtCxnB,EAAA6oB,kBAAkBrE,IAASxkB,EAAA4d,WAAWC,MACrC/e,EAAQkB,EAAAynB,iBAAiBjD,IAAS,KAEnC83D,EAASrzE,MACPpJ,EAAAqJ,eAAe+G,wBACfoG,EAAWjN,OAEbtK,GAAS,IAGNA,EAlpFT5B,EAAAg+D,cAqpFA,IAAMqiB,EAAuB,kBAG7BrgF,EAAAwkE,gBAAA,SACE4a,EACAthE,EACAQ,GAEA,IAAI7C,EAAU2jE,EAAS3jE,QACvBzX,OAAO8Z,EAAcrC,SAAWA,GAChC,IAAIxb,EAASm/E,EAASn/E,OAClBqI,EAAU82E,EAAS92E,QAEnBg4E,EAAoB7kE,EAAQxU,eAAezF,IAAI6+E,GACnD,IAAKC,EASH,OARA7kE,EAAQ1P,MACNpJ,EAAAqJ,eAAemB,mBACfmR,EAAWpS,MAAOm0E,GAEpB5kE,EAAQiU,KACN/sB,EAAAqJ,eAAeu0E,iGACfjiE,EAAWpS,OAENjM,EAAOkiC,oBAEhB,GAAIm+C,EAAkBn2E,MAAQsmC,EAAAlqC,YAAY0U,mBAKxC,OAJAQ,EAAQ1P,MACNpJ,EAAAqJ,eAAesP,uGACfgD,EAAWpS,MAAOo0E,EAAkBx2E,cAE/B7J,EAAOkiC,oBAGhB,IAAIq+C,EAAuCF,EAAmBjyE,UAC9D,OAAMmyE,GAAoBpB,EAAS9tB,gBAAgBkvB,IAEnDpB,EAAS7xB,YAAczvC,EAAcrP,KAC9BxO,EAAO2hC,WACZ4+C,EAAiB12E,cACfxB,EAAQqmD,SACJ1uD,EAAO28B,UAAU9e,EAAc8E,qBAC/B3iB,EAAOu8B,UAAU1e,EAAc8E,sBAErCta,EAAQqpD,iBAToE1xD,EAAOkiC,qBAavF,IAAMs+C,EAAoB,QAG1B,SAAAlqB,EACE6oB,EACA7wD,EACAjQ,GAEA,IAAI7C,EAAU2jE,EAAS3jE,QACnBxb,EAASm/E,EAASn/E,OAElBiiE,EAAazmD,EAAQtU,YAAY3F,IAAI,UACzC,IAAK0gE,EAAY,OAAOjiE,EAAOkiC,oBAE/B,IAAIu+C,EAAiBjlE,EAAQxU,eAAezF,IAAIi/E,GAChD,IAAKC,GAAkBA,EAAev2E,MAAQsmC,EAAAlqC,YAAY0U,mBAAoB,OAAOhb,EAAOkiC,oBAE5F,IAAIw+C,EAAoCD,EAAgBryE,UACxD,IAAMsyE,IAAiBvB,EAAS9tB,gBAAgBqvB,GAAiB,OAAO1gF,EAAOkiC,oBAE/E,IAAIy+C,EAAwB,MAAXryD,EACb6wD,EAAS1uB,kBAAkBniC,EAAS2zC,EAAU,KAC9CA,EAAWjX,aAAahrD,GAExB4gF,EAAczB,EAASxd,oBAAoBtjD,EAAWpS,MAAMjE,OAAOF,gBAGvE,OADAq3E,EAAS7xB,YAAc3qD,EAAA2F,KAAKc,KACrBpJ,EAAO8/B,YAAY,MACxB9/B,EAAO6hC,iBACL6+C,EAAc72E,cACZ82E,EACAC,EACA5gF,EAAOu8B,UAAUle,EAAWpS,MAAM0V,MAClC3hB,EAAOu8B,UAAUle,EAAWpS,MAAM2V,SAEpC/e,EAAA4d,WAAWwf,MAEbjgC,EAAOkiC,sBAlCXniC,EAAAu2D,8BC7vFAt2D,EAAAD,QAAAO,oBCAA,SAAAyvD,GAEA,MAAA8wB,EAAA9wB,EAAA+wB,UAAAtgF,EAAA,IAEA,QAAAyB,KAAA4+E,GACA5+E,EAAAs1C,WAAA,cAAAt1C,EAAAs1C,WAAA,gBACAwY,EAAA9tD,GAAA4+E,EAAA5+E,IAIA8tD,EAAAz0B,gBAAA,SAAA1Q,GACA,OAAAA,EACAi2D,EAAAE,QAAAn2D,GADA,GAIAmlC,EAAAp0B,YAAA,SAAA0C,GACAA,GAAAwiD,EAAAG,MAAA3iD,IAGA0xB,EAAAkxB,YAAA,SAAAC,EAAAC,EAAAh/E,GACA,OAAA0+E,EAAAO,SAAAF,EAAAC,EAAAh/E,IAGA4tD,EAAAtgB,MAAA,SAAApR,EAAAsR,GACAkxC,EAAAQ,OAAAhjD,GAAAsR,GAGAogB,EAAAhoB,KAAA,SAAA1J,GACA,OAAAwiD,EAAAQ,OAAAhjD,IAKA,MAAAtD,EAAAv6B,EAAA,GAAAu6B,OAEAA,EAAAz4B,UAAA4lC,OAAA,WACA,IAAAo5C,EAAAT,EAAAU,MACA55C,EAAA,GAIA,OAHAk5C,EAAAU,MAAA,SAAAC,GAAgC75C,GAAA65C,EAAA,MAChCC,qBAAAphF,KAAA2e,KACA6hE,EAAAU,MAAAD,EACA35C,GAGA5M,EAAAz4B,UAAA6lC,QAAA,WACA,IAAAm5C,EAAAT,EAAAU,MACA55C,EAAA,GAIA,OAHAk5C,EAAAU,MAAA,SAAAC,GAAgC75C,GAAA65C,EAAA,MAChCE,0BAAArhF,KAAA2e,KACA6hE,EAAAU,MAAAD,EACA35C,oCClDA3nC,EAAAD,QAAA4hF,KACA,IAAAC,EAAA,IAAA95C,WAAA,GACA+5C,EAAA,EAEAF,EAAA,yBAAA/2D,GACA,KAAAA,KAAA,YAEA,GAAAi3D,EAAAj3D,EAAAg3D,EAAA59E,OAAA,CACA,IAAA89E,EAAAF,GACAA,EAAA,IAAA95C,WAAAsuC,KAAAnoB,IAAA,MAAA2zB,EAAA59E,OAAA4mB,EAAA,EAAAg3D,EAAA59E,UACA4F,IAAAk4E,GAGA,IAAAzjD,EAAAwjD,EAIA,OAHA,GAAAA,GAAAj3D,KACAi3D,EAAA,KAAAA,IAEAxjD,GAGAsjD,EAAA,qBAAAtjD,KAIAsjD,EAAA,qBAAAT,EAAAC,EAAAv2D,GACAg3D,EAAAG,WAAAb,EAAAC,IAAAv2D,IAGA+2D,EAAA,eAAAtjD,EAAA18B,EAAAk5B,GACA+mD,EAAAvjD,GAAA,EAAAxD,IAAAl5B,GAGAggF,EAAA,cAAAtjD,EAAAxD,GACA,OAAA+mD,EAAAvjD,GAAA,EAAAxD,sBCjCA76B,EAAAD,QAAA4hF,KACAA,EAAA,OAAAvL,yBCDA,SAAArmB,GAEA,IAAA4xB,EAAA,oBAAA3iC,qBAAA,IAAA+Q,MAAA3vD,KA2IA,SAAA4hF,IACA/zE,MAAAg0E,kBACAh0E,MAAAg0E,kBAAA5hF,KAAA2hF,GAEA3hF,KAAA6hF,MAAA7hF,KAAAY,KAAA,KAAAZ,KAAAiuB,QAAA,UAAArgB,OAAAi0E,MAWA,SAAAC,EAAA7zD,GACAjuB,KAAAiuB,WAAA,mBACArgB,MAAAg0E,kBACAh0E,MAAAg0E,kBAAA5hF,KAAA8hF,GAEA9hF,KAAA6hF,MAAA7hF,KAAAY,KAAA,KAAAZ,KAAAiuB,QAAA,UAAArgB,OAAAi0E,MA7JA9gF,OAAAghF,iBACAT,EAAA,YAAAhgF,GAA0C,OAAAA,GAAA,SAE1CmqB,WAAgBnqB,OAAA,IAAA0gF,UAAA,GAChBt2D,WAAgBpqB,MAAA,IAAA0gF,UAAA,KAGhBjhF,OAAAghF,iBACAT,EAAA,aAAAhgF,GAA4C,OAAAA,GAAA,SAE5CmqB,WAAgBnqB,OAAA,MAAA0gF,UAAA,GAChBt2D,WAAgBpqB,MAAA,MAAA0gF,UAAA,KAGhBjhF,OAAAghF,iBACAT,EAAA,IAAAA,EAAA,eAAAhgF,GAAmE,SAAAA,IAEnEmqB,WAAgBnqB,OAAA,WAAA0gF,UAAA,GAChBt2D,WAAgBpqB,MAAA,WAAA0gF,UAAA,KAGhBjhF,OAAAghF,iBACAT,EAAA,YAAAhgF,GAA0C,WAAAA,IAE1CmqB,WAAgBnqB,MAAA,EAAA0gF,UAAA,GAChBt2D,WAAgBpqB,MAAA,IAAA0gF,UAAA,KAGhBjhF,OAAAghF,iBACAT,EAAA,aAAAhgF,GAA4C,aAAAA,IAE5CmqB,WAAgBnqB,MAAA,EAAA0gF,UAAA,GAChBt2D,WAAgBpqB,MAAA,MAAA0gF,UAAA,KAGhBjhF,OAAAghF,iBACAT,EAAA,IAAAA,EAAA,eAAAhgF,GAAmE,OAAAA,IAAA,IAEnEmqB,WAAgBnqB,MAAA,EAAA0gF,UAAA,GAChBt2D,WAAgBpqB,MAAA,WAAA0gF,UAAA,KAGhBjhF,OAAAghF,iBACAT,EAAA,cAAAhgF,GAA8C,QAAAA,IAE9CmqB,WAAgBnqB,MAAA,EAAA0gF,UAAA,GAChBt2D,WAAgBpqB,MAAA,EAAA0gF,UAAA,KAGhBjhF,OAAAghF,iBACAT,EAAA,aAAAhgF,GAA4C,OAAAy0E,KAAA6H,OAAAt8E,KAE5CmqB,WAAgBnqB,MAAAy0E,KAAA6H,QAAA,eAAAoE,UAAA,GAChBt2D,WAAgBpqB,MAAAy0E,KAAA6H,OAAA,eAAAoE,UAAA,GAChBC,oBAAyB3gF,MAAAy0E,KAAA6H,OAAA,iBAAAoE,UAAA,GACzBzE,kBAAuBj8E,OAAA,SAAA0gF,UAAA,GACvBvE,kBAAuBn8E,MAAA,SAAA0gF,UAAA,GACvBE,SAAc5gF,MAAAy0E,KAAA6H,OAAA,cAAAoE,UAAA,KAGdjhF,OAAAghF,iBACAT,EAAA,aAAAhgF,GAA4C,OAAAA,IAE5CmqB,WAAgBnqB,OAAA,uBAAA0gF,UAAA,GAChBt2D,WAAgBpqB,MAAA,uBAAA0gF,UAAA,GAChBC,oBAAyB3gF,MAAA,wBAAA0gF,UAAA,GACzBzE,kBAAuBj8E,OAAA,iBAAA0gF,UAAA,GACvBvE,kBAAuBn8E,MAAA,iBAAA0gF,UAAA,GACvBE,SAAc5gF,MAAA,sBAAA0gF,UAAA,KAGdV,EAAA,IAAAvL,KAAAoM,MAEAb,EAAA,aAAAhgF,GACA,IAAAZ,EAAAq1E,KAAAoM,MAAA7gF,MACA,OAAAA,EAAA,GAAAZ,KAGA4gF,EAAA,gBAAAhgF,GAGA,kBADAA,GAAA,WADAA,OAAA,gBACAA,IAAA,eACAA,IAAA,oBAGAggF,EAAA,cAAAhgF,EAAAgpB,GAEA,OAAAhpB,IADAgpB,GAAA,IACAhpB,IAAA,GAAAgpB,GAGAg3D,EAAA,cAAAhgF,EAAAgpB,GAEA,OAAAhpB,KADAgpB,GAAA,IACAhpB,GAAA,GAAAgpB,GAGAg3D,EAAA,IAAAvL,KAAAqM,IAEAd,EAAA,IAAAvL,KAAAnoB,IAEA0zB,EAAA,IAAAvL,KAAAjvD,IAEAw6D,EAAA,KAAAvL,KAAAnsB,KAEA03B,EAAA,MAAAvL,KAAAsF,MAGAiG,EAAA,iBAAAhgF,GACA,WAAAy0E,KAAAqM,IAAA9gF,EAAAy0E,KAAAsM,MAAA/gF,IACA,EAAAy0E,KAAAuM,MAAA,GAAAhhF,GAEAy0E,KAAAuM,MAAAhhF,IAGAggF,EAAA,gBAAA/gD,EAAAC,EAAAT,GACA,OAAAA,EAAAQ,EAAAC,GAGA8gD,EAAA,KAAAvL,KAAAwM,KAEAjB,EAAA,MAAAvL,KAAAsM,MAEAf,EAAA,kBAAAH,EAAAqB,GACA,OAAAzM,KAAAqM,IAAAjB,GAAApL,KAAA0M,KAAAD,IAGAlB,EAAA,eAAAhgF,GACA,IAAA6hD,EAAA7hD,GAAA,WACA8hD,GAAA,SAAA9hD,IAAA,EAIA,OAFA6hD,GADA7hD,EAAA6hD,EAAAC,IACA,WACAA,GAAA,MAAA9hD,IAAA,KAIAggF,EAAA,iBAAAhgF,GACA,OAAAA,GAAA,QAAAA,GAAA,iBAAAA,GAUAqgF,EAAA1/E,UAAAlB,OAAAY,OAAAiM,MAAA3L,WACA0/E,EAAA1/E,UAAArB,KAAA,mBACA+gF,EAAA1/E,UAAAgsB,QAAA,cAEAqzD,EAAA,uBACA,UAAAK,GAWAG,EAAA7/E,UAAAlB,OAAAY,OAAAiM,MAAA3L,WACA6/E,EAAA7/E,UAAArB,KAAA,iBAEA0gF,EAAA,gBAAAoB,EAAAz0D,GACA,GAAAy0D,EAAA,OAAAA,EACA,UAAAZ,EAAA7zD,IAGAqzD,EAAA,oBAAAhgF,GACA,OAAAA,GAGAggF,EAAA,kBAAA9xC,EAAA0mC,GACA,SAAAG,SAAA7mC,OAAAmzC,IAGA1yC,OAAA,uBAAAD,GACA,OAAAC,OAAAmX,aAAA3M,MAAAxK,OAAAD,IAGAC,OAAA,wBAAAD,GACA,OAAAC,OAAA2yC,cAAAnoC,MAAAxK,OAAAD,IAGAsxC,EAAA,UAAAuB,OAAAC,UAEAxB,EAAA,iBAAA79E,GACA,uBAAAA,GAGA69E,EAAA,qBAAA79E,GACA,uBAAAA,GAAA,iBAAAA,GAGA69E,EAAA,kBAAA79E,GACA,uBAAAA,gBAAAwsC,QAGAqxC,EAAA,QAAAr4E,MAAA85E,QAEAzB,EAAA,mBAAAt6D,GACA,OAAAA,GAGAs6D,EAAA,cAAAH,EAAAqB,GACA,OAAArB,EAAAqB,GAGAlB,EAAA,eAAAH,EAAAqB,GACA,OAAAzM,KAAA6H,OAAAuD,EAAAqB,IAGAriF,EAAA,GAAAA,CAAAmhF,GACAnhF,EAAA,GAAAA,CAAAmhF,oGCnNAnhF,EAAA,IACAA,EAAA,IACAA,EAAA,IACAA,EAAA","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__22__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 28);\n","/**\r\n * AssemblyScript's intermediate representation describing a program's elements.\r\n * @module program\r\n *//***/\r\n\r\nimport {\r\n Options\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\r\n typesToString\r\n} from \"./types\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Source,\r\n Range,\r\n CommonTypeNode,\r\n TypeNode,\r\n TypeParameterNode,\r\n ParameterKind,\r\n SignatureNode,\r\n DecoratorNode,\r\n DecoratorKind,\r\n\r\n Expression,\r\n AssertionExpression,\r\n ElementAccessExpression,\r\n IdentifierExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n ParenthesizedExpression,\r\n PropertyAccessExpression,\r\n StringLiteralExpression,\r\n CallExpression,\r\n\r\n ClassDeclaration,\r\n DeclarationStatement,\r\n EnumDeclaration,\r\n EnumValueDeclaration,\r\n ExportMember,\r\n ExportStatement,\r\n FieldDeclaration,\r\n FunctionDeclaration,\r\n ImportDeclaration,\r\n ImportStatement,\r\n InterfaceDeclaration,\r\n MethodDeclaration,\r\n NamespaceDeclaration,\r\n TypeDeclaration,\r\n VariableDeclaration,\r\n VariableLikeDeclarationStatement,\r\n VariableStatement,\r\n\r\n decoratorNameToKind\r\n} from \"./ast\";\r\n\r\nimport {\r\n Module,\r\n NativeType,\r\n FunctionRef,\r\n ExpressionRef,\r\n ExpressionId,\r\n BinaryOp,\r\n UnaryOp,\r\n\r\n getExpressionId,\r\n getGetLocalIndex,\r\n isTeeLocal,\r\n getSetLocalValue,\r\n getBinaryOp,\r\n getConstValueI32,\r\n getBinaryLeft,\r\n getBinaryRight,\r\n getUnaryOp,\r\n getExpressionType,\r\n getLoadBytes,\r\n isLoadSigned,\r\n getIfTrue,\r\n getIfFalse,\r\n getSelectThen,\r\n getSelectElse,\r\n getCallTarget,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getBlockName,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getConstValueI64Low\r\n} from \"./module\";\r\n\r\nimport {\r\n CharCode\r\n} from \"./util\";\r\n\r\n/** 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/** Represents a yet unresolved import. */\r\nclass QueuedImport {\r\n localName: string;\r\n externalName: string;\r\n externalNameAlt: string;\r\n declaration: ImportDeclaration | null; // not set if a filespace\r\n}\r\n\r\n/** Represents a yet unresolved export. */\r\nclass QueuedExport {\r\n externalName: string;\r\n isReExport: bool;\r\n member: ExportMember;\r\n}\r\n\r\n/** Represents a type alias. */\r\nclass TypeAlias {\r\n typeParameters: TypeParameterNode[] | null;\r\n type: CommonTypeNode;\r\n}\r\n\r\n/** Represents the kind of an operator overload. */\r\nexport enum OperatorKind {\r\n INVALID,\r\n\r\n // indexed access\r\n INDEXED_GET, // a[]\r\n INDEXED_SET, // a[]=b\r\n UNCHECKED_INDEXED_GET, // unchecked(a[])\r\n UNCHECKED_INDEXED_SET, // unchecked(a[]=b)\r\n\r\n // binary\r\n ADD, // a + b\r\n SUB, // a - b\r\n MUL, // a * b\r\n DIV, // a / b\r\n REM, // a % b\r\n POW, // a ** b\r\n BITWISE_AND, // a & b\r\n BITWISE_OR, // a | b\r\n BITWISE_XOR, // a ^ b\r\n BITWISE_SHL, // a << b\r\n BITWISE_SHR, // a >> b\r\n BITWISE_SHR_U, // a >>> b\r\n EQ, // a == b\r\n NE, // a != b\r\n GT, // a > b\r\n GE, // a >= b\r\n LT, // a < b\r\n LE, // a <= b\r\n\r\n // unary prefix\r\n PLUS, // +a\r\n MINUS, // -a\r\n NOT, // !a\r\n BITWISE_NOT, // ~a\r\n PREFIX_INC, // ++a\r\n PREFIX_DEC, // --a\r\n\r\n // unary postfix\r\n POSTFIX_INC, // a++\r\n POSTFIX_DEC // a--\r\n\r\n // not overridable:\r\n // IDENTITY // a === b\r\n // LOGICAL_AND // a && b\r\n // LOGICAL_OR // a || b\r\n}\r\n\r\n/** Returns the operator kind represented by the specified decorator and string argument. */\r\nfunction operatorKindFromDecorator(decoratorKind: DecoratorKind, arg: string): OperatorKind {\r\n assert(arg.length);\r\n switch (decoratorKind) {\r\n case DecoratorKind.OPERATOR:\r\n case DecoratorKind.OPERATOR_BINARY: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.OPENBRACKET: {\r\n if (arg == \"[]\") return OperatorKind.INDEXED_GET;\r\n if (arg == \"[]=\") return OperatorKind.INDEXED_SET;\r\n break;\r\n }\r\n case CharCode.OPENBRACE: {\r\n if (arg == \"{}\") return OperatorKind.UNCHECKED_INDEXED_GET;\r\n if (arg == \"{}=\") return OperatorKind.UNCHECKED_INDEXED_SET;\r\n break;\r\n }\r\n case CharCode.PLUS: {\r\n if (arg == \"+\") return OperatorKind.ADD;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"-\") return OperatorKind.SUB;\r\n break;\r\n }\r\n case CharCode.ASTERISK: {\r\n if (arg == \"*\") return OperatorKind.MUL;\r\n if (arg == \"**\") return OperatorKind.POW;\r\n break;\r\n }\r\n case CharCode.SLASH: {\r\n if (arg == \"/\") return OperatorKind.DIV;\r\n break;\r\n }\r\n case CharCode.PERCENT: {\r\n if (arg == \"%\") return OperatorKind.REM;\r\n break;\r\n }\r\n case CharCode.AMPERSAND: {\r\n if (arg == \"&\") return OperatorKind.BITWISE_AND;\r\n break;\r\n }\r\n case CharCode.BAR: {\r\n if (arg == \"|\") return OperatorKind.BITWISE_OR;\r\n break;\r\n }\r\n case CharCode.CARET: {\r\n if (arg == \"^\") return OperatorKind.BITWISE_XOR;\r\n break;\r\n }\r\n case CharCode.EQUALS: {\r\n if (arg == \"==\") return OperatorKind.EQ;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n if (arg == \"!=\") return OperatorKind.NE;\r\n break;\r\n }\r\n case CharCode.GREATERTHAN: {\r\n if (arg == \">\") return OperatorKind.GT;\r\n if (arg == \">=\") return OperatorKind.GE;\r\n if (arg == \">>\") return OperatorKind.BITWISE_SHR;\r\n if (arg == \">>>\") return OperatorKind.BITWISE_SHR_U;\r\n break;\r\n }\r\n case CharCode.LESSTHAN: {\r\n if (arg == \"<\") return OperatorKind.LT;\r\n if (arg == \"<=\") return OperatorKind.LE;\r\n if (arg == \"<<\") return OperatorKind.BITWISE_SHL;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case DecoratorKind.OPERATOR_PREFIX: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.PLUS: {\r\n if (arg == \"+\") return OperatorKind.PLUS;\r\n if (arg == \"++\") return OperatorKind.PREFIX_INC;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"-\") return OperatorKind.MINUS;\r\n if (arg == \"--\") return OperatorKind.PREFIX_DEC;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n if (arg == \"!\") return OperatorKind.NOT;\r\n break;\r\n }\r\n case CharCode.TILDE: {\r\n if (arg == \"~\") return OperatorKind.BITWISE_NOT;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case DecoratorKind.OPERATOR_POSTFIX: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.PLUS: {\r\n if (arg == \"++\") return OperatorKind.POSTFIX_INC;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"--\") return OperatorKind.POSTFIX_DEC;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n return OperatorKind.INVALID;\r\n}\r\n\r\nconst noTypesYet = new Map();\r\n\r\n/** Represents an AssemblyScript program. */\r\nexport class Program extends DiagnosticEmitter {\r\n\r\n /** Array of source files. */\r\n sources: Source[];\r\n /** Diagnostic offset used where repeatedly obtaining the next diagnostic. */\r\n diagnosticsOffset: i32 = 0;\r\n /** Compiler options. */\r\n options: Options;\r\n\r\n /** Elements by internal name. */\r\n elementsLookup: Map = new Map();\r\n /** Class and function instances by internal name. */\r\n instancesLookup: Map = new Map();\r\n /** Types by internal name. */\r\n typesLookup: Map = noTypesYet;\r\n /** Declared type aliases. */\r\n typeAliases: Map = new Map();\r\n /** File-level exports by exported name. */\r\n fileLevelExports: Map = new Map();\r\n /** Module-level exports by exported name. */\r\n moduleLevelExports: Map = new Map();\r\n\r\n /** Array prototype reference. */\r\n arrayPrototype: ClassPrototype | null = null;\r\n /** ArrayBufferView prototype reference. */\r\n arrayBufferViewPrototype: InterfacePrototype | null = null;\r\n /** String instance reference. */\r\n stringInstance: Class | null = null;\r\n\r\n /** Target expression of the previously resolved property or element access. */\r\n resolvedThisExpression: Expression | null = null;\r\n /** Element expression of the previously resolved element access. */\r\n resolvedElementExpression : Expression | null = null;\r\n /** Currently processing filespace. */\r\n currentFilespace: Filespace;\r\n\r\n /** Constructs a new program, optionally inheriting parser diagnostics. */\r\n constructor(diagnostics: DiagnosticMessage[] | null = null) {\r\n super(diagnostics);\r\n this.sources = [];\r\n }\r\n\r\n /** Gets a source by its exact path. */\r\n getSource(normalizedPath: string): Source | null {\r\n var sources = this.sources;\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n let source = sources[i];\r\n if (source.normalizedPath == normalizedPath) return source;\r\n }\r\n return null;\r\n }\r\n\r\n /** Looks up the source for the specified possibly ambiguous path. */\r\n lookupSourceByPath(normalizedPathWithoutExtension: string): Source | null {\r\n var tmp: string;\r\n return (\r\n this.getSource(normalizedPathWithoutExtension + \".ts\") ||\r\n this.getSource(normalizedPathWithoutExtension + \"/index.ts\") ||\r\n this.getSource((tmp = LIBRARY_PREFIX + normalizedPathWithoutExtension) + \".ts\") ||\r\n this.getSource( tmp + \"/index.ts\")\r\n );\r\n }\r\n\r\n /** Initializes the program and its elements prior to compilation. */\r\n initialize(options: Options): void {\r\n this.options = options;\r\n 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 var queuedImports = new Array();\r\n var queuedExports = new Map();\r\n var queuedExtends = new Array();\r\n var queuedImplements = new Array();\r\n\r\n // build initial lookup maps of internal names to declarations\r\n for (let i = 0, k = this.sources.length; i < k; ++i) {\r\n let source = this.sources[i];\r\n\r\n // create one filespace per source\r\n let filespace = new Filespace(this, source);\r\n this.elementsLookup.set(filespace.internalName, filespace);\r\n this.currentFilespace = filespace;\r\n\r\n // process this source's statements\r\n let statements = source.statements;\r\n for (let j = 0, l = statements.length; j < l; ++j) {\r\n let statement = statements[j];\r\n switch (statement.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n this.initializeClass(statement, queuedExtends, queuedImplements);\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n this.initializeEnum(statement);\r\n break;\r\n }\r\n case NodeKind.EXPORT: {\r\n this.initializeExports(statement, queuedExports);\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n this.initializeFunction(statement);\r\n break;\r\n }\r\n case NodeKind.IMPORT: {\r\n this.initializeImports(statement, queuedExports, queuedImports);\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n this.initializeInterface(statement);\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n this.initializeNamespace(statement, queuedExtends, queuedImplements);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n this.initializeTypeAlias(statement);\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n this.initializeVariables(statement);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // queued imports should be resolvable now through traversing exports and queued exports\r\n for (let i = 0; i < queuedImports.length;) {\r\n let queuedImport = queuedImports[i];\r\n let declaration = queuedImport.declaration;\r\n if (declaration) { // named\r\n let element = this.tryResolveImport(queuedImport.externalName, queuedExports);\r\n if (element) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n if (element = this.tryResolveImport(queuedImport.externalNameAlt, queuedExports)) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Module_0_has_no_exported_member_1,\r\n declaration.range,\r\n (declaration.parent).path.value,\r\n declaration.externalName.text\r\n );\r\n ++i;\r\n }\r\n }\r\n } else { // filespace\r\n let element = this.elementsLookup.get(queuedImport.externalName);\r\n if (element) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n if (element = this.elementsLookup.get(queuedImport.externalNameAlt)) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n assert(false); // already reported by the parser not finding the file\r\n ++i;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // queued exports should be resolvable now that imports are finalized\r\n for (let [exportName, queuedExport] of queuedExports) {\r\n let currentExport: QueuedExport | null = queuedExport; // nullable below\r\n let element: Element | null;\r\n do {\r\n if (currentExport.isReExport) {\r\n if (element = this.fileLevelExports.get(currentExport.externalName)) {\r\n this.setExportAndCheckLibrary(\r\n exportName,\r\n element,\r\n currentExport.member.externalName\r\n );\r\n break;\r\n }\r\n currentExport = queuedExports.get(currentExport.externalName);\r\n if (!currentExport) {\r\n this.error(\r\n DiagnosticCode.Module_0_has_no_exported_member_1,\r\n queuedExport.member.externalName.range,\r\n ((queuedExport.member.parent).path).value,\r\n queuedExport.member.externalName.text\r\n );\r\n }\r\n } else {\r\n if (\r\n // normal export\r\n (element = this.elementsLookup.get(currentExport.externalName)) ||\r\n // library re-export\r\n (element = this.elementsLookup.get(currentExport.member.name.text))\r\n ) {\r\n this.setExportAndCheckLibrary(\r\n exportName,\r\n element,\r\n currentExport.member.externalName\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n queuedExport.member.range, queuedExport.member.name.text\r\n );\r\n }\r\n break;\r\n }\r\n } while (currentExport);\r\n }\r\n\r\n // resolve base prototypes of derived classes\r\n for (let i = 0, k = queuedExtends.length; i < k; ++i) {\r\n let derivedPrototype = queuedExtends[i];\r\n let derivedDeclaration = derivedPrototype.declaration;\r\n let derivedType = assert(derivedDeclaration.extendsType);\r\n let baseElement = this.resolveIdentifier(derivedType.name, null); // reports\r\n if (!baseElement) continue;\r\n if (baseElement.kind == ElementKind.CLASS_PROTOTYPE) {\r\n let basePrototype = baseElement;\r\n derivedPrototype.basePrototype = basePrototype;\r\n } else {\r\n this.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n derivedType.range\r\n );\r\n }\r\n }\r\n\r\n // set up global aliases\r\n var globalAliases = options.globalAliases;\r\n if (globalAliases) {\r\n for (let [alias, name] of globalAliases) {\r\n if (!name.length) continue; // explicitly disabled\r\n let element = this.elementsLookup.get(name);\r\n if (element) this.elementsLookup.set(alias, element);\r\n else throw new Error(\"element not found: \" + name);\r\n }\r\n }\r\n\r\n // register 'Array'\r\n var arrayPrototype = this.elementsLookup.get(\"Array\");\r\n if (arrayPrototype) {\r\n assert(arrayPrototype.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.arrayPrototype = arrayPrototype;\r\n }\r\n\r\n // register 'ArrayBufferView'\r\n var arrayBufferViewPrototype = this.elementsLookup.get(\"ArrayBufferView\");\r\n if (arrayBufferViewPrototype) {\r\n assert(arrayBufferViewPrototype.kind == ElementKind.INTERFACE_PROTOTYPE);\r\n this.arrayBufferViewPrototype = arrayBufferViewPrototype;\r\n }\r\n\r\n // register 'String'\r\n var stringPrototype = this.elementsLookup.get(\"String\");\r\n if (stringPrototype) {\r\n assert(stringPrototype.kind == ElementKind.CLASS_PROTOTYPE);\r\n let stringInstance = (stringPrototype).resolve(null); // reports\r\n if (stringInstance) {\r\n if (this.typesLookup.has(\"string\")) {\r\n let declaration = (stringPrototype).declaration;\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, declaration.programLevelInternalName\r\n );\r\n } else {\r\n this.stringInstance = stringInstance;\r\n this.typesLookup.set(\"string\", stringInstance.type);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Tries to resolve an import by traversing exports and queued exports. */\r\n private tryResolveImport(\r\n externalName: string,\r\n queuedNamedExports: Map\r\n ): Element | null {\r\n var element: Element | null;\r\n var fileLevelExports = this.fileLevelExports;\r\n do {\r\n if (element = fileLevelExports.get(externalName)) return element;\r\n let queuedExport = queuedNamedExports.get(externalName);\r\n if (!queuedExport) break;\r\n if (queuedExport.isReExport) {\r\n externalName = queuedExport.externalName;\r\n continue;\r\n }\r\n return this.elementsLookup.get(queuedExport.externalName);\r\n } while (true);\r\n return null;\r\n }\r\n\r\n private filterDecorators(decorators: DecoratorNode[], acceptedFlags: DecoratorFlags): DecoratorFlags {\r\n var presentFlags = DecoratorFlags.NONE;\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n let kind = decoratorNameToKind(decorator.name);\r\n let flag = decoratorKindToFlag(kind);\r\n if (flag) {\r\n if (!(acceptedFlags & flag)) {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n decorator.range, decorator.name.range.toString()\r\n );\r\n } else if (presentFlags & flag) {\r\n this.error(\r\n DiagnosticCode.Duplicate_decorator,\r\n decorator.range, decorator.name.range.toString()\r\n );\r\n } else {\r\n presentFlags |= flag;\r\n }\r\n }\r\n }\r\n return presentFlags;\r\n }\r\n\r\n /** Processes global options, if present. */\r\n private checkGlobalOptions(\r\n element: Element,\r\n declaration: DeclarationStatement\r\n ): void {\r\n var parentNode = declaration.parent;\r\n if (\r\n (element.hasDecorator(DecoratorFlags.GLOBAL)) ||\r\n (declaration.range.source.is(CommonFlags.BUILTIN)) ||\r\n (\r\n declaration.range.source.isLibrary &&\r\n element.is(CommonFlags.EXPORT) &&\r\n (\r\n assert(parentNode).kind == NodeKind.SOURCE ||\r\n (\r\n parentNode).kind == NodeKind.VARIABLE &&\r\n assert((parentNode).parent).kind == NodeKind.SOURCE\r\n )\r\n )\r\n ) {\r\n let globalName = declaration.programLevelInternalName;\r\n if (this.elementsLookup.has(globalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, element.internalName\r\n );\r\n } else {\r\n this.elementsLookup.set(globalName, element);\r\n if (element.is(CommonFlags.BUILTIN)) element.internalName = globalName;\r\n }\r\n }\r\n }\r\n\r\n private initializeClass(\r\n declaration: ClassDeclaration,\r\n queuedExtends: ClassPrototype[],\r\n queuedImplements: ClassPrototype[],\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var simpleName = declaration.name.text;\r\n var prototype = new ClassPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n decorators\r\n ? this.filterDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.SEALED |\r\n DecoratorFlags.UNMANAGED\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n var implementsTypes = declaration.implementsTypes;\r\n if (implementsTypes) {\r\n let numImplementsTypes = implementsTypes.length;\r\n if (prototype.hasDecorator(DecoratorFlags.UNMANAGED)) {\r\n if (numImplementsTypes) {\r\n this.error(\r\n DiagnosticCode.Unmanaged_classes_cannot_implement_interfaces,\r\n Range.join(\r\n declaration.name.range,\r\n implementsTypes[numImplementsTypes - 1].range\r\n )\r\n );\r\n }\r\n\r\n // remember classes that implement interfaces\r\n } else if (numImplementsTypes) {\r\n queuedImplements.push(prototype);\r\n }\r\n }\r\n\r\n // remember classes that extend another one\r\n if (declaration.extendsType) queuedExtends.push(prototype);\r\n\r\n // add as namespace member if applicable\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // otherwise add to file-level exports if exported\r\n } else if (prototype.is(CommonFlags.EXPORT)) {\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, prototype);\r\n this.currentFilespace.members.set(simpleName, prototype);\r\n if (prototype.is(CommonFlags.EXPORT) && declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(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 prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(internalName, prototype);\r\n }\r\n }\r\n\r\n // initialize members\r\n var memberDeclarations = declaration.members;\r\n for (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n case NodeKind.FIELDDECLARATION: {\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n }\r\n case NodeKind.METHODDECLARATION: {\r\n if (memberDeclaration.isAny(CommonFlags.GET | CommonFlags.SET)) {\r\n this.initializeAccessor(memberDeclaration, prototype);\r\n } else {\r\n this.initializeMethod(memberDeclaration, prototype);\r\n }\r\n break;\r\n }\r\n default: {\r\n throw new Error(\"class member expected\");\r\n }\r\n }\r\n }\r\n\r\n this.checkGlobalOptions(prototype, declaration);\r\n }\r\n\r\n private initializeField(\r\n declaration: FieldDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n var decorators = declaration.decorators;\r\n\r\n // static fields become global variables\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n let staticField = new Global(\r\n this,\r\n name,\r\n internalName,\r\n Type.void, // resolved later on\r\n declaration,\r\n decorators\r\n ? this.filterDecorators(decorators, DecoratorFlags.NONE)\r\n : DecoratorFlags.NONE\r\n );\r\n staticField.parent = classPrototype;\r\n classPrototype.members.set(name, staticField);\r\n this.elementsLookup.set(internalName, staticField);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n staticField.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance fields are remembered until resolved\r\n } else {\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n let instanceField = new FieldPrototype(\r\n classPrototype,\r\n name,\r\n internalName,\r\n declaration\r\n );\r\n if (decorators) this.filterDecorators(decorators, DecoratorFlags.NONE);\r\n classPrototype.instanceMembers.set(name, instanceField);\r\n // TBD: no need to mark as MODULE_EXPORT\r\n }\r\n }\r\n\r\n private initializeMethod(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var simpleName = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n var prototype: FunctionPrototype | null = null;\r\n\r\n var decorators = declaration.decorators;\r\n var decoratorFlags = DecoratorFlags.NONE;\r\n if (decorators) {\r\n decoratorFlags = this.filterDecorators(decorators,\r\n DecoratorFlags.OPERATOR_BINARY |\r\n DecoratorFlags.OPERATOR_PREFIX |\r\n DecoratorFlags.OPERATOR_POSTFIX |\r\n DecoratorFlags.INLINE\r\n );\r\n }\r\n\r\n // static methods become global functions\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n assert(declaration.name.kind != NodeKind.CONSTRUCTOR);\r\n\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0, declaration.name.range,\r\n internalName\r\n );\r\n return;\r\n }\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n classPrototype.members.set(simpleName, prototype);\r\n this.elementsLookup.set(internalName, prototype);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance methods are remembered until resolved\r\n } else {\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n // if (classPrototype.isUnmanaged && instancePrototype.isAbstract) {\r\n // this.error( Unmanaged classes cannot declare abstract methods. );\r\n // }\r\n if (declaration.name.kind == NodeKind.CONSTRUCTOR) {\r\n if (classPrototype.constructorPrototype) {\r\n this.error(\r\n DiagnosticCode.Multiple_constructor_implementations_are_not_allowed,\r\n declaration.name.range\r\n );\r\n } else {\r\n prototype.set(CommonFlags.CONSTRUCTOR);\r\n classPrototype.constructorPrototype = prototype;\r\n }\r\n } else {\r\n classPrototype.instanceMembers.set(simpleName, prototype);\r\n }\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n\r\n this.checkOperatorOverloads(declaration.decorators, prototype, classPrototype);\r\n }\r\n\r\n private checkOperatorOverloads(\r\n decorators: DecoratorNode[] | null,\r\n prototype: FunctionPrototype,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n switch (decorator.decoratorKind) {\r\n case DecoratorKind.OPERATOR:\r\n case DecoratorKind.OPERATOR_BINARY:\r\n case DecoratorKind.OPERATOR_PREFIX:\r\n case DecoratorKind.OPERATOR_POSTFIX: {\r\n let numArgs = decorator.arguments && decorator.arguments.length || 0;\r\n if (numArgs == 1) {\r\n let firstArg = (decorator.arguments)[0];\r\n if (\r\n firstArg.kind == NodeKind.LITERAL &&\r\n (firstArg).literalKind == LiteralKind.STRING\r\n ) {\r\n let kind = operatorKindFromDecorator(\r\n decorator.decoratorKind,\r\n (firstArg).value\r\n );\r\n if (kind == OperatorKind.INVALID) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n firstArg.range\r\n );\r\n } else {\r\n let overloads = classPrototype.overloadPrototypes;\r\n if (overloads.has(kind)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_function_implementation,\r\n firstArg.range\r\n );\r\n } else {\r\n prototype.operatorKind = kind;\r\n overloads.set(kind, prototype);\r\n }\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n firstArg.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n decorator.range, \"1\", numArgs.toString(0)\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private initializeAccessor(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var simpleName = declaration.name.text;\r\n var internalPropertyName = declaration.fileLevelInternalName;\r\n var propertyElement = this.elementsLookup.get(internalPropertyName);\r\n var isGetter = declaration.is(CommonFlags.GET);\r\n var isNew = false;\r\n if (propertyElement) {\r\n if (\r\n propertyElement.kind != ElementKind.PROPERTY ||\r\n (isGetter\r\n ? (propertyElement).getterPrototype\r\n : (propertyElement).setterPrototype\r\n ) != null\r\n ) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalPropertyName\r\n );\r\n return;\r\n }\r\n } else {\r\n propertyElement = new Property(\r\n this,\r\n simpleName,\r\n internalPropertyName,\r\n classPrototype\r\n );\r\n isNew = true;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var decoratorFlags = DecoratorFlags.NONE;\r\n if (decorators) {\r\n decoratorFlags = this.filterDecorators(decorators,\r\n DecoratorFlags.INLINE\r\n );\r\n }\r\n\r\n var baseName = (isGetter ? GETTER_PREFIX : SETTER_PREFIX) + simpleName;\r\n\r\n // static accessors become global functions\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n let staticName = classPrototype.internalName + STATIC_DELIMITER + baseName;\r\n if (this.elementsLookup.has(staticName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, staticName\r\n );\r\n return;\r\n }\r\n let staticPrototype = new FunctionPrototype(\r\n this,\r\n baseName,\r\n staticName,\r\n declaration,\r\n null,\r\n decoratorFlags\r\n );\r\n if (isGetter) {\r\n (propertyElement).getterPrototype = staticPrototype;\r\n } else {\r\n (propertyElement).setterPrototype = staticPrototype;\r\n }\r\n if (isNew) {\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, staticName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n classPrototype.members.set(simpleName, propertyElement); // check above\r\n } else {\r\n assert(classPrototype.members && classPrototype.members.has(simpleName));\r\n }\r\n this.elementsLookup.set(internalPropertyName, propertyElement);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n propertyElement.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance accessors are remembered until resolved\r\n } else {\r\n let instanceName = classPrototype.internalName + INSTANCE_DELIMITER + baseName;\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(baseName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalPropertyName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n let instancePrototype = new FunctionPrototype(\r\n this,\r\n baseName,\r\n instanceName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n if (isGetter) {\r\n (propertyElement).getterPrototype = instancePrototype;\r\n } else {\r\n (propertyElement).setterPrototype = instancePrototype;\r\n }\r\n classPrototype.instanceMembers.set(baseName, propertyElement);\r\n this.elementsLookup.set(internalPropertyName, propertyElement);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n propertyElement.set(CommonFlags.MODULE_EXPORT);\r\n instancePrototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n }\r\n\r\n private initializeEnum(\r\n declaration: EnumDeclaration,\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n var simpleName = declaration.name.text;\r\n var element = new Enum(this, simpleName, internalName, declaration);\r\n element.parent = namespace;\r\n this.elementsLookup.set(internalName, element);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, element);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && element.is(CommonFlags.EXPORT)) {\r\n element.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (element.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, element);\r\n this.currentFilespace.members.set(simpleName, element);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(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 element.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(internalName, element);\r\n }\r\n }\r\n\r\n var values = declaration.values;\r\n for (let i = 0, k = values.length; i < k; ++i) {\r\n this.initializeEnumValue(values[i], element);\r\n }\r\n\r\n this.checkGlobalOptions(element, declaration);\r\n }\r\n\r\n private initializeEnumValue(\r\n declaration: EnumValueDeclaration,\r\n enm: Enum\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n if (enm.members) {\r\n if (enm.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n enm.members = new Map();\r\n }\r\n var value = new EnumValue(enm, this, name, internalName, declaration);\r\n enm.members.set(name, value);\r\n if (enm.is(CommonFlags.MODULE_EXPORT)) {\r\n value.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n\r\n private initializeExports(\r\n statement: ExportStatement,\r\n queuedExports: Map\r\n ): void {\r\n var members = statement.members;\r\n if (members) { // named\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n this.initializeExport(members[i], statement.internalPath, queuedExports);\r\n }\r\n } else { // TODO: filespace\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n }\r\n }\r\n\r\n private setExportAndCheckLibrary(\r\n internalName: string,\r\n element: Element,\r\n identifier: IdentifierExpression\r\n ): void {\r\n // add to file-level exports\r\n this.fileLevelExports.set(internalName, element);\r\n\r\n // add to filespace\r\n var internalPath = identifier.range.source.internalPath;\r\n var prefix = FILESPACE_PREFIX + internalPath;\r\n var filespace = this.elementsLookup.get(prefix);\r\n if (!filespace) filespace = assert(this.elementsLookup.get(prefix + PATH_DELIMITER + \"index\"));\r\n assert(filespace.kind == ElementKind.FILESPACE);\r\n var simpleName = identifier.text;\r\n (filespace).members.set(simpleName, element);\r\n\r\n // add global alias if from a library file\r\n if (identifier.range.source.isLibrary) {\r\n if (this.elementsLookup.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n identifier.range, simpleName\r\n );\r\n } else {\r\n element.internalName = simpleName;\r\n this.elementsLookup.set(simpleName, element);\r\n }\r\n }\r\n }\r\n\r\n private initializeExport(\r\n member: ExportMember,\r\n internalPath: string | null,\r\n queuedExports: Map\r\n ): void {\r\n var externalName = member.range.source.internalPath + PATH_DELIMITER + member.externalName.text;\r\n if (this.fileLevelExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n var referencedName: string;\r\n var referencedElement: Element | null;\r\n var queuedExport: QueuedExport | null;\r\n\r\n // export local element\r\n if (internalPath == null) {\r\n referencedName = member.range.source.internalPath + PATH_DELIMITER + member.name.text;\r\n\r\n // resolve right away if the element exists\r\n if (referencedElement = this.elementsLookup.get(referencedName)) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n if (queuedExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n queuedExport = new QueuedExport();\r\n queuedExport.isReExport = false;\r\n queuedExport.externalName = referencedName; // -> here: local name\r\n queuedExport.member = member;\r\n queuedExports.set(externalName, queuedExport);\r\n\r\n // export external element\r\n } else {\r\n referencedName = internalPath + PATH_DELIMITER + member.name.text;\r\n\r\n // resolve right away if the export exists\r\n referencedElement = this.elementsLookup.get(referencedName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n\r\n // walk already known queued exports\r\n let seen = new Set();\r\n while (queuedExport = queuedExports.get(referencedName)) {\r\n if (queuedExport.isReExport) {\r\n referencedElement = this.fileLevelExports.get(queuedExport.externalName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n referencedName = queuedExport.externalName;\r\n if (seen.has(queuedExport)) break;\r\n seen.add(queuedExport);\r\n } else {\r\n referencedElement = this.elementsLookup.get(queuedExport.externalName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // otherwise queue it\r\n if (queuedExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n queuedExport = new QueuedExport();\r\n queuedExport.isReExport = true;\r\n queuedExport.externalName = referencedName; // -> here: external name\r\n queuedExport.member = member;\r\n queuedExports.set(externalName, queuedExport);\r\n }\r\n }\r\n\r\n private initializeFunction(\r\n declaration: FunctionDeclaration,\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n var simpleName = declaration.name.text;\r\n var decorators = declaration.decorators;\r\n var prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n null,\r\n decorators\r\n ? this.filterDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.INLINE\r\n )\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(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 prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(internalName, prototype);\r\n }\r\n }\r\n\r\n this.checkGlobalOptions(prototype, declaration);\r\n }\r\n\r\n private initializeImports(\r\n statement: ImportStatement,\r\n queuedExports: Map,\r\n queuedImports: QueuedImport[]\r\n ): void {\r\n var declarations = statement.declarations;\r\n if (declarations) {\r\n for (let i = 0, k = declarations.length; i < k; ++i) {\r\n this.initializeImport(\r\n declarations[i],\r\n statement.internalPath,\r\n queuedExports, queuedImports\r\n );\r\n }\r\n } else if (statement.namespaceName) { // import * as simpleName from \"file\"\r\n let simpleName = statement.namespaceName.text;\r\n let internalName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n simpleName\r\n );\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n statement.namespaceName.range,\r\n internalName\r\n );\r\n return;\r\n }\r\n\r\n // resolve right away if the exact filespace exists\r\n let filespace = this.elementsLookup.get(statement.internalPath);\r\n if (filespace) {\r\n this.elementsLookup.set(internalName, filespace);\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n let queuedImport = new QueuedImport();\r\n queuedImport.localName = internalName;\r\n let externalName = FILESPACE_PREFIX + statement.internalPath;\r\n queuedImport.externalName = externalName;\r\n queuedImport.externalNameAlt = externalName + PATH_DELIMITER + \"index\";\r\n queuedImport.declaration = null; // filespace\r\n queuedImports.push(queuedImport);\r\n }\r\n }\r\n\r\n private initializeImport(\r\n declaration: ImportDeclaration,\r\n internalPath: string,\r\n queuedNamedExports: Map,\r\n queuedImports: QueuedImport[]\r\n ): void {\r\n var localName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(localName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, localName\r\n );\r\n return;\r\n }\r\n\r\n var externalName = internalPath + PATH_DELIMITER + declaration.externalName.text;\r\n\r\n // resolve right away if the exact export exists\r\n var element: Element | null;\r\n if (element = this.fileLevelExports.get(externalName)) {\r\n this.elementsLookup.set(localName, element);\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n const indexPart = PATH_DELIMITER + \"index\";\r\n var queuedImport = new QueuedImport();\r\n queuedImport.localName = localName;\r\n if (internalPath.endsWith(indexPart)) {\r\n queuedImport.externalName = externalName; // try exact first\r\n queuedImport.externalNameAlt = (\r\n internalPath.substring(0, internalPath.length - indexPart.length + 1) +\r\n declaration.externalName.text\r\n );\r\n } else {\r\n queuedImport.externalName = externalName; // try exact first\r\n queuedImport.externalNameAlt = (\r\n internalPath +\r\n indexPart +\r\n PATH_DELIMITER +\r\n declaration.externalName.text\r\n );\r\n }\r\n queuedImport.declaration = declaration; // named\r\n queuedImports.push(queuedImport);\r\n }\r\n\r\n private initializeInterface(declaration: InterfaceDeclaration, namespace: Element | null = null): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var simpleName = declaration.name.text;\r\n var prototype = new InterfacePrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n decorators\r\n ? this.filterDecorators(decorators, DecoratorFlags.GLOBAL)\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(prototype.internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(prototype.internalName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (prototype.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, prototype);\r\n this.currentFilespace.members.set(simpleName, prototype);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(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 prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(internalName, prototype);\r\n }\r\n }\r\n\r\n var memberDeclarations = declaration.members;\r\n for (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n\r\n case NodeKind.FIELDDECLARATION: {\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n }\r\n case NodeKind.METHODDECLARATION: {\r\n if (memberDeclaration.isAny(CommonFlags.GET | CommonFlags.SET)) {\r\n this.initializeAccessor(memberDeclaration, prototype);\r\n } else {\r\n this.initializeMethod(memberDeclaration, prototype);\r\n }\r\n break;\r\n }\r\n default: {\r\n throw new Error(\"interface member expected\");\r\n }\r\n }\r\n }\r\n\r\n this.checkGlobalOptions(prototype, declaration);\r\n }\r\n\r\n private initializeNamespace(\r\n declaration: NamespaceDeclaration,\r\n queuedExtends: ClassPrototype[],\r\n queuedImplements: ClassPrototype[],\r\n parentNamespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n var simpleName = declaration.name.text;\r\n var namespace = this.elementsLookup.get(internalName);\r\n if (!namespace) {\r\n namespace = new Namespace(this, simpleName, internalName, declaration);\r\n namespace.parent = parentNamespace;\r\n this.elementsLookup.set(internalName, namespace);\r\n this.checkGlobalOptions(namespace, declaration);\r\n }\r\n\r\n if (parentNamespace) {\r\n if (parentNamespace.members) {\r\n if (parentNamespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n parentNamespace.members = new Map();\r\n }\r\n parentNamespace.members.set(simpleName, namespace);\r\n if (parentNamespace.is(CommonFlags.MODULE_EXPORT) && namespace.is(CommonFlags.EXPORT)) {\r\n namespace.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (namespace.is(CommonFlags.EXPORT)) { // no parent namespace\r\n let existingExport = this.fileLevelExports.get(internalName);\r\n if (existingExport) {\r\n if (!existingExport.is(CommonFlags.EXPORT)) {\r\n this.error(\r\n DiagnosticCode.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local,\r\n declaration.name.range, namespace.internalName\r\n ); // recoverable\r\n }\r\n namespace = existingExport; // join\r\n } else {\r\n this.fileLevelExports.set(internalName, namespace);\r\n }\r\n this.currentFilespace.members.set(simpleName, namespace);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(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 namespace.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(internalName, namespace);\r\n }\r\n }\r\n\r\n var members = declaration.members;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n switch (members[i].kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n this.initializeClass(members[i], queuedExtends, queuedImplements, namespace);\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n this.initializeEnum(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n this.initializeFunction(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n this.initializeInterface(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n this.initializeNamespace(members[i], queuedExtends, queuedImplements, namespace);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n // this.initializeTypeAlias(members[i], namespace);\r\n // TODO: what about namespaced types?\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n members[i].range\r\n );\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n this.initializeVariables(members[i], namespace);\r\n break;\r\n }\r\n default: {\r\n throw new Error(\"namespace member expected\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n private initializeTypeAlias(declaration: TypeDeclaration, namespace: Element | null = null): void {\r\n // type aliases are program globals\r\n // TODO: what about namespaced types?\r\n var name = declaration.name.text;\r\n if (this.typesLookup.has(name) || this.typeAliases.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, name\r\n );\r\n return;\r\n }\r\n var alias = new TypeAlias();\r\n alias.typeParameters = declaration.typeParameters;\r\n alias.type = declaration.type;\r\n this.typeAliases.set(name, alias);\r\n }\r\n\r\n private initializeVariables(statement: VariableStatement, namespace: Element | null = null): void {\r\n var declarations = statement.declarations;\r\n for (let i = 0, k = declarations.length; i < k; ++i) {\r\n let declaration = declarations[i];\r\n let decorators = declaration.decorators;\r\n let internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n continue;\r\n }\r\n let simpleName = declaration.name.text;\r\n let global = new Global(\r\n this,\r\n simpleName,\r\n internalName,\r\n Type.void, // resolved later on\r\n declaration,\r\n decorators\r\n ? this.filterDecorators(decorators,\r\n DecoratorFlags.GLOBAL\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n global.parent = namespace;\r\n this.elementsLookup.set(internalName, global);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n continue;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, global);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && global.is(CommonFlags.EXPORT)) {\r\n global.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (global.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n } else {\r\n this.fileLevelExports.set(internalName, global);\r\n }\r\n this.currentFilespace.members.set(simpleName, global);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(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 global.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(internalName, global);\r\n }\r\n }\r\n this.checkGlobalOptions(global, declaration);\r\n }\r\n }\r\n\r\n /** Resolves a {@link SignatureNode} to a concrete {@link Signature}. */\r\n resolveSignature(\r\n node: SignatureNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportNotFound: bool = true\r\n ): Signature | null {\r\n var explicitThisType = node.explicitThisType;\r\n var thisType: Type | null = null;\r\n if (explicitThisType) {\r\n thisType = this.resolveType(\r\n explicitThisType,\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!thisType) return null;\r\n }\r\n var parameterTypeNodes = node.parameters;\r\n var numParameters = parameterTypeNodes.length;\r\n var parameterTypes = new Array(numParameters);\r\n var parameterNames = new Array(numParameters);\r\n var requiredParameters = 0;\r\n var hasRest = false;\r\n for (let i = 0; i < numParameters; ++i) {\r\n let parameterTypeNode = parameterTypeNodes[i];\r\n switch (parameterTypeNode.parameterKind) {\r\n case ParameterKind.DEFAULT: {\r\n requiredParameters = i + 1;\r\n break;\r\n }\r\n case ParameterKind.REST: {\r\n assert(i == numParameters);\r\n hasRest = true;\r\n break;\r\n }\r\n }\r\n let parameterType = this.resolveType(\r\n assert(parameterTypeNode.type),\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!parameterType) return null;\r\n parameterTypes[i] = parameterType;\r\n parameterNames[i] = parameterTypeNode.name.text;\r\n }\r\n var returnTypeNode = node.returnType;\r\n var returnType: Type | null;\r\n if (returnTypeNode) {\r\n returnType = this.resolveType(\r\n returnTypeNode,\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Type.void;\r\n }\r\n var signature = new Signature(parameterTypes, returnType, thisType);\r\n signature.parameterNames = parameterNames;\r\n signature.requiredParameters = requiredParameters;\r\n signature.hasRest = hasRest;\r\n return signature;\r\n }\r\n\r\n /** Resolves a {@link CommonTypeNode} to a concrete {@link Type}. */\r\n resolveType(\r\n node: CommonTypeNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportNotFound: bool = true\r\n ): Type | null {\r\n if (node.kind == NodeKind.SIGNATURE) {\r\n let signature = this.resolveSignature(node, contextualTypeArguments, reportNotFound);\r\n if (!signature) return null;\r\n return node.isNullable\r\n ? signature.type.asNullable()\r\n : signature.type;\r\n }\r\n var typeNode = node;\r\n var simpleName = typeNode.name.text;\r\n var globalName = simpleName;\r\n var localName = typeNode.range.source.internalPath + PATH_DELIMITER + simpleName;\r\n\r\n var element: Element | null;\r\n if (\r\n (element = this.elementsLookup.get(localName)) || // file-global\r\n (element = this.elementsLookup.get(globalName)) // program-global\r\n ) {\r\n switch (element.kind) {\r\n case ElementKind.ENUM: return Type.i32;\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n let instance = (element).resolveUsingTypeArguments(\r\n typeNode.typeArguments,\r\n contextualTypeArguments,\r\n null\r\n ); // reports\r\n if (!instance) return null;\r\n return node.isNullable\r\n ? instance.type.asNullable()\r\n : instance.type;\r\n }\r\n }\r\n }\r\n\r\n // check (global) type alias\r\n var alias = this.typeAliases.get(simpleName);\r\n if (alias) return this.resolveType(alias.type, contextualTypeArguments, reportNotFound);\r\n\r\n // resolve parameters\r\n if (typeNode.typeArguments) {\r\n let k = typeNode.typeArguments.length;\r\n let paramTypes = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let paramType = this.resolveType( // reports\r\n typeNode.typeArguments[i],\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!paramType) return null;\r\n paramTypes[i] = paramType;\r\n }\r\n\r\n if (k) { // can't be a placeholder if it has parameters\r\n let instanceKey = typesToString(paramTypes);\r\n if (instanceKey.length) {\r\n localName += \"<\" + instanceKey + \">\";\r\n globalName += \"<\" + instanceKey + \">\";\r\n }\r\n } else if (contextualTypeArguments) {\r\n let placeholderType = contextualTypeArguments.get(globalName);\r\n if (placeholderType) return placeholderType;\r\n }\r\n }\r\n\r\n var type: Type | null;\r\n\r\n // check file-global / program-global type\r\n if ((type = this.typesLookup.get(localName)) || (type = this.typesLookup.get(globalName))) {\r\n return type;\r\n }\r\n\r\n if (reportNotFound) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n typeNode.name.range, globalName\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /** Resolves an array of type arguments to concrete types. */\r\n resolveTypeArguments(\r\n typeParameters: TypeParameterNode[],\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): Type[] | null {\r\n var parameterCount = typeParameters.length;\r\n var argumentCount = typeArgumentNodes ? typeArgumentNodes.length : 0;\r\n if (parameterCount != argumentCount) {\r\n if (argumentCount) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n Range.join(\r\n (typeArgumentNodes)[0].range,\r\n (typeArgumentNodes)[argumentCount - 1].range\r\n ),\r\n parameterCount.toString(10), argumentCount.toString(10)\r\n );\r\n } else if (alternativeReportNode) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n alternativeReportNode.range.atEnd, parameterCount.toString(10), \"0\"\r\n );\r\n }\r\n return null;\r\n }\r\n var typeArguments = new Array(parameterCount);\r\n for (let i = 0; i < parameterCount; ++i) {\r\n let type = this.resolveType( // reports\r\n (typeArgumentNodes)[i],\r\n contextualTypeArguments,\r\n true\r\n );\r\n if (!type) return null;\r\n // TODO: check extendsType\r\n typeArguments[i] = type;\r\n }\r\n return typeArguments;\r\n }\r\n\r\n /** Resolves an identifier to the element it refers to. */\r\n resolveIdentifier(\r\n identifier: IdentifierExpression,\r\n contextualFunction: Function | null,\r\n contextualEnum: Enum | null = null\r\n ): Element | null {\r\n var name = identifier.text;\r\n\r\n var element: Element | null;\r\n var namespace: Element | null;\r\n\r\n // check siblings\r\n if (contextualEnum) {\r\n\r\n if (\r\n contextualEnum.members &&\r\n (element = contextualEnum.members.get(name)) &&\r\n element.kind == ElementKind.ENUMVALUE\r\n ) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // ENUMVALUE\r\n }\r\n\r\n } else if (contextualFunction) {\r\n\r\n // check locals\r\n if (element = contextualFunction.flow.getScopedLocal(name)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // LOCAL\r\n }\r\n\r\n // check outer scope locals\r\n // let outerScope = contextualFunction.outerScope;\r\n // while (outerScope) {\r\n // if (element = outerScope.getScopedLocal(name)) {\r\n // let scopedLocal = element;\r\n // let scopedGlobal = scopedLocal.scopedGlobal;\r\n // if (!scopedGlobal) scopedGlobal = outerScope.addScopedGlobal(scopedLocal);\r\n // if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n // return resolvedElement.set(scopedGlobal);\r\n // }\r\n // outerScope = outerScope.currentFunction.outerScope;\r\n // }\r\n\r\n // search contextual parent namespaces if applicable\r\n if (namespace = contextualFunction.prototype.parent) {\r\n do {\r\n if (element = this.elementsLookup.get(namespace.internalName + STATIC_DELIMITER + name)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // LOCAL\r\n }\r\n } while (namespace = namespace.parent);\r\n }\r\n }\r\n\r\n // search current file\r\n if (element = this.elementsLookup.get(identifier.range.source.internalPath + PATH_DELIMITER + name)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\r\n }\r\n\r\n // search global scope\r\n if (element = this.elementsLookup.get(name)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\r\n }\r\n\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n identifier.range, name\r\n );\r\n return null;\r\n }\r\n\r\n /** Resolves a property access to the element it refers to. */\r\n resolvePropertyAccess(\r\n propertyAccess: PropertyAccessExpression,\r\n contextualFunction: Function\r\n ): Element | null {\r\n // start by resolving the lhs target (expression before the last dot)\r\n var targetExpression = propertyAccess.expression;\r\n var target = this.resolveExpression(targetExpression, contextualFunction); // reports\r\n if (!target) return null;\r\n\r\n // at this point we know exactly what the target is, so look up the element within\r\n var propertyName = propertyAccess.property.text;\r\n\r\n // Resolve variable-likes to the class type they reference first\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n let classReference = (target).type.classReference;\r\n if (!classReference) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, (target).type.toString()\r\n );\r\n return null;\r\n }\r\n target = classReference;\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = assert((target).getterPrototype).resolve(); // reports\r\n if (!getter) return null;\r\n let classReference = getter.signature.returnType.classReference;\r\n if (!classReference) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, getter.signature.returnType.toString()\r\n );\r\n return null;\r\n }\r\n target = classReference;\r\n break;\r\n }\r\n case ElementKind.CLASS: {\r\n let elementExpression = this.resolvedElementExpression;\r\n if (elementExpression) {\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n elementExpression.range, (target).internalName\r\n );\r\n return null;\r\n }\r\n let returnType = indexedGet.signature.returnType;\r\n if (!(target = returnType.classReference)) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, returnType.toString()\r\n );\r\n return null;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // Look up the member within\r\n switch (target.kind) {\r\n case ElementKind.CLASS_PROTOTYPE:\r\n case ElementKind.CLASS: {\r\n do {\r\n let members = target.members;\r\n let member: Element | null;\r\n if (members && (member = members.get(propertyName))) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = null;\r\n return member; // instance FIELD, static GLOBAL, FUNCTION_PROTOTYPE...\r\n }\r\n // traverse inherited static members on the base prototype if target is a class prototype\r\n if (target.kind == ElementKind.CLASS_PROTOTYPE) {\r\n if ((target).basePrototype) {\r\n target = (target).basePrototype;\r\n } else {\r\n break;\r\n }\r\n // traverse inherited instance members on the base class if target is a class instance\r\n } else if (target.kind == ElementKind.CLASS) {\r\n if ((target).base) {\r\n target = (target).base;\r\n } else {\r\n break;\r\n }\r\n } else {\r\n break;\r\n }\r\n } while (true);\r\n break;\r\n }\r\n default: { // enums or other namespace-like elements\r\n let members = target.members;\r\n if (members) {\r\n let member = members.get(propertyName);\r\n if (member) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = null;\r\n return member; // static ENUMVALUE, static GLOBAL, static FUNCTION_PROTOTYPE...\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, target.internalName\r\n );\r\n return null;\r\n }\r\n\r\n resolveElementAccess(\r\n elementAccess: ElementAccessExpression,\r\n contextualFunction: Function\r\n ): Element | null {\r\n var targetExpression = elementAccess.expression;\r\n var target = this.resolveExpression(targetExpression, contextualFunction);\r\n if (!target) return null;\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n let type = (target).type;\r\n if (target = type.classReference) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = elementAccess.elementExpression;\r\n return target;\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS: { // element access on element access\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n elementAccess.range, (target).internalName\r\n );\r\n return null;\r\n }\r\n let returnType = indexedGet.signature.returnType;\r\n if (target = returnType.classReference) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = elementAccess.elementExpression;\r\n return target;\r\n }\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n targetExpression.range\r\n );\r\n return null;\r\n }\r\n\r\n resolveExpression(\r\n expression: Expression,\r\n contextualFunction: Function\r\n ): Element | null {\r\n while (expression.kind == NodeKind.PARENTHESIZED) {\r\n expression = (expression).expression;\r\n }\r\n switch (expression.kind) {\r\n case NodeKind.ASSERTION: {\r\n let type = this.resolveType((expression).toType); // reports\r\n if (type) {\r\n let classType = type.classReference;\r\n if (classType) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return classType;\r\n }\r\n }\r\n return null;\r\n }\r\n case NodeKind.BINARY: { // TODO: string concatenation, mostly\r\n throw new Error(\"not implemented\");\r\n }\r\n case NodeKind.THIS: { // -> Class / ClassPrototype\r\n if (contextualFunction.flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let explicitLocal = contextualFunction.flow.getScopedLocal(\"this\");\r\n if (explicitLocal) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return explicitLocal;\r\n }\r\n }\r\n let parent = contextualFunction.parent;\r\n if (parent) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return parent;\r\n }\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n return null;\r\n }\r\n case NodeKind.SUPER: { // -> Class\r\n if (contextualFunction.flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let explicitLocal = contextualFunction.flow.getScopedLocal(\"super\");\r\n if (explicitLocal) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return explicitLocal;\r\n }\r\n }\r\n let parent = contextualFunction.parent;\r\n if (parent && parent.kind == ElementKind.CLASS && (parent = (parent).base)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return parent;\r\n }\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n return null;\r\n }\r\n case NodeKind.IDENTIFIER: {\r\n return this.resolveIdentifier(expression, contextualFunction);\r\n }\r\n case NodeKind.LITERAL: {\r\n switch ((expression).literalKind) {\r\n case LiteralKind.STRING: {\r\n this.resolvedThisExpression = expression;\r\n this.resolvedElementExpression = null;\r\n return this.stringInstance;\r\n }\r\n // case LiteralKind.ARRAY: // TODO\r\n }\r\n break;\r\n }\r\n case NodeKind.PROPERTYACCESS: {\r\n return this.resolvePropertyAccess(\r\n expression,\r\n contextualFunction\r\n );\r\n }\r\n case NodeKind.ELEMENTACCESS: {\r\n return this.resolveElementAccess(\r\n expression,\r\n contextualFunction\r\n );\r\n }\r\n case NodeKind.CALL: {\r\n let targetExpression = (expression).expression;\r\n let target = this.resolveExpression(targetExpression, contextualFunction); // reports\r\n if (!target) return null;\r\n if (target.kind == ElementKind.FUNCTION_PROTOTYPE) {\r\n let instance = (target).resolveUsingTypeArguments( // reports\r\n (expression).typeArguments,\r\n contextualFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n if (!instance) return null;\r\n let returnType = instance.signature.returnType;\r\n let classType = returnType.classReference;\r\n if (classType) {\r\n // reuse resolvedThisExpression (might be property access)\r\n // reuse resolvedElementExpression (might be element access)\r\n return classType;\r\n } else {\r\n let signature = returnType.signatureReference;\r\n if (signature) {\r\n let functionTarget = signature.cachedFunctionTarget;\r\n if (!functionTarget) {\r\n functionTarget = new FunctionTarget(this, signature);\r\n signature.cachedFunctionTarget = functionTarget;\r\n }\r\n // reuse resolvedThisExpression (might be property access)\r\n // reuse resolvedElementExpression (might be element access)\r\n return functionTarget;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n targetExpression.range, target.internalName\r\n );\r\n return null;\r\n }\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return null;\r\n }\r\n}\r\n\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\n/** Indicates traits of a {@link Node} or {@link Element}. */\r\nexport enum CommonFlags {\r\n /** No flags set. */\r\n NONE = 0,\r\n\r\n // Basic modifiers\r\n\r\n /** Has an `import` modifier. */\r\n IMPORT = 1 << 0,\r\n /** Has an `export` modifier. */\r\n EXPORT = 1 << 1,\r\n /** Has a `declare` modifier. */\r\n DECLARE = 1 << 2,\r\n /** Has a `const` modifier. */\r\n CONST = 1 << 3,\r\n /** Has a `let` modifier. */\r\n LET = 1 << 4,\r\n /** Has a `static` modifier. */\r\n STATIC = 1 << 5,\r\n /** Has a `readonly` modifier. */\r\n READONLY = 1 << 6,\r\n /** Has an `abstract` modifier. */\r\n ABSTRACT = 1 << 7,\r\n /** Has a `public` modifier. */\r\n PUBLIC = 1 << 8,\r\n /** Has a `private` modifier. */\r\n PRIVATE = 1 << 9,\r\n /** Has a `protected` modifier. */\r\n PROTECTED = 1 << 10,\r\n /** Has a `get` modifier. */\r\n GET = 1 << 11,\r\n /** Has a `set` modifier. */\r\n SET = 1 << 12,\r\n\r\n // Extended modifiers usually derived from basic modifiers\r\n\r\n /** Is ambient, that is either declared or nested in a declared element. */\r\n AMBIENT = 1 << 13,\r\n /** Is generic. */\r\n GENERIC = 1 << 14,\r\n /** Is part of a generic context. */\r\n GENERIC_CONTEXT = 1 << 15,\r\n /** Is an instance member. */\r\n INSTANCE = 1 << 16,\r\n /** Is a constructor. */\r\n CONSTRUCTOR = 1 << 17,\r\n /** Is an arrow function. */\r\n ARROW = 1 << 18,\r\n /** Is a module export. */\r\n MODULE_EXPORT = 1 << 19,\r\n /** Is a module import. */\r\n MODULE_IMPORT = 1 << 20,\r\n\r\n // Compilation states\r\n\r\n /** Is a builtin. */\r\n BUILTIN = 1 << 21,\r\n /** Is compiled. */\r\n COMPILED = 1 << 22,\r\n /** Has a constant value and is therefore inlined. */\r\n INLINED = 1 << 23,\r\n /** Is scoped. */\r\n SCOPED = 1 << 24,\r\n /** Is a trampoline. */\r\n TRAMPOLINE = 1 << 25,\r\n /** Is a virtual method. */\r\n VIRTUAL = 1 << 26\r\n}\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}\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 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(lo: i32, hi: i32): this {\r\n this.constantValueKind = ConstantValueKind.INTEGER;\r\n this.constantIntegerValue = i64_new(lo, hi);\r\n this.set(CommonFlags.CONST | CommonFlags.INLINED);\r\n return this;\r\n }\r\n\r\n withConstantFloatValue(value: f64): this {\r\n this.constantValueKind = ConstantValueKind.FLOAT;\r\n this.constantFloatValue = value;\r\n this.set(CommonFlags.CONST | CommonFlags.INLINED);\r\n return this;\r\n }\r\n}\r\n\r\n/** A global variable. */\r\nexport class Global extends VariableLikeElement {\r\n\r\n kind = ElementKind.GLOBAL;\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n type: Type,\r\n declaration: VariableLikeDeclarationStatement | null,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName, type, declaration);\r\n this.flags = declaration ? declaration.flags : CommonFlags.NONE;\r\n this.decoratorFlags = decoratorFlags;\r\n this.type = type; // resolved later if `void`\r\n }\r\n}\r\n\r\n/** A function parameter. */\r\nexport class Parameter {\r\n\r\n // not an Element on its own\r\n\r\n /** Parameter name. */\r\n name: string;\r\n /** Parameter type. */\r\n type: Type;\r\n /** Parameter initializer. */\r\n initializer: Expression | null;\r\n\r\n /** Constructs a new function parameter. */\r\n constructor(name: string, type: Type, initializer: Expression | null = null) {\r\n this.name = name;\r\n this.type = type;\r\n this.initializer = initializer;\r\n }\r\n}\r\n\r\n/** A function local. */\r\nexport class Local extends VariableLikeElement {\r\n\r\n kind = ElementKind.LOCAL;\r\n\r\n /** Local index. */\r\n index: i32;\r\n /** Respective scoped global, if any. */\r\n scopedGlobal: Global | null = null;\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n index: i32,\r\n type: Type,\r\n declaration: VariableLikeDeclarationStatement | null = null\r\n ) {\r\n super(program, simpleName, simpleName, type, declaration);\r\n this.index = index;\r\n }\r\n}\r\n\r\n/** A yet unresolved function prototype. */\r\nexport class FunctionPrototype extends Element {\r\n\r\n kind = ElementKind.FUNCTION_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: FunctionDeclaration;\r\n /** If an instance method, the class prototype reference. */\r\n classPrototype: ClassPrototype | null;\r\n /** Resolved instances. */\r\n instances: Map = new Map();\r\n /** Class type arguments, if a partially resolved method of a generic class. Not set otherwise. */\r\n classTypeArguments: Type[] | null = null;\r\n /** Operator kind, if an overload. */\r\n operatorKind: OperatorKind = OperatorKind.INVALID;\r\n\r\n /** Constructs a new function prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FunctionDeclaration,\r\n classPrototype: ClassPrototype | null = null,\r\n decoratorFlags: DecoratorFlags = DecoratorFlags.NONE\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n this.classPrototype = classPrototype;\r\n this.decoratorFlags = decoratorFlags;\r\n }\r\n\r\n /** Resolves this prototype to an instance using the specified concrete type arguments. */\r\n resolve(\r\n functionTypeArguments: Type[] | null = null,\r\n contextualTypeArguments: Map | null = null\r\n ): Function | null {\r\n var instanceKey = functionTypeArguments ? typesToString(functionTypeArguments) : \"\";\r\n var instance = this.instances.get(instanceKey);\r\n if (instance) return instance;\r\n\r\n var declaration = this.declaration;\r\n var isInstance = this.is(CommonFlags.INSTANCE);\r\n var classPrototype = this.classPrototype;\r\n\r\n // inherit contextual type arguments as provided. might be overridden.\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(\r\n inheritedName,\r\n inheritedType\r\n );\r\n }\r\n }\r\n\r\n // override with class type arguments if a partially resolved instance method\r\n var classTypeArguments = this.classTypeArguments;\r\n if (classTypeArguments) { // set only if partially resolved\r\n assert(this.is(CommonFlags.INSTANCE));\r\n let classDeclaration = assert(classPrototype).declaration;\r\n let classTypeParameters = classDeclaration.typeParameters;\r\n let numClassTypeParameters = classTypeParameters.length;\r\n assert(numClassTypeParameters == classTypeArguments.length);\r\n for (let i = 0; i < numClassTypeParameters; ++i) {\r\n contextualTypeArguments.set(\r\n classTypeParameters[i].name.text,\r\n classTypeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!classTypeArguments);\r\n }\r\n\r\n // override with function specific type arguments\r\n var signatureNode = declaration.signature;\r\n var functionTypeParameters = declaration.typeParameters;\r\n var numFunctionTypeArguments: i32;\r\n if (functionTypeArguments && (numFunctionTypeArguments = functionTypeArguments.length)) {\r\n assert(functionTypeParameters && numFunctionTypeArguments == functionTypeParameters.length);\r\n for (let i = 0; i < numFunctionTypeArguments; ++i) {\r\n contextualTypeArguments.set(\r\n (functionTypeParameters)[i].name.text,\r\n functionTypeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!functionTypeParameters || functionTypeParameters.length == 0);\r\n }\r\n\r\n // resolve class if an instance method\r\n var classInstance: Class | null = null;\r\n var thisType: Type | null = null;\r\n if (isInstance) {\r\n classInstance = assert(classPrototype).resolve(classTypeArguments, contextualTypeArguments); // reports\r\n if (!classInstance) return null;\r\n thisType = classInstance.type;\r\n contextualTypeArguments.set(\"this\", thisType);\r\n }\r\n\r\n // resolve signature node\r\n var signatureParameters = signatureNode.parameters;\r\n var signatureParameterCount = signatureParameters.length;\r\n var parameterTypes = new Array(signatureParameterCount);\r\n var parameterNames = new Array(signatureParameterCount);\r\n var requiredParameters = 0;\r\n for (let i = 0; i < signatureParameterCount; ++i) {\r\n let parameterDeclaration = signatureParameters[i];\r\n if (parameterDeclaration.parameterKind == ParameterKind.DEFAULT) {\r\n requiredParameters = i + 1;\r\n }\r\n let typeNode = assert(parameterDeclaration.type);\r\n let parameterType = this.program.resolveType(typeNode, contextualTypeArguments, true); // reports\r\n if (!parameterType) return null;\r\n parameterTypes[i] = parameterType;\r\n parameterNames[i] = parameterDeclaration.name.text;\r\n }\r\n\r\n var returnType: Type;\r\n if (this.is(CommonFlags.SET)) {\r\n returnType = Type.void; // not annotated\r\n } else if (this.is(CommonFlags.CONSTRUCTOR)) {\r\n returnType = assert(classInstance).type; // not annotated\r\n } else {\r\n let typeNode = assert(signatureNode.returnType);\r\n let type = this.program.resolveType(typeNode, contextualTypeArguments, true); // reports\r\n if (!type) return null;\r\n returnType = type;\r\n }\r\n\r\n var signature = new Signature(parameterTypes, returnType, thisType);\r\n signature.parameterNames = parameterNames;\r\n signature.requiredParameters = requiredParameters;\r\n\r\n var internalName = this.internalName;\r\n if (instanceKey.length) internalName += \"<\" + instanceKey + \">\";\r\n instance = new Function(\r\n this,\r\n internalName,\r\n signature,\r\n classInstance\r\n ? classInstance\r\n : classPrototype,\r\n contextualTypeArguments\r\n );\r\n this.instances.set(instanceKey, instance);\r\n this.program.instancesLookup.set(internalName, instance);\r\n return instance;\r\n }\r\n\r\n /** Resolves this prototype partially by applying the specified inherited class type arguments. */\r\n resolvePartial(classTypeArguments: Type[] | null): FunctionPrototype | null {\r\n assert(this.is(CommonFlags.INSTANCE));\r\n var classPrototype = assert(this.classPrototype);\r\n\r\n if (!(classTypeArguments && classTypeArguments.length)) return this; // no need to clone\r\n\r\n var simpleName = this.simpleName;\r\n var partialKey = typesToString(classTypeArguments);\r\n var partialPrototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n classPrototype.internalName + \"<\" + partialKey + \">\" + INSTANCE_DELIMITER + simpleName,\r\n this.declaration,\r\n classPrototype,\r\n this.decoratorFlags\r\n );\r\n partialPrototype.flags = this.flags;\r\n partialPrototype.operatorKind = this.operatorKind;\r\n partialPrototype.classTypeArguments = classTypeArguments;\r\n return partialPrototype;\r\n }\r\n\r\n /** Resolves the specified type arguments prior to resolving this prototype to an instance. */\r\n resolveUsingTypeArguments(\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n reportNode: Node\r\n ): Function | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (this.is(CommonFlags.GENERIC)) {\r\n assert(typeArgumentNodes != null && typeArgumentNodes.length != 0);\r\n resolvedTypeArguments = this.program.resolveTypeArguments( // reports\r\n assert(this.declaration.typeParameters),\r\n typeArgumentNodes,\r\n contextualTypeArguments,\r\n reportNode\r\n );\r\n if (!resolvedTypeArguments) return null;\r\n }\r\n return this.resolve(resolvedTypeArguments, contextualTypeArguments);\r\n }\r\n\r\n /** Resolves the type arguments to use when compiling a built-in call. Must be a built-in. */\r\n resolveBuiltinTypeArguments(\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null\r\n ): Type[] | null {\r\n assert(this.is(CommonFlags.BUILTIN));\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (typeArgumentNodes) {\r\n let k = typeArgumentNodes.length;\r\n resolvedTypeArguments = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let resolvedType = this.program.resolveType( // reports\r\n typeArgumentNodes[i],\r\n contextualTypeArguments,\r\n true\r\n );\r\n if (!resolvedType) return null;\r\n resolvedTypeArguments[i] = resolvedType;\r\n }\r\n }\r\n return resolvedTypeArguments;\r\n }\r\n\r\n toString(): string { return this.simpleName; }\r\n}\r\n\r\n/** A resolved function. */\r\nexport class Function extends Element {\r\n\r\n kind = ElementKind.FUNCTION;\r\n\r\n /** Prototype reference. */\r\n prototype: FunctionPrototype;\r\n /** Function signature. */\r\n signature: Signature;\r\n /** Map of locals by name. */\r\n localsByName: Map = new Map();\r\n /** Array of locals by index. */\r\n localsByIndex: Local[] = [];\r\n /** List of additional non-parameter locals. */\r\n additionalLocals: Type[] = [];\r\n /** Current break context label. */\r\n breakContext: string | null = null;\r\n /** Contextual type arguments. */\r\n contextualTypeArguments: Map | null;\r\n /** Current control flow. */\r\n flow: Flow;\r\n /** Remembered debug locations. */\r\n debugLocations: Range[] = [];\r\n /** Function reference, if compiled. */\r\n ref: FunctionRef = 0;\r\n /** Function table index, if any. */\r\n functionTableIndex: i32 = -1;\r\n /** Trampoline function for calling with omitted arguments. */\r\n trampoline: Function | null = null;\r\n /** The outer scope, if a function expression. */\r\n outerScope: Flow | null = null;\r\n\r\n private nextBreakId: i32 = 0;\r\n private breakStack: i32[] | null = null;\r\n nextInlineId: i32 = 0;\r\n\r\n /** Constructs a new concrete function. */\r\n constructor(\r\n prototype: FunctionPrototype,\r\n internalName: string,\r\n signature: Signature,\r\n parent: Element | null = null,\r\n contextualTypeArguments: Map | null = null\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName);\r\n this.prototype = prototype;\r\n this.signature = signature;\r\n this.parent = parent;\r\n this.flags = prototype.flags;\r\n this.decoratorFlags = prototype.decoratorFlags;\r\n this.contextualTypeArguments = contextualTypeArguments;\r\n if (!(prototype.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN) || prototype.is(CommonFlags.DECLARE))) {\r\n let localIndex = 0;\r\n if (parent && parent.kind == ElementKind.CLASS) {\r\n assert(this.is(CommonFlags.INSTANCE));\r\n let local = new Local(\r\n prototype.program,\r\n \"this\",\r\n localIndex++,\r\n assert(signature.thisType)\r\n );\r\n this.localsByName.set(\"this\", local);\r\n this.localsByIndex[local.index] = local;\r\n let inheritedTypeArguments = (parent).contextualTypeArguments;\r\n if (inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments.has(inheritedName)) {\r\n this.contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n }\r\n } else {\r\n assert(!this.is(CommonFlags.INSTANCE)); // internal error\r\n }\r\n let parameterTypes = signature.parameterTypes;\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) {\r\n let parameterType = parameterTypes[i];\r\n let parameterName = signature.getParameterName(i);\r\n let local = new Local(\r\n prototype.program,\r\n parameterName,\r\n localIndex++,\r\n parameterType\r\n // FIXME: declaration?\r\n );\r\n this.localsByName.set(parameterName, local);\r\n this.localsByIndex[local.index] = local;\r\n }\r\n }\r\n this.flow = Flow.create(this);\r\n }\r\n\r\n /** Adds a local of the specified type, with an optional name. */\r\n addLocal(type: Type, name: string | null = null, declaration: VariableDeclaration | null = null): Local {\r\n // if it has a name, check previously as this method will throw otherwise\r\n var localIndex = this.signature.parameterTypes.length + this.additionalLocals.length;\r\n if (this.is(CommonFlags.INSTANCE)) ++localIndex;\r\n var local = new Local(\r\n this.prototype.program,\r\n name\r\n ? name\r\n : \"var$\" + localIndex.toString(10),\r\n localIndex,\r\n type,\r\n declaration\r\n );\r\n if (name) {\r\n if (this.localsByName.has(name)) throw new Error(\"duplicate local name\");\r\n this.localsByName.set(name, local);\r\n }\r\n this.localsByIndex[local.index] = local;\r\n this.additionalLocals.push(type);\r\n return local;\r\n }\r\n\r\n private tempI32s: Local[] | null = null;\r\n private tempI64s: Local[] | null = null;\r\n private tempF32s: Local[] | null = null;\r\n private tempF64s: Local[] | null = null;\r\n\r\n /** Gets a free temporary local of the specified type. */\r\n getTempLocal(type: Type, wrapped: bool = false): Local {\r\n var temps: Local[] | null;\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s;\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps && temps.length) {\r\n local = temps.pop();\r\n local.type = type;\r\n local.flags = CommonFlags.NONE;\r\n } else {\r\n local = this.addLocal(type);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\r\n return local;\r\n }\r\n\r\n /** Frees the temporary local for reuse. */\r\n freeTempLocal(local: Local): void {\r\n if (local.is(CommonFlags.INLINED)) return;\r\n assert(local.index >= 0);\r\n var temps: Local[];\r\n assert(local.type != null); // internal error\r\n switch ((local.type).toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n assert(local.index >= 0);\r\n temps.push(local);\r\n }\r\n\r\n /** Gets and immediately frees a temporary local of the specified type. */\r\n getAndFreeTempLocal(type: Type, wrapped: bool): Local {\r\n var temps: Local[];\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps.length) {\r\n local = temps[temps.length - 1];\r\n local.type = type;\r\n } else {\r\n local = this.addLocal(type);\r\n temps.push(local);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\r\n return local;\r\n }\r\n\r\n /** Enters a(nother) break context. */\r\n enterBreakContext(): string {\r\n var id = this.nextBreakId++;\r\n if (!this.breakStack) this.breakStack = [ id ];\r\n else this.breakStack.push(id);\r\n return this.breakContext = id.toString(10);\r\n }\r\n\r\n /** Leaves the current break context. */\r\n leaveBreakContext(): void {\r\n assert(this.breakStack != null);\r\n var length = (this.breakStack).length;\r\n assert(length > 0);\r\n (this.breakStack).pop();\r\n if (length > 1) {\r\n this.breakContext = (this.breakStack)[length - 2].toString(10);\r\n } else {\r\n this.breakContext = null;\r\n this.breakStack = null;\r\n }\r\n }\r\n\r\n /** Finalizes the function once compiled, releasing no longer needed resources. */\r\n finalize(module: Module, ref: FunctionRef): void {\r\n this.ref = ref;\r\n assert(!this.breakStack || !this.breakStack.length); // internal error\r\n this.breakStack = null;\r\n this.breakContext = null;\r\n this.tempI32s = this.tempI64s = this.tempF32s = this.tempF64s = null;\r\n if (this.program.options.sourceMap) {\r\n let debugLocations = this.debugLocations;\r\n for (let i = 0, k = debugLocations.length; i < k; ++i) {\r\n let debugLocation = debugLocations[i];\r\n module.setDebugLocation(\r\n ref,\r\n debugLocation.debugInfoRef,\r\n debugLocation.source.debugInfoIndex,\r\n debugLocation.line,\r\n debugLocation.column\r\n );\r\n }\r\n }\r\n }\r\n\r\n /** Returns the TypeScript representation of this function. */\r\n toString(): string { return this.prototype.simpleName; }\r\n}\r\n\r\n/** A resolved function target, that is a function called indirectly by an index and signature. */\r\nexport class FunctionTarget extends Element {\r\n\r\n kind = ElementKind.FUNCTION_TARGET;\r\n\r\n /** Underlying signature. */\r\n signature: Signature;\r\n /** Function type. */\r\n type: Type;\r\n\r\n /** Constructs a new function target. */\r\n constructor(program: Program, signature: Signature) {\r\n super(program, \"\", \"\");\r\n var simpleName = signature.toSignatureString();\r\n this.simpleName = simpleName;\r\n this.internalName = simpleName;\r\n this.signature = signature;\r\n this.type = Type.u32.asFunction(signature);\r\n }\r\n}\r\n\r\n/** A yet unresolved instance field prototype. */\r\nexport class FieldPrototype extends Element {\r\n\r\n kind = ElementKind.FIELD_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: FieldDeclaration;\r\n /** Parent class prototype. */\r\n classPrototype: ClassPrototype;\r\n\r\n /** Constructs a new field prototype. */\r\n constructor(\r\n classPrototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FieldDeclaration\r\n ) {\r\n super(classPrototype.program, simpleName, internalName);\r\n this.classPrototype = classPrototype;\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n }\r\n}\r\n\r\n/** A resolved instance field. */\r\nexport class Field extends VariableLikeElement {\r\n\r\n kind = ElementKind.FIELD;\r\n\r\n /** Field prototype reference. */\r\n prototype: FieldPrototype;\r\n /** Field memory offset, if an instance field. */\r\n memoryOffset: i32 = -1;\r\n\r\n /** Constructs a new field. */\r\n constructor(\r\n prototype: FieldPrototype,\r\n internalName: string,\r\n type: Type,\r\n declaration: FieldDeclaration,\r\n parent: Class\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName, type, declaration);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.type = type;\r\n this.parent = parent;\r\n }\r\n}\r\n\r\n/** A property comprised of a getter and a setter function. */\r\nexport class Property extends Element {\r\n\r\n kind = ElementKind.PROPERTY;\r\n\r\n /** Parent class prototype. */\r\n parent: ClassPrototype;\r\n /** Getter prototype. */\r\n getterPrototype: FunctionPrototype | null = null;\r\n /** Setter prototype. */\r\n setterPrototype: FunctionPrototype | null = null;\r\n\r\n /** Constructs a new property prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n parent: ClassPrototype\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.parent = parent;\r\n }\r\n}\r\n\r\n/** A yet unresolved class prototype. */\r\nexport class ClassPrototype extends Element {\r\n\r\n kind = ElementKind.CLASS_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: ClassDeclaration;\r\n /** Resolved instances. */\r\n instances: Map = new Map();\r\n /** Instance member prototypes. */\r\n instanceMembers: Map | null = null;\r\n /** Base class prototype, if applicable. */\r\n basePrototype: ClassPrototype | null = null; // set in Program#initialize\r\n /** Constructor prototype. */\r\n constructorPrototype: FunctionPrototype | null = null;\r\n /** Operator overload prototypes. */\r\n overloadPrototypes: Map = new Map();\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: ClassDeclaration,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n this.decoratorFlags = decoratorFlags;\r\n }\r\n\r\n /** Resolves this prototype to an instance using the specified concrete type arguments. */\r\n resolve(\r\n typeArguments: Type[] | null,\r\n contextualTypeArguments: Map | null = null\r\n ): Class | null {\r\n var instanceKey = typeArguments ? typesToString(typeArguments) : \"\";\r\n var instance = this.instances.get(instanceKey);\r\n if (instance) return instance;\r\n\r\n // inherit contextual type arguments\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n\r\n var declaration = this.declaration;\r\n var baseClass: Class | null = null;\r\n if (declaration.extendsType) {\r\n let baseClassType = this.program.resolveType(declaration.extendsType, null); // reports\r\n if (!baseClassType) return null;\r\n if (!(baseClass = baseClassType.classReference)) {\r\n this.program.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n declaration.extendsType.range\r\n );\r\n return null;\r\n }\r\n if (baseClass.hasDecorator(DecoratorFlags.SEALED)) {\r\n this.program.error(\r\n DiagnosticCode.Class_0_is_sealed_and_cannot_be_extended,\r\n declaration.extendsType.range, baseClass.internalName\r\n );\r\n return null;\r\n }\r\n if (baseClass.hasDecorator(DecoratorFlags.UNMANAGED) != this.hasDecorator(DecoratorFlags.UNMANAGED)) {\r\n this.program.error(\r\n DiagnosticCode.Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa,\r\n Range.join(declaration.name.range, declaration.extendsType.range)\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n // override call specific contextual type arguments if provided\r\n var i: i32, k: i32;\r\n if (typeArguments) {\r\n if ((k = typeArguments.length) != declaration.typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n for (i = 0; i < k; ++i) {\r\n contextualTypeArguments.set(declaration.typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n } else if (declaration.typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n\r\n var simpleName = this.simpleName;\r\n var internalName = this.internalName;\r\n if (instanceKey.length) {\r\n simpleName += \"<\" + instanceKey + \">\";\r\n internalName += \"<\" + instanceKey + \">\";\r\n }\r\n instance = new Class(this, simpleName, internalName, typeArguments, baseClass);\r\n instance.contextualTypeArguments = contextualTypeArguments;\r\n this.instances.set(instanceKey, instance);\r\n this.program.instancesLookup.set(internalName, instance);\r\n\r\n var memoryOffset: u32 = 0;\r\n if (baseClass) {\r\n memoryOffset = baseClass.currentMemoryOffset;\r\n if (baseClass.members) {\r\n if (!instance.members) instance.members = new Map();\r\n for (let inheritedMember of baseClass.members.values()) {\r\n instance.members.set(inheritedMember.simpleName, inheritedMember);\r\n }\r\n }\r\n }\r\n\r\n // Resolve constructor\r\n if (this.constructorPrototype) {\r\n let partialConstructor = this.constructorPrototype.resolvePartial(typeArguments); // reports\r\n if (partialConstructor) instance.constructorInstance = partialConstructor.resolve(); // reports\r\n }\r\n\r\n // Resolve instance members\r\n if (this.instanceMembers) {\r\n for (let member of this.instanceMembers.values()) {\r\n switch (member.kind) {\r\n\r\n // Lay out fields in advance\r\n case ElementKind.FIELD_PROTOTYPE: {\r\n if (!instance.members) instance.members = new Map();\r\n let fieldDeclaration = (member).declaration;\r\n if (!fieldDeclaration.type) {\r\n throw new Error(\"type expected\"); // TODO: check if parent class defines a type\r\n }\r\n let fieldType = this.program.resolveType( // reports\r\n fieldDeclaration.type,\r\n instance.contextualTypeArguments\r\n );\r\n if (!fieldType) break;\r\n let fieldInstance = new Field(\r\n member,\r\n internalName + INSTANCE_DELIMITER + (member).simpleName,\r\n fieldType,\r\n fieldDeclaration,\r\n instance\r\n );\r\n switch (fieldType.byteSize) { // align\r\n case 1: break;\r\n case 2: {\r\n if (memoryOffset & 1) ++memoryOffset;\r\n break;\r\n }\r\n case 4: {\r\n if (memoryOffset & 3) memoryOffset = (memoryOffset | 3) + 1;\r\n break;\r\n }\r\n case 8: {\r\n if (memoryOffset & 7) memoryOffset = (memoryOffset | 7) + 1;\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n fieldInstance.memoryOffset = memoryOffset;\r\n memoryOffset += fieldType.byteSize;\r\n instance.members.set(member.simpleName, fieldInstance);\r\n break;\r\n }\r\n\r\n // Partially resolve methods as these might have type arguments on their own\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (!instance.members) instance.members = new Map();\r\n let partialPrototype = (member).resolvePartial(typeArguments); // reports\r\n if (partialPrototype) {\r\n partialPrototype.internalName = internalName + INSTANCE_DELIMITER + partialPrototype.simpleName;\r\n instance.members.set(member.simpleName, partialPrototype);\r\n }\r\n break;\r\n }\r\n\r\n // Clone properties and partially resolve the wrapped accessors for consistence with other methods\r\n case ElementKind.PROPERTY: {\r\n if (!instance.members) instance.members = new Map();\r\n let getterPrototype = assert((member).getterPrototype);\r\n let setterPrototype = (member).setterPrototype;\r\n let instanceProperty = new Property(\r\n this.program,\r\n member.simpleName,\r\n internalName + INSTANCE_DELIMITER + member.simpleName,\r\n this\r\n );\r\n let partialGetterPrototype = getterPrototype.resolvePartial(typeArguments);\r\n if (!partialGetterPrototype) return null;\r\n partialGetterPrototype.internalName = (\r\n internalName + INSTANCE_DELIMITER + partialGetterPrototype.simpleName\r\n );\r\n instanceProperty.getterPrototype = partialGetterPrototype;\r\n if (setterPrototype) {\r\n let partialSetterPrototype = setterPrototype.resolvePartial(typeArguments);\r\n if (!partialSetterPrototype) return null;\r\n partialSetterPrototype.internalName = (\r\n internalName + INSTANCE_DELIMITER + partialSetterPrototype.simpleName\r\n );\r\n instanceProperty.setterPrototype = partialSetterPrototype;\r\n }\r\n instance.members.set(member.simpleName, instanceProperty);\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n }\r\n\r\n // Fully resolve operator overloads (don't have type parameters on their own)\r\n for (let [kind, prototype] of this.overloadPrototypes) {\r\n assert(kind != OperatorKind.INVALID);\r\n let operatorInstance: Function | null;\r\n if (prototype.is(CommonFlags.INSTANCE)) {\r\n let operatorPartial = prototype.resolvePartial(typeArguments); // reports\r\n if (!operatorPartial) continue;\r\n operatorInstance = operatorPartial.resolve(); // reports\r\n } else {\r\n operatorInstance = prototype.resolve(); // reports\r\n }\r\n if (!operatorInstance) continue;\r\n let overloads = instance.overloads;\r\n if (!overloads) instance.overloads = overloads = new Map();\r\n overloads.set(kind, operatorInstance);\r\n }\r\n\r\n instance.currentMemoryOffset = memoryOffset; // offsetof() is the class' byte size in memory\r\n return instance;\r\n }\r\n\r\n /** Resolves the specified type arguments prior to resolving this prototype to an instance. */\r\n resolveUsingTypeArguments(\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n alternativeReportNode: Node | null\r\n ): Class | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (this.is(CommonFlags.GENERIC)) {\r\n assert(typeArgumentNodes != null && typeArgumentNodes.length != 0);\r\n resolvedTypeArguments = this.program.resolveTypeArguments(\r\n this.declaration.typeParameters,\r\n typeArgumentNodes,\r\n contextualTypeArguments,\r\n alternativeReportNode\r\n );\r\n if (!resolvedTypeArguments) return null;\r\n } else {\r\n assert(typeArgumentNodes == null || !typeArgumentNodes.length);\r\n }\r\n return this.resolve(resolvedTypeArguments, contextualTypeArguments);\r\n }\r\n\r\n toString(): string {\r\n return this.simpleName;\r\n }\r\n}\r\n\r\n/** A resolved class. */\r\nexport class Class extends Element {\r\n\r\n kind = ElementKind.CLASS;\r\n\r\n /** Prototype reference. */\r\n prototype: ClassPrototype;\r\n /** Resolved type arguments. */\r\n typeArguments: Type[] | null;\r\n /** Resolved class type. */\r\n type: Type;\r\n /** Base class, if applicable. */\r\n base: Class | null;\r\n /** Contextual type arguments for fields and methods. */\r\n contextualTypeArguments: Map | null = null;\r\n /** Current member memory offset. */\r\n currentMemoryOffset: u32 = 0;\r\n /** Constructor instance. */\r\n constructorInstance: Function | null = null;\r\n /** Operator overloads. */\r\n overloads: Map | null = null;\r\n\r\n /** Constructs a new class. */\r\n constructor(\r\n prototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n typeArguments: Type[] | null = null,\r\n base: Class | null = null\r\n ) {\r\n super(prototype.program, simpleName, internalName);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.decoratorFlags = prototype.decoratorFlags;\r\n this.typeArguments = typeArguments;\r\n this.type = prototype.program.options.usizeType.asClass(this);\r\n this.base = base;\r\n\r\n // inherit static members and contextual type arguments from base class\r\n if (base) {\r\n let inheritedTypeArguments = base.contextualTypeArguments;\r\n if (inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [baseName, baseType] of inheritedTypeArguments) {\r\n this.contextualTypeArguments.set(baseName, baseType);\r\n }\r\n }\r\n }\r\n\r\n // apply instance-specific contextual type arguments\r\n var declaration = this.prototype.declaration;\r\n var i: i32, k: i32;\r\n if (declaration) { // irrelevant for built-ins\r\n let typeParameters = declaration.typeParameters;\r\n if (typeArguments) {\r\n if ((k = typeArguments.length) != typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n if (k) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (i = 0; i < k; ++i) {\r\n this.contextualTypeArguments.set(typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n }\r\n } else if (typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n }\r\n }\r\n\r\n /** Tests if a value of this class type is assignable to a target of the specified class type. */\r\n isAssignableTo(target: Class): bool {\r\n var current: Class | null = this;\r\n do if (current == target) return true;\r\n while (current = current.base);\r\n return false;\r\n }\r\n\r\n /** Looks up the operator overload of the specified kind. */\r\n lookupOverload(kind: OperatorKind, unchecked: bool = false): Function | null {\r\n if (unchecked) {\r\n switch (kind) {\r\n case OperatorKind.INDEXED_GET: {\r\n let uncheckedOverload = this.lookupOverload(OperatorKind.UNCHECKED_INDEXED_GET);\r\n if (uncheckedOverload) return uncheckedOverload;\r\n break;\r\n }\r\n case OperatorKind.INDEXED_SET: {\r\n let uncheckedOverload = this.lookupOverload(OperatorKind.UNCHECKED_INDEXED_SET);\r\n if (uncheckedOverload) return uncheckedOverload;\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n var instance: Class | null = this;\r\n do {\r\n let overloads = instance.overloads;\r\n if (overloads) {\r\n let overload = overloads.get(kind);\r\n if (overload) return overload;\r\n }\r\n } while (instance = instance.base);\r\n return null;\r\n }\r\n\r\n toString(): string {\r\n return this.simpleName;\r\n }\r\n}\r\n\r\n/** A yet unresolved interface. */\r\nexport class InterfacePrototype extends ClassPrototype {\r\n\r\n kind = ElementKind.INTERFACE_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: InterfaceDeclaration; // more specific\r\n\r\n /** Constructs a new interface prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: InterfaceDeclaration,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName, declaration, decoratorFlags);\r\n }\r\n}\r\n\r\n/** A resolved interface. */\r\nexport class Interface extends Class {\r\n\r\n kind = ElementKind.INTERFACE;\r\n\r\n /** Prototype reference. */\r\n prototype: InterfacePrototype; // more specific\r\n /** Base interface, if applcable. */\r\n base: Interface | null; // more specific\r\n\r\n /** Constructs a new interface. */\r\n constructor(\r\n prototype: InterfacePrototype,\r\n simpleName: string,\r\n internalName: string,\r\n typeArguments: Type[] = [],\r\n base: Interface | null = null\r\n ) {\r\n super(prototype, simpleName, internalName, typeArguments, base);\r\n }\r\n}\r\n\r\n/** Control flow flags indicating specific conditions. */\r\nexport const enum FlowFlags {\r\n /** No specific conditions. */\r\n NONE = 0,\r\n\r\n /** This branch always returns. */\r\n RETURNS = 1 << 0,\r\n /** This branch always throws. */\r\n THROWS = 1 << 1,\r\n /** This branch always breaks. */\r\n BREAKS = 1 << 2,\r\n /** This branch always continues. */\r\n CONTINUES = 1 << 3,\r\n /** This branch always allocates. Constructors only. */\r\n ALLOCATES = 1 << 4,\r\n\r\n /** This branch conditionally returns in a child branch. */\r\n CONDITIONALLY_RETURNS = 1 << 5,\r\n /** This branch conditionally throws in a child branch. */\r\n CONDITIONALLY_THROWS = 1 << 6,\r\n /** This branch conditionally breaks in a child branch. */\r\n CONDITIONALLY_BREAKS = 1 << 7,\r\n /** This branch conditionally continues in a child branch. */\r\n CONDITIONALLY_CONTINUES = 1 << 8,\r\n /** This branch conditionally allocates in a child branch. Constructors only. */\r\n CONDITIONALLY_ALLOCATES = 1 << 9,\r\n\r\n /** This branch is part of inlining a function. */\r\n INLINE_CONTEXT = 1 << 10,\r\n /** This branch explicitly requests no bounds checking. */\r\n UNCHECKED_CONTEXT = 1 << 11,\r\n /** This branch returns a properly wrapped value. */\r\n RETURNS_WRAPPED = 1 << 12,\r\n\r\n /** This branch is terminated if any of these flags is set. */\r\n TERMINATED = FlowFlags.RETURNS | FlowFlags.THROWS | FlowFlags.BREAKS | FlowFlags.CONTINUES\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 /** Enters a new branch or scope and returns the new flow. */\r\n enterBranchOrScope(): 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 /** Leaves the current branch or scope and returns the parent flow. */\r\n leaveBranchOrScope(propagate: bool = true): Flow {\r\n var parent = assert(this.parent);\r\n\r\n // Free block-scoped locals\r\n if (this.scopedLocals) {\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\r\n // Propagate conditionaal flags to parent\r\n if (propagate) {\r\n if (this.is(FlowFlags.RETURNS)) {\r\n parent.set(FlowFlags.CONDITIONALLY_RETURNS);\r\n }\r\n if (this.is(FlowFlags.THROWS)) {\r\n parent.set(FlowFlags.CONDITIONALLY_THROWS);\r\n }\r\n if (this.is(FlowFlags.BREAKS) && parent.breakLabel == this.breakLabel) {\r\n parent.set(FlowFlags.CONDITIONALLY_BREAKS);\r\n }\r\n if (this.is(FlowFlags.CONTINUES) && parent.continueLabel == this.continueLabel) {\r\n parent.set(FlowFlags.CONDITIONALLY_CONTINUES);\r\n }\r\n if (this.is(FlowFlags.ALLOCATES)) {\r\n parent.set(FlowFlags.CONDITIONALLY_ALLOCATES);\r\n }\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. on inner block). */\r\n inherit(other: Flow): void {\r\n this.flags |= other.flags & (\r\n 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 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 mutual flags and local wrap states from the specified flows (e.g. on then/else branches). */\r\n inheritMutual(left: Flow, right: Flow): void {\r\n // flags set in both arms\r\n this.flags |= left.flags & right.flags & (\r\n 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 // locals wrapped in both arms\r\n this.wrappedLocals = i64_and(\r\n left.wrappedLocals,\r\n right.wrappedLocals\r\n );\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 * Various compiler utilities.\r\n * @module util\r\n * @preferred\r\n *//***/\r\n\r\nexport * from \"./charcode\";\r\nexport * from \"./path\";\r\nexport * from \"./text\";\r\nexport * from \"./binary\";\r\n","/**\r\n * Shared diagnostic handling inherited by the parser and the compiler.\r\n * @module diagnostics\r\n * @preferred\r\n *//***/\r\n\r\nimport {\r\n Range\r\n} from \"./ast\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\nimport {\r\n isLineBreak\r\n} from \"./util\";\r\n\r\nexport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\n/** Indicates the category of a {@link DiagnosticMessage}. */\r\nexport enum DiagnosticCategory {\r\n /** Informatory message. */\r\n INFO,\r\n /** Warning message. */\r\n WARNING,\r\n /** Error message. */\r\n ERROR\r\n}\r\n\r\n/** Returns the string representation of the specified diagnostic category. */\r\nexport function diagnosticCategoryToString(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return \"INFO\";\r\n case DiagnosticCategory.WARNING: return \"WARNING\";\r\n case DiagnosticCategory.ERROR: return \"ERROR\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\n/** ANSI escape sequence for blue foreground. */\r\nexport const COLOR_BLUE: string = \"\\u001b[96m\";\r\n/** ANSI escape sequence for yellow foreground. */\r\nexport const COLOR_YELLOW: string = \"\\u001b[93m\";\r\n/** ANSI escape sequence for red foreground. */\r\nexport const COLOR_RED: string = \"\\u001b[91m\";\r\n/** ANSI escape sequence to reset the foreground color. */\r\nexport const COLOR_RESET: string = \"\\u001b[0m\";\r\n\r\n/** Returns the ANSI escape sequence for the specified category. */\r\nexport function diagnosticCategoryToColor(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return COLOR_BLUE;\r\n case DiagnosticCategory.WARNING: return COLOR_YELLOW;\r\n case DiagnosticCategory.ERROR: return COLOR_RED;\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\n/** Represents a diagnostic message. */\r\nexport class DiagnosticMessage {\r\n\r\n /** Message code. */\r\n code: i32;\r\n /** Message category. */\r\n category: DiagnosticCategory;\r\n /** Message text. */\r\n message: string;\r\n /** Respective source range, if any. */\r\n range: Range | null = null;\r\n\r\n /** Constructs a new diagnostic message. */\r\n private constructor(code: i32, category: DiagnosticCategory, message: string) {\r\n this.code = code;\r\n this.category = category;\r\n this.message = message;\r\n }\r\n\r\n /** Creates a new diagnostic message of the specified category. */\r\n static create(\r\n code: DiagnosticCode,\r\n category: DiagnosticCategory,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): DiagnosticMessage {\r\n var message = diagnosticCodeToString(code);\r\n if (arg0 != null) message = message.replace(\"{0}\", arg0);\r\n if (arg1 != null) message = message.replace(\"{1}\", arg1);\r\n if (arg2 != null) message = message.replace(\"{2}\", arg2);\r\n return new DiagnosticMessage(code, category, message);\r\n }\r\n\r\n /** Creates a new informatory diagnostic message. */\r\n static createInfo(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.INFO, arg0, arg1);\r\n }\r\n\r\n /** Creates a new warning diagnostic message. */\r\n static createWarning(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.WARNING, arg0, arg1);\r\n }\r\n\r\n /** Creates a new error diagnostic message. */\r\n static createError(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.ERROR, arg0, arg1);\r\n }\r\n\r\n /** Adds a source range to this message. */\r\n withRange(range: Range): this {\r\n this.range = range;\r\n return this;\r\n }\r\n\r\n /** Converts this message to a string. */\r\n toString(): string {\r\n if (this.range) {\r\n return (\r\n diagnosticCategoryToString(this.category) +\r\n \" \" +\r\n this.code.toString(10) +\r\n \": \\\"\" +\r\n this.message +\r\n \"\\\" in \" +\r\n this.range.source.normalizedPath +\r\n \":\" +\r\n this.range.line.toString(10) +\r\n \":\" +\r\n this.range.column.toString(10)\r\n );\r\n }\r\n return (\r\n diagnosticCategoryToString(this.category) +\r\n \" \" +\r\n this.code.toString(10) +\r\n \": \" +\r\n this.message\r\n );\r\n }\r\n}\r\n\r\n/** Formats a diagnostic message, optionally with terminal colors and source context. */\r\nexport function formatDiagnosticMessage(\r\n message: DiagnosticMessage,\r\n useColors: bool = false,\r\n showContext: bool = false\r\n): string {\r\n\r\n // general information\r\n var sb: string[] = [];\r\n if (useColors) sb.push(diagnosticCategoryToColor(message.category));\r\n sb.push(diagnosticCategoryToString(message.category));\r\n if (useColors) sb.push(COLOR_RESET);\r\n sb.push(message.code < 1000 ? \" AS\" : \" TS\");\r\n sb.push(message.code.toString(10));\r\n sb.push(\": \");\r\n sb.push(message.message);\r\n\r\n // include range information if available\r\n if (message.range) {\r\n\r\n // include context information if requested\r\n let range = message.range;\r\n if (showContext) {\r\n sb.push(\"\\n\");\r\n sb.push(formatDiagnosticContext(message.range, useColors));\r\n }\r\n\r\n sb.push(\"\\n\");\r\n sb.push(\" in \");\r\n sb.push(range.source.normalizedPath);\r\n sb.push(\"(\");\r\n sb.push(range.line.toString(10));\r\n sb.push(\",\");\r\n sb.push(range.column.toString(10));\r\n sb.push(\")\");\r\n }\r\n return sb.join(\"\");\r\n}\r\n\r\n/** Formats the diagnostic context for the specified range, optionally with terminal colors. */\r\nexport function formatDiagnosticContext(range: Range, useColors: bool = false): string {\r\n var text = range.source.text;\r\n var len = text.length;\r\n var start = range.start;\r\n var end = range.end;\r\n while (start > 0 && !isLineBreak(text.charCodeAt(start - 1))) start--;\r\n while (end < len && !isLineBreak(text.charCodeAt(end))) end++;\r\n var sb: string[] = [\r\n \"\\n \",\r\n text.substring(start, end),\r\n \"\\n \"\r\n ];\r\n while (start < range.start) {\r\n sb.push(\" \");\r\n start++;\r\n }\r\n if (useColors) sb.push(COLOR_RED);\r\n if (range.start == range.end) {\r\n sb.push(\"^\");\r\n } else {\r\n while (start++ < range.end) sb.push(\"~\");\r\n }\r\n if (useColors) sb.push(COLOR_RESET);\r\n return sb.join(\"\");\r\n}\r\n\r\n/** Base class of all diagnostic emitters. */\r\nexport abstract class DiagnosticEmitter {\r\n\r\n /** Diagnostic messages emitted so far. */\r\n diagnostics: DiagnosticMessage[];\r\n\r\n /** Initializes this diagnostic emitter. */\r\n protected constructor(diagnostics: DiagnosticMessage[] | null = null) {\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n }\r\n\r\n /** Emits a diagnostic message of the specified category. */\r\n emitDiagnostic(\r\n code: DiagnosticCode,\r\n category: DiagnosticCategory,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n var message = DiagnosticMessage.create(code, category, arg0, arg1, arg2).withRange(range);\r\n this.diagnostics.push(message);\r\n // console.log(formatDiagnosticMessage(message, true, true) + \"\\n\"); // temporary\r\n // console.log(new Error(\"stack\").stack);\r\n }\r\n\r\n /** Emits an informatory diagnostic message. */\r\n info(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.INFO, range, arg0, arg1, arg2);\r\n }\r\n\r\n /** Emits a warning diagnostic message. */\r\n warning(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.WARNING, range, arg0, arg1, arg2);\r\n }\r\n\r\n /** Emits an error diagnostic message. */\r\n error(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.ERROR, range, arg0, arg1, arg2);\r\n }\r\n}\r\n","/**\r\n * A thin wrapper around Binaryen's C-API.\r\n * @module module\r\n *//***/\r\n\r\nimport {\r\n Target\r\n} from \"./compiler\";\r\n\r\nexport type ModuleRef = usize;\r\nexport type FunctionTypeRef = usize;\r\nexport type FunctionRef = usize;\r\nexport type ExpressionRef = usize;\r\nexport type GlobalRef = usize;\r\nexport type ImportRef = usize;\r\nexport type ExportRef = usize;\r\nexport type Index = u32;\r\n\r\nexport enum NativeType {\r\n None = _BinaryenTypeNone(),\r\n I32 = _BinaryenTypeInt32(),\r\n I64 = _BinaryenTypeInt64(),\r\n F32 = _BinaryenTypeFloat32(),\r\n F64 = _BinaryenTypeFloat64(),\r\n Unreachable = _BinaryenTypeUnreachable(),\r\n Auto = _BinaryenTypeAuto()\r\n}\r\n\r\nexport enum ExpressionId {\r\n Invalid = _BinaryenInvalidId(),\r\n Block = _BinaryenBlockId(),\r\n If = _BinaryenIfId(),\r\n Loop = _BinaryenLoopId(),\r\n Break = _BinaryenBreakId(),\r\n Switch = _BinaryenSwitchId(),\r\n Call = _BinaryenCallId(),\r\n CallImport = _BinaryenCallImportId(),\r\n CallIndirect = _BinaryenCallIndirectId(),\r\n GetLocal = _BinaryenGetLocalId(),\r\n SetLocal = _BinaryenSetLocalId(),\r\n GetGlobal = _BinaryenGetGlobalId(),\r\n SetGlobal = _BinaryenSetGlobalId(),\r\n Load = _BinaryenLoadId(),\r\n Store = _BinaryenStoreId(),\r\n Const = _BinaryenConstId(),\r\n Unary = _BinaryenUnaryId(),\r\n Binary = _BinaryenBinaryId(),\r\n Select = _BinaryenSelectId(),\r\n Drop = _BinaryenDropId(),\r\n Return = _BinaryenReturnId(),\r\n Host = _BinaryenHostId(),\r\n Nop = _BinaryenNopId(),\r\n Unreachable = _BinaryenUnreachableId(),\r\n AtomicCmpxchg = _BinaryenAtomicCmpxchgId(),\r\n AtomicRMW = _BinaryenAtomicRMWId(),\r\n AtomicWait = _BinaryenAtomicWaitId(),\r\n AtomicWake = _BinaryenAtomicWakeId()\r\n}\r\n\r\nexport enum UnaryOp {\r\n ClzI32 = _BinaryenClzInt32(),\r\n CtzI32 = _BinaryenCtzInt32(),\r\n PopcntI32 = _BinaryenPopcntInt32(),\r\n NegF32 = _BinaryenNegFloat32(),\r\n AbsF32 = _BinaryenAbsFloat32(),\r\n CeilF32 = _BinaryenCeilFloat32(),\r\n FloorF32 = _BinaryenFloorFloat32(),\r\n TruncF32 = _BinaryenTruncFloat32(),\r\n NearestF32 = _BinaryenNearestFloat32(),\r\n SqrtF32 = _BinaryenSqrtFloat32(),\r\n EqzI32 = _BinaryenEqZInt32(),\r\n ClzI64 = _BinaryenClzInt64(),\r\n CtzI64 = _BinaryenCtzInt64(),\r\n PopcntI64 = _BinaryenPopcntInt64(),\r\n NegF64 = _BinaryenNegFloat64(),\r\n AbsF64 = _BinaryenAbsFloat64(),\r\n CeilF64 = _BinaryenCeilFloat64(),\r\n FloorF64 = _BinaryenFloorFloat64(),\r\n TruncF64 = _BinaryenTruncFloat64(),\r\n NearestF64 = _BinaryenNearestFloat64(),\r\n SqrtF64 = _BinaryenSqrtFloat64(),\r\n EqzI64 = _BinaryenEqZInt64(),\r\n ExtendI32 = _BinaryenExtendSInt32(),\r\n ExtendU32 = _BinaryenExtendUInt32(),\r\n WrapI64 = _BinaryenWrapInt64(),\r\n TruncF32ToI32 = _BinaryenTruncSFloat32ToInt32(),\r\n TruncF32ToI64 = _BinaryenTruncSFloat32ToInt64(),\r\n TruncF32ToU32 = _BinaryenTruncUFloat32ToInt32(),\r\n TruncF32ToU64 = _BinaryenTruncUFloat32ToInt64(),\r\n TruncF64ToI32 = _BinaryenTruncSFloat64ToInt32(),\r\n TruncF64ToI64 = _BinaryenTruncSFloat64ToInt64(),\r\n TruncF64ToU32 = _BinaryenTruncUFloat64ToInt32(),\r\n TruncF64ToU64 = _BinaryenTruncUFloat64ToInt64(),\r\n ReinterpretF32 = _BinaryenReinterpretFloat32(),\r\n ReinterpretF64 = _BinaryenReinterpretFloat64(),\r\n ConvertI32ToF32 = _BinaryenConvertSInt32ToFloat32(),\r\n ConvertI32ToF64 = _BinaryenConvertSInt32ToFloat64(),\r\n ConvertU32ToF32 = _BinaryenConvertUInt32ToFloat32(),\r\n ConvertU32ToF64 = _BinaryenConvertUInt32ToFloat64(),\r\n ConvertI64ToF32 = _BinaryenConvertSInt64ToFloat32(),\r\n ConvertI64ToF64 = _BinaryenConvertSInt64ToFloat64(),\r\n ConvertU64ToF32 = _BinaryenConvertUInt64ToFloat32(),\r\n ConvertU64ToF64 = _BinaryenConvertUInt64ToFloat64(),\r\n PromoteF32 = _BinaryenPromoteFloat32(),\r\n DemoteF64 = _BinaryenDemoteFloat64(),\r\n ReinterpretI32 = _BinaryenReinterpretInt32(),\r\n ReinterpretI64 = _BinaryenReinterpretInt64(),\r\n\r\n // see: https://github.com/WebAssembly/sign-extension-ops\r\n ExtendI8ToI32 = _BinaryenExtendS8Int32(),\r\n ExtendI16ToI32 = _BinaryenExtendS16Int32(),\r\n ExtendI8ToI64 = _BinaryenExtendS8Int64(),\r\n ExtendI16ToI64 = _BinaryenExtendS16Int64(),\r\n ExtendI32ToI64 = _BinaryenExtendS32Int64()\r\n\r\n // see: https://github.com/WebAssembly/nontrapping-float-to-int-conversions\r\n // TruncF32ToI32Sat\r\n // TruncF32ToU32Sat\r\n // TruncF64ToI32Sat\r\n // TruncF64ToU32Sat\r\n // TruncF32ToI64Sat\r\n // TruncF32ToU64Sat\r\n // TruncF64ToI64Sat\r\n // TruncF64ToU64Sat\r\n}\r\n\r\nexport enum BinaryOp {\r\n AddI32 = _BinaryenAddInt32(),\r\n SubI32 = _BinaryenSubInt32(),\r\n MulI32 = _BinaryenMulInt32(),\r\n DivI32 = _BinaryenDivSInt32(),\r\n DivU32 = _BinaryenDivUInt32(),\r\n RemI32 = _BinaryenRemSInt32(),\r\n RemU32 = _BinaryenRemUInt32(),\r\n AndI32 = _BinaryenAndInt32(),\r\n OrI32 = _BinaryenOrInt32(),\r\n XorI32 = _BinaryenXorInt32(),\r\n ShlI32 = _BinaryenShlInt32(),\r\n ShrU32 = _BinaryenShrUInt32(),\r\n ShrI32 = _BinaryenShrSInt32(),\r\n RotlI32 = _BinaryenRotLInt32(),\r\n RotrI32 = _BinaryenRotRInt32(),\r\n EqI32 = _BinaryenEqInt32(),\r\n NeI32 = _BinaryenNeInt32(),\r\n LtI32 = _BinaryenLtSInt32(),\r\n LtU32 = _BinaryenLtUInt32(),\r\n LeI32 = _BinaryenLeSInt32(),\r\n LeU32 = _BinaryenLeUInt32(),\r\n GtI32 = _BinaryenGtSInt32(),\r\n GtU32 = _BinaryenGtUInt32(),\r\n GeI32 = _BinaryenGeSInt32(),\r\n GeU32 = _BinaryenGeUInt32(),\r\n AddI64 = _BinaryenAddInt64(),\r\n SubI64 = _BinaryenSubInt64(),\r\n MulI64 = _BinaryenMulInt64(),\r\n DivI64 = _BinaryenDivSInt64(),\r\n DivU64 = _BinaryenDivUInt64(),\r\n RemI64 = _BinaryenRemSInt64(),\r\n RemU64 = _BinaryenRemUInt64(),\r\n AndI64 = _BinaryenAndInt64(),\r\n OrI64 = _BinaryenOrInt64(),\r\n XorI64 = _BinaryenXorInt64(),\r\n ShlI64 = _BinaryenShlInt64(),\r\n ShrU64 = _BinaryenShrUInt64(),\r\n ShrI64 = _BinaryenShrSInt64(),\r\n RotlI64 = _BinaryenRotLInt64(),\r\n RotrI64 = _BinaryenRotRInt64(),\r\n EqI64 = _BinaryenEqInt64(),\r\n NeI64 = _BinaryenNeInt64(),\r\n LtI64 = _BinaryenLtSInt64(),\r\n LtU64 = _BinaryenLtUInt64(),\r\n LeI64 = _BinaryenLeSInt64(),\r\n LeU64 = _BinaryenLeUInt64(),\r\n GtI64 = _BinaryenGtSInt64(),\r\n GtU64 = _BinaryenGtUInt64(),\r\n GeI64 = _BinaryenGeSInt64(),\r\n GeU64 = _BinaryenGeUInt64(),\r\n AddF32 = _BinaryenAddFloat32(),\r\n SubF32 = _BinaryenSubFloat32(),\r\n MulF32 = _BinaryenMulFloat32(),\r\n DivF32 = _BinaryenDivFloat32(),\r\n CopysignF32 = _BinaryenCopySignFloat32(),\r\n MinF32 = _BinaryenMinFloat32(),\r\n MaxF32 = _BinaryenMaxFloat32(),\r\n EqF32 = _BinaryenEqFloat32(),\r\n NeF32 = _BinaryenNeFloat32(),\r\n LtF32 = _BinaryenLtFloat32(),\r\n LeF32 = _BinaryenLeFloat32(),\r\n GtF32 = _BinaryenGtFloat32(),\r\n GeF32 = _BinaryenGeFloat32(),\r\n AddF64 = _BinaryenAddFloat64(),\r\n SubF64 = _BinaryenSubFloat64(),\r\n MulF64 = _BinaryenMulFloat64(),\r\n DivF64 = _BinaryenDivFloat64(),\r\n CopysignF64 = _BinaryenCopySignFloat64(),\r\n MinF64 = _BinaryenMinFloat64(),\r\n MaxF64 = _BinaryenMaxFloat64(),\r\n EqF64 = _BinaryenEqFloat64(),\r\n NeF64 = _BinaryenNeFloat64(),\r\n LtF64 = _BinaryenLtFloat64(),\r\n LeF64 = _BinaryenLeFloat64(),\r\n GtF64 = _BinaryenGtFloat64(),\r\n GeF64 = _BinaryenGeFloat64()\r\n}\r\n\r\nexport enum HostOp {\r\n PageSize = _BinaryenPageSize(),\r\n CurrentMemory = _BinaryenCurrentMemory(),\r\n GrowMemory = _BinaryenGrowMemory(),\r\n HasFeature = _BinaryenHasFeature(),\r\n\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n // MoveMemory\r\n // SetMemory\r\n}\r\n\r\nexport enum AtomicRMWOp {\r\n Add = _BinaryenAtomicRMWAdd(),\r\n Sub = _BinaryenAtomicRMWSub(),\r\n And = _BinaryenAtomicRMWAnd(),\r\n Or = _BinaryenAtomicRMWOr(),\r\n Xor = _BinaryenAtomicRMWXor(),\r\n Xchg = _BinaryenAtomicRMWXchg()\r\n}\r\n\r\nexport class MemorySegment {\r\n\r\n buffer: Uint8Array;\r\n offset: I64;\r\n\r\n static create(buffer: Uint8Array, offset: I64): MemorySegment {\r\n var segment = new MemorySegment();\r\n segment.buffer = buffer;\r\n segment.offset = offset;\r\n return segment;\r\n }\r\n}\r\n\r\nexport class Module {\r\n\r\n ref: ModuleRef;\r\n\r\n private cachedByValue: usize;\r\n\r\n /** Maximum number of pages when targeting WASM32. */\r\n static readonly MAX_MEMORY_WASM32: Index = 0xffff;\r\n\r\n /** Maximum number of pages when targeting WASM64. */\r\n static readonly MAX_MEMORY_WASM64: Index = 0xffff; // TODO\r\n\r\n static create(): Module {\r\n var module = new Module();\r\n module.ref = _BinaryenModuleCreate();\r\n module.cachedByValue = allocate_memory(16);\r\n return module;\r\n }\r\n\r\n static createFrom(buffer: Uint8Array): Module {\r\n var cArr = allocU8Array(buffer);\r\n try {\r\n let module = new Module();\r\n module.ref = _BinaryenModuleRead(cArr, buffer.length);\r\n module.cachedByValue = allocate_memory(3 * 8); // LLVM C-ABI, max used is 3 * usize\r\n return module;\r\n } finally {\r\n free_memory(changetype(cArr));\r\n }\r\n }\r\n\r\n private constructor() { }\r\n\r\n // types\r\n\r\n addFunctionType(\r\n name: string,\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenAddFunctionType(this.ref, cStr, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n getFunctionTypeBySignature(\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionTypeRef {\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenGetFunctionTypeBySignature(this.ref, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n removeFunctionType(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunctionType(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n // constants\r\n\r\n createI32(value: i32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createI64(valueLow: i32, valueHigh: i32 = 0): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt64(out, valueLow, valueHigh);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF32(value: f32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF64(value: f64): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat64(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n // expressions\r\n\r\n createUnary(\r\n op: UnaryOp,\r\n expr: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenUnary(this.ref, op, expr);\r\n }\r\n\r\n createBinary(\r\n op: BinaryOp,\r\n left: ExpressionRef,\r\n right: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenBinary(this.ref, op, left, right);\r\n }\r\n\r\n createHost(\r\n op: HostOp,\r\n name: string | null = null,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenHost(this.ref, op, cStr, cArr, operands ? (operands).length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createGetLocal(\r\n index: i32,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenGetLocal(this.ref, index, type);\r\n }\r\n\r\n createTeeLocal(\r\n index: i32,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenTeeLocal(this.ref, index, value);\r\n }\r\n\r\n createGetGlobal(\r\n name: string,\r\n type: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenGetGlobal(this.ref, cStr, type);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createLoad(\r\n bytes: Index,\r\n signed: bool,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenLoad(this.ref, bytes, signed ? 1 : 0, offset, /* always aligned */ bytes, type, ptr);\r\n }\r\n\r\n createStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenStore(this.ref, bytes, offset, /* always aligned */ bytes, ptr, value, type);\r\n }\r\n\r\n createAtomicLoad(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicLoad(this.ref, bytes, offset, type, ptr);\r\n }\r\n\r\n createAtomicStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicStore(this.ref, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicRMW(\r\n op: AtomicRMWOp,\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicRMW(this.ref, op, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicCmpxchg(\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n replacement: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicCmpxchg(this.ref, bytes, offset, ptr, expected, replacement, type);\r\n }\r\n\r\n createAtomicWait(\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n timeout: ExpressionRef,\r\n expectedType: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWait(this.ref, ptr, expected, timeout, expectedType);\r\n }\r\n\r\n createAtomicWake(\r\n ptr: ExpressionRef,\r\n wakeCount: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWake(this.ref, ptr, wakeCount);\r\n }\r\n\r\n // statements\r\n\r\n createSetLocal(\r\n index: Index,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSetLocal(this.ref, index, value);\r\n }\r\n\r\n createSetGlobal(\r\n name: string,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenSetGlobal(this.ref, cStr, value);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createBlock(\r\n label: string | null,\r\n children: ExpressionRef[],\r\n type: NativeType = NativeType.None\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n var cArr = allocPtrArray(children);\r\n try {\r\n return _BinaryenBlock(this.ref, cStr, cArr, children.length, type);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createBreak(\r\n label: string | null,\r\n condition: ExpressionRef = 0,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenBreak(this.ref, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createDrop(\r\n expression: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenDrop(this.ref, expression);\r\n }\r\n\r\n createLoop(\r\n label: string | null,\r\n body: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenLoop(this.ref, cStr, body);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createIf(\r\n condition: ExpressionRef,\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenIf(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createNop(): ExpressionRef {\r\n return _BinaryenNop(this.ref);\r\n }\r\n\r\n createReturn(\r\n expression: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenReturn(this.ref, expression);\r\n }\r\n\r\n createSelect(\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef,\r\n condition: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSelect(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createSwitch(\r\n names: string[],\r\n defaultName: string | null,\r\n condition: ExpressionRef,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numNames = names.length;\r\n var strs = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n strs[i] = allocString(names[i]);\r\n }\r\n var cArr = allocI32Array(strs);\r\n var cStr = allocString(defaultName);\r\n try {\r\n return _BinaryenSwitch(this.ref, cArr, numNames, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n for (let i = numNames - 1; i >= 0; --i) free_memory(strs[i]);\r\n }\r\n }\r\n\r\n createCall(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenCall(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createCallImport(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenCallImport(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createCallIndirect(\r\n index: ExpressionRef,\r\n operands: ExpressionRef[] | null,\r\n typeName: string\r\n ): ExpressionRef {\r\n var cArr = allocPtrArray(operands);\r\n var cStr = allocString(typeName);\r\n try {\r\n return _BinaryenCallIndirect(this.ref, index, cArr, operands && operands.length || 0, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n createUnreachable(): ExpressionRef {\r\n return _BinaryenUnreachable(this.ref);\r\n }\r\n\r\n // meta\r\n\r\n addGlobal(\r\n name: string,\r\n type: NativeType,\r\n mutable: bool,\r\n initializer: ExpressionRef\r\n ): GlobalRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenAddGlobal(this.ref, cStr, type, mutable ? 1 : 0, initializer);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunction(\r\n name: string,\r\n type: FunctionTypeRef,\r\n varTypes: NativeType[] | null,\r\n body: ExpressionRef\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(varTypes);\r\n try {\r\n return _BinaryenAddFunction(this.ref, cStr, type, cArr, varTypes ? varTypes.length : 0, body);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n removeFunction(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunction(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n private cachedTemporaryName: usize = 0;\r\n private hasTemporaryFunction: bool = false;\r\n\r\n addTemporaryFunction(result: NativeType, paramTypes: NativeType[] | null, body: ExpressionRef): FunctionRef {\r\n this.hasTemporaryFunction = assert(!this.hasTemporaryFunction);\r\n var tempName = this.cachedTemporaryName;\r\n if (!tempName) this.cachedTemporaryName = tempName = allocString(\"\"); // works because strings are interned\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n let typeRef = _BinaryenAddFunctionType(this.ref, tempName, result, cArr, paramTypes ? paramTypes.length : 0);\r\n return _BinaryenAddFunction(this.ref, tempName, typeRef, 0, 0, body);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n removeTemporaryFunction(): void {\r\n this.hasTemporaryFunction = !assert(this.hasTemporaryFunction);\r\n var tempName = assert(this.cachedTemporaryName);\r\n _BinaryenRemoveFunction(this.ref, tempName);\r\n _BinaryenRemoveFunctionType(this.ref, tempName);\r\n }\r\n\r\n addFunctionExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddFunctionExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addTableExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddTableExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addMemoryExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddMemoryExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addGlobalExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddGlobalExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n removeExport(externalName: string): void {\r\n var cStr = allocString(externalName);\r\n try {\r\n _BinaryenRemoveExport(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunctionImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n functionType: FunctionTypeRef\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddFunctionImport(this.ref, cStr1, cStr2, cStr3, functionType);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addTableImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddTableImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addMemoryImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddMemoryImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addGlobalImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n globalType: NativeType\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddGlobalImport(this.ref, cStr1, cStr2, cStr3, globalType);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n removeImport(internalName: string): void {\r\n var cStr = allocString(internalName);\r\n try {\r\n _BinaryenRemoveImport(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n setMemory(\r\n initial: Index,\r\n maximum: Index,\r\n segments: MemorySegment[],\r\n target: Target,\r\n exportName: string | null = null\r\n ): void {\r\n var cStr = allocString(exportName);\r\n var k = segments.length;\r\n var segs = new Array(k);\r\n var offs = new Array(k);\r\n var sizs = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let buffer = segments[i].buffer;\r\n let offset = segments[i].offset;\r\n segs[i] = allocU8Array(buffer);\r\n offs[i] = target == Target.WASM64\r\n ? this.createI64(i64_low(offset), i64_high(offset))\r\n : this.createI32(i64_low(offset));\r\n sizs[i] = buffer.length;\r\n }\r\n var cArr1 = allocI32Array(segs);\r\n var cArr2 = allocI32Array(offs);\r\n var cArr3 = allocI32Array(sizs);\r\n try {\r\n _BinaryenSetMemory(this.ref, initial, maximum, cStr, cArr1, cArr2, cArr3, k);\r\n } finally {\r\n free_memory(cArr3);\r\n free_memory(cArr2);\r\n free_memory(cArr1);\r\n for (let i = k - 1; i >= 0; --i) free_memory(segs[i]);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n setFunctionTable(funcs: FunctionRef[]): void {\r\n var cArr = allocPtrArray(funcs);\r\n try {\r\n _BinaryenSetFunctionTable(this.ref, cArr, funcs.length);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n setStart(func: FunctionRef): void {\r\n _BinaryenSetStart(this.ref, func);\r\n }\r\n\r\n setOptimizeLevel(level: i32 = 2): void {\r\n _BinaryenSetOptimizeLevel(level);\r\n }\r\n\r\n setShrinkLevel(level: i32 = 1): void {\r\n _BinaryenSetShrinkLevel(level);\r\n }\r\n\r\n setDebugInfo(on: bool = false): void {\r\n _BinaryenSetDebugInfo(on);\r\n }\r\n\r\n optimize(func: FunctionRef = 0): void {\r\n if (func) {\r\n _BinaryenFunctionOptimize(func, this.ref);\r\n } else {\r\n _BinaryenModuleOptimize(this.ref);\r\n }\r\n }\r\n\r\n runPasses(passes: string[], func: FunctionRef = 0): void {\r\n var numNames = passes.length;\r\n var names = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n names[i] = allocString(passes[i]);\r\n }\r\n var cArr = allocI32Array(names);\r\n try {\r\n if (func) {\r\n _BinaryenFunctionRunPasses(func, this.ref, cArr, numNames);\r\n } else {\r\n _BinaryenModuleRunPasses(this.ref, cArr, numNames);\r\n }\r\n } finally {\r\n free_memory(cArr);\r\n for (let i = numNames; i >= 0; --i) {\r\n free_memory(names[i]);\r\n }\r\n }\r\n }\r\n\r\n private cachedPrecomputeName: usize = 0;\r\n private cachedPrecomputeNames: usize = 0;\r\n\r\n precomputeFunction(func: FunctionRef): void {\r\n var names = this.cachedPrecomputeNames;\r\n if (!names) {\r\n let name = allocString(\"precompute\");\r\n this.cachedPrecomputeName = name;\r\n this.cachedPrecomputeNames = names = allocI32Array([ name ]);\r\n }\r\n _BinaryenFunctionRunPasses(func, this.ref, names, 1);\r\n }\r\n\r\n validate(): bool {\r\n return _BinaryenModuleValidate(this.ref) == 1;\r\n }\r\n\r\n interpret(): void {\r\n _BinaryenModuleInterpret(this.ref);\r\n }\r\n\r\n toBinary(sourceMapUrl: string | null): BinaryModule {\r\n var out = this.cachedByValue;\r\n var cStr = allocString(sourceMapUrl);\r\n var binaryPtr: usize = 0;\r\n var sourceMapPtr: usize = 0;\r\n try {\r\n _BinaryenModuleAllocateAndWrite(out, this.ref, cStr);\r\n binaryPtr = readInt(out);\r\n let binaryBytes = readInt(out + 4);\r\n sourceMapPtr = readInt(out + 4 * 2);\r\n let ret = new BinaryModule();\r\n ret.output = readBuffer(binaryPtr, binaryBytes);\r\n ret.sourceMap = readString(sourceMapPtr);\r\n return ret;\r\n } finally {\r\n if (cStr) free_memory(cStr);\r\n if (binaryPtr) free_memory(binaryPtr);\r\n if (sourceMapPtr) free_memory(sourceMapPtr);\r\n }\r\n }\r\n\r\n toText(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n toAsmjs(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n dispose(): void {\r\n assert(this.ref);\r\n free_memory(this.cachedByValue);\r\n free_memory(this.cachedTemporaryName);\r\n free_memory(this.cachedPrecomputeName);\r\n free_memory(this.cachedPrecomputeNames);\r\n _BinaryenModuleDispose(this.ref);\r\n this.ref = 0;\r\n }\r\n\r\n createRelooper(): Relooper {\r\n return Relooper.create(this);\r\n }\r\n\r\n cloneExpression(\r\n expr: ExpressionRef,\r\n noSideEffects: bool = false,\r\n maxDepth: i32 = i32.MAX_VALUE\r\n ): ExpressionRef { // currently supports side effect free expressions only\r\n if (maxDepth < 0) return 0;\r\n maxDepth -= 1;\r\n\r\n var nested1: ExpressionRef,\r\n nested2: ExpressionRef;\r\n\r\n switch (_BinaryenExpressionGetId(expr)) {\r\n case ExpressionId.Const: {\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32: {\r\n return this.createI32(_BinaryenConstGetValueI32(expr));\r\n }\r\n case NativeType.I64: {\r\n return this.createI64(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n }\r\n case NativeType.F32: {\r\n return this.createF32(_BinaryenConstGetValueF32(expr));\r\n }\r\n case NativeType.F64: {\r\n return this.createF64(_BinaryenConstGetValueF64(expr));\r\n }\r\n default: {\r\n throw new Error(\"concrete type expected\");\r\n }\r\n }\r\n }\r\n case ExpressionId.GetLocal: {\r\n return _BinaryenGetLocal(this.ref,\r\n _BinaryenGetLocalGetIndex(expr),\r\n _BinaryenExpressionGetType(expr)\r\n );\r\n }\r\n case ExpressionId.GetGlobal: {\r\n let globalName = _BinaryenGetGlobalGetName(expr);\r\n if (!globalName) break;\r\n return _BinaryenGetGlobal(this.ref, globalName, _BinaryenExpressionGetType(expr));\r\n }\r\n case ExpressionId.Load: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenLoadGetPtr(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return (\r\n _BinaryenLoadIsAtomic(expr)\r\n ? _BinaryenAtomicLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n : _BinaryenLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadIsSigned(expr) ? 1 : 0,\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenLoadGetAlign(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n );\r\n }\r\n case ExpressionId.Unary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenUnaryGetValue(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenUnary(this.ref, _BinaryenUnaryGetOp(expr), nested1);\r\n }\r\n case ExpressionId.Binary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenBinaryGetLeft(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n if (!(nested2 = this.cloneExpression(_BinaryenBinaryGetRight(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenBinary(this.ref, _BinaryenBinaryGetOp(expr), nested1, nested2);\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n // source map generation\r\n\r\n addDebugInfoFile(name: string): Index {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenModuleAddDebugInfoFileName(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n getDebugInfoFile(index: Index): string | null {\r\n return readString(_BinaryenModuleGetDebugInfoFileName(this.ref, index));\r\n }\r\n\r\n setDebugLocation(\r\n func: FunctionRef,\r\n expr: ExpressionRef,\r\n fileIndex: Index,\r\n lineNumber: Index,\r\n columnNumber: Index\r\n ): void {\r\n _BinaryenFunctionSetDebugLocation(func, expr, fileIndex, lineNumber, columnNumber);\r\n }\r\n}\r\n\r\n// expressions\r\n\r\nexport function getExpressionId(expr: ExpressionRef): ExpressionId {\r\n return _BinaryenExpressionGetId(expr);\r\n}\r\n\r\nexport function getExpressionType(expr: ExpressionRef): NativeType {\r\n return _BinaryenExpressionGetType(expr);\r\n}\r\n\r\nexport function getConstValueI32(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI32(expr);\r\n}\r\n\r\nexport function getConstValueI64Low(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64Low(expr);\r\n}\r\n\r\nexport function getConstValueI64High(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64High(expr);\r\n}\r\n\r\nexport function getConstValueF32(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF32(expr);\r\n}\r\n\r\nexport function getConstValueF64(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF64(expr);\r\n}\r\n\r\nexport function getGetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenGetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenSetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSetLocalGetValue(expr);\r\n}\r\n\r\nexport function isTeeLocal(expr: ExpressionRef): bool {\r\n return _BinaryenSetLocalIsTee(expr);\r\n}\r\n\r\nexport function getBinaryOp(expr: ExpressionRef): BinaryOp {\r\n return _BinaryenBinaryGetOp(expr);\r\n}\r\n\r\nexport function getBinaryLeft(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetLeft(expr);\r\n}\r\n\r\nexport function getBinaryRight(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetRight(expr);\r\n}\r\n\r\nexport function getUnaryOp(expr: ExpressionRef): UnaryOp {\r\n return _BinaryenUnaryGetOp(expr);\r\n}\r\n\r\nexport function getUnaryValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenUnaryGetValue(expr);\r\n}\r\n\r\nexport function getLoadBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetBytes(expr);\r\n}\r\n\r\nexport function getLoadOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetOffset(expr);\r\n}\r\n\r\nexport function getLoadPtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoadGetPtr(expr);\r\n}\r\n\r\nexport function isLoadSigned(expr: ExpressionRef): bool {\r\n return _BinaryenLoadIsSigned(expr);\r\n}\r\n\r\nexport function getStoreBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetBytes(expr);\r\n}\r\n\r\nexport function getStoreOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetOffset(expr);\r\n}\r\n\r\nexport function getStorePtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetPtr(expr);\r\n}\r\n\r\nexport function getStoreValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetValue(expr);\r\n}\r\n\r\nexport function getBlockName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBlockGetName(expr));\r\n}\r\n\r\nexport function getBlockChildCount(expr: ExpressionRef): Index {\r\n return _BinaryenBlockGetNumChildren(expr);\r\n}\r\n\r\nexport function getBlockChild(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenBlockGetChild(expr, index);\r\n}\r\n\r\nexport function getIfCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetCondition(expr);\r\n}\r\n\r\nexport function getIfTrue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfTrue(expr);\r\n}\r\n\r\nexport function getIfFalse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfFalse(expr);\r\n}\r\n\r\nexport function getLoopName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenLoopGetName(expr));\r\n}\r\n\r\nexport function getLoopBody(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoopGetBody(expr);\r\n}\r\n\r\nexport function getBreakName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBreakGetName(expr));\r\n}\r\n\r\nexport function getBreakCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBreakGetCondition(expr);\r\n}\r\n\r\nexport function getSelectThen(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfTrue(expr);\r\n}\r\n\r\nexport function getSelectElse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfFalse(expr);\r\n}\r\n\r\nexport function getSelectCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetCondition(expr);\r\n}\r\n\r\nexport function getDropValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenDropGetValue(expr);\r\n}\r\n\r\nexport function getReturnValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenReturnGetValue(expr);\r\n}\r\n\r\nexport function getCallTarget(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenCallGetTarget(expr));\r\n}\r\n\r\nexport function getHostOp(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenHostGetOp(expr);\r\n}\r\n\r\nexport function getHostOperandCount(expr: ExpressionRef): Index {\r\n return _BinaryenHostGetNumOperands(expr);\r\n}\r\n\r\nexport function getHostOperand(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenHostGetOperand(expr, index);\r\n}\r\n\r\nexport function getHostName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenHostGetNameOperand(expr));\r\n}\r\n\r\n// functions\r\n\r\nexport function getFunctionBody(func: FunctionRef): ExpressionRef {\r\n return _BinaryenFunctionGetBody(func);\r\n}\r\n\r\nexport function getFunctionName(func: FunctionRef): string | null {\r\n return readString(_BinaryenFunctionGetName(func));\r\n}\r\n\r\nexport function getFunctionParamCount(func: FunctionRef): Index {\r\n return _BinaryenFunctionGetNumParams(func);\r\n}\r\n\r\nexport function getFunctionParamType(func: FunctionRef, index: Index): NativeType {\r\n return _BinaryenFunctionGetParam(func, index);\r\n}\r\n\r\nexport function getFunctionResultType(func: FunctionRef): NativeType {\r\n return _BinaryenFunctionGetResult(func);\r\n}\r\n\r\nexport class Relooper {\r\n\r\n module: Module;\r\n ref: RelooperRef;\r\n\r\n static create(module: Module): Relooper {\r\n var relooper = new Relooper();\r\n relooper.module = module;\r\n relooper.ref = _RelooperCreate();\r\n return relooper;\r\n }\r\n\r\n private constructor() {}\r\n\r\n addBlock(code: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlock(this.ref, code);\r\n }\r\n\r\n addBranch(from: RelooperBlockRef, to: RelooperBlockRef, condition: ExpressionRef = 0, code: ExpressionRef = 0): void {\r\n _RelooperAddBranch(from, to, condition, code);\r\n }\r\n\r\n addBlockWithSwitch(code: ExpressionRef, condition: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlockWithSwitch(this.ref, code, condition);\r\n }\r\n\r\n addBranchForSwitch(from: RelooperBlockRef, to: RelooperBlockRef, indexes: i32[], code: ExpressionRef = 0): void {\r\n var cArr = allocI32Array(indexes);\r\n try {\r\n _RelooperAddBranchForSwitch(from, to, cArr, indexes.length, code);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n renderAndDispose(entry: RelooperBlockRef, labelHelper: Index): ExpressionRef {\r\n return _RelooperRenderAndDispose(this.ref, entry, labelHelper, this.module.ref);\r\n }\r\n}\r\n\r\n// export function hasSideEffects(expr: ExpressionRef): bool {\r\n// switch (_BinaryenExpressionGetId(expr = getPtr(expr))) {\r\n// case ExpressionId.GetLocal:\r\n// case ExpressionId.GetGlobal:\r\n// case ExpressionId.Const:\r\n// case ExpressionId.Nop:\r\n// case ExpressionId.Unreachable: {\r\n// return false;\r\n// }\r\n// case ExpressionId.Block: {\r\n// for (let i = 0, k = _BinaryenBlockGetNumChildren(expr); i < k; ++i) {\r\n// if (hasSideEffects(_BinaryenBlockGetChild(expr, i))) return true;\r\n// }\r\n// return false;\r\n// }\r\n// case ExpressionId.If: {\r\n// return hasSideEffects(_BinaryenIfGetCondition(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfFalse(expr));\r\n// }\r\n// case ExpressionId.Unary: {\r\n// return hasSideEffects(_BinaryenUnaryGetValue(expr));\r\n// }\r\n// case ExpressionId.Binary: {\r\n// return hasSideEffects(_BinaryenBinaryGetLeft(expr))\r\n// || hasSideEffects(_BinaryenBinaryGetRight(expr));\r\n// }\r\n// case ExpressionId.Drop: {\r\n// return hasSideEffects(_BinaryenDropGetValue(expr));\r\n// }\r\n// case ExpressionId.Select: {\r\n// return hasSideEffects(_BinaryenSelectGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenSelectGetIfFalse(expr))\r\n// || hasSideEffects(_BinaryenSelectGetCondition(expr));\r\n// }\r\n// }\r\n// return true;\r\n// }\r\n\r\n// helpers\r\n// can't do stack allocation here: STACKTOP is a global in WASM but a hidden variable in asm.js\r\n\r\nfunction allocU8Array(u8s: Uint8Array | null): usize {\r\n if (!u8s) return 0;\r\n var numValues = u8s.length;\r\n var ptr = allocate_memory(numValues);\r\n var idx = ptr;\r\n for (let i = 0; i < numValues; ++i) {\r\n store(idx++, u8s[i]);\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocI32Array(i32s: i32[] | null): usize {\r\n if (!i32s) return 0;\r\n var ptr = allocate_memory(i32s.length << 2);\r\n var idx = ptr;\r\n for (let i = 0, k = i32s.length; i < k; ++i) {\r\n let val = i32s[i];\r\n // store(idx, val) is not portable\r\n store(idx , ( val & 0xff) as u8);\r\n store(idx + 1, ((val >> 8) & 0xff) as u8);\r\n store(idx + 2, ((val >> 16) & 0xff) as u8);\r\n store(idx + 3, ( val >>> 24 ) as u8);\r\n idx += 4;\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocPtrArray(ptrs: usize[] | null): usize {\r\n return allocI32Array(ptrs); // TODO: WASM64 one day\r\n}\r\n\r\nfunction stringLengthUTF8(str: string): usize {\r\n var len = 0;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n ++len;\r\n } else if (u <= 0x7FF) {\r\n len += 2;\r\n } else if (u <= 0xFFFF) {\r\n len += 3;\r\n } else if (u <= 0x1FFFFF) {\r\n len += 4;\r\n } else if (u <= 0x3FFFFFF) {\r\n len += 5;\r\n } else {\r\n len += 6;\r\n }\r\n }\r\n return len;\r\n}\r\n\r\nfunction allocString(str: string | null): usize {\r\n if (str == null) return 0;\r\n var ptr = allocate_memory(stringLengthUTF8(str) + 1);\r\n // the following is based on Emscripten's stringToUTF8Array\r\n var idx = ptr;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n store(idx++, u as u8);\r\n } else if (u <= 0x7FF) {\r\n store(idx++, (0xC0 | (u >>> 6) ) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0xFFFF) {\r\n store(idx++, (0xE0 | (u >>> 12) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x1FFFFF) {\r\n store(idx++, (0xF0 | (u >>> 18) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x3FFFFFF) {\r\n store(idx++, (0xF8 | (u >>> 24) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else {\r\n store(idx++, (0xFC | (u >>> 30) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 24) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n }\r\n }\r\n store(idx, 0);\r\n return ptr;\r\n}\r\n\r\nfunction readInt(ptr: usize): i32 {\r\n return (\r\n load(ptr ) |\r\n (load(ptr + 1) << 8) |\r\n (load(ptr + 2) << 16) |\r\n (load(ptr + 3) << 24)\r\n );\r\n}\r\n\r\nfunction readBuffer(ptr: usize, length: usize): Uint8Array {\r\n var ret = new Uint8Array(length);\r\n for (let i: usize = 0; i < length; ++i) {\r\n ret[i] = load(ptr + i);\r\n }\r\n return ret;\r\n}\r\n\r\nexport function readString(ptr: usize): string | null {\r\n if (!ptr) return null;\r\n var arr = new Array();\r\n // the following is based on Emscripten's UTF8ArrayToString\r\n var cp: u32;\r\n var u1: u32, u2: u32, u3: u32, u4: u32, u5: u32;\r\n while (cp = load(ptr++)) {\r\n if (!(cp & 0x80)) {\r\n arr.push(cp);\r\n continue;\r\n }\r\n u1 = load(ptr++) & 63;\r\n if ((cp & 0xE0) == 0xC0) {\r\n arr.push(((cp & 31) << 6) | u1);\r\n continue;\r\n }\r\n u2 = load(ptr++) & 63;\r\n if ((cp & 0xF0) == 0xE0) {\r\n cp = ((cp & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u3 = load(ptr++) & 63;\r\n if ((cp & 0xF8) == 0xF0) {\r\n cp = ((cp & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;\r\n } else {\r\n u4 = load(ptr++) & 63;\r\n if ((cp & 0xFC) == 0xF8) {\r\n cp = ((cp & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;\r\n } else {\r\n u5 = load(ptr++) & 63;\r\n cp = ((cp & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;\r\n }\r\n }\r\n }\r\n arr.push(cp);\r\n // if (cp < 0x10000) {\r\n // arr.push(cp);\r\n // } else {\r\n // var ch = cp - 0x10000;\r\n // arr.push(0xD800 | (ch >> 10));\r\n // arr.push(0xDC00 | (ch & 0x3FF));\r\n // }\r\n }\r\n // return String.fromCharCodes(arr);\r\n return String.fromCodePoints(arr);\r\n}\r\n\r\n/** Result structure of {@link Module#toBinary}. */\r\nexport class BinaryModule {\r\n /** WebAssembly binary. */\r\n output: Uint8Array;\r\n /** Source map, if generated. */\r\n sourceMap: string | null;\r\n}\r\n","/**\r\n * Abstract syntax tree representing a source file once parsed.\r\n * @module ast\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n PATH_DELIMITER,\r\n STATIC_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n LIBRARY_PREFIX\r\n} from \"./program\";\r\n\r\nimport {\r\n Token,\r\n Tokenizer,\r\n Range\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n normalizePath,\r\n resolvePath,\r\n CharCode\r\n} from \"./util\";\r\n\r\nexport { Token, Range };\r\n\r\n/** Indicates the kind of a node. */\r\nexport enum NodeKind {\r\n\r\n SOURCE,\r\n\r\n // types\r\n TYPE,\r\n TYPEPARAMETER,\r\n PARAMETER,\r\n SIGNATURE,\r\n\r\n // expressions\r\n IDENTIFIER,\r\n ASSERTION,\r\n BINARY,\r\n CALL,\r\n COMMA,\r\n ELEMENTACCESS,\r\n FALSE,\r\n FUNCTION,\r\n INSTANCEOF,\r\n LITERAL,\r\n NEW,\r\n NULL,\r\n PARENTHESIZED,\r\n PROPERTYACCESS,\r\n TERNARY,\r\n SUPER,\r\n THIS,\r\n TRUE,\r\n CONSTRUCTOR,\r\n UNARYPOSTFIX,\r\n UNARYPREFIX,\r\n\r\n // statements\r\n BLOCK,\r\n BREAK,\r\n CONTINUE,\r\n DO,\r\n EMPTY,\r\n EXPORT,\r\n EXPORTIMPORT,\r\n EXPRESSION,\r\n FOR,\r\n IF,\r\n IMPORT,\r\n RETURN,\r\n SWITCH,\r\n THROW,\r\n TRY,\r\n VARIABLE,\r\n VOID,\r\n WHILE,\r\n\r\n // declaration statements\r\n CLASSDECLARATION,\r\n ENUMDECLARATION,\r\n ENUMVALUEDECLARATION,\r\n FIELDDECLARATION,\r\n FUNCTIONDECLARATION,\r\n IMPORTDECLARATION,\r\n INTERFACEDECLARATION,\r\n METHODDECLARATION,\r\n NAMESPACEDECLARATION,\r\n TYPEDECLARATION,\r\n VARIABLEDECLARATION,\r\n\r\n // special\r\n DECORATOR,\r\n EXPORTMEMBER,\r\n SWITCHCASE,\r\n COMMENT\r\n}\r\n\r\n/** Checks if a node represents a constant value. */\r\nexport function nodeIsConstantValue(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.LITERAL:\r\n case NodeKind.NULL:\r\n case NodeKind.TRUE:\r\n case NodeKind.FALSE: return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Base class of all nodes. */\r\nexport abstract class Node {\r\n\r\n /** Node kind indicator. */\r\n kind: NodeKind;\r\n /** Source range. */\r\n range: Range;\r\n /** Parent node. */\r\n parent: Node | null = null;\r\n /** Common flags indicating specific traits. */\r\n flags: CommonFlags = CommonFlags.NONE;\r\n\r\n /** Tests if this node has the specified flag or flags. */\r\n is(flag: CommonFlags): bool { return (this.flags & flag) == flag; }\r\n /** Tests if this node has one of the specified flags. */\r\n isAny(flag: CommonFlags): bool { return (this.flags & flag) != 0; }\r\n /** Sets a specific flag or flags. */\r\n set(flag: CommonFlags): void { this.flags |= flag; }\r\n\r\n // types\r\n\r\n static createType(\r\n name: IdentifierExpression,\r\n typeArguments: CommonTypeNode[] | null,\r\n isNullable: bool,\r\n range: Range\r\n ): TypeNode {\r\n var type = new TypeNode();\r\n type.range = range;\r\n type.name = name; name.parent = type;\r\n type.typeArguments = typeArguments; if (typeArguments) setParent(typeArguments, type);\r\n type.isNullable = isNullable;\r\n return type;\r\n }\r\n\r\n static createOmittedType(\r\n range: Range\r\n ): TypeNode {\r\n return Node.createType(\r\n Node.createIdentifierExpression(\"\", range),\r\n null,\r\n false,\r\n range\r\n );\r\n }\r\n\r\n static createTypeParameter(\r\n name: IdentifierExpression,\r\n extendsType: TypeNode | null,\r\n range: Range\r\n ): TypeParameterNode {\r\n var elem = new TypeParameterNode();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n elem.extendsType = extendsType; if (extendsType) extendsType.parent = elem;\r\n return elem;\r\n }\r\n\r\n static createParameter(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode,\r\n initializer: Expression | null,\r\n kind: ParameterKind,\r\n range: Range\r\n ): ParameterNode {\r\n var elem = new ParameterNode();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n elem.type = type; if (type) type.parent = elem;\r\n elem.initializer = initializer; if (initializer) initializer.parent = elem;\r\n elem.parameterKind = kind;\r\n return elem;\r\n }\r\n\r\n static createSignature(\r\n parameters: ParameterNode[],\r\n returnType: CommonTypeNode,\r\n explicitThisType: TypeNode | null,\r\n isNullable: bool,\r\n range: Range\r\n ): SignatureNode {\r\n var sig = new SignatureNode();\r\n sig.range = range;\r\n sig.parameters = parameters; setParent(parameters, sig);\r\n sig.returnType = returnType; returnType.parent = sig;\r\n sig.explicitThisType = explicitThisType; if (explicitThisType) explicitThisType.parent = sig;\r\n sig.isNullable = isNullable;\r\n return sig;\r\n }\r\n\r\n // special\r\n\r\n static createDecorator(\r\n name: Expression,\r\n args: Expression[] | null,\r\n range: Range\r\n ): DecoratorNode {\r\n var stmt = new DecoratorNode();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.arguments = args; if (args) setParent(args, stmt);\r\n stmt.decoratorKind = decoratorNameToKind(name);\r\n return stmt;\r\n }\r\n\r\n static createComment(\r\n text: string,\r\n kind: CommentKind,\r\n range: Range\r\n ): CommentNode {\r\n var node = new CommentNode();\r\n node.range = range;\r\n node.commentKind = kind;\r\n node.text = text;\r\n return node;\r\n }\r\n\r\n // expressions\r\n\r\n static createIdentifierExpression(\r\n name: string,\r\n range: Range\r\n ): IdentifierExpression {\r\n var expr = new IdentifierExpression();\r\n expr.range = range;\r\n expr.text = name;\r\n return expr;\r\n }\r\n\r\n static createEmptyIdentifierExpression(\r\n range: Range\r\n ): IdentifierExpression {\r\n var expr = new IdentifierExpression();\r\n expr.range = range;\r\n expr.text = \"\";\r\n return expr;\r\n }\r\n\r\n static createArrayLiteralExpression(\r\n elements: (Expression | null)[],\r\n range: Range\r\n ): ArrayLiteralExpression {\r\n var expr = new ArrayLiteralExpression();\r\n expr.range = range;\r\n expr.elementExpressions = elements; setParentIfNotNull(elements, expr);\r\n return expr;\r\n }\r\n\r\n static createAssertionExpression(\r\n assertionKind: AssertionKind,\r\n expression: Expression,\r\n toType: CommonTypeNode,\r\n range: Range\r\n ): AssertionExpression {\r\n var expr = new AssertionExpression();\r\n expr.range = range;\r\n expr.assertionKind = assertionKind;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.toType = toType; toType.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createBinaryExpression(\r\n operator: Token,\r\n left: Expression,\r\n right: Expression,\r\n range: Range\r\n ): BinaryExpression {\r\n var expr = new BinaryExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.left = left; left.parent = expr;\r\n expr.right = right; right.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createCallExpression(\r\n expression: Expression,\r\n typeArgs: CommonTypeNode[] | null,\r\n args: Expression[],\r\n range: Range\r\n ): CallExpression {\r\n var expr = new CallExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.typeArguments = typeArgs; if (typeArgs) setParent(typeArgs, expr);\r\n expr.arguments = args; setParent(args, expr);\r\n return expr;\r\n }\r\n\r\n static createCommaExpression(\r\n expressions: Expression[],\r\n range: Range\r\n ): CommaExpression {\r\n var expr = new CommaExpression();\r\n expr.range = range;\r\n expr.expressions = expressions; setParent(expressions, expr);\r\n return expr;\r\n }\r\n\r\n static createConstructorExpression(\r\n range: Range\r\n ): ConstructorExpression {\r\n var expr = new ConstructorExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createElementAccessExpression(\r\n expression: Expression,\r\n element: Expression,\r\n range: Range\r\n ): ElementAccessExpression {\r\n var expr = new ElementAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.elementExpression = element; element.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createFalseExpression(\r\n range: Range\r\n ): FalseExpression {\r\n var expr = new FalseExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createFloatLiteralExpression(\r\n value: f64,\r\n range: Range\r\n ): FloatLiteralExpression {\r\n var expr = new FloatLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createFunctionExpression(\r\n declaration: FunctionDeclaration\r\n ): FunctionExpression {\r\n var expr = new FunctionExpression();\r\n expr.flags = declaration.flags & CommonFlags.ARROW;\r\n expr.range = declaration.range;\r\n expr.declaration = declaration;\r\n return expr;\r\n }\r\n\r\n static createInstanceOfExpression(\r\n expression: Expression,\r\n isType: CommonTypeNode,\r\n range: Range\r\n ): InstanceOfExpression {\r\n var expr = new InstanceOfExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.isType = isType; isType.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createIntegerLiteralExpression(\r\n value: I64,\r\n range: Range\r\n ): IntegerLiteralExpression {\r\n var expr = new IntegerLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createNewExpression(\r\n expression: Expression,\r\n typeArgs: CommonTypeNode[] | null,\r\n args: Expression[],\r\n range: Range\r\n ): NewExpression {\r\n var expr = new NewExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.typeArguments = typeArgs; if (typeArgs) setParent(typeArgs, expr);\r\n expr.arguments = args; setParent(args, expr);\r\n return expr;\r\n }\r\n\r\n static createNullExpression(\r\n range: Range\r\n ): NullExpression {\r\n var expr = new NullExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createParenthesizedExpression(\r\n expression: Expression,\r\n range: Range\r\n ): ParenthesizedExpression {\r\n var expr = new ParenthesizedExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createPropertyAccessExpression(\r\n expression: Expression,\r\n property: IdentifierExpression,\r\n range: Range\r\n ): PropertyAccessExpression {\r\n var expr = new PropertyAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.property = property; property.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createRegexpLiteralExpression(\r\n pattern: string,\r\n flags: string,\r\n range: Range\r\n ): RegexpLiteralExpression {\r\n var expr = new RegexpLiteralExpression();\r\n expr.range = range;\r\n expr.pattern = pattern;\r\n expr.patternFlags = flags;\r\n return expr;\r\n }\r\n\r\n static createTernaryExpression(\r\n condition: Expression,\r\n ifThen: Expression,\r\n ifElse: Expression,\r\n range: Range\r\n ): TernaryExpression {\r\n var expr = new TernaryExpression();\r\n expr.range = range;\r\n expr.condition = condition; condition.parent = expr;\r\n expr.ifThen = ifThen; ifThen.parent = expr;\r\n expr.ifElse = ifElse; ifElse.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createStringLiteralExpression(\r\n value: string,\r\n range: Range\r\n ): StringLiteralExpression {\r\n var expr = new StringLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createSuperExpression(\r\n range: Range\r\n ): SuperExpression {\r\n var expr = new SuperExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createThisExpression(\r\n range: Range\r\n ): ThisExpression {\r\n var expr = new ThisExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createTrueExpression(\r\n range: Range\r\n ): TrueExpression {\r\n var expr = new TrueExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createUnaryPostfixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPostfixExpression {\r\n var expr = new UnaryPostfixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createUnaryPrefixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPrefixExpression {\r\n var expr = new UnaryPrefixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n // statements\r\n\r\n static createBlockStatement(\r\n statements: Statement[],\r\n range: Range\r\n ): BlockStatement {\r\n var stmt = new BlockStatement();\r\n stmt.range = range;\r\n stmt.statements = statements; setParent(statements, stmt);\r\n return stmt;\r\n }\r\n\r\n static createBreakStatement(\r\n label: IdentifierExpression | null,\r\n range: Range\r\n ): BreakStatement {\r\n var stmt = new BreakStatement();\r\n stmt.range = range;\r\n stmt.label = label; if (label) label.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createClassDeclaration(\r\n identifier: IdentifierExpression,\r\n typeParameters: TypeParameterNode[],\r\n extendsType: TypeNode | null, // can't be a function\r\n implementsTypes: TypeNode[] | null, // can't be functions\r\n members: DeclarationStatement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): ClassDeclaration {\r\n var stmt = new ClassDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = identifier; identifier.parent = stmt;\r\n stmt.typeParameters = typeParameters; setParent(typeParameters, stmt);\r\n stmt.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.implementsTypes = implementsTypes; if (implementsTypes) setParent(implementsTypes, stmt);\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createContinueStatement(\r\n label: IdentifierExpression | null,\r\n range: Range\r\n ): ContinueStatement {\r\n var stmt = new ContinueStatement();\r\n stmt.range = range;\r\n stmt.label = label; if (label) label.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createDoStatement(\r\n statement: Statement,\r\n condition: Expression,\r\n range: Range\r\n ): DoStatement {\r\n var stmt = new DoStatement();\r\n stmt.range = range;\r\n stmt.statement = statement; statement.parent = stmt;\r\n stmt.condition = condition; condition.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createEmptyStatement(\r\n range: Range\r\n ): EmptyStatement {\r\n var stmt = new EmptyStatement();\r\n stmt.range = range;\r\n return stmt;\r\n }\r\n\r\n static createEnumDeclaration(\r\n name: IdentifierExpression,\r\n members: EnumValueDeclaration[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): EnumDeclaration {\r\n var stmt = new EnumDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.values = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createEnumValueDeclaration(\r\n name: IdentifierExpression,\r\n value: Expression | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): EnumValueDeclaration {\r\n var stmt = new EnumValueDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.value = value; if (value) value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createExportStatement(\r\n members: ExportMember[] | null,\r\n path: StringLiteralExpression | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): ExportStatement {\r\n var stmt = new ExportStatement();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.members = members; if (members) setParent(members, stmt);\r\n stmt.path = path;\r\n if (path) {\r\n let normalizedPath = normalizePath(path.value);\r\n if (path.value.startsWith(\".\")) { // relative\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n } else {\r\n stmt.normalizedPath = null;\r\n stmt.internalPath = null;\r\n }\r\n return stmt;\r\n }\r\n\r\n static createExportImportStatement(\r\n name: IdentifierExpression,\r\n externalName: IdentifierExpression,\r\n range: Range\r\n ): ExportImportStatement {\r\n var stmt = new ExportImportStatement();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.externalName = externalName; externalName.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createExportMember(\r\n name: IdentifierExpression,\r\n externalName: IdentifierExpression | null,\r\n range: Range\r\n ): ExportMember {\r\n var elem = new ExportMember();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n if (!externalName) {\r\n externalName = name;\r\n } else {\r\n externalName.parent = elem;\r\n }\r\n elem.externalName = externalName;\r\n return elem;\r\n }\r\n\r\n static createExpressionStatement(\r\n expression: Expression\r\n ): ExpressionStatement {\r\n var stmt = new ExpressionStatement();\r\n stmt.range = expression.range;\r\n stmt.expression = expression; expression.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createIfStatement(\r\n condition: Expression,\r\n ifTrue: Statement,\r\n ifFalse: Statement | null,\r\n range: Range\r\n ): IfStatement {\r\n var stmt = new IfStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.ifTrue = ifTrue; ifTrue.parent = stmt;\r\n stmt.ifFalse = ifFalse; if (ifFalse) ifFalse.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createImportStatement(\r\n decls: ImportDeclaration[] | null,\r\n path: StringLiteralExpression,\r\n range: Range\r\n ): ImportStatement {\r\n var stmt = new ImportStatement();\r\n stmt.range = range;\r\n stmt.declarations = decls; if (decls) setParent(decls, stmt);\r\n stmt.namespaceName = null;\r\n stmt.path = path;\r\n var normalizedPath = normalizePath(path.value);\r\n if (path.value.startsWith(\".\")) { // relative in project\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute in library\r\n if (!normalizedPath.startsWith(LIBRARY_PREFIX)) {\r\n normalizedPath = LIBRARY_PREFIX + normalizedPath;\r\n }\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n return stmt;\r\n }\r\n\r\n static createImportStatementWithWildcard(\r\n identifier: IdentifierExpression,\r\n path: StringLiteralExpression,\r\n range: Range\r\n ): ImportStatement {\r\n var stmt = new ImportStatement();\r\n stmt.range = range;\r\n stmt.declarations = null;\r\n stmt.namespaceName = identifier;\r\n stmt.path = path;\r\n stmt.normalizedPath = resolvePath(\r\n normalizePath(path.value),\r\n range.source.normalizedPath\r\n );\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n return stmt;\r\n }\r\n\r\n static createImportDeclaration(\r\n externalName: IdentifierExpression,\r\n name: IdentifierExpression | null,\r\n range: Range\r\n ): ImportDeclaration {\r\n var elem = new ImportDeclaration();\r\n elem.range = range;\r\n elem.externalName = externalName; externalName.parent = elem;\r\n if (!name) {\r\n name = externalName;\r\n } else {\r\n name.parent = elem;\r\n }\r\n elem.name = name;\r\n return elem;\r\n }\r\n\r\n static createInterfaceDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[],\r\n extendsType: TypeNode | null, // can't be a function\r\n members: DeclarationStatement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): InterfaceDeclaration {\r\n var stmt = new InterfaceDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createFieldDeclaration(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): FieldDeclaration {\r\n var stmt = new FieldDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.type = type; if (type) type.parent = stmt;\r\n stmt.initializer = initializer; if (initializer) initializer.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createForStatement(\r\n initializer: Statement | null,\r\n condition: Expression | null,\r\n incrementor: Expression | null,\r\n statement: Statement,\r\n range: Range\r\n ): ForStatement {\r\n var stmt = new ForStatement();\r\n stmt.range = range;\r\n stmt.initializer = initializer; if (initializer) initializer.parent = stmt;\r\n stmt.condition = condition; if (condition) condition.parent = stmt;\r\n stmt.incrementor = incrementor; if (incrementor) incrementor.parent = stmt;\r\n stmt.statement = statement; statement.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createFunctionDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): FunctionDeclaration {\r\n var stmt = new FunctionDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.signature = signature; signature.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createMethodDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): MethodDeclaration {\r\n var stmt = new MethodDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.signature = signature; signature.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createNamespaceDeclaration(\r\n name: IdentifierExpression,\r\n members: Statement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): NamespaceDeclaration {\r\n var stmt = new NamespaceDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createReturnStatement(\r\n value: Expression | null,\r\n range: Range\r\n ): ReturnStatement {\r\n var stmt = new ReturnStatement();\r\n stmt.range = range;\r\n stmt.value = value; if (value) value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createSwitchStatement(\r\n condition: Expression,\r\n cases: SwitchCase[],\r\n range: Range\r\n ): SwitchStatement {\r\n var stmt = new SwitchStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.cases = cases; setParent(cases, stmt);\r\n return stmt;\r\n }\r\n\r\n static createSwitchCase(\r\n label: Expression | null,\r\n statements: Statement[],\r\n range: Range\r\n ): SwitchCase {\r\n var elem = new SwitchCase();\r\n elem.range = range;\r\n elem.label = label; if (label) label.parent = elem;\r\n elem.statements = statements; setParent(statements, elem);\r\n return elem;\r\n }\r\n\r\n static createThrowStatement(\r\n value: Expression,\r\n range: Range\r\n ): ThrowStatement {\r\n var stmt = new ThrowStatement();\r\n stmt.range = range;\r\n stmt.value = value; value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createTryStatement(\r\n statements: Statement[],\r\n catchVariable: IdentifierExpression | null,\r\n catchStatements: Statement[] | null,\r\n finallyStatements: Statement[] | null,\r\n range: Range\r\n ): TryStatement {\r\n var stmt = new TryStatement();\r\n stmt.range = range;\r\n stmt.statements = statements; setParent(statements, stmt);\r\n stmt.catchVariable = catchVariable;\r\n if (catchVariable) catchVariable.parent = stmt;\r\n stmt.catchStatements = catchStatements;\r\n if (catchStatements) setParent(catchStatements, stmt);\r\n stmt.finallyStatements = finallyStatements;\r\n if (finallyStatements) setParent(finallyStatements, stmt);\r\n return stmt;\r\n }\r\n\r\n static createTypeDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n alias: CommonTypeNode,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): TypeDeclaration {\r\n var stmt = new TypeDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.type = alias; alias.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createVariableStatement(\r\n declarations: VariableDeclaration[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): VariableStatement {\r\n var stmt = new VariableStatement();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.declarations = declarations; setParent(declarations, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createVariableDeclaration(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): VariableDeclaration {\r\n var elem = new VariableDeclaration();\r\n elem.range = range;\r\n elem.flags = flags;\r\n elem.name = name; name.parent = elem;\r\n elem.type = type; if (type) type.parent = elem;\r\n elem.initializer = initializer; if (initializer) initializer.parent = elem;\r\n elem.decorators = decorators; // inherited\r\n return elem;\r\n }\r\n\r\n static createVoidStatement(\r\n expression: Expression,\r\n range: Range\r\n ): VoidStatement {\r\n var stmt = new VoidStatement();\r\n stmt.range = range;\r\n stmt.expression = expression;\r\n return stmt;\r\n }\r\n\r\n static createWhileStatement(\r\n condition: Expression,\r\n statement: Statement,\r\n range: Range\r\n ): WhileStatement {\r\n var stmt = new WhileStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.statement = statement; statement.parent = stmt;\r\n return stmt;\r\n }\r\n}\r\n\r\n// types\r\n\r\nexport abstract class CommonTypeNode extends Node {\r\n // kind varies\r\n\r\n /** Whether nullable or not. */\r\n isNullable: bool;\r\n}\r\n\r\n/** Represents a type annotation. */\r\nexport class TypeNode extends CommonTypeNode {\r\n kind = NodeKind.TYPE;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Type argument references. */\r\n typeArguments: CommonTypeNode[] | null;\r\n}\r\n\r\n/** Represents a type parameter. */\r\nexport class TypeParameterNode extends Node {\r\n kind = NodeKind.TYPEPARAMETER;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Extended type reference, if any. */\r\n extendsType: TypeNode | null; // can't be a function\r\n}\r\n\r\n/** Represents the kind of a parameter. */\r\nexport enum ParameterKind {\r\n /** No specific flags. */\r\n DEFAULT,\r\n /** Is an optional parameter. */\r\n OPTIONAL,\r\n /** Is a rest parameter. */\r\n REST\r\n}\r\n\r\n/** Represents a function parameter. */\r\nexport class ParameterNode extends Node {\r\n kind = NodeKind.PARAMETER;\r\n\r\n /** Parameter kind. */\r\n parameterKind: ParameterKind;\r\n /** Parameter name. */\r\n name: IdentifierExpression;\r\n /** Parameter type. */\r\n type: CommonTypeNode;\r\n /** Initializer expression, if present. */\r\n initializer: Expression | null;\r\n /** Implicit field declaration, if applicable. */\r\n implicitFieldDeclaration: FieldDeclaration | null = null;\r\n}\r\n\r\n/** Represents a function signature. */\r\nexport class SignatureNode extends CommonTypeNode {\r\n kind = NodeKind.SIGNATURE;\r\n\r\n /** Accepted parameters. */\r\n parameters: ParameterNode[];\r\n /** Return type. */\r\n returnType: CommonTypeNode;\r\n /** Explicitly provided this type, if any. */\r\n explicitThisType: TypeNode | null; // can't be a function\r\n}\r\n\r\n// special\r\n\r\n/** Built-in decorator kinds. */\r\nexport enum DecoratorKind {\r\n CUSTOM,\r\n GLOBAL,\r\n OPERATOR,\r\n OPERATOR_BINARY,\r\n OPERATOR_PREFIX,\r\n OPERATOR_POSTFIX,\r\n UNMANAGED,\r\n SEALED,\r\n INLINE\r\n}\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.g: {\r\n if (nameStr == \"global\") return DecoratorKind.GLOBAL;\r\n break;\r\n }\r\n case CharCode.i: {\r\n if (nameStr == \"inline\") return DecoratorKind.INLINE;\r\n break;\r\n }\r\n case CharCode.o: {\r\n if (nameStr == \"operator\") return DecoratorKind.OPERATOR;\r\n break;\r\n }\r\n case CharCode.s: {\r\n if (nameStr == \"sealed\") return DecoratorKind.SEALED;\r\n break;\r\n }\r\n case CharCode.u: {\r\n if (nameStr == \"unmanaged\") return DecoratorKind.UNMANAGED;\r\n break;\r\n }\r\n }\r\n } else if (\r\n name.kind == NodeKind.PROPERTYACCESS &&\r\n (name).expression.kind == NodeKind.IDENTIFIER\r\n ) {\r\n let nameStr = ((name).expression).text;\r\n assert(nameStr.length);\r\n let propStr = (name).property.text;\r\n assert(propStr.length);\r\n // @operator.binary, @operator.prefix, @operator.postfix\r\n if (nameStr == \"operator\") {\r\n switch (propStr.charCodeAt(0)) {\r\n case CharCode.b: {\r\n if (propStr == \"binary\") return DecoratorKind.OPERATOR_BINARY;\r\n break;\r\n }\r\n case CharCode.p: {\r\n switch (propStr) {\r\n case \"prefix\": return DecoratorKind.OPERATOR_PREFIX;\r\n case \"postfix\": return DecoratorKind.OPERATOR_POSTFIX;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return DecoratorKind.CUSTOM;\r\n}\r\n\r\n/** Represents a decorator. */\r\nexport class DecoratorNode extends Node {\r\n kind = NodeKind.DECORATOR;\r\n\r\n /** Built-in kind, if applicable. */\r\n decoratorKind: DecoratorKind;\r\n /** Name expression. */\r\n name: Expression;\r\n /** Argument expressions. */\r\n arguments: Expression[] | null;\r\n}\r\n\r\n/** Comment kinds. */\r\nexport enum CommentKind {\r\n /** Line comment. */\r\n LINE,\r\n /** Triple-slash comment. */\r\n TRIPLE,\r\n /** Block comment. */\r\n BLOCK\r\n}\r\n\r\n/** Represents a comment. */\r\nexport class CommentNode extends Node {\r\n kind = NodeKind.COMMENT;\r\n\r\n /** Comment kind. */\r\n commentKind: CommentKind;\r\n /** Comment text. */\r\n text: string;\r\n}\r\n\r\n// expressions\r\n\r\n/** Base class of all expression nodes. */\r\nexport abstract class Expression extends Node { }\r\n\r\n/** Represents an identifier expression. */\r\nexport class IdentifierExpression extends Expression {\r\n kind = NodeKind.IDENTIFIER;\r\n\r\n /** Textual name. */\r\n text: string;\r\n}\r\n\r\n/** Indicates the kind of a literal. */\r\nexport enum LiteralKind {\r\n FLOAT,\r\n INTEGER,\r\n STRING,\r\n REGEXP,\r\n ARRAY,\r\n OBJECT\r\n}\r\n\r\n/** Base class of all literal expressions. */\r\nexport abstract class LiteralExpression extends Expression {\r\n kind = NodeKind.LITERAL;\r\n\r\n /** Specific literal kind. */\r\n literalKind: LiteralKind;\r\n}\r\n\r\n/** Represents an `[]` literal expression. */\r\nexport class ArrayLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.ARRAY;\r\n\r\n /** Nested element expressions. */\r\n elementExpressions: (Expression | null)[];\r\n}\r\n\r\n/** Indicates the kind of an assertion. */\r\nexport enum AssertionKind {\r\n PREFIX,\r\n AS\r\n}\r\n\r\n/** Represents an assertion expression. */\r\nexport class AssertionExpression extends Expression {\r\n kind = NodeKind.ASSERTION;\r\n\r\n /** Specific kind of this assertion. */\r\n assertionKind: AssertionKind;\r\n /** Expression being asserted. */\r\n expression: Expression;\r\n /** Target type. */\r\n toType: CommonTypeNode;\r\n}\r\n\r\n/** Represents a binary expression. */\r\nexport class BinaryExpression extends Expression {\r\n kind = NodeKind.BINARY;\r\n\r\n /** Operator token. */\r\n operator: Token;\r\n /** Left-hand side expression */\r\n left: Expression;\r\n /** Right-hand side expression. */\r\n right: Expression;\r\n}\r\n\r\n/** Represents a call expression. */\r\nexport class CallExpression extends Expression {\r\n kind = NodeKind.CALL;\r\n\r\n /** Called expression. Usually an identifier or property access expression. */\r\n expression: Expression;\r\n /** Provided type arguments. */\r\n typeArguments: CommonTypeNode[] | null;\r\n /** Provided arguments. */\r\n arguments: Expression[];\r\n}\r\n\r\n/** Represents a comma expression composed of multiple expressions. */\r\nexport class CommaExpression extends Expression {\r\n kind = NodeKind.COMMA;\r\n\r\n /** Sequential expressions. */\r\n expressions: Expression[];\r\n}\r\n\r\n/** Represents a `constructor` expression. */\r\nexport class ConstructorExpression extends IdentifierExpression {\r\n kind = NodeKind.CONSTRUCTOR;\r\n text = \"constructor\";\r\n}\r\n\r\n/** Represents an element access expression, e.g., array access. */\r\nexport class ElementAccessExpression extends Expression {\r\n kind = NodeKind.ELEMENTACCESS;\r\n\r\n /** Expression being accessed. */\r\n expression: Expression;\r\n /** Element of the expression being accessed. */\r\n elementExpression: Expression;\r\n}\r\n\r\n/** Represents a float literal expression. */\r\nexport class FloatLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.FLOAT;\r\n\r\n /** Float value. */\r\n value: f64;\r\n}\r\n\r\n/** Represents a function expression using the 'function' keyword. */\r\nexport class FunctionExpression extends Expression {\r\n kind = NodeKind.FUNCTION;\r\n\r\n /** Inline function declaration. */\r\n declaration: FunctionDeclaration;\r\n}\r\n\r\n/** Represents an `instanceof` expression. */\r\nexport class InstanceOfExpression extends Expression {\r\n kind = NodeKind.INSTANCEOF;\r\n\r\n /** Expression being asserted. */\r\n expression: Expression;\r\n /** Type to test for. */\r\n isType: CommonTypeNode;\r\n}\r\n\r\n/** Represents an integer literal expression. */\r\nexport class IntegerLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.INTEGER;\r\n\r\n /** Integer value. */\r\n value: I64;\r\n}\r\n\r\n/** Represents a `new` expression. Like a call but with its own kind. */\r\nexport class NewExpression extends CallExpression {\r\n kind = NodeKind.NEW;\r\n}\r\n\r\n/** Represents a `null` expression. */\r\nexport class NullExpression extends IdentifierExpression {\r\n kind = NodeKind.NULL;\r\n text = \"null\";\r\n}\r\n\r\n/** Represents a parenthesized expression. */\r\nexport class ParenthesizedExpression extends Expression {\r\n kind = NodeKind.PARENTHESIZED;\r\n\r\n /** Expression in parenthesis. */\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a property access expression. */\r\nexport class PropertyAccessExpression extends Expression {\r\n kind = NodeKind.PROPERTYACCESS;\r\n\r\n /** Expression being accessed. */\r\n expression: Expression;\r\n /** Property of the expression being accessed. */\r\n property: IdentifierExpression;\r\n}\r\n\r\n/** Represents a regular expression literal expression. */\r\nexport class RegexpLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.REGEXP;\r\n\r\n /** Regular expression pattern. */\r\n pattern: string;\r\n /** Regular expression flags. */\r\n patternFlags: string;\r\n}\r\n\r\n/** Represents a ternary expression, i.e., short if notation. */\r\nexport class TernaryExpression extends Expression {\r\n kind = NodeKind.TERNARY;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Expression executed when condition is `true`. */\r\n ifThen: Expression;\r\n /** Expression executed when condition is `false`. */\r\n ifElse: Expression;\r\n}\r\n\r\n/** Represents a string literal expression. */\r\nexport class StringLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.STRING;\r\n\r\n /** String value without quotes. */\r\n value: string;\r\n}\r\n\r\n/** Represents a `super` expression. */\r\nexport class SuperExpression extends IdentifierExpression {\r\n kind = NodeKind.SUPER;\r\n text = \"super\";\r\n}\r\n\r\n/** Represents a `this` expression. */\r\nexport class ThisExpression extends IdentifierExpression {\r\n kind = NodeKind.THIS;\r\n text = \"this\";\r\n}\r\n\r\n/** Represents a `true` expression. */\r\nexport class TrueExpression extends IdentifierExpression {\r\n kind = NodeKind.TRUE;\r\n text = \"true\";\r\n}\r\n\r\n/** Represents a `false` expression. */\r\nexport class FalseExpression extends IdentifierExpression {\r\n kind = NodeKind.FALSE;\r\n text = \"false\";\r\n}\r\n\r\n/** Base class of all unary expressions. */\r\nexport abstract class UnaryExpression extends Expression {\r\n\r\n /** Operator token. */\r\n operator: Token;\r\n /** Operand expression. */\r\n operand: Expression;\r\n}\r\n\r\n/** Represents a unary postfix expression, e.g. a postfix increment. */\r\nexport class UnaryPostfixExpression extends UnaryExpression {\r\n kind = NodeKind.UNARYPOSTFIX;\r\n}\r\n\r\n/** Represents a unary prefix expression, e.g. a negation. */\r\nexport class UnaryPrefixExpression extends UnaryExpression {\r\n kind = NodeKind.UNARYPREFIX;\r\n}\r\n\r\n// statements\r\n\r\nexport function isLastStatement(statement: Statement): bool {\r\n var parent = assert(statement.parent);\r\n if (parent.kind == NodeKind.BLOCK) {\r\n let statements = (parent).statements;\r\n if (statements[statements.length - 1] === statement) {\r\n switch (assert(parent.parent).kind) {\r\n case NodeKind.FUNCTIONDECLARATION:\r\n case NodeKind.METHODDECLARATION: return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n/** Base class of all statement nodes. */\r\nexport abstract class Statement extends Node { }\r\n\r\n/** Indicates the specific kind of a source. */\r\nexport enum SourceKind {\r\n /** Default source. Usually imported from an entry file. */\r\n DEFAULT,\r\n /** Entry file. */\r\n ENTRY,\r\n /** Library file. */\r\n LIBRARY\r\n}\r\n\r\n/** A top-level source node. */\r\nexport class Source extends Node {\r\n kind = NodeKind.SOURCE;\r\n parent = null;\r\n\r\n /** Source kind. */\r\n sourceKind: SourceKind;\r\n /** Normalized path. */\r\n normalizedPath: string;\r\n /** Path used internally. */\r\n internalPath: string;\r\n /** 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 this.internalPath = mangleInternalPath(this.normalizedPath);\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/** Tests if a specific decorator is present within the specified decorators. */\r\nexport function hasDecorator(name: string, decorators: DecoratorNode[] | null): bool {\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let expression = decorators[i].name;\r\n if (expression.kind == NodeKind.IDENTIFIER && (expression).text == name) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\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","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/**\r\n * A TypeScript tokenizer modified for AssemblyScript.\r\n *\r\n * Skips over trivia and provides a general mark/reset mechanism for the parser to utilize on\r\n * ambiguous tokens.\r\n *\r\n * @module tokenizer\r\n *//***/\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticMessage,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Source,\r\n CommentKind\r\n} from \"./ast\";\r\n\r\nimport {\r\n CharCode,\r\n isLineBreak,\r\n isWhiteSpace,\r\n isIdentifierStart,\r\n isIdentifierPart,\r\n isDecimalDigit,\r\n isOctalDigit,\r\n isKeywordCharacter\r\n} from \"./util\";\r\n\r\n/** Named token types. */\r\nexport enum Token {\r\n\r\n // keywords\r\n // discarded: ANY, BOOLEAN, NEVER, NUMBER, STRING, SYMBOL, UNDEFINED, LESSTHAN_SLASH\r\n\r\n ABSTRACT,\r\n AS,\r\n ASYNC,\r\n AWAIT, // ES2017\r\n BREAK, // ES2017\r\n CASE, // ES2017\r\n CATCH, // ES2017\r\n CLASS, // ES2017\r\n CONST, // ES2017\r\n CONTINUE, // ES2017\r\n CONSTRUCTOR,\r\n DEBUGGER, // ES2017\r\n DECLARE,\r\n DEFAULT, // ES2017\r\n DELETE, // ES2017\r\n DO, // ES2017\r\n ELSE, // ES2017\r\n ENUM, // ES2017 future\r\n EXPORT, // ES2017\r\n EXTENDS, // ES2017\r\n FALSE, // ES\r\n FINALLY, // ES2017\r\n FOR, // ES2017\r\n FROM, // AS possible identifier\r\n FUNCTION, // ES2017\r\n GET,\r\n IF, // ES2017\r\n IMPLEMENTS, // ES2017 non-lexical\r\n IMPORT, // ES2017\r\n IN, // ES2017\r\n INSTANCEOF, // ES2017\r\n INTERFACE, // ES2017 non-lexical\r\n IS,\r\n KEYOF,\r\n LET, // ES2017 non-lexical\r\n MODULE, // AS possible identifier\r\n NAMESPACE, // AS possible identifier\r\n NEW, // ES2017\r\n NULL, // ES\r\n OF,\r\n PACKAGE, // ES2017 non-lexical\r\n PRIVATE, // ES2017 non-lexical\r\n PROTECTED, // ES2017 non-lexical\r\n PUBLIC, // ES2017 non-lexical\r\n READONLY,\r\n RETURN, // ES2017\r\n SET,\r\n STATIC, // ES2017 non-lexical\r\n SUPER, // ES2017\r\n SWITCH, // ES2017\r\n THIS, // ES2017\r\n THROW, // ES2017\r\n TRUE, // ES\r\n TRY, // ES2017\r\n TYPE, // AS possible identifier\r\n TYPEOF, // ES2017\r\n VAR, // ES2017\r\n VOID, // ES2017\r\n WHILE, // ES2017\r\n WITH, // ES2017\r\n YIELD, // ES2017\r\n\r\n // punctuation\r\n\r\n OPENBRACE,\r\n CLOSEBRACE,\r\n OPENPAREN,\r\n CLOSEPAREN,\r\n OPENBRACKET,\r\n CLOSEBRACKET,\r\n DOT,\r\n DOT_DOT_DOT,\r\n SEMICOLON,\r\n COMMA,\r\n LESSTHAN,\r\n GREATERTHAN,\r\n LESSTHAN_EQUALS,\r\n GREATERTHAN_EQUALS,\r\n EQUALS_EQUALS,\r\n EXCLAMATION_EQUALS,\r\n EQUALS_EQUALS_EQUALS,\r\n EXCLAMATION_EQUALS_EQUALS,\r\n EQUALS_GREATERTHAN,\r\n PLUS,\r\n MINUS,\r\n ASTERISK_ASTERISK,\r\n ASTERISK,\r\n SLASH,\r\n PERCENT,\r\n PLUS_PLUS,\r\n MINUS_MINUS,\r\n LESSTHAN_LESSTHAN,\r\n GREATERTHAN_GREATERTHAN,\r\n GREATERTHAN_GREATERTHAN_GREATERTHAN,\r\n AMPERSAND,\r\n BAR,\r\n CARET,\r\n EXCLAMATION,\r\n TILDE,\r\n AMPERSAND_AMPERSAND,\r\n BAR_BAR,\r\n QUESTION,\r\n COLON,\r\n EQUALS,\r\n PLUS_EQUALS,\r\n MINUS_EQUALS,\r\n ASTERISK_EQUALS,\r\n ASTERISK_ASTERISK_EQUALS,\r\n SLASH_EQUALS,\r\n PERCENT_EQUALS,\r\n LESSTHAN_LESSTHAN_EQUALS,\r\n GREATERTHAN_GREATERTHAN_EQUALS,\r\n GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS,\r\n AMPERSAND_EQUALS,\r\n BAR_EQUALS,\r\n CARET_EQUALS,\r\n AT,\r\n\r\n // literals\r\n\r\n IDENTIFIER,\r\n STRINGLITERAL,\r\n INTEGERLITERAL,\r\n FLOATLITERAL,\r\n\r\n // meta\r\n\r\n INVALID,\r\n ENDOFFILE\r\n}\r\n\r\nexport enum IdentifierHandling {\r\n DEFAULT,\r\n PREFER,\r\n ALWAYS\r\n}\r\n\r\nexport function tokenFromKeyword(text: string): Token {\r\n assert(text.length);\r\n switch (text.charCodeAt(0)) {\r\n case CharCode.a: {\r\n switch (text) {\r\n case \"abstract\": return Token.ABSTRACT;\r\n case \"as\": return Token.AS;\r\n case \"async\": return Token.ASYNC;\r\n case \"await\": return Token.AWAIT;\r\n }\r\n break;\r\n }\r\n case CharCode.b: {\r\n switch (text) {\r\n case \"break\": return Token.BREAK;\r\n }\r\n break;\r\n }\r\n case CharCode.c: {\r\n switch (text) {\r\n case \"case\": return Token.CASE;\r\n case \"catch\": return Token.CATCH;\r\n case \"class\": return Token.CLASS;\r\n case \"continue\": return Token.CONTINUE;\r\n case \"const\": return Token.CONST;\r\n case \"constructor\": return Token.CONSTRUCTOR;\r\n }\r\n break;\r\n }\r\n case CharCode.d: {\r\n switch (text) {\r\n case \"debugger\": return Token.DEBUGGER;\r\n case \"declare\": return Token.DECLARE;\r\n case \"default\": return Token.DEFAULT;\r\n case \"delete\": return Token.DELETE;\r\n case \"do\": return Token.DO;\r\n }\r\n break;\r\n }\r\n case CharCode.e: {\r\n switch (text) {\r\n case \"else\": return Token.ELSE;\r\n case \"enum\": return Token.ENUM;\r\n case \"export\": return Token.EXPORT;\r\n case \"extends\": return Token.EXTENDS;\r\n }\r\n break;\r\n }\r\n case CharCode.f: {\r\n switch (text) {\r\n case \"false\": return Token.FALSE;\r\n case \"finally\": return Token.FINALLY;\r\n case \"for\": return Token.FOR;\r\n case \"from\": return Token.FROM;\r\n case \"function\": return Token.FUNCTION;\r\n }\r\n break;\r\n }\r\n case CharCode.g: {\r\n switch (text) {\r\n case \"get\": return Token.GET;\r\n }\r\n break;\r\n }\r\n case CharCode.i: {\r\n switch (text) {\r\n case \"if\": return Token.IF;\r\n case \"implements\": return Token.IMPLEMENTS;\r\n case \"import\": return Token.IMPORT;\r\n case \"in\": return Token.IN;\r\n case \"instanceof\": return Token.INSTANCEOF;\r\n case \"interface\": return Token.INTERFACE;\r\n case \"is\": return Token.IS;\r\n }\r\n break;\r\n }\r\n case CharCode.k: {\r\n switch (text) {\r\n case \"keyof\": return Token.KEYOF;\r\n }\r\n break;\r\n }\r\n case CharCode.l: {\r\n switch (text) {\r\n case \"let\": return Token.LET;\r\n }\r\n break;\r\n }\r\n case CharCode.m: {\r\n switch (text) {\r\n case \"module\": return Token.MODULE;\r\n }\r\n break;\r\n }\r\n case CharCode.n: {\r\n switch (text) {\r\n case \"namespace\": return Token.NAMESPACE;\r\n case \"new\": return Token.NEW;\r\n case \"null\": return Token.NULL;\r\n }\r\n break;\r\n }\r\n case CharCode.o: {\r\n switch (text) {\r\n case \"of\": return Token.OF;\r\n }\r\n break;\r\n }\r\n case CharCode.p: {\r\n switch (text) {\r\n case \"package\": return Token.PACKAGE;\r\n case \"private\": return Token.PRIVATE;\r\n case \"protected\": return Token.PROTECTED;\r\n case \"public\": return Token.PUBLIC;\r\n }\r\n break;\r\n }\r\n case CharCode.r: {\r\n switch (text) {\r\n case \"readonly\": return Token.READONLY;\r\n case \"return\": return Token.RETURN;\r\n }\r\n break;\r\n }\r\n case CharCode.s: {\r\n switch (text) {\r\n case \"set\": return Token.SET;\r\n case \"static\": return Token.STATIC;\r\n case \"super\": return Token.SUPER;\r\n case \"switch\": return Token.SWITCH;\r\n }\r\n break;\r\n }\r\n case CharCode.t: {\r\n switch (text) {\r\n case \"this\": return Token.THIS;\r\n case \"throw\": return Token.THROW;\r\n case \"true\": return Token.TRUE;\r\n case \"try\": return Token.TRY;\r\n case \"type\": return Token.TYPE;\r\n case \"typeof\": return Token.TYPEOF;\r\n }\r\n break;\r\n }\r\n case CharCode.v: {\r\n switch (text) {\r\n case \"var\": return Token.VAR;\r\n case \"void\": return Token.VOID;\r\n }\r\n break;\r\n }\r\n case CharCode.w: {\r\n switch (text) {\r\n case \"while\": return Token.WHILE;\r\n case \"with\": return Token.WITH;\r\n }\r\n break;\r\n }\r\n case CharCode.y: {\r\n switch (text) {\r\n case \"yield\": return Token.YIELD;\r\n }\r\n break;\r\n }\r\n }\r\n return Token.INVALID;\r\n}\r\n\r\nexport function tokenIsAlsoIdentifier(token: Token): bool {\r\n switch (token) {\r\n case Token.ABSTRACT:\r\n case Token.AS:\r\n case Token.CONSTRUCTOR:\r\n case Token.DECLARE:\r\n case Token.DELETE:\r\n case Token.FROM:\r\n case Token.FOR:\r\n case Token.GET:\r\n case Token.IS:\r\n case Token.KEYOF:\r\n case Token.MODULE:\r\n case Token.NAMESPACE:\r\n case Token.READONLY:\r\n case Token.SET:\r\n case Token.TYPE: return true;\r\n default: return false;\r\n }\r\n}\r\n\r\nexport function operatorTokenToString(token: Token): string {\r\n switch (token) {\r\n case Token.DELETE: return \"delete\";\r\n case Token.IN: return \"in\";\r\n case Token.INSTANCEOF: return \"instanceof\";\r\n case Token.NEW: return \"new\";\r\n case Token.TYPEOF: return \"typeof\";\r\n case Token.VOID: return \"void\";\r\n case Token.YIELD: return \"yield\";\r\n case Token.DOT_DOT_DOT: return \"...\";\r\n case Token.COMMA: return \",\";\r\n case Token.LESSTHAN: return \"<\";\r\n case Token.GREATERTHAN: return \">\";\r\n case Token.LESSTHAN_EQUALS: return \"<=\";\r\n case Token.GREATERTHAN_EQUALS: return \">=\";\r\n case Token.EQUALS_EQUALS: return \"==\";\r\n case Token.EXCLAMATION_EQUALS: return \"!=\";\r\n case Token.EQUALS_EQUALS_EQUALS: return \"===\";\r\n case Token.EXCLAMATION_EQUALS_EQUALS: return \"!==\";\r\n case Token.PLUS: return \"+\";\r\n case Token.MINUS: return \"-\";\r\n case Token.ASTERISK_ASTERISK: return \"**\";\r\n case Token.ASTERISK: return \"*\";\r\n case Token.SLASH: return \"/\";\r\n case Token.PERCENT: return \"%\";\r\n case Token.PLUS_PLUS: return \"++\";\r\n case Token.MINUS_MINUS: return \"--\";\r\n case Token.LESSTHAN_LESSTHAN: return \"<<\";\r\n case Token.GREATERTHAN_GREATERTHAN: return \">>\";\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: return \">>>\";\r\n case Token.AMPERSAND: return \"&\";\r\n case Token.BAR: return \"|\";\r\n case Token.CARET: return \"^\";\r\n case Token.EXCLAMATION: return \"!\";\r\n case Token.TILDE: return \"~\";\r\n case Token.AMPERSAND_AMPERSAND: return \"&&\";\r\n case Token.BAR_BAR: return \"||\";\r\n case Token.EQUALS: return \"=\";\r\n case Token.PLUS_EQUALS: return \"+=\";\r\n case Token.MINUS_EQUALS: return \"-=\";\r\n case Token.ASTERISK_EQUALS: return \"*=\";\r\n case Token.ASTERISK_ASTERISK_EQUALS: return \"**=\";\r\n case Token.SLASH_EQUALS: return \"/=\";\r\n case Token.PERCENT_EQUALS: return \"%=\";\r\n case Token.LESSTHAN_LESSTHAN_EQUALS: return \"<<=\";\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS: return \">>=\";\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS: return \">>>=\";\r\n case Token.AMPERSAND_EQUALS: return \"&=\";\r\n case Token.BAR_EQUALS: return \"|=\";\r\n case Token.CARET_EQUALS: return \"^=\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\nexport class Range {\r\n\r\n source: Source;\r\n start: i32;\r\n end: i32;\r\n\r\n // TODO: set these while tokenizing\r\n // line: i32;\r\n // column: i32;\r\n\r\n constructor(source: Source, start: i32, end: i32) {\r\n this.source = source;\r\n this.start = start;\r\n this.end = end;\r\n }\r\n\r\n static join(a: Range, b: Range): Range {\r\n if (a.source != b.source) throw new Error(\"source mismatch\");\r\n return new Range(a.source,\r\n a.start < b.start ? a.start : b.start,\r\n a.end > b.end ? a.end : b.end\r\n );\r\n }\r\n\r\n get atStart(): Range {\r\n return new Range(this.source, this.start, this.start);\r\n }\r\n get atEnd(): Range {\r\n return new Range(this.source, this.end, this.end);\r\n }\r\n\r\n get line(): i32 {\r\n var text = this.source.text;\r\n var line = 1;\r\n for (let pos = this.start; pos >= 0; --pos) {\r\n if (text.charCodeAt(pos) == CharCode.LINEFEED) line++;\r\n }\r\n return line;\r\n }\r\n\r\n get column(): i32 {\r\n var text = this.source.text;\r\n var column = 0;\r\n for (let pos = this.start - 1; pos >= 0; --pos) {\r\n if (text.charCodeAt(pos) == CharCode.LINEFEED) break;\r\n ++column;\r\n }\r\n return column;\r\n }\r\n\r\n toString(): string {\r\n return this.source.text.substring(this.start, this.end);\r\n }\r\n\r\n debugInfoRef: usize = 0;\r\n}\r\n\r\ndeclare function parseFloat(str: string): f64;\r\n\r\n/** Handler for intercepting comments while tokenizing. */\r\nexport type CommentHandler = (kind: CommentKind, text: string, range: Range) => void;\r\n\r\n/** Tokenizes a source to individual {@link Token}s. */\r\nexport class Tokenizer extends DiagnosticEmitter {\r\n\r\n source: Source;\r\n end: i32 = 0;\r\n\r\n pos: i32 = 0;\r\n token: Token = -1;\r\n tokenPos: i32 = 0;\r\n\r\n nextToken: Token = -1;\r\n nextTokenPos: i32 = 0;\r\n nextTokenOnNewLine: bool = false;\r\n\r\n onComment: CommentHandler | null = null;\r\n\r\n /** Constructs a new tokenizer. */\r\n constructor(source: Source, diagnostics: DiagnosticMessage[] | null = null) {\r\n super(diagnostics);\r\n this.source = source;\r\n this.pos = 0;\r\n this.end = source.text.length;\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n\r\n var text = source.text;\r\n\r\n // skip bom\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.BYTEORDERMARK\r\n ) {\r\n ++this.pos;\r\n }\r\n\r\n // skip shebang\r\n if (\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.HASH &&\r\n text.charCodeAt(this.pos + 1) == CharCode.EXCLAMATION\r\n ) {\r\n this.pos += 2;\r\n while (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) != CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n // 'next' now starts at lf or eof\r\n }\r\n }\r\n\r\n next(identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT): Token {\r\n this.nextToken = -1;\r\n return this.token = this.unsafeNext(identifierHandling);\r\n }\r\n\r\n private unsafeNext(\r\n identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT,\r\n maxTokenLength: i32 = i32.MAX_VALUE\r\n ): Token {\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n this.tokenPos = this.pos;\r\n let c = text.charCodeAt(this.pos);\r\n switch (c) {\r\n case CharCode.CARRIAGERETURN: {\r\n if (\r\n ++this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n break;\r\n }\r\n case CharCode.LINEFEED:\r\n case CharCode.TAB:\r\n case CharCode.VERTICALTAB:\r\n case CharCode.FORMFEED:\r\n case CharCode.SPACE: {\r\n ++this.pos;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.EXCLAMATION_EQUALS_EQUALS;\r\n }\r\n return Token.EXCLAMATION_EQUALS;\r\n }\r\n return Token.EXCLAMATION;\r\n }\r\n case CharCode.DOUBLEQUOTE:\r\n case CharCode.SINGLEQUOTE:\r\n case CharCode.BACKTICK: { // TODO\r\n return Token.STRINGLITERAL; // expects a call to readString\r\n }\r\n case CharCode.PERCENT: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.PERCENT_EQUALS;\r\n }\r\n return Token.PERCENT;\r\n }\r\n case CharCode.AMPERSAND: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.AMPERSAND) {\r\n ++this.pos;\r\n return Token.AMPERSAND_AMPERSAND;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.AMPERSAND_EQUALS;\r\n }\r\n }\r\n return Token.AMPERSAND;\r\n }\r\n case CharCode.OPENPAREN: {\r\n ++this.pos;\r\n return Token.OPENPAREN;\r\n }\r\n case CharCode.CLOSEPAREN: {\r\n ++this.pos;\r\n return Token.CLOSEPAREN;\r\n }\r\n case CharCode.ASTERISK: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.ASTERISK_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.ASTERISK_ASTERISK_EQUALS;\r\n }\r\n return Token.ASTERISK_ASTERISK;\r\n }\r\n }\r\n return Token.ASTERISK;\r\n }\r\n case CharCode.PLUS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.PLUS) {\r\n ++this.pos;\r\n return Token.PLUS_PLUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.PLUS_EQUALS;\r\n }\r\n }\r\n return Token.PLUS;\r\n }\r\n case CharCode.COMMA: {\r\n ++this.pos;\r\n return Token.COMMA;\r\n }\r\n case CharCode.MINUS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.MINUS) {\r\n ++this.pos;\r\n return Token.MINUS_MINUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.MINUS_EQUALS;\r\n }\r\n }\r\n return Token.MINUS;\r\n }\r\n case CharCode.DOT: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (isDecimalDigit(text.charCodeAt(this.pos))) {\r\n --this.pos;\r\n return Token.FLOATLITERAL; // expects a call to readFloat\r\n }\r\n if (\r\n maxTokenLength > 2 && this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.DOT &&\r\n text.charCodeAt(this.pos + 1) == CharCode.DOT\r\n ) {\r\n this.pos += 2;\r\n return Token.DOT_DOT_DOT;\r\n }\r\n }\r\n return Token.DOT;\r\n }\r\n case CharCode.SLASH: {\r\n let commentStartPos = this.pos;\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.SLASH) { // single-line\r\n let commentKind = CommentKind.LINE;\r\n if (\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n ) {\r\n ++this.pos;\r\n commentKind = CommentKind.TRIPLE;\r\n }\r\n while (++this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.LINEFEED) {\r\n ++this.pos;\r\n break;\r\n }\r\n }\r\n if (this.onComment) {\r\n this.onComment(\r\n commentKind,\r\n text.substring(commentStartPos, this.pos),\r\n this.range(commentStartPos, this.pos)\r\n );\r\n }\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) { // multi-line\r\n let closed = false;\r\n while (++this.pos < this.end) {\r\n c = text.charCodeAt(this.pos);\r\n if (\r\n c == CharCode.ASTERISK &&\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n ) {\r\n this.pos += 2;\r\n closed = true;\r\n break;\r\n }\r\n }\r\n if (!closed) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n this.range(this.pos), \"*/\"\r\n );\r\n } else if (this.onComment) {\r\n this.onComment(\r\n CommentKind.BLOCK,\r\n text.substring(commentStartPos, this.pos),\r\n this.range(commentStartPos, this.pos)\r\n );\r\n }\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.SLASH_EQUALS;\r\n }\r\n }\r\n return Token.SLASH;\r\n }\r\n case CharCode._0:\r\n case CharCode._1:\r\n case CharCode._2:\r\n case CharCode._3:\r\n case CharCode._4:\r\n case CharCode._5:\r\n case CharCode._6:\r\n case CharCode._7:\r\n case CharCode._8:\r\n case CharCode._9: {\r\n return this.testInteger()\r\n ? Token.INTEGERLITERAL // expects a call to readInteger\r\n : Token.FLOATLITERAL; // expects a call to readFloat\r\n }\r\n case CharCode.COLON: {\r\n ++this.pos;\r\n return Token.COLON;\r\n }\r\n case CharCode.SEMICOLON: {\r\n ++this.pos;\r\n return Token.SEMICOLON;\r\n }\r\n case CharCode.LESSTHAN: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.LESSTHAN) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 &&\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.LESSTHAN_LESSTHAN_EQUALS;\r\n }\r\n return Token.LESSTHAN_LESSTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.LESSTHAN_EQUALS;\r\n }\r\n }\r\n return Token.LESSTHAN;\r\n }\r\n case CharCode.EQUALS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 &&\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.EQUALS_EQUALS_EQUALS;\r\n }\r\n return Token.EQUALS_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n return Token.EQUALS_GREATERTHAN;\r\n }\r\n }\r\n return Token.EQUALS;\r\n }\r\n case CharCode.GREATERTHAN: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n if (maxTokenLength > 2 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 3 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS;\r\n }\r\n return Token.GREATERTHAN_GREATERTHAN_GREATERTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_GREATERTHAN_EQUALS;\r\n }\r\n }\r\n return Token.GREATERTHAN_GREATERTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_EQUALS;\r\n }\r\n }\r\n return Token.GREATERTHAN;\r\n }\r\n case CharCode.QUESTION: {\r\n ++this.pos;\r\n return Token.QUESTION;\r\n }\r\n case CharCode.OPENBRACKET: {\r\n ++this.pos;\r\n return Token.OPENBRACKET;\r\n }\r\n case CharCode.CLOSEBRACKET: {\r\n ++this.pos;\r\n return Token.CLOSEBRACKET;\r\n }\r\n case CharCode.CARET: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.CARET_EQUALS;\r\n }\r\n return Token.CARET;\r\n }\r\n case CharCode.OPENBRACE: {\r\n ++this.pos;\r\n return Token.OPENBRACE;\r\n }\r\n case CharCode.BAR: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.BAR) {\r\n ++this.pos;\r\n return Token.BAR_BAR;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.BAR_EQUALS;\r\n }\r\n }\r\n return Token.BAR;\r\n }\r\n case CharCode.CLOSEBRACE: {\r\n ++this.pos;\r\n return Token.CLOSEBRACE;\r\n }\r\n case CharCode.TILDE: {\r\n ++this.pos;\r\n return Token.TILDE;\r\n }\r\n case CharCode.AT: {\r\n ++this.pos;\r\n return Token.AT;\r\n }\r\n default: {\r\n if (isIdentifierStart(c)) {\r\n if (isKeywordCharacter(c)) {\r\n let posBefore = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(c = text.charCodeAt(this.pos))\r\n ) {\r\n if (!isKeywordCharacter(c)) {\r\n this.pos = posBefore;\r\n return Token.IDENTIFIER;\r\n }\r\n }\r\n let keywordText = text.substring(posBefore, this.pos);\r\n let keywordToken = tokenFromKeyword(keywordText);\r\n if (\r\n keywordToken != Token.INVALID &&\r\n identifierHandling !== IdentifierHandling.ALWAYS &&\r\n !(\r\n identifierHandling === IdentifierHandling.PREFER &&\r\n tokenIsAlsoIdentifier(keywordToken)\r\n )\r\n ) {\r\n return keywordToken;\r\n }\r\n this.pos = posBefore;\r\n }\r\n return Token.IDENTIFIER; // expects a call to readIdentifier\r\n } else if (isWhiteSpace(c)) {\r\n ++this.pos;\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Invalid_character,\r\n this.range(this.pos, this.pos + 1)\r\n );\r\n ++this.pos;\r\n return Token.INVALID;\r\n }\r\n }\r\n }\r\n return Token.ENDOFFILE;\r\n }\r\n\r\n peek(\r\n checkOnNewLine: bool = false,\r\n identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT,\r\n maxCompoundLength: i32 = i32.MAX_VALUE\r\n ): Token {\r\n var text = this.source.text;\r\n if (this.nextToken < 0) {\r\n let posBefore = this.pos;\r\n let tokenBefore = this.token;\r\n let tokenPosBefore = this.tokenPos;\r\n this.nextToken = this.unsafeNext(identifierHandling, maxCompoundLength);\r\n this.nextTokenPos = this.tokenPos;\r\n if (checkOnNewLine) {\r\n this.nextTokenOnNewLine = false;\r\n while (--this.tokenPos > posBefore) {\r\n if (isLineBreak(text.charCodeAt(this.tokenPos))) {\r\n this.nextTokenOnNewLine = true;\r\n break;\r\n }\r\n }\r\n }\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n }\r\n return this.nextToken;\r\n }\r\n\r\n skipIdentifier(): bool {\r\n return this.skip(Token.IDENTIFIER, IdentifierHandling.PREFER);\r\n }\r\n\r\n skipIdentifierName(): bool {\r\n return this.skip(Token.IDENTIFIER, IdentifierHandling.ALWAYS);\r\n }\r\n\r\n skip(token: Token, identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT): bool {\r\n var posBefore = this.pos;\r\n var tokenBefore = this.token;\r\n var tokenPosBefore = this.tokenPos;\r\n var maxCompoundLength = i32.MAX_VALUE;\r\n switch (token) {\r\n case Token.GREATERTHAN: { // where parsing type arguments\r\n maxCompoundLength = 1;\r\n break;\r\n }\r\n }\r\n this.token = this.unsafeNext(identifierHandling, maxCompoundLength);\r\n if (this.token == token) {\r\n this.nextToken = -1;\r\n return true;\r\n } else {\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n return false;\r\n }\r\n }\r\n\r\n mark(): State {\r\n var state: State;\r\n if (reusableState) {\r\n state = reusableState;\r\n reusableState = null;\r\n } else {\r\n state = new State();\r\n }\r\n state.pos = this.pos;\r\n state.token = this.token;\r\n state.tokenPos = this.tokenPos;\r\n return state;\r\n }\r\n\r\n discard(state: State): void {\r\n reusableState = state;\r\n }\r\n\r\n reset(state: State): void {\r\n this.pos = state.pos;\r\n this.token = state.token;\r\n this.tokenPos = state.tokenPos;\r\n this.nextToken = -1;\r\n }\r\n\r\n range(start: i32 = -1, end: i32 = -1): Range {\r\n if (start < 0) {\r\n start = this.tokenPos;\r\n end = this.pos;\r\n } else if (end < 0) {\r\n end = start;\r\n }\r\n return new Range(this.source, start, end);\r\n }\r\n\r\n readIdentifier(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(text.charCodeAt(this.pos))\r\n );\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readString(): string {\r\n var text = this.source.text;\r\n var quote = text.charCodeAt(this.pos++);\r\n var start = this.pos;\r\n var result = \"\";\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.end)\r\n );\r\n break;\r\n }\r\n let c = text.charCodeAt(this.pos);\r\n if (c == quote) {\r\n result += text.substring(start, this.pos++);\r\n break;\r\n }\r\n if (c == CharCode.BACKSLASH) {\r\n result += text.substring(start, this.pos);\r\n result += this.readEscapeSequence();\r\n start = this.pos;\r\n continue;\r\n }\r\n if (isLineBreak(c)) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n return result;\r\n }\r\n\r\n readEscapeSequence(): string {\r\n if (++this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.end)\r\n );\r\n return \"\";\r\n }\r\n\r\n var text = this.source.text;\r\n var c = text.charCodeAt(this.pos++);\r\n switch (c) {\r\n case CharCode._0: return \"\\0\";\r\n case CharCode.b: return \"\\b\";\r\n case CharCode.t: return \"\\t\";\r\n case CharCode.n: return \"\\n\";\r\n case CharCode.v: return \"\\v\";\r\n case CharCode.f: return \"\\f\";\r\n case CharCode.r: return \"\\r\";\r\n case CharCode.SINGLEQUOTE: return \"'\";\r\n case CharCode.DOUBLEQUOTE: return \"\\\"\";\r\n case CharCode.u: {\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.OPENBRACE\r\n ) {\r\n ++this.pos;\r\n return this.readExtendedUnicodeEscape(); // \\u{DDDDDDDD}\r\n }\r\n return this.readUnicodeEscape(); // \\uDDDD\r\n }\r\n case CharCode.CARRIAGERETURN: {\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n // fall through\r\n }\r\n case CharCode.LINEFEED:\r\n case CharCode.LINESEPARATOR:\r\n case CharCode.PARAGRAPHSEPARATOR: return \"\";\r\n default: return String.fromCharCode(c);\r\n }\r\n }\r\n\r\n readRegexpPattern(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var escaped = false;\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.end)\r\n );\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.BACKSLASH) {\r\n ++this.pos;\r\n escaped = true;\r\n continue;\r\n }\r\n let c = text.charCodeAt(this.pos);\r\n if (c == CharCode.SLASH && !escaped) break;\r\n if (isLineBreak(c)) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n escaped = false;\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readRegexpFlags(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var flags = 0;\r\n while (this.pos < this.end) {\r\n let c: i32 = text.charCodeAt(this.pos);\r\n if (!isIdentifierPart(c)) break;\r\n ++this.pos;\r\n\r\n // make sure each supported flag is unique\r\n switch (c) {\r\n case CharCode.g: {\r\n flags |= flags & 1 ? -1 : 1;\r\n break;\r\n }\r\n case CharCode.i: {\r\n flags |= flags & 2 ? -1 : 2;\r\n break;\r\n }\r\n case CharCode.m: {\r\n flags |= flags & 4 ? -1 : 4;\r\n break;\r\n }\r\n default: {\r\n flags = -1;\r\n break;\r\n }\r\n }\r\n }\r\n if (flags == -1) {\r\n this.error(\r\n DiagnosticCode.Invalid_regular_expression_flags,\r\n this.range(start, this.pos)\r\n );\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n testInteger(): bool {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 1 < this.end) {\r\n switch (text.charCodeAt(this.pos + 2)) {\r\n case CharCode.X:\r\n case CharCode.x:\r\n case CharCode.B:\r\n case CharCode.b:\r\n case CharCode.O:\r\n case CharCode.o: return true;\r\n }\r\n }\r\n var pos = this.pos;\r\n while (pos < this.end) {\r\n let c = text.charCodeAt(pos);\r\n if (c == CharCode.DOT || c == CharCode.E || c == CharCode.e) {\r\n return false;\r\n }\r\n if ((c < CharCode._0 || c > CharCode._9) && c != CharCode._) break;\r\n // does not validate separator placement (this is done in readXYInteger)\r\n pos++;\r\n }\r\n return true;\r\n }\r\n\r\n readInteger(): I64 {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 2 < this.end) {\r\n switch (text.charCodeAt(this.pos + 1)) {\r\n case CharCode.X:\r\n case CharCode.x: {\r\n this.pos += 2;\r\n return this.readHexInteger();\r\n }\r\n case CharCode.B:\r\n case CharCode.b: {\r\n this.pos += 2;\r\n return this.readBinaryInteger();\r\n }\r\n case CharCode.O:\r\n case CharCode.o: {\r\n this.pos += 2;\r\n return this.readOctalInteger();\r\n }\r\n }\r\n if (isOctalDigit(text.charCodeAt(this.pos + 1))) {\r\n let start = this.pos;\r\n ++this.pos;\r\n let value = this.readOctalInteger();\r\n this.error(\r\n DiagnosticCode.Octal_literals_are_not_allowed_in_strict_mode,\r\n this.range(start, this.pos)\r\n );\r\n return value;\r\n }\r\n }\r\n return this.readDecimalInteger();\r\n }\r\n\r\n readHexInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_16 = i64_new(16, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 16 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n // value = value * 16 + 10 + c - CharCode.A;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.A, 0)\r\n );\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n // value = value * 16 + 10 + c - CharCode.a;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.a, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readDecimalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_10 = i64_new(10, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 10 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_10),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readOctalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_8 = i64_new(8, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._7) {\r\n // value = value * 8 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_8),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Octal_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readBinaryInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_2 = i64_new(2, 0);\r\n var i64_1 = i64_new(1, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c == CharCode._0) {\r\n // value = value * 2;\r\n value = i64_mul(\r\n value,\r\n i64_2\r\n );\r\n } else if (c == CharCode._1) {\r\n // value = value * 2 + 1;\r\n value = i64_add(\r\n i64_mul(value, i64_2),\r\n i64_1\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Binary_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readFloat(): f64 {\r\n // var text = this.source.text;\r\n // if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 2 < this.end) {\r\n // switch (text.charCodeAt(this.pos + 1)) {\r\n // case CharCode.X:\r\n // case CharCode.x: {\r\n // this.pos += 2;\r\n // return this.readHexFloat();\r\n // }\r\n // }\r\n // }\r\n return this.readDecimalFloat();\r\n }\r\n\r\n readDecimalFloat(): f64 {\r\n // TODO: numeric separators (parseFloat can't handle these)\r\n var start = this.pos;\r\n var text = this.source.text;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n if (this.pos < this.end && text.charCodeAt(this.pos) == CharCode.DOT) {\r\n ++this.pos;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n if (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos);\r\n if (c == CharCode.E || c == CharCode.e) {\r\n if (\r\n ++this.pos < this.end && (\r\n text.charCodeAt(this.pos) == CharCode.MINUS ||\r\n text.charCodeAt(this.pos) == CharCode.PLUS\r\n ) &&\r\n isDecimalDigit(text.charCodeAt(this.pos + 1))\r\n ) {\r\n ++this.pos;\r\n }\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n }\r\n return parseFloat(text.substring(start, this.pos));\r\n }\r\n\r\n readHexFloat(): f64 {\r\n throw new Error(\"not implemented\"); // TBD\r\n }\r\n\r\n readUnicodeEscape(): string {\r\n var remain = 4;\r\n var value = 0;\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos++);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n value = value * 16 + c - CharCode._0;\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n value = value * 16 + 10 + c - CharCode.A;\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n value = value * 16 + 10 + c - CharCode.a;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(this.pos - 1, this.pos)\r\n );\r\n return \"\";\r\n }\r\n if (--remain == 0) break;\r\n }\r\n if (remain) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.pos)\r\n );\r\n return \"\";\r\n }\r\n return String.fromCharCode(value);\r\n }\r\n\r\n private readExtendedUnicodeEscape(): string {\r\n var start = this.pos;\r\n var value = this.readHexInteger();\r\n var value32 = i64_low(value);\r\n var invalid = false;\r\n\r\n assert(!i64_high(value));\r\n if (value32 > 0x10FFFF) {\r\n this.error(\r\n DiagnosticCode.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n var text = this.source.text;\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(start, this.end)\r\n );\r\n invalid = true;\r\n } else if (text.charCodeAt(this.pos) == CharCode.CLOSEBRACE) {\r\n ++this.pos;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Unterminated_Unicode_escape_sequence,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n if (invalid) return \"\";\r\n return value32 < 65536\r\n ? String.fromCharCode(value32)\r\n : String.fromCharCode(\r\n (((value32 - 65536) / 1024 | 0) + 0xD800) as i32,\r\n ( (value32 - 65536) % 1024 + 0xDC00) as i32\r\n );\r\n }\r\n\r\n finish(): void {\r\n }\r\n}\r\n\r\n/** Tokenizer state as returned by {@link Tokenizer#mark} and consumed by {@link Tokenizer#reset}. */\r\nexport class State {\r\n /** Current position. */\r\n pos: i32;\r\n /** Current token. */\r\n token: Token;\r\n /** Current token's position. */\r\n tokenPos: i32;\r\n}\r\n\r\n// Reusable state object to reduce allocations\r\nvar reusableState: State | null = null;\r\n","/**\r\n * Mappings from AssemblyScript types to WebAssembly types.\r\n * @module types\r\n *//***/\r\n\r\nimport {\r\n Class,\r\n FunctionTarget\r\n} from \"./program\";\r\n\r\nimport {\r\n NativeType,\r\n ExpressionRef,\r\n Module\r\n} from \"./module\";\r\n\r\n/** Indicates the kind of a type. */\r\nexport const enum TypeKind {\r\n\r\n // signed integers\r\n\r\n /** An 8-bit signed integer. */\r\n I8,\r\n /** A 16-bit signed integer. */\r\n I16,\r\n /** A 32-bit signed integer. */\r\n I32,\r\n /** A 64-bit signed integer. */\r\n I64,\r\n /** A 32-bit/64-bit signed integer, depending on the target. */\r\n ISIZE,\r\n\r\n // unsigned integers\r\n\r\n /** An 8-bit unsigned integer. */\r\n U8,\r\n /** A 16-bit unsigned integer. */\r\n U16,\r\n /** A 32-bit unsigned integer. Also the base of function types. */\r\n U32,\r\n /** A 64-bit unsigned integer. */\r\n U64,\r\n /** A 32-bit/64-bit unsigned integer, depending on the target. Also the base of class types. */\r\n USIZE,\r\n /** A 1-bit unsigned integer. */\r\n BOOL, // sic\r\n\r\n // floats\r\n\r\n /** A 32-bit float. */\r\n F32,\r\n /** A 64-bit double. */\r\n F64,\r\n\r\n // other\r\n\r\n /** No return type. */\r\n VOID\r\n}\r\n\r\n/** Indicates capabilities of a type. */\r\nexport const enum TypeFlags {\r\n NONE = 0,\r\n /** Is a signed type that can represent negative values. */\r\n SIGNED = 1 << 0,\r\n /** Is an unsigned type that cannot represent negative values. */\r\n UNSIGNED = 1 << 1,\r\n /** Is an integer type. */\r\n INTEGER = 1 << 2,\r\n /** Is a floating point type. */\r\n FLOAT = 1 << 3,\r\n /** Is a pointer type. */\r\n POINTER = 1 << 4,\r\n /** Is smaller than 32-bits. */\r\n SHORT = 1 << 5,\r\n /** Is larger than 32-bits. */\r\n LONG = 1 << 6,\r\n /** Is a value type. */\r\n VALUE = 1 << 7,\r\n /** Is a reference type. */\r\n REFERENCE = 1 << 8,\r\n /** Is a nullable type. */\r\n NULLABLE = 1 << 9\r\n}\r\n\r\n/** Represents a resolved type. */\r\nexport class Type {\r\n\r\n /** Type kind. */\r\n kind: TypeKind;\r\n /** Type flags. */\r\n flags: TypeFlags;\r\n /** Size in bits. */\r\n size: u32;\r\n /** Size in bytes. */\r\n byteSize: i32;\r\n /** Underlying class reference, if a class type. */\r\n classReference: Class | null;\r\n /** Underlying signature reference, if a function type. */\r\n signatureReference: Signature | null;\r\n /** Respective non-nullable type, if nullable. */\r\n nonNullableType: Type;\r\n /** Cached nullable type, if non-nullable. */\r\n private cachedNullableType: Type | null = null;\r\n\r\n /** Constructs a new resolved type. */\r\n constructor(kind: TypeKind, flags: TypeFlags, size: u32) {\r\n this.kind = kind;\r\n this.flags = flags;\r\n this.size = size;\r\n this.byteSize = ceil(size / 8);\r\n this.classReference = null;\r\n this.signatureReference = null;\r\n this.nonNullableType = this;\r\n }\r\n\r\n /** Returns the closest int type representing this type. */\r\n get intType(): Type {\r\n switch (this.kind) {\r\n case TypeKind.I8: return Type.i8;\r\n case TypeKind.I16: return Type.i16;\r\n case TypeKind.F32:\r\n case TypeKind.I32: return Type.i32;\r\n case TypeKind.F64:\r\n case TypeKind.I64: return Type.i64;\r\n case TypeKind.ISIZE: return this.size == 64 ? Type.isize64 : Type.isize32;\r\n case TypeKind.U8: return Type.u8;\r\n case TypeKind.U16: return Type.u16;\r\n case TypeKind.U32: return Type.u32;\r\n case TypeKind.U64: return Type.u64;\r\n case TypeKind.USIZE: return this.size == 64 ? Type.usize64 : Type.usize32;\r\n case TypeKind.BOOL:\r\n default: return Type.i32;\r\n }\r\n }\r\n\r\n /** Computes the sign-extending shift in the target type. */\r\n computeSmallIntegerShift(targetType: Type): u32 {\r\n return targetType.size - this.size;\r\n }\r\n\r\n /** Computes the truncating mask in the target type. */\r\n computeSmallIntegerMask(targetType: Type): u32 {\r\n var size = this.is(TypeFlags.UNSIGNED) ? this.size : this.size - 1;\r\n return ~0 >>> (targetType.size - size);\r\n }\r\n\r\n /** Tests if this type has (all of) the specified flags. */\r\n is(flags: TypeFlags): bool { return (this.flags & flags) == flags; }\r\n /** Tests if this type has any of the specified flags. */\r\n isAny(flags: TypeFlags): bool { return (this.flags & flags) != 0; }\r\n\r\n /** Composes a class type from this type and a class. */\r\n asClass(classType: Class): Type {\r\n assert(this.kind == TypeKind.USIZE && !this.classReference);\r\n var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size);\r\n ret.classReference = classType;\r\n return ret;\r\n }\r\n\r\n /** Composes a function type from this type and a function. */\r\n asFunction(signature: Signature): Type {\r\n assert(this.kind == TypeKind.U32 && !this.signatureReference);\r\n var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size);\r\n ret.signatureReference = signature;\r\n return ret;\r\n }\r\n\r\n /** Composes the respective nullable type of this type. */\r\n asNullable(): Type {\r\n assert(this.is(TypeFlags.REFERENCE));\r\n if (!this.cachedNullableType) {\r\n assert(!this.is(TypeFlags.NULLABLE));\r\n this.cachedNullableType = new Type(this.kind, this.flags | TypeFlags.NULLABLE, this.size);\r\n this.cachedNullableType.nonNullableType = this;\r\n this.cachedNullableType.classReference = this.classReference; // either a class reference\r\n this.cachedNullableType.signatureReference = this.signatureReference; // or a function reference\r\n }\r\n return this.cachedNullableType;\r\n }\r\n\r\n /** Tests if a value of this type is assignable to a target of the specified type. */\r\n isAssignableTo(target: Type, signednessIsRelevant: bool = false): bool {\r\n var currentClass: Class | null;\r\n var targetClass: Class | null;\r\n var currentFunction: Signature | null;\r\n var targetFunction: Signature | null;\r\n if (this.is(TypeFlags.REFERENCE)) {\r\n if (target.is(TypeFlags.REFERENCE)) {\r\n if (!this.is(TypeFlags.NULLABLE) || target.is(TypeFlags.NULLABLE)) {\r\n if (currentClass = this.classReference) {\r\n if (targetClass = target.classReference) {\r\n return currentClass.isAssignableTo(targetClass);\r\n }\r\n } else if (currentFunction = this.signatureReference) {\r\n if (targetFunction = target.signatureReference) {\r\n return currentFunction.isAssignableTo(targetFunction);\r\n }\r\n }\r\n }\r\n }\r\n } else if (!target.is(TypeFlags.REFERENCE)) {\r\n if (this.is(TypeFlags.INTEGER)) {\r\n if (target.is(TypeFlags.INTEGER)) {\r\n if (!signednessIsRelevant || this.is(TypeFlags.SIGNED) == target.is(TypeFlags.SIGNED)) {\r\n return this.size <= target.size;\r\n }\r\n } else if (target.kind == TypeKind.F32) {\r\n return this.size <= 23; // mantissa bits\r\n } else if (target.kind == TypeKind.F64) {\r\n return this.size <= 52; // ^\r\n }\r\n } else if (this.is(TypeFlags.FLOAT)) {\r\n if (target.is(TypeFlags.FLOAT)) {\r\n return this.size <= target.size;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /** Determines the common compatible type of two types, if any. */\r\n static commonCompatible(left: Type, right: Type, signednessIsImportant: bool): Type | null {\r\n if (right.isAssignableTo(left, signednessIsImportant)) return left;\r\n else if (left.isAssignableTo(right, signednessIsImportant)) return right;\r\n return null;\r\n }\r\n\r\n /** Converts this type to its TypeScript representation. */\r\n toString(kindOnly: bool = false): string {\r\n if (!kindOnly && this.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.classReference;\r\n if (classReference) {\r\n return this.is(TypeFlags.NULLABLE)\r\n ? classReference.toString() + \" | null\"\r\n : classReference.toString();\r\n }\r\n let signatureReference = this.signatureReference;\r\n if (signatureReference) {\r\n return this.is(TypeFlags.NULLABLE)\r\n ? \"(\" + signatureReference.toString(true) + \") | null\"\r\n : signatureReference.toString(true);\r\n }\r\n assert(false);\r\n }\r\n switch (this.kind) {\r\n case TypeKind.I8: return \"i8\";\r\n case TypeKind.I16: return \"i16\";\r\n case TypeKind.I32: return \"i32\";\r\n case TypeKind.I64: return \"i64\";\r\n case TypeKind.ISIZE: return \"isize\";\r\n case TypeKind.U8: return \"u8\";\r\n case TypeKind.U16: return \"u16\";\r\n case TypeKind.U32: return \"u32\";\r\n case TypeKind.U64: return \"u64\";\r\n case TypeKind.USIZE: return \"usize\";\r\n case TypeKind.BOOL: return \"bool\";\r\n case TypeKind.F32: return \"f32\";\r\n case TypeKind.F64: return \"f64\";\r\n default: assert(false);\r\n case TypeKind.VOID: return \"void\";\r\n }\r\n }\r\n\r\n // Binaryen specific\r\n\r\n /** Converts this type to its respective native type. */\r\n toNativeType(): NativeType {\r\n switch (this.kind) {\r\n default: return NativeType.I32;\r\n case TypeKind.I64:\r\n case TypeKind.U64: return NativeType.I64;\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: return this.size == 64 ? NativeType.I64 : NativeType.I32;\r\n case TypeKind.F32: return NativeType.F32;\r\n case TypeKind.F64: return NativeType.F64;\r\n case TypeKind.VOID: return NativeType.None;\r\n }\r\n }\r\n\r\n /** Converts this type to its native `0` value. */\r\n toNativeZero(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n case TypeKind.VOID: assert(false);\r\n default: return module.createI32(0);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(0);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(0);\r\n case TypeKind.F32: return module.createF32(0);\r\n case TypeKind.F64: return module.createF64(0);\r\n }\r\n }\r\n\r\n /** Converts this type to its native `1` value. */\r\n toNativeOne(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n case TypeKind.VOID: assert(false);\r\n default: return module.createI32(1);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(1);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(1);\r\n case TypeKind.F32: return module.createF32(1);\r\n case TypeKind.F64: return module.createF64(1);\r\n }\r\n }\r\n\r\n /** Converts this type to its native `-1` value. */\r\n toNativeNegOne(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n case TypeKind.VOID: assert(false);\r\n default: return module.createI32(-1);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(-1);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(-1, -1);\r\n case TypeKind.F32: return module.createF32(-1);\r\n case TypeKind.F64: return module.createF64(-1);\r\n }\r\n }\r\n\r\n /** Converts this type to its signature string. */\r\n toSignatureString(): string {\r\n switch (this.kind) {\r\n default: return \"i\";\r\n case TypeKind.I64:\r\n case TypeKind.U64: return \"I\";\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: return this.size == 64 ? \"I\" : \"i\";\r\n case TypeKind.F32: return \"f\";\r\n case TypeKind.F64: return \"F\";\r\n case TypeKind.VOID: return \"v\";\r\n }\r\n }\r\n\r\n // Types\r\n\r\n /** An 8-bit signed integer. */\r\n static readonly i8: Type = new Type(TypeKind.I8,\r\n TypeFlags.SIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 8\r\n );\r\n\r\n /** A 16-bit signed integer. */\r\n static readonly i16: Type = new Type(TypeKind.I16,\r\n TypeFlags.SIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 16\r\n );\r\n\r\n /** A 32-bit signed integer. */\r\n static readonly i32: Type = new Type(TypeKind.I32,\r\n TypeFlags.SIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit signed integer. */\r\n static readonly i64: Type = new Type(TypeKind.I64,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 32-bit signed size. WASM32 only. */\r\n static readonly isize32: Type = new Type(TypeKind.ISIZE,\r\n TypeFlags.SIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.POINTER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit signed size. WASM64 only. */\r\n static readonly isize64: Type = new Type(TypeKind.ISIZE,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.POINTER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** An 8-bit unsigned integer. */\r\n static readonly u8: Type = new Type(TypeKind.U8,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 8\r\n );\r\n\r\n /** A 16-bit unsigned integer. */\r\n static readonly u16: Type = new Type(TypeKind.U16,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 16\r\n );\r\n\r\n /** A 32-bit unsigned integer. */\r\n static readonly u32: Type = new Type(TypeKind.U32,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit unsigned integer. */\r\n static readonly u64: Type = new Type(TypeKind.U64,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 32-bit unsigned size. WASM32 only. */\r\n static readonly usize32: Type = new Type(TypeKind.USIZE,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.POINTER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit unsigned size. WASM64 only. */\r\n static readonly usize64: Type = new Type(TypeKind.USIZE,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.POINTER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 1-bit unsigned integer. */\r\n static readonly bool: Type = new Type(TypeKind.BOOL,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 1\r\n );\r\n\r\n /** A 32-bit float. */\r\n static readonly f32: Type = new Type(TypeKind.F32,\r\n TypeFlags.SIGNED |\r\n TypeFlags.FLOAT |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit float. */\r\n static readonly f64: Type = new Type(TypeKind.F64,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.FLOAT |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** No return type. */\r\n static readonly void: Type = new Type(TypeKind.VOID, TypeFlags.NONE, 0);\r\n}\r\n\r\n/** Converts an array of types to an array of native types. */\r\nexport function typesToNativeTypes(types: Type[]): NativeType[] {\r\n var numTypes = types.length;\r\n var ret = new Array(numTypes);\r\n for (let i = 0; i < numTypes; ++i) ret[i] = types[i].toNativeType();\r\n return ret;\r\n}\r\n\r\n/** Converts an array of types to its combined string representation. */\r\nexport function typesToString(types: Type[]): string {\r\n var numTypes = types.length;\r\n if (!numTypes) return \"\";\r\n var sb = new Array(numTypes);\r\n for (let i = 0; i < numTypes; ++i) sb[i] = types[i].toString();\r\n return sb.join(\",\");\r\n}\r\n\r\n/** Represents a fully resolved function signature. */\r\nexport class Signature {\r\n\r\n /** Parameter types, if any, excluding `this`. */\r\n parameterTypes: Type[];\r\n /** Parameter names, if known, excluding `this`. */\r\n parameterNames: string[] | null;\r\n /** Number of required parameters excluding `this`. Other parameters are considered optional. */\r\n requiredParameters: i32;\r\n /** Return type. */\r\n returnType: Type;\r\n /** This type, if an instance signature. */\r\n thisType: Type | null;\r\n /** Whether the last parameter is a rest parameter. */\r\n hasRest: bool;\r\n /** Cached {@link FunctionTarget}. */\r\n cachedFunctionTarget: FunctionTarget | null = null;\r\n /** Respective function type. */\r\n type: Type;\r\n\r\n /** Constructs a new signature. */\r\n constructor(\r\n parameterTypes: Type[] | null = null,\r\n returnType: Type | null = null,\r\n thisType: Type | null = null\r\n ) {\r\n this.parameterTypes = parameterTypes ? parameterTypes : [];\r\n this.parameterNames = null;\r\n this.requiredParameters = 0;\r\n this.returnType = returnType ? returnType : Type.void;\r\n this.thisType = thisType;\r\n this.hasRest = false;\r\n this.type = Type.u32.asFunction(this);\r\n }\r\n\r\n /** Gets the known or, alternatively, generic parameter name at the specified index. */\r\n getParameterName(index: i32): string {\r\n var parameterNames = this.parameterNames;\r\n return parameterNames && parameterNames.length > index\r\n ? parameterNames[index]\r\n : getDefaultParameterName(index);\r\n }\r\n\r\n /** Tests if a value of this function type is assignable to a target of the specified function type. */\r\n isAssignableTo(target: Signature): bool {\r\n // TODO: maybe cache results?\r\n\r\n // check `this` type\r\n var thisThisType = this.thisType;\r\n var targetThisType = target.thisType;\r\n if (thisThisType) {\r\n if (!(targetThisType && thisThisType.isAssignableTo(targetThisType))) return false;\r\n } else if (targetThisType) {\r\n return false;\r\n }\r\n\r\n // check rest parameter\r\n if (this.hasRest != target.hasRest) return false; // TODO\r\n\r\n // check parameter types\r\n var thisParameterTypes = this.parameterTypes;\r\n var targetParameterTypes = target.parameterTypes;\r\n var numParameters = thisParameterTypes.length;\r\n if (numParameters != targetParameterTypes.length) return false;\r\n for (let i = 0; i < numParameters; ++i) {\r\n let thisParameterType = thisParameterTypes[i];\r\n let targetParameterType = targetParameterTypes[i];\r\n if (!thisParameterType.isAssignableTo(targetParameterType)) return false;\r\n }\r\n\r\n // check return type\r\n var thisReturnType = this.returnType;\r\n var targetReturnType = target.returnType;\r\n return thisReturnType == targetReturnType || thisReturnType.isAssignableTo(targetReturnType);\r\n }\r\n\r\n /** Converts a signature to a function type string. */\r\n static makeSignatureString(parameterTypes: Type[] | null, returnType: Type, thisType: Type | null = null): string {\r\n var sb = [];\r\n if (thisType) sb.push(thisType.toSignatureString());\r\n if (parameterTypes) {\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) sb.push(parameterTypes[i].toSignatureString());\r\n }\r\n sb.push(returnType.toSignatureString());\r\n return sb.join(\"\");\r\n }\r\n\r\n /** Converts this signature to a function type string. */\r\n toSignatureString(): string {\r\n return Signature.makeSignatureString(this.parameterTypes, this.returnType, this.thisType);\r\n }\r\n\r\n /** Converts this signature to a string. */\r\n toString(includeThis: bool = false): string {\r\n var sb = new Array();\r\n sb.push(\"(\");\r\n var index = 0;\r\n var thisType = this.thisType;\r\n if (thisType) {\r\n if (includeThis) {\r\n sb.push(\"this: \");\r\n sb.push(thisType.toString());\r\n index = 1;\r\n }\r\n }\r\n var parameters = this.parameterTypes;\r\n var numParameters = parameters.length;\r\n if (numParameters) {\r\n let names = this.parameterNames;\r\n let numNames = names ? names.length : 0;\r\n let optionalStart = this.requiredParameters;\r\n let restIndex = this.hasRest ? numParameters - 1 : -1;\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n if (index) sb.push(\", \");\r\n if (i == restIndex) sb.push(\"...\");\r\n if (i < numNames) sb.push((names)[i]);\r\n else sb.push(getDefaultParameterName(i));\r\n if (i >= optionalStart && i != restIndex) sb.push(\"?: \");\r\n else sb.push(\": \");\r\n sb.push(parameters[i].toString());\r\n }\r\n }\r\n sb.push(\") => \");\r\n sb.push(this.returnType.toString());\r\n return sb.join(\"\");\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n// Cached default parameter names used where names are unknown.\r\nvar cachedDefaultParameterNames: string[] | null = null;\r\n\r\n/** Gets the cached default parameter name for the specified index. */\r\nexport function getDefaultParameterName(index: i32): string {\r\n if (!cachedDefaultParameterNames) cachedDefaultParameterNames = [];\r\n for (let i = cachedDefaultParameterNames.length; i <= index; ++i) {\r\n cachedDefaultParameterNames.push(\"arg$\" + i.toString(10));\r\n }\r\n return cachedDefaultParameterNames[index - 1];\r\n}\r\n","/**\n * Generated from diagnosticsMessages.json. Do not edit.\n * @module diagnostics\n *//***/\n\n/* tslint:disable:max-line-length */\n\n/** Enum of available diagnostic codes. */\nexport enum DiagnosticCode {\n Operation_not_supported = 100,\n Operation_is_unsafe = 101,\n Conversion_from_type_0_to_1_requires_an_explicit_cast = 200,\n Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit = 201,\n Type_0_cannot_be_changed_to_type_1 = 202,\n Type_0_cannot_be_reinterpreted_as_type_1 = 203,\n Basic_type_0_cannot_be_nullable = 204,\n Cannot_export_a_mutable_global = 205,\n Compiling_constant_with_non_constant_initializer_as_mutable = 206,\n Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa = 207,\n Unmanaged_classes_cannot_implement_interfaces = 208,\n Invalid_regular_expression_flags = 209,\n Implementation_0_must_match_the_signature_1 = 210,\n Class_0_is_sealed_and_cannot_be_extended = 211,\n Decorator_0_is_not_valid_here = 212,\n Duplicate_decorator = 213,\n An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf = 214,\n Optional_parameter_must_have_an_initializer = 215,\n Unterminated_string_literal = 1002,\n Identifier_expected = 1003,\n _0_expected = 1005,\n A_file_cannot_have_a_reference_to_itself = 1006,\n Trailing_comma_not_allowed = 1009,\n Unexpected_token = 1012,\n A_rest_parameter_must_be_last_in_a_parameter_list = 1014,\n Parameter_cannot_have_question_mark_and_initializer = 1015,\n A_required_parameter_cannot_follow_an_optional_parameter = 1016,\n Enum_member_must_have_initializer = 1061,\n Statements_are_not_allowed_in_ambient_contexts = 1036,\n Initializers_are_not_allowed_in_ambient_contexts = 1039,\n _0_modifier_cannot_be_used_here = 1042,\n A_rest_parameter_cannot_be_optional = 1047,\n A_rest_parameter_cannot_have_an_initializer = 1048,\n A_set_accessor_must_have_exactly_one_parameter = 1049,\n A_set_accessor_parameter_cannot_have_an_initializer = 1052,\n A_get_accessor_cannot_have_parameters = 1054,\n Type_parameters_cannot_appear_on_a_constructor_declaration = 1092,\n Type_annotation_cannot_appear_on_a_constructor_declaration = 1093,\n An_accessor_cannot_have_type_parameters = 1094,\n A_set_accessor_cannot_have_a_return_type_annotation = 1095,\n Type_parameter_list_cannot_be_empty = 1098,\n A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement = 1104,\n A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement = 1105,\n A_return_statement_can_only_be_used_within_a_function_body = 1108,\n Expression_expected = 1109,\n Type_expected = 1110,\n A_default_clause_cannot_appear_more_than_once_in_a_switch_statement = 1113,\n Duplicate_label_0 = 1114,\n Octal_literals_are_not_allowed_in_strict_mode = 1121,\n Digit_expected = 1124,\n Hexadecimal_digit_expected = 1125,\n Unexpected_end_of_text = 1126,\n Invalid_character = 1127,\n _case_or_default_expected = 1130,\n A_declare_modifier_cannot_be_used_in_an_already_ambient_context = 1038,\n Type_argument_expected = 1140,\n String_literal_expected = 1141,\n Line_break_not_permitted_here = 1142,\n Declaration_expected = 1146,\n _const_declarations_must_be_initialized = 1155,\n Unterminated_regular_expression_literal = 1161,\n Interface_declaration_cannot_have_implements_clause = 1176,\n Binary_digit_expected = 1177,\n Octal_digit_expected = 1178,\n An_implementation_cannot_be_declared_in_ambient_contexts = 1183,\n An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive = 1198,\n Unterminated_Unicode_escape_sequence = 1199,\n Decorators_are_not_valid_here = 1206,\n _abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration = 1242,\n A_class_may_only_extend_another_class = 1311,\n A_parameter_property_cannot_be_declared_using_a_rest_parameter = 1317,\n Duplicate_identifier_0 = 2300,\n Cannot_find_name_0 = 2304,\n Module_0_has_no_exported_member_1 = 2305,\n Generic_type_0_requires_1_type_argument_s = 2314,\n Type_0_is_not_generic = 2315,\n Type_0_is_not_assignable_to_type_1 = 2322,\n Index_signature_is_missing_in_type_0 = 2329,\n _this_cannot_be_referenced_in_current_location = 2332,\n _super_can_only_be_referenced_in_a_derived_class = 2335,\n Property_0_does_not_exist_on_type_1 = 2339,\n Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures = 2349,\n Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature = 2351,\n A_function_whose_declared_type_is_not_void_must_return_a_value = 2355,\n The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access = 2357,\n The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access = 2364,\n Operator_0_cannot_be_applied_to_types_1_and_2 = 2365,\n _get_and_set_accessor_must_have_the_same_type = 2380,\n Constructor_implementation_is_missing = 2390,\n Function_implementation_is_missing_or_not_immediately_following_the_declaration = 2391,\n Multiple_constructor_implementations_are_not_allowed = 2392,\n Duplicate_function_implementation = 2393,\n Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local = 2395,\n Type_0_has_no_property_1 = 2460,\n The_0_operator_cannot_be_applied_to_type_1 = 2469,\n Export_declaration_conflicts_with_exported_declaration_of_0 = 2484,\n Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property = 2540,\n The_target_of_an_assignment_must_be_a_variable_or_a_property_access = 2541,\n Index_signature_in_type_0_only_permits_reading = 2542,\n Expected_0_arguments_but_got_1 = 2554,\n Expected_at_least_0_arguments_but_got_1 = 2555,\n Expected_0_type_arguments_but_got_1 = 2558,\n A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums = 2651,\n Namespace_0_has_no_exported_member_1 = 2694,\n File_0_not_found = 6054,\n Numeric_separators_are_not_allowed_here = 6188,\n Multiple_consecutive_numeric_separators_are_not_permitted = 6189\n}\n\n/** Translates a diagnostic code to its respective string. */\nexport function diagnosticCodeToString(code: DiagnosticCode): string {\n switch (code) {\n case 100: return \"Operation not supported.\";\n case 101: return \"Operation is unsafe.\";\n case 200: return \"Conversion from type '{0}' to '{1}' requires an explicit cast.\";\n case 201: return \"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.\";\n case 202: return \"Type '{0}' cannot be changed to type '{1}'.\";\n case 203: return \"Type '{0}' cannot be reinterpreted as type '{1}'.\";\n case 204: return \"Basic type '{0}' cannot be nullable.\";\n case 205: return \"Cannot export a mutable global.\";\n case 206: return \"Compiling constant with non-constant initializer as mutable.\";\n case 207: return \"Unmanaged classes cannot extend managed classes and vice-versa.\";\n case 208: return \"Unmanaged classes cannot implement interfaces.\";\n case 209: return \"Invalid regular expression flags.\";\n case 210: return \"Implementation '{0}' must match the signature '{1}'.\";\n case 211: return \"Class '{0}' is sealed and cannot be extended.\";\n case 212: return \"Decorator '{0}' is not valid here.\";\n case 213: return \"Duplicate decorator.\";\n case 214: return \"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.\";\n case 215: return \"Optional parameter must have an initializer.\";\n case 1002: return \"Unterminated string literal.\";\n case 1003: return \"Identifier expected.\";\n case 1005: return \"'{0}' expected.\";\n case 1006: return \"A file cannot have a reference to itself.\";\n case 1009: return \"Trailing comma not allowed.\";\n case 1012: return \"Unexpected token.\";\n case 1014: return \"A rest parameter must be last in a parameter list.\";\n case 1015: return \"Parameter cannot have question mark and initializer.\";\n case 1016: return \"A required parameter cannot follow an optional parameter.\";\n case 1061: return \"Enum member must have initializer.\";\n case 1036: return \"Statements are not allowed in ambient contexts.\";\n case 1039: return \"Initializers are not allowed in ambient contexts.\";\n case 1042: return \"'{0}' modifier cannot be used here.\";\n case 1047: return \"A rest parameter cannot be optional.\";\n case 1048: return \"A rest parameter cannot have an initializer.\";\n case 1049: return \"A 'set' accessor must have exactly one parameter.\";\n case 1052: return \"A 'set' accessor parameter cannot have an initializer.\";\n case 1054: return \"A 'get' accessor cannot have parameters.\";\n case 1092: return \"Type parameters cannot appear on a constructor declaration.\";\n case 1093: return \"Type annotation cannot appear on a constructor declaration.\";\n case 1094: return \"An accessor cannot have type parameters.\";\n case 1095: return \"A 'set' accessor cannot have a return type annotation.\";\n case 1098: return \"Type parameter list cannot be empty.\";\n case 1104: return \"A 'continue' statement can only be used within an enclosing iteration statement.\";\n case 1105: return \"A 'break' statement can only be used within an enclosing iteration or switch statement.\";\n case 1108: return \"A 'return' statement can only be used within a function body.\";\n case 1109: return \"Expression expected.\";\n case 1110: return \"Type expected.\";\n case 1113: return \"A 'default' clause cannot appear more than once in a 'switch' statement.\";\n case 1114: return \"Duplicate label '{0}'.\";\n case 1121: return \"Octal literals are not allowed in strict mode.\";\n case 1124: return \"Digit expected.\";\n case 1125: return \"Hexadecimal digit expected.\";\n case 1126: return \"Unexpected end of text.\";\n case 1127: return \"Invalid character.\";\n case 1130: return \"'case' or 'default' expected.\";\n case 1038: return \"A 'declare' modifier cannot be used in an already ambient context.\";\n case 1140: return \"Type argument expected.\";\n case 1141: return \"String literal expected.\";\n case 1142: return \"Line break not permitted here.\";\n case 1146: return \"Declaration expected.\";\n case 1155: return \"'const' declarations must be initialized.\";\n case 1161: return \"Unterminated regular expression literal.\";\n case 1176: return \"Interface declaration cannot have 'implements' clause.\";\n case 1177: return \"Binary digit expected.\";\n case 1178: return \"Octal digit expected.\";\n case 1183: return \"An implementation cannot be declared in ambient contexts.\";\n case 1198: return \"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.\";\n case 1199: return \"Unterminated Unicode escape sequence.\";\n case 1206: return \"Decorators are not valid here.\";\n case 1242: return \"'abstract' modifier can only appear on a class, method, or property declaration.\";\n case 1311: return \"A class may only extend another class.\";\n case 1317: return \"A parameter property cannot be declared using a rest parameter.\";\n case 2300: return \"Duplicate identifier '{0}'.\";\n case 2304: return \"Cannot find name '{0}'.\";\n case 2305: return \"Module '{0}' has no exported member '{1}'.\";\n case 2314: return \"Generic type '{0}' requires {1} type argument(s).\";\n case 2315: return \"Type '{0}' is not generic.\";\n case 2322: return \"Type '{0}' is not assignable to type '{1}'.\";\n case 2329: return \"Index signature is missing in type '{0}'.\";\n case 2332: return \"'this' cannot be referenced in current location.\";\n case 2335: return \"'super' can only be referenced in a derived class.\";\n case 2339: return \"Property '{0}' does not exist on type '{1}'.\";\n case 2349: return \"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.\";\n case 2351: return \"Cannot use 'new' with an expression whose type lacks a construct signature.\";\n case 2355: return \"A function whose declared type is not 'void' must return a value.\";\n case 2357: return \"The operand of an increment or decrement operator must be a variable or a property access.\";\n case 2364: return \"The left-hand side of an assignment expression must be a variable or a property access.\";\n case 2365: return \"Operator '{0}' cannot be applied to types '{1}' and '{2}'.\";\n case 2380: return \"'get' and 'set' accessor must have the same type.\";\n case 2390: return \"Constructor implementation is missing.\";\n case 2391: return \"Function implementation is missing or not immediately following the declaration.\";\n case 2392: return \"Multiple constructor implementations are not allowed.\";\n case 2393: return \"Duplicate function implementation.\";\n case 2395: return \"Individual declarations in merged declaration '{0}' must be all exported or all local.\";\n case 2460: return \"Type '{0}' has no property '{1}'.\";\n case 2469: return \"The '{0}' operator cannot be applied to type '{1}'.\";\n case 2484: return \"Export declaration conflicts with exported declaration of '{0}'.\";\n case 2540: return \"Cannot assign to '{0}' because it is a constant or a read-only property.\";\n case 2541: return \"The target of an assignment must be a variable or a property access.\";\n case 2542: return \"Index signature in type '{0}' only permits reading.\";\n case 2554: return \"Expected {0} arguments, but got {1}.\";\n case 2555: return \"Expected at least {0} arguments, but got {1}.\";\n case 2558: return \"Expected {0} type arguments, but got {1}.\";\n case 2651: return \"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.\";\n case 2694: return \"Namespace '{0}' has no exported member '{1}'.\";\n case 6054: return \"File '{0}' not found.\";\n case 6188: return \"Numeric separators are not allowed here.\";\n case 6189: return \"Multiple consecutive numeric separators are not permitted.\";\n default: return \"\";\n }\n}\n","/**\r\n * The AssemblyScript compiler.\r\n * @module compiler\r\n *//***/\r\n\r\nimport {\r\n compileCall as compileBuiltinCall,\r\n compileAllocate as compileBuiltinAllocate,\r\n compileAbort as compileBuiltinAbort\r\n} from \"./builtins\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Module,\r\n MemorySegment,\r\n ExpressionRef,\r\n UnaryOp,\r\n BinaryOp,\r\n NativeType,\r\n FunctionRef,\r\n ExpressionId,\r\n FunctionTypeRef,\r\n GlobalRef,\r\n getExpressionId,\r\n getExpressionType,\r\n getConstValueI32,\r\n getConstValueI64Low,\r\n getConstValueI64High,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getFunctionBody,\r\n getGetLocalIndex\r\n} from \"./module\";\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 CommonFlags,\r\n ConstantValueKind,\r\n Flow,\r\n OperatorKind,\r\n DecoratorFlags,\r\n\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 \"./program\";\r\n\r\nimport {\r\n Token,\r\n operatorTokenToString\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n TypeNode,\r\n Source,\r\n Range,\r\n\r\n Statement,\r\n BlockStatement,\r\n BreakStatement,\r\n ClassDeclaration,\r\n ContinueStatement,\r\n DoStatement,\r\n EmptyStatement,\r\n EnumDeclaration,\r\n ExportStatement,\r\n ExpressionStatement,\r\n FunctionDeclaration,\r\n ForStatement,\r\n IfStatement,\r\n ImportStatement,\r\n InstanceOfExpression,\r\n InterfaceDeclaration,\r\n NamespaceDeclaration,\r\n ReturnStatement,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n VariableDeclaration,\r\n VariableStatement,\r\n VoidStatement,\r\n WhileStatement,\r\n\r\n Expression,\r\n AssertionExpression,\r\n BinaryExpression,\r\n CallExpression,\r\n CommaExpression,\r\n ElementAccessExpression,\r\n FloatLiteralExpression,\r\n FunctionExpression,\r\n IdentifierExpression,\r\n IntegerLiteralExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n NewExpression,\r\n ParenthesizedExpression,\r\n PropertyAccessExpression,\r\n TernaryExpression,\r\n ArrayLiteralExpression,\r\n StringLiteralExpression,\r\n UnaryPostfixExpression,\r\n UnaryPrefixExpression,\r\n FieldDeclaration,\r\n\r\n nodeIsConstantValue,\r\n isLastStatement\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags,\r\n Signature,\r\n\r\n typesToNativeTypes\r\n} from \"./types\";\r\n\r\nimport {\r\n writeI32,\r\n writeI64,\r\n writeF32,\r\n writeF64\r\n} from \"./util\";\r\n\r\n/** Compilation target. */\r\nexport enum Target {\r\n /** WebAssembly with 32-bit pointers. */\r\n WASM32,\r\n /** WebAssembly with 64-bit pointers. Experimental and not supported by any runtime yet. */\r\n WASM64\r\n}\r\n\r\n/** Compiler options. */\r\nexport class Options {\r\n\r\n /** WebAssembly target. Defaults to {@link Target.WASM32}. */\r\n target: Target = Target.WASM32;\r\n /** If true, compiles everything instead of just reachable code. */\r\n noTreeShaking: bool = false;\r\n /** If true, replaces assertions with nops. */\r\n noAssert: bool = false;\r\n /** If true, does not set up a memory. */\r\n noMemory: 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 /** Static memory start offset. */\r\n memoryBase: u32 = 0;\r\n /** If true, generates information necessary for source maps. */\r\n sourceMap: bool = false;\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 /** Tests if the target is WASM64 or, otherwise, WASM32. */\r\n get isWasm64(): bool {\r\n return this.target == Target.WASM64;\r\n }\r\n\r\n /** Gets the unsigned size type matching the target. */\r\n get usizeType(): Type {\r\n return this.target == Target.WASM64 ? Type.usize64 : Type.usize32;\r\n }\r\n\r\n /** Gets the signed size type matching the target. */\r\n get isizeType(): Type {\r\n return this.target == Target.WASM64 ? Type.isize64 : Type.isize32;\r\n }\r\n\r\n /** Gets the native size type matching the target. */\r\n get nativeSizeType(): NativeType {\r\n return this.target == Target.WASM64 ? NativeType.I64 : NativeType.I32;\r\n }\r\n\r\n /** Tests if a specific feature is activated. */\r\n hasFeature(feature: Feature): bool {\r\n return (this.features & feature) != 0;\r\n }\r\n}\r\n\r\n/** Indicates specific features to activate. */\r\nexport const enum Feature {\r\n /** No additional features. */\r\n NONE = 0,\r\n /** Sign extension operations. */\r\n SIGN_EXTENSION = 1 << 0, // see: https://github.com/WebAssembly/sign-extension-ops\r\n /** Mutable global imports and exports. */\r\n MUTABLE_GLOBAL = 1 << 1 // see: https://github.com/WebAssembly/mutable-global\r\n}\r\n\r\n/** Indicates the desired kind of a conversion. */\r\nexport const enum ConversionKind {\r\n /** No conversion. */\r\n NONE,\r\n /** Implicit conversion. */\r\n IMPLICIT,\r\n /** Explicit conversion. */\r\n EXPLICIT\r\n}\r\n\r\n/** Indicates the desired wrap mode of a conversion. */\r\nexport const enum WrapMode {\r\n /** No wrapping. */\r\n NONE,\r\n /** Wrap small integer values. */\r\n WRAP\r\n}\r\n\r\n/** Compiler interface. */\r\nexport class Compiler extends DiagnosticEmitter {\r\n\r\n /** Program reference. */\r\n program: Program;\r\n /** Provided options. */\r\n options: Options;\r\n /** Module instance being compiled. */\r\n module: Module;\r\n /** Current function in compilation. */\r\n currentFunction: Function;\r\n /** Outer function in compilation, if compiling a function expression. */\r\n outerFunction: Function | null = null;\r\n /** Current enum in compilation. */\r\n currentEnum: Enum | null = null;\r\n /** Current type in compilation. */\r\n currentType: Type = Type.void;\r\n /** Start function being compiled. */\r\n startFunction: Function;\r\n /** Start function statements. */\r\n startFunctionBody: ExpressionRef[] = [];\r\n /** Counting memory offset. */\r\n memoryOffset: I64;\r\n /** Memory segments being compiled. */\r\n memorySegments: MemorySegment[] = [];\r\n /** Map of already compiled static string segments. */\r\n stringSegments: Map = new Map();\r\n /** Function table being compiled. */\r\n functionTable: Function[] = [];\r\n /** Argument count helper global. */\r\n argcVar: GlobalRef = 0;\r\n /** Argument count helper setter. */\r\n argcSet: FunctionRef = 0;\r\n\r\n /** Compiles a {@link Program} to a {@link Module} using the specified options. */\r\n static compile(program: Program, options: Options | null = null): Module {\r\n return new Compiler(program, options).compile();\r\n }\r\n\r\n /** Constructs a new compiler for a {@link Program} using the specified options. */\r\n constructor(program: Program, options: Options | null = null) {\r\n super(program.diagnostics);\r\n this.program = program;\r\n if (!options) options = new Options();\r\n this.options = options;\r\n this.memoryOffset = i64_new(\r\n // leave space for `null`. also functions as a sentinel for erroneous stores at offset 0.\r\n // note that Binaryen's asm.js output utilizes the first 8 bytes for reinterpretations (#1547)\r\n max(options.memoryBase, 8)\r\n );\r\n this.module = Module.create();\r\n }\r\n\r\n /** Performs compilation of the underlying {@link Program} to a {@link Module}. */\r\n compile(): Module {\r\n var options = this.options;\r\n var module = this.module;\r\n var program = this.program;\r\n\r\n // initialize lookup maps, built-ins, imports, exports, etc.\r\n program.initialize(options);\r\n\r\n // set up the start function wrapping top-level statements, of all files.\r\n var startFunctionPrototype = assert(program.elementsLookup.get(\"start\"));\r\n assert(startFunctionPrototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n var startFunctionInstance = new Function(\r\n startFunctionPrototype,\r\n startFunctionPrototype.internalName,\r\n new Signature([], Type.void)\r\n );\r\n this.startFunction = startFunctionInstance;\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\r\n var startFunctionBody = this.startFunctionBody;\r\n if (startFunctionBody.length) {\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 module.setStart(funcRef);\r\n }\r\n\r\n // set up static memory segments and the heap base pointer\r\n if (!options.noMemory) {\r\n let 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 let pages = i64_shr_u(i64_align(memoryOffset, 0x10000), i64_new(16, 0));\r\n module.setMemory(\r\n i64_low(pages),\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\r\n // import memory if requested (default memory is named '0' by Binaryen)\r\n if (options.importMemory) module.addMemoryImport(\"0\", \"env\", \"memory\");\r\n\r\n // set up function table\r\n var functionTable = this.functionTable;\r\n var functionTableSize = functionTable.length;\r\n var functionTableExported = false;\r\n if (functionTableSize) {\r\n let entries = new Array(functionTableSize);\r\n for (let i = 0; i < functionTableSize; ++i) {\r\n entries[i] = functionTable[i].ref;\r\n }\r\n module.setFunctionTable(entries);\r\n module.addTableExport(\"0\", \"table\");\r\n functionTableExported = true;\r\n }\r\n\r\n // import table if requested (default table is named '0' by Binaryen)\r\n if (options.importTable) {\r\n module.addTableImport(\"0\", \"env\", \"table\");\r\n if (!functionTableExported) module.addTableExport(\"0\", \"table\");\r\n }\r\n\r\n return module;\r\n }\r\n\r\n // sources\r\n\r\n /** Compiles a source by looking it up by path first. */\r\n compileSourceByPath(normalizedPathWithoutExtension: string, reportNode: Node): void {\r\n var source = this.program.lookupSourceByPath(normalizedPathWithoutExtension);\r\n if (source) this.compileSource(source);\r\n else {\r\n this.error(\r\n DiagnosticCode.File_0_not_found,\r\n reportNode.range, normalizedPathWithoutExtension\r\n );\r\n }\r\n }\r\n\r\n /** Compiles a source. */\r\n compileSource(source: Source): void {\r\n if (source.is(CommonFlags.COMPILED)) return;\r\n source.set(CommonFlags.COMPILED);\r\n\r\n // compile top-level statements\r\n var noTreeShaking = this.options.noTreeShaking;\r\n var isEntry = source.isEntry;\r\n var startFunction = this.startFunction;\r\n var startFunctionBody = this.startFunctionBody;\r\n var statements = source.statements;\r\n for (let i = 0, k = statements.length; i < k; ++i) {\r\n let statement = statements[i];\r\n switch (statement.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) &&\r\n !(statement).isGeneric\r\n ) {\r\n this.compileClassDeclaration(statement, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: break;\r\n case NodeKind.ENUMDECLARATION: {\r\n if (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) {\r\n this.compileEnumDeclaration(statement);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n if (\r\n (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) &&\r\n !(statement).isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(statement, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.IMPORT: {\r\n this.compileSourceByPath(\r\n (statement).normalizedPath,\r\n (statement).path\r\n );\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n if (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) {\r\n this.compileNamespaceDeclaration(statement);\r\n }\r\n break;\r\n }\r\n case NodeKind.VARIABLE: { // global, always compiled as initializers might have side effects\r\n let variableInit = this.compileVariableStatement(statement);\r\n if (variableInit) startFunctionBody.push(variableInit);\r\n break;\r\n }\r\n case NodeKind.EXPORT: {\r\n if ((statement).normalizedPath != null) {\r\n this.compileSourceByPath(\r\n (statement).normalizedPath,\r\n (statement).path\r\n );\r\n }\r\n if (noTreeShaking || isEntry) {\r\n this.compileExportStatement(statement);\r\n }\r\n break;\r\n }\r\n default: { // otherwise a top-level statement that is part of the start function's body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = startFunction;\r\n startFunctionBody.push(this.compileStatement(statement));\r\n this.currentFunction = previousFunction;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // globals\r\n\r\n compileGlobalDeclaration(declaration: VariableDeclaration): Global | null {\r\n // look up the initialized program element\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.GLOBAL);\r\n if (!this.compileGlobal(element)) return null; // reports\r\n return element;\r\n }\r\n\r\n compileGlobal(global: Global): bool {\r\n if (global.is(CommonFlags.COMPILED)) return true;\r\n global.set(CommonFlags.COMPILED);\r\n\r\n var module = this.module;\r\n var declaration = global.declaration;\r\n var initExpr: ExpressionRef = 0;\r\n\r\n if (global.type == Type.void) { // type is void if not yet resolved or not annotated\r\n if (declaration) {\r\n\r\n // resolve now if annotated\r\n if (declaration.type) {\r\n let resolvedType = this.program.resolveType(declaration.type); // reports\r\n if (!resolvedType) return false;\r\n if (resolvedType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.type.range\r\n );\r\n return false;\r\n }\r\n global.type = resolvedType;\r\n\r\n // infer from initializer if not annotated\r\n } else if (declaration.initializer) { // infer type using void/NONE for literal inference\r\n initExpr = this.compileExpressionRetainType( // reports\r\n declaration.initializer,\r\n Type.void,\r\n WrapMode.WRAP\r\n );\r\n if (this.currentType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.initializer.range, this.currentType.toString(), \"\"\r\n );\r\n return false;\r\n }\r\n global.type = this.currentType;\r\n\r\n // must either be annotated or have an initializer\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.name.range.atEnd\r\n );\r\n return false;\r\n }\r\n } else {\r\n assert(false); // must have a declaration if 'void' (and thus resolved later on)\r\n }\r\n }\r\n\r\n // ambient builtins like 'HEAP_BASE' need to be resolved but are added explicitly\r\n if (global.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) return true;\r\n\r\n var nativeType = global.type.toNativeType();\r\n var isConstant = global.isAny(CommonFlags.CONST) || global.is(CommonFlags.STATIC | CommonFlags.READONLY);\r\n\r\n // handle imports\r\n if (global.is(CommonFlags.AMBIENT)) {\r\n\r\n // constant global\r\n if (isConstant || this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n global.set(CommonFlags.MODULE_IMPORT);\r\n module.addGlobalImport(\r\n global.internalName,\r\n global.parent\r\n ? global.parent.simpleName\r\n : \"env\",\r\n global.simpleName,\r\n nativeType\r\n );\r\n global.set(CommonFlags.COMPILED);\r\n return true;\r\n\r\n // importing mutable globals is not supported in the MVP\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n assert(declaration).range\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n // the MVP does not yet support initializer expressions other than constant values (and\r\n // get_globals), hence such initializations must be performed in the start function for now.\r\n var initializeInStart = false;\r\n\r\n // inlined constant can be compiled as-is\r\n if (global.is(CommonFlags.INLINED)) {\r\n initExpr = this.compileInlineConstant(global, global.type, true);\r\n\r\n } else {\r\n\r\n // evaluate initializer if present\r\n if (declaration && declaration.initializer) {\r\n if (!initExpr) {\r\n initExpr = this.compileExpression(\r\n declaration.initializer,\r\n global.type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n );\r\n }\r\n\r\n // check if the initializer is constant\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n\r\n // if a constant global, check if the initializer becomes constant after precompute\r\n if (isConstant) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n declaration.range\r\n );\r\n initializeInStart = true;\r\n }\r\n } else {\r\n initializeInStart = true;\r\n }\r\n }\r\n\r\n // initialize to zero if there's no initializer\r\n } else {\r\n initExpr = global.type.toNativeZero(module);\r\n }\r\n }\r\n\r\n var internalName = global.internalName;\r\n\r\n if (initializeInStart) { // initialize to mutable zero and set the actual value in start\r\n module.addGlobal(internalName, nativeType, true, global.type.toNativeZero(module));\r\n this.startFunctionBody.push(module.createSetGlobal(internalName, initExpr));\r\n\r\n } else { // compile as-is\r\n\r\n if (isConstant) {\r\n let exprType = getExpressionType(initExpr);\r\n switch (exprType) {\r\n case NativeType.I32: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(getConstValueI32(initExpr), 0);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(\r\n getConstValueI64Low(initExpr),\r\n getConstValueI64High(initExpr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF32(initExpr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF64(initExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return false;\r\n }\r\n }\r\n global.set(CommonFlags.INLINED); // inline the value from now on\r\n if (global.is(CommonFlags.MODULE_EXPORT)) {\r\n module.addGlobal(internalName, nativeType, false, initExpr);\r\n module.addGlobalExport(internalName, mangleExportName(global));\r\n } else if (declaration && declaration.isTopLevel) { // might become re-exported\r\n module.addGlobal(internalName, nativeType, false, initExpr);\r\n }\r\n\r\n } else /* mutable */ {\r\n module.addGlobal(internalName, nativeType, !isConstant, initExpr);\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n // enums\r\n\r\n compileEnumDeclaration(declaration: EnumDeclaration): Enum | null {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(element)) return null;\r\n return element;\r\n }\r\n\r\n compileEnum(element: Enum): bool {\r\n if (element.is(CommonFlags.COMPILED)) return true;\r\n element.set(CommonFlags.COMPILED);\r\n\r\n var module = this.module;\r\n this.currentEnum = element;\r\n var previousValue: EnumValue | null = null;\r\n\r\n if (element.members) {\r\n for (let member of element.members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) continue; // happens if an enum is also a namespace\r\n let initInStart = false;\r\n let val = member;\r\n let valueDeclaration = val.declaration;\r\n val.set(CommonFlags.COMPILED);\r\n if (val.is(CommonFlags.INLINED)) {\r\n if (element.declaration.isTopLevelExport) {\r\n module.addGlobal(\r\n val.internalName,\r\n NativeType.I32,\r\n false, // constant\r\n module.createI32(val.constantValue)\r\n );\r\n }\r\n } else {\r\n let initExpr: ExpressionRef;\r\n if (valueDeclaration.value) {\r\n initExpr = this.compileExpression(\r\n valueDeclaration.value,\r\n Type.i32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (element.is(CommonFlags.CONST)) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n valueDeclaration.range\r\n );\r\n }\r\n initInStart = true;\r\n }\r\n }\r\n } else if (previousValue == null) {\r\n initExpr = module.createI32(0);\r\n } else if (previousValue.is(CommonFlags.INLINED)) {\r\n initExpr = module.createI32(previousValue.constantValue + 1);\r\n } else {\r\n // in TypeScript this errors with TS1061, but actually we can do:\r\n initExpr = module.createBinary(BinaryOp.AddI32,\r\n module.createGetGlobal(previousValue.internalName, NativeType.I32),\r\n module.createI32(1)\r\n );\r\n if (element.is(CommonFlags.CONST)) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n valueDeclaration.range\r\n );\r\n }\r\n initInStart = true;\r\n }\r\n if (initInStart) {\r\n module.addGlobal(\r\n val.internalName,\r\n NativeType.I32,\r\n true, // mutable\r\n module.createI32(0)\r\n );\r\n this.startFunctionBody.push(module.createSetGlobal(val.internalName, initExpr));\r\n } else {\r\n module.addGlobal(val.internalName, NativeType.I32, false, initExpr);\r\n if (getExpressionType(initExpr) == NativeType.I32) {\r\n val.constantValue = getConstValueI32(initExpr);\r\n val.set(CommonFlags.INLINED);\r\n } else {\r\n assert(false);\r\n val.constantValue = 0;\r\n }\r\n }\r\n }\r\n previousValue = val;\r\n\r\n // export values if the enum is exported\r\n if (element.is(CommonFlags.MODULE_EXPORT)) {\r\n if (member.is(CommonFlags.INLINED) || this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n module.addGlobalExport(member.internalName, mangleExportName(member));\r\n } else if (valueDeclaration) {\r\n this.warning(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n valueDeclaration.range\r\n );\r\n }\r\n }\r\n }\r\n }\r\n this.currentEnum = null;\r\n return true;\r\n }\r\n\r\n // functions\r\n\r\n /** Compiles a top-level function given its declaration. */\r\n compileFunctionDeclaration(\r\n declaration: FunctionDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null\r\n ): Function | null {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return this.compileFunctionUsingTypeArguments( // reports\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n null, // no outer scope (is top level)\r\n (element).declaration.name\r\n );\r\n }\r\n\r\n /** Resolves the specified type arguments prior to compiling the resulting function instance. */\r\n compileFunctionUsingTypeArguments(\r\n prototype: FunctionPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null,\r\n outerScope: Flow | null,\r\n reportNode: Node\r\n ): Function | null {\r\n var instance = prototype.resolveUsingTypeArguments( // reports\r\n typeArguments,\r\n contextualTypeArguments,\r\n reportNode\r\n );\r\n if (!instance) return null;\r\n instance.outerScope = outerScope;\r\n if (!this.compileFunction(instance)) return null; // reports\r\n return instance;\r\n }\r\n\r\n /** Either reuses or creates the function type matching the specified signature. */\r\n private ensureFunctionType(\r\n parameterTypes: Type[] | null,\r\n returnType: Type,\r\n thisType: Type | null = null\r\n ): FunctionTypeRef {\r\n var numParameters = parameterTypes ? parameterTypes.length : 0;\r\n var paramTypes: NativeType[];\r\n var index = 0;\r\n if (thisType) {\r\n paramTypes = new Array(1 + numParameters);\r\n paramTypes[0] = thisType.toNativeType();\r\n index = 1;\r\n } else {\r\n paramTypes = new Array(numParameters);\r\n }\r\n if (parameterTypes) {\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n paramTypes[index] = parameterTypes[i].toNativeType();\r\n }\r\n }\r\n var resultType = returnType.toNativeType();\r\n var module = this.module;\r\n var typeRef = module.getFunctionTypeBySignature(resultType, paramTypes);\r\n if (!typeRef) {\r\n let name = Signature.makeSignatureString(parameterTypes, returnType, thisType);\r\n typeRef = module.addFunctionType(name, resultType, paramTypes);\r\n }\r\n return typeRef;\r\n }\r\n\r\n /** Compiles a readily resolved function instance. */\r\n compileFunction(instance: Function): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n assert(!instance.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN));\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n // check that modifiers are matching\r\n var declaration = instance.prototype.declaration;\r\n var body = declaration.body;\r\n if (body) {\r\n if (instance.is(CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n if (!instance.is(CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n declaration.name.range\r\n );\r\n }\r\n }\r\n\r\n var ref: FunctionRef;\r\n var signature = instance.signature;\r\n var typeRef = this.ensureFunctionType(signature.parameterTypes, signature.returnType, signature.thisType);\r\n var module = this.module;\r\n if (body) {\r\n let isConstructor = instance.is(CommonFlags.CONSTRUCTOR);\r\n let returnType = instance.signature.returnType;\r\n\r\n // compile body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = instance;\r\n let flow = instance.flow;\r\n let stmt: ExpressionRef;\r\n if (body.kind == NodeKind.EXPRESSION) { // () => expression\r\n assert(!instance.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.GET | CommonFlags.SET));\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 stmt = this.compileStatement(body);\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 stmt = module.createBlock(null, [\r\n stmt,\r\n module.createGetLocal(0, nativeSizeType)\r\n ], 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 stmt = module.createBlock(null, [\r\n stmt,\r\n module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, declaration.name)\r\n )\r\n ], nativeSizeType);\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 }\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 } else {\r\n instance.set(CommonFlags.MODULE_IMPORT);\r\n\r\n // create the function import\r\n let parent = instance.prototype.parent;\r\n ref = module.addFunctionImport(\r\n instance.internalName,\r\n parent\r\n ? parent.simpleName\r\n : \"env\",\r\n instance.simpleName,\r\n typeRef\r\n );\r\n }\r\n\r\n // check module-level export\r\n if (instance.is(CommonFlags.MODULE_EXPORT)) {\r\n if (signature.requiredParameters < signature.parameterTypes.length) {\r\n // export the trampoline if the function takes optional parameters\r\n instance = this.ensureTrampoline(instance);\r\n this.ensureArgcSet();\r\n }\r\n module.addFunctionExport(instance.internalName, mangleExportName(instance));\r\n }\r\n\r\n instance.finalize(module, ref);\r\n return true;\r\n }\r\n\r\n // namespaces\r\n\r\n compileNamespaceDeclaration(declaration: NamespaceDeclaration): void {\r\n var members = declaration.members;\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n switch (member.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileClassDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileInterfaceDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileEnumDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileNamespaceDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n let variableInit = this.compileVariableStatement(member, true);\r\n if (variableInit) this.startFunctionBody.push(variableInit);\r\n }\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n }\r\n\r\n compileNamespace(ns: Namespace): void {\r\n if (!ns.members) return;\r\n\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let element of ns.members.values()) {\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking ||\r\n (element).is(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n this.compileEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking || (element).is(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // exports\r\n\r\n compileExportStatement(statement: ExportStatement): void {\r\n var module = this.module;\r\n var fileLevelExports = this.program.fileLevelExports;\r\n var members = statement.members;\r\n if (!members) return; // filespace\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n let internalExportName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n member.externalName.text\r\n );\r\n let element = fileLevelExports.get(internalExportName);\r\n if (!element) continue; // reported in Program#initialize\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (!(element).is(CommonFlags.GENERIC)) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n this.compileEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC) &&\r\n statement.range.source.isEntry\r\n ) {\r\n let functionInstance = this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n if (functionInstance) {\r\n let functionDeclaration = functionInstance.prototype.declaration;\r\n if (functionDeclaration && functionDeclaration.needsExplicitExport(member)) {\r\n module.addFunctionExport(functionInstance.internalName, member.externalName.text);\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (this.compileGlobal(element) && statement.range.source.isEntry) {\r\n let globalDeclaration = (element).declaration;\r\n if (globalDeclaration && globalDeclaration.needsExplicitExport(member)) {\r\n if ((element).is(CommonFlags.INLINED)) {\r\n module.addGlobalExport(element.internalName, member.externalName.text);\r\n } else {\r\n this.warning(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n member.range\r\n );\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // classes\r\n\r\n compileClassDeclaration(\r\n declaration: ClassDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.compileClassUsingTypeArguments(\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n alternativeReportNode\r\n );\r\n }\r\n\r\n compileClassUsingTypeArguments(\r\n prototype: ClassPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n var instance = prototype.resolveUsingTypeArguments( // reports\r\n typeArguments,\r\n contextualTypeArguments,\r\n alternativeReportNode\r\n );\r\n if (!instance) return;\r\n this.compileClass(instance);\r\n }\r\n\r\n compileClass(instance: Class): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n var staticMembers = instance.prototype.members;\r\n if (staticMembers) {\r\n for (let element of staticMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [], null, null,\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], null, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], null, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n var ctorInstance = instance.constructorInstance;\r\n if (ctorInstance) this.compileFunction(ctorInstance);\r\n var instanceMembers = instance.members;\r\n if (instanceMembers) {\r\n for (let element of instanceMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n instance.contextualTypeArguments,\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n element.set(CommonFlags.COMPILED);\r\n if (!instance.is(CommonFlags.MODULE_EXPORT) || element.is(CommonFlags.PRIVATE)) break;\r\n let module = this.module;\r\n let name = (element).simpleName;\r\n let type = (element).type;\r\n let nativeType = type.toNativeType();\r\n let offset = (element).memoryOffset;\r\n let usizeType = this.options.usizeType;\r\n let nativeSizeType = this.options.nativeSizeType;\r\n\r\n // export an implicit getter: get:fieldName(this: usize) -> fieldType\r\n let getterName = mangleExportName(element, GETTER_PREFIX + name);\r\n module.addFunction(\r\n getterName,\r\n this.ensureFunctionType(null, type, usizeType),\r\n null,\r\n module.createLoad(\r\n type.byteSize,\r\n type.is(TypeFlags.SIGNED),\r\n module.createGetLocal(0, nativeSizeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(getterName, getterName);\r\n\r\n // export an implicit setter: set:fieldName(this: usize, value: fieldType) -> void\r\n if (element.is(CommonFlags.READONLY)) break;\r\n let setterName = mangleExportName(element, SETTER_PREFIX + name);\r\n module.addFunction(\r\n setterName,\r\n this.ensureFunctionType([ type ], Type.void, usizeType),\r\n null,\r\n module.createStore(\r\n type.byteSize,\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createGetLocal(1, nativeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(setterName, setterName);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], instance.contextualTypeArguments, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], instance.contextualTypeArguments, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n compileInterfaceDeclaration(\r\n declaration: InterfaceDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n // TODO\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n declaration.range\r\n );\r\n }\r\n\r\n // memory\r\n\r\n /** Adds a static memory segment with the specified data. */\r\n addMemorySegment(buffer: Uint8Array, alignment: i32 = 8): MemorySegment {\r\n var memoryOffset = i64_align(this.memoryOffset, alignment);\r\n var segment = MemorySegment.create(buffer, memoryOffset);\r\n this.memorySegments.push(segment);\r\n this.memoryOffset = i64_add(memoryOffset, i64_new(buffer.length, 0));\r\n return segment;\r\n }\r\n\r\n // function table\r\n\r\n /** Ensures that a table entry exists for the specified function and returns its index. */\r\n ensureFunctionTableEntry(func: Function): i32 {\r\n assert(func.is(CommonFlags.COMPILED));\r\n if (func.functionTableIndex >= 0) {\r\n return func.functionTableIndex;\r\n }\r\n var functionTable = this.functionTable;\r\n var index = functionTable.length;\r\n if (!func.is(CommonFlags.TRAMPOLINE) && func.signature.requiredParameters < func.signature.parameterTypes.length) {\r\n // insert the trampoline if the function has optional parameters\r\n func = this.ensureTrampoline(func);\r\n }\r\n functionTable.push(func);\r\n func.functionTableIndex = index;\r\n return index;\r\n }\r\n\r\n // statements\r\n\r\n compileStatement(statement: Statement): ExpressionRef {\r\n var module = this.module;\r\n var stmt: ExpressionRef;\r\n switch (statement.kind) {\r\n case NodeKind.BLOCK: {\r\n stmt = this.compileBlockStatement(statement);\r\n break;\r\n }\r\n case NodeKind.BREAK: {\r\n stmt = this.compileBreakStatement(statement);\r\n break;\r\n }\r\n case NodeKind.CONTINUE: {\r\n stmt = this.compileContinueStatement(statement);\r\n break;\r\n }\r\n case NodeKind.DO: {\r\n stmt = this.compileDoStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EMPTY: {\r\n stmt = this.compileEmptyStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EXPRESSION: {\r\n stmt = this.compileExpressionStatement(statement);\r\n break;\r\n }\r\n case NodeKind.FOR: {\r\n stmt = this.compileForStatement(statement);\r\n break;\r\n }\r\n case NodeKind.IF: {\r\n stmt = this.compileIfStatement(statement);\r\n break;\r\n }\r\n case NodeKind.RETURN: {\r\n stmt = this.compileReturnStatement(statement);\r\n break;\r\n }\r\n case NodeKind.SWITCH: {\r\n stmt = this.compileSwitchStatement(statement);\r\n break;\r\n }\r\n case NodeKind.THROW: {\r\n stmt = this.compileThrowStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TRY: {\r\n stmt = this.compileTryStatement(statement);\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n stmt = this.compileVariableStatement(statement);\r\n if (!stmt) stmt = module.createNop();\r\n break;\r\n }\r\n case NodeKind.VOID: {\r\n stmt = this.compileVoidStatement(statement);\r\n break;\r\n }\r\n case NodeKind.WHILE: {\r\n stmt = this.compileWhileStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n // type declarations must be top-level because function bodies are evaluated when\r\n // reachaable only.\r\n if (this.currentFunction == this.startFunction) {\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 var count = 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 if (getExpressionId(stmt) != ExpressionId.Nop) {\r\n stmts[count++] = stmt;\r\n if (flow.isAny(FlowFlags.TERMINATED)) break;\r\n }\r\n }\r\n stmts.length = count;\r\n return stmts;\r\n }\r\n\r\n compileBlockStatement(statement: BlockStatement): ExpressionRef {\r\n var statements = statement.statements;\r\n\r\n // Not actually a branch, but can contain its own scoped variables.\r\n var blockFlow = this.currentFunction.flow.enterBranchOrScope();\r\n this.currentFunction.flow = blockFlow;\r\n\r\n var stmts = this.compileStatements(statements);\r\n var lastType: NativeType;\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,\r\n // if the last expression is a value, annotate the block's return value\r\n (lastType = getExpressionType(stmts[stmts.length - 1])) == NativeType.None\r\n ? NativeType.None\r\n : lastType\r\n );\r\n\r\n // Switch back to the parent flow\r\n var parentFlow = blockFlow.leaveBranchOrScope();\r\n this.currentFunction.flow = parentFlow;\r\n parentFlow.inherit(blockFlow);\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 flow = currentFunction.flow.enterBranchOrScope();\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?\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.leaveBranchOrScope();\r\n currentFunction.leaveBreakContext();\r\n\r\n return module.createBlock(breakLabel, [\r\n module.createLoop(continueLabel,\r\n flow.isAny(FlowFlags.BREAKS | FlowFlags.CONTINUES | FlowFlags.RETURNS)\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 ], NativeType.None);\r\n }\r\n\r\n compileEmptyStatement(statement: EmptyStatement): ExpressionRef {\r\n return this.module.createNop();\r\n }\r\n\r\n compileExpressionStatement(statement: ExpressionStatement): ExpressionRef {\r\n var expr = this.compileExpression(statement.expression, Type.void, ConversionKind.NONE, WrapMode.NONE);\r\n if (this.currentType != Type.void) {\r\n expr = this.module.createDrop(expr);\r\n this.currentType = Type.void;\r\n }\r\n return expr;\r\n }\r\n\r\n compileForStatement(statement: ForStatement): ExpressionRef {\r\n // A for statement initiates a new branch with its own scoped variables\r\n // possibly declared in its initializer, and break context.\r\n var currentFunction = this.currentFunction;\r\n var label = currentFunction.enterBreakContext();\r\n var flow = currentFunction.flow.enterBranchOrScope();\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 = true;\r\n if (statement.condition) {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n // check if the condition is always true\r\n let condPre = this.precomputeExpressionRef(condExpr);\r\n if (getExpressionId(condPre) == ExpressionId.Const) {\r\n assert(getExpressionType(condPre) == NativeType.I32);\r\n if (getConstValueI32(condPre) != 0) alwaysTrue = true;\r\n // TODO: could skip compilation if the condition is always false here, but beware that the\r\n // initializer could still declare new 'var's that are used later on.\r\n }\r\n // recompile to original\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n } else {\r\n // omitted condition is always true\r\n condExpr = module.createI32(1);\r\n alwaysTrue = true;\r\n }\r\n var incrExpr = statement.incrementor\r\n ? this.compileExpression(statement.incrementor, Type.void, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : 0;\r\n var bodyExpr = this.compileStatement(statement.statement);\r\n\r\n // Switch back to the parent flow\r\n var parentFlow = flow.leaveBranchOrScope();\r\n if (alwaysTrue) parentFlow.inherit(flow);\r\n currentFunction.flow = parentFlow;\r\n currentFunction.leaveBreakContext();\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 (parentFlow.isAny(FlowFlags.CONTINUES | FlowFlags.CONDITIONALLY_CONTINUES)) {\r\n repeatBlock.push(\r\n module.createBlock(continueLabel, [ // inner 'continue' block\r\n module.createBreak(breakLabel, module.createUnary(UnaryOp.EqzI32, condExpr)),\r\n bodyExpr\r\n ], NativeType.None)\r\n );\r\n } else { // can omit the 'continue' block\r\n repeatBlock.push(\r\n module.createBreak(breakLabel, module.createUnary(UnaryOp.EqzI32, condExpr))\r\n );\r\n repeatBlock.push(bodyExpr);\r\n }\r\n if (incrExpr) repeatBlock.push(incrExpr);\r\n repeatBlock.push(\r\n module.createBreak(repeatLabel)\r\n );\r\n\r\n breakBlock.push(\r\n module.createLoop(repeatLabel,\r\n module.createBlock(null, repeatBlock, NativeType.None)\r\n )\r\n );\r\n\r\n var expr = module.createBlock(breakLabel, breakBlock, NativeType.None);\r\n\r\n // If the loop is guaranteed to run and return, append a hint for Binaryen\r\n if (flow.isAny(FlowFlags.RETURNS | FlowFlags.THROWS)) {\r\n expr = module.createBlock(null, [\r\n expr,\r\n module.createUnreachable()\r\n ]);\r\n }\r\n return expr;\r\n }\r\n\r\n compileIfStatement(statement: IfStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var ifTrue = statement.ifTrue;\r\n var ifFalse = statement.ifFalse;\r\n\r\n // The condition doesn't initiate a branch yet\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n\r\n if (\r\n !this.options.noTreeShaking ||\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT)\r\n ) {\r\n // Try to eliminate unnecesssary branches if the condition is constant\r\n let condExprPrecomp = this.precomputeExpressionRef(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n return getConstValueI32(condExprPrecomp)\r\n ? this.compileStatement(ifTrue)\r\n : ifFalse\r\n ? this.compileStatement(ifFalse)\r\n : module.createNop();\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n // Each arm initiates a branch\r\n var ifTrueFlow = currentFunction.flow.enterBranchOrScope();\r\n currentFunction.flow = ifTrueFlow;\r\n var ifTrueExpr = this.compileStatement(ifTrue);\r\n currentFunction.flow = ifTrueFlow.leaveBranchOrScope();\r\n\r\n var ifFalseFlow: Flow | null;\r\n var ifFalseExpr: ExpressionRef = 0;\r\n if (ifFalse) {\r\n ifFalseFlow = currentFunction.flow.enterBranchOrScope();\r\n currentFunction.flow = ifFalseFlow;\r\n ifFalseExpr = this.compileStatement(ifFalse);\r\n let parentFlow = ifFalseFlow.leaveBranchOrScope();\r\n currentFunction.flow = parentFlow;\r\n parentFlow.inheritMutual(ifTrueFlow, ifFalseFlow);\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\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 = currentFunction.flow.enterBranchOrScope();\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.TERMINATED)) {\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 currentFunction.flow = flow.leaveBranchOrScope(false);\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 let flow = currentFunction.flow;\r\n if (alwaysReturns) flow.set(FlowFlags.RETURNS);\r\n if (alwaysReturnsWrapped) flow.set(FlowFlags.RETURNS_WRAPPED);\r\n if (alwaysThrows) flow.set(FlowFlags.THROWS);\r\n if (alwaysAllocates) flow.set(FlowFlags.ALLOCATES);\r\n }\r\n return currentBlock;\r\n }\r\n\r\n compileThrowStatement(statement: ThrowStatement): ExpressionRef {\r\n var flow = this.currentFunction.flow;\r\n\r\n // Remember that this branch throws\r\n flow.set(FlowFlags.THROWS);\r\n\r\n // FIXME: without try-catch it is safe to assume RETURNS as well for now\r\n flow.set(FlowFlags.RETURNS);\r\n\r\n // TODO: requires exception-handling spec.\r\n return compileBuiltinAbort(this, null, statement);\r\n }\r\n\r\n compileTryStatement(statement: TryStatement): ExpressionRef {\r\n // TODO\r\n // can't yet support something like: try { return ... } finally { ... }\r\n // worthwhile to investigate lowering returns to block results (here)?\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n /**\r\n * Compiles a variable statement. Returns `0` if an initializer is not\r\n * necessary.\r\n */\r\n compileVariableStatement(statement: VariableStatement, isKnownGlobal: bool = false): ExpressionRef {\r\n var program = this.program;\r\n var currentFunction = this.currentFunction;\r\n var declarations = statement.declarations;\r\n var numDeclarations = declarations.length;\r\n\r\n // top-level variables and constants become globals\r\n if (isKnownGlobal || (\r\n currentFunction == this.startFunction &&\r\n statement.parent && statement.parent.kind == NodeKind.SOURCE\r\n )) {\r\n // NOTE that the above condition also covers top-level variables declared with 'let', even\r\n // though such variables could also become start function locals if, and only if, not used\r\n // within any function declared in the same source, which is unknown at this point. the only\r\n // efficient way to deal with this would be to keep track of all occasions it is used and\r\n // replace these instructions afterwards, dynamically. (TOOD: what about a Binaryen pass?)\r\n for (let i = 0; i < numDeclarations; ++i) {\r\n this.compileGlobalDeclaration(declarations[i]);\r\n }\r\n return 0;\r\n }\r\n\r\n // other variables become locals\r\n var initializers = new Array();\r\n var flow = this.currentFunction.flow;\r\n for (let i = 0; i < numDeclarations; ++i) {\r\n let declaration = declarations[i];\r\n let name = declaration.name.text;\r\n let type: Type | null = null;\r\n let initExpr: ExpressionRef = 0;\r\n if (declaration.type) {\r\n type = program.resolveType( // reports\r\n declaration.type,\r\n flow.contextualTypeArguments\r\n );\r\n if (!type) continue;\r\n if (declaration.initializer) {\r\n initExpr = this.compileExpression( // reports\r\n declaration.initializer,\r\n type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n } else if (declaration.initializer) { // infer type using void/NONE for proper literal inference\r\n initExpr = this.compileExpressionRetainType( // reports\r\n declaration.initializer,\r\n Type.void,\r\n WrapMode.NONE\r\n );\r\n if (this.currentType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.range, this.currentType.toString(), \"\"\r\n );\r\n continue;\r\n }\r\n type = this.currentType;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.name.range.atEnd\r\n );\r\n continue;\r\n }\r\n let isInlined = false;\r\n if (declaration.is(CommonFlags.CONST)) {\r\n if (initExpr) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (getExpressionId(initExpr) == ExpressionId.Const) {\r\n let local = new Local(program, name, -1, type);\r\n switch (getExpressionType(initExpr)) {\r\n case NativeType.I32: {\r\n local = local.withConstantIntegerValue(getConstValueI32(initExpr), 0);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n local = local.withConstantIntegerValue(\r\n getConstValueI64Low(initExpr),\r\n getConstValueI64High(initExpr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n local = local.withConstantFloatValue(getConstValueF32(initExpr));\r\n break;\r\n }\r\n case NativeType.F64: {\r\n local = local.withConstantFloatValue(getConstValueF64(initExpr));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n // Create a virtual local that doesn't actually exist in WebAssembly\r\n let scopedLocals = currentFunction.flow.scopedLocals;\r\n if (!scopedLocals) currentFunction.flow.scopedLocals = scopedLocals = new Map();\r\n else if (scopedLocals.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, name\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n scopedLocals.set(name, local);\r\n isInlined = true;\r\n } else {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n declaration.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._const_declarations_must_be_initialized,\r\n declaration.range\r\n );\r\n }\r\n }\r\n if (!isInlined) {\r\n let local: Local;\r\n if (\r\n declaration.isAny(CommonFlags.LET | CommonFlags.CONST) ||\r\n flow.is(FlowFlags.INLINE_CONTEXT)\r\n ) { // here: not top-level\r\n local = flow.addScopedLocal(type, name, false, declaration); // reports\r\n } else {\r\n local = currentFunction.addLocal(type, name, declaration); // reports\r\n }\r\n if (initExpr) {\r\n initializers.push(this.compileAssignmentWithValue(declaration.name, initExpr));\r\n if (local.type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped(local.index, !flow.canOverflow(initExpr, type));\r\n }\r\n } else if (local.type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped(local.index, true); // zero\r\n }\r\n }\r\n }\r\n return initializers.length // we can unwrap these here because the\r\n ? initializers.length == 1 // source didn't tell us exactly what to do\r\n ? initializers[0]\r\n : this.module.createBlock(null, initializers, NativeType.None)\r\n : 0;\r\n }\r\n\r\n compileVoidStatement(statement: VoidStatement): ExpressionRef {\r\n return this.compileExpression(statement.expression, Type.void, ConversionKind.EXPLICIT, WrapMode.NONE);\r\n }\r\n\r\n compileWhileStatement(statement: WhileStatement): ExpressionRef {\r\n var module = this.module;\r\n\r\n // The condition does not yet initialize a branch\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n\r\n if (\r\n !this.options.noTreeShaking ||\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT)\r\n ) {\r\n // Try to eliminate unnecesssary loops if the condition is constant\r\n let condExprPrecomp = this.precomputeExpressionRef(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n if (!getConstValueI32(condExprPrecomp)) return module.createNop();\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n // Statements initiate a new branch with its own break context\r\n var currentFunction = this.currentFunction;\r\n var label = currentFunction.enterBreakContext();\r\n var flow = currentFunction.flow.enterBranchOrScope();\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 alwaysReturns = false; // CONDITION_IS_ALWAYS_TRUE && flow.is(FlowFlags.RETURNS);\r\n // TODO: evaluate if condition is always true\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.leaveBranchOrScope();\r\n currentFunction.leaveBreakContext();\r\n\r\n var expr = module.createBlock(breakLabel, [\r\n module.createLoop(continueLabel,\r\n module.createIf(condExpr,\r\n flow.isAny(FlowFlags.CONTINUES | FlowFlags.BREAKS | FlowFlags.RETURNS)\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 ], NativeType.None);\r\n\r\n // If the loop is guaranteed to run and return, propagate that and append a hint\r\n if (alwaysReturns) {\r\n expr = module.createBlock(null, [\r\n expr,\r\n module.createUnreachable()\r\n ]);\r\n }\r\n return expr;\r\n }\r\n\r\n // expressions\r\n\r\n /**\r\n * Compiles the value of an inlined constant element.\r\n * @param retainType If true, the annotated type of the constant is retained. Otherwise, the value\r\n * is precomputed according to context.\r\n */\r\n compileInlineConstant(\r\n element: VariableLikeElement,\r\n contextualType: Type,\r\n retainType: bool\r\n ): ExpressionRef {\r\n assert(element.is(CommonFlags.INLINED));\r\n var type = element.type;\r\n switch (\r\n !retainType &&\r\n type.is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n type.size < contextualType.size\r\n ? (this.currentType = contextualType).kind // essentially precomputes a (sign-)extension\r\n : (this.currentType = type).kind\r\n ) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n let shift = type.computeSmallIntegerShift(Type.i32);\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue) << shift >> shift\r\n : 0\r\n ); // recognized by canOverflow\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n let mask = element.type.computeSmallIntegerMask(Type.i32);\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue) & mask\r\n : 0\r\n ); // recognized by canOverflow\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue)\r\n : 0\r\n );\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n if (!element.program.options.isWasm64) {\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue)\r\n : 0\r\n );\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return element.constantValueKind == ConstantValueKind.INTEGER\r\n ? this.module.createI64(\r\n i64_low(element.constantIntegerValue),\r\n i64_high(element.constantIntegerValue)\r\n )\r\n : this.module.createI64(0);\r\n }\r\n case TypeKind.F64: {\r\n if (!(element.is(CommonFlags.BUILTIN) && contextualType == Type.f32)) {\r\n return this.module.createF64((element).constantFloatValue);\r\n }\r\n // otherwise fall-through: basically precomputes f32.demote/f64 of NaN / Infinity\r\n this.currentType = Type.f32;\r\n }\r\n case TypeKind.F32: {\r\n return this.module.createF32((element).constantFloatValue);\r\n }\r\n default: {\r\n assert(false);\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n }\r\n\r\n compileExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n this.currentType = contextualType;\r\n\r\n var expr: ExpressionRef;\r\n switch (expression.kind) {\r\n case NodeKind.ASSERTION: {\r\n expr = this.compileAssertionExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.BINARY: {\r\n expr = this.compileBinaryExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.CALL: {\r\n expr = this.compileCallExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.COMMA: {\r\n expr = this.compileCommaExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.ELEMENTACCESS: {\r\n expr = this.compileElementAccessExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.FUNCTION: {\r\n expr = this.compileFunctionExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.FALSE:\r\n case NodeKind.NULL:\r\n case NodeKind.THIS:\r\n case NodeKind.SUPER:\r\n case NodeKind.TRUE: {\r\n expr = this.compileIdentifierExpression(\r\n expression,\r\n contextualType,\r\n conversionKind == ConversionKind.NONE // retain type of inlined constants\r\n );\r\n break;\r\n }\r\n case NodeKind.INSTANCEOF: {\r\n expr = this.compileInstanceOfExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.LITERAL: {\r\n expr = this.compileLiteralExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.NEW: {\r\n expr = this.compileNewExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.PARENTHESIZED: {\r\n expr = this.compileParenthesizedExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.PROPERTYACCESS: {\r\n expr = this.compilePropertyAccessExpression(\r\n expression,\r\n contextualType,\r\n conversionKind == ConversionKind.NONE // retain type of inlined constants\r\n );\r\n break;\r\n }\r\n case NodeKind.TERNARY: {\r\n expr = this.compileTernaryExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.UNARYPOSTFIX: {\r\n expr = this.compileUnaryPostfixExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.UNARYPREFIX: {\r\n expr = this.compileUnaryPrefixExpression(expression, contextualType);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = this.module.createUnreachable();\r\n }\r\n }\r\n\r\n var currentType = this.currentType;\r\n if (conversionKind != ConversionKind.NONE && currentType != contextualType) {\r\n expr = this.convertExpression(expr, currentType, contextualType, conversionKind, wrapMode, expression);\r\n this.currentType = contextualType;\r\n } else if (wrapMode == WrapMode.WRAP) {\r\n expr = this.ensureSmallIntegerWrap(expr, currentType);\r\n }\r\n\r\n if (this.options.sourceMap) this.addDebugLocation(expr, expression.range);\r\n return expr;\r\n }\r\n\r\n compileExpressionRetainType(\r\n expression: Expression,\r\n contextualType: Type,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n return this.compileExpression(\r\n expression,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n wrapMode\r\n );\r\n }\r\n\r\n precomputeExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n return this.precomputeExpressionRef(\r\n this.compileExpression(expression, contextualType, conversionKind, wrapMode)\r\n );\r\n }\r\n\r\n precomputeExpressionRef(expr: ExpressionRef): ExpressionRef {\r\n var module = this.module;\r\n var type = this.currentType;\r\n var nativeType = type.toNativeType();\r\n var funcRef = module.addTemporaryFunction(nativeType, null, expr);\r\n module.runPasses([ \"precompute\" ], funcRef);\r\n var ret = getFunctionBody(funcRef);\r\n module.removeTemporaryFunction();\r\n return ret;\r\n }\r\n\r\n convertExpression(\r\n expr: ExpressionRef,\r\n fromType: Type,\r\n toType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n assert(conversionKind != ConversionKind.NONE);\r\n var module = this.module;\r\n\r\n // void to any\r\n if (fromType.kind == TypeKind.VOID) {\r\n assert(toType.kind != TypeKind.VOID); // convertExpression should not be called with void -> void\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n reportNode.range, fromType.toString(), toType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // any to void\r\n if (toType.kind == TypeKind.VOID) return module.createDrop(expr);\r\n\r\n if (!fromType.isAssignableTo(toType)) {\r\n if (conversionKind == ConversionKind.IMPLICIT) {\r\n this.error(\r\n DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast,\r\n reportNode.range, fromType.toString(), toType.toString()\r\n ); // recoverable\r\n }\r\n }\r\n\r\n if (fromType.is(TypeFlags.FLOAT)) {\r\n\r\n // float to float\r\n if (toType.is(TypeFlags.FLOAT)) {\r\n if (fromType.kind == TypeKind.F32) {\r\n\r\n // f32 to f64\r\n if (toType.kind == TypeKind.F64) {\r\n expr = module.createUnary(UnaryOp.PromoteF32, expr);\r\n }\r\n\r\n // otherwise f32 to f32\r\n\r\n // f64 to f32\r\n } else if (toType.kind == TypeKind.F32) {\r\n expr = module.createUnary(UnaryOp.DemoteF64, expr);\r\n }\r\n\r\n // otherwise f64 to f64\r\n\r\n // float to int\r\n } else if (toType.is(TypeFlags.INTEGER)) {\r\n\r\n // f32 to int\r\n if (fromType.kind == TypeKind.F32) {\r\n if (toType.is(TypeFlags.SIGNED)) {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF32ToI64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF32ToI32, expr);\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF32ToU64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF32ToU32, expr);\r\n }\r\n }\r\n\r\n // f64 to int\r\n } else {\r\n if (toType.is(TypeFlags.SIGNED)) {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF64ToI64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF64ToI32, expr);\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF64ToU64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF64ToU32, expr);\r\n }\r\n }\r\n }\r\n\r\n // float to void\r\n } else {\r\n assert(toType.flags == TypeFlags.NONE, \"void type expected\");\r\n expr = module.createDrop(expr);\r\n }\r\n\r\n // int to float\r\n } else if (fromType.is(TypeFlags.INTEGER) && toType.is(TypeFlags.FLOAT)) {\r\n\r\n // int to f32\r\n if (toType.kind == TypeKind.F32) {\r\n if (fromType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI64ToF32\r\n : UnaryOp.ConvertU64ToF32,\r\n expr\r\n );\r\n } else {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI32ToF32\r\n : UnaryOp.ConvertU32ToF32,\r\n expr\r\n );\r\n }\r\n\r\n // int to f64\r\n } else {\r\n if (fromType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI64ToF64\r\n : UnaryOp.ConvertU64ToF64,\r\n expr\r\n );\r\n } else {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI32ToF64\r\n : UnaryOp.ConvertU32ToF64,\r\n expr\r\n );\r\n }\r\n }\r\n\r\n // int to int\r\n } else {\r\n // i64 to ...\r\n if (fromType.is(TypeFlags.LONG)) {\r\n\r\n // i64 to i32 or smaller\r\n if (!toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.WrapI64, expr); // discards upper bits\r\n }\r\n\r\n // i32 or smaller to i64\r\n } else if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n toType.is(TypeFlags.SIGNED) ? UnaryOp.ExtendI32 : UnaryOp.ExtendU32,\r\n this.ensureSmallIntegerWrap(expr, fromType) // must clear garbage bits\r\n );\r\n wrapMode = WrapMode.NONE;\r\n\r\n // i32 to i32\r\n } else {\r\n // small i32 to ...\r\n if (fromType.is(TypeFlags.SHORT)) {\r\n // small i32 to larger i32\r\n if (fromType.size < toType.size) {\r\n expr = this.ensureSmallIntegerWrap(expr, fromType); // must clear garbage bits\r\n wrapMode = WrapMode.NONE;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.currentType = toType;\r\n return wrapMode == WrapMode.WRAP\r\n ? this.ensureSmallIntegerWrap(expr, toType)\r\n : expr;\r\n }\r\n\r\n compileAssertionExpression(expression: AssertionExpression, contextualType: Type): ExpressionRef {\r\n var toType = this.program.resolveType( // reports\r\n expression.toType,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!toType) return this.module.createUnreachable();\r\n return this.compileExpression(expression.expression, toType, ConversionKind.EXPLICIT, WrapMode.NONE);\r\n }\r\n\r\n private f32ModInstance: Function | null = null;\r\n private f64ModInstance: Function | null = null;\r\n private f32PowInstance: Function | null = null;\r\n private f64PowInstance: Function | null = null;\r\n\r\n compileBinaryExpression(\r\n expression: BinaryExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var left = expression.left;\r\n var right = expression.right;\r\n\r\n var leftExpr: ExpressionRef;\r\n var leftType: Type;\r\n var rightExpr: ExpressionRef;\r\n var rightType: Type;\r\n var commonType: Type | null;\r\n\r\n var expr: ExpressionRef;\r\n var compound = false;\r\n\r\n var operator = expression.operator;\r\n switch (operator) {\r\n case Token.LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.LT);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"<\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.LtI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.LtI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtI64\r\n : BinaryOp.LtI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.LtU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtU64\r\n : BinaryOp.LtU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.LtU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.LtF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.LtF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.GT);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \">\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.GtI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.GtI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.GtU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtU64\r\n : BinaryOp.GtU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.GtU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.GtF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.GtF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.LESSTHAN_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.LE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"<=\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.LeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeI64\r\n : BinaryOp.LeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.LeI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.LeU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeU64\r\n : BinaryOp.LeU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.LeU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.LeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.LeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.GREATERTHAN_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.GE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \">=\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.GeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeI64\r\n : BinaryOp.GeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.GeI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.GeU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeU64\r\n : BinaryOp.GeU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.GeU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.GeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.GeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n\r\n case Token.EQUALS_EQUALS_EQUALS:\r\n case Token.EQUALS_EQUALS: {\r\n\r\n // NOTE that this favors correctness, in terms of emitting a binary expression, over\r\n // checking for a possible use of unary EQZ. while the most classic of all optimizations,\r\n // that's not what the source told us to do. for reference, `!left` emits unary EQZ.\r\n\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (operator == Token.EQUALS_EQUALS && this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.EQ);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n // still allow '==' with references\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, operatorTokenToString(expression.operator), leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.EqI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.EqI64\r\n : BinaryOp.EqI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.EqI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.EqF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.EqF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.EXCLAMATION_EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (operator == Token.EXCLAMATION_EQUALS && this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.NE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n // still allow '!=' with references\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, operatorTokenToString(expression.operator), leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.NeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.NeI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.NeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.NeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.EQUALS: {\r\n return this.compileAssignment(left, right, contextualType);\r\n }\r\n case Token.PLUS_EQUALS: compound = true;\r\n case Token.PLUS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.ADD);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"+\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // addition might overflow\r\n case TypeKind.I16: // ^\r\n case TypeKind.U8: // ^\r\n case TypeKind.U16: // ^\r\n case TypeKind.BOOL: // ^\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.AddI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AddI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.AddF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.AddF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_EQUALS: compound = true;\r\n case Token.MINUS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.SUB);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"-\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // subtraction might overflow\r\n case TypeKind.I16: // ^\r\n case TypeKind.U8: // ^\r\n case TypeKind.U16: // ^\r\n case TypeKind.BOOL: // ^\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.SubI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.SubF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.SubF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.ASTERISK_EQUALS: compound = true;\r\n case Token.ASTERISK: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.MUL);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"*\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.MulI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.MulI64\r\n : BinaryOp.MulI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.MulI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.MulF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.MulF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.ASTERISK_ASTERISK_EQUALS: compound = true;\r\n case Token.ASTERISK_ASTERISK: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.POW);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n let instance: Function | null;\r\n\r\n // Mathf.pow if lhs is f32 (result is f32)\r\n if (this.currentType.kind == TypeKind.F32) {\r\n rightExpr = this.compileExpression(right, Type.f32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (!(instance = this.f32PowInstance)) {\r\n let namespace = this.program.elementsLookup.get(\"Mathf\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"pow\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf.pow\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f32PowInstance = instance = (prototype).resolve();\r\n }\r\n\r\n // Math.pow otherwise (result is f64)\r\n // TODO: should the result be converted back?\r\n } else {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n this.currentType,\r\n Type.f64,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(\r\n right,\r\n Type.f64,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n rightType = this.currentType;\r\n if (!(instance = this.f64PowInstance)) {\r\n let namespace = this.program.elementsLookup.get(\"Math\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"pow\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math.pow\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f64PowInstance = instance = (prototype).resolve();\r\n }\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n case Token.SLASH_EQUALS: compound = true;\r\n case Token.SLASH: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.DIV);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"/\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // signed div on signed small integers might overflow, e.g. -128/-1\r\n case TypeKind.I16: // ^\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.DivI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivI64\r\n : BinaryOp.DivI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.DivI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.DivU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.DivU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivU64\r\n : BinaryOp.DivU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.DivU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.DivF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.DivF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.PERCENT_EQUALS: compound = true;\r\n case Token.PERCENT: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.REM);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"%\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n expr = module.createBinary(BinaryOp.RemI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.RemI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemI64\r\n : BinaryOp.RemI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.RemI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.RemU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.RemU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemU64\r\n : BinaryOp.RemU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.RemU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n let instance = this.f32ModInstance;\r\n if (!instance) {\r\n let namespace = this.program.elementsLookup.get(\"Mathf\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"mod\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf.mod\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f32ModInstance = instance = (prototype).resolve();\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n let instance = this.f64ModInstance;\r\n if (!instance) {\r\n let namespace = this.program.elementsLookup.get(\"Math\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"mod\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math.mod\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f64ModInstance = instance = (prototype).resolve();\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.LESSTHAN_LESSTHAN_EQUALS: compound = true;\r\n case Token.LESSTHAN_LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHL);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShlI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShlI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShlI64\r\n : BinaryOp.ShlI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS: compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType); // must clear garbage bits\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n expr = module.createBinary(BinaryOp.ShrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.ShrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.ShrI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrI64\r\n : BinaryOp.ShrI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShrU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS: compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHR_U);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType); // must clear garbage bits\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: { // assumes that unsigned shr on unsigned small integers does not overflow\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n }\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShrU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.AMPERSAND_EQUALS: compound = true;\r\n case Token.AMPERSAND: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overloadd\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_AND);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"&\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.AndI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AndI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AndI64\r\n : BinaryOp.AndI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.BAR_EQUALS: compound = true;\r\n case Token.BAR: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_OR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"|\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.OrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.OrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.OrI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.OrI64\r\n : BinaryOp.OrI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.CARET_EQUALS: compound = true;\r\n case Token.CARET: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_XOR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"^\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.XorI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.XorI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.XorI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n\r\n // logical (no overloading)\r\n\r\n case Token.AMPERSAND_AMPERSAND: { // left && right\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n\r\n // simplify if cloning left without side effects is possible\r\n if (expr = module.cloneExpression(leftExpr, true, 0)) {\r\n this.makeIsTrueish(leftExpr, this.currentType);\r\n expr = module.createIf(\r\n this.makeIsTrueish(leftExpr, this.currentType),\r\n rightExpr,\r\n expr\r\n );\r\n\r\n // if not possible, tee left to a temp. local\r\n } else {\r\n let flow = this.currentFunction.flow;\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(\r\n this.currentType,\r\n !flow.canOverflow(leftExpr, this.currentType)\r\n );\r\n expr = module.createIf(\r\n this.makeIsTrueish(\r\n module.createTeeLocal(tempLocal.index, leftExpr),\r\n this.currentType\r\n ),\r\n rightExpr,\r\n module.createGetLocal(\r\n assert(tempLocal).index, // to be sure\r\n this.currentType.toNativeType()\r\n )\r\n );\r\n }\r\n break;\r\n }\r\n case Token.BAR_BAR: { // left || right\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n\r\n // simplify if cloning left without side effects is possible\r\n if (expr = this.module.cloneExpression(leftExpr, true, 0)) {\r\n expr = this.module.createIf(\r\n this.makeIsTrueish(leftExpr, this.currentType),\r\n expr,\r\n rightExpr\r\n );\r\n\r\n // if not possible, tee left to a temp. local\r\n } else {\r\n let flow = this.currentFunction.flow;\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(\r\n this.currentType,\r\n !flow.canOverflow(leftExpr, this.currentType)\r\n );\r\n expr = module.createIf(\r\n this.makeIsTrueish(\r\n module.createTeeLocal(tempLocal.index, leftExpr),\r\n this.currentType\r\n ),\r\n module.createGetLocal(\r\n assert(tempLocal).index, // to be sure\r\n this.currentType.toNativeType()\r\n ),\r\n rightExpr\r\n );\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = this.module.createUnreachable();\r\n }\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(left, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n\r\n compileUnaryOverload(\r\n operatorInstance: Function,\r\n value: Expression,\r\n valueExpr: ExpressionRef,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n var argumentExpressions: Expression[];\r\n var thisArg: ExpressionRef = 0;\r\n if (operatorInstance.is(CommonFlags.INSTANCE)) {\r\n thisArg = valueExpr; // can reuse the previously evaluated expr as the this value here\r\n argumentExpressions = [];\r\n } else {\r\n argumentExpressions = [ value ]; // annotated type might differ -> recompile\r\n }\r\n return this.compileCallDirect(\r\n operatorInstance,\r\n argumentExpressions,\r\n reportNode,\r\n thisArg,\r\n operatorInstance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n }\r\n\r\n compileBinaryOverload(\r\n operatorInstance: Function,\r\n left: Expression,\r\n leftExpr: ExpressionRef,\r\n right: Expression,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n var argumentExpressions: Expression[];\r\n var thisArg: ExpressionRef = 0;\r\n if (operatorInstance.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(operatorInstance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n thisArg = leftExpr; // can reuse the previously evaluated leftExpr as the this value here\r\n argumentExpressions = [ right ];\r\n } else {\r\n argumentExpressions = [ left, right ]; // annotated type of LHS might differ -> recompile\r\n }\r\n var ret = this.compileCallDirect(\r\n operatorInstance,\r\n argumentExpressions,\r\n reportNode,\r\n thisArg,\r\n operatorInstance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n return ret;\r\n }\r\n\r\n compileAssignment(expression: Expression, valueExpression: Expression, contextualType: Type): ExpressionRef {\r\n var program = this.program;\r\n var currentFunction = this.currentFunction;\r\n var target = program.resolveExpression(expression, currentFunction); // reports\r\n if (!target) return this.module.createUnreachable();\r\n\r\n // to compile just the value, we need to know the target's type\r\n var targetType: Type;\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field compiled as a global\r\n return this.module.createUnreachable();\r\n }\r\n assert((target).type != Type.void); // compileGlobal must guarantee this\r\n // fall-through\r\n }\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n targetType = (target).type;\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let prototype = (target).setterPrototype;\r\n if (prototype) {\r\n let instance = prototype.resolve(); // reports\r\n if (!instance) return this.module.createUnreachable();\r\n assert(instance.signature.parameterTypes.length == 1); // parser must guarantee this\r\n targetType = instance.signature.parameterTypes[0];\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n case ElementKind.CLASS: {\r\n if (program.resolvedElementExpression) { // indexed access\r\n let isUnchecked = currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);\r\n if (!indexedSet) {\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, (target).internalName\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, (target).internalName\r\n );\r\n }\r\n return this.module.createUnreachable();\r\n }\r\n assert(indexedSet.signature.parameterTypes.length == 2); // parser must guarantee this\r\n targetType = indexedSet.signature.parameterTypes[1]; // 2nd parameter is the element\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n\r\n // compile the value and do the assignment\r\n assert(targetType != Type.void);\r\n var valueExpr = this.compileExpression(valueExpression, targetType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n return this.compileAssignmentWithValue(\r\n expression,\r\n valueExpr,\r\n contextualType != Type.void\r\n );\r\n }\r\n\r\n compileAssignmentWithValue(\r\n expression: Expression,\r\n valueWithCorrectType: ExpressionRef,\r\n tee: bool = false\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var target = this.program.resolveExpression(expression, this.currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.LOCAL: {\r\n let type = (target).type;\r\n assert(type != Type.void);\r\n this.currentType = tee ? type : Type.void;\r\n if ((target).is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let flow = this.currentFunction.flow;\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped((target).index, !flow.canOverflow(valueWithCorrectType, type));\r\n }\r\n return tee\r\n ? module.createTeeLocal((target).index, valueWithCorrectType)\r\n : module.createSetLocal((target).index, valueWithCorrectType);\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) return module.createUnreachable();\r\n let type = (target).type;\r\n assert(type != Type.void);\r\n this.currentType = tee ? type : Type.void;\r\n if ((target).is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range,\r\n target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n valueWithCorrectType = this.ensureSmallIntegerWrap(valueWithCorrectType, type); // guaranteed\r\n if (tee) {\r\n let nativeType = type.toNativeType();\r\n let internalName = target.internalName;\r\n return module.createBlock(null, [ // emulated teeGlobal\r\n module.createSetGlobal(internalName, valueWithCorrectType),\r\n module.createGetGlobal(internalName, nativeType)\r\n ], nativeType);\r\n } else {\r\n return module.createSetGlobal(target.internalName, valueWithCorrectType);\r\n }\r\n }\r\n case ElementKind.FIELD: {\r\n const declaration = (target).declaration;\r\n if (\r\n (target).is(CommonFlags.READONLY) &&\r\n !(\r\n this.currentFunction.is(CommonFlags.CONSTRUCTOR) ||\r\n declaration == null ||\r\n declaration.initializer != null\r\n )\r\n ) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, (target).internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let type = (target).type;\r\n this.currentType = tee ? type : Type.void;\r\n let nativeType = type.toNativeType();\r\n if (type.kind == TypeKind.BOOL) {\r\n // make sure bools are wrapped (usually are) when storing as 8 bits\r\n valueWithCorrectType = this.ensureSmallIntegerWrap(valueWithCorrectType, type);\r\n }\r\n if (tee) {\r\n let currentFunction = this.currentFunction;\r\n let flow = currentFunction.flow;\r\n let tempLocal = currentFunction.getAndFreeTempLocal(\r\n type,\r\n !flow.canOverflow(valueWithCorrectType, type)\r\n );\r\n let tempLocalIndex = tempLocal.index;\r\n // TODO: simplify if valueWithCorrectType has no side effects\r\n return module.createBlock(null, [\r\n module.createSetLocal(tempLocalIndex, valueWithCorrectType),\r\n module.createStore(\r\n type.byteSize,\r\n thisExpr,\r\n module.createGetLocal(tempLocalIndex, nativeType),\r\n nativeType,\r\n (target).memoryOffset\r\n ),\r\n module.createGetLocal(tempLocalIndex, nativeType)\r\n ], nativeType);\r\n } else {\r\n return module.createStore(\r\n type.byteSize,\r\n thisExpr,\r\n valueWithCorrectType,\r\n nativeType,\r\n (target).memoryOffset\r\n );\r\n }\r\n }\r\n case ElementKind.PROPERTY: {\r\n let setterPrototype = (target).setterPrototype;\r\n if (setterPrototype) {\r\n let setterInstance = setterPrototype.resolve(); // reports\r\n if (!setterInstance) return module.createUnreachable();\r\n\r\n // call just the setter if the return value isn't of interest\r\n if (!tee) {\r\n if (setterInstance.is(CommonFlags.INSTANCE)) {\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n return this.makeCallDirect(setterInstance, [ thisExpr, valueWithCorrectType ]);\r\n } else {\r\n return this.makeCallDirect(setterInstance, [ valueWithCorrectType ]);\r\n }\r\n }\r\n\r\n // otherwise call the setter first, then the getter\r\n let getterPrototype = (target).getterPrototype;\r\n assert(getterPrototype != null); // must have one if there is a setter\r\n let getterInstance = (getterPrototype).resolve(); // reports\r\n if (!getterInstance) return module.createUnreachable();\r\n let returnType = getterInstance.signature.returnType;\r\n let nativeReturnType = returnType.toNativeType();\r\n if (setterInstance.is(CommonFlags.INSTANCE)) {\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(returnType, false);\r\n let tempLocalIndex = tempLocal.index;\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ // set and remember the target\r\n module.createTeeLocal(tempLocalIndex, thisExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(getterInstance, [ // get from remembered target\r\n module.createGetLocal(tempLocalIndex, nativeReturnType)\r\n ])\r\n ], nativeReturnType);\r\n } else {\r\n // note that this must be performed here because `resolved` is shared\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ valueWithCorrectType ]),\r\n this.makeCallDirect(getterInstance)\r\n ], nativeReturnType);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, target.internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n case ElementKind.CLASS: {\r\n let elementExpression = this.program.resolvedElementExpression;\r\n if (elementExpression) {\r\n let isUnchecked = this.currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);\r\n if (!indexedSet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, target.internalName\r\n );\r\n this.currentType = tee ? indexedGet.signature.returnType : Type.void;\r\n return module.createUnreachable();\r\n }\r\n let targetType = (target).type;\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let elementExpr = this.compileExpression(\r\n elementExpression,\r\n Type.i32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (tee) {\r\n let currentFunction = this.currentFunction;\r\n let tempLocalTarget = currentFunction.getTempLocal(targetType, false);\r\n let tempLocalElement = currentFunction.getAndFreeTempLocal(this.currentType, false);\r\n let returnType = indexedGet.signature.returnType;\r\n this.currentFunction.freeTempLocal(tempLocalTarget);\r\n return module.createBlock(null, [\r\n this.makeCallDirect(indexedSet, [\r\n module.createTeeLocal(tempLocalTarget.index, thisExpr),\r\n module.createTeeLocal(tempLocalElement.index, elementExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(indexedGet, [\r\n module.createGetLocal(tempLocalTarget.index, tempLocalTarget.type.toNativeType()),\r\n module.createGetLocal(tempLocalElement.index, tempLocalElement.type.toNativeType())\r\n ])\r\n ], returnType.toNativeType());\r\n } else {\r\n return this.makeCallDirect(indexedSet, [\r\n thisExpr,\r\n elementExpr,\r\n valueWithCorrectType\r\n ]);\r\n }\r\n }\r\n // fall-through\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n compileCallExpression(expression: CallExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var target = this.program.resolveExpression(expression.expression, currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n var signature: Signature | null;\r\n var indexArg: ExpressionRef;\r\n switch (target.kind) {\r\n\r\n // direct call: concrete function\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let prototype = target;\r\n let typeArguments = expression.typeArguments;\r\n\r\n // builtins handle present respectively omitted type arguments on their own\r\n if (prototype.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) {\r\n return this.compileCallExpressionBuiltin(prototype, expression, contextualType);\r\n }\r\n\r\n let instance: Function | null = null;\r\n\r\n // resolve generic call if type arguments have been provided\r\n if (typeArguments) {\r\n if (!prototype.is(CommonFlags.GENERIC)) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n expression.expression.range, prototype.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n instance = prototype.resolveUsingTypeArguments( // reports\r\n typeArguments,\r\n this.currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n\r\n // infer generic call if type arguments have been omitted\r\n } else if (prototype.is(CommonFlags.GENERIC)) {\r\n let inferredTypes = new Map();\r\n let typeParameters = assert(prototype.declaration.typeParameters);\r\n let numTypeParameters = typeParameters.length;\r\n for (let i = 0; i < numTypeParameters; ++i) {\r\n inferredTypes.set(typeParameters[i].name.text, null);\r\n }\r\n // let numInferred = 0;\r\n let parameterTypes = prototype.declaration.signature.parameters;\r\n let numParameterTypes = parameterTypes.length;\r\n let argumentExpressions = expression.arguments;\r\n let numArguments = argumentExpressions.length;\r\n let argumentExprs = new Array(numArguments);\r\n for (let i = 0; i < numParameterTypes; ++i) {\r\n let typeNode = parameterTypes[i].type;\r\n let name = typeNode.kind == NodeKind.TYPE ? (typeNode).name.text : null;\r\n let argumentExpression = i < numArguments\r\n ? argumentExpressions[i]\r\n : prototype.declaration.signature.parameters[i].initializer;\r\n if (!argumentExpression) { // missing initializer -> too few arguments\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n expression.range, numParameterTypes.toString(10), numArguments.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (name !== null && inferredTypes.has(name)) {\r\n let inferredType = inferredTypes.get(name);\r\n if (inferredType) {\r\n argumentExprs[i] = this.compileExpressionRetainType(argumentExpression, inferredType, WrapMode.NONE);\r\n let commonType: Type | null;\r\n if (!(commonType = Type.commonCompatible(inferredType, this.currentType, true))) {\r\n if (!(commonType = Type.commonCompatible(inferredType, this.currentType, false))) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n parameterTypes[i].type.range, this.currentType.toString(), inferredType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n inferredType = commonType;\r\n } else {\r\n argumentExprs[i] = this.compileExpressionRetainType(argumentExpression, Type.i32, WrapMode.NONE);\r\n inferredType = this.currentType;\r\n // ++numInferred;\r\n }\r\n inferredTypes.set(name, inferredType);\r\n } else {\r\n let concreteType = this.program.resolveType(\r\n parameterTypes[i].type,\r\n this.currentFunction.flow.contextualTypeArguments,\r\n true\r\n );\r\n if (!concreteType) return module.createUnreachable();\r\n argumentExprs[i] = this.compileExpression(\r\n argumentExpression,\r\n concreteType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n }\r\n let resolvedTypeArguments = new Array(numTypeParameters);\r\n for (let i = 0; i < numTypeParameters; ++i) {\r\n let inferredType = assert(inferredTypes.get(typeParameters[i].name.text)); // TODO\r\n resolvedTypeArguments[i] = inferredType;\r\n }\r\n instance = prototype.resolve(\r\n resolvedTypeArguments,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n return this.makeCallDirect(instance, argumentExprs);\r\n // TODO: this skips inlining because inlining requires compiling its temporary locals in\r\n // the scope of the inlined flow. might need another mechanism to lock temp. locals early,\r\n // so inlining can be performed in `makeCallDirect` instead?\r\n\r\n // otherwise resolve the non-generic call as usual\r\n } else {\r\n instance = prototype.resolve(\r\n null,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n }\r\n if (!instance) return this.module.createUnreachable();\r\n\r\n // compile 'this' expression if an instance method\r\n let thisExpr: ExpressionRef = 0;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n thisExpr = this.compileExpressionRetainType(\r\n assert(this.program.resolvedThisExpression),\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n }\r\n\r\n return this.compileCallDirect(\r\n instance,\r\n expression.arguments,\r\n expression,\r\n thisExpr,\r\n instance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n }\r\n\r\n // indirect call: index argument with signature (non-generic, can't be inlined)\r\n case ElementKind.LOCAL: {\r\n if (signature = (target).type.signatureReference) {\r\n indexArg = module.createGetLocal((target).index, NativeType.I32);\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (signature = (target).type.signatureReference) {\r\n indexArg = module.createGetGlobal((target).internalName, (target).type.toNativeType());\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FIELD: {\r\n let type = (target).type;\r\n if (signature = type.signatureReference) {\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n indexArg = module.createLoad(\r\n 4,\r\n false,\r\n thisExpr,\r\n NativeType.I32,\r\n (target).memoryOffset\r\n );\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FUNCTION_TARGET: {\r\n signature = (target).signature;\r\n indexArg = this.compileExpression(\r\n expression.expression,\r\n (target).type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n break;\r\n }\r\n case ElementKind.PROPERTY: // TODO\r\n\r\n // not supported\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n return this.compileCallIndirect(\r\n signature,\r\n indexArg,\r\n expression.arguments,\r\n expression\r\n );\r\n }\r\n\r\n private compileCallExpressionBuiltin(\r\n prototype: FunctionPrototype,\r\n expression: CallExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var expr = compileBuiltinCall( // reports\r\n this,\r\n prototype,\r\n prototype.resolveBuiltinTypeArguments(\r\n expression.typeArguments,\r\n this.currentFunction.flow.contextualTypeArguments\r\n ),\r\n expression.arguments,\r\n contextualType,\r\n expression\r\n );\r\n if (!expr) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n return expr;\r\n }\r\n\r\n /**\r\n * Checks that a call with the given number as arguments can be performed according to the\r\n * specified signature.\r\n */\r\n checkCallSignature(\r\n signature: Signature,\r\n numArguments: i32,\r\n hasThis: bool,\r\n reportNode: Node\r\n ): bool {\r\n\r\n // cannot call an instance method without a `this` argument (TODO: `.call`?)\r\n var thisType = signature.thisType;\r\n if (hasThis != (thisType != null)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported, // TODO: better message?\r\n reportNode.range\r\n );\r\n return false;\r\n }\r\n\r\n // not yet implemented (TODO: maybe some sort of an unmanaged/lightweight array?)\r\n var hasRest = signature.hasRest;\r\n if (hasRest) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return false;\r\n }\r\n\r\n var minimum = signature.requiredParameters;\r\n var maximum = signature.parameterTypes.length;\r\n\r\n // must at least be called with required arguments\r\n if (numArguments < minimum) {\r\n this.error(\r\n minimum < maximum\r\n ? DiagnosticCode.Expected_at_least_0_arguments_but_got_1\r\n : DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, minimum.toString(), numArguments.toString()\r\n );\r\n return false;\r\n }\r\n\r\n // must not be called with more than the maximum arguments\r\n if (numArguments > maximum && !hasRest) {\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, maximum.toString(), numArguments.toString()\r\n );\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** Compiles a direct call to a concrete function. */\r\n compileCallDirect(\r\n instance: Function,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0,\r\n inline: bool = false\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n var signature = instance.signature;\r\n\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n numArguments,\r\n thisArg != 0,\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n // Inline if explicitly requested\r\n if (inline) {\r\n assert(!instance.is(CommonFlags.TRAMPOLINE)); // doesn't make sense\r\n return this.compileCallInlineUnchecked(instance, argumentExpressions, reportNode, thisArg);\r\n }\r\n\r\n // Otherwise compile to just a call\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallDirect(instance, operands);\r\n }\r\n\r\n // Depends on being pre-checked in compileCallDirect\r\n private compileCallInlineUnchecked(\r\n instance: Function,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n var signature = instance.signature;\r\n var currentFunction = this.currentFunction;\r\n var module = this.module;\r\n var declaration = instance.prototype.declaration;\r\n\r\n // Create an empty child flow with its own scope and mark it for inlining\r\n var previousFlow = currentFunction.flow;\r\n var returnLabel = instance.internalName + \"|inlined.\" + (instance.nextInlineId++).toString(10);\r\n var returnType = instance.signature.returnType;\r\n var flow = Flow.create(currentFunction);\r\n flow.set(FlowFlags.INLINE_CONTEXT);\r\n flow.returnLabel = returnLabel;\r\n flow.returnType = returnType;\r\n flow.contextualTypeArguments = instance.contextualTypeArguments;\r\n\r\n // Convert provided call arguments to temporary locals. It is important that these are compiled\r\n // here, with their respective locals being blocked. There is no 'makeCallInline'.\r\n var body = [];\r\n if (thisArg) {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n if (getExpressionId(thisArg) == ExpressionId.GetLocal) {\r\n flow.addScopedLocalAlias(\r\n getGetLocalIndex(thisArg),\r\n (parent).type,\r\n \"this\"\r\n );\r\n } else {\r\n let thisLocal = flow.addScopedLocal((parent).type, \"this\", false);\r\n body.push(\r\n module.createSetLocal(thisLocal.index, thisArg)\r\n );\r\n }\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i) {\r\n let paramExpr = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(paramExpr) == ExpressionId.GetLocal) {\r\n flow.addScopedLocalAlias(\r\n getGetLocalIndex(paramExpr),\r\n parameterTypes[i],\r\n signature.getParameterName(i)\r\n );\r\n // inherits wrap status\r\n } else {\r\n let argumentLocal = flow.addScopedLocal(\r\n parameterTypes[i],\r\n signature.getParameterName(i),\r\n !flow.canOverflow(paramExpr, parameterTypes[i])\r\n );\r\n body.push(\r\n module.createSetLocal(argumentLocal.index, paramExpr)\r\n );\r\n }\r\n }\r\n\r\n // Compile optional parameter initializers in the scope of the inlined flow\r\n currentFunction.flow = flow;\r\n var numParameters = signature.parameterTypes.length;\r\n for (let i = numArguments; i < numParameters; ++i) {\r\n let initExpr = this.compileExpression(\r\n assert(declaration.signature.parameters[i].initializer),\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n );\r\n let argumentLocal = flow.addScopedLocal(\r\n parameterTypes[i],\r\n signature.getParameterName(i),\r\n !flow.canOverflow(initExpr, parameterTypes[i])\r\n );\r\n body.push(\r\n module.createSetLocal(argumentLocal.index, initExpr)\r\n );\r\n }\r\n\r\n // Compile the called function's body in the scope of the inlined flow\r\n var bodyStatement = assert(declaration.body);\r\n if (bodyStatement.kind == NodeKind.BLOCK) {\r\n let statements = (bodyStatement).statements;\r\n for (let i = 0, k = statements.length; i < k; ++i) {\r\n let stmt = this.compileStatement(statements[i]);\r\n if (getExpressionId(stmt) != ExpressionId.Nop) {\r\n body.push(stmt);\r\n if (flow.isAny(FlowFlags.TERMINATED)) 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.TERMINATED)) {\r\n this.error(\r\n DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,\r\n declaration.signature.returnType.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n return module.createBlock(returnLabel, body, returnType.toNativeType());\r\n }\r\n\r\n /** Gets the trampoline for the specified function. */\r\n ensureTrampoline(original: Function): Function {\r\n // A trampoline is a function that takes a fixed amount of operands with some of them possibly\r\n // being zeroed. It takes one additional argument denoting the number of actual operands\r\n // provided to the call, and takes appropriate steps to initialize zeroed operands to their\r\n // default values using the optional parameter initializers of the original function. Doing so\r\n // allows calls to functions with optional parameters to circumvent the trampoline when all\r\n // parameters are provided as a fast route, respectively setting up omitted operands in a proper\r\n // context otherwise.\r\n var trampoline = original.trampoline;\r\n if (trampoline) return trampoline;\r\n\r\n var originalSignature = original.signature;\r\n var originalName = original.internalName;\r\n var originalParameterTypes = originalSignature.parameterTypes;\r\n var originalParameterDeclarations = original.prototype.declaration.signature.parameters;\r\n var commonReturnType = originalSignature.returnType;\r\n var commonThisType = originalSignature.thisType;\r\n var isInstance = original.is(CommonFlags.INSTANCE);\r\n\r\n // arguments excl. `this`, operands incl. `this`\r\n var minArguments = originalSignature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = originalParameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (isInstance) {\r\n ++minOperands;\r\n ++maxOperands;\r\n }\r\n var numOptional = assert(maxOperands - minOperands);\r\n\r\n var forwardedOperands = new Array(minOperands);\r\n var operandIndex = 0;\r\n\r\n // forward `this` if applicable\r\n var module = this.module;\r\n if (isInstance) {\r\n forwardedOperands[0] = module.createGetLocal(0, this.options.nativeSizeType);\r\n operandIndex = 1;\r\n }\r\n\r\n // forward required arguments\r\n for (let i = 0; i < minArguments; ++i, ++operandIndex) {\r\n forwardedOperands[operandIndex] = module.createGetLocal(operandIndex, originalParameterTypes[i].toNativeType());\r\n }\r\n assert(operandIndex == minOperands);\r\n\r\n // create the trampoline element\r\n var trampolineSignature = new Signature(originalParameterTypes, commonReturnType, commonThisType);\r\n var trampolineName = originalName + \"|trampoline\";\r\n trampolineSignature.requiredParameters = maxArguments;\r\n trampoline = new Function(\r\n original.prototype,\r\n trampolineName,\r\n trampolineSignature,\r\n original.parent,\r\n original.contextualTypeArguments\r\n );\r\n trampoline.set(original.flags | CommonFlags.TRAMPOLINE | CommonFlags.COMPILED);\r\n original.trampoline = trampoline;\r\n\r\n // compile initializers of omitted arguments in scope of the trampoline function\r\n // this is necessary because initializers might need additional locals and a proper this context\r\n var previousFunction = this.currentFunction;\r\n this.currentFunction = trampoline;\r\n\r\n // create a br_table switching over the number of optional parameters provided\r\n var numNames = numOptional + 1; // incl. outer block\r\n var names = new Array(numNames);\r\n var ofN = \"of\" + numOptional.toString(10);\r\n for (let i = 0; i < numNames; ++i) {\r\n let label = i.toString(10) + ofN;\r\n names[i] = label;\r\n }\r\n var body = module.createBlock(names[0], [\r\n module.createBlock(\"oob\", [\r\n module.createSwitch(names, \"oob\",\r\n // condition is number of provided optional arguments, so subtract required arguments\r\n minArguments\r\n ? module.createBinary(\r\n BinaryOp.SubI32,\r\n module.createGetGlobal(\"~argc\", NativeType.I32),\r\n module.createI32(minArguments)\r\n )\r\n : module.createGetGlobal(\"~argc\", NativeType.I32)\r\n )\r\n ]),\r\n module.createUnreachable()\r\n ]);\r\n for (let i = 0; i < numOptional; ++i, ++operandIndex) {\r\n let type = originalParameterTypes[minArguments + i];\r\n let declaration = originalParameterDeclarations[minArguments + i];\r\n let initializer = declaration.initializer;\r\n let initExpr: ExpressionRef;\r\n if (initializer) {\r\n initExpr = module.createSetLocal(operandIndex,\r\n this.compileExpression(\r\n initializer,\r\n type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n )\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Optional_parameter_must_have_an_initializer,\r\n declaration.range\r\n );\r\n initExpr = module.createUnreachable();\r\n }\r\n body = module.createBlock(names[i + 1], [\r\n body,\r\n initExpr,\r\n ]);\r\n forwardedOperands[operandIndex] = module.createGetLocal(operandIndex, type.toNativeType());\r\n }\r\n this.currentFunction = previousFunction;\r\n assert(operandIndex == maxOperands);\r\n\r\n var funcRef = module.addFunction(\r\n trampolineName,\r\n this.ensureFunctionType(\r\n trampolineSignature.parameterTypes,\r\n trampolineSignature.returnType,\r\n trampolineSignature.thisType\r\n ),\r\n typesToNativeTypes(trampoline.additionalLocals),\r\n module.createBlock(null, [\r\n body,\r\n module.createCall(\r\n originalName,\r\n forwardedOperands,\r\n commonReturnType.toNativeType()\r\n )\r\n ], commonReturnType.toNativeType())\r\n );\r\n trampoline.finalize(module, funcRef);\r\n return trampoline;\r\n }\r\n\r\n /** Makes sure that the argument count helper global is present and returns its name. */\r\n private ensureArgcVar(): string {\r\n var internalName = \"~argc\";\r\n if (!this.argcVar) {\r\n let module = this.module;\r\n this.argcVar = module.addGlobal(\r\n internalName,\r\n NativeType.I32,\r\n true,\r\n module.createI32(0)\r\n );\r\n }\r\n return internalName;\r\n }\r\n\r\n /** Makes sure that the argument count helper setter is present and returns its name. */\r\n private ensureArgcSet(): string {\r\n var internalName = \"~setargc\";\r\n if (!this.argcSet) {\r\n let module = this.module;\r\n this.argcSet = module.addFunction(internalName,\r\n this.ensureFunctionType([ Type.u32 ], Type.void),\r\n null,\r\n module.createSetGlobal(this.ensureArgcVar(),\r\n module.createGetLocal(0, NativeType.I32)\r\n )\r\n );\r\n module.addFunctionExport(internalName, \"_setargc\");\r\n }\r\n return internalName;\r\n }\r\n\r\n /** Creates a direct call to the specified function. */\r\n makeCallDirect(\r\n instance: Function,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var numOperands = operands ? operands.length : 0;\r\n var numArguments = numOperands;\r\n var minArguments = instance.signature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = instance.signature.parameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n ++minOperands;\r\n ++maxOperands;\r\n --numArguments;\r\n }\r\n assert(numOperands >= minOperands);\r\n\r\n var module = this.module;\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n var returnType = instance.signature.returnType;\r\n var isCallImport = instance.is(CommonFlags.MODULE_IMPORT);\r\n\r\n // fill up omitted arguments with their initializers, if constant, otherwise with zeroes.\r\n if (numOperands < maxOperands) {\r\n if (!operands) {\r\n operands = new Array(maxOperands);\r\n operands.length = 0;\r\n }\r\n let parameterTypes = instance.signature.parameterTypes;\r\n let parameterNodes = instance.prototype.declaration.signature.parameters;\r\n let allOptionalsAreConstant = true;\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n let initializer = parameterNodes[i].initializer;\r\n if (!(initializer !== null && nodeIsConstantValue(initializer.kind))) {\r\n allOptionalsAreConstant = false;\r\n break;\r\n }\r\n }\r\n if (allOptionalsAreConstant) { // inline into the call\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(\r\n this.compileExpression(\r\n parameterNodes[i].initializer,\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n )\r\n );\r\n }\r\n } else { // otherwise fill up with zeroes and call the trampoline\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(parameterTypes[i].toNativeZero(module));\r\n }\r\n if (!isCallImport) {\r\n let original = instance;\r\n instance = this.ensureTrampoline(instance);\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n instance.flow.flags = original.flow.flags;\r\n this.program.instancesLookup.set(instance.internalName, instance); // so canOverflow can find it\r\n let nativeReturnType = returnType.toNativeType();\r\n this.currentType = returnType;\r\n return module.createBlock(null, [\r\n module.createSetGlobal(this.ensureArgcVar(), module.createI32(numArguments)),\r\n module.createCall(instance.internalName, operands, nativeReturnType)\r\n ], nativeReturnType);\r\n }\r\n }\r\n }\r\n\r\n // otherwise just call through\r\n this.currentType = returnType;\r\n if (isCallImport) return module.createCallImport(instance.internalName, operands, returnType.toNativeType());\r\n var ret = module.createCall(instance.internalName, operands, returnType.toNativeType());\r\n return ret;\r\n }\r\n\r\n /** Compiles an indirect call using an index argument and a signature. */\r\n compileCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n numArguments,\r\n thisArg != 0,\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallIndirect(signature, indexArg, operands);\r\n }\r\n\r\n /** Creates an indirect call to the function at `indexArg` in the function table. */\r\n makeCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var numOperands = operands ? operands.length : 0;\r\n var numArguments = numOperands;\r\n var minArguments = signature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = signature.parameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (signature.thisType) {\r\n ++minOperands;\r\n ++maxOperands;\r\n --numArguments;\r\n }\r\n assert(numOperands >= minOperands);\r\n\r\n this.ensureFunctionType(signature.parameterTypes, signature.returnType, signature.thisType);\r\n var module = this.module;\r\n\r\n // fill up omitted arguments with zeroes\r\n if (numOperands < maxOperands) {\r\n if (!operands) {\r\n operands = new Array(maxOperands);\r\n operands.length = 0;\r\n }\r\n let parameterTypes = signature.parameterTypes;\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(parameterTypes[i].toNativeZero(module));\r\n }\r\n }\r\n\r\n var returnType = signature.returnType;\r\n this.currentType = returnType;\r\n return module.createBlock(null, [\r\n module.createSetGlobal(this.ensureArgcVar(), // might still be calling a trampoline\r\n module.createI32(numArguments)\r\n ),\r\n module.createCallIndirect(indexArg, operands, signature.toSignatureString())\r\n ], returnType.toNativeType()); // not necessarily wrapped\r\n }\r\n\r\n compileCommaExpression(expression: CommaExpression, contextualType: Type): ExpressionRef {\r\n var expressions = expression.expressions;\r\n var numExpressions = expressions.length;\r\n var exprs = new Array(numExpressions--);\r\n for (let i = 0; i < numExpressions; ++i) {\r\n exprs[i] = this.compileExpression(\r\n expressions[i],\r\n Type.void, // drop all\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n exprs[numExpressions] = this.compileExpression(\r\n expressions[numExpressions],\r\n contextualType, // except last\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n return this.module.createBlock(null, exprs, this.currentType.toNativeType());\r\n }\r\n\r\n compileElementAccessExpression(expression: ElementAccessExpression, contextualType: Type): ExpressionRef {\r\n var target = this.program.resolveElementAccess(expression, this.currentFunction); // reports\r\n if (!target) return this.module.createUnreachable();\r\n switch (target.kind) {\r\n case ElementKind.CLASS: {\r\n let isUnchecked = this.currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.expression.range, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n let thisArg = this.compileExpression(\r\n expression.expression,\r\n (target).type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n return this.compileCallDirect(indexedGet, [\r\n expression.elementExpression\r\n ], expression, thisArg);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileFunctionExpression(expression: FunctionExpression, contextualType: Type): ExpressionRef {\r\n var declaration = expression.declaration;\r\n var name = declaration.name;\r\n var simpleName = (name.text.length\r\n ? name.text\r\n : \"anonymous\") + \"|\" + this.functionTable.length.toString(10);\r\n var currentFunction = this.currentFunction;\r\n var prototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n currentFunction.internalName + INNER_DELIMITER + simpleName,\r\n declaration,\r\n null,\r\n DecoratorFlags.NONE\r\n );\r\n var flow = currentFunction.flow;\r\n var instance = this.compileFunctionUsingTypeArguments(\r\n prototype,\r\n [],\r\n flow.contextualTypeArguments,\r\n flow,\r\n declaration\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n this.currentType = instance.signature.type; // TODO: get cached type?\r\n // NOTE that, in order to make this work in every case, the function must be represented by a\r\n // value, so we add it and rely on the optimizer to figure out where it can be called directly.\r\n var index = this.ensureFunctionTableEntry(instance); // reports\r\n return index < 0\r\n ? this.module.createUnreachable()\r\n : this.module.createI32(index);\r\n }\r\n\r\n /**\r\n * Compiles an identifier in the specified context.\r\n * @param retainConstantType Retains the type of inlined constants if `true`, otherwise\r\n * precomputes them according to context.\r\n */\r\n compileIdentifierExpression(\r\n expression: IdentifierExpression,\r\n contextualType: Type,\r\n retainConstantType: bool\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // check special keywords first\r\n switch (expression.kind) {\r\n case NodeKind.NULL: {\r\n let options = this.options;\r\n if (!contextualType.classReference) {\r\n this.currentType = options.usizeType;\r\n }\r\n return options.isWasm64\r\n ? module.createI64(0)\r\n : module.createI32(0);\r\n }\r\n case NodeKind.TRUE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(1);\r\n }\r\n case NodeKind.FALSE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(0);\r\n }\r\n case NodeKind.THIS: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n this.currentType = scopedThis.type;\r\n return module.createGetLocal(scopedThis.index, scopedThis.type.toNativeType());\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let thisType = (parent).type;\r\n if (currentFunction.is(CommonFlags.CONSTRUCTOR)) {\r\n if (!flow.is(FlowFlags.ALLOCATES)) {\r\n flow.set(FlowFlags.ALLOCATES);\r\n // must be conditional because `this` could have been provided by a derived class\r\n this.currentType = thisType;\r\n return module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, expression)\r\n );\r\n }\r\n }\r\n this.currentType = thisType;\r\n return module.createGetLocal(0, thisType.toNativeType());\r\n }\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n case NodeKind.SUPER: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n let scopedThisClass = assert(scopedThis.type.classReference);\r\n let base = scopedThisClass.base;\r\n if (base) {\r\n this.currentType = base.type;\r\n return module.createGetLocal(scopedThis.index, base.type.toNativeType());\r\n }\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let base = (parent).base;\r\n if (base) {\r\n let superType = base.type;\r\n this.currentType = superType;\r\n return module.createGetLocal(0, superType.toNativeType());\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise resolve\r\n var target = this.program.resolveIdentifier( // reports\r\n expression,\r\n currentFunction,\r\n this.currentEnum\r\n );\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.LOCAL: {\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n let localType = (target).type;\r\n let localIndex = (target).index;\r\n assert(localIndex >= 0);\r\n this.currentType = localType;\r\n return this.module.createGetLocal(localIndex, localType.toNativeType());\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field\r\n return this.module.createUnreachable();\r\n }\r\n let globalType = (target).type;\r\n assert(globalType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return this.module.createGetGlobal((target).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // here: if referenced from within the same enum\r\n if (!target.is(CommonFlags.COMPILED)) {\r\n this.error(\r\n DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,\r\n expression.range\r\n );\r\n this.currentType = Type.i32;\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.module.createI32((target).constantValue);\r\n }\r\n return this.module.createGetGlobal((target).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let instance = (target).resolve(\r\n null,\r\n currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!(instance && this.compileFunction(instance))) return module.createUnreachable();\r\n let index = this.ensureFunctionTableEntry(instance);\r\n this.currentType = instance.signature.type;\r\n return this.module.createI32(index);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileInstanceOfExpression(\r\n expression: InstanceOfExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n // NOTE that this differs from TypeScript in that the rhs is a type, not an expression. at the\r\n // time of implementation, this seemed more useful because dynamic rhs expressions are not\r\n // possible in AS anyway.\r\n var expr = this.compileExpressionRetainType(expression.expression, this.options.usizeType, WrapMode.NONE);\r\n var type = this.currentType;\r\n var isType = this.program.resolveType(expression.isType);\r\n this.currentType = Type.bool;\r\n if (!isType) return module.createUnreachable();\r\n return type.is(TypeFlags.NULLABLE) && !isType.is(TypeFlags.NULLABLE)\r\n ? type.nonNullableType.isAssignableTo(isType)\r\n ? module.createBinary( // not precomputeable\r\n type.is(TypeFlags.LONG)\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n expr,\r\n type.toNativeZero(module)\r\n )\r\n : module.createI32(0)\r\n : module.createI32(type.isAssignableTo(isType, true) ? 1 : 0);\r\n }\r\n\r\n compileLiteralExpression(\r\n expression: LiteralExpression,\r\n contextualType: Type,\r\n implicitNegate: bool = false\r\n ): ExpressionRef {\r\n var module = this.module;\r\n\r\n switch (expression.literalKind) {\r\n case LiteralKind.ARRAY: {\r\n assert(!implicitNegate);\r\n let classType = contextualType.classReference;\r\n if (\r\n classType &&\r\n classType.prototype == this.program.arrayPrototype\r\n ) {\r\n return this.compileArrayLiteral(\r\n assert(classType.typeArguments)[0],\r\n (expression).elementExpressions,\r\n expression\r\n );\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n case LiteralKind.FLOAT: {\r\n let floatValue = (expression).value;\r\n if (implicitNegate) {\r\n floatValue = -floatValue;\r\n }\r\n if (contextualType == Type.f32) {\r\n return module.createF32(floatValue);\r\n }\r\n this.currentType = Type.f64;\r\n return module.createF64(floatValue);\r\n }\r\n case LiteralKind.INTEGER: {\r\n let intValue = (expression).value;\r\n if (implicitNegate) {\r\n intValue = i64_sub(\r\n i64_new(0),\r\n intValue\r\n );\r\n }\r\n switch (contextualType.kind) {\r\n\r\n // compile to contextualType if matching\r\n\r\n case TypeKind.I8: {\r\n if (i64_is_i8(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U8: {\r\n if (i64_is_u8(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.I16: {\r\n if (i64_is_i16(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U16: {\r\n if (i64_is_u16(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n if (i64_is_i32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n if (i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.BOOL: {\r\n if (i64_is_bool(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n if (!this.options.isWasm64) {\r\n if (i64_is_i32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.USIZE: {\r\n if (!this.options.isWasm64) {\r\n if (i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.F32: {\r\n if (i64_is_f32(intValue)) return module.createF32(i64_to_f32(intValue));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n if (i64_is_f64(intValue)) return module.createF64(i64_to_f64(intValue));\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n break; // compiles to best fitting type below, being dropped\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise compile to best fitting native type\r\n\r\n if (i64_is_i32(intValue)) {\r\n this.currentType = Type.i32;\r\n return module.createI32(i64_low(intValue));\r\n } else if (i64_is_u32(intValue)) {\r\n this.currentType = Type.u32;\r\n return module.createI32(i64_low(intValue));\r\n } else {\r\n this.currentType = Type.i64;\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n }\r\n case LiteralKind.STRING: {\r\n assert(!implicitNegate);\r\n return this.compileStaticString((expression).value);\r\n }\r\n // case LiteralKind.OBJECT:\r\n // case LiteralKind.REGEXP:\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n\r\n compileStaticString(stringValue: string): ExpressionRef {\r\n var module = this.module;\r\n var options = this.options;\r\n var stringSegments = this.stringSegments;\r\n\r\n var stringSegment: MemorySegment | null = stringSegments.get(stringValue);\r\n if (!stringSegment) {\r\n let stringLength = stringValue.length;\r\n let stringBuffer = new Uint8Array(4 + stringLength * 2);\r\n stringBuffer[0] = stringLength & 0xff;\r\n stringBuffer[1] = (stringLength >>> 8) & 0xff;\r\n stringBuffer[2] = (stringLength >>> 16) & 0xff;\r\n stringBuffer[3] = (stringLength >>> 24) & 0xff;\r\n for (let i = 0; i < stringLength; ++i) {\r\n stringBuffer[4 + i * 2] = stringValue.charCodeAt(i) & 0xff;\r\n stringBuffer[5 + i * 2] = (stringValue.charCodeAt(i) >>> 8) & 0xff;\r\n }\r\n stringSegment = this.addMemorySegment(stringBuffer, options.usizeType.byteSize);\r\n stringSegments.set(stringValue, stringSegment);\r\n }\r\n var stringOffset = stringSegment.offset;\r\n var stringType = this.program.typesLookup.get(\"string\");\r\n this.currentType = stringType ? stringType : options.usizeType;\r\n if (options.isWasm64) {\r\n return module.createI64(i64_low(stringOffset), i64_high(stringOffset));\r\n }\r\n assert(i64_is_i32(stringOffset));\r\n return module.createI32(i64_low(stringOffset));\r\n }\r\n\r\n compileArrayLiteral(elementType: Type, expressions: (Expression | null)[], reportNode: Node): ExpressionRef {\r\n var isStatic = true;\r\n var module = this.module;\r\n\r\n // obtain the array type\r\n var arrayPrototype = assert(this.program.arrayPrototype);\r\n if (!arrayPrototype || arrayPrototype.kind != ElementKind.CLASS_PROTOTYPE) return module.createUnreachable();\r\n var arrayInstance = (arrayPrototype).resolve([ elementType ]);\r\n if (!arrayInstance) return module.createUnreachable();\r\n var arrayType = arrayInstance.type;\r\n\r\n var elementCount = expressions.length;\r\n if (elementCount) { // non-empty static or dynamic\r\n let nativeElementType = elementType.toNativeType();\r\n let values: usize;\r\n let byteLength: usize;\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n values = changetype(new Int32Array(elementCount));\r\n byteLength = elementCount * 4;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n values = changetype(new Array(elementCount));\r\n byteLength = elementCount * 8;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n values = changetype(new Float32Array(elementCount));\r\n byteLength = elementCount * 4;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n values = changetype(new Float64Array(elementCount));\r\n byteLength = elementCount * 8;\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // precompute value expressions\r\n let exprs = new Array(elementCount);\r\n let expr: BinaryenExpressionRef;\r\n for (let i = 0; i < elementCount; ++i) {\r\n exprs[i] = expressions[i]\r\n ? this.compileExpression(expressions[i], elementType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : elementType.toNativeZero(module);\r\n if (isStatic) {\r\n expr = this.precomputeExpressionRef(exprs[i]);\r\n if (getExpressionId(expr) == ExpressionId.Const) {\r\n assert(getExpressionType(expr) == nativeElementType);\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n changetype(values)[i] = getConstValueI32(expr);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n changetype(values)[i] = i64_new(\r\n getConstValueI64Low(expr),\r\n getConstValueI64High(expr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n changetype(values)[i] = getConstValueF32(expr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n changetype(values)[i] = getConstValueF64(expr);\r\n break;\r\n }\r\n default: assert(false); // checked above\r\n }\r\n } else {\r\n // TODO: emit a warning if declared 'const'\r\n // if (isConst) {\r\n // this.warn(\r\n // DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n // reportNode.range\r\n // );\r\n // }\r\n isStatic = false;\r\n }\r\n }\r\n }\r\n\r\n let usizeTypeSize = this.options.usizeType.byteSize;\r\n if (isStatic) { // non-empty, all elements can be precomputed\r\n\r\n // Create a combined static memory segment composed of:\r\n // Array struct + ArrayBuffer struct + aligned ArrayBuffer data\r\n\r\n let arraySize = usizeTypeSize + 4; // buffer_ & length_\r\n let bufferHeaderSize = (4 + 7) & ~7; // aligned byteLength (8)\r\n let bufferTotalSize = 1 << (32 - clz(byteLength + bufferHeaderSize - 1)); // see internals\r\n let data = new Uint8Array(arraySize + bufferTotalSize);\r\n let segment = this.addMemorySegment(data);\r\n let offset = 0;\r\n\r\n // write Array struct\r\n if (usizeTypeSize == 8) {\r\n writeI64(i64_add(segment.offset, i64_new(arraySize)), data, offset); // buffer_ @ segment[arSize]\r\n offset += 8;\r\n } else {\r\n assert(i64_high(segment.offset) == 0);\r\n writeI32(i64_low(segment.offset) + arraySize, data, offset); // buffer_ @ segment[arSize]\r\n offset += 4;\r\n }\r\n writeI32(elementCount, data, offset); // length_\r\n offset += 4;\r\n assert(offset == arraySize);\r\n\r\n // write ArrayBuffer struct\r\n writeI32(byteLength, data, offset);\r\n offset += bufferHeaderSize; // incl. alignment\r\n\r\n // write ArrayBuffer data\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeI32(changetype(values)[i], data, offset); offset += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.I64: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeI64(changetype(values)[i], data, offset); offset += 8;\r\n }\r\n break;\r\n }\r\n case NativeType.F32: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeF32(changetype(values)[i], data, offset); offset += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.F64: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeF64(changetype(values)[i], data, offset); offset += 8;\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n assert(offset <= arraySize + bufferTotalSize);\r\n\r\n this.currentType = arrayType;\r\n return usizeTypeSize == 8\r\n ? module.createI64(\r\n i64_low(segment.offset),\r\n i64_high(segment.offset)\r\n )\r\n : module.createI32(\r\n i64_low(segment.offset)\r\n );\r\n\r\n } else { // non-empty, some elements can't be precomputed\r\n\r\n this.currentType = arrayType;\r\n let setter = arrayInstance.lookupOverload(OperatorKind.INDEXED_SET, true);\r\n if (!setter) {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n reportNode.range, arrayInstance.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let nativeArrayType = arrayType.toNativeType();\r\n let currentFunction = this.currentFunction;\r\n let tempLocal = currentFunction.getTempLocal(arrayType, false);\r\n let stmts = new Array(2 + elementCount);\r\n let index = 0;\r\n stmts[index++] = module.createSetLocal(tempLocal.index,\r\n this.makeCallDirect(assert(arrayInstance.constructorInstance), [\r\n module.createI32(0), // this\r\n module.createI32(elementCount)\r\n ])\r\n );\r\n for (let i = 0; i < elementCount; ++i) {\r\n stmts[index++] = this.makeCallDirect(setter, [\r\n module.createGetLocal(tempLocal.index, nativeArrayType), // this\r\n module.createI32(i),\r\n exprs[i]\r\n ]);\r\n }\r\n assert(index + 1 == stmts.length);\r\n stmts[index] = module.createGetLocal(tempLocal.index, nativeArrayType);\r\n currentFunction.freeTempLocal(tempLocal);\r\n this.currentType = arrayType;\r\n return module.createBlock(null, stmts, nativeArrayType);\r\n }\r\n\r\n } else { // empty, TBD: cache this somehow?\r\n this.currentType = arrayType;\r\n return this.makeCallDirect(assert(arrayInstance.constructorInstance), [\r\n module.createI32(0), // this\r\n module.createI32(0)\r\n ]);\r\n }\r\n }\r\n\r\n compileNewExpression(expression: NewExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var options = this.options;\r\n var currentFunction = this.currentFunction;\r\n\r\n // obtain the class being instantiated\r\n var target = this.program.resolveExpression( // reports\r\n expression.expression,\r\n currentFunction\r\n );\r\n if (!target) return module.createUnreachable();\r\n if (target.kind != ElementKind.CLASS_PROTOTYPE) {\r\n this.error(\r\n DiagnosticCode.Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature,\r\n expression.expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n var classPrototype = target;\r\n var classInstance: Class | null = null;\r\n var typeArguments = expression.typeArguments;\r\n var classReference: Class | null;\r\n if (\r\n !typeArguments &&\r\n (classReference = contextualType.classReference) !== null &&\r\n classReference.is(CommonFlags.GENERIC)\r\n ) {\r\n classInstance = classPrototype.resolve(\r\n classReference.typeArguments,\r\n currentFunction.flow.contextualTypeArguments\r\n );\r\n } else {\r\n classInstance = classPrototype.resolveUsingTypeArguments( // reports\r\n typeArguments,\r\n currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n }\r\n if (!classInstance) return module.createUnreachable();\r\n\r\n var expr: ExpressionRef;\r\n\r\n // traverse to the first matching constructor\r\n var currentClassInstance: Class | null = classInstance;\r\n var constructorInstance = classInstance.constructorInstance;\r\n while (!constructorInstance && (currentClassInstance = classInstance.base)) {\r\n constructorInstance = currentClassInstance.constructorInstance;\r\n }\r\n\r\n // if a constructor is present, call it with a zero `this`\r\n if (constructorInstance) {\r\n expr = this.compileCallDirect(constructorInstance, expression.arguments, expression,\r\n options.usizeType.toNativeZero(module)\r\n );\r\n\r\n // otherwise simply allocate a new instance and initialize its fields\r\n } else {\r\n expr = this.makeAllocate(classInstance, expression);\r\n }\r\n\r\n this.currentType = classInstance.type;\r\n return expr;\r\n }\r\n\r\n compileParenthesizedExpression(\r\n expression: ParenthesizedExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n // does not change types, just order\r\n return this.compileExpression(\r\n expression.expression,\r\n contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n }\r\n\r\n /**\r\n * Compiles a property access in the specified context.\r\n * @param retainConstantType Retains the type of inlined constants if `true`, otherwise\r\n * precomputes them according to context.\r\n */\r\n compilePropertyAccessExpression(\r\n propertyAccess: PropertyAccessExpression,\r\n contextualType: Type,\r\n retainConstantType: bool\r\n ): ExpressionRef {\r\n var program = this.program;\r\n var module = this.module;\r\n\r\n var target = program.resolvePropertyAccess(propertyAccess, this.currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL: { // static property\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field\r\n return module.createUnreachable();\r\n }\r\n let globalType = (target).type;\r\n assert(globalType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return module.createGetGlobal((target).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // enum value\r\n let parent = (target).parent;\r\n assert(parent !== null && parent.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(parent)) {\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return module.createI32((target).constantValue);\r\n }\r\n return module.createGetGlobal((target).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FIELD: { // instance field\r\n let thisExpression = assert(program.resolvedThisExpression);\r\n assert((target).memoryOffset >= 0);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n this.currentType = (target).type;\r\n return module.createLoad(\r\n (target).type.byteSize,\r\n (target).type.is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n thisExpr,\r\n (target).type.toNativeType(),\r\n (target).memoryOffset\r\n );\r\n }\r\n case ElementKind.PROPERTY: { // instance property (here: getter)\r\n let prototype = (target).getterPrototype;\r\n if (prototype) {\r\n let instance = prototype.resolve(null); // reports\r\n if (!instance) return module.createUnreachable();\r\n let signature = instance.signature;\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n 0,\r\n instance.is(CommonFlags.INSTANCE),\r\n propertyAccess\r\n )) {\r\n return module.createUnreachable();\r\n }\r\n let inline = (instance.decoratorFlags & DecoratorFlags.INLINE) != 0;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let thisExpression = assert(program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], propertyAccess, thisExpr, inline);\r\n } else {\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], propertyAccess, 0, inline);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.range, (target).simpleName, (target).parent.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n propertyAccess.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n compileTernaryExpression(expression: TernaryExpression, contextualType: Type): ExpressionRef {\r\n var ifThen = expression.ifThen;\r\n var ifElse = expression.ifElse;\r\n var currentFunction = this.currentFunction;\r\n\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(expression.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n\r\n if (\r\n !this.options.noTreeShaking ||\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT)\r\n ) {\r\n // Try to eliminate unnecesssary branches if the condition is constant\r\n let condExprPrecomp = this.precomputeExpressionRef(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n return getConstValueI32(condExprPrecomp)\r\n ? this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE)\r\n : this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(expression.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n var ifThenExpr: ExpressionRef;\r\n var ifElseExpr: ExpressionRef;\r\n var ifThenType: Type;\r\n var ifElseType: Type;\r\n\r\n // if part of a constructor, keep track of memory allocations\r\n if (currentFunction.is(CommonFlags.CONSTRUCTOR)) {\r\n let flow = currentFunction.flow;\r\n\r\n flow = flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n ifThenExpr = this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE);\r\n ifThenType = this.currentType;\r\n let ifThenAllocates = flow.is(FlowFlags.ALLOCATES);\r\n flow = flow.leaveBranchOrScope();\r\n currentFunction.flow = flow;\r\n\r\n flow = flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n ifElseExpr = this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n ifElseType = this.currentType;\r\n let ifElseAllocates = flow.is(FlowFlags.ALLOCATES);\r\n flow = flow.leaveBranchOrScope();\r\n currentFunction.flow = flow;\r\n\r\n if (ifThenAllocates && ifElseAllocates) flow.set(FlowFlags.ALLOCATES);\r\n\r\n // otherwise simplify\r\n } else {\r\n ifThenExpr = this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE);\r\n ifThenType = this.currentType;\r\n ifElseExpr = this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n ifElseType = this.currentType;\r\n }\r\n var commonType = Type.commonCompatible(ifThenType, ifElseType, false);\r\n if (!commonType) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n expression.range, ifThenType.toString(), ifElseType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n ifThenExpr = this.convertExpression(\r\n ifThenExpr,\r\n ifThenType,\r\n commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n ifThen\r\n );\r\n ifElseExpr = this.convertExpression(\r\n ifElseExpr,\r\n ifElseType,\r\n commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n ifElse\r\n );\r\n this.currentType = commonType;\r\n return this.module.createIf(condExpr, ifThenExpr, ifElseExpr);\r\n }\r\n\r\n compileUnaryPostfixExpression(expression: UnaryPostfixExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // make a getter for the expression (also obtains the type)\r\n var getValue = this.compileExpression( // reports\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n // shortcut if compiling the getter already failed\r\n if (getExpressionId(getValue) == ExpressionId.Unreachable) return getValue;\r\n var currentType = this.currentType;\r\n\r\n var op: BinaryOp;\r\n var nativeType: NativeType;\r\n var nativeOne: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS_PLUS: {\r\n\r\n // TODO: check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n switch (currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n op = BinaryOp.AddI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = module.createI32(1);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n let options = this.options;\r\n op = options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32;\r\n nativeType = options.nativeSizeType;\r\n nativeOne = currentType.toNativeOne(module);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n op = BinaryOp.AddI64;\r\n nativeType = NativeType.I64;\r\n nativeOne = module.createI64(1);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n op = BinaryOp.AddF32;\r\n nativeType = NativeType.F32;\r\n nativeOne = module.createF32(1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n op = BinaryOp.AddF64;\r\n nativeType = NativeType.F64;\r\n nativeOne = module.createF64(1);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n\r\n // TODO: check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n switch (currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n op = BinaryOp.SubI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = module.createI32(1);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n let options = this.options;\r\n op = options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32;\r\n nativeType = options.nativeSizeType;\r\n nativeOne = currentType.toNativeOne(module);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n op = BinaryOp.SubI64;\r\n nativeType = NativeType.I64;\r\n nativeOne = module.createI64(1);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n op = BinaryOp.SubF32;\r\n nativeType = NativeType.F32;\r\n nativeOne = module.createF32(1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n op = BinaryOp.SubF64;\r\n nativeType = NativeType.F64;\r\n nativeOne = module.createF64(1);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // simplify if dropped anyway\r\n if (contextualType == Type.void) {\r\n return this.compileAssignmentWithValue(expression.operand,\r\n module.createBinary(op,\r\n getValue,\r\n nativeOne\r\n ),\r\n false\r\n );\r\n }\r\n\r\n // otherwise use a temp local for the intermediate value (always possibly overflows)\r\n var tempLocal = currentFunction.getTempLocal(currentType, false);\r\n var setValue = this.compileAssignmentWithValue(expression.operand,\r\n module.createBinary(op,\r\n this.module.createGetLocal(tempLocal.index, nativeType),\r\n nativeOne\r\n ),\r\n false\r\n );\r\n this.currentType = assert(tempLocal).type;\r\n currentFunction.freeTempLocal(tempLocal);\r\n\r\n var localIndex = (tempLocal).index;\r\n return module.createBlock(null, [\r\n module.createSetLocal(localIndex, getValue),\r\n setValue,\r\n module.createGetLocal(localIndex, nativeType)\r\n ], nativeType); // result of 'x++' / 'x--' might overflow\r\n }\r\n\r\n compileUnaryPrefixExpression(\r\n expression: UnaryPrefixExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var compound = false;\r\n var expr: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PLUS);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // nop\r\n break;\r\n }\r\n case Token.MINUS: {\r\n if (expression.operand.kind == NodeKind.LITERAL && (\r\n (expression.operand).literalKind == LiteralKind.INTEGER ||\r\n (expression.operand).literalKind == LiteralKind.FLOAT\r\n )) {\r\n // implicitly negate integer and float literals. also enables proper checking of literal ranges.\r\n expr = this.compileLiteralExpression(expression.operand, contextualType, true);\r\n // compileExpression normally does this:\r\n if (this.options.sourceMap) this.addDebugLocation(expr, expression.range);\r\n break;\r\n }\r\n\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.MINUS);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.SubI32, module.createI32(0), expr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n this.currentType.toNativeZero(module),\r\n expr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, module.createI64(0), expr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createUnary(UnaryOp.NegF32, expr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createUnary(UnaryOp.NegF64, expr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.PLUS_PLUS: {\r\n compound = true;\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PREFIX_INC);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.AddI32, expr, this.module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n expr,\r\n this.currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AddI64, expr, module.createI64(1));\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.AddF32, expr, module.createF32(1));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.AddF64, expr, module.createF64(1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n compound = true;\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PREFIX_DEC);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.SubI32, expr, module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n expr,\r\n this.currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, expr, module.createI64(1));\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.SubF32, expr, module.createF32(1));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.SubF64, expr, module.createF64(1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.EXCLAMATION: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.NOT);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n // allow '!' for references even without an overload\r\n }\r\n\r\n expr = this.makeIsFalseish(expr, this.currentType);\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.TILDE: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType.is(TypeFlags.FLOAT)\r\n ? Type.i64\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_NOT);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n } else {\r\n expr = this.convertExpression(\r\n expr,\r\n this.currentType, this.currentType.intType,\r\n ConversionKind.IMPLICIT, WrapMode.NONE,\r\n expression.operand\r\n );\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.XorI32, expr, module.createI32(-1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n expr,\r\n this.currentType.toNativeNegOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.XorI64, expr, module.createI64(-1, -1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.TYPEOF: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(expression.operand, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n\r\n /** Makes sure that a 32-bit integer value is wrapped to a valid value of the specified type. */\r\n ensureSmallIntegerWrap(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n var flow = this.currentFunction.flow;\r\n switch (type.kind) {\r\n case TypeKind.I8: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = this.options.hasFeature(Feature.SIGN_EXTENSION)\r\n ? module.createUnary(UnaryOp.ExtendI8ToI32, expr)\r\n : module.createBinary(BinaryOp.ShrI32,\r\n module.createBinary(BinaryOp.ShlI32,\r\n expr,\r\n module.createI32(24)\r\n ),\r\n module.createI32(24)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.I16: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = this.options.hasFeature(Feature.SIGN_EXTENSION)\r\n ? module.createUnary(UnaryOp.ExtendI16ToI32, expr)\r\n : module.createBinary(BinaryOp.ShrI32,\r\n module.createBinary(BinaryOp.ShlI32,\r\n expr,\r\n module.createI32(16)\r\n ),\r\n module.createI32(16)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.U8: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xff)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.U16: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xffff)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.BOOL: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0x1)\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n return expr;\r\n }\r\n\r\n /** Creates a comparison whether an expression is 'false' in a broader sense. */\r\n makeIsFalseish(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n switch (type.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = this.ensureSmallIntegerWrap(expr, type);\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return module.createUnary(UnaryOp.EqzI32, expr);\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createUnary(UnaryOp.EqzI64, expr);\r\n }\r\n case TypeKind.USIZE: // TODO: strings?\r\n case TypeKind.ISIZE: {\r\n return module.createUnary(type.size == 64 ? UnaryOp.EqzI64 : UnaryOp.EqzI32, expr);\r\n }\r\n case TypeKind.F32: {\r\n return module.createBinary(BinaryOp.EqF32, expr, module.createF32(0));\r\n }\r\n case TypeKind.F64: {\r\n return module.createBinary(BinaryOp.EqF64, expr, module.createF64(0));\r\n }\r\n default: {\r\n assert(false);\r\n return module.createI32(1);\r\n }\r\n }\r\n }\r\n\r\n /** Creates a comparison whether an expression is 'true' in a broader sense. */\r\n makeIsTrueish(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n switch (type.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = this.ensureSmallIntegerWrap(expr, type);\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return expr;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createBinary(BinaryOp.NeI64, expr, module.createI64(0));\r\n }\r\n case TypeKind.USIZE: // TODO: strings?\r\n case TypeKind.ISIZE: {\r\n return type.size == 64\r\n ? module.createBinary(BinaryOp.NeI64, expr, module.createI64(0))\r\n : expr;\r\n }\r\n case TypeKind.F32: {\r\n return module.createBinary(BinaryOp.NeF32, expr, module.createF32(0));\r\n }\r\n case TypeKind.F64: {\r\n return module.createBinary(BinaryOp.NeF64, expr, module.createF64(0));\r\n }\r\n default: {\r\n assert(false);\r\n return module.createI32(0);\r\n }\r\n }\r\n }\r\n\r\n /** Makes an allocation expression for an instance of the specified class. */\r\n makeAllocate(classInstance: Class, reportNode: Node): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var nativeSizeType = this.options.nativeSizeType;\r\n\r\n // allocate the necessary memory and tee the pointer to a temp. local for reuse\r\n var tempLocal = currentFunction.getTempLocal(classInstance.type, false);\r\n var initializers = new Array();\r\n initializers.push(\r\n module.createSetLocal(tempLocal.index,\r\n compileBuiltinAllocate(this, classInstance, reportNode)\r\n )\r\n );\r\n\r\n // apply field initializers\r\n if (classInstance.members) {\r\n for (let member of classInstance.members.values()) {\r\n if (member.kind == ElementKind.FIELD) {\r\n let field = member;\r\n let fieldType = field.type;\r\n let nativeFieldType = fieldType.toNativeType();\r\n let fieldDeclaration = field.prototype.declaration;\r\n assert(!field.isAny(CommonFlags.CONST));\r\n if (fieldDeclaration.initializer) { // use initializer\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n this.compileExpression( // reports\r\n fieldDeclaration.initializer,\r\n fieldType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n ),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n } else { // initialize with zero\r\n // TODO: might be unnecessary if the ctor initializes the field\r\n let parameterIndex = (field.prototype.declaration).parameterIndex;\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n parameterIndex >= 0 // initialized via parameter\r\n ? module.createGetLocal(1 + parameterIndex, nativeFieldType)\r\n : fieldType.toNativeZero(module),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n }\r\n }\r\n }\r\n }\r\n\r\n // return `this`\r\n initializers.push(\r\n module.createGetLocal(tempLocal.index, nativeSizeType)\r\n );\r\n\r\n currentFunction.freeTempLocal(tempLocal);\r\n this.currentType = classInstance.type;\r\n return module.createBlock(null, initializers, nativeSizeType);\r\n }\r\n\r\n /** Makes a conditional allocation expression inside of the constructor of the specified class. */\r\n makeConditionalAllocate(classInstance: Class, reportNode: Node): ExpressionRef {\r\n // requires that `this` is the first local\r\n var module = this.module;\r\n var nativeSizeType = this.options.nativeSizeType;\r\n this.currentType = classInstance.type;\r\n return module.createIf(\r\n nativeSizeType == NativeType.I64\r\n ? module.createBinary(\r\n BinaryOp.NeI64,\r\n module.createGetLocal(0, NativeType.I64),\r\n module.createI64(0)\r\n )\r\n : module.createGetLocal(0, NativeType.I32),\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createTeeLocal(0,\r\n this.makeAllocate(classInstance, reportNode)\r\n )\r\n );\r\n }\r\n\r\n /** Adds the debug location of the specified expression at the specified range to the source map. */\r\n addDebugLocation(expr: ExpressionRef, range: Range): void {\r\n var currentFunction = this.currentFunction;\r\n var source = range.source;\r\n if (source.debugInfoIndex < 0) source.debugInfoIndex = this.module.addDebugInfoFile(source.normalizedPath);\r\n range.debugInfoRef = expr;\r\n currentFunction.debugLocations.push(range);\r\n }\r\n}\r\n\r\n// helpers\r\n\r\nfunction mangleExportName(element: Element, simpleName: string = element.simpleName): string {\r\n switch (element.kind) {\r\n case ElementKind.FUNCTION: {\r\n let parent = (element).parent || (element).prototype.parent;\r\n return parent\r\n ? mangleExportName(parent)\r\n + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER)\r\n + simpleName\r\n : simpleName;\r\n }\r\n case ElementKind.FIELD: {\r\n let parent = assert((element).parent);\r\n return mangleExportName(parent)\r\n + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER)\r\n + simpleName;\r\n }\r\n case ElementKind.ENUMVALUE: {\r\n let parent = assert((element).parent);\r\n return mangleExportName(parent)\r\n + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER)\r\n + simpleName;\r\n }\r\n case ElementKind.CLASS: {\r\n let parent = (element).prototype.parent;\r\n return parent\r\n ? mangleExportName(parent)\r\n + STATIC_DELIMITER\r\n + simpleName\r\n : simpleName;\r\n }\r\n default: {\r\n let parent = element.parent;\r\n return parent\r\n ? mangleExportName(parent)\r\n + STATIC_DELIMITER\r\n + simpleName\r\n : simpleName;\r\n }\r\n }\r\n}\r\n","/**\r\n * A TypeScript parser for the AssemblyScript subset.\r\n * @module parser\r\n *//***/\r\n\r\nimport {\r\n Program,\r\n CommonFlags,\r\n LIBRARY_PREFIX,\r\n PATH_DELIMITER\r\n} from \"./program\";\r\n\r\nimport {\r\n Tokenizer,\r\n Token,\r\n Range,\r\n CommentHandler,\r\n IdentifierHandling\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n normalizePath\r\n} from \"./util\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Source,\r\n SourceKind,\r\n CommonTypeNode,\r\n TypeNode,\r\n SignatureNode,\r\n\r\n Expression,\r\n AssertionKind,\r\n CallExpression,\r\n IdentifierExpression,\r\n StringLiteralExpression,\r\n\r\n Statement,\r\n BlockStatement,\r\n BreakStatement,\r\n ClassDeclaration,\r\n ContinueStatement,\r\n DeclarationStatement,\r\n DecoratorNode,\r\n DoStatement,\r\n EnumDeclaration,\r\n EnumValueDeclaration,\r\n ExportImportStatement,\r\n ExportMember,\r\n ExportStatement,\r\n ExpressionStatement,\r\n ForStatement,\r\n FunctionExpression,\r\n FunctionDeclaration,\r\n IfStatement,\r\n ImportDeclaration,\r\n ImportStatement,\r\n NamespaceDeclaration,\r\n ParameterNode,\r\n ParameterKind,\r\n ReturnStatement,\r\n SwitchCase,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n TypeDeclaration,\r\n TypeParameterNode,\r\n VariableStatement,\r\n VariableDeclaration,\r\n VoidStatement,\r\n WhileStatement,\r\n\r\n mangleInternalPath\r\n} from \"./ast\";\r\n\r\nconst builtinsFile = LIBRARY_PREFIX + \"builtins.ts\";\r\n\r\n/** Parser interface. */\r\nexport class Parser extends DiagnosticEmitter {\r\n\r\n /** Program being created. */\r\n program: Program;\r\n /** Source file names to be requested next. */\r\n backlog: string[] = new Array();\r\n /** Source file names already seen, that is processed or backlogged. */\r\n seenlog: Set = new Set();\r\n /** Source file names already completely processed. */\r\n donelog: Set = new Set();\r\n /** Optional handler to intercept comments while tokenizing. */\r\n onComment: CommentHandler | null = null;\r\n\r\n /** Constructs a new parser. */\r\n constructor() {\r\n super();\r\n this.program = new Program(this.diagnostics);\r\n }\r\n\r\n /** Parses a file and adds its definitions to the program. */\r\n parseFile(\r\n text: string,\r\n path: string,\r\n isEntry: bool\r\n ): void {\r\n var normalizedPath = normalizePath(path);\r\n var internalPath = mangleInternalPath(normalizedPath);\r\n\r\n // check if already processed\r\n if (this.donelog.has(internalPath)) return;\r\n this.donelog.add(internalPath); // do not parse again\r\n this.seenlog.add(internalPath); // do not request again\r\n\r\n // create the source element\r\n var source = new Source(\r\n normalizedPath,\r\n text,\r\n isEntry\r\n ? SourceKind.ENTRY\r\n : path.startsWith(LIBRARY_PREFIX) && path.indexOf(PATH_DELIMITER, LIBRARY_PREFIX.length) < 0\r\n ? SourceKind.LIBRARY\r\n : SourceKind.DEFAULT\r\n );\r\n var program = this.program;\r\n program.sources.push(source);\r\n\r\n // mark the special builtins library file\r\n if (source.normalizedPath == builtinsFile) {\r\n source.set(CommonFlags.BUILTIN);\r\n }\r\n\r\n // tokenize and parse\r\n var tn = new Tokenizer(source, program.diagnostics);\r\n tn.onComment = this.onComment;\r\n source.tokenizer = tn;\r\n var statements = source.statements;\r\n while (!tn.skip(Token.ENDOFFILE)) {\r\n let statement = this.parseTopLevelStatement(tn);\r\n if (statement) {\r\n statement.parent = source;\r\n statements.push(statement);\r\n }\r\n }\r\n tn.finish();\r\n }\r\n\r\n /** Parses a top-level statement. */\r\n parseTopLevelStatement(\r\n tn: Tokenizer,\r\n namespace: Node | null = null\r\n ): Statement | null {\r\n var flags = CommonFlags.NONE;\r\n var startPos: i32 = -1;\r\n\r\n // check decorators\r\n var decorators: DecoratorNode[] | null = null;\r\n while (tn.skip(Token.AT)) {\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n let decorator = this.parseDecorator(tn);\r\n if (!decorator) {\r\n this.skipStatement(tn);\r\n continue;\r\n }\r\n if (!decorators) decorators = [];\r\n decorators.push(decorator);\r\n }\r\n\r\n // mark builtins\r\n flags |= (tn.source.flags & CommonFlags.BUILTIN);\r\n\r\n // check modifiers\r\n var exportStart: i32 = 0;\r\n var exportEnd: i32 = 0;\r\n if (tn.skip(Token.EXPORT)) {\r\n if (tn.skip(Token.DEFAULT)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n flags |= CommonFlags.EXPORT;\r\n exportStart = tn.tokenPos;\r\n exportEnd = tn.pos;\r\n }\r\n\r\n var declareStart: i32 = 0;\r\n var declareEnd: i32 = 0;\r\n var contextIsAmbient = namespace != null && namespace.is(CommonFlags.AMBIENT);\r\n if (tn.skip(Token.DECLARE)) {\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n if (contextIsAmbient) {\r\n this.error(\r\n DiagnosticCode.A_declare_modifier_cannot_be_used_in_an_already_ambient_context,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n flags |= CommonFlags.DECLARE | CommonFlags.AMBIENT;\r\n } else if (contextIsAmbient) {\r\n flags |= CommonFlags.AMBIENT;\r\n }\r\n\r\n // parse the statement\r\n var statement: Statement | null = null;\r\n\r\n // handle declarations\r\n var first = tn.peek();\r\n if (startPos < 0) startPos = tn.nextTokenPos;\r\n switch (first) {\r\n case Token.CONST: {\r\n tn.next();\r\n flags |= CommonFlags.CONST;\r\n if (tn.skip(Token.ENUM)) {\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n break;\r\n } else {\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n }\r\n break;\r\n }\r\n case Token.LET: flags |= CommonFlags.LET;\r\n case Token.VAR: {\r\n tn.next();\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ENUM: {\r\n tn.next();\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.FUNCTION: {\r\n tn.next();\r\n statement = this.parseFunction(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ABSTRACT: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (!tn.skip(Token.CLASS)) {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n break;\r\n } else {\r\n tn.discard(state);\r\n }\r\n flags |= CommonFlags.ABSTRACT;\r\n // fall through\r\n }\r\n case Token.CLASS:\r\n case Token.INTERFACE: {\r\n tn.next();\r\n statement = this.parseClassOrInterface(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.NAMESPACE: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseNamespace(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n case Token.IMPORT: {\r\n tn.next();\r\n flags |= CommonFlags.IMPORT;\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExportImport(tn, startPos);\r\n } else {\r\n statement = this.parseImport(tn);\r\n }\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseTypeDeclaration(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n default: {\r\n\r\n // handle plain exports\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExport(tn, flags, startPos);\r\n\r\n // handle non-declaration statements\r\n } else {\r\n if (exportEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(exportStart, exportEnd), \"export\"\r\n ); // recoverable\r\n }\r\n if (declareEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(declareStart, declareEnd), \"declare\"\r\n ); // recoverable\r\n }\r\n if (!namespace) {\r\n statement = this.parseStatement(tn, true);\r\n } // TODO: else?\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // check for decorators that weren't consumed\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n this.error(\r\n DiagnosticCode.Decorators_are_not_valid_here,\r\n decorators[i].range\r\n );\r\n }\r\n }\r\n return statement;\r\n }\r\n\r\n /** Obtains the next file to parse. */\r\n nextFile(): string | null {\r\n var backlog = this.backlog;\r\n return backlog.length ? backlog.shift() : null;\r\n }\r\n\r\n /** Finishes parsing and returns the program. */\r\n finish(): Program {\r\n if (this.backlog.length) throw new Error(\"backlog is not empty\");\r\n this.backlog = [];\r\n this.seenlog.clear();\r\n this.donelog.clear();\r\n return this.program;\r\n }\r\n\r\n /** Parses a type. */\r\n parseType(\r\n tn: Tokenizer,\r\n acceptParenthesized: bool = true,\r\n suppressErrors: bool = false\r\n ): CommonTypeNode | null {\r\n\r\n // NOTE: this parses our limited subset\r\n var token = tn.next();\r\n var startPos = tn.tokenPos;\r\n\r\n var type: CommonTypeNode;\r\n\r\n // '(' ...\r\n if (token == Token.OPENPAREN) {\r\n\r\n // '(' FunctionSignature ')' '|' 'null'?\r\n let isNullableSignature = tn.skip(Token.OPENPAREN);\r\n // FunctionSignature?\r\n let signature = this.tryParseSignature(tn);\r\n if (signature) {\r\n if (isNullableSignature) {\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.BAR)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"|\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.NULL)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"null\"\r\n );\r\n }\r\n signature.isNullable = true;\r\n }\r\n return signature;\r\n } else if (isNullableSignature || this.tryParseSignatureIsSignature) {\r\n this.error(\r\n DiagnosticCode.Unexpected_token,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n // Type (',' Type)* ')'\r\n if (acceptParenthesized) {\r\n let innerType = this.parseType(tn, false, suppressErrors);\r\n if (!innerType) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"}\"\r\n );\r\n }\r\n return null;\r\n }\r\n type = innerType;\r\n type.range.start = startPos;\r\n type.range.end = tn.pos;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Unexpected_token,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n // 'void'\r\n } else if (token == Token.VOID) {\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"void\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // 'this'\r\n } else if (token == Token.THIS) {\r\n type = Node.createType(\r\n Node.createThisExpression(tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // 'true'\r\n } else if (token == Token.TRUE || token == Token.FALSE) {\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"bool\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // StringLiteral\r\n } else if (token == Token.STRINGLITERAL) {\r\n tn.readString();\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"string\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // Identifier\r\n } else if (token == Token.IDENTIFIER) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let parameters = new Array();\r\n let nullable = false;\r\n\r\n // Name\r\n if (tn.skip(Token.LESSTHAN)) {\r\n do {\r\n let parameter = this.parseType(tn, true, suppressErrors);\r\n if (!parameter) return null;\r\n parameters.push(parameter);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \">\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n // ... | null\r\n if (tn.skip(Token.BAR)) {\r\n if (tn.skip(Token.NULL)) {\r\n nullable = true;\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"null\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n type = Node.createType(identifier, parameters, nullable, tn.range(startPos, tn.pos));\r\n\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n // ... [][]\r\n while (tn.skip(Token.OPENBRACKET)) {\r\n let bracketStart = tn.tokenPos;\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n }\r\n return null;\r\n }\r\n let bracketRange = tn.range(bracketStart, tn.pos);\r\n\r\n // ...[] | null\r\n let nullable = false;\r\n if (tn.skip(Token.BAR)) {\r\n if (tn.skip(Token.NULL)) {\r\n nullable = true;\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"null\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"Array\", bracketRange),\r\n [ type ],\r\n nullable,\r\n tn.range(startPos, tn.pos)\r\n );\r\n if (nullable) break;\r\n }\r\n\r\n return type;\r\n }\r\n\r\n // Indicates whether tryParseSignature determined that it is handling a Signature\r\n private tryParseSignatureIsSignature: bool = false;\r\n\r\n /** Parses a function signature, as used in type declarations. */\r\n tryParseSignature(\r\n tn: Tokenizer\r\n ): SignatureNode | null {\r\n\r\n // at '(': ('...'? Identifier '?'? ':' Type (',' '...'? Identifier '?'? ':' Type)* )? ')' '=>' Type\r\n\r\n var state = tn.mark();\r\n var startPos = tn.tokenPos;\r\n var parameters: ParameterNode[] | null = null;\r\n var thisType: TypeNode | null = null;\r\n var isSignature: bool = false;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n parameters = [];\r\n\r\n } else {\r\n isSignature = false; // not yet known\r\n do {\r\n let kind = ParameterKind.DEFAULT;\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n kind = ParameterKind.REST;\r\n }\r\n if (tn.skip(Token.THIS)) {\r\n if (tn.skip(Token.COLON)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n let t = this.parseType(tn, false);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n this.tryParseSignatureIsSignature = true;\r\n return null;\r\n }\r\n thisType = t;\r\n } else {\r\n tn.reset(state);\r\n this.tryParseSignatureIsSignature = false;\r\n return null;\r\n }\r\n } else if (tn.skipIdentifier()) {\r\n let name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range(tn.tokenPos, tn.pos));\r\n if (tn.skip(Token.QUESTION)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n if (kind == ParameterKind.REST) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n tn.range()\r\n ); // recoverable\r\n } else {\r\n kind = ParameterKind.OPTIONAL;\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n let type = this.parseType(tn); // not suppressing errors because known\r\n if (!type) {\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n let param = new ParameterNode();\r\n param.parameterKind = kind;\r\n param.name = name;\r\n param.type = type;\r\n if (!parameters) parameters = [ param ];\r\n else parameters.push(param);\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n }\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n }\r\n\r\n var returnType: CommonTypeNode | null;\r\n if (tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n returnType = this.parseType(tn);\r\n if (!returnType) {\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=>\"\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n this.tryParseSignatureIsSignature = true;\r\n return Node.createSignature(\r\n parameters || [],\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n\r\n // statements\r\n\r\n parseDecorator(\r\n tn: Tokenizer\r\n ): DecoratorNode | null {\r\n\r\n // at '@': Identifier ('.' Identifier)* '(' Arguments\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skipIdentifier()) {\r\n let name = tn.readIdentifier();\r\n let expression: Expression = Node.createIdentifierExpression(name, tn.range(startPos, tn.pos));\r\n while (tn.skip(Token.DOT)) {\r\n if (tn.skipIdentifier()) {\r\n name = tn.readIdentifier();\r\n expression = Node.createPropertyAccessExpression(\r\n expression,\r\n Node.createIdentifierExpression(name, tn.range()),\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n let args: Expression[] | null;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n args = this.parseArguments(tn);\r\n if (args) {\r\n return Node.createDecorator(expression, args, tn.range(startPos, tn.pos));\r\n }\r\n } else {\r\n return Node.createDecorator(expression, null, tn.range(startPos, tn.pos));\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseVariable(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): VariableStatement | null {\r\n\r\n // at ('const' | 'let' | 'var'): VariableDeclaration (',' VariableDeclaration)* ';'?\r\n\r\n var members = new Array();\r\n do {\r\n let member = this.parseVariableDeclaration(tn, flags, decorators);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (tn.skip(Token.COMMA));\r\n\r\n var ret = Node.createVariableStatement(members, decorators, flags, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseVariableDeclaration(\r\n tn: Tokenizer,\r\n parentFlags: CommonFlags,\r\n parentDecorators: DecoratorNode[] | null\r\n ): VariableDeclaration | null {\r\n\r\n // before: Identifier (':' Type)? ('=' Expression)?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var flags = parentFlags;\r\n\r\n var type: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n }\r\n\r\n var initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n initializer = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!initializer) return null;\r\n } else {\r\n if (flags & CommonFlags.CONST) {\r\n if (!(flags & CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode._const_declarations_must_be_initialized,\r\n identifier.range\r\n ); // recoverable\r\n }\r\n } else if (!type) { // neither type nor initializer\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range(tn.pos)\r\n ); // recoverable\r\n }\r\n }\r\n return Node.createVariableDeclaration(\r\n identifier,\r\n type,\r\n initializer,\r\n parentDecorators,\r\n flags,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n }\r\n\r\n parseEnum(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): EnumDeclaration | null {\r\n\r\n // at 'enum': Identifier '{' (EnumValueDeclaration (',' EnumValueDeclaration )*)? '}' ';'?\r\n\r\n if (tn.next() != Token.IDENTIFIER) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.next() != Token.OPENBRACE) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n var members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseEnumValue(tn, CommonFlags.NONE);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n var ret = Node.createEnumDeclaration(\r\n identifier,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseEnumValue(\r\n tn: Tokenizer,\r\n parentFlags: CommonFlags\r\n ): EnumValueDeclaration | null {\r\n\r\n // before: Identifier ('=' Expression)?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var value: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n value = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!value) return null;\r\n }\r\n return Node.createEnumValueDeclaration(\r\n identifier,\r\n value,\r\n parentFlags,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n }\r\n\r\n parseReturn(\r\n tn: Tokenizer\r\n ): ReturnStatement | null {\r\n\r\n // at 'return': Expression | (';' | '}' | ...'\\n')\r\n\r\n var expr: Expression | null = null;\r\n if (\r\n tn.peek(true) != Token.SEMICOLON &&\r\n tn.nextToken != Token.CLOSEBRACE &&\r\n !tn.nextTokenOnNewLine\r\n ) {\r\n if (!(expr = this.parseExpression(tn))) return null;\r\n }\r\n\r\n var ret = Node.createReturnStatement(expr, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseTypeParameters(\r\n tn: Tokenizer\r\n ): TypeParameterNode[] | null {\r\n\r\n // at '<': TypeParameter (',' TypeParameter)* '>'\r\n\r\n var typeParameters = new Array();\r\n while (!tn.skip(Token.GREATERTHAN)) {\r\n let typeParameter = this.parseTypeParameter(tn);\r\n if (!typeParameter) return null;\r\n typeParameters.push(typeParameter);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.GREATERTHAN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n if (typeParameters.length === 0) {\r\n this.error(\r\n DiagnosticCode.Type_parameter_list_cannot_be_empty,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n return typeParameters;\r\n }\r\n\r\n parseTypeParameter(\r\n tn: Tokenizer\r\n ): TypeParameterNode | null {\r\n\r\n // before: Identifier ('extends' Type)?\r\n\r\n if (tn.next() == Token.IDENTIFIER) {\r\n let identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n let extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\r\n }\r\n return Node.createTypeParameter(\r\n identifier,\r\n extendsType,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n private parseParametersThis: TypeNode | null = null;\r\n\r\n parseParameters(\r\n tn: Tokenizer,\r\n isConstructor: bool = false\r\n ): ParameterNode[] | null {\r\n\r\n // at '(': (Parameter (',' Parameter)*)? ')'\r\n\r\n var parameters = new Array();\r\n var seenRest: ParameterNode | null = null;\r\n var seenOptional = false;\r\n var reportedRest = false;\r\n var thisType: CommonTypeNode | null = null;\r\n\r\n // check if there is a leading `this` parameter\r\n this.parseParametersThis = null;\r\n if (tn.skip(Token.THIS)) {\r\n if (tn.skip(Token.COLON)) {\r\n thisType = this.parseType(tn); // reports\r\n if (!thisType) return null;\r\n if (thisType.kind == NodeKind.TYPE) {\r\n this.parseParametersThis = thisType;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n thisType.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n return parameters;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n while (!tn.skip(Token.CLOSEPAREN)) {\r\n let param = this.parseParameter(tn, isConstructor); // reports\r\n if (!param) return null;\r\n if (seenRest && !reportedRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,\r\n seenRest.name.range\r\n );\r\n reportedRest = true;\r\n }\r\n switch (param.parameterKind) {\r\n default: {\r\n if (seenOptional) {\r\n this.error(\r\n DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,\r\n param.name.range\r\n );\r\n }\r\n break;\r\n }\r\n case ParameterKind.OPTIONAL: {\r\n seenOptional = true;\r\n break;\r\n }\r\n case ParameterKind.REST: {\r\n seenRest = param;\r\n break;\r\n }\r\n }\r\n parameters.push(param);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return parameters;\r\n }\r\n\r\n parseParameter(\r\n tn: Tokenizer,\r\n isConstructor: bool = false\r\n ): ParameterNode | null {\r\n\r\n // before: ('public' | 'private' | 'protected' | '...')? Identifier '?'? (':' Type)? ('=' Expression)?\r\n\r\n var isRest = false;\r\n var isOptional = false;\r\n var startRange: Range | null = null;\r\n var accessFlags: CommonFlags = CommonFlags.NONE;\r\n if (isConstructor) {\r\n if (tn.skip(Token.PUBLIC)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PROTECTED;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PRIVATE;\r\n }\r\n if (tn.peek() == Token.READONLY) {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek() != Token.COLON) { // modifier\r\n tn.discard(state);\r\n if (!startRange) startRange = tn.range();\r\n accessFlags |= CommonFlags.READONLY;\r\n } else { // identifier\r\n tn.reset(state);\r\n }\r\n }\r\n }\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n if (accessFlags) {\r\n this.error(\r\n DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,\r\n tn.range()\r\n );\r\n } else {\r\n startRange = tn.range();\r\n }\r\n isRest = true;\r\n }\r\n if (tn.skipIdentifier()) {\r\n if (!isRest) startRange = tn.range();\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let type: CommonTypeNode | null = null;\r\n if (isOptional = tn.skip(Token.QUESTION)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n identifier.range\r\n );\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n } else {\r\n type = Node.createOmittedType(tn.range(tn.pos));\r\n }\r\n let initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,\r\n identifier.range\r\n );\r\n }\r\n if (isOptional) {\r\n this.error(\r\n DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,\r\n identifier.range\r\n );\r\n } else {\r\n isOptional = true;\r\n }\r\n initializer = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!initializer) return null;\r\n }\r\n let param = Node.createParameter(\r\n identifier,\r\n type,\r\n initializer,\r\n isRest\r\n ? ParameterKind.REST\r\n : isOptional\r\n ? ParameterKind.OPTIONAL\r\n : ParameterKind.DEFAULT,\r\n Range.join(startRange, tn.range())\r\n );\r\n param.flags |= accessFlags;\r\n return param;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseFunction(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): FunctionDeclaration | null {\r\n\r\n // at 'function':\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // '(' Parameters (':' Type)?\r\n // '{' Statement* '}'\r\n // ';'?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range(tn.pos)\r\n );\r\n return null;\r\n }\r\n\r\n var name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var signatureStart: i32 = -1;\r\n\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n signatureStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n if (signatureStart < 0) {\r\n signatureStart = tn.tokenPos;\r\n }\r\n\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n var thisType = this.parseParametersThis;\r\n\r\n var isSetter = (flags & CommonFlags.SET) != 0;\r\n if (isSetter) {\r\n if (parameters.length != 1) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,\r\n name.range\r\n ); // recoverable\r\n }\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,\r\n name.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n if (flags & CommonFlags.GET) {\r\n if (parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n name.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn, true, isSetter);\r\n if (!returnType) return null;\r\n }\r\n\r\n if (!returnType) {\r\n returnType = Node.createOmittedType(\r\n tn.range(tn.pos)\r\n );\r\n if (!isSetter) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n var body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body) return null;\r\n } else if (!(flags & CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n tn.range(tn.pos)\r\n );\r\n }\r\n\r\n var ret = Node.createFunctionDeclaration(\r\n name,\r\n typeParameters,\r\n signature,\r\n body,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseFunctionExpression(tn: Tokenizer): FunctionExpression | null {\r\n var startPos = tn.tokenPos;\r\n var name: IdentifierExpression;\r\n var isArrow = false;\r\n\r\n // either at 'function':\r\n // Identifier?\r\n // '(' Parameters (':' Type)?\r\n // Statement\r\n\r\n if (tn.token == Token.FUNCTION) {\r\n if (tn.skipIdentifier()) {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else { // empty name\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.pos));\r\n }\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n // or at '(' of arrow function:\r\n // Parameters (':' Type)?\r\n // Statement\r\n\r\n } else {\r\n isArrow = true;\r\n assert(tn.token == Token.OPENPAREN);\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.tokenPos));\r\n }\r\n\r\n // TODO: type parameters? doesn't seem worth it.\r\n\r\n var signatureStart = tn.pos;\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n return this.parseFunctionExpressionCommon(tn, name, parameters, isArrow, startPos, signatureStart);\r\n }\r\n\r\n private parseFunctionExpressionCommon(\r\n tn: Tokenizer,\r\n name: IdentifierExpression,\r\n parameters: ParameterNode[],\r\n isArrow: bool,\r\n startPos: i32 = -1,\r\n signatureStart: i32 = -1\r\n ): FunctionExpression | null {\r\n if (startPos < 0) startPos = name.range.start;\r\n if (signatureStart < 0) signatureStart = startPos;\r\n\r\n var returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n\r\n if (isArrow) {\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"=>\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n var signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n null, // TODO?\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n var body: Statement | null;\r\n if (isArrow) {\r\n body = this.parseStatement(tn, false);\r\n } else {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"{\"\r\n );\r\n return null;\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n }\r\n if (!body) return null;\r\n\r\n var declaration = Node.createFunctionDeclaration(\r\n name,\r\n null,\r\n signature,\r\n body,\r\n null,\r\n isArrow ? CommonFlags.ARROW : CommonFlags.NONE,\r\n tn.range(startPos, tn.pos)\r\n );\r\n return Node.createFunctionExpression(declaration);\r\n }\r\n\r\n parseClassOrInterface(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): ClassDeclaration | null {\r\n\r\n // at ('class' | 'interface'):\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // ('extends' Type)?\r\n // ('implements' Type (',' Type)*)?\r\n // '{' ClassMember* '}'\r\n\r\n var isInterface = tn.token == Token.INTERFACE;\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n var identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n\r\n var typeParameters: TypeParameterNode[] | null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n } else {\r\n typeParameters = [];\r\n }\r\n\r\n var extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\r\n }\r\n\r\n var implementsTypes: TypeNode[] | null = null;\r\n if (tn.skip(Token.IMPLEMENTS)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode.Interface_declaration_cannot_have_implements_clause,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n do {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n if (!isInterface) {\r\n if (!implementsTypes) implementsTypes = [];\r\n implementsTypes.push(type);\r\n }\r\n } while (tn.skip(Token.COMMA));\r\n }\r\n\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n\r\n var members = new Array();\r\n var declaration: ClassDeclaration;\r\n if (isInterface) {\r\n assert(!implementsTypes);\r\n declaration = Node.createInterfaceDeclaration(\r\n identifier,\r\n typeParameters,\r\n extendsType,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n declaration = Node.createClassDeclaration(\r\n identifier,\r\n typeParameters,\r\n extendsType,\r\n implementsTypes,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseClassMember(tn, declaration);\r\n if (!member) return null;\r\n member.parent = declaration;\r\n members.push(member);\r\n } while (!tn.skip(Token.CLOSEBRACE));\r\n }\r\n return declaration;\r\n }\r\n\r\n parseClassMember(\r\n tn: Tokenizer,\r\n parent: ClassDeclaration\r\n ): DeclarationStatement | null {\r\n\r\n // before:\r\n // ('public' | 'private' | 'protected')?\r\n // ('static' | 'abstract')?\r\n // 'readonly'?\r\n // ('get' | 'set')?\r\n // Identifier ...\r\n\r\n var startPos = tn.pos;\r\n\r\n var decorators = new Array();\r\n while (tn.skip(Token.AT)) {\r\n let decorator = this.parseDecorator(tn);\r\n if (!decorator) break;\r\n decorators.push(decorator);\r\n }\r\n\r\n var flags = parent.flags & CommonFlags.AMBIENT; // inherit\r\n\r\n if (tn.skip(Token.PUBLIC)) {\r\n flags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n flags |= CommonFlags.PRIVATE;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n flags |= CommonFlags.PROTECTED;\r\n }\r\n\r\n var staticStart: i32 = 0;\r\n var staticEnd: i32 = 0;\r\n var abstractStart: i32 = 0;\r\n var abstractEnd: i32 = 0;\r\n if (tn.skip(Token.STATIC)) {\r\n flags |= CommonFlags.STATIC;\r\n staticStart = tn.tokenPos;\r\n staticEnd = tn.pos;\r\n } else {\r\n if (tn.skip(Token.ABSTRACT)) {\r\n flags |= (CommonFlags.ABSTRACT | CommonFlags.INSTANCE);\r\n abstractStart = tn.tokenPos;\r\n abstractEnd = tn.pos;\r\n } else {\r\n flags |= CommonFlags.INSTANCE;\r\n }\r\n if (parent.flags & CommonFlags.GENERIC) {\r\n flags |= CommonFlags.GENERIC_CONTEXT;\r\n }\r\n }\r\n\r\n var readonlyStart: i32 = 0;\r\n var readonlyEnd: i32 = 0;\r\n if (tn.skip(Token.READONLY)) {\r\n flags |= CommonFlags.READONLY;\r\n readonlyStart = tn.tokenPos;\r\n readonlyEnd = tn.pos;\r\n }\r\n\r\n // check if accessor: ('get' | 'set') ^\\n Identifier\r\n var state = tn.mark();\r\n var isConstructor = false;\r\n var isGetter = false;\r\n var getStart: i32 = 0;\r\n var getEnd: i32 = 0;\r\n var isSetter = false;\r\n var setStart: i32 = 0;\r\n var setEnd: i32 = 0;\r\n if (tn.skip(Token.GET)) {\r\n if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n flags |= CommonFlags.GET;\r\n isGetter = true;\r\n setStart = tn.tokenPos;\r\n setEnd = tn.pos;\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n } else {\r\n tn.reset(state);\r\n }\r\n } else if (tn.skip(Token.SET)) {\r\n if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n flags |= CommonFlags.SET | CommonFlags.SET;\r\n isSetter = true;\r\n setStart = tn.tokenPos;\r\n setEnd = tn.pos;\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n } else {\r\n tn.reset(state);\r\n }\r\n } else if (tn.skip(Token.CONSTRUCTOR)) {\r\n flags |= CommonFlags.CONSTRUCTOR;\r\n isConstructor = true;\r\n if (flags & CommonFlags.STATIC) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(staticStart, staticEnd), \"static\"\r\n ); // recoverable\r\n }\r\n if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(abstractStart, abstractEnd), \"abstract\"\r\n ); // recoverable\r\n }\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n }\r\n\r\n if (!isConstructor && !tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n var name = isConstructor\r\n ? Node.createConstructorExpression(tn.range())\r\n : Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n let typeParametersStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,\r\n tn.range(typeParametersStart, tn.pos)\r\n ); // recoverable\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.An_accessor_cannot_have_type_parameters,\r\n tn.range(typeParametersStart, tn.pos)\r\n ); // recoverable\r\n } else {\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n }\r\n\r\n // method: '(' Parameters (':' Type)? '{' Statement* '}' ';'?\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let signatureStart = tn.tokenPos;\r\n let parameters = this.parseParameters(tn, isConstructor);\r\n if (!parameters) return null;\r\n let thisType = this.parseParametersThis;\r\n if (isConstructor) {\r\n for (let i = 0, k = parameters.length; i < k; ++i) {\r\n let parameter = parameters[i];\r\n if (parameter.isAny(\r\n CommonFlags.PUBLIC |\r\n CommonFlags.PROTECTED |\r\n CommonFlags.PRIVATE |\r\n CommonFlags.READONLY\r\n )) {\r\n let implicitFieldDeclaration = Node.createFieldDeclaration(\r\n parameter.name,\r\n parameter.type,\r\n null, // initialized via parameter\r\n null,\r\n parameter.flags | CommonFlags.INSTANCE,\r\n parameter.range\r\n );\r\n implicitFieldDeclaration.parameterIndex = i;\r\n implicitFieldDeclaration.parent = parent;\r\n parameter.implicitFieldDeclaration = implicitFieldDeclaration;\r\n parent.members.push(implicitFieldDeclaration);\r\n }\r\n }\r\n } else if (isGetter) {\r\n if (parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n name.range\r\n );\r\n }\r\n } else if (isSetter) {\r\n if (parameters.length != 1) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,\r\n name.range\r\n );\r\n }\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,\r\n name.range\r\n );\r\n }\r\n }\r\n\r\n let returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n if (name.kind == NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration,\r\n tn.range()\r\n );\r\n } else if (isSetter) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_cannot_have_a_return_type_annotation,\r\n tn.range()\r\n );\r\n }\r\n returnType = this.parseType(tn, name.kind == NodeKind.CONSTRUCTOR || isSetter);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n if (!isSetter && name.kind != NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n let signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n let body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body) return null;\r\n } else if (!(flags & CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n let retMethod = Node.createMethodDeclaration(\r\n name,\r\n typeParameters,\r\n signature,\r\n body,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retMethod;\r\n\r\n } else if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Constructor_implementation_is_missing,\r\n name.range\r\n );\r\n\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n name.range\r\n );\r\n\r\n // field: (':' Type)? ('=' Expression)? ';'?\r\n } else {\r\n if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(abstractStart, abstractEnd), \"abstract\"\r\n ); // recoverable\r\n }\r\n\r\n if (flags & CommonFlags.GET) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(getStart, getEnd), \"get\"\r\n ); // recoverable\r\n }\r\n\r\n if (flags & CommonFlags.SET) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(setStart, setEnd), \"set\"\r\n ); // recoverable\r\n }\r\n\r\n let type: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n let initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n initializer = this.parseExpression(tn);\r\n if (!initializer) return null;\r\n }\r\n let retField = Node.createFieldDeclaration(\r\n name,\r\n type,\r\n initializer,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retField;\r\n }\r\n return null;\r\n }\r\n\r\n parseNamespace(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): NamespaceDeclaration | null {\r\n\r\n // at 'namespace': Identifier '{' (Variable | Function)* '}'\r\n\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let members = new Array();\r\n let ns = Node.createNamespaceDeclaration(\r\n identifier,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseTopLevelStatement(tn, ns);\r\n if (!member) return null;\r\n member.parent = ns;\r\n members.push(member);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ns;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExport(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n startPos: i32\r\n ): ExportStatement | null {\r\n\r\n // at 'export': '{' ExportMember (',' ExportMember)* }' ('from' StringLiteral)? ';'?\r\n\r\n var path: StringLiteralExpression | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseExportMember(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n if (tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n let ret = Node.createExportStatement(members, path, flags, tn.range(startPos, tn.pos));\r\n let internalPath = ret.internalPath;\r\n if (internalPath !== null && !this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else if (tn.skip(Token.ASTERISK)) {\r\n if (tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n let ret = Node.createExportStatement(null, path, flags, tn.range(startPos, tn.pos));\r\n let internalPath = assert(ret.internalPath);\r\n let source = tn.source;\r\n if (!source.exportPaths) source.exportPaths = new Set();\r\n source.exportPaths.add(internalPath);\r\n if (!this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"from\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportMember(\r\n tn: Tokenizer\r\n ): ExportMember | null {\r\n\r\n // before: Identifier ('as' Identifier)?\r\n\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifierName()) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createExportMember(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImport(\r\n tn: Tokenizer\r\n ): ImportStatement | null {\r\n\r\n // at 'import':\r\n // ('{' (ImportMember (',' ImportMember)* '}') | ('*' 'as' Identifier)?\r\n // 'from' StringLiteral ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var members: ImportDeclaration[] | null = null;\r\n var namespaceName: IdentifierExpression | null = null;\r\n var skipFrom = false;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseImportDeclaration(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n } else if (tn.skip(Token.ASTERISK)) {\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifier()) {\r\n namespaceName = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"as\"\r\n );\r\n return null;\r\n }\r\n } else {\r\n skipFrom = true;\r\n }\r\n\r\n if (skipFrom || tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n let path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n let ret: ImportStatement;\r\n if (namespaceName) {\r\n assert(!members);\r\n ret = Node.createImportStatementWithWildcard(namespaceName, path, tn.range(startPos, tn.pos));\r\n } else {\r\n ret = Node.createImportStatement(members, path, tn.range(startPos, tn.pos));\r\n }\r\n let internalPath = ret.internalPath;\r\n if (!this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"from\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImportDeclaration(\r\n tn: Tokenizer\r\n ): ImportDeclaration | null {\r\n\r\n // before: Identifier ('as' Identifier)?\r\n\r\n if (tn.skipIdentifierName()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifier()) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createImportDeclaration(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportImport(\r\n tn: Tokenizer,\r\n startPos: i32\r\n ): ExportImportStatement | null {\r\n\r\n // at 'export' 'import': Identifier ('=' Identifier)? ';'?\r\n\r\n if (tn.skipIdentifier()) {\r\n let asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let ret = Node.createExportImportStatement(identifier, asIdentifier, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseStatement(\r\n tn: Tokenizer,\r\n topLevel: bool = false\r\n ): Statement | null {\r\n\r\n // at previous token\r\n\r\n var state = tn.mark();\r\n var token = tn.next();\r\n var statement: Statement | null = null;\r\n switch (token) {\r\n case Token.BREAK: {\r\n statement = this.parseBreak(tn);\r\n break;\r\n }\r\n case Token.CONST: {\r\n statement = this.parseVariable(tn, CommonFlags.CONST, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.CONTINUE: {\r\n statement = this.parseContinue(tn);\r\n break;\r\n }\r\n case Token.DO: {\r\n statement = this.parseDoStatement(tn);\r\n break;\r\n }\r\n case Token.FOR: {\r\n statement = this.parseForStatement(tn);\r\n break;\r\n }\r\n case Token.IF: {\r\n statement = this.parseIfStatement(tn);\r\n break;\r\n }\r\n case Token.LET: {\r\n statement = this.parseVariable(tn, CommonFlags.LET, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.VAR: {\r\n statement = this.parseVariable(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.OPENBRACE: {\r\n statement = this.parseBlockStatement(tn, topLevel);\r\n break;\r\n }\r\n case Token.RETURN: {\r\n if (topLevel) {\r\n this.error(\r\n DiagnosticCode.A_return_statement_can_only_be_used_within_a_function_body,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n statement = this.parseReturn(tn);\r\n break;\r\n }\r\n case Token.SEMICOLON: {\r\n return Node.createEmptyStatement(tn.range(tn.tokenPos));\r\n }\r\n case Token.SWITCH: {\r\n statement = this.parseSwitchStatement(tn);\r\n break;\r\n }\r\n case Token.THROW: {\r\n statement = this.parseThrowStatement(tn);\r\n break;\r\n }\r\n case Token.TRY: {\r\n statement = this.parseTryStatement(tn);\r\n break;\r\n }\r\n case Token.VOID: {\r\n statement = this.parseVoidStatement(tn);\r\n break;\r\n }\r\n case Token.WHILE: {\r\n statement = this.parseWhileStatement(tn);\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n statement = this.parseTypeDeclaration(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: {\r\n tn.reset(state);\r\n statement = this.parseExpressionStatement(tn);\r\n break;\r\n }\r\n }\r\n if (!statement) { // has been reported\r\n tn.reset(state);\r\n this.skipStatement(tn);\r\n } else {\r\n tn.discard(state);\r\n }\r\n return statement;\r\n }\r\n\r\n parseBlockStatement(\r\n tn: Tokenizer,\r\n topLevel: bool\r\n ): BlockStatement | null {\r\n\r\n // at '{': Statement* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let state = tn.mark();\r\n let statement = this.parseStatement(tn, topLevel);\r\n if (!statement) {\r\n tn.reset(state);\r\n this.skipStatement(tn);\r\n } else {\r\n tn.discard(state);\r\n statements.push(statement);\r\n }\r\n }\r\n var ret = Node.createBlockStatement(statements, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseBreak(\r\n tn: Tokenizer\r\n ): BreakStatement | null {\r\n\r\n // at 'break': Identifier? ';'?\r\n\r\n var identifier: IdentifierExpression | null = null;\r\n if (tn.peek(true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(IdentifierHandling.PREFER);\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = Node.createBreakStatement(identifier, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseContinue(\r\n tn: Tokenizer\r\n ): ContinueStatement | null {\r\n\r\n // at 'continue': Identifier? ';'?\r\n\r\n var identifier: IdentifierExpression | null = null;\r\n if (tn.peek(true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(IdentifierHandling.PREFER);\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = Node.createContinueStatement(identifier, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseDoStatement(\r\n tn: Tokenizer\r\n ): DoStatement | null {\r\n\r\n // at 'do': Statement 'while' '(' Expression ')' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n if (tn.skip(Token.WHILE)) {\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let ret = Node.createDoStatement(statement, condition, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"while\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExpressionStatement(\r\n tn: Tokenizer\r\n ): ExpressionStatement | null {\r\n\r\n // at previous token\r\n\r\n var expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n\r\n var ret = Node.createExpressionStatement(expr);\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseForStatement(\r\n tn: Tokenizer\r\n ): ForStatement | null {\r\n\r\n // at 'for': '(' Statement? Expression? ';' Expression? ')' Statement\r\n\r\n var startPos = tn.tokenPos;\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let initializer: Statement | null = null;\r\n\r\n if (tn.skip(Token.CONST)) {\r\n initializer = this.parseVariable(tn, CommonFlags.CONST, null, tn.tokenPos);\r\n } else if (tn.skip(Token.LET)) {\r\n initializer = this.parseVariable(tn, CommonFlags.LET, null, tn.tokenPos);\r\n } else if (tn.skip(Token.VAR)) {\r\n initializer = this.parseVariable(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n\r\n } else if (!tn.skip(Token.SEMICOLON)) {\r\n initializer = this.parseExpressionStatement(tn);\r\n if (!initializer) return null;\r\n }\r\n\r\n if (tn.token == Token.SEMICOLON) {\r\n let condition: ExpressionStatement | null = null;\r\n if (!tn.skip(Token.SEMICOLON)) {\r\n condition = this.parseExpressionStatement(tn);\r\n if (!condition) return null;\r\n }\r\n\r\n if (tn.token == Token.SEMICOLON) {\r\n let incrementor: Expression | null = null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n incrementor = this.parseExpression(tn);\r\n if (!incrementor) return null;\r\n\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n return Node.createForStatement(\r\n initializer,\r\n condition\r\n ? condition.expression\r\n : null,\r\n incrementor,\r\n statement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseIfStatement(\r\n tn: Tokenizer\r\n ): IfStatement | null {\r\n\r\n // at 'if': '(' Expression ')' Statement ('else' Statement)?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let elseStatement: Statement | null = null;\r\n if (tn.skip(Token.ELSE)) {\r\n elseStatement = this.parseStatement(tn);\r\n if (!elseStatement) return null;\r\n }\r\n return Node.createIfStatement(\r\n condition,\r\n statement,\r\n elseStatement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchStatement(\r\n tn: Tokenizer\r\n ): SwitchStatement | null {\r\n\r\n // at 'switch': '(' Expression ')' '{' SwitchCase* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let cases = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let case_ = this.parseSwitchCase(tn);\r\n if (!case_) return null;\r\n cases.push(case_);\r\n }\r\n let ret = Node.createSwitchStatement(condition, cases, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchCase(\r\n tn: Tokenizer\r\n ): SwitchCase | null {\r\n\r\n var startPos = tn.tokenPos;\r\n var statements: Statement[],\r\n statement: Statement | null;\r\n\r\n // 'case' Expression ':' Statement*\r\n\r\n if (tn.skip(Token.CASE)) {\r\n let label = this.parseExpression(tn);\r\n if (!label) return null;\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(label, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n\r\n // 'default' ':' Statement*\r\n\r\n } else if (tn.skip(Token.DEFAULT)) {\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(null, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._case_or_default_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseThrowStatement(\r\n tn: Tokenizer\r\n ): ThrowStatement | null {\r\n\r\n // at 'throw': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n var ret = Node.createThrowStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseTryStatement(\r\n tn: Tokenizer\r\n ): TryStatement | null {\r\n\r\n // at 'try':\r\n // '{' Statement* '}'\r\n // ('catch' '(' VariableMember ')' '{' Statement* '}')?\r\n // ('finally' '{' Statement* '}'? ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var stmt: Statement | null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n statements.push(stmt);\r\n }\r\n let catchVariable: IdentifierExpression | null = null;\r\n let catchStatements: Statement[] | null = null;\r\n let finallyStatements: Statement[] | null = null;\r\n if (tn.skip(Token.CATCH)) {\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n catchVariable = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n catchStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n catchStatements.push(stmt);\r\n }\r\n }\r\n if (tn.skip(Token.FINALLY)) {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n finallyStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n finallyStatements.push(stmt);\r\n }\r\n }\r\n if (!(catchStatements || finallyStatements)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"catch\"\r\n );\r\n return null;\r\n }\r\n let ret = Node.createTryStatement(\r\n statements,\r\n catchVariable,\r\n catchStatements,\r\n finallyStatements,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseTypeDeclaration(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): TypeDeclaration | null {\r\n\r\n // at 'type': Identifier ('<' TypeParameters '>')? '=' Type ';'?\r\n\r\n if (tn.skipIdentifier()) {\r\n let name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n if (tn.skip(Token.EQUALS)) {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n let ret = Node.createTypeDeclaration(\r\n name,\r\n typeParameters,\r\n type,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseVoidStatement(\r\n tn: Tokenizer\r\n ): VoidStatement | null {\r\n\r\n // at 'void': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn, Precedence.GROUPING);\r\n if (!expression) return null;\r\n var ret = Node.createVoidStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseWhileStatement(\r\n tn: Tokenizer\r\n ): WhileStatement | null {\r\n\r\n // at 'while': '(' Expression ')' Statement ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let ret = Node.createWhileStatement(expression, statement, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n // expressions\r\n // see: http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm#climbing\r\n\r\n parseExpressionStart(\r\n tn: Tokenizer\r\n ): Expression | null {\r\n\r\n var token = tn.next(IdentifierHandling.PREFER);\r\n var startPos = tn.tokenPos;\r\n var expr: Expression | null = null;\r\n\r\n if (token == Token.NULL) {\r\n return Node.createNullExpression(tn.range());\r\n }\r\n if (token == Token.TRUE) {\r\n return Node.createTrueExpression(tn.range());\r\n }\r\n if (token == Token.FALSE) {\r\n return Node.createFalseExpression(tn.range());\r\n }\r\n\r\n var precedence = determinePrecedenceStart(token);\r\n if (precedence != Precedence.INVALID) {\r\n let operand: Expression | null;\r\n\r\n // TODO: SpreadExpression, YieldExpression (currently become unsupported UnaryPrefixExpressions)\r\n\r\n // NewExpression\r\n if (token == Token.NEW) {\r\n operand = this.parseExpression(tn, Precedence.CALL);\r\n if (!operand) return null;\r\n if (operand.kind == NodeKind.CALL) {\r\n return Node.createNewExpression(\r\n (operand).expression,\r\n (operand).typeArguments,\r\n (operand).arguments,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n } else {\r\n operand = this.parseExpression(tn, precedence);\r\n if (!operand) return null;\r\n }\r\n\r\n // UnaryPrefixExpression\r\n if (token == Token.PLUS_PLUS || token == Token.MINUS_MINUS) {\r\n if (\r\n operand.kind != NodeKind.IDENTIFIER &&\r\n operand.kind != NodeKind.ELEMENTACCESS &&\r\n operand.kind != NodeKind.PROPERTYACCESS\r\n ) {\r\n this.error(\r\n DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,\r\n operand.range\r\n );\r\n }\r\n }\r\n return Node.createUnaryPrefixExpression(token, operand, tn.range(startPos, tn.pos));\r\n }\r\n\r\n switch (token) {\r\n\r\n // ParenthesizedExpression\r\n // FunctionExpression\r\n case Token.OPENPAREN: {\r\n\r\n // determine whether this is a function expression\r\n if (tn.skip(Token.CLOSEPAREN)) { // must be a function expression (fast route)\r\n return this.parseFunctionExpressionCommon(\r\n tn,\r\n Node.createEmptyIdentifierExpression(tn.range(startPos)),\r\n [],\r\n true\r\n );\r\n }\r\n let state = tn.mark();\r\n let again = true;\r\n do {\r\n switch (tn.next(IdentifierHandling.PREFER)) {\r\n\r\n // function expression\r\n case Token.DOT_DOT_DOT: {\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n switch (tn.next()) {\r\n\r\n // if we got here, check for arrow\r\n case Token.CLOSEPAREN: {\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n again = false;\r\n break;\r\n }\r\n // fall-through\r\n }\r\n // function expression\r\n case Token.COLON: { // type annotation\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.QUESTION: // optional parameter or ternary\r\n case Token.COMMA: {\r\n break; // continue\r\n }\r\n // parenthesized expression\r\n // case Token.EQUALS: // missing type annotation for simplicity\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n // parenthesized expression\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n } while (again);\r\n tn.reset(state);\r\n\r\n // parse parenthesized\r\n expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n return Node.createParenthesizedExpression(expr, tn.range(startPos, tn.pos));\r\n }\r\n // ArrayLiteralExpression\r\n case Token.OPENBRACKET: {\r\n let elementExpressions = new Array();\r\n while (!tn.skip(Token.CLOSEBRACKET)) {\r\n if (tn.peek() == Token.COMMA) {\r\n expr = null; // omitted\r\n } else {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n }\r\n elementExpressions.push(expr);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACKET)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return Node.createArrayLiteralExpression(elementExpressions, tn.range(startPos, tn.pos));\r\n }\r\n // AssertionExpression (unary prefix)\r\n case Token.LESSTHAN: {\r\n let toType = this.parseType(tn);\r\n if (!toType) return null;\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n expr = this.parseExpression(tn, Precedence.CALL);\r\n if (!expr) return null;\r\n return Node.createAssertionExpression(\r\n AssertionKind.PREFIX,\r\n expr,\r\n toType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n case Token.IDENTIFIER: {\r\n return Node.createIdentifierExpression(tn.readIdentifier(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.THIS: {\r\n return Node.createThisExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.CONSTRUCTOR: {\r\n return Node.createConstructorExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.SUPER: {\r\n return Node.createSuperExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.STRINGLITERAL: {\r\n return Node.createStringLiteralExpression(tn.readString(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.INTEGERLITERAL: {\r\n return Node.createIntegerLiteralExpression(tn.readInteger(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.FLOATLITERAL: {\r\n return Node.createFloatLiteralExpression(tn.readFloat(), tn.range(startPos, tn.pos));\r\n }\r\n // RegexpLiteralExpression\r\n // note that this also continues on invalid ones so the surrounding AST remains intact\r\n case Token.SLASH: {\r\n let regexpPattern = tn.readRegexpPattern(); // also reports\r\n if (!tn.skip(Token.SLASH)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"/\"\r\n );\r\n return null;\r\n }\r\n return Node.createRegexpLiteralExpression(\r\n regexpPattern,\r\n tn.readRegexpFlags(), // also reports\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n case Token.FUNCTION: {\r\n return this.parseFunctionExpression(tn);\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Expression_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n tryParseTypeArgumentsBeforeArguments(\r\n tn: Tokenizer\r\n ): CommonTypeNode[] | null {\r\n\r\n // at '<': Type (',' Type)* '>' '('\r\n\r\n var state = tn.mark();\r\n if (!tn.skip(Token.LESSTHAN)) return null;\r\n var typeArguments = new Array();\r\n do {\r\n if (tn.peek() === Token.GREATERTHAN) {\r\n break;\r\n }\r\n let type = this.parseType(tn, true, true);\r\n if (!type) {\r\n tn.reset(state);\r\n return null;\r\n }\r\n typeArguments.push(type);\r\n } while (tn.skip(Token.COMMA));\r\n if (tn.skip(Token.GREATERTHAN) && tn.skip(Token.OPENPAREN)) {\r\n return typeArguments;\r\n }\r\n tn.reset(state);\r\n return null;\r\n }\r\n\r\n parseArguments(\r\n tn: Tokenizer\r\n ): Expression[] | null {\r\n\r\n // at '(': (Expression (',' Expression)*)? ')'\r\n\r\n var args = new Array();\r\n while (!tn.skip(Token.CLOSEPAREN)) {\r\n let expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n args.push(expr);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return args;\r\n }\r\n\r\n parseExpression(\r\n tn: Tokenizer,\r\n precedence: Precedence = 0\r\n ): Expression | null {\r\n\r\n var expr = this.parseExpressionStart(tn);\r\n if (!expr) return null;\r\n var startPos = expr.range.start;\r\n\r\n // CallExpression with type arguments\r\n var typeArguments: CommonTypeNode[] | null;\r\n while (\r\n // there might be better ways to distinguish a LESSTHAN from a CALL with type arguments\r\n (typeArguments = this.tryParseTypeArgumentsBeforeArguments(tn)) ||\r\n tn.skip(Token.OPENPAREN)\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));\r\n }\r\n\r\n var token: Token;\r\n var next: Expression | null = null;\r\n var nextPrecedence: Precedence;\r\n while (\r\n (nextPrecedence = determinePrecedence(token = tn.peek())) >= precedence\r\n ) { // precedence climbing\r\n tn.next();\r\n switch (token) {\r\n // AssertionExpression\r\n case Token.AS: {\r\n let toType = this.parseType(tn); // reports\r\n if (!toType) return null;\r\n expr = Node.createAssertionExpression(\r\n AssertionKind.AS,\r\n expr,\r\n toType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // InstanceOfExpression\r\n case Token.INSTANCEOF: {\r\n let isType = this.parseType(tn); // reports\r\n if (!isType) return null;\r\n expr = Node.createInstanceOfExpression(\r\n expr,\r\n isType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // ElementAccessExpression\r\n case Token.OPENBRACKET: {\r\n next = this.parseExpression(tn); // reports\r\n if (!next) return null;\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n expr = Node.createElementAccessExpression(\r\n expr,\r\n next,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // UnaryPostfixExpression\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS: {\r\n if (\r\n expr.kind != NodeKind.IDENTIFIER &&\r\n expr.kind != NodeKind.ELEMENTACCESS &&\r\n expr.kind != NodeKind.PROPERTYACCESS\r\n ) {\r\n this.error(\r\n DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,\r\n expr.range\r\n );\r\n }\r\n expr = Node.createUnaryPostfixExpression(\r\n token,\r\n expr,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // TernaryExpression\r\n case Token.QUESTION: {\r\n let ifThen = this.parseExpression(tn);\r\n if (!ifThen) return null;\r\n if (!tn.skip(Token.COLON)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n let ifElse = this.parseExpression(tn, precedence > Precedence.COMMA ? Precedence.COMMA + 1 : 0);\r\n if (!ifElse) return null;\r\n expr = Node.createTernaryExpression(\r\n expr,\r\n ifThen,\r\n ifElse,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // CommaExpression\r\n case Token.COMMA: {\r\n let commaExprs: Expression[] = [ expr ];\r\n do {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n commaExprs.push(expr);\r\n } while (tn.skip(Token.COMMA));\r\n expr = Node.createCommaExpression(commaExprs, tn.range(startPos, tn.pos));\r\n break;\r\n }\r\n default: {\r\n next = this.parseExpression(tn,\r\n isRightAssociative(token)\r\n ? nextPrecedence\r\n : nextPrecedence + 1\r\n );\r\n if (!next) return null;\r\n\r\n // PropertyAccessExpression\r\n if (token == Token.DOT) {\r\n if (next.kind == NodeKind.IDENTIFIER) {\r\n expr = Node.createPropertyAccessExpression(\r\n expr,\r\n next,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else if (next.kind == NodeKind.CALL) { // join\r\n let propertyCall = next;\r\n if (propertyCall.expression.kind == NodeKind.IDENTIFIER) {\r\n propertyCall.expression = Node.createPropertyAccessExpression(\r\n expr,\r\n propertyCall.expression,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n propertyCall.expression.range\r\n );\r\n return null;\r\n }\r\n expr = propertyCall;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n next.range\r\n );\r\n return null;\r\n }\r\n\r\n // BinaryExpression\r\n } else {\r\n expr = Node.createBinaryExpression(token, expr, next, tn.range(startPos, tn.pos));\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n return expr;\r\n }\r\n\r\n /** Skips over a statement on errors in an attempt to reduce unnecessary diagnostic noise. */\r\n skipStatement(tn: Tokenizer): void {\r\n tn.peek(true);\r\n if (tn.nextTokenOnNewLine) tn.next(); // if reset() to the previous line\r\n do {\r\n let nextToken = tn.peek(true);\r\n if (\r\n nextToken == Token.ENDOFFILE || // next step should handle this\r\n nextToken == Token.SEMICOLON // end of the statement for sure\r\n ) {\r\n tn.next();\r\n break;\r\n }\r\n if (tn.nextTokenOnNewLine) break; // end of the statement maybe\r\n switch (tn.next()) {\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n break;\r\n }\r\n case Token.STRINGLITERAL: {\r\n tn.readString();\r\n break;\r\n }\r\n case Token.INTEGERLITERAL: {\r\n tn.readInteger();\r\n break;\r\n }\r\n case Token.FLOATLITERAL: {\r\n tn.readFloat();\r\n break;\r\n }\r\n }\r\n } while (true);\r\n }\r\n\r\n /** Skips over a block on errors in an attempt to reduce unnecessary diagnostic noise. */\r\n // skipBlock(tn: Tokenizer): void {\r\n // var depth = 0;\r\n // var token: Token;\r\n // do {\r\n // token = tn.next();\r\n // if (token == Token.OPENBRACE) {\r\n // ++depth;\r\n // } else if (token == Token.CLOSEBRACE) {\r\n // if (depth) --depth;\r\n // if (!depth) break; // done\r\n // }\r\n // } while (token != Token.ENDOFFILE);\r\n // }\r\n}\r\n\r\n/** Operator precedence from least to largest. */\r\nexport const enum Precedence {\r\n COMMA,\r\n SPREAD,\r\n YIELD,\r\n ASSIGNMENT,\r\n CONDITIONAL,\r\n LOGICAL_OR,\r\n LOGICAL_AND,\r\n BITWISE_OR,\r\n BITWISE_XOR,\r\n BITWISE_AND,\r\n EQUALITY,\r\n RELATIONAL,\r\n SHIFT,\r\n ADDITIVE,\r\n MULTIPLICATIVE,\r\n EXPONENTIATED,\r\n UNARY_PREFIX,\r\n UNARY_POSTFIX,\r\n CALL,\r\n MEMBERACCESS,\r\n GROUPING,\r\n INVALID = -1\r\n}\r\n\r\n/** Determines the precedence of a starting token. */\r\nfunction determinePrecedenceStart(kind: Token): Precedence {\r\n switch (kind) {\r\n case Token.DOT_DOT_DOT: return Precedence.SPREAD;\r\n case Token.YIELD: return Precedence.YIELD;\r\n case Token.EXCLAMATION:\r\n case Token.TILDE:\r\n case Token.PLUS:\r\n case Token.MINUS:\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS:\r\n case Token.TYPEOF:\r\n case Token.VOID:\r\n case Token.DELETE: return Precedence.UNARY_PREFIX;\r\n case Token.NEW: return Precedence.MEMBERACCESS;\r\n default: return Precedence.INVALID;\r\n }\r\n}\r\n\r\n/** Determines the precende of a non-starting token. */\r\nfunction determinePrecedence(kind: Token): Precedence {\r\n switch (kind) {\r\n case Token.COMMA: return Precedence.COMMA;\r\n case Token.EQUALS:\r\n case Token.PLUS_EQUALS:\r\n case Token.MINUS_EQUALS:\r\n case Token.ASTERISK_ASTERISK_EQUALS:\r\n case Token.ASTERISK_EQUALS:\r\n case Token.SLASH_EQUALS:\r\n case Token.PERCENT_EQUALS:\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.AMPERSAND_EQUALS:\r\n case Token.CARET_EQUALS:\r\n case Token.BAR_EQUALS: return Precedence.ASSIGNMENT;\r\n case Token.QUESTION: return Precedence.CONDITIONAL;\r\n case Token.BAR_BAR: return Precedence.LOGICAL_OR;\r\n case Token.AMPERSAND_AMPERSAND: return Precedence.LOGICAL_AND;\r\n case Token.BAR: return Precedence.BITWISE_OR;\r\n case Token.CARET: return Precedence.BITWISE_XOR;\r\n case Token.AMPERSAND: return Precedence.BITWISE_AND;\r\n case Token.EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS:\r\n case Token.EQUALS_EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS_EQUALS: return Precedence.EQUALITY;\r\n case Token.AS:\r\n case Token.IN:\r\n case Token.INSTANCEOF:\r\n case Token.LESSTHAN:\r\n case Token.GREATERTHAN:\r\n case Token.LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_EQUALS: return Precedence.RELATIONAL;\r\n case Token.LESSTHAN_LESSTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: return Precedence.SHIFT;\r\n case Token.PLUS:\r\n case Token.MINUS: return Precedence.ADDITIVE;\r\n case Token.ASTERISK:\r\n case Token.SLASH:\r\n case Token.PERCENT: return Precedence.MULTIPLICATIVE;\r\n case Token.ASTERISK_ASTERISK: return Precedence.EXPONENTIATED;\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS: return Precedence.UNARY_POSTFIX;\r\n case Token.DOT:\r\n case Token.NEW:\r\n case Token.OPENBRACKET: return Precedence.MEMBERACCESS;\r\n default: return Precedence.INVALID;\r\n }\r\n}\r\n\r\n/** Determines whether a non-starting token is right associative. */\r\nfunction isRightAssociative(kind: Token): bool {\r\n switch (kind) {\r\n case Token.EQUALS:\r\n case Token.PLUS_EQUALS:\r\n case Token.MINUS_EQUALS:\r\n case Token.ASTERISK_ASTERISK_EQUALS:\r\n case Token.ASTERISK_EQUALS:\r\n case Token.SLASH_EQUALS:\r\n case Token.PERCENT_EQUALS:\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.AMPERSAND_EQUALS:\r\n case Token.CARET_EQUALS:\r\n case Token.BAR_EQUALS:\r\n case Token.QUESTION:\r\n case Token.ASTERISK_ASTERISK: return true;\r\n default: return false;\r\n }\r\n}\r\n","/**\r\n * Definition builders for WebIDL and TypeScript.\r\n * @module definitions\r\n *//***/\r\n\r\nimport {\r\n Program,\r\n Element,\r\n CommonFlags,\r\n ElementKind,\r\n Global,\r\n Enum,\r\n EnumValue,\r\n Field,\r\n Function,\r\n FunctionPrototype,\r\n Class,\r\n ClassPrototype,\r\n Namespace,\r\n ConstantValueKind,\r\n Interface,\r\n Property\r\n} from \"./program\";\r\n\r\nimport {\r\n Type,\r\n TypeKind\r\n} from \"./types\";\r\n\r\nimport {\r\n indent\r\n} from \"./util\";\r\n\r\n/** Walker base class. */\r\nabstract class ExportsWalker {\r\n\r\n /** Program reference. */\r\n program: Program;\r\n /** Whether to include private members */\r\n includePrivate: bool;\r\n /** Elements still to do. */\r\n todo: Element[] = [];\r\n /** Already seen elements. */\r\n seen: Set = new Set();\r\n\r\n /** Constructs a new Element walker. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n this.program = program;\r\n this.includePrivate;\r\n }\r\n\r\n /** Walks all exports and calls the respective handlers. */\r\n walk(): void {\r\n for (let element of this.program.moduleLevelExports.values()) this.visitElement(element);\r\n var todo = this.todo;\r\n for (let i = 0; i < todo.length; ) this.visitElement(todo[i]);\r\n }\r\n\r\n /** Visits an element.*/\r\n visitElement(element: Element): void {\r\n if (element.is(CommonFlags.PRIVATE) && !this.includePrivate) return;\r\n if (this.seen.has(element)) return;\r\n this.seen.add(element);\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitGlobal(element);\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n this.visitFunctionInstances(element);\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n this.visitClassInstances(element);\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n if ((element).is(CommonFlags.COMPILED)) this.visitField(element);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let prop = element;\r\n let getter = prop.getterPrototype;\r\n if (getter) this.visitFunctionInstances(getter);\r\n let setter = prop.setterPrototype;\r\n if (setter) this.visitFunctionInstances(setter);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n if (hasCompiledMember(element)) this.visitNamespace(element);\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n\r\n private visitFunctionInstances(element: FunctionPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitFunction(instance);\r\n }\r\n }\r\n\r\n private visitClassInstances(element: ClassPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitClass(instance);\r\n }\r\n }\r\n\r\n abstract visitGlobal(element: Global): void;\r\n abstract visitEnum(element: Enum): void;\r\n abstract visitFunction(element: Function): void;\r\n abstract visitClass(element: Class): void;\r\n abstract visitInterface(element: Interface): void;\r\n abstract visitField(element: Field): void;\r\n abstract visitNamespace(element: Element): void;\r\n}\r\n\r\n/** A WebIDL definitions builder. */\r\nexport class IDLBuilder extends ExportsWalker {\r\n\r\n /** Builds WebIDL definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new IDLBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n if (isConst) {\r\n switch (element.constantValueKind) {\r\n case ConstantValueKind.INTEGER: {\r\n sb.push(\" = \");\r\n sb.push(i64_to_string(element.constantIntegerValue));\r\n break;\r\n }\r\n case ConstantValueKind.FLOAT: {\r\n sb.push(\" = \");\r\n sb.push(element.constantFloatValue.toString());\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n let isConst = (member).is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"readonly \");\r\n sb.push(\"unsigned long \");\r\n sb.push(name);\r\n if (isConst) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n }\r\n for (let member of members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) this.visitElement(member);\r\n }\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(this.typeToString(parameters[i]));\r\n sb.push(\" \");\r\n sb.push(signature.getParameterName(i));\r\n }\r\n sb.push(\");\\n\");\r\n var members = element.members;\r\n if (members && members.size) {\r\n indent(sb, this.indentLevel);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n // TODO\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n // TODO\r\n }\r\n\r\n visitNamespace(element: Namespace): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.kind) {\r\n case TypeKind.I8: return \"byte\";\r\n case TypeKind.I16: return \"short\";\r\n case TypeKind.I32: return \"long\";\r\n case TypeKind.I64: return \"long long\";\r\n case TypeKind.ISIZE: return this.program.options.isWasm64 ? \"long long\" : \"long\";\r\n case TypeKind.U8: return \"octet\";\r\n case TypeKind.U16: return \"unsigned short\";\r\n case TypeKind.U32: return \"unsigned long\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"unsigned long long\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"unsigned long long\" : \"unsigned long\";\r\n // ^ TODO: class types\r\n case TypeKind.BOOL: return \"boolean\";\r\n case TypeKind.F32: return \"unrestricted float\";\r\n case TypeKind.F64: return \"unrestricted double\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"interface ASModule {\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n return sb.join(\"\");\r\n }\r\n}\r\n\r\n/** A TypeScript definitions builder. */\r\nexport class TSDBuilder extends ExportsWalker {\r\n\r\n /** Builds TypeScript definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new TSDBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.STATIC)) {\r\n if (isConst) sb.push(\"static readonly \");\r\n else sb.push(\"static \");\r\n } else {\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"var \");\r\n }\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"enum \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n let numMembers = members.size;\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n indent(sb, this.indentLevel);\r\n sb.push(name);\r\n if (member.is(CommonFlags.INLINED)) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\",\\n\");\r\n --numMembers;\r\n }\r\n }\r\n if (numMembers) this.visitNamespace(element);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n if (element.isAny(CommonFlags.PRIVATE | CommonFlags.SET)) return;\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.GET)) {\r\n sb.push(element.prototype.declaration.name.text); // 'get:funcName' internally\r\n sb.push(\": \");\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\";\\n\");\r\n return;\r\n } else {\r\n if (!element.isAny(CommonFlags.STATIC | CommonFlags.INSTANCE)) sb.push(\"function \");\r\n sb.push(element.simpleName);\r\n }\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(signature.getParameterName(i));\r\n sb.push(\": \");\r\n sb.push(this.typeToString(parameters[i]));\r\n }\r\n if (element.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.SET)) {\r\n sb.push(\")\");\r\n } else {\r\n sb.push(\"): \");\r\n sb.push(this.typeToString(signature.returnType));\r\n }\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n var isInterface = element.kind == ElementKind.INTERFACE;\r\n indent(sb, this.indentLevel++);\r\n if (isInterface) {\r\n sb.push(\"interface \");\r\n } else {\r\n if (element.is(CommonFlags.ABSTRACT)) sb.push(\"abstract \");\r\n sb.push(\"class \");\r\n }\r\n sb.push(element.simpleName);\r\n var base = element.base;\r\n if (base && base.is(CommonFlags.COMPILED | CommonFlags.MODULE_EXPORT)) {\r\n sb.push(\" extends \");\r\n sb.push(base.simpleName); // TODO: fqn\r\n }\r\n sb.push(\" {\\n\");\r\n var members = element.prototype.members; // static\r\n if (members) {\r\n for (let member of members.values()) {\r\n this.visitElement(member);\r\n }\r\n }\r\n var ctor = element.constructorInstance;\r\n if (ctor) this.visitFunction(ctor);\r\n members = element.members; // instance\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n if (element.is(CommonFlags.PRIVATE)) return;\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.READONLY)) sb.push(\"readonly \");\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitNamespace(element: Element): void {\r\n var members = element.members;\r\n if (members && members.size) {\r\n let sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"namespace \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.kind) {\r\n case TypeKind.I8: return \"i8\";\r\n case TypeKind.I16: return \"i16\";\r\n case TypeKind.I32: return \"i32\";\r\n case TypeKind.I64: return \"I64\";\r\n case TypeKind.ISIZE: return this.program.options.isWasm64 ? \"I64\" : \"i32\";\r\n case TypeKind.U8: return \"u8\";\r\n case TypeKind.U16: return \"u16\";\r\n case TypeKind.U32: return \"u32\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"U64\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"U64\" : \"u32\";\r\n // ^ TODO: class types\r\n case TypeKind.BOOL: return \"bool\";\r\n case TypeKind.F32: return \"f32\";\r\n case TypeKind.F64: return \"f64\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"declare module ASModule {\\n\");\r\n sb.push(\" type i8 = number;\\n\");\r\n sb.push(\" type i16 = number;\\n\");\r\n sb.push(\" type i32 = number;\\n\");\r\n sb.push(\" type u8 = number;\\n\");\r\n sb.push(\" type u16 = number;\\n\");\r\n sb.push(\" type u32 = number;\\n\");\r\n sb.push(\" type f32 = number;\\n\");\r\n sb.push(\" type f64 = number;\\n\");\r\n sb.push(\" type bool = any;\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n sb.push(\"export default ASModule;\\n\");\r\n return this.sb.join(\"\");\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n/** Tests if a namespace-like element has at least one compiled member. */\r\nfunction hasCompiledMember(element: Element): bool {\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) {\r\n switch (member.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n default: {\r\n if (member.is(CommonFlags.COMPILED) || hasCompiledMember(member)) return true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n","/**\r\n * A decompiler that generates low-level AssemblyScript from WebAssembly binaries.\r\n * @module decompiler\r\n *//***/\r\n\r\nimport {\r\n Module,\r\n NativeType,\r\n ExpressionId,\r\n UnaryOp,\r\n BinaryOp,\r\n HostOp,\r\n FunctionRef,\r\n ExpressionRef,\r\n Index,\r\n getFunctionName,\r\n getFunctionBody,\r\n getFunctionParamCount,\r\n getFunctionParamType,\r\n getFunctionResultType,\r\n getExpressionId,\r\n getExpressionType,\r\n getBlockName,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getIfCondition,\r\n getIfTrue,\r\n getIfFalse,\r\n getLoopName,\r\n getLoopBody,\r\n getBreakName,\r\n getBreakCondition,\r\n getGetLocalIndex,\r\n getSetLocalIndex,\r\n getSetLocalValue,\r\n getLoadOffset,\r\n getLoadPtr,\r\n getStoreOffset,\r\n getStorePtr,\r\n getStoreValue,\r\n getConstValueI32,\r\n getConstValueI64Low,\r\n getConstValueI64High,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getUnaryOp,\r\n getUnaryValue,\r\n getBinaryOp,\r\n getBinaryLeft,\r\n getBinaryRight,\r\n getSelectThen,\r\n getSelectElse,\r\n getSelectCondition,\r\n getDropValue,\r\n getReturnValue,\r\n getHostOp,\r\n getHostOperand\r\n} from \"./module\";\r\n\r\n// TODO :-)\r\n\r\nexport class Decompiler {\r\n\r\n static decompile(module: Module): string {\r\n var decompiler = new Decompiler();\r\n decompiler.decompile(module);\r\n return decompiler.finish();\r\n }\r\n\r\n text: string[] = [];\r\n functionId: i32 = 0;\r\n\r\n constructor() { }\r\n\r\n /** Decompiles a module to an AST that can then be serialized. */\r\n decompile(module: Module): void {\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n decompileFunction(func: FunctionRef): void {\r\n var name = getFunctionName(func) || \"$\" + this.functionId.toString(10);\r\n var body = getFunctionBody(func);\r\n this.push(\"function \");\r\n this.push(name);\r\n this.push(\"(\");\r\n for (let i: Index = 0, k: Index = getFunctionParamCount(func); i < k; ++i) {\r\n if (i > 0) this.push(\", \");\r\n this.push(\"$\");\r\n this.push(i.toString(10));\r\n this.push(\": \");\r\n this.push(nativeTypeToType(getFunctionParamType(func, i)));\r\n }\r\n this.push(\"): \");\r\n this.push(nativeTypeToType(getFunctionResultType(func)));\r\n this.push(\" \");\r\n if (getExpressionId(body) != ExpressionId.Block) {\r\n this.push(\"{\\n\");\r\n }\r\n this.decompileExpression(body);\r\n if (getExpressionId(body) != ExpressionId.Block) {\r\n this.push(\"\\n}\\n\");\r\n }\r\n ++this.functionId;\r\n }\r\n\r\n decompileExpression(expr: ExpressionRef): void {\r\n var id = getExpressionId(expr);\r\n var type = getExpressionType(expr);\r\n\r\n var nested: ExpressionRef;\r\n var string: string | null;\r\n var i: Index, k: Index;\r\n\r\n switch (id) {\r\n case ExpressionId.Block: { // TODO: magic\r\n if ((string = getBlockName(expr)) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"{\\n\");\r\n k = getBlockChildCount(expr);\r\n for (i = 0; i < k; ++i) {\r\n this.decompileExpression(getBlockChild(expr, i));\r\n }\r\n this.push(\"}\\n\");\r\n return;\r\n }\r\n case ExpressionId.If: {\r\n if (type == NativeType.None) {\r\n this.push(\"if (\");\r\n this.decompileExpression(getIfCondition(expr));\r\n this.push(\") \");\r\n this.decompileExpression(getIfTrue(expr));\r\n if (nested = getIfFalse(expr)) {\r\n this.push(\" else \");\r\n this.decompileExpression(nested);\r\n }\r\n } else {\r\n this.decompileExpression(getIfCondition(expr));\r\n this.push(\" ? \");\r\n this.decompileExpression(getIfTrue(expr));\r\n this.push(\" : \");\r\n this.decompileExpression(getIfFalse(expr));\r\n }\r\n return;\r\n }\r\n case ExpressionId.Loop: {\r\n if ((string = getLoopName(expr)) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"do \");\r\n this.decompileExpression(getLoopBody(expr));\r\n this.push(\"while (0);\\n\");\r\n }\r\n case ExpressionId.Break: {\r\n if (nested = getBreakCondition(expr)) {\r\n this.push(\"if (\");\r\n this.decompileExpression(nested);\r\n this.push(\") \");\r\n }\r\n if ((string = getBreakName(expr)) != null) {\r\n this.push(\"break \");\r\n this.push(string);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"break;\\n\");\r\n }\r\n return;\r\n }\r\n case ExpressionId.Switch:\r\n case ExpressionId.Call:\r\n case ExpressionId.CallImport:\r\n case ExpressionId.CallIndirect: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.GetLocal: {\r\n this.push(\"$\");\r\n this.push(getGetLocalIndex(expr).toString(10));\r\n return;\r\n }\r\n case ExpressionId.SetLocal: {\r\n this.push(\"$\");\r\n this.push(getSetLocalIndex(expr).toString(10));\r\n this.push(\" = \");\r\n this.decompileExpression(getSetLocalValue(expr));\r\n return;\r\n }\r\n case ExpressionId.GetGlobal:\r\n case ExpressionId.SetGlobal: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.Load: {\r\n this.push(\"load<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(getLoadOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getLoadPtr(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Store: {\r\n this.push(\"store<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(getStoreOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getStorePtr(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getStoreValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Const: {\r\n switch (type) {\r\n case NativeType.I32: {\r\n this.push(getConstValueI32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.I64: {\r\n this.push(\r\n i64_to_string(\r\n i64_new(\r\n getConstValueI64Low(expr),\r\n getConstValueI64High(expr)\r\n )\r\n )\r\n );\r\n return;\r\n }\r\n case NativeType.F32: {\r\n this.push(getConstValueF32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.F64: {\r\n this.push(getConstValueF64(expr).toString(10));\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Unary: {\r\n switch (getUnaryOp(expr)) {\r\n case UnaryOp.ClzI32: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI32: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI32: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NegF32:\r\n case UnaryOp.NegF64: {\r\n this.push(\"-\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.AbsF32: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF32: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF32: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF32: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF32: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF32: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.EqzI32:\r\n case UnaryOp.EqzI64: {\r\n this.push(\"!\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ClzI64: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI64: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI64: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.AbsF64: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF64: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF64: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF64: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF64: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF64: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ExtendI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ExtendU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.WrapI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.PromoteF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.DemoteF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Binary: { // TODO: precedence\r\n switch (getBinaryOp(expr)) {\r\n case BinaryOp.AddI32:\r\n case BinaryOp.AddI64:\r\n case BinaryOp.AddF32:\r\n case BinaryOp.AddF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" + \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.SubI32:\r\n case BinaryOp.SubI64:\r\n case BinaryOp.SubF32:\r\n case BinaryOp.SubF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" - \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.MulI32:\r\n case BinaryOp.MulI64:\r\n case BinaryOp.MulF32:\r\n case BinaryOp.MulF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" * \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivI32:\r\n case BinaryOp.DivI64:\r\n case BinaryOp.DivF32:\r\n case BinaryOp.DivF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.AndI32:\r\n case BinaryOp.AndI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" & \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.OrI32:\r\n case BinaryOp.OrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" | \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.XorI32:\r\n case BinaryOp.XorI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" ^ \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShlI32:\r\n case BinaryOp.ShlI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" << \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrU32:\r\n case BinaryOp.ShrU64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >>> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrI32:\r\n case BinaryOp.ShrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI32: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI32: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.EqI32:\r\n case BinaryOp.EqI64:\r\n case BinaryOp.EqF32:\r\n case BinaryOp.EqF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" == \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.NeI32:\r\n case BinaryOp.NeI64:\r\n case BinaryOp.NeF32:\r\n case BinaryOp.NeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" != \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtI32:\r\n case BinaryOp.LtI64:\r\n case BinaryOp.LtF32:\r\n case BinaryOp.LtF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeI32:\r\n case BinaryOp.LeI64:\r\n case BinaryOp.LeF32:\r\n case BinaryOp.LeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtI32:\r\n case BinaryOp.GtI64:\r\n case BinaryOp.GtF32:\r\n case BinaryOp.GtF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeI32:\r\n case BinaryOp.GeI64:\r\n case BinaryOp.GeF32:\r\n case BinaryOp.GeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI64: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI64: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.LtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.CopysignF32: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF32: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF32: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.CopysignF64: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF64: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF64: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n return;\r\n }\r\n case ExpressionId.Select: {\r\n this.push(\"select<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.decompileExpression(getSelectThen(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectElse(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectCondition(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Drop: {\r\n this.decompileExpression(getDropValue(expr));\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Return: {\r\n if (nested = getReturnValue(expr)) {\r\n this.push(\"return \");\r\n this.decompileExpression(nested);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"return;\\n\");\r\n }\r\n return;\r\n }\r\n case ExpressionId.Host: {\r\n switch (getHostOp(expr)) {\r\n case HostOp.CurrentMemory: {\r\n this.push(\"current_memory()\");\r\n return;\r\n }\r\n case HostOp.GrowMemory: {\r\n this.push(\"grow_memory(\");\r\n this.decompileExpression(getHostOperand(expr, 0));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Nop: {\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Unreachable: {\r\n this.push(\"unreachable()\");\r\n return;\r\n }\r\n case ExpressionId.AtomicCmpxchg:\r\n case ExpressionId.AtomicRMW:\r\n case ExpressionId.AtomicWait:\r\n case ExpressionId.AtomicWake:\r\n }\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n private push(text: string): void {\r\n // mostly here so we can add debugging if necessary\r\n this.text.push(text);\r\n }\r\n\r\n finish(): string {\r\n var ret = this.text.join(\"\");\r\n this.text = [];\r\n return ret;\r\n }\r\n}\r\n\r\nfunction nativeTypeToType(type: NativeType): string {\r\n switch (type) {\r\n case NativeType.None: return \"void\";\r\n case NativeType.I32: return \"i32\";\r\n case NativeType.I64: return \"i64\";\r\n case NativeType.F32: return \"f32\";\r\n case NativeType.F64: return \"f64\";\r\n case NativeType.Unreachable: throw new Error(\"unreachable type\");\r\n case NativeType.Auto: throw new Error(\"auto type\");\r\n default: throw new Error(\"unexpected type\");\r\n }\r\n}\r\n","/**\r\n * Low-level C-like compiler API.\r\n * @module index\r\n *//***/\r\n\r\nimport {\r\n Compiler,\r\n Options,\r\n Target,\r\n Feature\r\n} from \"./compiler\";\r\n\r\nimport {\r\n Decompiler\r\n} from \"./decompiler\";\r\n\r\nimport {\r\n IDLBuilder,\r\n TSDBuilder\r\n} from \"./definitions\";\r\n\r\nimport {\r\n DiagnosticMessage,\r\n DiagnosticCategory,\r\n formatDiagnosticMessage\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Module\r\n} from \"./module\";\r\n\r\nimport {\r\n Parser\r\n} from \"./parser\";\r\n\r\nimport {\r\n Program,\r\n LIBRARY_PREFIX\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 `noMemory` option. */\r\nexport function setNoMemory(options: Options, noMemory: bool): void {\r\n options.noMemory = noMemory;\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/** 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 };\r\n","const F64 = new Float64Array(1);\r\nconst F32 = new Float32Array(F64.buffer);\r\nconst I32 = new Int32Array(F64.buffer);\r\n\r\nglobal.f32_as_i32 = function(value) {\r\n F32[0] = value;\r\n return I32[0];\r\n};\r\n\r\nglobal.i32_as_f32 = function(value) {\r\n I32[0] = value;\r\n return F32[0];\r\n};\r\n\r\nglobal.f64_as_i64 = function(value) {\r\n F64[0] = value;\r\n return i64_new(I32[0], I32[1]);\r\n};\r\n\r\nglobal.i64_as_f64 = function(value) {\r\n I32[0] = i64_low(value);\r\n I32[1] = i64_high(value);\r\n return F64[0];\r\n};\r\n","module.exports = Long;\r\n\r\n/**\r\n * wasm optimizations, to do native i64 multiplication and divide\r\n */\r\nvar wasm = null;\r\n\r\ntry {\r\n wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([\r\n 0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11\r\n ])), {}).exports;\r\n} catch (e) {\r\n // no wasm support :(\r\n}\r\n\r\n/**\r\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\r\n * See the from* functions below for more convenient ways of constructing Longs.\r\n * @exports Long\r\n * @class A Long class for representing a 64 bit two's-complement integer value.\r\n * @param {number} low The low (signed) 32 bits of the long\r\n * @param {number} high The high (signed) 32 bits of the long\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @constructor\r\n */\r\nfunction Long(low, high, unsigned) {\r\n\r\n /**\r\n * The low 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.low = low | 0;\r\n\r\n /**\r\n * The high 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.high = high | 0;\r\n\r\n /**\r\n * Whether unsigned or not.\r\n * @type {boolean}\r\n */\r\n this.unsigned = !!unsigned;\r\n}\r\n\r\n// The internal representation of a long is the two given signed, 32-bit values.\r\n// We use 32-bit pieces because these are the size of integers on which\r\n// Javascript performs bit-operations. For operations like addition and\r\n// multiplication, we split each number into 16 bit pieces, which can easily be\r\n// multiplied within Javascript's floating-point representation without overflow\r\n// or change in sign.\r\n//\r\n// In the algorithms below, we frequently reduce the negative case to the\r\n// positive case by negating the input(s) and then post-processing the result.\r\n// Note that we must ALWAYS check specially whether those values are MIN_VALUE\r\n// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\r\n// a positive number, it overflows back into a negative). Not handling this\r\n// case would often result in infinite recursion.\r\n//\r\n// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\r\n// methods on which they depend.\r\n\r\n/**\r\n * An indicator used to reliably determine if an object is a Long or not.\r\n * @type {boolean}\r\n * @const\r\n * @private\r\n */\r\nLong.prototype.__isLong__;\r\n\r\nObject.defineProperty(Long.prototype, \"__isLong__\", { value: true });\r\n\r\n/**\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n * @inner\r\n */\r\nfunction isLong(obj) {\r\n return (obj && obj[\"__isLong__\"]) === true;\r\n}\r\n\r\n/**\r\n * Tests if the specified object is a Long.\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n */\r\nLong.isLong = isLong;\r\n\r\n/**\r\n * A cache of the Long representations of small integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar INT_CACHE = {};\r\n\r\n/**\r\n * A cache of the Long representations of small unsigned integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar UINT_CACHE = {};\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromInt(value, unsigned) {\r\n var obj, cachedObj, cache;\r\n if (unsigned) {\r\n value >>>= 0;\r\n if (cache = (0 <= value && value < 256)) {\r\n cachedObj = UINT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\r\n if (cache)\r\n UINT_CACHE[value] = obj;\r\n return obj;\r\n } else {\r\n value |= 0;\r\n if (cache = (-128 <= value && value < 128)) {\r\n cachedObj = INT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, value < 0 ? -1 : 0, false);\r\n if (cache)\r\n INT_CACHE[value] = obj;\r\n return obj;\r\n }\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given 32 bit integer value.\r\n * @function\r\n * @param {number} value The 32 bit integer in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromInt = fromInt;\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromNumber(value, unsigned) {\r\n if (isNaN(value))\r\n return unsigned ? UZERO : ZERO;\r\n if (unsigned) {\r\n if (value < 0)\r\n return UZERO;\r\n if (value >= TWO_PWR_64_DBL)\r\n return MAX_UNSIGNED_VALUE;\r\n } else {\r\n if (value <= -TWO_PWR_63_DBL)\r\n return MIN_VALUE;\r\n if (value + 1 >= TWO_PWR_63_DBL)\r\n return MAX_VALUE;\r\n }\r\n if (value < 0)\r\n return fromNumber(-value, unsigned).neg();\r\n return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\r\n * @function\r\n * @param {number} value The number in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromNumber = fromNumber;\r\n\r\n/**\r\n * @param {number} lowBits\r\n * @param {number} highBits\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromBits(lowBits, highBits, unsigned) {\r\n return new Long(lowBits, highBits, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\r\n * assumed to use 32 bits.\r\n * @function\r\n * @param {number} lowBits The low 32 bits\r\n * @param {number} highBits The high 32 bits\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromBits = fromBits;\r\n\r\n/**\r\n * @function\r\n * @param {number} base\r\n * @param {number} exponent\r\n * @returns {number}\r\n * @inner\r\n */\r\nvar pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\r\n\r\n/**\r\n * @param {string} str\r\n * @param {(boolean|number)=} unsigned\r\n * @param {number=} radix\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromString(str, unsigned, radix) {\r\n if (str.length === 0)\r\n throw Error('empty string');\r\n if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\")\r\n return ZERO;\r\n if (typeof unsigned === 'number') {\r\n // For goog.math.long compatibility\r\n radix = unsigned,\r\n unsigned = false;\r\n } else {\r\n unsigned = !! unsigned;\r\n }\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n\r\n var p;\r\n if ((p = str.indexOf('-')) > 0)\r\n throw Error('interior hyphen');\r\n else if (p === 0) {\r\n return fromString(str.substring(1), unsigned, radix).neg();\r\n }\r\n\r\n // Do several (8) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 8));\r\n\r\n var result = ZERO;\r\n for (var i = 0; i < str.length; i += 8) {\r\n var size = Math.min(8, str.length - i),\r\n value = parseInt(str.substring(i, i + size), radix);\r\n if (size < 8) {\r\n var power = fromNumber(pow_dbl(radix, size));\r\n result = result.mul(power).add(fromNumber(value));\r\n } else {\r\n result = result.mul(radixToPower);\r\n result = result.add(fromNumber(value));\r\n }\r\n }\r\n result.unsigned = unsigned;\r\n return result;\r\n}\r\n\r\n/**\r\n * Returns a Long representation of the given string, written using the specified radix.\r\n * @function\r\n * @param {string} str The textual representation of the Long\r\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromString = fromString;\r\n\r\n/**\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromValue(val, unsigned) {\r\n if (typeof val === 'number')\r\n return fromNumber(val, unsigned);\r\n if (typeof val === 'string')\r\n return fromString(val, unsigned);\r\n // Throws for non-objects, converts non-instanceof Long:\r\n return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);\r\n}\r\n\r\n/**\r\n * Converts the specified value to a Long using the appropriate from* function for its type.\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long}\r\n */\r\nLong.fromValue = fromValue;\r\n\r\n// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\r\n// no runtime penalty for these.\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_16_DBL = 1 << 16;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24_DBL = 1 << 24;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\r\n\r\n/**\r\n * @type {!Long}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ZERO = fromInt(0);\r\n\r\n/**\r\n * Signed zero.\r\n * @type {!Long}\r\n */\r\nLong.ZERO = ZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UZERO = fromInt(0, true);\r\n\r\n/**\r\n * Unsigned zero.\r\n * @type {!Long}\r\n */\r\nLong.UZERO = UZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ONE = fromInt(1);\r\n\r\n/**\r\n * Signed one.\r\n * @type {!Long}\r\n */\r\nLong.ONE = ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UONE = fromInt(1, true);\r\n\r\n/**\r\n * Unsigned one.\r\n * @type {!Long}\r\n */\r\nLong.UONE = UONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar NEG_ONE = fromInt(-1);\r\n\r\n/**\r\n * Signed negative one.\r\n * @type {!Long}\r\n */\r\nLong.NEG_ONE = NEG_ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);\r\n\r\n/**\r\n * Maximum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_VALUE = MAX_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);\r\n\r\n/**\r\n * Maximum unsigned value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MIN_VALUE = fromBits(0, 0x80000000|0, false);\r\n\r\n/**\r\n * Minimum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MIN_VALUE = MIN_VALUE;\r\n\r\n/**\r\n * @alias Long.prototype\r\n * @inner\r\n */\r\nvar LongPrototype = Long.prototype;\r\n\r\n/**\r\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\r\n * @returns {number}\r\n */\r\nLongPrototype.toInt = function toInt() {\r\n return this.unsigned ? this.low >>> 0 : this.low;\r\n};\r\n\r\n/**\r\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\r\n * @returns {number}\r\n */\r\nLongPrototype.toNumber = function toNumber() {\r\n if (this.unsigned)\r\n return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);\r\n return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\r\n};\r\n\r\n/**\r\n * Converts the Long to a string written in the specified radix.\r\n * @param {number=} radix Radix (2-36), defaults to 10\r\n * @returns {string}\r\n * @override\r\n * @throws {RangeError} If `radix` is out of range\r\n */\r\nLongPrototype.toString = function toString(radix) {\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n if (this.isZero())\r\n return '0';\r\n if (this.isNegative()) { // Unsigned Longs are never negative\r\n if (this.eq(MIN_VALUE)) {\r\n // We need to change the Long value before it can be negated, so we remove\r\n // the bottom-most digit in this base and then recurse to do the rest.\r\n var radixLong = fromNumber(radix),\r\n div = this.div(radixLong),\r\n rem1 = div.mul(radixLong).sub(this);\r\n return div.toString(radix) + rem1.toInt().toString(radix);\r\n } else\r\n return '-' + this.neg().toString(radix);\r\n }\r\n\r\n // Do several (6) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\r\n rem = this;\r\n var result = '';\r\n while (true) {\r\n var remDiv = rem.div(radixToPower),\r\n intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\r\n digits = intval.toString(radix);\r\n rem = remDiv;\r\n if (rem.isZero())\r\n return digits + result;\r\n else {\r\n while (digits.length < 6)\r\n digits = '0' + digits;\r\n result = '' + digits + result;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as a signed integer.\r\n * @returns {number} Signed high bits\r\n */\r\nLongPrototype.getHighBits = function getHighBits() {\r\n return this.high;\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned high bits\r\n */\r\nLongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\r\n return this.high >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as a signed integer.\r\n * @returns {number} Signed low bits\r\n */\r\nLongPrototype.getLowBits = function getLowBits() {\r\n return this.low;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned low bits\r\n */\r\nLongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\r\n return this.low >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the number of bits needed to represent the absolute value of this Long.\r\n * @returns {number}\r\n */\r\nLongPrototype.getNumBitsAbs = function getNumBitsAbs() {\r\n if (this.isNegative()) // Unsigned Longs are never negative\r\n return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\r\n var val = this.high != 0 ? this.high : this.low;\r\n for (var bit = 31; bit > 0; bit--)\r\n if ((val & (1 << bit)) != 0)\r\n break;\r\n return this.high != 0 ? bit + 33 : bit + 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isZero = function isZero() {\r\n return this.high === 0 && this.low === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eqz = LongPrototype.isZero;\r\n\r\n/**\r\n * Tests if this Long's value is negative.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isNegative = function isNegative() {\r\n return !this.unsigned && this.high < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is positive.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isPositive = function isPositive() {\r\n return this.unsigned || this.high >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is odd.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isOdd = function isOdd() {\r\n return (this.low & 1) === 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is even.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isEven = function isEven() {\r\n return (this.low & 1) === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.equals = function equals(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)\r\n return false;\r\n return this.high === other.high && this.low === other.low;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eq = LongPrototype.equals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.notEquals = function notEquals(other) {\r\n return !this.eq(/* validates */ other);\r\n};\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.neq = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ne = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThan = function lessThan(other) {\r\n return this.comp(/* validates */ other) < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lt = LongPrototype.lessThan;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\r\n return this.comp(/* validates */ other) <= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lte = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.le = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThan = function greaterThan(other) {\r\n return this.comp(/* validates */ other) > 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gt = LongPrototype.greaterThan;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\r\n return this.comp(/* validates */ other) >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gte = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ge = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Compares this Long's value with the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.compare = function compare(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.eq(other))\r\n return 0;\r\n var thisNeg = this.isNegative(),\r\n otherNeg = other.isNegative();\r\n if (thisNeg && !otherNeg)\r\n return -1;\r\n if (!thisNeg && otherNeg)\r\n return 1;\r\n // At this point the sign bits are the same\r\n if (!this.unsigned)\r\n return this.sub(other).isNegative() ? -1 : 1;\r\n // Both are positive if at least one is unsigned\r\n return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;\r\n};\r\n\r\n/**\r\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.comp = LongPrototype.compare;\r\n\r\n/**\r\n * Negates this Long's value.\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.negate = function negate() {\r\n if (!this.unsigned && this.eq(MIN_VALUE))\r\n return MIN_VALUE;\r\n return this.not().add(ONE);\r\n};\r\n\r\n/**\r\n * Negates this Long's value. This is an alias of {@link Long#negate}.\r\n * @function\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.neg = LongPrototype.negate;\r\n\r\n/**\r\n * Returns the sum of this and the specified Long.\r\n * @param {!Long|number|string} addend Addend\r\n * @returns {!Long} Sum\r\n */\r\nLongPrototype.add = function add(addend) {\r\n if (!isLong(addend))\r\n addend = fromValue(addend);\r\n\r\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = addend.high >>> 16;\r\n var b32 = addend.high & 0xFFFF;\r\n var b16 = addend.low >>> 16;\r\n var b00 = addend.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 + b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 + b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 + b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 + b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long.\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.subtract = function subtract(subtrahend) {\r\n if (!isLong(subtrahend))\r\n subtrahend = fromValue(subtrahend);\r\n return this.add(subtrahend.neg());\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\r\n * @function\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.sub = LongPrototype.subtract;\r\n\r\n/**\r\n * Returns the product of this and the specified Long.\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.multiply = function multiply(multiplier) {\r\n if (this.isZero())\r\n return ZERO;\r\n if (!isLong(multiplier))\r\n multiplier = fromValue(multiplier);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = wasm.mul(this.low,\r\n this.high,\r\n multiplier.low,\r\n multiplier.high);\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (multiplier.isZero())\r\n return ZERO;\r\n if (this.eq(MIN_VALUE))\r\n return multiplier.isOdd() ? MIN_VALUE : ZERO;\r\n if (multiplier.eq(MIN_VALUE))\r\n return this.isOdd() ? MIN_VALUE : ZERO;\r\n\r\n if (this.isNegative()) {\r\n if (multiplier.isNegative())\r\n return this.neg().mul(multiplier.neg());\r\n else\r\n return this.neg().mul(multiplier).neg();\r\n } else if (multiplier.isNegative())\r\n return this.mul(multiplier.neg()).neg();\r\n\r\n // If both longs are small, use float multiplication\r\n if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\r\n return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);\r\n\r\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\r\n // We can skip products that would overflow.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = multiplier.high >>> 16;\r\n var b32 = multiplier.high & 0xFFFF;\r\n var b16 = multiplier.low >>> 16;\r\n var b00 = multiplier.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 * b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 * b00;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c16 += a00 * b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 * b00;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a16 * b16;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a00 * b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\r\n * @function\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.mul = LongPrototype.multiply;\r\n\r\n/**\r\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\r\n * unsigned if this Long is unsigned.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.divide = function divide(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n if (divisor.isZero())\r\n throw Error('division by zero');\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n // guard against signed division overflow: the largest\r\n // negative number / -1 would be 1 larger than the largest\r\n // positive number, due to two's complement.\r\n if (!this.unsigned &&\r\n this.high === -0x80000000 &&\r\n divisor.low === -1 && divisor.high === -1) {\r\n // be consistent with non-wasm code path\r\n return this;\r\n }\r\n var low = (this.unsigned ? wasm.div_u : wasm.div_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (this.isZero())\r\n return this.unsigned ? UZERO : ZERO;\r\n var approx, rem, res;\r\n if (!this.unsigned) {\r\n // This section is only relevant for signed longs and is derived from the\r\n // closure library as a whole.\r\n if (this.eq(MIN_VALUE)) {\r\n if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\r\n return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\r\n else if (divisor.eq(MIN_VALUE))\r\n return ONE;\r\n else {\r\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\r\n var halfThis = this.shr(1);\r\n approx = halfThis.div(divisor).shl(1);\r\n if (approx.eq(ZERO)) {\r\n return divisor.isNegative() ? ONE : NEG_ONE;\r\n } else {\r\n rem = this.sub(divisor.mul(approx));\r\n res = approx.add(rem.div(divisor));\r\n return res;\r\n }\r\n }\r\n } else if (divisor.eq(MIN_VALUE))\r\n return this.unsigned ? UZERO : ZERO;\r\n if (this.isNegative()) {\r\n if (divisor.isNegative())\r\n return this.neg().div(divisor.neg());\r\n return this.neg().div(divisor).neg();\r\n } else if (divisor.isNegative())\r\n return this.div(divisor.neg()).neg();\r\n res = ZERO;\r\n } else {\r\n // The algorithm below has not been made for unsigned longs. It's therefore\r\n // required to take special care of the MSB prior to running it.\r\n if (!divisor.unsigned)\r\n divisor = divisor.toUnsigned();\r\n if (divisor.gt(this))\r\n return UZERO;\r\n if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\r\n return UONE;\r\n res = UZERO;\r\n }\r\n\r\n // Repeat the following until the remainder is less than other: find a\r\n // floating-point that approximates remainder / other *from below*, add this\r\n // into the result, and subtract it from the remainder. It is critical that\r\n // the approximate value is less than or equal to the real value so that the\r\n // remainder never becomes negative.\r\n rem = this;\r\n while (rem.gte(divisor)) {\r\n // Approximate the result of division. This may be a little greater or\r\n // smaller than the actual value.\r\n approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\r\n\r\n // We will tweak the approximate result by changing it in the 48-th digit or\r\n // the smallest non-fractional digit, whichever is larger.\r\n var log2 = Math.ceil(Math.log(approx) / Math.LN2),\r\n delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),\r\n\r\n // Decrease the approximation until it is smaller than the remainder. Note\r\n // that if it is too large, the product overflows and is negative.\r\n approxRes = fromNumber(approx),\r\n approxRem = approxRes.mul(divisor);\r\n while (approxRem.isNegative() || approxRem.gt(rem)) {\r\n approx -= delta;\r\n approxRes = fromNumber(approx, this.unsigned);\r\n approxRem = approxRes.mul(divisor);\r\n }\r\n\r\n // We know the answer can't be zero... and actually, zero would cause\r\n // infinite recursion since we would make no progress.\r\n if (approxRes.isZero())\r\n approxRes = ONE;\r\n\r\n res = res.add(approxRes);\r\n rem = rem.sub(approxRem);\r\n }\r\n return res;\r\n};\r\n\r\n/**\r\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.div = LongPrototype.divide;\r\n\r\n/**\r\n * Returns this Long modulo the specified.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.modulo = function modulo(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n return this.sub(this.div(divisor).mul(divisor));\r\n};\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.mod = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.rem = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns the bitwise NOT of this Long.\r\n * @returns {!Long}\r\n */\r\nLongPrototype.not = function not() {\r\n return fromBits(~this.low, ~this.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise AND of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.and = function and(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise OR of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.or = function or(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise XOR of this Long and the given one.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.xor = function xor(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftLeft = function shiftLeft(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);\r\n else\r\n return fromBits(0, this.low << (numBits - 32), this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shl = LongPrototype.shiftLeft;\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRight = function shiftRight(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);\r\n else\r\n return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr = LongPrototype.shiftRight;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n numBits &= 63;\r\n if (numBits === 0)\r\n return this;\r\n else {\r\n var high = this.high;\r\n if (numBits < 32) {\r\n var low = this.low;\r\n return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);\r\n } else if (numBits === 32)\r\n return fromBits(high, 0, this.unsigned);\r\n else\r\n return fromBits(high >>> (numBits - 32), 0, this.unsigned);\r\n }\r\n};\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shru = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Converts this Long to signed.\r\n * @returns {!Long} Signed long\r\n */\r\nLongPrototype.toSigned = function toSigned() {\r\n if (!this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, false);\r\n};\r\n\r\n/**\r\n * Converts this Long to unsigned.\r\n * @returns {!Long} Unsigned long\r\n */\r\nLongPrototype.toUnsigned = function toUnsigned() {\r\n if (this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, true);\r\n};\r\n\r\n/**\r\n * Converts this Long to its byte representation.\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {!Array.} Byte representation\r\n */\r\nLongPrototype.toBytes = function toBytes(le) {\r\n return le ? this.toBytesLE() : this.toBytesBE();\r\n};\r\n\r\n/**\r\n * Converts this Long to its little endian byte representation.\r\n * @returns {!Array.} Little endian byte representation\r\n */\r\nLongPrototype.toBytesLE = function toBytesLE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n lo & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo >>> 16 & 0xff,\r\n lo >>> 24 ,\r\n hi & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi >>> 16 & 0xff,\r\n hi >>> 24\r\n ];\r\n};\r\n\r\n/**\r\n * Converts this Long to its big endian byte representation.\r\n * @returns {!Array.} Big endian byte representation\r\n */\r\nLongPrototype.toBytesBE = function toBytesBE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n hi >>> 24 ,\r\n hi >>> 16 & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi & 0xff,\r\n lo >>> 24 ,\r\n lo >>> 16 & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo & 0xff\r\n ];\r\n};\r\n\r\n/**\r\n * Creates a Long from its byte representation.\r\n * @param {!Array.} bytes Byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytes = function fromBytes(bytes, unsigned, le) {\r\n return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);\r\n};\r\n\r\n/**\r\n * Creates a Long from its little endian byte representation.\r\n * @param {!Array.} bytes Little endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesLE = function fromBytesLE(bytes, unsigned) {\r\n return new Long(\r\n bytes[0] |\r\n bytes[1] << 8 |\r\n bytes[2] << 16 |\r\n bytes[3] << 24,\r\n bytes[4] |\r\n bytes[5] << 8 |\r\n bytes[6] << 16 |\r\n bytes[7] << 24,\r\n unsigned\r\n );\r\n};\r\n\r\n/**\r\n * Creates a Long from its big endian byte representation.\r\n * @param {!Array.} bytes Big endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesBE = function fromBytesBE(bytes, unsigned) {\r\n return new Long(\r\n bytes[4] << 24 |\r\n bytes[5] << 16 |\r\n bytes[6] << 8 |\r\n bytes[7],\r\n bytes[0] << 24 |\r\n bytes[1] << 16 |\r\n bytes[2] << 8 |\r\n bytes[3],\r\n unsigned\r\n );\r\n};\r\n","const Long = global.Long || require(\"long\");\r\n\r\nglobal.i64_zero = Long.ZERO;\r\n\r\nglobal.i64_one = Long.ONE;\r\n\r\nglobal.i64_new = function(lo, hi) {\r\n return Long.fromBits(lo, hi);\r\n};\r\n\r\nglobal.i64_low = function(value) {\r\n return value.low;\r\n};\r\n\r\nglobal.i64_high = function(value) {\r\n return value.high;\r\n};\r\n\r\nglobal.i64_add = function(left, right) {\r\n return left.add(right);\r\n};\r\n\r\nglobal.i64_sub = function(left, right) {\r\n return left.sub(right);\r\n};\r\n\r\nglobal.i64_mul = function(left, right) {\r\n return left.mul(right);\r\n};\r\n\r\nglobal.i64_div = function(left, right) {\r\n return left.div(right);\r\n};\r\n\r\nglobal.i64_div_u = function(left, right) {\r\n return left.toUnsigned().div(right.toUnsigned()).toSigned();\r\n};\r\n\r\nglobal.i64_rem = function(left, right) {\r\n return left.mod(right);\r\n};\r\n\r\nglobal.i64_rem_u = function(left, right) {\r\n return left.toUnsigned().mod(right.toUnsigned()).toSigned();\r\n};\r\n\r\nglobal.i64_and = function(left, right) {\r\n return left.and(right);\r\n};\r\n\r\nglobal.i64_or = function(left, right) {\r\n return left.or(right);\r\n};\r\n\r\nglobal.i64_xor = function(left, right) {\r\n return left.xor(right);\r\n};\r\n\r\nglobal.i64_shl = function(left, right) {\r\n return left.shl(right);\r\n};\r\n\r\nglobal.i64_shr = function(left, right) {\r\n return left.shr(right);\r\n};\r\n\r\nglobal.i64_shr_u = function(left, right) {\r\n return left.shru(right);\r\n};\r\n\r\nglobal.i64_not = function(value) {\r\n return value.not();\r\n};\r\n\r\nglobal.i64_eq = function(left, right) {\r\n return left.eq(right);\r\n};\r\n\r\nglobal.i64_ne = function(left, right) {\r\n return left.ne(right);\r\n};\r\n\r\nglobal.i64_align = function(value, alignment) {\r\n assert(alignment && (alignment & (alignment - 1)) == 0);\r\n var mask = Long.fromInt(alignment - 1);\r\n return value.add(mask).and(mask.not());\r\n};\r\n\r\nglobal.i64_is_i8 = function(value) {\r\n return value.high === 0 && (value.low >= 0 && value.low <= i8.MAX_VALUE)\r\n || value.high === -1 && (value.low >= i8.MIN_VALUE && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_i16 = function(value) {\r\n return value.high === 0 && (value.low >= 0 && value.low <= i16.MAX_VALUE)\r\n || value.high === -1 && (value.low >= i16.MIN_VALUE && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_i32 = function(value) {\r\n return (value.high === 0 && value.low >= 0)\r\n || (value.high === -1 && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_u8 = function(value) {\r\n return value.high === 0 && value.low >= 0 && value.low <= u8.MAX_VALUE;\r\n};\r\n\r\nglobal.i64_is_u16 = function(value) {\r\n return value.high === 0 && value.low >= 0 && value.low <= u16.MAX_VALUE;\r\n};\r\n\r\nglobal.i64_is_u32 = function(value) {\r\n return value.high === 0;\r\n};\r\n\r\nglobal.i64_is_bool = function(value) {\r\n return value.high === 0 && (value.low === 0 || value.low === 1);\r\n};\r\n\r\nconst minSafeF32 = Long.fromNumber(f32.MIN_SAFE_INTEGER);\r\nconst maxSafeF32 = Long.fromNumber(f32.MAX_SAFE_INTEGER);\r\n\r\nglobal.i64_is_f32 = function(value) {\r\n return value.gte(minSafeF32) && value.lte(maxSafeF32);\r\n};\r\n\r\nconst minSafeF64 = Long.fromNumber(f64.MIN_SAFE_INTEGER);\r\nconst maxSafeF64 = Long.fromNumber(f64.MAX_SAFE_INTEGER);\r\n\r\nglobal.i64_is_f64 = function(value) {\r\n return value.gte(minSafeF64) && value.lte(maxSafeF64);\r\n};\r\n\r\nglobal.i64_to_f32 = function(value) {\r\n return global.Math.fround(value.toNumber());\r\n};\r\n\r\nglobal.i64_to_f64 = function(value) {\r\n return value.toNumber();\r\n};\r\n\r\nglobal.i64_to_string = function(value, unsigned) {\r\n return (unsigned ? value.toUnsigned() : value).toString(10);\r\n};\r\n","/** @module util *//***/\r\n\r\n/** Reads a 32-bit integer from the specified buffer. */\r\nexport function readI32(buffer: Uint8Array, offset: i32): i32 {\r\n return buffer[offset ]\r\n | buffer[offset + 1] << 8\r\n | buffer[offset + 2] << 16\r\n | buffer[offset + 3] << 24;\r\n}\r\n\r\n/** Writes a 32-bit integer to the specified buffer. */\r\nexport function writeI32(value: i32, buffer: Uint8Array, offset: i32): void {\r\n buffer[offset ] = value;\r\n buffer[offset + 1] = value >>> 8;\r\n buffer[offset + 2] = value >>> 16;\r\n buffer[offset + 3] = value >>> 24;\r\n}\r\n\r\n/** Reads a 64-bit integer from the specified buffer. */\r\nexport function readI64(buffer: Uint8Array, offset: i32): I64 {\r\n var lo = readI32(buffer, offset);\r\n var hi = readI32(buffer, offset + 4);\r\n return i64_new(lo, hi);\r\n}\r\n\r\n/** Writes a 64-bit integer to the specified buffer. */\r\nexport function writeI64(value: I64, buffer: Uint8Array, offset: i32): void {\r\n writeI32(i64_low(value), buffer, offset);\r\n writeI32(i64_high(value), buffer, offset + 4);\r\n}\r\n\r\n/** Reads a 32-bit float from the specified buffer. */\r\nexport function readF32(buffer: Uint8Array, offset: i32): f32 {\r\n return i32_as_f32(readI32(buffer, offset));\r\n}\r\n\r\n/** Writes a 32-bit float to the specified buffer. */\r\nexport function writeF32(value: f32, buffer: Uint8Array, offset: i32): void {\r\n writeI32(f32_as_i32(value), buffer, offset);\r\n}\r\n\r\n/** Reads a 64-bit float from the specified buffer. */\r\nexport function readF64(buffer: Uint8Array, offset: i32): f64 {\r\n return i64_as_f64(readI64(buffer, offset));\r\n}\r\n\r\n/** Writes a 64-bit float to the specified buffer. */\r\nexport function writeF64(value: f64, buffer: Uint8Array, offset: i32): void {\r\n var valueI64 = f64_as_i64(value);\r\n writeI32(i64_low(valueI64), buffer, offset);\r\n writeI32(i64_high(valueI64), buffer, offset + 4);\r\n}\r\n","/** @module util *//***/\r\n\r\nconst indentX1 = \" \";\r\nconst indentX2 = \" \";\r\nconst indentX4 = \" \";\r\n\r\n/** Creates an indentation matching the number of specified levels. */\r\nexport function indent(sb: string[], level: i32): void {\r\n while (level >= 4) {\r\n sb.push(indentX4);\r\n level -= 4;\r\n }\r\n if (level >= 2) {\r\n sb.push(indentX2);\r\n level -= 2;\r\n }\r\n if (level) {\r\n sb.push(indentX1);\r\n }\r\n}\r\n","/** @module util *//***/\r\n\r\nimport {\r\n CharCode\r\n} from \"./charcode\";\r\n\r\nconst separator = CharCode.SLASH;\r\n\r\n/**\r\n * Normalizes the specified path, removing interior placeholders.\r\n * Expects a posix-compatible relative path (not Windows compatible).\r\n */\r\nexport function normalizePath(path: string): string {\r\n var pos = 0;\r\n var len = path.length;\r\n\r\n // trim leading './'\r\n while (pos + 1 < len &&\r\n path.charCodeAt(pos) == CharCode.DOT &&\r\n path.charCodeAt(pos + 1) == separator\r\n ) {\r\n pos += 2;\r\n }\r\n\r\n if (pos > 0 || len < path.length) {\r\n path = path.substring(pos, len);\r\n len -= pos;\r\n pos = 0;\r\n }\r\n\r\n var atEnd: bool;\r\n while (pos + 1 < len) {\r\n atEnd = false;\r\n\r\n // we are only interested in '/.' sequences ...\r\n if (\r\n path.charCodeAt(pos) == separator &&\r\n path.charCodeAt(pos + 1) == CharCode.DOT\r\n ) {\r\n // '/.' ( '/' | $ )\r\n atEnd = pos + 2 == len;\r\n if (atEnd ||\r\n pos + 2 < len &&\r\n path.charCodeAt(pos + 2) == separator\r\n ) {\r\n path = atEnd\r\n ? path.substring(0, pos)\r\n : path.substring(0, pos) + path.substring(pos + 2);\r\n len -= 2;\r\n continue;\r\n }\r\n\r\n // '/.' ( './' | '.' $ )\r\n atEnd = pos + 3 == len;\r\n if (atEnd && path.charCodeAt(pos + 2) == CharCode.DOT ||\r\n pos + 3 < len &&\r\n path.charCodeAt(pos + 2) == CharCode.DOT &&\r\n path.charCodeAt(pos + 3) == separator\r\n ) {\r\n // find preceeding '/'\r\n let ipos = pos;\r\n while (--ipos >= 0) {\r\n if (path.charCodeAt(ipos) == separator) {\r\n if (pos - ipos != 3 ||\r\n path.charCodeAt(ipos + 1) != CharCode.DOT ||\r\n path.charCodeAt(ipos + 2) != CharCode.DOT\r\n ) { // exclude '..' itself\r\n path = atEnd\r\n ? path.substring(0, ipos)\r\n : path.substring(0, ipos) + path.substring(pos + 3);\r\n len -= pos + 3 - ipos;\r\n pos = ipos - 1; // incremented again at end of loop\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // if there's no preceeding '/', trim start if non-empty\r\n if (ipos < 0 && pos > 0) {\r\n if (pos != 2 ||\r\n path.charCodeAt(0) != CharCode.DOT ||\r\n path.charCodeAt(1) != CharCode.DOT\r\n ) { // exclude '..' itself\r\n path = path.substring(pos + 4);\r\n len = path.length;\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n pos++;\r\n }\r\n return len > 0 ? path : \".\";\r\n}\r\n\r\n/** Resolves the specified path relative to the specified origin. */\r\nexport function resolvePath(normalizedPath: string, origin: string): string {\r\n if (normalizedPath.startsWith(\"std/\")) {\r\n return normalizedPath;\r\n }\r\n return normalizePath(\r\n dirname(origin) + String.fromCharCode(separator) + normalizedPath\r\n );\r\n}\r\n\r\n/** Obtains the directory portion of a normalized path. */\r\nexport function dirname(normalizedPath: string): string {\r\n var pos = normalizedPath.length;\r\n while (--pos > 0) {\r\n if (normalizedPath.charCodeAt(pos) == separator) {\r\n return normalizedPath.substring(0, pos);\r\n }\r\n }\r\n return \".\";\r\n}\r\n","/** @module util *//***/\r\n\r\n/** An enum of named character codes. */\r\nexport const enum CharCode {\r\n\r\n NULL = 0,\r\n LINEFEED = 0x0A,\r\n CARRIAGERETURN = 0x0D,\r\n LINESEPARATOR = 0x2028,\r\n PARAGRAPHSEPARATOR = 0x2029,\r\n NEXTLINE = 0x0085,\r\n\r\n SPACE = 0x20,\r\n NONBREAKINGSPACE = 0xA0,\r\n ENQUAD = 0x2000,\r\n EMQUAD = 0x2001,\r\n ENSPACE = 0x2002,\r\n EMSPACE = 0x2003,\r\n THREEPEREMSPACE = 0x2004,\r\n FOURPEREMSPACE = 0x2005,\r\n SIXPEREMSPACE = 0x2006,\r\n FIGURESPACE = 0x2007,\r\n PUNCTUATIONSPACE = 0x2008,\r\n THINSPACE = 0x2009,\r\n HAIRSPACE = 0x200A,\r\n ZEROWIDTHSPACE = 0x200B,\r\n NARROWNOBREAKSPACE = 0x202F,\r\n IDEOGRAPHICSPACE = 0x3000,\r\n MATHEMATICALSPACE = 0x205F,\r\n OGHAM = 0x1680,\r\n\r\n _ = 0x5F,\r\n\r\n _0 = 0x30,\r\n _1 = 0x31,\r\n _2 = 0x32,\r\n _3 = 0x33,\r\n _4 = 0x34,\r\n _5 = 0x35,\r\n _6 = 0x36,\r\n _7 = 0x37,\r\n _8 = 0x38,\r\n _9 = 0x39,\r\n\r\n a = 0x61,\r\n b = 0x62,\r\n c = 0x63,\r\n d = 0x64,\r\n e = 0x65,\r\n f = 0x66,\r\n g = 0x67,\r\n h = 0x68,\r\n i = 0x69,\r\n j = 0x6A,\r\n k = 0x6B,\r\n l = 0x6C,\r\n m = 0x6D,\r\n n = 0x6E,\r\n o = 0x6F,\r\n p = 0x70,\r\n q = 0x71,\r\n r = 0x72,\r\n s = 0x73,\r\n t = 0x74,\r\n u = 0x75,\r\n v = 0x76,\r\n w = 0x77,\r\n x = 0x78,\r\n y = 0x79,\r\n z = 0x7A,\r\n\r\n A = 0x41,\r\n B = 0x42,\r\n C = 0x43,\r\n D = 0x44,\r\n E = 0x45,\r\n F = 0x46,\r\n G = 0x47,\r\n H = 0x48,\r\n I = 0x49,\r\n J = 0x4A,\r\n K = 0x4B,\r\n L = 0x4C,\r\n M = 0x4D,\r\n N = 0x4E,\r\n O = 0x4F,\r\n P = 0x50,\r\n Q = 0x51,\r\n R = 0x52,\r\n S = 0x53,\r\n T = 0x54,\r\n U = 0x55,\r\n V = 0x56,\r\n W = 0x57,\r\n X = 0x58,\r\n Y = 0x59,\r\n Z = 0x5a,\r\n\r\n AMPERSAND = 0x26,\r\n ASTERISK = 0x2A,\r\n AT = 0x40,\r\n BACKSLASH = 0x5C,\r\n BACKTICK = 0x60,\r\n BAR = 0x7C,\r\n CARET = 0x5E,\r\n CLOSEBRACE = 0x7D,\r\n CLOSEBRACKET = 0x5D,\r\n CLOSEPAREN = 0x29,\r\n COLON = 0x3A,\r\n COMMA = 0x2C,\r\n DOLLAR = 0x24,\r\n DOT = 0x2E,\r\n DOUBLEQUOTE = 0x22,\r\n EQUALS = 0x3D,\r\n EXCLAMATION = 0x21,\r\n GREATERTHAN = 0x3E,\r\n HASH = 0x23,\r\n LESSTHAN = 0x3C,\r\n MINUS = 0x2D,\r\n OPENBRACE = 0x7B,\r\n OPENBRACKET = 0x5B,\r\n OPENPAREN = 0x28,\r\n PERCENT = 0x25,\r\n PLUS = 0x2B,\r\n QUESTION = 0x3F,\r\n SEMICOLON = 0x3B,\r\n SINGLEQUOTE = 0x27,\r\n SLASH = 0x2F,\r\n TILDE = 0x7E,\r\n\r\n BACKSPACE = 0x08,\r\n FORMFEED = 0x0C,\r\n BYTEORDERMARK = 0xFEFF,\r\n TAB = 0x09,\r\n VERTICALTAB = 0x0B\r\n}\r\n\r\n/** Tests if the specified character code is some sort of line break. */\r\nexport function isLineBreak(c: CharCode): bool {\r\n switch (c) {\r\n case CharCode.LINEFEED:\r\n case CharCode.CARRIAGERETURN:\r\n case CharCode.LINESEPARATOR:\r\n case CharCode.PARAGRAPHSEPARATOR: {\r\n return true;\r\n }\r\n default: {\r\n return false;\r\n }\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is some sort of white space. */\r\nexport function isWhiteSpace(c: i32): bool {\r\n switch (c) {\r\n case CharCode.SPACE:\r\n case CharCode.TAB:\r\n case CharCode.VERTICALTAB:\r\n case CharCode.FORMFEED:\r\n case CharCode.NONBREAKINGSPACE:\r\n case CharCode.NEXTLINE:\r\n case CharCode.OGHAM:\r\n case CharCode.NARROWNOBREAKSPACE:\r\n case CharCode.MATHEMATICALSPACE:\r\n case CharCode.IDEOGRAPHICSPACE:\r\n case CharCode.BYTEORDERMARK: {\r\n return true;\r\n }\r\n default: {\r\n return c >= CharCode.ENQUAD && c <= CharCode.ZEROWIDTHSPACE;\r\n }\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is a valid decimal digit. */\r\nexport function isDecimalDigit(c: i32): bool {\r\n return c >= CharCode._0 && c <= CharCode._9;\r\n}\r\n\r\n/** Tests if the specified character code is a valid octal digit. */\r\nexport function isOctalDigit(c: i32): bool {\r\n return c >= CharCode._0 && c <= CharCode._7;\r\n}\r\n\r\n/** Tests if the specified character code is a valid start of an identifier. */\r\nexport function isIdentifierStart(c: i32): bool {\r\n return c >= CharCode.A && c <= CharCode.Z\r\n || c >= CharCode.a && c <= CharCode.z\r\n || c == CharCode.DOLLAR\r\n || c == CharCode._\r\n || c > 0x7f && isUnicodeIdentifierStart(c);\r\n}\r\n\r\n/** Tests if the specified character code is a valid keyword character. */\r\nexport function isKeywordCharacter(c: i32): bool {\r\n return c >= CharCode.a && c <= CharCode.z;\r\n}\r\n\r\n/** Tests if the specified character code is a valid part of an identifier. */\r\nexport function isIdentifierPart(c: i32): bool {\r\n return c >= CharCode.A && c <= CharCode.Z\r\n || c >= CharCode.a && c <= CharCode.z\r\n || c >= CharCode._0 && c <= CharCode._9\r\n || c == CharCode.DOLLAR\r\n || c == CharCode._\r\n || c > 0x7f && isUnicodeIdentifierPart(c);\r\n}\r\n\r\n// storing as u16 to save memory\r\nconst unicodeIdentifierStart: u16[] = [\r\n 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736,\r\n 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906,\r\n 908, 908, 910, 929, 931,\r\n 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514,\r\n 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774,\r\n 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969,\r\n 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088,\r\n 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384,\r\n 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474,\r\n 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529,\r\n 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613,\r\n 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705,\r\n 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784,\r\n 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873,\r\n 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958,\r\n 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986,\r\n 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125,\r\n 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240,\r\n 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333,\r\n 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455,\r\n 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634,\r\n 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725,\r\n 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757,\r\n 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840,\r\n 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186,\r\n 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293,\r\n 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696,\r\n 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798,\r\n 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992,\r\n 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872,\r\n 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016,\r\n 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389,\r\n 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688,\r\n 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141,\r\n 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424,\r\n 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025,\r\n 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130,\r\n 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188,\r\n 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469,\r\n 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505,\r\n 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584,\r\n 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520,\r\n 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670,\r\n 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720,\r\n 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329,\r\n 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540,\r\n 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893,\r\n 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538,\r\n 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888,\r\n 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015,\r\n 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259,\r\n 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520,\r\n 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695,\r\n 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739,\r\n 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798,\r\n 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243,\r\n 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285,\r\n 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323,\r\n 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019,\r\n 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474,\r\n 65479, 65482, 65487, 65490, 65495, 65498, 65500,\r\n];\r\nconst unicodeIdentifierPart: u16[] = [\r\n 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736,\r\n 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906,\r\n 908, 908, 910, 929, 931,\r\n 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415,\r\n 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520,\r\n 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788,\r\n 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112,\r\n 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423,\r\n 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482,\r\n 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525,\r\n 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602,\r\n 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632,\r\n 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693,\r\n 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757,\r\n 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821,\r\n 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884,\r\n 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929,\r\n 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972,\r\n 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018,\r\n 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088,\r\n 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157,\r\n 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216,\r\n 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285,\r\n 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340,\r\n 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424,\r\n 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515,\r\n 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570,\r\n 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720,\r\n 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751,\r\n 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789,\r\n 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895,\r\n 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028,\r\n 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304,\r\n 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744,\r\n 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808,\r\n 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108,\r\n 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902,\r\n 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099,\r\n 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272,\r\n 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516,\r\n 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783,\r\n 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155,\r\n 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676,\r\n 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027,\r\n 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134,\r\n 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205,\r\n 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417,\r\n 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477,\r\n 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517,\r\n 8521, 8526, 8526, 8544, 8584,\r\n 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559,\r\n 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686,\r\n 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728,\r\n 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335,\r\n 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449,\r\n 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799,\r\n 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512,\r\n 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783,\r\n 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072,\r\n 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309,\r\n 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584,\r\n 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741,\r\n 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808,\r\n 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203,\r\n 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275,\r\n 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321,\r\n 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008,\r\n 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140,\r\n 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382,\r\n 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,\r\n];\r\n\r\nfunction lookupInUnicodeMap(code: u16, map: u16[]): bool {\r\n if (code < map[0]) return false;\r\n\r\n var lo = 0;\r\n var hi = map.length;\r\n var mid: i32;\r\n\r\n while (lo + 1 < hi) {\r\n mid = lo + (hi - lo) / 2;\r\n mid -= mid % 2;\r\n if (map[mid] <= code && code <= map[mid + 1]) {\r\n return true;\r\n }\r\n if (code < map[mid]) {\r\n hi = mid;\r\n } else {\r\n lo = mid + 2;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction isUnicodeIdentifierStart(code: i32): bool {\r\n return code < 0 || code > 0xffff ? false\r\n : lookupInUnicodeMap(code as u16, unicodeIdentifierStart);\r\n}\r\n\r\nfunction isUnicodeIdentifierPart(code: i32): bool {\r\n return code < 0 || code > 0xffff ? false\r\n : lookupInUnicodeMap(code as u16, unicodeIdentifierPart);\r\n}\r\n","/**\r\n * Built-in elements providing WebAssembly core functionality.\r\n * @module builtins\r\n *//***/\r\n\r\n import {\r\n Compiler,\r\n ConversionKind,\r\n WrapMode\r\n} from \"./compiler\";\r\n\r\nimport {\r\n DiagnosticCode\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Expression,\r\n LiteralKind,\r\n LiteralExpression,\r\n StringLiteralExpression\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags\r\n} from \"./types\";\r\n\r\nimport {\r\n BinaryOp,\r\n UnaryOp,\r\n HostOp,\r\n NativeType,\r\n ExpressionRef,\r\n ExpressionId,\r\n getExpressionId,\r\n getExpressionType,\r\n getConstValueI64High,\r\n getConstValueI64Low,\r\n getConstValueI32\r\n} from \"./module\";\r\n\r\nimport {\r\n ElementKind,\r\n FunctionPrototype,\r\n Class,\r\n Field,\r\n OperatorKind,\r\n FlowFlags\r\n} from \"./program\";\r\n\r\n/** Compiles a call to a built-in function. */\r\nexport function compileCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var module = compiler.module;\r\n\r\n var arg0: ExpressionRef,\r\n arg1: ExpressionRef,\r\n arg2: ExpressionRef,\r\n ret: ExpressionRef;\r\n\r\n // NOTE that some implementations below make use of the select expression where straight-forward.\r\n // whether worth or not should probably be tested once/ it's known if/how embedders handle it.\r\n // search: createSelect\r\n\r\n switch (prototype.internalName) {\r\n\r\n // types\r\n\r\n case \"isInteger\": { // isInteger() / isInteger(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.INTEGER) && !type.is(TypeFlags.REFERENCE)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isFloat\": { // isFloat() / isFloat(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.FLOAT)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isSigned\": { // isSigned() / isSigned(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.SIGNED)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isReference\": { // isReference() / isReference(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n compiler.currentType = Type.bool;\r\n return type.is(TypeFlags.REFERENCE)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isString\": { // isString() / isString(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n let classType = type.classReference;\r\n if (classType) {\r\n let stringInstance = compiler.program.stringInstance;\r\n if (stringInstance && classType.isAssignableTo(stringInstance)) return module.createI32(1);\r\n }\r\n return module.createI32(0);\r\n }\r\n case \"isArray\": { // isArray() / isArray(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n let classType = type.classReference;\r\n return classType != null && classType.lookupOverload(OperatorKind.INDEXED_GET) != null\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n\r\n // math\r\n\r\n case \"clz\": { // clz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ClzI64\r\n : UnaryOp.ClzI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.ClzI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"ctz\": { // ctz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.NONE, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.CtzI64\r\n : UnaryOp.CtzI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.CtzI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"popcnt\": { // popcnt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.PopcntI64\r\n : UnaryOp.PopcntI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.PopcntI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"rotl\": { // rotl(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = compiler.ensureSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotlI32, arg0, arg1),\r\n compiler.currentType\r\n );\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createBinary(BinaryOp.RotlI32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotlI64\r\n : BinaryOp.RotlI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createBinary(BinaryOp.RotlI64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret; // possibly overflows\r\n }\r\n case \"rotr\": { // rotr(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = compiler.ensureSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotrI32, arg0, arg1),\r\n compiler.currentType\r\n );\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createBinary(BinaryOp.RotrI32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotrI64\r\n : BinaryOp.RotrI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createBinary(BinaryOp.RotrI64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret; // possibly overflowws\r\n }\r\n case \"abs\": { // abs(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n // possibly overflows, e.g. abs(-128) == 128\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32, false);\r\n ret = module.createSelect( // x > 0 ? x : 0-x\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(BinaryOp.SubI32, // ifFalse\r\n module.createI32(0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32)\r\n ),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n module.createI32(0)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n compiler.options.usizeType.toNativeZero(module),\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType)\r\n ),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType),\r\n compiler.options.usizeType.toNativeZero(module)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(BinaryOp.SubI64,\r\n module.createI64(0, 0),\r\n module.createGetLocal(tempLocal.index, NativeType.I64),\r\n ),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal.index, NativeType.I64),\r\n module.createI64(0, 0)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.U64:\r\n case TypeKind.BOOL: {\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.AbsF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.AbsF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"max\": { // max(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtU32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtU64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtU64\r\n : BinaryOp.GtU32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.MaxF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.MaxF64, arg0, arg1);\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"min\": { // min(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtU32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtI64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtU64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.LtI64\r\n : BinaryOp.LtI32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.LtU64\r\n : BinaryOp.LtU32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.MinF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.MinF64, arg0, arg1);\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"ceil\": { // ceil(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.CeilF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.CeilF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"floor\": { // floor(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.FloorF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.FloorF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"copysign\": { // copysign(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) { // TODO: does an integer version make sense?\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.CopysignF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.CopysignF64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"nearest\": { // nearest(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.NearestF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.NearestF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"reinterpret\": { // reinterpret(value: *) -> T\r\n if (operands.length != 1) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n switch (typeArguments[0].kind) {\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n arg0 = compiler.compileExpression(operands[0], Type.f32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretF32, arg0);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretF64, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (typeArguments[0].is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.f64\r\n : Type.f32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ReinterpretF64\r\n : UnaryOp.ReinterpretF32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretI32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n arg0 = compiler.compileExpression(operands[0], Type.i64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretI64, arg0);\r\n break;\r\n }\r\n default: { // small integers and void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n compiler.currentType = typeArguments[0];\r\n return ret;\r\n }\r\n case \"sqrt\": { // sqrt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) { // TODO: integer versions (that return f64 or convert)?\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.SqrtF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.SqrtF64, arg0);\r\n break;\r\n }\r\n // case TypeKind.VOID:\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"trunc\": { // trunc(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments && typeArguments.length) {\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n // TODO: truncate to contextual type directly (if not void etc.)?\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.TruncF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.TruncF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n // memory access\r\n\r\n case \"load\": { // load(offset: usize, constantOffset?: usize) -> *\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n let offset = operands.length == 2 ? evaluateConstantOffset(compiler, operands[1]) : 0; // reports\r\n if (offset < 0) { // reported in evaluateConstantOffset\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = typeArguments[0];\r\n return module.createLoad(\r\n typeArguments[0].byteSize,\r\n typeArguments[0].is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n arg0,\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n contextualType.size > typeArguments[0].size\r\n ? (compiler.currentType = contextualType).toNativeType()\r\n : (compiler.currentType = typeArguments[0]).toNativeType(),\r\n offset\r\n );\r\n }\r\n case \"store\": { // store(offset: usize, value: *, constantOffset?: usize) -> void\r\n compiler.currentType = Type.void;\r\n if (operands.length < 2 || operands.length > 3) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n if (operands.length < 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n typeArguments[0],\r\n typeArguments[0].is(TypeFlags.INTEGER)\r\n ? ConversionKind.NONE // no need to convert to small int (but now might result in a float)\r\n : ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n let type: Type;\r\n if (\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n (\r\n !compiler.currentType.is(TypeFlags.INTEGER) || // float to int\r\n compiler.currentType.size < typeArguments[0].size // int to larger int (clear garbage bits)\r\n )\r\n ) {\r\n arg1 = compiler.convertExpression(\r\n arg1,\r\n compiler.currentType, typeArguments[0],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE, // still clears garbage bits\r\n operands[1]\r\n );\r\n type = typeArguments[0];\r\n } else {\r\n type = compiler.currentType;\r\n }\r\n let offset = operands.length == 3 ? evaluateConstantOffset(compiler, operands[2]) : 0; // reports\r\n if (offset < 0) { // reported in evaluateConstantOffset\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = Type.void;\r\n return module.createStore(typeArguments[0].byteSize, arg0, arg1, type.toNativeType(), offset);\r\n }\r\n case \"sizeof\": { // sizeof() -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length != 0) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n let byteSize = (typeArguments)[0].byteSize;\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n ret = module.createI32(byteSize);\r\n } else {\r\n ret = module.createI64(byteSize, 0);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n ret = module.createI64(byteSize, 0);\r\n } else {\r\n ret = module.createI32(byteSize);\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"alignof\": { // alignof() -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length != 0) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n let byteSize = (typeArguments)[0].byteSize;\r\n let alignLog2: i32;\r\n switch (byteSize) {\r\n case 1: { alignLog2 = 0; break; }\r\n case 2: { alignLog2 = 1; break; }\r\n case 4: { alignLog2 = 2; break; }\r\n case 8: { alignLog2 = 3; break; }\r\n default: { assert(false); return module.createUnreachable(); }\r\n }\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n ret = module.createI32(alignLog2);\r\n } else {\r\n ret = module.createI64(alignLog2, 0);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n ret = module.createI64(alignLog2, 0);\r\n } else {\r\n ret = module.createI32(alignLog2);\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"offsetof\": { // offsetof(fieldName?: string) -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length > 1) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n let classType = typeArguments[0].classReference;\r\n if (!classType) {\r\n compiler.error( // TODO: better error\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let offset: i32;\r\n if (operands.length) {\r\n if (\r\n operands[0].kind != NodeKind.LITERAL ||\r\n (operands[0]).literalKind != LiteralKind.STRING\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.String_literal_expected,\r\n operands[0].range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let fieldName = (operands[0]).value;\r\n let field = classType.members ? classType.members.get(fieldName) : null;\r\n if (!(field && field.kind == ElementKind.FIELD)) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_has_no_property_1,\r\n operands[0].range, classType.internalName, fieldName\r\n );\r\n return module.createUnreachable();\r\n }\r\n offset = (field).memoryOffset;\r\n } else {\r\n offset = classType.currentMemoryOffset;\r\n }\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n return module.createI32(offset);\r\n } else {\r\n return module.createI64(offset);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n return module.createI64(offset);\r\n } else {\r\n return module.createI32(offset);\r\n }\r\n }\r\n }\r\n\r\n // control flow\r\n\r\n case \"select\": { // select(ifTrue: T, ifFalse: T, condition: bool) -> T\r\n if (operands.length != 3) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n let type = compiler.currentType;\r\n arg1 = compiler.compileExpression(operands[1], type, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n arg2 = compiler.makeIsTrueish(\r\n compiler.compileExpressionRetainType(operands[2], Type.bool, WrapMode.NONE),\r\n compiler.currentType\r\n );\r\n compiler.currentType = type;\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n }\r\n default: { // any other value type\r\n ret = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"unreachable\": { // unreachable() -> *\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n\r\n // host operations\r\n\r\n case \"current_memory\": { // current_memory() -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.CurrentMemory);\r\n }\r\n case \"grow_memory\": { // grow_memory(pages: i32) -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n arg0 = module.createUnreachable();\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.GrowMemory, null, [ arg0 ]);\r\n }\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n case \"move_memory\": { // move_memory(dest: usize, src: usize: n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.MoveMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n case \"set_memory\": { // set_memory(dest: usize, value: u8, n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n Type.u32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.SetMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n\r\n // other\r\n\r\n case \"changetype\": { // changetype(value: *) -> T\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpressionRetainType(\r\n operands[0],\r\n typeArguments[0],\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = typeArguments[0];\r\n if (compiler.currentType.size != typeArguments[0].size) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // if (reportNode.range.source.sourceKind != SourceKind.STDLIB)\r\n // compiler.warning(DiagnosticCode.Operation_is_unsafe, reportNode.range);\r\n return arg0; // any usize to any usize\r\n }\r\n case \"assert\": { // assert(isTrueish: T, message?: string) -> T with T != null\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else if (operands.length > 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.bool, WrapMode.WRAP);\r\n }\r\n\r\n let type = compiler.currentType;\r\n compiler.currentType = type.nonNullableType;\r\n\r\n // just return ifTrueish if assertions are disabled, or simplify if dropped anyway\r\n if (compiler.options.noAssert) {\r\n if (contextualType == Type.void) {\r\n compiler.currentType = Type.void;\r\n return module.createNop();\r\n }\r\n return arg0;\r\n }\r\n\r\n let abort = compileAbort(compiler, operands.length == 2 ? operands[1] : null, reportNode);\r\n\r\n compiler.currentType = type.nonNullableType;\r\n\r\n if (contextualType == Type.void) { // simplify if dropped anyway\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n // TODO: also check for NaN in float assertions, as in `Boolean(NaN) -> false`?\r\n case TypeKind.F32: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n arg0,\r\n module.createF32(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n arg0,\r\n module.createF64(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n compiler.currentType = Type.void;\r\n } else {\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n default: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32, false);\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.I64)\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType)\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f32, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF32(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.F32)\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f64, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF64(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.F64)\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"unchecked\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let flow = compiler.currentFunction.flow;\r\n flow.set(FlowFlags.UNCHECKED_CONTEXT);\r\n ret = compiler.compileExpressionRetainType(operands[0], contextualType, WrapMode.NONE);\r\n flow.unset(FlowFlags.UNCHECKED_CONTEXT);\r\n return ret;\r\n }\r\n case \"call_indirect\": { // call_indirect(target: Function | u32, ...args: *[]) -> T\r\n if (operands.length < 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let returnType: Type;\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n returnType = typeArguments[0];\r\n } else {\r\n returnType = contextualType;\r\n }\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.u32, WrapMode.NONE);\r\n if (compiler.currentType.kind != TypeKind.U32) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n operands[0].range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let numOperands = operands.length - 1;\r\n let operandExprs = new Array(numOperands);\r\n let signatureParts = new Array(numOperands + 1);\r\n let nativeReturnType = returnType.toNativeType();\r\n let nativeParamTypes = new Array(numOperands);\r\n for (let i = 0; i < numOperands; ++i) {\r\n operandExprs[i] = compiler.compileExpressionRetainType(operands[1 + i], Type.i32, WrapMode.NONE);\r\n let operandType = compiler.currentType;\r\n signatureParts[i] = operandType.toSignatureString();\r\n nativeParamTypes[i] = operandType.toNativeType();\r\n }\r\n signatureParts[numOperands] = returnType.toSignatureString();\r\n let typeName = signatureParts.join(\"\");\r\n let typeRef = module.getFunctionTypeBySignature(nativeReturnType, nativeParamTypes);\r\n if (!typeRef) typeRef = module.addFunctionType(typeName, nativeReturnType, nativeParamTypes);\r\n compiler.currentType = returnType;\r\n // of course this can easily result in a 'RuntimeError: function signature mismatch' trap and\r\n // thus must be used with care. it exists because it *might* be useful in specific scenarios.\r\n return module.createCallIndirect(arg0, operandExprs, typeName);\r\n }\r\n\r\n // conversions\r\n\r\n case \"i8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"isize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"usize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"bool\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.bool;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.bool,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"f32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.f32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"f64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.f64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n }\r\n var expr = deferASMCall(compiler, prototype, operands, contextualType, reportNode);\r\n if (expr) {\r\n if (typeArguments && typeArguments.length) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return expr;\r\n }\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n}\r\n\r\n/** Defers an inline-assembler-like call to a built-in function. */\r\nfunction deferASMCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n switch (prototype.internalName) {\r\n\r\n // TODO: Operators can't be just deferred (don't have a corresponding generic built-in)\r\n // add, sub, mul, div_s, div_u, rem_s, rem_u\r\n // and, or, xor, shl, shr_u, shr_s\r\n // eq, eqz, ne, lt_s, lt_u, le_s, le_u, gt_s, gt_u, ge_s, ge_u\r\n\r\n case \"i32.clz\": return deferASM(\"clz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.clz\": return deferASM(\"clz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.ctz\": return deferASM(\"ctz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.ctz\": return deferASM(\"ctz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.popcnt\": return deferASM(\"popcnt\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.popcnt\": return deferASM(\"popcnt\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotl\": return deferASM(\"rotl\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotl\": return deferASM(\"rotl\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotr\": return deferASM(\"rotr\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotr\": return deferASM(\"rotr\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.abs\": return deferASM(\"abs\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.abs\": return deferASM(\"abs\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.max\": return deferASM(\"max\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.max\": return deferASM(\"max\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.min\": return deferASM(\"min\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.min\": return deferASM(\"min\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.ceil\": return deferASM(\"ceil\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.ceil\": return deferASM(\"ceil\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.floor\": return deferASM(\"floor\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.floor\": return deferASM(\"floor\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.copysign\": return deferASM(\"copysign\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.copysign\": return deferASM(\"copysign\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.nearest\": return deferASM(\"nearest\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.nearest\": return deferASM(\"nearest\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.reinterpret_f32\": return deferASM(\"reinterpret\", compiler, Type.i32, operands, Type.f32, reportNode);\r\n case \"i64.reinterpret_f64\": return deferASM(\"reinterpret\", compiler, Type.i64, operands, Type.f64, reportNode);\r\n case \"f32.reinterpret_i32\": return deferASM(\"reinterpret\", compiler, Type.f32, operands, Type.i32, reportNode);\r\n case \"f64.reinterpret_i64\": return deferASM(\"reinterpret\", compiler, Type.f64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.sqrt\": return deferASM(\"sqrt\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.sqrt\": return deferASM(\"sqrt\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.trunc\": return deferASM(\"trunc\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.trunc\": return deferASM(\"trunc\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u32, reportNode);\r\n case \"i32.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u32, reportNode);\r\n case \"i32.load\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u64, reportNode);\r\n case \"i64.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u64, reportNode);\r\n case \"i64.load32_s\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.load32_u\": return deferASM(\"load\", compiler, Type.u32, operands, Type.u64, reportNode);\r\n case \"i64.load\": return deferASM(\"load\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.load\": return deferASM(\"load\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.load\": return deferASM(\"load\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.store\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.store32\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.store\": return deferASM(\"store\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.store\": return deferASM(\"store\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.store\": return deferASM(\"store\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n }\r\n return 0;\r\n}\r\n\r\n/** A helper for deferring inline-assembler-like calls to built-in functions. */\r\nfunction deferASM(\r\n name: string,\r\n compiler: Compiler,\r\n typeArgument: Type,\r\n operands: Expression[],\r\n valueType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var prototype = assert(compiler.program.elementsLookup.get(name));\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return compileCall(compiler, prototype, [ typeArgument ], operands, valueType, reportNode);\r\n}\r\n\r\n/** Evaluates the constant type of a type argument *or* expression. */\r\nfunction evaluateConstantType(\r\n compiler: Compiler,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n reportNode: Node\r\n): Type | null {\r\n if (operands.length == 0) { // requires type argument\r\n if (!typeArguments || typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return null;\r\n }\r\n return typeArguments[0];\r\n }\r\n if (operands.length == 1) { // optional type argument\r\n if (typeArguments) {\r\n if (typeArguments.length == 1) {\r\n compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n if (typeArguments.length) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return null;\r\n }\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n } else {\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n return compiler.currentType;\r\n }\r\n if (typeArguments && typeArguments.length > 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return null;\r\n}\r\n\r\n/** Evaluates a `constantOffset` argument.*/\r\nfunction evaluateConstantOffset(compiler: Compiler, expression: Expression): i32 {\r\n var expr: ExpressionRef;\r\n var value: i32;\r\n if (compiler.options.isWasm64) {\r\n expr = compiler.precomputeExpression(expression, Type.usize64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I64 ||\r\n getConstValueI64High(expr) != 0 ||\r\n (value = getConstValueI64Low(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n } else {\r\n expr = compiler.precomputeExpression(expression, Type.usize32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I32 ||\r\n (value = getConstValueI32(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n }\r\n return value;\r\n}\r\n\r\nconst allocateInternalName = \"allocate_memory\";\r\n\r\n/** Compiles a memory allocation for an instance of the specified class. */\r\nexport function compileAllocate(\r\n compiler: Compiler,\r\n classInstance: Class,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = compiler.program;\r\n assert(classInstance.program == program);\r\n var module = compiler.module;\r\n var options = compiler.options;\r\n\r\n var allocatePrototype = program.elementsLookup.get(allocateInternalName);\r\n if (!allocatePrototype) {\r\n program.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n reportNode.range, allocateInternalName\r\n );\r\n program.info(\r\n DiagnosticCode.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (allocatePrototype.kind != ElementKind.FUNCTION_PROTOTYPE) {\r\n program.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n reportNode.range, allocatePrototype.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n var allocateInstance = (allocatePrototype).resolve(); // reports\r\n if (!(allocateInstance && compiler.compileFunction(allocateInstance))) return module.createUnreachable();\r\n\r\n compiler.currentType = classInstance.type;\r\n return module.createCall(\r\n allocateInstance.internalName, [\r\n options.isWasm64\r\n ? module.createI64(classInstance.currentMemoryOffset)\r\n : module.createI32(classInstance.currentMemoryOffset)\r\n ],\r\n options.nativeSizeType\r\n );\r\n}\r\n\r\nconst abortInternalName = \"abort\";\r\n\r\n/** Compiles an abort wired to the conditionally imported 'abort' function. */\r\nexport function compileAbort(\r\n compiler: Compiler,\r\n message: Expression | null,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = compiler.program;\r\n var module = compiler.module;\r\n\r\n var stringType = program.typesLookup.get(\"string\"); // might be intended\r\n if (!stringType) return module.createUnreachable();\r\n\r\n var abortPrototype = program.elementsLookup.get(abortInternalName); // might be intended\r\n if (!abortPrototype || abortPrototype.kind != ElementKind.FUNCTION_PROTOTYPE) return module.createUnreachable();\r\n\r\n var abortInstance = (abortPrototype).resolve(); // reports\r\n if (!(abortInstance && compiler.compileFunction(abortInstance))) return module.createUnreachable();\r\n\r\n var messageArg = message != null\r\n ? compiler.compileExpression(message, stringType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : stringType.toNativeZero(module);\r\n\r\n var filenameArg = compiler.compileStaticString(reportNode.range.source.normalizedPath);\r\n\r\n compiler.currentType = Type.void;\r\n return module.createBlock(null, [\r\n module.createCallImport(\r\n abortInstance.internalName, [\r\n messageArg,\r\n filenameArg,\r\n module.createI32(reportNode.range.line),\r\n module.createI32(reportNode.range.column)\r\n ],\r\n NativeType.None\r\n ),\r\n module.createUnreachable()\r\n ]);\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__22__;","// Copy Binaryen exports to global scope\r\n\r\nconst binaryen = global.Binaryen || require(\"binaryen\");\r\n\r\nfor (var key in binaryen)\r\n if (key.startsWith(\"_Binaryen\") || key.startsWith(\"_Relooper\"))\r\n global[key] = binaryen[key];\r\n\r\n// Utilize Binaryen's heap\r\n\r\nglobal.allocate_memory = function(size) {\r\n if (!size) return 0; // should be safe in our case\r\n return binaryen._malloc(size);\r\n};\r\n\r\nglobal.free_memory = function(ptr) {\r\n if (ptr) binaryen._free(ptr);\r\n};\r\n\r\nglobal.move_memory = function(dest, src, n) {\r\n return binaryen._memmove(dest, src, n);\r\n};\r\n\r\nglobal.store = function(ptr, val) {\r\n binaryen.HEAPU8[ptr] = val;\r\n};\r\n\r\nglobal.load = function(ptr) {\r\n return binaryen.HEAPU8[ptr];\r\n};\r\n\r\n// Implement module stubs\r\n\r\nconst Module = require(\"../../module\").Module;\r\n\r\nModule.prototype.toText = function toText() {\r\n var previousPrint = binaryen.print;\r\n var ret = \"\";\r\n binaryen.print = function(x) { ret += x + \"\\n\" };\r\n _BinaryenModulePrint(this.ref);\r\n binaryen.print = previousPrint;\r\n return ret;\r\n};\r\n\r\nModule.prototype.toAsmjs = function toAsmjs() {\r\n var previousPrint = binaryen.print;\r\n var ret = \"\";\r\n binaryen.print = function(x) { ret += x + \"\\n\" };\r\n _BinaryenModulePrintAsmjs(this.ref);\r\n binaryen.print = previousPrint;\r\n return ret;\r\n};\r\n","module.exports = globalScope => {\r\n var HEAP = new Uint8Array(0);\r\n var HEAP_OFFSET = 0;\r\n\r\n globalScope[\"allocate_memory\"] = function allocate_memory(size) {\r\n if (!(size >>>= 0)) return 0;\r\n\r\n if (HEAP_OFFSET + size > HEAP.length) {\r\n var oldHeap = HEAP;\r\n HEAP = new Uint8Array(Math.max(65536, HEAP.length + size, HEAP.length * 2));\r\n HEAP.set(oldHeap);\r\n }\r\n\r\n var ptr = HEAP_OFFSET;\r\n if ((HEAP_OFFSET += size) & 7)\r\n HEAP_OFFSET = (HEAP_OFFSET | 7) + 1;\r\n\r\n return ptr;\r\n };\r\n\r\n globalScope[\"free_memory\"] = function free_memory(ptr) {\r\n // TODO\r\n };\r\n\r\n globalScope[\"move_memory\"] = function move_memory(dest, src, size) {\r\n HEAP.copyWithin(dest, src, src + size);\r\n };\r\n\r\n globalScope[\"store\"] = function store(ptr, value, offset) {\r\n HEAP[ptr + (offset | 0)] = value;\r\n };\r\n\r\n globalScope[\"load\"] = function load(ptr, offset) {\r\n return HEAP[ptr + (offset | 0)];\r\n };\r\n};\r\n","module.exports = globalScope => {\r\n globalScope[\"JSMath\"] = Math;\r\n};\r\n","/** @module std/portable *//***/\r\n\r\nvar globalScope = typeof window !== \"undefined\" && window || typeof global !== \"undefined\" && global || self;\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\nrequire(\"./portable/math\")(globalScope);\r\nrequire(\"./portable/memory\")(globalScope);\r\n","/**\r\n * JavaScript glue code.\r\n * @module glue/js\r\n * @preferred\r\n *//***/\r\n\r\nimport \"../../../std/portable\";\r\nimport \"./binaryen\";\r\nimport \"./i64\";\r\nimport \"./float\";\r\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://assemblyscript/webpack/universalModuleDefinition","webpack://assemblyscript/webpack/bootstrap","webpack://assemblyscript/./src/common.ts","webpack://assemblyscript/./src/util/index.ts","webpack://assemblyscript/./src/diagnostics.ts","webpack://assemblyscript/./src/module.ts","webpack://assemblyscript/./src/ast.ts","webpack://assemblyscript/./src/program.ts","webpack://assemblyscript/(webpack)/buildin/global.js","webpack://assemblyscript/./src/types.ts","webpack://assemblyscript/./src/tokenizer.ts","webpack://assemblyscript/./src/diagnosticMessages.generated.ts","webpack://assemblyscript/./src/compiler.ts","webpack://assemblyscript/./src/parser.ts","webpack://assemblyscript/./src/definitions.ts","webpack://assemblyscript/./src/decompiler.ts","webpack://assemblyscript/./src/index.ts","webpack://assemblyscript/./src/glue/js/float.js","webpack://assemblyscript/./node_modules/long/src/long.js","webpack://assemblyscript/./src/glue/js/i64.js","webpack://assemblyscript/./src/util/binary.ts","webpack://assemblyscript/./src/util/text.ts","webpack://assemblyscript/./src/util/path.ts","webpack://assemblyscript/./src/util/charcode.ts","webpack://assemblyscript/./src/builtins.ts","webpack://assemblyscript/external \"binaryen\"","webpack://assemblyscript/./src/glue/js/binaryen.js","webpack://assemblyscript/./std/portable/memory.js","webpack://assemblyscript/./std/portable/math.js","webpack://assemblyscript/./std/portable.js","webpack://assemblyscript/./src/glue/js/index.ts"],"names":["root","factory","exports","module","require","define","amd","self","this","__WEBPACK_EXTERNAL_MODULE__23__","installedModules","__webpack_require__","moduleId","i","l","modules","call","m","c","d","name","getter","o","Object","defineProperty","enumerable","get","r","Symbol","toStringTag","value","t","mode","__esModule","ns","create","key","bind","n","object","property","prototype","hasOwnProperty","p","s","CommonFlags","PATH_DELIMITER","PARENT_SUBST","GETTER_PREFIX","SETTER_PREFIX","INSTANCE_DELIMITER","STATIC_DELIMITER","INNER_DELIMITER","LIBRARY_SUBST","LIBRARY_PREFIX","FILESPACE_PREFIX","__export","DiagnosticCategory","diagnosticMessages_generated_1","util_1","diagnosticMessages_generated_2","diagnosticCategoryToString","category","INFO","WARNING","ERROR","assert","diagnosticCategoryToColor","COLOR_BLUE","COLOR_YELLOW","COLOR_RED","DiagnosticCode","diagnosticCodeToString","COLOR_RESET","DiagnosticMessage","code","message","range","arg0","arg1","arg2","replace","createInfo","createWarning","createError","withRange","toString","source","normalizedPath","line","column","formatDiagnosticContext","useColors","text","len","length","start","end","isLineBreak","charCodeAt","sb","substring","push","join","formatDiagnosticMessage","showContext","DiagnosticEmitter","diagnostics","Array","emitDiagnostic","info","warning","error","NativeType","ExpressionId","compiler_1","_BinaryenTypeNone","_BinaryenTypeInt32","_BinaryenTypeInt64","_BinaryenTypeFloat32","_BinaryenTypeFloat64","_BinaryenTypeUnreachable","_BinaryenTypeAuto","_BinaryenInvalidId","_BinaryenBlockId","_BinaryenIfId","_BinaryenLoopId","_BinaryenBreakId","_BinaryenSwitchId","_BinaryenCallId","_BinaryenCallImportId","_BinaryenCallIndirectId","_BinaryenGetLocalId","_BinaryenSetLocalId","_BinaryenGetGlobalId","_BinaryenSetGlobalId","_BinaryenLoadId","_BinaryenStoreId","_BinaryenConstId","_BinaryenUnaryId","_BinaryenBinaryId","_BinaryenSelectId","_BinaryenDropId","_BinaryenReturnId","_BinaryenHostId","_BinaryenNopId","_BinaryenUnreachableId","_BinaryenAtomicCmpxchgId","_BinaryenAtomicRMWId","_BinaryenAtomicWaitId","_BinaryenAtomicWakeId","UnaryOp","_BinaryenClzInt32","_BinaryenCtzInt32","_BinaryenPopcntInt32","_BinaryenNegFloat32","_BinaryenAbsFloat32","_BinaryenCeilFloat32","_BinaryenFloorFloat32","_BinaryenTruncFloat32","_BinaryenNearestFloat32","_BinaryenSqrtFloat32","_BinaryenEqZInt32","_BinaryenClzInt64","_BinaryenCtzInt64","_BinaryenPopcntInt64","_BinaryenNegFloat64","_BinaryenAbsFloat64","_BinaryenCeilFloat64","_BinaryenFloorFloat64","_BinaryenTruncFloat64","_BinaryenNearestFloat64","_BinaryenSqrtFloat64","_BinaryenEqZInt64","_BinaryenExtendSInt32","_BinaryenExtendUInt32","_BinaryenWrapInt64","_BinaryenTruncSFloat32ToInt32","_BinaryenTruncSFloat32ToInt64","_BinaryenTruncUFloat32ToInt32","_BinaryenTruncUFloat32ToInt64","_BinaryenTruncSFloat64ToInt32","_BinaryenTruncSFloat64ToInt64","_BinaryenTruncUFloat64ToInt32","_BinaryenTruncUFloat64ToInt64","_BinaryenReinterpretFloat32","_BinaryenReinterpretFloat64","_BinaryenConvertSInt32ToFloat32","_BinaryenConvertSInt32ToFloat64","_BinaryenConvertUInt32ToFloat32","_BinaryenConvertUInt32ToFloat64","_BinaryenConvertSInt64ToFloat32","_BinaryenConvertSInt64ToFloat64","_BinaryenConvertUInt64ToFloat32","_BinaryenConvertUInt64ToFloat64","_BinaryenPromoteFloat32","_BinaryenDemoteFloat64","_BinaryenReinterpretInt32","_BinaryenReinterpretInt64","_BinaryenExtendS8Int32","_BinaryenExtendS16Int32","_BinaryenExtendS8Int64","_BinaryenExtendS16Int64","_BinaryenExtendS32Int64","BinaryOp","_BinaryenAddInt32","_BinaryenSubInt32","_BinaryenMulInt32","_BinaryenDivSInt32","_BinaryenDivUInt32","_BinaryenRemSInt32","_BinaryenRemUInt32","_BinaryenAndInt32","_BinaryenOrInt32","_BinaryenXorInt32","_BinaryenShlInt32","_BinaryenShrUInt32","_BinaryenShrSInt32","_BinaryenRotLInt32","_BinaryenRotRInt32","_BinaryenEqInt32","_BinaryenNeInt32","_BinaryenLtSInt32","_BinaryenLtUInt32","_BinaryenLeSInt32","_BinaryenLeUInt32","_BinaryenGtSInt32","_BinaryenGtUInt32","_BinaryenGeSInt32","_BinaryenGeUInt32","_BinaryenAddInt64","_BinaryenSubInt64","_BinaryenMulInt64","_BinaryenDivSInt64","_BinaryenDivUInt64","_BinaryenRemSInt64","_BinaryenRemUInt64","_BinaryenAndInt64","_BinaryenOrInt64","_BinaryenXorInt64","_BinaryenShlInt64","_BinaryenShrUInt64","_BinaryenShrSInt64","_BinaryenRotLInt64","_BinaryenRotRInt64","_BinaryenEqInt64","_BinaryenNeInt64","_BinaryenLtSInt64","_BinaryenLtUInt64","_BinaryenLeSInt64","_BinaryenLeUInt64","_BinaryenGtSInt64","_BinaryenGtUInt64","_BinaryenGeSInt64","_BinaryenGeUInt64","_BinaryenAddFloat32","_BinaryenSubFloat32","_BinaryenMulFloat32","_BinaryenDivFloat32","_BinaryenCopySignFloat32","_BinaryenMinFloat32","_BinaryenMaxFloat32","_BinaryenEqFloat32","_BinaryenNeFloat32","_BinaryenLtFloat32","_BinaryenLeFloat32","_BinaryenGtFloat32","_BinaryenGeFloat32","_BinaryenAddFloat64","_BinaryenSubFloat64","_BinaryenMulFloat64","_BinaryenDivFloat64","_BinaryenCopySignFloat64","_BinaryenMinFloat64","_BinaryenMaxFloat64","_BinaryenEqFloat64","_BinaryenNeFloat64","_BinaryenLtFloat64","_BinaryenLeFloat64","_BinaryenGtFloat64","_BinaryenGeFloat64","HostOp","_BinaryenPageSize","_BinaryenCurrentMemory","_BinaryenGrowMemory","_BinaryenHasFeature","AtomicRMWOp","_BinaryenAtomicRMWAdd","_BinaryenAtomicRMWSub","_BinaryenAtomicRMWAnd","_BinaryenAtomicRMWOr","_BinaryenAtomicRMWXor","_BinaryenAtomicRMWXchg","MemorySegment","buffer","offset","segment","Module","cachedTemporaryName","hasTemporaryFunction","cachedPrecomputeName","cachedPrecomputeNames","ref","_BinaryenModuleCreate","cachedByValue","allocate_memory","createFrom","cArr","allocU8Array","_BinaryenModuleRead","free_memory","changetype","addFunctionType","result","paramTypes","cStr","allocString","allocI32Array","_BinaryenAddFunctionType","getFunctionTypeBySignature","_BinaryenGetFunctionTypeBySignature","removeFunctionType","_BinaryenRemoveFunctionType","createI32","out","_BinaryenLiteralInt32","_BinaryenConst","createI64","valueLow","valueHigh","_BinaryenLiteralInt64","createF32","_BinaryenLiteralFloat32","createF64","_BinaryenLiteralFloat64","createUnary","op","expr","_BinaryenUnary","createBinary","left","right","_BinaryenBinary","createHost","operands","allocPtrArray","_BinaryenHost","createGetLocal","index","type","_BinaryenGetLocal","createTeeLocal","_BinaryenTeeLocal","createGetGlobal","_BinaryenGetGlobal","createLoad","bytes","signed","ptr","_BinaryenLoad","createStore","_BinaryenStore","createAtomicLoad","_BinaryenAtomicLoad","createAtomicStore","_BinaryenAtomicStore","createAtomicRMW","_BinaryenAtomicRMW","createAtomicCmpxchg","expected","replacement","_BinaryenAtomicCmpxchg","createAtomicWait","timeout","expectedType","_BinaryenAtomicWait","createAtomicWake","wakeCount","_BinaryenAtomicWake","createSetLocal","_BinaryenSetLocal","createSetGlobal","_BinaryenSetGlobal","createBlock","label","children","None","_BinaryenBlock","createBreak","condition","_BinaryenBreak","createDrop","expression","_BinaryenDrop","createLoop","body","_BinaryenLoop","createIf","ifTrue","ifFalse","_BinaryenIf","createNop","_BinaryenNop","createReturn","_BinaryenReturn","createSelect","_BinaryenSelect","createSwitch","names","defaultName","numNames","strs","_BinaryenSwitch","createCall","target","returnType","_BinaryenCall","createCallImport","_BinaryenCallImport","createCallIndirect","typeName","_BinaryenCallIndirect","createUnreachable","_BinaryenUnreachable","addGlobal","mutable","initializer","_BinaryenAddGlobal","addFunction","varTypes","_BinaryenAddFunction","removeFunction","_BinaryenRemoveFunction","addTemporaryFunction","tempName","typeRef","removeTemporaryFunction","addFunctionExport","internalName","externalName","cStr1","cStr2","_BinaryenAddFunctionExport","addTableExport","_BinaryenAddTableExport","addMemoryExport","_BinaryenAddMemoryExport","addGlobalExport","_BinaryenAddGlobalExport","removeExport","_BinaryenRemoveExport","addFunctionImport","externalModuleName","externalBaseName","functionType","cStr3","_BinaryenAddFunctionImport","addTableImport","_BinaryenAddTableImport","addMemoryImport","_BinaryenAddMemoryImport","addGlobalImport","globalType","_BinaryenAddGlobalImport","removeImport","_BinaryenRemoveImport","setMemory","initial","maximum","segments","exportName","k","segs","offs","sizs","Target","WASM64","i64_low","i64_high","cArr1","cArr2","cArr3","_BinaryenSetMemory","setFunctionTable","funcs","_BinaryenSetFunctionTable","setStart","func","_BinaryenSetStart","setOptimizeLevel","level","_BinaryenSetOptimizeLevel","setShrinkLevel","_BinaryenSetShrinkLevel","setDebugInfo","on","_BinaryenSetDebugInfo","optimize","_BinaryenFunctionOptimize","_BinaryenModuleOptimize","runPasses","passes","_BinaryenFunctionRunPasses","_BinaryenModuleRunPasses","precomputeFunction","validate","_BinaryenModuleValidate","interpret","_BinaryenModuleInterpret","toBinary","sourceMapUrl","binaryPtr","sourceMapPtr","_BinaryenModuleAllocateAndWrite","readInt","binaryBytes","ret","BinaryModule","output","Uint8Array","load","readBuffer","sourceMap","readString","toText","Error","toAsmjs","dispose","_BinaryenModuleDispose","createRelooper","Relooper","cloneExpression","noSideEffects","maxDepth","i32","MAX_VALUE","nested1","nested2","_BinaryenExpressionGetId","Const","_BinaryenExpressionGetType","I32","_BinaryenConstGetValueI32","I64","_BinaryenConstGetValueI64Low","_BinaryenConstGetValueI64High","F32","_BinaryenConstGetValueF32","F64","_BinaryenConstGetValueF64","GetLocal","_BinaryenGetLocalGetIndex","GetGlobal","globalName","_BinaryenGetGlobalGetName","Load","_BinaryenLoadGetPtr","_BinaryenLoadIsAtomic","_BinaryenLoadGetBytes","_BinaryenLoadGetOffset","_BinaryenLoadIsSigned","_BinaryenLoadGetAlign","Unary","_BinaryenUnaryGetValue","_BinaryenUnaryGetOp","Binary","_BinaryenBinaryGetLeft","_BinaryenBinaryGetRight","_BinaryenBinaryGetOp","addDebugInfoFile","_BinaryenModuleAddDebugInfoFileName","getDebugInfoFile","_BinaryenModuleGetDebugInfoFileName","setDebugLocation","fileIndex","lineNumber","columnNumber","_BinaryenFunctionSetDebugLocation","MAX_MEMORY_WASM32","MAX_MEMORY_WASM64","getExpressionId","getExpressionType","getConstValueI32","getConstValueI64Low","getConstValueI64High","getConstValueF32","getConstValueF64","getGetLocalIndex","getSetLocalIndex","_BinaryenSetLocalGetIndex","getSetLocalValue","_BinaryenSetLocalGetValue","isTeeLocal","_BinaryenSetLocalIsTee","getBinaryOp","getBinaryLeft","getBinaryRight","getUnaryOp","getUnaryValue","getLoadBytes","getLoadOffset","getLoadPtr","isLoadSigned","getStoreBytes","_BinaryenStoreGetBytes","getStoreOffset","_BinaryenStoreGetOffset","getStorePtr","_BinaryenStoreGetPtr","getStoreValue","_BinaryenStoreGetValue","getBlockName","_BinaryenBlockGetName","getBlockChildCount","_BinaryenBlockGetNumChildren","getBlockChild","_BinaryenBlockGetChild","getIfCondition","_BinaryenIfGetCondition","getIfTrue","_BinaryenIfGetIfTrue","getIfFalse","_BinaryenIfGetIfFalse","getLoopName","_BinaryenLoopGetName","getLoopBody","_BinaryenLoopGetBody","getBreakName","_BinaryenBreakGetName","getBreakCondition","_BinaryenBreakGetCondition","getSelectThen","_BinaryenSelectGetIfTrue","getSelectElse","_BinaryenSelectGetIfFalse","getSelectCondition","_BinaryenSelectGetCondition","getDropValue","_BinaryenDropGetValue","getReturnValue","_BinaryenReturnGetValue","getCallTarget","_BinaryenCallGetTarget","getHostOp","_BinaryenHostGetOp","getHostOperandCount","_BinaryenHostGetNumOperands","getHostOperand","_BinaryenHostGetOperand","getHostName","_BinaryenHostGetNameOperand","getFunctionBody","_BinaryenFunctionGetBody","getFunctionName","_BinaryenFunctionGetName","getFunctionParamCount","_BinaryenFunctionGetNumParams","getFunctionParamType","_BinaryenFunctionGetParam","getFunctionResultType","_BinaryenFunctionGetResult","relooper","_RelooperCreate","addBlock","_RelooperAddBlock","addBranch","from","to","_RelooperAddBranch","addBlockWithSwitch","_RelooperAddBlockWithSwitch","addBranchForSwitch","indexes","_RelooperAddBranchForSwitch","renderAndDispose","entry","labelHelper","_RelooperRenderAndDispose","u8s","numValues","idx","store","i32s","val","ptrs","str","u","stringLengthUTF8","cp","u1","u2","u3","u4","arr","String","fromCodePoints","common_1","tokenizer_1","Token","Range","NodeKind","nodeIsConstantValue","kind","LITERAL","NULL","TRUE","FALSE","nodeIsCallable","IDENTIFIER","CALL","ELEMENTACCESS","PROPERTYACCESS","nodeIsGenericCallable","Node","parent","flags","NONE","is","flag","isAny","set","createType","typeArguments","isNullable","TypeNode","setParent","createOmittedType","createIdentifierExpression","createTypeParameter","extendsType","elem","TypeParameterNode","createParameter","ParameterNode","parameterKind","createSignature","parameters","explicitThisType","sig","SignatureNode","createDecorator","args","stmt","DecoratorNode","arguments","decoratorKind","decoratorNameToKind","createComment","node","CommentNode","commentKind","IdentifierExpression","createEmptyIdentifierExpression","createArrayLiteralExpression","elements","ArrayLiteralExpression","elementExpressions","nodes","setParentIfNotNull","createAssertionExpression","assertionKind","toType","AssertionExpression","createBinaryExpression","operator","BinaryExpression","createCallExpression","typeArgs","CallExpression","createCommaExpression","expressions","CommaExpression","createConstructorExpression","ConstructorExpression","createElementAccessExpression","element","ElementAccessExpression","elementExpression","createFalseExpression","FalseExpression","createFloatLiteralExpression","FloatLiteralExpression","createFunctionExpression","declaration","FunctionExpression","ARROW","createInstanceOfExpression","isType","InstanceOfExpression","createIntegerLiteralExpression","IntegerLiteralExpression","createNewExpression","NewExpression","createNullExpression","NullExpression","createParenthesizedExpression","ParenthesizedExpression","createPropertyAccessExpression","PropertyAccessExpression","createRegexpLiteralExpression","pattern","RegexpLiteralExpression","patternFlags","createTernaryExpression","ifThen","ifElse","TernaryExpression","createStringLiteralExpression","StringLiteralExpression","createSuperExpression","SuperExpression","createThisExpression","ThisExpression","createTrueExpression","TrueExpression","createUnaryPostfixExpression","operand","UnaryPostfixExpression","createUnaryPrefixExpression","UnaryPrefixExpression","createBlockStatement","statements","BlockStatement","createBreakStatement","BreakStatement","createClassDeclaration","identifier","typeParameters","implementsTypes","members","decorators","ClassDeclaration","createContinueStatement","ContinueStatement","createDoStatement","statement","DoStatement","createEmptyStatement","EmptyStatement","createEnumDeclaration","EnumDeclaration","values","createEnumValueDeclaration","EnumValueDeclaration","createExportStatement","path","ExportStatement","normalizePath","startsWith","resolvePath","internalPath","mangleInternalPath","createExportImportStatement","ExportImportStatement","createExportMember","ExportMember","createExpressionStatement","ExpressionStatement","createIfStatement","IfStatement","createImportStatement","decls","ImportStatement","declarations","namespaceName","createImportStatementWithWildcard","createImportDeclaration","ImportDeclaration","createInterfaceDeclaration","InterfaceDeclaration","createFieldDeclaration","FieldDeclaration","createForStatement","incrementor","ForStatement","createFunctionDeclaration","signature","FunctionDeclaration","createMethodDeclaration","MethodDeclaration","createNamespaceDeclaration","NamespaceDeclaration","createReturnStatement","ReturnStatement","createSwitchStatement","cases","SwitchStatement","createSwitchCase","SwitchCase","createThrowStatement","ThrowStatement","createTryStatement","catchVariable","catchStatements","finallyStatements","TryStatement","createTypeDeclaration","alias","TypeDeclaration","createVariableStatement","VariableStatement","createVariableDeclaration","VariableDeclaration","createVoidStatement","VoidStatement","createWhileStatement","WhileStatement","CommonTypeNode","_super","__extends","_this","apply","TYPE","TYPEPARAMETER","ParameterKind","PARAMETER","implicitFieldDeclaration","DecoratorKind","SIGNATURE","nameStr","GLOBAL","INLINE","OPERATOR","SEALED","UNMANAGED","propStr","OPERATOR_BINARY","OPERATOR_PREFIX","OPERATOR_POSTFIX","CUSTOM","DECORATOR","CommentKind","COMMENT","Expression","LiteralKind","LiteralExpression","literalKind","ARRAY","AssertionKind","ASSERTION","BINARY","COMMA","CONSTRUCTOR","FLOAT","FUNCTION","INSTANCEOF","INTEGER","NEW","PARENTHESIZED","REGEXP","TERNARY","STRING","SUPER","THIS","UnaryExpression","UNARYPOSTFIX","UNARYPREFIX","isLastStatement","BLOCK","FUNCTIONDECLARATION","METHODDECLARATION","SourceKind","Statement","Source","SOURCE","tokenizer","debugInfoIndex","exportPaths","sourceKind","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","hasDecorator","OperatorKind","diagnostics_1","types_1","ast_1","module_1","QueuedImport","QueuedExport","TypeAlias","operatorKindFromDecorator","arg","INDEXED_GET","INDEXED_SET","UNCHECKED_INDEXED_GET","UNCHECKED_INDEXED_SET","ADD","SUB","MUL","POW","DIV","REM","BITWISE_AND","BITWISE_OR","BITWISE_XOR","EQ","NE","GT","GE","BITWISE_SHR","BITWISE_SHR_U","LT","LE","BITWISE_SHL","PLUS","PREFIX_INC","MINUS","PREFIX_DEC","NOT","BITWISE_NOT","POSTFIX_INC","POSTFIX_DEC","INVALID","ElementKind","DecoratorFlags","noTypesYet","Map","Program","diagnosticsOffset","elementsLookup","instancesLookup","typesLookup","typeAliases","fileLevelExports","moduleLevelExports","arrayPrototype","arrayBufferViewPrototype","stringInstance","resolvedThisExpression","resolvedElementExpression","sources","getSource","lookupSourceByPath","normalizedPathWithoutExtension","tmp","initialize","options","Type","i8","i16","i64","isizeType","u8","u16","u32","u64","usizeType","bool","f32","f64","void","queuedImports","queuedExports","queuedExtends","queuedImplements","filespace","Filespace","currentFilespace","j","initializeClass","initializeEnum","initializeExports","initializeFunction","initializeImports","initializeInterface","initializeNamespace","initializeTypeAlias","initializeVariables","queuedImport","tryResolveImport","localName","splice","externalNameAlt","Module_0_has_no_exported_member_1","queuedExports_1","__values","queuedExports_1_1","next","done","_c","__read","queuedExport","currentExport","isReExport","setExportAndCheckLibrary","Cannot_find_name_0","derivedPrototype","derivedDeclaration","derivedType","baseElement","resolveIdentifier","CLASS_PROTOTYPE","basePrototype","A_class_may_only_extend_another_class","globalAliases","globalAliases_1","globalAliases_1_1","_d","INTERFACE_PROTOTYPE","stringPrototype","resolve","has","Duplicate_identifier_0","programLevelInternalName","queuedNamedExports","filterDecorators","acceptedFlags","presentFlags","decorator","decoratorKindToFlag","Duplicate_decorator","Decorator_0_is_not_valid_here","checkGlobalOptions","parentNode","BUILTIN","isLibrary","namespace","fileLevelInternalName","simpleName","ClassPrototype","numImplementsTypes","Unmanaged_classes_cannot_implement_interfaces","MODULE_EXPORT","Export_declaration_conflicts_with_exported_declaration_of_0","isEntry","memberDeclarations","memberDeclaration","initializeField","GET","SET","initializeAccessor","initializeMethod","classPrototype","staticField","Global","instanceMembers","instanceField","FieldPrototype","decoratorFlags","FunctionPrototype","constructorPrototype","Multiple_constructor_implementations_are_not_allowed","checkOperatorOverloads","numArgs","firstArg","Operation_not_supported","overloads","overloadPrototypes","Duplicate_function_implementation","operatorKind","String_literal_expected","Expected_0_arguments_but_got_1","internalPropertyName","propertyElement","isGetter","isNew","PROPERTY","getterPrototype","setterPrototype","Property","baseName","staticName","staticPrototype","instanceName","instancePrototype","Enum","initializeEnumValue","enm","EnumValue","initializeExport","prefix","FILESPACE","referencedName","referencedElement","seen","Set","add","initializeImport","indexPart","InterfacePrototype","parentNamespace","Namespace","existingExport","Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local","global_1","resolveSignature","contextualTypeArguments","reportNotFound","thisType","resolveType","parameterTypeNodes","numParameters","parameterTypes","parameterNames","requiredParameters","hasRest","parameterTypeNode","DEFAULT","REST","parameterType","returnTypeNode","Signature","asNullable","typeNode","ENUM","instance","resolveUsingTypeArguments","paramType","instanceKey","typesToString","placeholderType","resolveTypeArguments","typeArgumentNodes","alternativeReportNode","parameterCount","argumentCount","Expected_0_type_arguments_but_got_1","atEnd","contextualFunction","contextualEnum","ENUMVALUE","flow","getScopedLocal","resolvePropertyAccess","propertyAccess","targetExpression","resolveExpression","propertyName","LOCAL","FIELD","classReference","Property_0_does_not_exist_on_type_1","CLASS","indexedGet","lookupOverload","Index_signature_is_missing_in_type_0","base","resolveElementAccess","elementAccess","classType","explicitLocal","_this_cannot_be_referenced_in_current_location","_super_can_only_be_referenced_in_a_derived_class","FUNCTION_PROTOTYPE","signatureReference","functionTarget","cachedFunctionTarget","FunctionTarget","Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures","Element","program","NAMESPACE","constantValue","ConstantValueKind","VariableLikeElement","constantValueKind","withConstantIntegerValue","lo","hi","constantIntegerValue","i64_new","CONST","INLINED","withConstantFloatValue","constantFloatValue","Parameter","Local","scopedGlobal","instances","classTypeArguments","functionTypeArguments","isInstance","INSTANCE","inheritedTypeArguments","inheritedTypeArguments_1","inheritedTypeArguments_1_1","_b","inheritedName","inheritedType","classTypeParameters","numClassTypeParameters","numFunctionTypeArguments","signatureNode","functionTypeParameters","classInstance","signatureParameters","signatureParameterCount","parameterDeclaration","Function","resolvePartial","partialKey","partialPrototype","reportNode","resolvedTypeArguments","GENERIC","resolveBuiltinTypeArguments","resolvedType","localsByName","localsByIndex","additionalLocals","breakContext","debugLocations","functionTableIndex","trampoline","outerScope","nextBreakId","breakStack","nextInlineId","tempI32s","tempI64s","tempF32s","tempF64s","AMBIENT","DECLARE","localIndex","local","inheritedTypeArguments_2","inheritedTypeArguments_2_1","parameterName","getParameterName","Flow","addLocal","getTempLocal","wrapped","temps","toNativeType","pop","setLocalWrapped","freeTempLocal","getAndFreeTempLocal","enterBreakContext","id","leaveBreakContext","finalize","debugLocation","debugInfoRef","FUNCTION_TARGET","toSignatureString","asFunction","FIELD_PROTOTYPE","Field","memoryOffset","inheritedTypeArguments_3","inheritedTypeArguments_3_1","_e","baseClass","baseClassType","Class_0_is_sealed_and_cannot_be_extended","Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa","Class","currentMemoryOffset","_f","_g","inheritedMember","partialConstructor","constructorInstance","_h","_j","fieldDeclaration","fieldType","fieldInstance","byteSize","instanceProperty","partialGetterPrototype","partialSetterPrototype","_k","_l","_m","operatorInstance","operatorPartial","asClass","inheritedTypeArguments_4","inheritedTypeArguments_4_1","baseType","isAssignableTo","current","unchecked","uncheckedOverload","overload","Interface","INTERFACE","FlowFlags","scopedLocals","currentFunction","parentFlow","continueLabel","breakLabel","returnLabel","wrappedLocals","wrappedLocalsExt","unset","enterBranchOrScope","branch","slice","leaveBranchOrScope","propagate","scopedLocal","SCOPED","addScopedLocal","existingLocal","addScopedLocalAlias","scopedAlias","isLocalWrapped","map","ext","i64_ne","i64_and","i64_shl","i64_one","i64_zero","off","i64_or","i64_not","inherit","other","inheritMutual","leftExt","rightExt","thisExt","minLength","min","canOverflow","canConversionOverflow","SetLocal","EqI32","EqI64","EqF32","EqF64","NeI32","NeI64","NeF32","NeF64","LtI32","LtU32","LtI64","LtU64","LtF32","LtF64","LeI32","LeU32","LeI64","LeU64","LeF32","LeF64","GtI32","GtU32","GtI64","GtU64","GtF32","GtF64","GeI32","GeU32","GeI64","GeU64","GeF32","GeF64","MulI32","AndI32","computeSmallIntegerMask","ShlI32","shift","size","ShrI32","ShrU32","DivU32","RemI32","RemU32","EqzI32","EqzI64","ClzI32","CtzI32","PopcntI32","MIN_VALUE","fromType","Block","last","If","Select","Call","Unreachable","fromSize","toSize","g","eval","e","window","TypeKind","TypeFlags","cachedNullableType","ceil","nonNullableType","isize64","isize32","usize64","usize32","computeSmallIntegerShift","targetType","signednessIsRelevant","currentClass","targetClass","targetFunction","commonCompatible","signednessIsImportant","kindOnly","toNativeZero","toNativeOne","toNativeNegOne","typesToNativeTypes","types","numTypes","getDefaultParameterName","thisThisType","targetThisType","thisParameterTypes","targetParameterTypes","thisParameterType","targetParameterType","thisReturnType","targetReturnType","makeSignatureString","includeThis","optionalStart","restIndex","cachedDefaultParameterNames","IdentifierHandling","tokenFromKeyword","ABSTRACT","AS","ASYNC","AWAIT","CASE","CATCH","DEBUGGER","DELETE","ELSE","EXTENDS","FINALLY","FROM","IMPLEMENTS","IN","IS","KEYOF","LET","MODULE","OF","PACKAGE","PRIVATE","PROTECTED","PUBLIC","READONLY","TYPEOF","VAR","WITH","YIELD","tokenIsAlsoIdentifier","token","operatorTokenToString","DOT_DOT_DOT","LESSTHAN","GREATERTHAN","LESSTHAN_EQUALS","GREATERTHAN_EQUALS","EQUALS_EQUALS","EXCLAMATION_EQUALS","EQUALS_EQUALS_EQUALS","EXCLAMATION_EQUALS_EQUALS","ASTERISK_ASTERISK","ASTERISK","SLASH","PERCENT","PLUS_PLUS","MINUS_MINUS","LESSTHAN_LESSTHAN","GREATERTHAN_GREATERTHAN","GREATERTHAN_GREATERTHAN_GREATERTHAN","AMPERSAND","BAR","CARET","EXCLAMATION","TILDE","AMPERSAND_AMPERSAND","BAR_BAR","EQUALS","PLUS_EQUALS","MINUS_EQUALS","ASTERISK_EQUALS","ASTERISK_ASTERISK_EQUALS","SLASH_EQUALS","PERCENT_EQUALS","LESSTHAN_LESSTHAN_EQUALS","GREATERTHAN_GREATERTHAN_EQUALS","GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS","AMPERSAND_EQUALS","BAR_EQUALS","CARET_EQUALS","a","b","pos","Tokenizer","tokenPos","nextToken","nextTokenPos","nextTokenOnNewLine","onComment","identifierHandling","unsafeNext","maxTokenLength","STRINGLITERAL","OPENPAREN","CLOSEPAREN","isDecimalDigit","FLOATLITERAL","DOT","commentStartPos","LINE","TRIPLE","closed","_0_expected","testInteger","INTEGERLITERAL","COLON","SEMICOLON","EQUALS_GREATERTHAN","QUESTION","OPENBRACKET","CLOSEBRACKET","OPENBRACE","CLOSEBRACE","AT","isIdentifierStart","isKeywordCharacter","posBefore","isIdentifierPart","keywordToken","ALWAYS","PREFER","isWhiteSpace","Invalid_character","ENDOFFILE","peek","checkOnNewLine","maxCompoundLength","tokenBefore","tokenPosBefore","skipIdentifier","skip","skipIdentifierName","mark","state","reusableState","State","discard","reset","readIdentifier","quote","Unterminated_string_literal","readEscapeSequence","Unexpected_end_of_text","readExtendedUnicodeEscape","readUnicodeEscape","fromCharCode","readRegexpPattern","escaped","Unterminated_regular_expression_literal","readRegexpFlags","Invalid_regular_expression_flags","readInteger","readHexInteger","readBinaryInteger","readOctalInteger","isOctalDigit","Octal_literals_are_not_allowed_in_strict_mode","readDecimalInteger","i64_16","sepEnd","i64_add","i64_mul","Numeric_separators_are_not_allowed_here","Multiple_consecutive_numeric_separators_are_not_permitted","Hexadecimal_digit_expected","i64_10","Digit_expected","i64_8","Octal_digit_expected","i64_2","i64_1","Binary_digit_expected","readFloat","readDecimalFloat","parseFloat","readHexFloat","remain","value32","invalid","An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive","Unterminated_Unicode_escape_sequence","finish","builtins_1","program_1","Options","WASM32","noTreeShaking","noAssert","noMemory","importMemory","importTable","memoryBase","features","hasFeature","feature","Feature","ConversionKind","WrapMode","Compiler","outerFunction","currentEnum","currentType","startFunctionBody","memorySegments","stringSegments","functionTable","argcVar","argcSet","f32ModInstance","f64ModInstance","f32PowInstance","f64PowInstance","max","compile","startFunctionPrototype","startFunctionInstance","startFunction","compileSource","funcRef","ensureFunctionType","i64_align","isWasm64","pages","i64_shr_u","functionTableSize","functionTableExported","entries","compileSourceByPath","File_0_not_found","COMPILED","isGeneric","compileClassDeclaration","compileEnumDeclaration","compileFunctionDeclaration","compileNamespaceDeclaration","variableInit","compileVariableStatement","compileExportStatement","previousFunction","compileStatement","compileGlobalDeclaration","compileGlobal","global","initExpr","Type_expected","compileExpressionRetainType","Type_0_is_not_assignable_to_type_1","nativeType","isConstant","MODULE_IMPORT","initializeInStart","compileInlineConstant","compileExpression","precomputeExpressionRef","Compiling_constant_with_non_constant_initializer_as_mutable","mangleExportName","isTopLevel","compileEnum","previousValue","initInStart","valueDeclaration","AddI32","Cannot_export_a_mutable_global","compileFunctionUsingTypeArguments","compileFunction","resultType","An_implementation_cannot_be_declared_in_ambient_contexts","Function_implementation_is_missing_or_not_immediately_following_the_declaration","isConstructor","nativeSizeType","makeConditionalAllocate","A_function_whose_declared_type_is_not_void_must_return_a_value","ensureTrampoline","ensureArgcSet","compileInterfaceDeclaration","compileNamespace","compileClassUsingTypeArguments","internalExportName","functionInstance","functionDeclaration","globalDeclaration","compileClass","staticMembers","setter","ctorInstance","getterName","setterName","addMemorySegment","alignment","ensureFunctionTableEntry","TRAMPOLINE","compileBlockStatement","compileBreakStatement","compileContinueStatement","compileDoStatement","compileEmptyStatement","compileExpressionStatement","compileForStatement","compileIfStatement","compileReturnStatement","compileSwitchStatement","compileThrowStatement","compileTryStatement","compileVoidStatement","compileWhileStatement","addDebugLocation","compileStatements","numStatements","stmts","count","Nop","blockFlow","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","repeatLabel","alwaysTrue","condPre","incrExpr","bodyExpr","breakBlock","repeatBlock","GENERIC_CONTEXT","condExprPrecomp","ifTrueFlow","ifFalseFlow","ifTrueExpr","ifFalseExpr","numCases","context","tempLocal","tempLocalIndex","breaks","breakIndex","defaultIndex","currentBlock","alwaysReturns","alwaysReturnsWrapped","alwaysThrows","alwaysAllocates","isLast","nextLabel","terminated","compileAbort","isKnownGlobal","numDeclarations","initializers","isInlined","_const_declarations_must_be_initialized","compileAssignmentWithValue","contextualType","retainType","mask","conversionKind","wrapMode","compileAssertionExpression","compileBinaryExpression","compileCallExpression","compileCommaExpression","compileElementAccessExpression","compileFunctionExpression","compileIdentifierExpression","compileInstanceOfExpression","compileLiteralExpression","compileNewExpression","compileParenthesizedExpression","compilePropertyAccessExpression","compileTernaryExpression","compileUnaryPostfixExpression","compileUnaryPrefixExpression","convertExpression","ensureSmallIntegerWrap","precomputeExpression","Conversion_from_type_0_to_1_requires_an_explicit_cast","PromoteF32","DemoteF64","TruncF32ToI64","TruncF32ToI32","TruncF32ToU64","TruncF32ToU32","TruncF64ToI64","TruncF64ToI32","TruncF64ToU64","TruncF64ToU32","ConvertI64ToF32","ConvertU64ToF32","ConvertI32ToF32","ConvertU32ToF32","ConvertI64ToF64","ConvertU64ToF64","ConvertI32ToF64","ConvertU32ToF64","WrapI64","ExtendI32","ExtendU32","leftExpr","leftType","rightExpr","rightType","commonType","compound","compileBinaryOverload","Operator_0_cannot_be_applied_to_types_1_and_2","compileAssignment","AddI64","AddF32","AddF64","SubI32","SubI64","SubF32","SubF64","MulI64","MulF32","MulF64","makeCallDirect","DivI32","DivI64","DivU64","DivF32","DivF64","RemI64","RemU64","intType","ShlI64","The_0_operator_cannot_be_applied_to_type_1","ShrI64","ShrU64","AndI64","OrI32","OrI64","XorI32","XorI64","compileUnaryOverload","valueExpr","argumentExpressions","thisArg","compileCallDirect","valueExpression","Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property","isUnchecked","indexedSet","Index_signature_in_type_0_only_permits_reading","valueWithCorrectType","tee","thisExpression","thisExpr","setterInstance","getterInstance","nativeReturnType","elementExpr","tempLocalTarget","tempLocalElement","indexArg","compileCallExpressionBuiltin","Type_0_is_not_generic","inferredTypes","numTypeParameters","numParameterTypes","numArguments","argumentExprs","argumentExpression","inferredType","concreteType","compileCallIndirect","compileCall","checkCallSignature","hasThis","minimum","Expected_at_least_0_arguments_but_got_1","inline","compileCallInlineUnchecked","numArgumentsInclThis","previousFlow","thisLocal","paramExpr","argumentLocal","bodyStatement","original","originalSignature","originalName","originalParameterTypes","originalParameterDeclarations","commonReturnType","commonThisType","minArguments","minOperands","maxArguments","maxOperands","numOptional","forwardedOperands","operandIndex","trampolineSignature","trampolineName","ofN","Optional_parameter_must_have_an_initializer","ensureArgcVar","numOperands","isCallImport","parameterNodes","allOptionalsAreConstant","makeCallIndirect","numExpressions","exprs","retainConstantType","scopedThis","superType","localType","A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums","implicitNegate","compileArrayLiteral","floatValue","intValue","i64_sub","i64_is_i8","i64_is_u8","i64_is_i16","i64_is_u16","i64_is_i32","i64_is_u32","i64_is_bool","i64_is_f32","i64_to_f32","i64_is_f64","i64_to_f64","compileStaticString","stringValue","stringSegment","stringLength","stringBuffer","stringOffset","stringType","elementType","isStatic","arrayInstance","arrayType","elementCount","nativeElementType","byteLength","Int32Array","Float32Array","Float64Array","usizeTypeSize","arraySize","bufferTotalSize","clz","data","writeI64","writeI32","writeF32","writeF64","nativeArrayType","Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature","currentClassInstance","makeAllocate","ifThenExpr","ifElseExpr","ifThenType","ifElseType","ifThenAllocates","ifElseAllocates","getValue","nativeOne","setValue","NegF32","NegF64","makeIsFalseish","ExtendI8ToI32","ExtendI16ToI32","compileAllocate","field","nativeFieldType","builtinsFile","Parser","backlog","seenlog","donelog","tryParseSignatureIsSignature","parseParametersThis","parseFile","indexOf","tn","parseTopLevelStatement","startPos","parseDecorator","skipStatement","exportStart","exportEnd","contextIsAmbient","A_declare_modifier_cannot_be_used_in_an_already_ambient_context","first","parseEnum","parseVariable","parseFunction","parseStatement","parseClassOrInterface","parseNamespace","parseExportImport","parseImport","parseTypeDeclaration","parseExport","_0_modifier_cannot_be_used_here","Decorators_are_not_valid_here","nextFile","clear","parseType","acceptParenthesized","suppressErrors","isNullableSignature","tryParseSignature","Unexpected_token","innerType","Identifier_expected","nullable","parameter","bracketStart","bracketRange","isSignature","A_rest_parameter_cannot_be_optional","OPTIONAL","param","parseArguments","parseVariableDeclaration","parentFlags","parentDecorators","Initializers_are_not_allowed_in_ambient_contexts","parseExpression","parseEnumValue","parseReturn","parseTypeParameters","typeParameter","parseTypeParameter","Type_parameter_list_cannot_be_empty","parseParameters","seenRest","seenOptional","reportedRest","parseParameter","A_rest_parameter_must_be_last_in_a_parameter_list","A_required_parameter_cannot_follow_an_optional_parameter","isRest","isOptional","startRange","accessFlags","A_parameter_property_cannot_be_declared_using_a_rest_parameter","A_rest_parameter_cannot_have_an_initializer","Parameter_cannot_have_question_mark_and_initializer","signatureStart","isSetter","A_set_accessor_must_have_exactly_one_parameter","A_set_accessor_parameter_cannot_have_an_initializer","A_get_accessor_cannot_have_parameters","parseBlockStatement","parseFunctionExpression","isArrow","parseFunctionExpressionCommon","isInterface","Interface_declaration_cannot_have_implements_clause","parseClassMember","staticStart","staticEnd","abstractStart","abstractEnd","readonlyStart","readonlyEnd","setEnd","typeParametersStart","Type_parameters_cannot_appear_on_a_constructor_declaration","An_accessor_cannot_have_type_parameters","Type_annotation_cannot_appear_on_a_constructor_declaration","A_set_accessor_cannot_have_a_return_type_annotation","retMethod","Constructor_implementation_is_missing","retField","parseExportMember","asIdentifier","skipFrom","parseImportDeclaration","topLevel","parseBreak","parseContinue","parseDoStatement","parseForStatement","parseIfStatement","A_return_statement_can_only_be_used_within_a_function_body","parseSwitchStatement","parseThrowStatement","parseTryStatement","parseVoidStatement","parseWhileStatement","parseExpressionStatement","elseStatement","case_","parseSwitchCase","_case_or_default_expected","parseExpressionStart","precedence","determinePrecedenceStart","The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access","again","PREFIX","regexpPattern","Expression_expected","tryParseTypeArgumentsBeforeArguments","nextPrecedence","determinePrecedence","commaExprs","isRightAssociative","propertyCall","Precedence","ExportsWalker","includePrivate","todo","walk","visitElement","visitGlobal","visitEnum","visitFunctionInstances","visitClassInstances","visitField","prop","hasCompiledMember","visitNamespace","visitFunction","visitClass","IDLBuilder","indentLevel","build","isConst","indent","typeToString","i64_to_string","members_1","members_1_1","visitInterface","TSDBuilder","numMembers","members_2","members_2_1","ctor","Decompiler","functionId","decompile","decompiler","decompileFunction","nativeTypeToType","decompileExpression","nested","string","Loop","Break","Switch","CallImport","CallIndirect","SetGlobal","Store","AbsF32","CeilF32","FloorF32","TruncF32","NearestF32","SqrtF32","ClzI64","CtzI64","PopcntI64","AbsF64","CeilF64","FloorF64","TruncF64","NearestF64","SqrtF64","ReinterpretF32","ReinterpretF64","ReinterpretI32","ReinterpretI64","RotlI32","RotrI32","RotlI64","RotrI64","CopysignF32","MinF32","MaxF32","CopysignF64","MinF64","MaxF64","Drop","Return","Host","CurrentMemory","GrowMemory","AtomicCmpxchg","AtomicRMW","AtomicWait","AtomicWake","Auto","decompiler_1","definitions_1","formatDiagnostic","parser_1","parser","nextDiagnostic","isInfo","isWarning","isError","createOptions","setTarget","setNoTreeShaking","setNoAssert","setNoMemory","setImportMemory","setImportTable","setSourceMap","setMemoryBase","setGlobalAlias","FEATURE_SIGN_EXTENSION","FEATURE_MUTABLE_GLOBAL","enableFeature","finishParsing","compileProgram","decompileModule","buildIDL","buildTSD","f32_as_i32","i32_as_f32","f64_as_i64","i64_as_f64","Long","wasm","WebAssembly","Instance","low","high","unsigned","isLong","obj","__isLong__","INT_CACHE","UINT_CACHE","fromInt","cachedObj","cache","fromBits","fromNumber","isNaN","UZERO","ZERO","TWO_PWR_64_DBL","MAX_UNSIGNED_VALUE","TWO_PWR_63_DBL","neg","TWO_PWR_32_DBL","lowBits","highBits","pow_dbl","Math","pow","fromString","radix","RangeError","radixToPower","parseInt","power","mul","fromValue","TWO_PWR_16_DBL","TWO_PWR_24","ONE","UONE","NEG_ONE","LongPrototype","toInt","toNumber","isZero","isNegative","eq","radixLong","div","rem1","sub","rem","remDiv","digits","getHighBits","getHighBitsUnsigned","getLowBits","getLowBitsUnsigned","getNumBitsAbs","bit","eqz","isPositive","isOdd","isEven","equals","notEquals","neq","ne","lessThan","comp","lt","lessThanOrEqual","lte","le","greaterThan","gt","greaterThanOrEqual","gte","ge","compare","thisNeg","otherNeg","negate","not","addend","a48","a32","a16","a00","b48","b32","b16","c48","c32","c16","c00","subtract","subtrahend","multiply","multiplier","get_high","b00","divide","divisor","approx","res","div_u","div_s","toUnsigned","shru","shr","shl","floor","log2","log","LN2","delta","approxRes","approxRem","modulo","rem_u","rem_s","mod","and","or","xor","shiftLeft","numBits","shiftRight","shiftRightUnsigned","shr_u","toSigned","toBytes","toBytesLE","toBytesBE","fromBytes","fromBytesLE","fromBytesBE","i64_div","i64_div_u","i64_rem","i64_rem_u","i64_xor","i64_shr","i64_eq","minSafeF32","MIN_SAFE_INTEGER","maxSafeF32","MAX_SAFE_INTEGER","minSafeF64","maxSafeF64","fround","readI32","readI64","readF32","readF64","valueI64","indentX1","indentX2","indentX4","separator","ipos","dirname","origin","CharCode","lookupInUnicodeMap","unicodeIdentifierStart","unicodeIdentifierPart","mid","compiler","evaluateConstantType","tempLocal0","tempLocal1","evaluateConstantOffset","alignLog2","fieldName","Type_0_has_no_property_1","abort","operandExprs","signatureParts","nativeParamTypes","operandType","deferASM","deferASMCall","typeArgument","valueType","allocateInternalName","allocatePrototype","An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf","allocateInstance","abortInternalName","abortPrototype","abortInstance","messageArg","filenameArg","binaryen","Binaryen","_malloc","_free","move_memory","dest","src","_memmove","HEAPU8","previousPrint","print","x","_BinaryenModulePrint","_BinaryenModulePrintAsmjs","globalScope","HEAP","HEAP_OFFSET","oldHeap","copyWithin","UnreachableError","captureStackTrace","stack","AssertionError","defineProperties","writable","MIN_POSITIVE_VALUE","EPSILON","clz32","abs","trunc","round","sqrt","y","sign","isTrueish","undefined","fromCodePoint","Number","isInteger","isArray"],"mappings":"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M,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,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,OAEtCC,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,MA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","file":"assemblyscript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"binaryen\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"binaryen\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"assemblyscript\"] = factory(require(\"binaryen\"));\n\telse\n\t\troot[\"assemblyscript\"] = factory(root[\"binaryen\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE__23__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, { enumerable: true, get: getter });\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tif(typeof Symbol !== 'undefined' && Symbol.toStringTag) {\n \t\t\tObject.defineProperty(exports, Symbol.toStringTag, { value: 'Module' });\n \t\t}\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// create a fake namespace object\n \t// mode & 1: value is a module id, require it\n \t// mode & 2: merge all properties of value into the ns\n \t// mode & 4: return value when already ns object\n \t// mode & 8|1: behave like require\n \t__webpack_require__.t = function(value, mode) {\n \t\tif(mode & 1) value = __webpack_require__(value);\n \t\tif(mode & 8) return value;\n \t\tif((mode & 4) && typeof value === 'object' && value && value.__esModule) return value;\n \t\tvar ns = Object.create(null);\n \t\t__webpack_require__.r(ns);\n \t\tObject.defineProperty(ns, 'default', { enumerable: true, value: value });\n \t\tif(mode & 2 && typeof value != 'string') for(var key in value) __webpack_require__.d(ns, key, function(key) { return value[key]; }.bind(null, key));\n \t\treturn ns;\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 29);\n","/**\r\n * Common constants.\r\n * @module common\r\n *//***/\r\n\r\n/** Indicates traits of a {@link Node} or {@link Element}. */\r\nexport enum CommonFlags {\r\n /** No flags set. */\r\n NONE = 0,\r\n\r\n // Basic modifiers\r\n\r\n /** Has an `import` modifier. */\r\n IMPORT = 1 << 0,\r\n /** Has an `export` modifier. */\r\n EXPORT = 1 << 1,\r\n /** Has a `declare` modifier. */\r\n DECLARE = 1 << 2,\r\n /** Has a `const` modifier. */\r\n CONST = 1 << 3,\r\n /** Has a `let` modifier. */\r\n LET = 1 << 4,\r\n /** Has a `static` modifier. */\r\n STATIC = 1 << 5,\r\n /** Has a `readonly` modifier. */\r\n READONLY = 1 << 6,\r\n /** Has an `abstract` modifier. */\r\n ABSTRACT = 1 << 7,\r\n /** Has a `public` modifier. */\r\n PUBLIC = 1 << 8,\r\n /** Has a `private` modifier. */\r\n PRIVATE = 1 << 9,\r\n /** Has a `protected` modifier. */\r\n PROTECTED = 1 << 10,\r\n /** Has a `get` modifier. */\r\n GET = 1 << 11,\r\n /** Has a `set` modifier. */\r\n SET = 1 << 12,\r\n\r\n // Extended modifiers usually derived from basic modifiers\r\n\r\n /** Is ambient, that is either declared or nested in a declared element. */\r\n AMBIENT = 1 << 13,\r\n /** Is generic. */\r\n GENERIC = 1 << 14,\r\n /** Is part of a generic context. */\r\n GENERIC_CONTEXT = 1 << 15,\r\n /** Is an instance member. */\r\n INSTANCE = 1 << 16,\r\n /** Is a constructor. */\r\n CONSTRUCTOR = 1 << 17,\r\n /** Is an arrow function. */\r\n ARROW = 1 << 18,\r\n /** Is a module export. */\r\n MODULE_EXPORT = 1 << 19,\r\n /** Is a module import. */\r\n MODULE_IMPORT = 1 << 20,\r\n\r\n // Compilation states\r\n\r\n /** Is a builtin. */\r\n BUILTIN = 1 << 21,\r\n /** Is compiled. */\r\n COMPILED = 1 << 22,\r\n /** Has a constant value and is therefore inlined. */\r\n INLINED = 1 << 23,\r\n /** Is scoped. */\r\n SCOPED = 1 << 24,\r\n /** Is a trampoline. */\r\n TRAMPOLINE = 1 << 25,\r\n /** Is a virtual method. */\r\n VIRTUAL = 1 << 26\r\n}\r\n\r\n/** Path delimiter inserted between file system levels. */\r\nexport const PATH_DELIMITER = \"/\";\r\n/** Substitution used to indicate the parent directory. */\r\nexport const PARENT_SUBST = \"..\";\r\n/** Function name prefix used for getters. */\r\nexport const GETTER_PREFIX = \"get:\";\r\n/** Function name prefix used for setters. */\r\nexport const SETTER_PREFIX = \"set:\";\r\n/** Delimiter used between class names and instance members. */\r\nexport const INSTANCE_DELIMITER = \"#\";\r\n/** Delimiter used between class and namespace names and static members. */\r\nexport const STATIC_DELIMITER = \".\";\r\n/** Delimiter used between a function and its inner elements. */\r\nexport const INNER_DELIMITER = \"~\";\r\n/** Substitution used to indicate a library directory. */\r\nexport const LIBRARY_SUBST = \"~lib\";\r\n/** Library directory prefix. */\r\nexport const LIBRARY_PREFIX = LIBRARY_SUBST + PATH_DELIMITER;\r\n/** Prefix used to indicate a filespace element. */\r\nexport const FILESPACE_PREFIX = \"file:\";\r\n","/**\r\n * Various compiler utilities.\r\n * @module util\r\n * @preferred\r\n *//***/\r\n\r\nexport * from \"./charcode\";\r\nexport * from \"./path\";\r\nexport * from \"./text\";\r\nexport * from \"./binary\";\r\n","/**\r\n * Shared diagnostic handling inherited by the parser and the compiler.\r\n * @module diagnostics\r\n * @preferred\r\n *//***/\r\n\r\nimport {\r\n Range\r\n} from \"./ast\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\nimport {\r\n isLineBreak\r\n} from \"./util\";\r\n\r\nexport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\n/** Indicates the category of a {@link DiagnosticMessage}. */\r\nexport enum DiagnosticCategory {\r\n /** Informatory message. */\r\n INFO,\r\n /** Warning message. */\r\n WARNING,\r\n /** Error message. */\r\n ERROR\r\n}\r\n\r\n/** Returns the string representation of the specified diagnostic category. */\r\nexport function diagnosticCategoryToString(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return \"INFO\";\r\n case DiagnosticCategory.WARNING: return \"WARNING\";\r\n case DiagnosticCategory.ERROR: return \"ERROR\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\n/** ANSI escape sequence for blue foreground. */\r\nexport const COLOR_BLUE: string = \"\\u001b[96m\";\r\n/** ANSI escape sequence for yellow foreground. */\r\nexport const COLOR_YELLOW: string = \"\\u001b[93m\";\r\n/** ANSI escape sequence for red foreground. */\r\nexport const COLOR_RED: string = \"\\u001b[91m\";\r\n/** ANSI escape sequence to reset the foreground color. */\r\nexport const COLOR_RESET: string = \"\\u001b[0m\";\r\n\r\n/** Returns the ANSI escape sequence for the specified category. */\r\nexport function diagnosticCategoryToColor(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return COLOR_BLUE;\r\n case DiagnosticCategory.WARNING: return COLOR_YELLOW;\r\n case DiagnosticCategory.ERROR: return COLOR_RED;\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\n/** Represents a diagnostic message. */\r\nexport class DiagnosticMessage {\r\n\r\n /** Message code. */\r\n code: i32;\r\n /** Message category. */\r\n category: DiagnosticCategory;\r\n /** Message text. */\r\n message: string;\r\n /** Respective source range, if any. */\r\n range: Range | null = null;\r\n\r\n /** Constructs a new diagnostic message. */\r\n private constructor(code: i32, category: DiagnosticCategory, message: string) {\r\n this.code = code;\r\n this.category = category;\r\n this.message = message;\r\n }\r\n\r\n /** Creates a new diagnostic message of the specified category. */\r\n static create(\r\n code: DiagnosticCode,\r\n category: DiagnosticCategory,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): DiagnosticMessage {\r\n var message = diagnosticCodeToString(code);\r\n if (arg0 != null) message = message.replace(\"{0}\", arg0);\r\n if (arg1 != null) message = message.replace(\"{1}\", arg1);\r\n if (arg2 != null) message = message.replace(\"{2}\", arg2);\r\n return new DiagnosticMessage(code, category, message);\r\n }\r\n\r\n /** Creates a new informatory diagnostic message. */\r\n static createInfo(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.INFO, arg0, arg1);\r\n }\r\n\r\n /** Creates a new warning diagnostic message. */\r\n static createWarning(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.WARNING, arg0, arg1);\r\n }\r\n\r\n /** Creates a new error diagnostic message. */\r\n static createError(\r\n code: DiagnosticCode,\r\n arg0: string | null = null,\r\n arg1: string | null = null\r\n ): DiagnosticMessage {\r\n return DiagnosticMessage.create(code, DiagnosticCategory.ERROR, arg0, arg1);\r\n }\r\n\r\n /** Adds a source range to this message. */\r\n withRange(range: Range): this {\r\n this.range = range;\r\n return this;\r\n }\r\n\r\n /** Converts this message to a string. */\r\n toString(): string {\r\n if (this.range) {\r\n return (\r\n diagnosticCategoryToString(this.category) +\r\n \" \" +\r\n this.code.toString(10) +\r\n \": \\\"\" +\r\n this.message +\r\n \"\\\" in \" +\r\n this.range.source.normalizedPath +\r\n \":\" +\r\n this.range.line.toString(10) +\r\n \":\" +\r\n this.range.column.toString(10)\r\n );\r\n }\r\n return (\r\n diagnosticCategoryToString(this.category) +\r\n \" \" +\r\n this.code.toString(10) +\r\n \": \" +\r\n this.message\r\n );\r\n }\r\n}\r\n\r\n/** Formats a diagnostic message, optionally with terminal colors and source context. */\r\nexport function formatDiagnosticMessage(\r\n message: DiagnosticMessage,\r\n useColors: bool = false,\r\n showContext: bool = false\r\n): string {\r\n\r\n // general information\r\n var sb: string[] = [];\r\n if (useColors) sb.push(diagnosticCategoryToColor(message.category));\r\n sb.push(diagnosticCategoryToString(message.category));\r\n if (useColors) sb.push(COLOR_RESET);\r\n sb.push(message.code < 1000 ? \" AS\" : \" TS\");\r\n sb.push(message.code.toString(10));\r\n sb.push(\": \");\r\n sb.push(message.message);\r\n\r\n // include range information if available\r\n if (message.range) {\r\n\r\n // include context information if requested\r\n let range = message.range;\r\n if (showContext) {\r\n sb.push(\"\\n\");\r\n sb.push(formatDiagnosticContext(message.range, useColors));\r\n }\r\n\r\n sb.push(\"\\n\");\r\n sb.push(\" in \");\r\n sb.push(range.source.normalizedPath);\r\n sb.push(\"(\");\r\n sb.push(range.line.toString(10));\r\n sb.push(\",\");\r\n sb.push(range.column.toString(10));\r\n sb.push(\")\");\r\n }\r\n return sb.join(\"\");\r\n}\r\n\r\n/** Formats the diagnostic context for the specified range, optionally with terminal colors. */\r\nexport function formatDiagnosticContext(range: Range, useColors: bool = false): string {\r\n var text = range.source.text;\r\n var len = text.length;\r\n var start = range.start;\r\n var end = range.end;\r\n while (start > 0 && !isLineBreak(text.charCodeAt(start - 1))) start--;\r\n while (end < len && !isLineBreak(text.charCodeAt(end))) end++;\r\n var sb: string[] = [\r\n \"\\n \",\r\n text.substring(start, end),\r\n \"\\n \"\r\n ];\r\n while (start < range.start) {\r\n sb.push(\" \");\r\n start++;\r\n }\r\n if (useColors) sb.push(COLOR_RED);\r\n if (range.start == range.end) {\r\n sb.push(\"^\");\r\n } else {\r\n while (start++ < range.end) sb.push(\"~\");\r\n }\r\n if (useColors) sb.push(COLOR_RESET);\r\n return sb.join(\"\");\r\n}\r\n\r\n/** Base class of all diagnostic emitters. */\r\nexport abstract class DiagnosticEmitter {\r\n\r\n /** Diagnostic messages emitted so far. */\r\n diagnostics: DiagnosticMessage[];\r\n\r\n /** Initializes this diagnostic emitter. */\r\n protected constructor(diagnostics: DiagnosticMessage[] | null = null) {\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n }\r\n\r\n /** Emits a diagnostic message of the specified category. */\r\n emitDiagnostic(\r\n code: DiagnosticCode,\r\n category: DiagnosticCategory,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n var message = DiagnosticMessage.create(code, category, arg0, arg1, arg2).withRange(range);\r\n this.diagnostics.push(message);\r\n // console.log(formatDiagnosticMessage(message, true, true) + \"\\n\"); // temporary\r\n // console.log(new Error(\"stack\").stack);\r\n }\r\n\r\n /** Emits an informatory diagnostic message. */\r\n info(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.INFO, range, arg0, arg1, arg2);\r\n }\r\n\r\n /** Emits a warning diagnostic message. */\r\n warning(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.WARNING, range, arg0, arg1, arg2);\r\n }\r\n\r\n /** Emits an error diagnostic message. */\r\n error(\r\n code: DiagnosticCode,\r\n range: Range,\r\n arg0: string | null = null,\r\n arg1: string | null = null,\r\n arg2: string | null = null\r\n ): void {\r\n this.emitDiagnostic(code, DiagnosticCategory.ERROR, range, arg0, arg1, arg2);\r\n }\r\n}\r\n","/**\r\n * A thin wrapper around Binaryen's C-API.\r\n * @module module\r\n *//***/\r\n\r\nimport {\r\n Target\r\n} from \"./compiler\";\r\n\r\nexport type ModuleRef = usize;\r\nexport type FunctionTypeRef = usize;\r\nexport type FunctionRef = usize;\r\nexport type ExpressionRef = usize;\r\nexport type GlobalRef = usize;\r\nexport type ImportRef = usize;\r\nexport type ExportRef = usize;\r\nexport type Index = u32;\r\n\r\nexport enum NativeType {\r\n None = _BinaryenTypeNone(),\r\n I32 = _BinaryenTypeInt32(),\r\n I64 = _BinaryenTypeInt64(),\r\n F32 = _BinaryenTypeFloat32(),\r\n F64 = _BinaryenTypeFloat64(),\r\n Unreachable = _BinaryenTypeUnreachable(),\r\n Auto = _BinaryenTypeAuto()\r\n}\r\n\r\nexport enum ExpressionId {\r\n Invalid = _BinaryenInvalidId(),\r\n Block = _BinaryenBlockId(),\r\n If = _BinaryenIfId(),\r\n Loop = _BinaryenLoopId(),\r\n Break = _BinaryenBreakId(),\r\n Switch = _BinaryenSwitchId(),\r\n Call = _BinaryenCallId(),\r\n CallImport = _BinaryenCallImportId(),\r\n CallIndirect = _BinaryenCallIndirectId(),\r\n GetLocal = _BinaryenGetLocalId(),\r\n SetLocal = _BinaryenSetLocalId(),\r\n GetGlobal = _BinaryenGetGlobalId(),\r\n SetGlobal = _BinaryenSetGlobalId(),\r\n Load = _BinaryenLoadId(),\r\n Store = _BinaryenStoreId(),\r\n Const = _BinaryenConstId(),\r\n Unary = _BinaryenUnaryId(),\r\n Binary = _BinaryenBinaryId(),\r\n Select = _BinaryenSelectId(),\r\n Drop = _BinaryenDropId(),\r\n Return = _BinaryenReturnId(),\r\n Host = _BinaryenHostId(),\r\n Nop = _BinaryenNopId(),\r\n Unreachable = _BinaryenUnreachableId(),\r\n AtomicCmpxchg = _BinaryenAtomicCmpxchgId(),\r\n AtomicRMW = _BinaryenAtomicRMWId(),\r\n AtomicWait = _BinaryenAtomicWaitId(),\r\n AtomicWake = _BinaryenAtomicWakeId()\r\n}\r\n\r\nexport enum UnaryOp {\r\n ClzI32 = _BinaryenClzInt32(),\r\n CtzI32 = _BinaryenCtzInt32(),\r\n PopcntI32 = _BinaryenPopcntInt32(),\r\n NegF32 = _BinaryenNegFloat32(),\r\n AbsF32 = _BinaryenAbsFloat32(),\r\n CeilF32 = _BinaryenCeilFloat32(),\r\n FloorF32 = _BinaryenFloorFloat32(),\r\n TruncF32 = _BinaryenTruncFloat32(),\r\n NearestF32 = _BinaryenNearestFloat32(),\r\n SqrtF32 = _BinaryenSqrtFloat32(),\r\n EqzI32 = _BinaryenEqZInt32(),\r\n ClzI64 = _BinaryenClzInt64(),\r\n CtzI64 = _BinaryenCtzInt64(),\r\n PopcntI64 = _BinaryenPopcntInt64(),\r\n NegF64 = _BinaryenNegFloat64(),\r\n AbsF64 = _BinaryenAbsFloat64(),\r\n CeilF64 = _BinaryenCeilFloat64(),\r\n FloorF64 = _BinaryenFloorFloat64(),\r\n TruncF64 = _BinaryenTruncFloat64(),\r\n NearestF64 = _BinaryenNearestFloat64(),\r\n SqrtF64 = _BinaryenSqrtFloat64(),\r\n EqzI64 = _BinaryenEqZInt64(),\r\n ExtendI32 = _BinaryenExtendSInt32(),\r\n ExtendU32 = _BinaryenExtendUInt32(),\r\n WrapI64 = _BinaryenWrapInt64(),\r\n TruncF32ToI32 = _BinaryenTruncSFloat32ToInt32(),\r\n TruncF32ToI64 = _BinaryenTruncSFloat32ToInt64(),\r\n TruncF32ToU32 = _BinaryenTruncUFloat32ToInt32(),\r\n TruncF32ToU64 = _BinaryenTruncUFloat32ToInt64(),\r\n TruncF64ToI32 = _BinaryenTruncSFloat64ToInt32(),\r\n TruncF64ToI64 = _BinaryenTruncSFloat64ToInt64(),\r\n TruncF64ToU32 = _BinaryenTruncUFloat64ToInt32(),\r\n TruncF64ToU64 = _BinaryenTruncUFloat64ToInt64(),\r\n ReinterpretF32 = _BinaryenReinterpretFloat32(),\r\n ReinterpretF64 = _BinaryenReinterpretFloat64(),\r\n ConvertI32ToF32 = _BinaryenConvertSInt32ToFloat32(),\r\n ConvertI32ToF64 = _BinaryenConvertSInt32ToFloat64(),\r\n ConvertU32ToF32 = _BinaryenConvertUInt32ToFloat32(),\r\n ConvertU32ToF64 = _BinaryenConvertUInt32ToFloat64(),\r\n ConvertI64ToF32 = _BinaryenConvertSInt64ToFloat32(),\r\n ConvertI64ToF64 = _BinaryenConvertSInt64ToFloat64(),\r\n ConvertU64ToF32 = _BinaryenConvertUInt64ToFloat32(),\r\n ConvertU64ToF64 = _BinaryenConvertUInt64ToFloat64(),\r\n PromoteF32 = _BinaryenPromoteFloat32(),\r\n DemoteF64 = _BinaryenDemoteFloat64(),\r\n ReinterpretI32 = _BinaryenReinterpretInt32(),\r\n ReinterpretI64 = _BinaryenReinterpretInt64(),\r\n\r\n // see: https://github.com/WebAssembly/sign-extension-ops\r\n ExtendI8ToI32 = _BinaryenExtendS8Int32(),\r\n ExtendI16ToI32 = _BinaryenExtendS16Int32(),\r\n ExtendI8ToI64 = _BinaryenExtendS8Int64(),\r\n ExtendI16ToI64 = _BinaryenExtendS16Int64(),\r\n ExtendI32ToI64 = _BinaryenExtendS32Int64()\r\n\r\n // see: https://github.com/WebAssembly/nontrapping-float-to-int-conversions\r\n // TruncF32ToI32Sat\r\n // TruncF32ToU32Sat\r\n // TruncF64ToI32Sat\r\n // TruncF64ToU32Sat\r\n // TruncF32ToI64Sat\r\n // TruncF32ToU64Sat\r\n // TruncF64ToI64Sat\r\n // TruncF64ToU64Sat\r\n}\r\n\r\nexport enum BinaryOp {\r\n AddI32 = _BinaryenAddInt32(),\r\n SubI32 = _BinaryenSubInt32(),\r\n MulI32 = _BinaryenMulInt32(),\r\n DivI32 = _BinaryenDivSInt32(),\r\n DivU32 = _BinaryenDivUInt32(),\r\n RemI32 = _BinaryenRemSInt32(),\r\n RemU32 = _BinaryenRemUInt32(),\r\n AndI32 = _BinaryenAndInt32(),\r\n OrI32 = _BinaryenOrInt32(),\r\n XorI32 = _BinaryenXorInt32(),\r\n ShlI32 = _BinaryenShlInt32(),\r\n ShrU32 = _BinaryenShrUInt32(),\r\n ShrI32 = _BinaryenShrSInt32(),\r\n RotlI32 = _BinaryenRotLInt32(),\r\n RotrI32 = _BinaryenRotRInt32(),\r\n EqI32 = _BinaryenEqInt32(),\r\n NeI32 = _BinaryenNeInt32(),\r\n LtI32 = _BinaryenLtSInt32(),\r\n LtU32 = _BinaryenLtUInt32(),\r\n LeI32 = _BinaryenLeSInt32(),\r\n LeU32 = _BinaryenLeUInt32(),\r\n GtI32 = _BinaryenGtSInt32(),\r\n GtU32 = _BinaryenGtUInt32(),\r\n GeI32 = _BinaryenGeSInt32(),\r\n GeU32 = _BinaryenGeUInt32(),\r\n AddI64 = _BinaryenAddInt64(),\r\n SubI64 = _BinaryenSubInt64(),\r\n MulI64 = _BinaryenMulInt64(),\r\n DivI64 = _BinaryenDivSInt64(),\r\n DivU64 = _BinaryenDivUInt64(),\r\n RemI64 = _BinaryenRemSInt64(),\r\n RemU64 = _BinaryenRemUInt64(),\r\n AndI64 = _BinaryenAndInt64(),\r\n OrI64 = _BinaryenOrInt64(),\r\n XorI64 = _BinaryenXorInt64(),\r\n ShlI64 = _BinaryenShlInt64(),\r\n ShrU64 = _BinaryenShrUInt64(),\r\n ShrI64 = _BinaryenShrSInt64(),\r\n RotlI64 = _BinaryenRotLInt64(),\r\n RotrI64 = _BinaryenRotRInt64(),\r\n EqI64 = _BinaryenEqInt64(),\r\n NeI64 = _BinaryenNeInt64(),\r\n LtI64 = _BinaryenLtSInt64(),\r\n LtU64 = _BinaryenLtUInt64(),\r\n LeI64 = _BinaryenLeSInt64(),\r\n LeU64 = _BinaryenLeUInt64(),\r\n GtI64 = _BinaryenGtSInt64(),\r\n GtU64 = _BinaryenGtUInt64(),\r\n GeI64 = _BinaryenGeSInt64(),\r\n GeU64 = _BinaryenGeUInt64(),\r\n AddF32 = _BinaryenAddFloat32(),\r\n SubF32 = _BinaryenSubFloat32(),\r\n MulF32 = _BinaryenMulFloat32(),\r\n DivF32 = _BinaryenDivFloat32(),\r\n CopysignF32 = _BinaryenCopySignFloat32(),\r\n MinF32 = _BinaryenMinFloat32(),\r\n MaxF32 = _BinaryenMaxFloat32(),\r\n EqF32 = _BinaryenEqFloat32(),\r\n NeF32 = _BinaryenNeFloat32(),\r\n LtF32 = _BinaryenLtFloat32(),\r\n LeF32 = _BinaryenLeFloat32(),\r\n GtF32 = _BinaryenGtFloat32(),\r\n GeF32 = _BinaryenGeFloat32(),\r\n AddF64 = _BinaryenAddFloat64(),\r\n SubF64 = _BinaryenSubFloat64(),\r\n MulF64 = _BinaryenMulFloat64(),\r\n DivF64 = _BinaryenDivFloat64(),\r\n CopysignF64 = _BinaryenCopySignFloat64(),\r\n MinF64 = _BinaryenMinFloat64(),\r\n MaxF64 = _BinaryenMaxFloat64(),\r\n EqF64 = _BinaryenEqFloat64(),\r\n NeF64 = _BinaryenNeFloat64(),\r\n LtF64 = _BinaryenLtFloat64(),\r\n LeF64 = _BinaryenLeFloat64(),\r\n GtF64 = _BinaryenGtFloat64(),\r\n GeF64 = _BinaryenGeFloat64()\r\n}\r\n\r\nexport enum HostOp {\r\n PageSize = _BinaryenPageSize(),\r\n CurrentMemory = _BinaryenCurrentMemory(),\r\n GrowMemory = _BinaryenGrowMemory(),\r\n HasFeature = _BinaryenHasFeature(),\r\n\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n // MoveMemory\r\n // SetMemory\r\n}\r\n\r\nexport enum AtomicRMWOp {\r\n Add = _BinaryenAtomicRMWAdd(),\r\n Sub = _BinaryenAtomicRMWSub(),\r\n And = _BinaryenAtomicRMWAnd(),\r\n Or = _BinaryenAtomicRMWOr(),\r\n Xor = _BinaryenAtomicRMWXor(),\r\n Xchg = _BinaryenAtomicRMWXchg()\r\n}\r\n\r\nexport class MemorySegment {\r\n\r\n buffer: Uint8Array;\r\n offset: I64;\r\n\r\n static create(buffer: Uint8Array, offset: I64): MemorySegment {\r\n var segment = new MemorySegment();\r\n segment.buffer = buffer;\r\n segment.offset = offset;\r\n return segment;\r\n }\r\n}\r\n\r\nexport class Module {\r\n\r\n ref: ModuleRef;\r\n\r\n private cachedByValue: usize;\r\n\r\n /** Maximum number of pages when targeting WASM32. */\r\n static readonly MAX_MEMORY_WASM32: Index = 0xffff;\r\n\r\n /** Maximum number of pages when targeting WASM64. */\r\n static readonly MAX_MEMORY_WASM64: Index = 0xffff; // TODO\r\n\r\n static create(): Module {\r\n var module = new Module();\r\n module.ref = _BinaryenModuleCreate();\r\n module.cachedByValue = allocate_memory(16);\r\n return module;\r\n }\r\n\r\n static createFrom(buffer: Uint8Array): Module {\r\n var cArr = allocU8Array(buffer);\r\n try {\r\n let module = new Module();\r\n module.ref = _BinaryenModuleRead(cArr, buffer.length);\r\n module.cachedByValue = allocate_memory(3 * 8); // LLVM C-ABI, max used is 3 * usize\r\n return module;\r\n } finally {\r\n free_memory(changetype(cArr));\r\n }\r\n }\r\n\r\n private constructor() { }\r\n\r\n // types\r\n\r\n addFunctionType(\r\n name: string,\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenAddFunctionType(this.ref, cStr, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n getFunctionTypeBySignature(\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionTypeRef {\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenGetFunctionTypeBySignature(this.ref, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n removeFunctionType(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunctionType(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n // constants\r\n\r\n createI32(value: i32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createI64(valueLow: i32, valueHigh: i32 = 0): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralInt64(out, valueLow, valueHigh);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF32(value: f32): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF64(value: f64): ExpressionRef {\r\n var out = this.cachedByValue;\r\n _BinaryenLiteralFloat64(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n // expressions\r\n\r\n createUnary(\r\n op: UnaryOp,\r\n expr: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenUnary(this.ref, op, expr);\r\n }\r\n\r\n createBinary(\r\n op: BinaryOp,\r\n left: ExpressionRef,\r\n right: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenBinary(this.ref, op, left, right);\r\n }\r\n\r\n createHost(\r\n op: HostOp,\r\n name: string | null = null,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenHost(this.ref, op, cStr, cArr, operands ? (operands).length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createGetLocal(\r\n index: i32,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenGetLocal(this.ref, index, type);\r\n }\r\n\r\n createTeeLocal(\r\n index: i32,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenTeeLocal(this.ref, index, value);\r\n }\r\n\r\n createGetGlobal(\r\n name: string,\r\n type: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenGetGlobal(this.ref, cStr, type);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createLoad(\r\n bytes: Index,\r\n signed: bool,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenLoad(this.ref, bytes, signed ? 1 : 0, offset, /* always aligned */ bytes, type, ptr);\r\n }\r\n\r\n createStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenStore(this.ref, bytes, offset, /* always aligned */ bytes, ptr, value, type);\r\n }\r\n\r\n createAtomicLoad(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicLoad(this.ref, bytes, offset, type, ptr);\r\n }\r\n\r\n createAtomicStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicStore(this.ref, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicRMW(\r\n op: AtomicRMWOp,\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicRMW(this.ref, op, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicCmpxchg(\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n replacement: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicCmpxchg(this.ref, bytes, offset, ptr, expected, replacement, type);\r\n }\r\n\r\n createAtomicWait(\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n timeout: ExpressionRef,\r\n expectedType: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWait(this.ref, ptr, expected, timeout, expectedType);\r\n }\r\n\r\n createAtomicWake(\r\n ptr: ExpressionRef,\r\n wakeCount: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWake(this.ref, ptr, wakeCount);\r\n }\r\n\r\n // statements\r\n\r\n createSetLocal(\r\n index: Index,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSetLocal(this.ref, index, value);\r\n }\r\n\r\n createSetGlobal(\r\n name: string,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenSetGlobal(this.ref, cStr, value);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createBlock(\r\n label: string | null,\r\n children: ExpressionRef[],\r\n type: NativeType = NativeType.None\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n var cArr = allocPtrArray(children);\r\n try {\r\n return _BinaryenBlock(this.ref, cStr, cArr, children.length, type);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createBreak(\r\n label: string | null,\r\n condition: ExpressionRef = 0,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenBreak(this.ref, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createDrop(\r\n expression: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenDrop(this.ref, expression);\r\n }\r\n\r\n createLoop(\r\n label: string | null,\r\n body: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenLoop(this.ref, cStr, body);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createIf(\r\n condition: ExpressionRef,\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenIf(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createNop(): ExpressionRef {\r\n return _BinaryenNop(this.ref);\r\n }\r\n\r\n createReturn(\r\n expression: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenReturn(this.ref, expression);\r\n }\r\n\r\n createSelect(\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef,\r\n condition: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSelect(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createSwitch(\r\n names: string[],\r\n defaultName: string | null,\r\n condition: ExpressionRef,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numNames = names.length;\r\n var strs = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n strs[i] = allocString(names[i]);\r\n }\r\n var cArr = allocI32Array(strs);\r\n var cStr = allocString(defaultName);\r\n try {\r\n return _BinaryenSwitch(this.ref, cArr, numNames, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n for (let i = numNames - 1; i >= 0; --i) free_memory(strs[i]);\r\n }\r\n }\r\n\r\n createCall(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenCall(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createCallImport(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocPtrArray(operands);\r\n try {\r\n return _BinaryenCallImport(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createCallIndirect(\r\n index: ExpressionRef,\r\n operands: ExpressionRef[] | null,\r\n typeName: string\r\n ): ExpressionRef {\r\n var cArr = allocPtrArray(operands);\r\n var cStr = allocString(typeName);\r\n try {\r\n return _BinaryenCallIndirect(this.ref, index, cArr, operands && operands.length || 0, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n createUnreachable(): ExpressionRef {\r\n return _BinaryenUnreachable(this.ref);\r\n }\r\n\r\n // meta\r\n\r\n addGlobal(\r\n name: string,\r\n type: NativeType,\r\n mutable: bool,\r\n initializer: ExpressionRef\r\n ): GlobalRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenAddGlobal(this.ref, cStr, type, mutable ? 1 : 0, initializer);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunction(\r\n name: string,\r\n type: FunctionTypeRef,\r\n varTypes: NativeType[] | null,\r\n body: ExpressionRef\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(varTypes);\r\n try {\r\n return _BinaryenAddFunction(this.ref, cStr, type, cArr, varTypes ? varTypes.length : 0, body);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n removeFunction(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunction(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n private cachedTemporaryName: usize = 0;\r\n private hasTemporaryFunction: bool = false;\r\n\r\n addTemporaryFunction(result: NativeType, paramTypes: NativeType[] | null, body: ExpressionRef): FunctionRef {\r\n this.hasTemporaryFunction = assert(!this.hasTemporaryFunction);\r\n var tempName = this.cachedTemporaryName;\r\n if (!tempName) this.cachedTemporaryName = tempName = allocString(\"\"); // works because strings are interned\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n let typeRef = _BinaryenAddFunctionType(this.ref, tempName, result, cArr, paramTypes ? paramTypes.length : 0);\r\n return _BinaryenAddFunction(this.ref, tempName, typeRef, 0, 0, body);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n removeTemporaryFunction(): void {\r\n this.hasTemporaryFunction = !assert(this.hasTemporaryFunction);\r\n var tempName = assert(this.cachedTemporaryName);\r\n _BinaryenRemoveFunction(this.ref, tempName);\r\n _BinaryenRemoveFunctionType(this.ref, tempName);\r\n }\r\n\r\n addFunctionExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddFunctionExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addTableExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddTableExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addMemoryExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddMemoryExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addGlobalExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddGlobalExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n removeExport(externalName: string): void {\r\n var cStr = allocString(externalName);\r\n try {\r\n _BinaryenRemoveExport(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunctionImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n functionType: FunctionTypeRef\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddFunctionImport(this.ref, cStr1, cStr2, cStr3, functionType);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addTableImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddTableImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addMemoryImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddMemoryImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addGlobalImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n globalType: NativeType\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddGlobalImport(this.ref, cStr1, cStr2, cStr3, globalType);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n removeImport(internalName: string): void {\r\n var cStr = allocString(internalName);\r\n try {\r\n _BinaryenRemoveImport(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n setMemory(\r\n initial: Index,\r\n maximum: Index,\r\n segments: MemorySegment[],\r\n target: Target,\r\n exportName: string | null = null\r\n ): void {\r\n var cStr = allocString(exportName);\r\n var k = segments.length;\r\n var segs = new Array(k);\r\n var offs = new Array(k);\r\n var sizs = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let buffer = segments[i].buffer;\r\n let offset = segments[i].offset;\r\n segs[i] = allocU8Array(buffer);\r\n offs[i] = target == Target.WASM64\r\n ? this.createI64(i64_low(offset), i64_high(offset))\r\n : this.createI32(i64_low(offset));\r\n sizs[i] = buffer.length;\r\n }\r\n var cArr1 = allocI32Array(segs);\r\n var cArr2 = allocI32Array(offs);\r\n var cArr3 = allocI32Array(sizs);\r\n try {\r\n _BinaryenSetMemory(this.ref, initial, maximum, cStr, cArr1, cArr2, cArr3, k);\r\n } finally {\r\n free_memory(cArr3);\r\n free_memory(cArr2);\r\n free_memory(cArr1);\r\n for (let i = k - 1; i >= 0; --i) free_memory(segs[i]);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n setFunctionTable(funcs: FunctionRef[]): void {\r\n var cArr = allocPtrArray(funcs);\r\n try {\r\n _BinaryenSetFunctionTable(this.ref, cArr, funcs.length);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n setStart(func: FunctionRef): void {\r\n _BinaryenSetStart(this.ref, func);\r\n }\r\n\r\n setOptimizeLevel(level: i32 = 2): void {\r\n _BinaryenSetOptimizeLevel(level);\r\n }\r\n\r\n setShrinkLevel(level: i32 = 1): void {\r\n _BinaryenSetShrinkLevel(level);\r\n }\r\n\r\n setDebugInfo(on: bool = false): void {\r\n _BinaryenSetDebugInfo(on);\r\n }\r\n\r\n optimize(func: FunctionRef = 0): void {\r\n if (func) {\r\n _BinaryenFunctionOptimize(func, this.ref);\r\n } else {\r\n _BinaryenModuleOptimize(this.ref);\r\n }\r\n }\r\n\r\n runPasses(passes: string[], func: FunctionRef = 0): void {\r\n var numNames = passes.length;\r\n var names = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n names[i] = allocString(passes[i]);\r\n }\r\n var cArr = allocI32Array(names);\r\n try {\r\n if (func) {\r\n _BinaryenFunctionRunPasses(func, this.ref, cArr, numNames);\r\n } else {\r\n _BinaryenModuleRunPasses(this.ref, cArr, numNames);\r\n }\r\n } finally {\r\n free_memory(cArr);\r\n for (let i = numNames; i >= 0; --i) {\r\n free_memory(names[i]);\r\n }\r\n }\r\n }\r\n\r\n private cachedPrecomputeName: usize = 0;\r\n private cachedPrecomputeNames: usize = 0;\r\n\r\n precomputeFunction(func: FunctionRef): void {\r\n var names = this.cachedPrecomputeNames;\r\n if (!names) {\r\n let name = allocString(\"precompute\");\r\n this.cachedPrecomputeName = name;\r\n this.cachedPrecomputeNames = names = allocI32Array([ name ]);\r\n }\r\n _BinaryenFunctionRunPasses(func, this.ref, names, 1);\r\n }\r\n\r\n validate(): bool {\r\n return _BinaryenModuleValidate(this.ref) == 1;\r\n }\r\n\r\n interpret(): void {\r\n _BinaryenModuleInterpret(this.ref);\r\n }\r\n\r\n toBinary(sourceMapUrl: string | null): BinaryModule {\r\n var out = this.cachedByValue;\r\n var cStr = allocString(sourceMapUrl);\r\n var binaryPtr: usize = 0;\r\n var sourceMapPtr: usize = 0;\r\n try {\r\n _BinaryenModuleAllocateAndWrite(out, this.ref, cStr);\r\n binaryPtr = readInt(out);\r\n let binaryBytes = readInt(out + 4);\r\n sourceMapPtr = readInt(out + 4 * 2);\r\n let ret = new BinaryModule();\r\n ret.output = readBuffer(binaryPtr, binaryBytes);\r\n ret.sourceMap = readString(sourceMapPtr);\r\n return ret;\r\n } finally {\r\n if (cStr) free_memory(cStr);\r\n if (binaryPtr) free_memory(binaryPtr);\r\n if (sourceMapPtr) free_memory(sourceMapPtr);\r\n }\r\n }\r\n\r\n toText(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n toAsmjs(): string {\r\n throw new Error(\"not implemented\"); // JS glue overrides this\r\n }\r\n\r\n dispose(): void {\r\n assert(this.ref);\r\n free_memory(this.cachedByValue);\r\n free_memory(this.cachedTemporaryName);\r\n free_memory(this.cachedPrecomputeName);\r\n free_memory(this.cachedPrecomputeNames);\r\n _BinaryenModuleDispose(this.ref);\r\n this.ref = 0;\r\n }\r\n\r\n createRelooper(): Relooper {\r\n return Relooper.create(this);\r\n }\r\n\r\n cloneExpression(\r\n expr: ExpressionRef,\r\n noSideEffects: bool = false,\r\n maxDepth: i32 = i32.MAX_VALUE\r\n ): ExpressionRef { // currently supports side effect free expressions only\r\n if (maxDepth < 0) return 0;\r\n maxDepth -= 1;\r\n\r\n var nested1: ExpressionRef,\r\n nested2: ExpressionRef;\r\n\r\n switch (_BinaryenExpressionGetId(expr)) {\r\n case ExpressionId.Const: {\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32: {\r\n return this.createI32(_BinaryenConstGetValueI32(expr));\r\n }\r\n case NativeType.I64: {\r\n return this.createI64(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n }\r\n case NativeType.F32: {\r\n return this.createF32(_BinaryenConstGetValueF32(expr));\r\n }\r\n case NativeType.F64: {\r\n return this.createF64(_BinaryenConstGetValueF64(expr));\r\n }\r\n default: {\r\n throw new Error(\"concrete type expected\");\r\n }\r\n }\r\n }\r\n case ExpressionId.GetLocal: {\r\n return _BinaryenGetLocal(this.ref,\r\n _BinaryenGetLocalGetIndex(expr),\r\n _BinaryenExpressionGetType(expr)\r\n );\r\n }\r\n case ExpressionId.GetGlobal: {\r\n let globalName = _BinaryenGetGlobalGetName(expr);\r\n if (!globalName) break;\r\n return _BinaryenGetGlobal(this.ref, globalName, _BinaryenExpressionGetType(expr));\r\n }\r\n case ExpressionId.Load: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenLoadGetPtr(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return (\r\n _BinaryenLoadIsAtomic(expr)\r\n ? _BinaryenAtomicLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n : _BinaryenLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadIsSigned(expr) ? 1 : 0,\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenLoadGetAlign(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n );\r\n }\r\n case ExpressionId.Unary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenUnaryGetValue(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenUnary(this.ref, _BinaryenUnaryGetOp(expr), nested1);\r\n }\r\n case ExpressionId.Binary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenBinaryGetLeft(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n if (!(nested2 = this.cloneExpression(_BinaryenBinaryGetRight(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenBinary(this.ref, _BinaryenBinaryGetOp(expr), nested1, nested2);\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n // source map generation\r\n\r\n addDebugInfoFile(name: string): Index {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenModuleAddDebugInfoFileName(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n getDebugInfoFile(index: Index): string | null {\r\n return readString(_BinaryenModuleGetDebugInfoFileName(this.ref, index));\r\n }\r\n\r\n setDebugLocation(\r\n func: FunctionRef,\r\n expr: ExpressionRef,\r\n fileIndex: Index,\r\n lineNumber: Index,\r\n columnNumber: Index\r\n ): void {\r\n _BinaryenFunctionSetDebugLocation(func, expr, fileIndex, lineNumber, columnNumber);\r\n }\r\n}\r\n\r\n// expressions\r\n\r\nexport function getExpressionId(expr: ExpressionRef): ExpressionId {\r\n return _BinaryenExpressionGetId(expr);\r\n}\r\n\r\nexport function getExpressionType(expr: ExpressionRef): NativeType {\r\n return _BinaryenExpressionGetType(expr);\r\n}\r\n\r\nexport function getConstValueI32(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI32(expr);\r\n}\r\n\r\nexport function getConstValueI64Low(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64Low(expr);\r\n}\r\n\r\nexport function getConstValueI64High(expr: ExpressionRef): i32 {\r\n return _BinaryenConstGetValueI64High(expr);\r\n}\r\n\r\nexport function getConstValueF32(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF32(expr);\r\n}\r\n\r\nexport function getConstValueF64(expr: ExpressionRef): f32 {\r\n return _BinaryenConstGetValueF64(expr);\r\n}\r\n\r\nexport function getGetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenGetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalIndex(expr: ExpressionRef): Index {\r\n return _BinaryenSetLocalGetIndex(expr);\r\n}\r\n\r\nexport function getSetLocalValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSetLocalGetValue(expr);\r\n}\r\n\r\nexport function isTeeLocal(expr: ExpressionRef): bool {\r\n return _BinaryenSetLocalIsTee(expr);\r\n}\r\n\r\nexport function getBinaryOp(expr: ExpressionRef): BinaryOp {\r\n return _BinaryenBinaryGetOp(expr);\r\n}\r\n\r\nexport function getBinaryLeft(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetLeft(expr);\r\n}\r\n\r\nexport function getBinaryRight(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBinaryGetRight(expr);\r\n}\r\n\r\nexport function getUnaryOp(expr: ExpressionRef): UnaryOp {\r\n return _BinaryenUnaryGetOp(expr);\r\n}\r\n\r\nexport function getUnaryValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenUnaryGetValue(expr);\r\n}\r\n\r\nexport function getLoadBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetBytes(expr);\r\n}\r\n\r\nexport function getLoadOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenLoadGetOffset(expr);\r\n}\r\n\r\nexport function getLoadPtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoadGetPtr(expr);\r\n}\r\n\r\nexport function isLoadSigned(expr: ExpressionRef): bool {\r\n return _BinaryenLoadIsSigned(expr);\r\n}\r\n\r\nexport function getStoreBytes(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetBytes(expr);\r\n}\r\n\r\nexport function getStoreOffset(expr: ExpressionRef): u32 {\r\n return _BinaryenStoreGetOffset(expr);\r\n}\r\n\r\nexport function getStorePtr(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetPtr(expr);\r\n}\r\n\r\nexport function getStoreValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenStoreGetValue(expr);\r\n}\r\n\r\nexport function getBlockName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBlockGetName(expr));\r\n}\r\n\r\nexport function getBlockChildCount(expr: ExpressionRef): Index {\r\n return _BinaryenBlockGetNumChildren(expr);\r\n}\r\n\r\nexport function getBlockChild(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenBlockGetChild(expr, index);\r\n}\r\n\r\nexport function getIfCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetCondition(expr);\r\n}\r\n\r\nexport function getIfTrue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfTrue(expr);\r\n}\r\n\r\nexport function getIfFalse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenIfGetIfFalse(expr);\r\n}\r\n\r\nexport function getLoopName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenLoopGetName(expr));\r\n}\r\n\r\nexport function getLoopBody(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenLoopGetBody(expr);\r\n}\r\n\r\nexport function getBreakName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenBreakGetName(expr));\r\n}\r\n\r\nexport function getBreakCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenBreakGetCondition(expr);\r\n}\r\n\r\nexport function getSelectThen(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfTrue(expr);\r\n}\r\n\r\nexport function getSelectElse(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetIfFalse(expr);\r\n}\r\n\r\nexport function getSelectCondition(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenSelectGetCondition(expr);\r\n}\r\n\r\nexport function getDropValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenDropGetValue(expr);\r\n}\r\n\r\nexport function getReturnValue(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenReturnGetValue(expr);\r\n}\r\n\r\nexport function getCallTarget(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenCallGetTarget(expr));\r\n}\r\n\r\nexport function getHostOp(expr: ExpressionRef): ExpressionRef {\r\n return _BinaryenHostGetOp(expr);\r\n}\r\n\r\nexport function getHostOperandCount(expr: ExpressionRef): Index {\r\n return _BinaryenHostGetNumOperands(expr);\r\n}\r\n\r\nexport function getHostOperand(expr: ExpressionRef, index: Index): ExpressionRef {\r\n return _BinaryenHostGetOperand(expr, index);\r\n}\r\n\r\nexport function getHostName(expr: ExpressionRef): string | null {\r\n return readString(_BinaryenHostGetNameOperand(expr));\r\n}\r\n\r\n// functions\r\n\r\nexport function getFunctionBody(func: FunctionRef): ExpressionRef {\r\n return _BinaryenFunctionGetBody(func);\r\n}\r\n\r\nexport function getFunctionName(func: FunctionRef): string | null {\r\n return readString(_BinaryenFunctionGetName(func));\r\n}\r\n\r\nexport function getFunctionParamCount(func: FunctionRef): Index {\r\n return _BinaryenFunctionGetNumParams(func);\r\n}\r\n\r\nexport function getFunctionParamType(func: FunctionRef, index: Index): NativeType {\r\n return _BinaryenFunctionGetParam(func, index);\r\n}\r\n\r\nexport function getFunctionResultType(func: FunctionRef): NativeType {\r\n return _BinaryenFunctionGetResult(func);\r\n}\r\n\r\nexport class Relooper {\r\n\r\n module: Module;\r\n ref: RelooperRef;\r\n\r\n static create(module: Module): Relooper {\r\n var relooper = new Relooper();\r\n relooper.module = module;\r\n relooper.ref = _RelooperCreate();\r\n return relooper;\r\n }\r\n\r\n private constructor() {}\r\n\r\n addBlock(code: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlock(this.ref, code);\r\n }\r\n\r\n addBranch(from: RelooperBlockRef, to: RelooperBlockRef, condition: ExpressionRef = 0, code: ExpressionRef = 0): void {\r\n _RelooperAddBranch(from, to, condition, code);\r\n }\r\n\r\n addBlockWithSwitch(code: ExpressionRef, condition: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlockWithSwitch(this.ref, code, condition);\r\n }\r\n\r\n addBranchForSwitch(from: RelooperBlockRef, to: RelooperBlockRef, indexes: i32[], code: ExpressionRef = 0): void {\r\n var cArr = allocI32Array(indexes);\r\n try {\r\n _RelooperAddBranchForSwitch(from, to, cArr, indexes.length, code);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n renderAndDispose(entry: RelooperBlockRef, labelHelper: Index): ExpressionRef {\r\n return _RelooperRenderAndDispose(this.ref, entry, labelHelper, this.module.ref);\r\n }\r\n}\r\n\r\n// export function hasSideEffects(expr: ExpressionRef): bool {\r\n// switch (_BinaryenExpressionGetId(expr = getPtr(expr))) {\r\n// case ExpressionId.GetLocal:\r\n// case ExpressionId.GetGlobal:\r\n// case ExpressionId.Const:\r\n// case ExpressionId.Nop:\r\n// case ExpressionId.Unreachable: {\r\n// return false;\r\n// }\r\n// case ExpressionId.Block: {\r\n// for (let i = 0, k = _BinaryenBlockGetNumChildren(expr); i < k; ++i) {\r\n// if (hasSideEffects(_BinaryenBlockGetChild(expr, i))) return true;\r\n// }\r\n// return false;\r\n// }\r\n// case ExpressionId.If: {\r\n// return hasSideEffects(_BinaryenIfGetCondition(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenIfGetIfFalse(expr));\r\n// }\r\n// case ExpressionId.Unary: {\r\n// return hasSideEffects(_BinaryenUnaryGetValue(expr));\r\n// }\r\n// case ExpressionId.Binary: {\r\n// return hasSideEffects(_BinaryenBinaryGetLeft(expr))\r\n// || hasSideEffects(_BinaryenBinaryGetRight(expr));\r\n// }\r\n// case ExpressionId.Drop: {\r\n// return hasSideEffects(_BinaryenDropGetValue(expr));\r\n// }\r\n// case ExpressionId.Select: {\r\n// return hasSideEffects(_BinaryenSelectGetIfTrue(expr))\r\n// || hasSideEffects(_BinaryenSelectGetIfFalse(expr))\r\n// || hasSideEffects(_BinaryenSelectGetCondition(expr));\r\n// }\r\n// }\r\n// return true;\r\n// }\r\n\r\n// helpers\r\n// can't do stack allocation here: STACKTOP is a global in WASM but a hidden variable in asm.js\r\n\r\nfunction allocU8Array(u8s: Uint8Array | null): usize {\r\n if (!u8s) return 0;\r\n var numValues = u8s.length;\r\n var ptr = allocate_memory(numValues);\r\n var idx = ptr;\r\n for (let i = 0; i < numValues; ++i) {\r\n store(idx++, u8s[i]);\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocI32Array(i32s: i32[] | null): usize {\r\n if (!i32s) return 0;\r\n var ptr = allocate_memory(i32s.length << 2);\r\n var idx = ptr;\r\n for (let i = 0, k = i32s.length; i < k; ++i) {\r\n let val = i32s[i];\r\n // store(idx, val) is not portable\r\n store(idx , ( val & 0xff) as u8);\r\n store(idx + 1, ((val >> 8) & 0xff) as u8);\r\n store(idx + 2, ((val >> 16) & 0xff) as u8);\r\n store(idx + 3, ( val >>> 24 ) as u8);\r\n idx += 4;\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocPtrArray(ptrs: usize[] | null): usize {\r\n return allocI32Array(ptrs); // TODO: WASM64 one day\r\n}\r\n\r\nfunction stringLengthUTF8(str: string): usize {\r\n var len = 0;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n ++len;\r\n } else if (u <= 0x7FF) {\r\n len += 2;\r\n } else if (u <= 0xFFFF) {\r\n len += 3;\r\n } else if (u <= 0x1FFFFF) {\r\n len += 4;\r\n } else if (u <= 0x3FFFFFF) {\r\n len += 5;\r\n } else {\r\n len += 6;\r\n }\r\n }\r\n return len;\r\n}\r\n\r\nfunction allocString(str: string | null): usize {\r\n if (str == null) return 0;\r\n var ptr = allocate_memory(stringLengthUTF8(str) + 1);\r\n // the following is based on Emscripten's stringToUTF8Array\r\n var idx = ptr;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n store(idx++, u as u8);\r\n } else if (u <= 0x7FF) {\r\n store(idx++, (0xC0 | (u >>> 6) ) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0xFFFF) {\r\n store(idx++, (0xE0 | (u >>> 12) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x1FFFFF) {\r\n store(idx++, (0xF0 | (u >>> 18) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x3FFFFFF) {\r\n store(idx++, (0xF8 | (u >>> 24) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else {\r\n store(idx++, (0xFC | (u >>> 30) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 24) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n }\r\n }\r\n store(idx, 0);\r\n return ptr;\r\n}\r\n\r\nfunction readInt(ptr: usize): i32 {\r\n return (\r\n load(ptr ) |\r\n (load(ptr + 1) << 8) |\r\n (load(ptr + 2) << 16) |\r\n (load(ptr + 3) << 24)\r\n );\r\n}\r\n\r\nfunction readBuffer(ptr: usize, length: usize): Uint8Array {\r\n var ret = new Uint8Array(length);\r\n for (let i: usize = 0; i < length; ++i) {\r\n ret[i] = load(ptr + i);\r\n }\r\n return ret;\r\n}\r\n\r\nexport function readString(ptr: usize): string | null {\r\n if (!ptr) return null;\r\n var arr = new Array();\r\n // the following is based on Emscripten's UTF8ArrayToString\r\n var cp: u32;\r\n var u1: u32, u2: u32, u3: u32, u4: u32, u5: u32;\r\n while (cp = load(ptr++)) {\r\n if (!(cp & 0x80)) {\r\n arr.push(cp);\r\n continue;\r\n }\r\n u1 = load(ptr++) & 63;\r\n if ((cp & 0xE0) == 0xC0) {\r\n arr.push(((cp & 31) << 6) | u1);\r\n continue;\r\n }\r\n u2 = load(ptr++) & 63;\r\n if ((cp & 0xF0) == 0xE0) {\r\n cp = ((cp & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u3 = load(ptr++) & 63;\r\n if ((cp & 0xF8) == 0xF0) {\r\n cp = ((cp & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;\r\n } else {\r\n u4 = load(ptr++) & 63;\r\n if ((cp & 0xFC) == 0xF8) {\r\n cp = ((cp & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;\r\n } else {\r\n u5 = load(ptr++) & 63;\r\n cp = ((cp & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;\r\n }\r\n }\r\n }\r\n arr.push(cp);\r\n // if (cp < 0x10000) {\r\n // arr.push(cp);\r\n // } else {\r\n // var ch = cp - 0x10000;\r\n // arr.push(0xD800 | (ch >> 10));\r\n // arr.push(0xDC00 | (ch & 0x3FF));\r\n // }\r\n }\r\n // return String.fromCharCodes(arr);\r\n return String.fromCodePoints(arr);\r\n}\r\n\r\n/** Result structure of {@link Module#toBinary}. */\r\nexport class BinaryModule {\r\n /** WebAssembly binary. */\r\n output: Uint8Array;\r\n /** Source map, if generated. */\r\n sourceMap: string | null;\r\n}\r\n","/**\r\n * Abstract syntax tree representing a source file once parsed.\r\n * @module ast\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n PATH_DELIMITER,\r\n STATIC_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n LIBRARY_PREFIX\r\n} from \"./common\";\r\n\r\nimport {\r\n Token,\r\n Tokenizer,\r\n Range\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n normalizePath,\r\n resolvePath,\r\n CharCode\r\n} from \"./util\";\r\n\r\nexport { Token, Range };\r\n\r\n/** Indicates the kind of a node. */\r\nexport enum NodeKind {\r\n\r\n SOURCE,\r\n\r\n // types\r\n TYPE,\r\n TYPEPARAMETER,\r\n PARAMETER,\r\n SIGNATURE,\r\n\r\n // expressions\r\n IDENTIFIER,\r\n ASSERTION,\r\n BINARY,\r\n CALL,\r\n COMMA,\r\n ELEMENTACCESS,\r\n FALSE,\r\n FUNCTION,\r\n INSTANCEOF,\r\n LITERAL,\r\n NEW,\r\n NULL,\r\n PARENTHESIZED,\r\n PROPERTYACCESS,\r\n TERNARY,\r\n SUPER,\r\n THIS,\r\n TRUE,\r\n CONSTRUCTOR,\r\n UNARYPOSTFIX,\r\n UNARYPREFIX,\r\n\r\n // statements\r\n BLOCK,\r\n BREAK,\r\n CONTINUE,\r\n DO,\r\n EMPTY,\r\n EXPORT,\r\n EXPORTIMPORT,\r\n EXPRESSION,\r\n FOR,\r\n IF,\r\n IMPORT,\r\n RETURN,\r\n SWITCH,\r\n THROW,\r\n TRY,\r\n VARIABLE,\r\n VOID,\r\n WHILE,\r\n\r\n // declaration statements\r\n CLASSDECLARATION,\r\n ENUMDECLARATION,\r\n ENUMVALUEDECLARATION,\r\n FIELDDECLARATION,\r\n FUNCTIONDECLARATION,\r\n IMPORTDECLARATION,\r\n INTERFACEDECLARATION,\r\n METHODDECLARATION,\r\n NAMESPACEDECLARATION,\r\n TYPEDECLARATION,\r\n VARIABLEDECLARATION,\r\n\r\n // special\r\n DECORATOR,\r\n EXPORTMEMBER,\r\n SWITCHCASE,\r\n COMMENT\r\n}\r\n\r\n/** Checks if a node represents a constant value. */\r\nexport function nodeIsConstantValue(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.LITERAL:\r\n case NodeKind.NULL:\r\n case NodeKind.TRUE:\r\n case NodeKind.FALSE: return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Checks if a node might be callable. */\r\nexport function nodeIsCallable(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.CALL:\r\n case NodeKind.ELEMENTACCESS:\r\n case NodeKind.PROPERTYACCESS: return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Checks if a node might be callable with generic arguments. */\r\nexport function nodeIsGenericCallable(kind: NodeKind): bool {\r\n switch (kind) {\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.PROPERTYACCESS: return true;\r\n }\r\n return false;\r\n}\r\n\r\n/** Base class of all nodes. */\r\nexport abstract class Node {\r\n\r\n /** Node kind indicator. */\r\n kind: NodeKind;\r\n /** Source range. */\r\n range: Range;\r\n /** Parent node. */\r\n parent: Node | null = null;\r\n /** Common flags indicating specific traits. */\r\n flags: CommonFlags = CommonFlags.NONE;\r\n\r\n /** Tests if this node has the specified flag or flags. */\r\n is(flag: CommonFlags): bool { return (this.flags & flag) == flag; }\r\n /** Tests if this node has one of the specified flags. */\r\n isAny(flag: CommonFlags): bool { return (this.flags & flag) != 0; }\r\n /** Sets a specific flag or flags. */\r\n set(flag: CommonFlags): void { this.flags |= flag; }\r\n\r\n // types\r\n\r\n static createType(\r\n name: IdentifierExpression,\r\n typeArguments: CommonTypeNode[] | null,\r\n isNullable: bool,\r\n range: Range\r\n ): TypeNode {\r\n var type = new TypeNode();\r\n type.range = range;\r\n type.name = name; name.parent = type;\r\n type.typeArguments = typeArguments; if (typeArguments) setParent(typeArguments, type);\r\n type.isNullable = isNullable;\r\n return type;\r\n }\r\n\r\n static createOmittedType(\r\n range: Range\r\n ): TypeNode {\r\n return Node.createType(\r\n Node.createIdentifierExpression(\"\", range),\r\n null,\r\n false,\r\n range\r\n );\r\n }\r\n\r\n static createTypeParameter(\r\n name: IdentifierExpression,\r\n extendsType: TypeNode | null,\r\n range: Range\r\n ): TypeParameterNode {\r\n var elem = new TypeParameterNode();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n elem.extendsType = extendsType; if (extendsType) extendsType.parent = elem;\r\n return elem;\r\n }\r\n\r\n static createParameter(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode,\r\n initializer: Expression | null,\r\n kind: ParameterKind,\r\n range: Range\r\n ): ParameterNode {\r\n var elem = new ParameterNode();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n elem.type = type; if (type) type.parent = elem;\r\n elem.initializer = initializer; if (initializer) initializer.parent = elem;\r\n elem.parameterKind = kind;\r\n return elem;\r\n }\r\n\r\n static createSignature(\r\n parameters: ParameterNode[],\r\n returnType: CommonTypeNode,\r\n explicitThisType: TypeNode | null,\r\n isNullable: bool,\r\n range: Range\r\n ): SignatureNode {\r\n var sig = new SignatureNode();\r\n sig.range = range;\r\n sig.parameters = parameters; setParent(parameters, sig);\r\n sig.returnType = returnType; returnType.parent = sig;\r\n sig.explicitThisType = explicitThisType; if (explicitThisType) explicitThisType.parent = sig;\r\n sig.isNullable = isNullable;\r\n return sig;\r\n }\r\n\r\n // special\r\n\r\n static createDecorator(\r\n name: Expression,\r\n args: Expression[] | null,\r\n range: Range\r\n ): DecoratorNode {\r\n var stmt = new DecoratorNode();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.arguments = args; if (args) setParent(args, stmt);\r\n stmt.decoratorKind = decoratorNameToKind(name);\r\n return stmt;\r\n }\r\n\r\n static createComment(\r\n text: string,\r\n kind: CommentKind,\r\n range: Range\r\n ): CommentNode {\r\n var node = new CommentNode();\r\n node.range = range;\r\n node.commentKind = kind;\r\n node.text = text;\r\n return node;\r\n }\r\n\r\n // expressions\r\n\r\n static createIdentifierExpression(\r\n name: string,\r\n range: Range\r\n ): IdentifierExpression {\r\n var expr = new IdentifierExpression();\r\n expr.range = range;\r\n expr.text = name;\r\n return expr;\r\n }\r\n\r\n static createEmptyIdentifierExpression(\r\n range: Range\r\n ): IdentifierExpression {\r\n var expr = new IdentifierExpression();\r\n expr.range = range;\r\n expr.text = \"\";\r\n return expr;\r\n }\r\n\r\n static createArrayLiteralExpression(\r\n elements: (Expression | null)[],\r\n range: Range\r\n ): ArrayLiteralExpression {\r\n var expr = new ArrayLiteralExpression();\r\n expr.range = range;\r\n expr.elementExpressions = elements; setParentIfNotNull(elements, expr);\r\n return expr;\r\n }\r\n\r\n static createAssertionExpression(\r\n assertionKind: AssertionKind,\r\n expression: Expression,\r\n toType: CommonTypeNode,\r\n range: Range\r\n ): AssertionExpression {\r\n var expr = new AssertionExpression();\r\n expr.range = range;\r\n expr.assertionKind = assertionKind;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.toType = toType; toType.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createBinaryExpression(\r\n operator: Token,\r\n left: Expression,\r\n right: Expression,\r\n range: Range\r\n ): BinaryExpression {\r\n var expr = new BinaryExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.left = left; left.parent = expr;\r\n expr.right = right; right.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createCallExpression(\r\n expression: Expression,\r\n typeArgs: CommonTypeNode[] | null,\r\n args: Expression[],\r\n range: Range\r\n ): CallExpression {\r\n var expr = new CallExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.typeArguments = typeArgs; if (typeArgs) setParent(typeArgs, expr);\r\n expr.arguments = args; setParent(args, expr);\r\n return expr;\r\n }\r\n\r\n static createCommaExpression(\r\n expressions: Expression[],\r\n range: Range\r\n ): CommaExpression {\r\n var expr = new CommaExpression();\r\n expr.range = range;\r\n expr.expressions = expressions; setParent(expressions, expr);\r\n return expr;\r\n }\r\n\r\n static createConstructorExpression(\r\n range: Range\r\n ): ConstructorExpression {\r\n var expr = new ConstructorExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createElementAccessExpression(\r\n expression: Expression,\r\n element: Expression,\r\n range: Range\r\n ): ElementAccessExpression {\r\n var expr = new ElementAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.elementExpression = element; element.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createFalseExpression(\r\n range: Range\r\n ): FalseExpression {\r\n var expr = new FalseExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createFloatLiteralExpression(\r\n value: f64,\r\n range: Range\r\n ): FloatLiteralExpression {\r\n var expr = new FloatLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createFunctionExpression(\r\n declaration: FunctionDeclaration\r\n ): FunctionExpression {\r\n var expr = new FunctionExpression();\r\n expr.flags = declaration.flags & CommonFlags.ARROW;\r\n expr.range = declaration.range;\r\n expr.declaration = declaration;\r\n return expr;\r\n }\r\n\r\n static createInstanceOfExpression(\r\n expression: Expression,\r\n isType: CommonTypeNode,\r\n range: Range\r\n ): InstanceOfExpression {\r\n var expr = new InstanceOfExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.isType = isType; isType.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createIntegerLiteralExpression(\r\n value: I64,\r\n range: Range\r\n ): IntegerLiteralExpression {\r\n var expr = new IntegerLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createNewExpression(\r\n expression: Expression,\r\n typeArgs: CommonTypeNode[] | null,\r\n args: Expression[],\r\n range: Range\r\n ): NewExpression {\r\n var expr = new NewExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.typeArguments = typeArgs; if (typeArgs) setParent(typeArgs, expr);\r\n expr.arguments = args; setParent(args, expr);\r\n return expr;\r\n }\r\n\r\n static createNullExpression(\r\n range: Range\r\n ): NullExpression {\r\n var expr = new NullExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createParenthesizedExpression(\r\n expression: Expression,\r\n range: Range\r\n ): ParenthesizedExpression {\r\n var expr = new ParenthesizedExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createPropertyAccessExpression(\r\n expression: Expression,\r\n property: IdentifierExpression,\r\n range: Range\r\n ): PropertyAccessExpression {\r\n var expr = new PropertyAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.property = property; property.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createRegexpLiteralExpression(\r\n pattern: string,\r\n flags: string,\r\n range: Range\r\n ): RegexpLiteralExpression {\r\n var expr = new RegexpLiteralExpression();\r\n expr.range = range;\r\n expr.pattern = pattern;\r\n expr.patternFlags = flags;\r\n return expr;\r\n }\r\n\r\n static createTernaryExpression(\r\n condition: Expression,\r\n ifThen: Expression,\r\n ifElse: Expression,\r\n range: Range\r\n ): TernaryExpression {\r\n var expr = new TernaryExpression();\r\n expr.range = range;\r\n expr.condition = condition; condition.parent = expr;\r\n expr.ifThen = ifThen; ifThen.parent = expr;\r\n expr.ifElse = ifElse; ifElse.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createStringLiteralExpression(\r\n value: string,\r\n range: Range\r\n ): StringLiteralExpression {\r\n var expr = new StringLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createSuperExpression(\r\n range: Range\r\n ): SuperExpression {\r\n var expr = new SuperExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createThisExpression(\r\n range: Range\r\n ): ThisExpression {\r\n var expr = new ThisExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createTrueExpression(\r\n range: Range\r\n ): TrueExpression {\r\n var expr = new TrueExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createUnaryPostfixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPostfixExpression {\r\n var expr = new UnaryPostfixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createUnaryPrefixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPrefixExpression {\r\n var expr = new UnaryPrefixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n // statements\r\n\r\n static createBlockStatement(\r\n statements: Statement[],\r\n range: Range\r\n ): BlockStatement {\r\n var stmt = new BlockStatement();\r\n stmt.range = range;\r\n stmt.statements = statements; setParent(statements, stmt);\r\n return stmt;\r\n }\r\n\r\n static createBreakStatement(\r\n label: IdentifierExpression | null,\r\n range: Range\r\n ): BreakStatement {\r\n var stmt = new BreakStatement();\r\n stmt.range = range;\r\n stmt.label = label; if (label) label.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createClassDeclaration(\r\n identifier: IdentifierExpression,\r\n typeParameters: TypeParameterNode[],\r\n extendsType: TypeNode | null, // can't be a function\r\n implementsTypes: TypeNode[] | null, // can't be functions\r\n members: DeclarationStatement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): ClassDeclaration {\r\n var stmt = new ClassDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = identifier; identifier.parent = stmt;\r\n stmt.typeParameters = typeParameters; setParent(typeParameters, stmt);\r\n stmt.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.implementsTypes = implementsTypes; if (implementsTypes) setParent(implementsTypes, stmt);\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createContinueStatement(\r\n label: IdentifierExpression | null,\r\n range: Range\r\n ): ContinueStatement {\r\n var stmt = new ContinueStatement();\r\n stmt.range = range;\r\n stmt.label = label; if (label) label.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createDoStatement(\r\n statement: Statement,\r\n condition: Expression,\r\n range: Range\r\n ): DoStatement {\r\n var stmt = new DoStatement();\r\n stmt.range = range;\r\n stmt.statement = statement; statement.parent = stmt;\r\n stmt.condition = condition; condition.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createEmptyStatement(\r\n range: Range\r\n ): EmptyStatement {\r\n var stmt = new EmptyStatement();\r\n stmt.range = range;\r\n return stmt;\r\n }\r\n\r\n static createEnumDeclaration(\r\n name: IdentifierExpression,\r\n members: EnumValueDeclaration[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): EnumDeclaration {\r\n var stmt = new EnumDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.values = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createEnumValueDeclaration(\r\n name: IdentifierExpression,\r\n value: Expression | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): EnumValueDeclaration {\r\n var stmt = new EnumValueDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.value = value; if (value) value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createExportStatement(\r\n members: ExportMember[] | null,\r\n path: StringLiteralExpression | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): ExportStatement {\r\n var stmt = new ExportStatement();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.members = members; if (members) setParent(members, stmt);\r\n stmt.path = path;\r\n if (path) {\r\n let normalizedPath = normalizePath(path.value);\r\n if (path.value.startsWith(\".\")) { // relative\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n } else {\r\n stmt.normalizedPath = null;\r\n stmt.internalPath = null;\r\n }\r\n return stmt;\r\n }\r\n\r\n static createExportImportStatement(\r\n name: IdentifierExpression,\r\n externalName: IdentifierExpression,\r\n range: Range\r\n ): ExportImportStatement {\r\n var stmt = new ExportImportStatement();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.externalName = externalName; externalName.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createExportMember(\r\n name: IdentifierExpression,\r\n externalName: IdentifierExpression | null,\r\n range: Range\r\n ): ExportMember {\r\n var elem = new ExportMember();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n if (!externalName) {\r\n externalName = name;\r\n } else {\r\n externalName.parent = elem;\r\n }\r\n elem.externalName = externalName;\r\n return elem;\r\n }\r\n\r\n static createExpressionStatement(\r\n expression: Expression\r\n ): ExpressionStatement {\r\n var stmt = new ExpressionStatement();\r\n stmt.range = expression.range;\r\n stmt.expression = expression; expression.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createIfStatement(\r\n condition: Expression,\r\n ifTrue: Statement,\r\n ifFalse: Statement | null,\r\n range: Range\r\n ): IfStatement {\r\n var stmt = new IfStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.ifTrue = ifTrue; ifTrue.parent = stmt;\r\n stmt.ifFalse = ifFalse; if (ifFalse) ifFalse.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createImportStatement(\r\n decls: ImportDeclaration[] | null,\r\n path: StringLiteralExpression,\r\n range: Range\r\n ): ImportStatement {\r\n var stmt = new ImportStatement();\r\n stmt.range = range;\r\n stmt.declarations = decls; if (decls) setParent(decls, stmt);\r\n stmt.namespaceName = null;\r\n stmt.path = path;\r\n var normalizedPath = normalizePath(path.value);\r\n if (path.value.startsWith(\".\")) { // relative in project\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute in library\r\n if (!normalizedPath.startsWith(LIBRARY_PREFIX)) {\r\n normalizedPath = LIBRARY_PREFIX + normalizedPath;\r\n }\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n return stmt;\r\n }\r\n\r\n static createImportStatementWithWildcard(\r\n identifier: IdentifierExpression,\r\n path: StringLiteralExpression,\r\n range: Range\r\n ): ImportStatement {\r\n var stmt = new ImportStatement();\r\n stmt.range = range;\r\n stmt.declarations = null;\r\n stmt.namespaceName = identifier;\r\n stmt.path = path;\r\n stmt.normalizedPath = resolvePath(\r\n normalizePath(path.value),\r\n range.source.normalizedPath\r\n );\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n return stmt;\r\n }\r\n\r\n static createImportDeclaration(\r\n externalName: IdentifierExpression,\r\n name: IdentifierExpression | null,\r\n range: Range\r\n ): ImportDeclaration {\r\n var elem = new ImportDeclaration();\r\n elem.range = range;\r\n elem.externalName = externalName; externalName.parent = elem;\r\n if (!name) {\r\n name = externalName;\r\n } else {\r\n name.parent = elem;\r\n }\r\n elem.name = name;\r\n return elem;\r\n }\r\n\r\n static createInterfaceDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[],\r\n extendsType: TypeNode | null, // can't be a function\r\n members: DeclarationStatement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): InterfaceDeclaration {\r\n var stmt = new InterfaceDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createFieldDeclaration(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): FieldDeclaration {\r\n var stmt = new FieldDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.type = type; if (type) type.parent = stmt;\r\n stmt.initializer = initializer; if (initializer) initializer.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createForStatement(\r\n initializer: Statement | null,\r\n condition: Expression | null,\r\n incrementor: Expression | null,\r\n statement: Statement,\r\n range: Range\r\n ): ForStatement {\r\n var stmt = new ForStatement();\r\n stmt.range = range;\r\n stmt.initializer = initializer; if (initializer) initializer.parent = stmt;\r\n stmt.condition = condition; if (condition) condition.parent = stmt;\r\n stmt.incrementor = incrementor; if (incrementor) incrementor.parent = stmt;\r\n stmt.statement = statement; statement.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createFunctionDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): FunctionDeclaration {\r\n var stmt = new FunctionDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.signature = signature; signature.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createMethodDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): MethodDeclaration {\r\n var stmt = new MethodDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.signature = signature; signature.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createNamespaceDeclaration(\r\n name: IdentifierExpression,\r\n members: Statement[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): NamespaceDeclaration {\r\n var stmt = new NamespaceDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createReturnStatement(\r\n value: Expression | null,\r\n range: Range\r\n ): ReturnStatement {\r\n var stmt = new ReturnStatement();\r\n stmt.range = range;\r\n stmt.value = value; if (value) value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createSwitchStatement(\r\n condition: Expression,\r\n cases: SwitchCase[],\r\n range: Range\r\n ): SwitchStatement {\r\n var stmt = new SwitchStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.cases = cases; setParent(cases, stmt);\r\n return stmt;\r\n }\r\n\r\n static createSwitchCase(\r\n label: Expression | null,\r\n statements: Statement[],\r\n range: Range\r\n ): SwitchCase {\r\n var elem = new SwitchCase();\r\n elem.range = range;\r\n elem.label = label; if (label) label.parent = elem;\r\n elem.statements = statements; setParent(statements, elem);\r\n return elem;\r\n }\r\n\r\n static createThrowStatement(\r\n value: Expression,\r\n range: Range\r\n ): ThrowStatement {\r\n var stmt = new ThrowStatement();\r\n stmt.range = range;\r\n stmt.value = value; value.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createTryStatement(\r\n statements: Statement[],\r\n catchVariable: IdentifierExpression | null,\r\n catchStatements: Statement[] | null,\r\n finallyStatements: Statement[] | null,\r\n range: Range\r\n ): TryStatement {\r\n var stmt = new TryStatement();\r\n stmt.range = range;\r\n stmt.statements = statements; setParent(statements, stmt);\r\n stmt.catchVariable = catchVariable;\r\n if (catchVariable) catchVariable.parent = stmt;\r\n stmt.catchStatements = catchStatements;\r\n if (catchStatements) setParent(catchStatements, stmt);\r\n stmt.finallyStatements = finallyStatements;\r\n if (finallyStatements) setParent(finallyStatements, stmt);\r\n return stmt;\r\n }\r\n\r\n static createTypeDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n alias: CommonTypeNode,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): TypeDeclaration {\r\n var stmt = new TypeDeclaration();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.type = alias; alias.parent = stmt;\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createVariableStatement(\r\n declarations: VariableDeclaration[],\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): VariableStatement {\r\n var stmt = new VariableStatement();\r\n stmt.range = range;\r\n stmt.flags = flags;\r\n stmt.declarations = declarations; setParent(declarations, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createVariableDeclaration(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n decorators: DecoratorNode[] | null,\r\n flags: CommonFlags,\r\n range: Range\r\n ): VariableDeclaration {\r\n var elem = new VariableDeclaration();\r\n elem.range = range;\r\n elem.flags = flags;\r\n elem.name = name; name.parent = elem;\r\n elem.type = type; if (type) type.parent = elem;\r\n elem.initializer = initializer; if (initializer) initializer.parent = elem;\r\n elem.decorators = decorators; // inherited\r\n return elem;\r\n }\r\n\r\n static createVoidStatement(\r\n expression: Expression,\r\n range: Range\r\n ): VoidStatement {\r\n var stmt = new VoidStatement();\r\n stmt.range = range;\r\n stmt.expression = expression;\r\n return stmt;\r\n }\r\n\r\n static createWhileStatement(\r\n condition: Expression,\r\n statement: Statement,\r\n range: Range\r\n ): WhileStatement {\r\n var stmt = new WhileStatement();\r\n stmt.range = range;\r\n stmt.condition = condition; condition.parent = stmt;\r\n stmt.statement = statement; statement.parent = stmt;\r\n return stmt;\r\n }\r\n}\r\n\r\n// types\r\n\r\nexport abstract class CommonTypeNode extends Node {\r\n // kind varies\r\n\r\n /** Whether nullable or not. */\r\n isNullable: bool;\r\n}\r\n\r\n/** Represents a type annotation. */\r\nexport class TypeNode extends CommonTypeNode {\r\n kind = NodeKind.TYPE;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Type argument references. */\r\n typeArguments: CommonTypeNode[] | null;\r\n}\r\n\r\n/** Represents a type parameter. */\r\nexport class TypeParameterNode extends Node {\r\n kind = NodeKind.TYPEPARAMETER;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Extended type reference, if any. */\r\n extendsType: TypeNode | null; // can't be a function\r\n}\r\n\r\n/** Represents the kind of a parameter. */\r\nexport enum ParameterKind {\r\n /** No specific flags. */\r\n DEFAULT,\r\n /** Is an optional parameter. */\r\n OPTIONAL,\r\n /** Is a rest parameter. */\r\n REST\r\n}\r\n\r\n/** Represents a function parameter. */\r\nexport class ParameterNode extends Node {\r\n kind = NodeKind.PARAMETER;\r\n\r\n /** Parameter kind. */\r\n parameterKind: ParameterKind;\r\n /** Parameter name. */\r\n name: IdentifierExpression;\r\n /** Parameter type. */\r\n type: CommonTypeNode;\r\n /** Initializer expression, if present. */\r\n initializer: Expression | null;\r\n /** Implicit field declaration, if applicable. */\r\n implicitFieldDeclaration: FieldDeclaration | null = null;\r\n}\r\n\r\n/** Represents a function signature. */\r\nexport class SignatureNode extends CommonTypeNode {\r\n kind = NodeKind.SIGNATURE;\r\n\r\n /** Accepted parameters. */\r\n parameters: ParameterNode[];\r\n /** Return type. */\r\n returnType: CommonTypeNode;\r\n /** Explicitly provided this type, if any. */\r\n explicitThisType: TypeNode | null; // can't be a function\r\n}\r\n\r\n// special\r\n\r\n/** Built-in decorator kinds. */\r\nexport enum DecoratorKind {\r\n CUSTOM,\r\n GLOBAL,\r\n OPERATOR,\r\n OPERATOR_BINARY,\r\n OPERATOR_PREFIX,\r\n OPERATOR_POSTFIX,\r\n UNMANAGED,\r\n SEALED,\r\n INLINE\r\n}\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.g: {\r\n if (nameStr == \"global\") return DecoratorKind.GLOBAL;\r\n break;\r\n }\r\n case CharCode.i: {\r\n if (nameStr == \"inline\") return DecoratorKind.INLINE;\r\n break;\r\n }\r\n case CharCode.o: {\r\n if (nameStr == \"operator\") return DecoratorKind.OPERATOR;\r\n break;\r\n }\r\n case CharCode.s: {\r\n if (nameStr == \"sealed\") return DecoratorKind.SEALED;\r\n break;\r\n }\r\n case CharCode.u: {\r\n if (nameStr == \"unmanaged\") return DecoratorKind.UNMANAGED;\r\n break;\r\n }\r\n }\r\n } else if (\r\n name.kind == NodeKind.PROPERTYACCESS &&\r\n (name).expression.kind == NodeKind.IDENTIFIER\r\n ) {\r\n let nameStr = ((name).expression).text;\r\n assert(nameStr.length);\r\n let propStr = (name).property.text;\r\n assert(propStr.length);\r\n // @operator.binary, @operator.prefix, @operator.postfix\r\n if (nameStr == \"operator\") {\r\n switch (propStr.charCodeAt(0)) {\r\n case CharCode.b: {\r\n if (propStr == \"binary\") return DecoratorKind.OPERATOR_BINARY;\r\n break;\r\n }\r\n case CharCode.p: {\r\n switch (propStr) {\r\n case \"prefix\": return DecoratorKind.OPERATOR_PREFIX;\r\n case \"postfix\": return DecoratorKind.OPERATOR_POSTFIX;\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return DecoratorKind.CUSTOM;\r\n}\r\n\r\n/** Represents a decorator. */\r\nexport class DecoratorNode extends Node {\r\n kind = NodeKind.DECORATOR;\r\n\r\n /** Built-in kind, if applicable. */\r\n decoratorKind: DecoratorKind;\r\n /** Name expression. */\r\n name: Expression;\r\n /** Argument expressions. */\r\n arguments: Expression[] | null;\r\n}\r\n\r\n/** Comment kinds. */\r\nexport enum CommentKind {\r\n /** Line comment. */\r\n LINE,\r\n /** Triple-slash comment. */\r\n TRIPLE,\r\n /** Block comment. */\r\n BLOCK\r\n}\r\n\r\n/** Represents a comment. */\r\nexport class CommentNode extends Node {\r\n kind = NodeKind.COMMENT;\r\n\r\n /** Comment kind. */\r\n commentKind: CommentKind;\r\n /** Comment text. */\r\n text: string;\r\n}\r\n\r\n// expressions\r\n\r\n/** Base class of all expression nodes. */\r\nexport abstract class Expression extends Node { }\r\n\r\n/** Represents an identifier expression. */\r\nexport class IdentifierExpression extends Expression {\r\n kind = NodeKind.IDENTIFIER;\r\n\r\n /** Textual name. */\r\n text: string;\r\n}\r\n\r\n/** Indicates the kind of a literal. */\r\nexport enum LiteralKind {\r\n FLOAT,\r\n INTEGER,\r\n STRING,\r\n REGEXP,\r\n ARRAY,\r\n OBJECT\r\n}\r\n\r\n/** Base class of all literal expressions. */\r\nexport abstract class LiteralExpression extends Expression {\r\n kind = NodeKind.LITERAL;\r\n\r\n /** Specific literal kind. */\r\n literalKind: LiteralKind;\r\n}\r\n\r\n/** Represents an `[]` literal expression. */\r\nexport class ArrayLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.ARRAY;\r\n\r\n /** Nested element expressions. */\r\n elementExpressions: (Expression | null)[];\r\n}\r\n\r\n/** Indicates the kind of an assertion. */\r\nexport enum AssertionKind {\r\n PREFIX,\r\n AS\r\n}\r\n\r\n/** Represents an assertion expression. */\r\nexport class AssertionExpression extends Expression {\r\n kind = NodeKind.ASSERTION;\r\n\r\n /** Specific kind of this assertion. */\r\n assertionKind: AssertionKind;\r\n /** Expression being asserted. */\r\n expression: Expression;\r\n /** Target type. */\r\n toType: CommonTypeNode;\r\n}\r\n\r\n/** Represents a binary expression. */\r\nexport class BinaryExpression extends Expression {\r\n kind = NodeKind.BINARY;\r\n\r\n /** Operator token. */\r\n operator: Token;\r\n /** Left-hand side expression */\r\n left: Expression;\r\n /** Right-hand side expression. */\r\n right: Expression;\r\n}\r\n\r\n/** Represents a call expression. */\r\nexport class CallExpression extends Expression {\r\n kind = NodeKind.CALL;\r\n\r\n /** Called expression. Usually an identifier or property access expression. */\r\n expression: Expression;\r\n /** Provided type arguments. */\r\n typeArguments: CommonTypeNode[] | null;\r\n /** Provided arguments. */\r\n arguments: Expression[];\r\n}\r\n\r\n/** Represents a comma expression composed of multiple expressions. */\r\nexport class CommaExpression extends Expression {\r\n kind = NodeKind.COMMA;\r\n\r\n /** Sequential expressions. */\r\n expressions: Expression[];\r\n}\r\n\r\n/** Represents a `constructor` expression. */\r\nexport class ConstructorExpression extends IdentifierExpression {\r\n kind = NodeKind.CONSTRUCTOR;\r\n text = \"constructor\";\r\n}\r\n\r\n/** Represents an element access expression, e.g., array access. */\r\nexport class ElementAccessExpression extends Expression {\r\n kind = NodeKind.ELEMENTACCESS;\r\n\r\n /** Expression being accessed. */\r\n expression: Expression;\r\n /** Element of the expression being accessed. */\r\n elementExpression: Expression;\r\n}\r\n\r\n/** Represents a float literal expression. */\r\nexport class FloatLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.FLOAT;\r\n\r\n /** Float value. */\r\n value: f64;\r\n}\r\n\r\n/** Represents a function expression using the 'function' keyword. */\r\nexport class FunctionExpression extends Expression {\r\n kind = NodeKind.FUNCTION;\r\n\r\n /** Inline function declaration. */\r\n declaration: FunctionDeclaration;\r\n}\r\n\r\n/** Represents an `instanceof` expression. */\r\nexport class InstanceOfExpression extends Expression {\r\n kind = NodeKind.INSTANCEOF;\r\n\r\n /** Expression being asserted. */\r\n expression: Expression;\r\n /** Type to test for. */\r\n isType: CommonTypeNode;\r\n}\r\n\r\n/** Represents an integer literal expression. */\r\nexport class IntegerLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.INTEGER;\r\n\r\n /** Integer value. */\r\n value: I64;\r\n}\r\n\r\n/** Represents a `new` expression. Like a call but with its own kind. */\r\nexport class NewExpression extends CallExpression {\r\n kind = NodeKind.NEW;\r\n}\r\n\r\n/** Represents a `null` expression. */\r\nexport class NullExpression extends IdentifierExpression {\r\n kind = NodeKind.NULL;\r\n text = \"null\";\r\n}\r\n\r\n/** Represents a parenthesized expression. */\r\nexport class ParenthesizedExpression extends Expression {\r\n kind = NodeKind.PARENTHESIZED;\r\n\r\n /** Expression in parenthesis. */\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a property access expression. */\r\nexport class PropertyAccessExpression extends Expression {\r\n kind = NodeKind.PROPERTYACCESS;\r\n\r\n /** Expression being accessed. */\r\n expression: Expression;\r\n /** Property of the expression being accessed. */\r\n property: IdentifierExpression;\r\n}\r\n\r\n/** Represents a regular expression literal expression. */\r\nexport class RegexpLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.REGEXP;\r\n\r\n /** Regular expression pattern. */\r\n pattern: string;\r\n /** Regular expression flags. */\r\n patternFlags: string;\r\n}\r\n\r\n/** Represents a ternary expression, i.e., short if notation. */\r\nexport class TernaryExpression extends Expression {\r\n kind = NodeKind.TERNARY;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Expression executed when condition is `true`. */\r\n ifThen: Expression;\r\n /** Expression executed when condition is `false`. */\r\n ifElse: Expression;\r\n}\r\n\r\n/** Represents a string literal expression. */\r\nexport class StringLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.STRING;\r\n\r\n /** String value without quotes. */\r\n value: string;\r\n}\r\n\r\n/** Represents a `super` expression. */\r\nexport class SuperExpression extends IdentifierExpression {\r\n kind = NodeKind.SUPER;\r\n text = \"super\";\r\n}\r\n\r\n/** Represents a `this` expression. */\r\nexport class ThisExpression extends IdentifierExpression {\r\n kind = NodeKind.THIS;\r\n text = \"this\";\r\n}\r\n\r\n/** Represents a `true` expression. */\r\nexport class TrueExpression extends IdentifierExpression {\r\n kind = NodeKind.TRUE;\r\n text = \"true\";\r\n}\r\n\r\n/** Represents a `false` expression. */\r\nexport class FalseExpression extends IdentifierExpression {\r\n kind = NodeKind.FALSE;\r\n text = \"false\";\r\n}\r\n\r\n/** Base class of all unary expressions. */\r\nexport abstract class UnaryExpression extends Expression {\r\n\r\n /** Operator token. */\r\n operator: Token;\r\n /** Operand expression. */\r\n operand: Expression;\r\n}\r\n\r\n/** Represents a unary postfix expression, e.g. a postfix increment. */\r\nexport class UnaryPostfixExpression extends UnaryExpression {\r\n kind = NodeKind.UNARYPOSTFIX;\r\n}\r\n\r\n/** Represents a unary prefix expression, e.g. a negation. */\r\nexport class UnaryPrefixExpression extends UnaryExpression {\r\n kind = NodeKind.UNARYPREFIX;\r\n}\r\n\r\n// statements\r\n\r\nexport function isLastStatement(statement: Statement): bool {\r\n var parent = assert(statement.parent);\r\n if (parent.kind == NodeKind.BLOCK) {\r\n let statements = (parent).statements;\r\n if (statements[statements.length - 1] === statement) {\r\n switch (assert(parent.parent).kind) {\r\n case NodeKind.FUNCTIONDECLARATION:\r\n case NodeKind.METHODDECLARATION: return true;\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n\r\n/** Base class of all statement nodes. */\r\nexport abstract class Statement extends Node { }\r\n\r\n/** Indicates the specific kind of a source. */\r\nexport enum SourceKind {\r\n /** Default source. Usually imported from an entry file. */\r\n DEFAULT,\r\n /** Entry file. */\r\n ENTRY,\r\n /** Library file. */\r\n LIBRARY\r\n}\r\n\r\n/** A top-level source node. */\r\nexport class Source extends Node {\r\n kind = NodeKind.SOURCE;\r\n parent = null;\r\n\r\n /** Source kind. */\r\n sourceKind: SourceKind;\r\n /** Normalized path. */\r\n normalizedPath: string;\r\n /** Path used internally. */\r\n internalPath: string;\r\n /** 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 this.internalPath = mangleInternalPath(this.normalizedPath);\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/** Tests if a specific decorator is present within the specified decorators. */\r\nexport function hasDecorator(name: string, decorators: DecoratorNode[] | null): bool {\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let expression = decorators[i].name;\r\n if (expression.kind == NodeKind.IDENTIFIER && (expression).text == name) {\r\n return true;\r\n }\r\n }\r\n }\r\n return false;\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} from \"./compiler\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticMessage,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags,\r\n Signature,\r\n typesToString\r\n} from \"./types\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Source,\r\n Range,\r\n CommonTypeNode,\r\n TypeNode,\r\n TypeParameterNode,\r\n ParameterKind,\r\n SignatureNode,\r\n DecoratorNode,\r\n DecoratorKind,\r\n\r\n Expression,\r\n AssertionExpression,\r\n ElementAccessExpression,\r\n IdentifierExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n ParenthesizedExpression,\r\n PropertyAccessExpression,\r\n StringLiteralExpression,\r\n CallExpression,\r\n\r\n ClassDeclaration,\r\n DeclarationStatement,\r\n EnumDeclaration,\r\n EnumValueDeclaration,\r\n ExportMember,\r\n ExportStatement,\r\n FieldDeclaration,\r\n FunctionDeclaration,\r\n ImportDeclaration,\r\n ImportStatement,\r\n InterfaceDeclaration,\r\n MethodDeclaration,\r\n NamespaceDeclaration,\r\n TypeDeclaration,\r\n VariableDeclaration,\r\n VariableLikeDeclarationStatement,\r\n VariableStatement,\r\n\r\n decoratorNameToKind\r\n} from \"./ast\";\r\n\r\nimport {\r\n Module,\r\n NativeType,\r\n FunctionRef,\r\n ExpressionRef,\r\n ExpressionId,\r\n BinaryOp,\r\n UnaryOp,\r\n\r\n getExpressionId,\r\n getGetLocalIndex,\r\n isTeeLocal,\r\n getSetLocalValue,\r\n getBinaryOp,\r\n getConstValueI32,\r\n getBinaryLeft,\r\n getBinaryRight,\r\n getUnaryOp,\r\n getExpressionType,\r\n getLoadBytes,\r\n isLoadSigned,\r\n getIfTrue,\r\n getIfFalse,\r\n getSelectThen,\r\n getSelectElse,\r\n getCallTarget,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getBlockName,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getConstValueI64Low\r\n} from \"./module\";\r\n\r\nimport {\r\n CharCode\r\n} from \"./util\";\r\n\r\n/** Represents a yet unresolved import. */\r\nclass QueuedImport {\r\n localName: string;\r\n externalName: string;\r\n externalNameAlt: string;\r\n declaration: ImportDeclaration | null; // not set if a filespace\r\n}\r\n\r\n/** Represents a yet unresolved export. */\r\nclass QueuedExport {\r\n externalName: string;\r\n isReExport: bool;\r\n member: ExportMember;\r\n}\r\n\r\n/** Represents a type alias. */\r\nclass TypeAlias {\r\n typeParameters: TypeParameterNode[] | null;\r\n type: CommonTypeNode;\r\n}\r\n\r\n/** Represents the kind of an operator overload. */\r\nexport enum OperatorKind {\r\n INVALID,\r\n\r\n // indexed access\r\n INDEXED_GET, // a[]\r\n INDEXED_SET, // a[]=b\r\n UNCHECKED_INDEXED_GET, // unchecked(a[])\r\n UNCHECKED_INDEXED_SET, // unchecked(a[]=b)\r\n\r\n // binary\r\n ADD, // a + b\r\n SUB, // a - b\r\n MUL, // a * b\r\n DIV, // a / b\r\n REM, // a % b\r\n POW, // a ** b\r\n BITWISE_AND, // a & b\r\n BITWISE_OR, // a | b\r\n BITWISE_XOR, // a ^ b\r\n BITWISE_SHL, // a << b\r\n BITWISE_SHR, // a >> b\r\n BITWISE_SHR_U, // a >>> b\r\n EQ, // a == b\r\n NE, // a != b\r\n GT, // a > b\r\n GE, // a >= b\r\n LT, // a < b\r\n LE, // a <= b\r\n\r\n // unary prefix\r\n PLUS, // +a\r\n MINUS, // -a\r\n NOT, // !a\r\n BITWISE_NOT, // ~a\r\n PREFIX_INC, // ++a\r\n PREFIX_DEC, // --a\r\n\r\n // unary postfix\r\n POSTFIX_INC, // a++\r\n POSTFIX_DEC // a--\r\n\r\n // not overridable:\r\n // IDENTITY // a === b\r\n // LOGICAL_AND // a && b\r\n // LOGICAL_OR // a || b\r\n}\r\n\r\n/** Returns the operator kind represented by the specified decorator and string argument. */\r\nfunction operatorKindFromDecorator(decoratorKind: DecoratorKind, arg: string): OperatorKind {\r\n assert(arg.length);\r\n switch (decoratorKind) {\r\n case DecoratorKind.OPERATOR:\r\n case DecoratorKind.OPERATOR_BINARY: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.OPENBRACKET: {\r\n if (arg == \"[]\") return OperatorKind.INDEXED_GET;\r\n if (arg == \"[]=\") return OperatorKind.INDEXED_SET;\r\n break;\r\n }\r\n case CharCode.OPENBRACE: {\r\n if (arg == \"{}\") return OperatorKind.UNCHECKED_INDEXED_GET;\r\n if (arg == \"{}=\") return OperatorKind.UNCHECKED_INDEXED_SET;\r\n break;\r\n }\r\n case CharCode.PLUS: {\r\n if (arg == \"+\") return OperatorKind.ADD;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"-\") return OperatorKind.SUB;\r\n break;\r\n }\r\n case CharCode.ASTERISK: {\r\n if (arg == \"*\") return OperatorKind.MUL;\r\n if (arg == \"**\") return OperatorKind.POW;\r\n break;\r\n }\r\n case CharCode.SLASH: {\r\n if (arg == \"/\") return OperatorKind.DIV;\r\n break;\r\n }\r\n case CharCode.PERCENT: {\r\n if (arg == \"%\") return OperatorKind.REM;\r\n break;\r\n }\r\n case CharCode.AMPERSAND: {\r\n if (arg == \"&\") return OperatorKind.BITWISE_AND;\r\n break;\r\n }\r\n case CharCode.BAR: {\r\n if (arg == \"|\") return OperatorKind.BITWISE_OR;\r\n break;\r\n }\r\n case CharCode.CARET: {\r\n if (arg == \"^\") return OperatorKind.BITWISE_XOR;\r\n break;\r\n }\r\n case CharCode.EQUALS: {\r\n if (arg == \"==\") return OperatorKind.EQ;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n if (arg == \"!=\") return OperatorKind.NE;\r\n break;\r\n }\r\n case CharCode.GREATERTHAN: {\r\n if (arg == \">\") return OperatorKind.GT;\r\n if (arg == \">=\") return OperatorKind.GE;\r\n if (arg == \">>\") return OperatorKind.BITWISE_SHR;\r\n if (arg == \">>>\") return OperatorKind.BITWISE_SHR_U;\r\n break;\r\n }\r\n case CharCode.LESSTHAN: {\r\n if (arg == \"<\") return OperatorKind.LT;\r\n if (arg == \"<=\") return OperatorKind.LE;\r\n if (arg == \"<<\") return OperatorKind.BITWISE_SHL;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case DecoratorKind.OPERATOR_PREFIX: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.PLUS: {\r\n if (arg == \"+\") return OperatorKind.PLUS;\r\n if (arg == \"++\") return OperatorKind.PREFIX_INC;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"-\") return OperatorKind.MINUS;\r\n if (arg == \"--\") return OperatorKind.PREFIX_DEC;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n if (arg == \"!\") return OperatorKind.NOT;\r\n break;\r\n }\r\n case CharCode.TILDE: {\r\n if (arg == \"~\") return OperatorKind.BITWISE_NOT;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case DecoratorKind.OPERATOR_POSTFIX: {\r\n switch (arg.charCodeAt(0)) {\r\n case CharCode.PLUS: {\r\n if (arg == \"++\") return OperatorKind.POSTFIX_INC;\r\n break;\r\n }\r\n case CharCode.MINUS: {\r\n if (arg == \"--\") return OperatorKind.POSTFIX_DEC;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n return OperatorKind.INVALID;\r\n}\r\n\r\nconst noTypesYet = new Map();\r\n\r\n/** Represents an AssemblyScript program. */\r\nexport class Program extends DiagnosticEmitter {\r\n\r\n /** Array of source files. */\r\n sources: Source[];\r\n /** Diagnostic offset used where repeatedly obtaining the next diagnostic. */\r\n diagnosticsOffset: i32 = 0;\r\n /** Compiler options. */\r\n options: Options;\r\n\r\n /** Elements by internal name. */\r\n elementsLookup: Map = new Map();\r\n /** Class and function instances by internal name. */\r\n instancesLookup: Map = new Map();\r\n /** Types by internal name. */\r\n typesLookup: Map = noTypesYet;\r\n /** Declared type aliases. */\r\n typeAliases: Map = new Map();\r\n /** File-level exports by exported name. */\r\n fileLevelExports: Map = new Map();\r\n /** Module-level exports by exported name. */\r\n moduleLevelExports: Map = new Map();\r\n\r\n /** Array prototype reference. */\r\n arrayPrototype: ClassPrototype | null = null;\r\n /** ArrayBufferView prototype reference. */\r\n arrayBufferViewPrototype: InterfacePrototype | null = null;\r\n /** String instance reference. */\r\n stringInstance: Class | null = null;\r\n\r\n /** Target expression of the previously resolved property or element access. */\r\n resolvedThisExpression: Expression | null = null;\r\n /** Element expression of the previously resolved element access. */\r\n resolvedElementExpression : Expression | null = null;\r\n /** Currently processing filespace. */\r\n currentFilespace: Filespace;\r\n\r\n /** Constructs a new program, optionally inheriting parser diagnostics. */\r\n constructor(diagnostics: DiagnosticMessage[] | null = null) {\r\n super(diagnostics);\r\n this.sources = [];\r\n }\r\n\r\n /** Gets a source by its exact path. */\r\n getSource(normalizedPath: string): Source | null {\r\n var sources = this.sources;\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n let source = sources[i];\r\n if (source.normalizedPath == normalizedPath) return source;\r\n }\r\n return null;\r\n }\r\n\r\n /** Looks up the source for the specified possibly ambiguous path. */\r\n lookupSourceByPath(normalizedPathWithoutExtension: string): Source | null {\r\n var tmp: string;\r\n return (\r\n this.getSource(normalizedPathWithoutExtension + \".ts\") ||\r\n this.getSource(normalizedPathWithoutExtension + \"/index.ts\") ||\r\n this.getSource((tmp = LIBRARY_PREFIX + normalizedPathWithoutExtension) + \".ts\") ||\r\n this.getSource( tmp + \"/index.ts\")\r\n );\r\n }\r\n\r\n /** Initializes the program and its elements prior to compilation. */\r\n initialize(options: Options): void {\r\n this.options = options;\r\n 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 var queuedImports = new Array();\r\n var queuedExports = new Map();\r\n var queuedExtends = new Array();\r\n var queuedImplements = new Array();\r\n\r\n // build initial lookup maps of internal names to declarations\r\n for (let i = 0, k = this.sources.length; i < k; ++i) {\r\n let source = this.sources[i];\r\n\r\n // create one filespace per source\r\n let filespace = new Filespace(this, source);\r\n this.elementsLookup.set(filespace.internalName, filespace);\r\n this.currentFilespace = filespace;\r\n\r\n // process this source's statements\r\n let statements = source.statements;\r\n for (let j = 0, l = statements.length; j < l; ++j) {\r\n let statement = statements[j];\r\n switch (statement.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n this.initializeClass(statement, queuedExtends, queuedImplements);\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n this.initializeEnum(statement);\r\n break;\r\n }\r\n case NodeKind.EXPORT: {\r\n this.initializeExports(statement, queuedExports);\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n this.initializeFunction(statement);\r\n break;\r\n }\r\n case NodeKind.IMPORT: {\r\n this.initializeImports(statement, queuedExports, queuedImports);\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n this.initializeInterface(statement);\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n this.initializeNamespace(statement, queuedExtends, queuedImplements);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n this.initializeTypeAlias(statement);\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n this.initializeVariables(statement);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // queued imports should be resolvable now through traversing exports and queued exports\r\n for (let i = 0; i < queuedImports.length;) {\r\n let queuedImport = queuedImports[i];\r\n let declaration = queuedImport.declaration;\r\n if (declaration) { // named\r\n let element = this.tryResolveImport(queuedImport.externalName, queuedExports);\r\n if (element) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n if (element = this.tryResolveImport(queuedImport.externalNameAlt, queuedExports)) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Module_0_has_no_exported_member_1,\r\n declaration.range,\r\n (declaration.parent).path.value,\r\n declaration.externalName.text\r\n );\r\n ++i;\r\n }\r\n }\r\n } else { // filespace\r\n let element = this.elementsLookup.get(queuedImport.externalName);\r\n if (element) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n if (element = this.elementsLookup.get(queuedImport.externalNameAlt)) {\r\n this.elementsLookup.set(queuedImport.localName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n assert(false); // already reported by the parser not finding the file\r\n ++i;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // queued exports should be resolvable now that imports are finalized\r\n for (let [exportName, queuedExport] of queuedExports) {\r\n let currentExport: QueuedExport | null = queuedExport; // nullable below\r\n let element: Element | null;\r\n do {\r\n if (currentExport.isReExport) {\r\n if (element = this.fileLevelExports.get(currentExport.externalName)) {\r\n this.setExportAndCheckLibrary(\r\n exportName,\r\n element,\r\n currentExport.member.externalName\r\n );\r\n break;\r\n }\r\n currentExport = queuedExports.get(currentExport.externalName);\r\n if (!currentExport) {\r\n this.error(\r\n DiagnosticCode.Module_0_has_no_exported_member_1,\r\n queuedExport.member.externalName.range,\r\n ((queuedExport.member.parent).path).value,\r\n queuedExport.member.externalName.text\r\n );\r\n }\r\n } else {\r\n if (\r\n // normal export\r\n (element = this.elementsLookup.get(currentExport.externalName)) ||\r\n // library re-export\r\n (element = this.elementsLookup.get(currentExport.member.name.text))\r\n ) {\r\n this.setExportAndCheckLibrary(\r\n exportName,\r\n element,\r\n currentExport.member.externalName\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n queuedExport.member.range, queuedExport.member.name.text\r\n );\r\n }\r\n break;\r\n }\r\n } while (currentExport);\r\n }\r\n\r\n // resolve base prototypes of derived classes\r\n for (let i = 0, k = queuedExtends.length; i < k; ++i) {\r\n let derivedPrototype = queuedExtends[i];\r\n let derivedDeclaration = derivedPrototype.declaration;\r\n let derivedType = assert(derivedDeclaration.extendsType);\r\n let baseElement = this.resolveIdentifier(derivedType.name, null); // reports\r\n if (!baseElement) continue;\r\n if (baseElement.kind == ElementKind.CLASS_PROTOTYPE) {\r\n let basePrototype = baseElement;\r\n derivedPrototype.basePrototype = basePrototype;\r\n } else {\r\n this.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n derivedType.range\r\n );\r\n }\r\n }\r\n\r\n // set up global aliases\r\n var globalAliases = options.globalAliases;\r\n if (globalAliases) {\r\n for (let [alias, name] of globalAliases) {\r\n if (!name.length) continue; // explicitly disabled\r\n let element = this.elementsLookup.get(name);\r\n if (element) this.elementsLookup.set(alias, element);\r\n else throw new Error(\"element not found: \" + name);\r\n }\r\n }\r\n\r\n // register 'Array'\r\n var arrayPrototype = this.elementsLookup.get(\"Array\");\r\n if (arrayPrototype) {\r\n assert(arrayPrototype.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.arrayPrototype = arrayPrototype;\r\n }\r\n\r\n // register 'ArrayBufferView'\r\n var arrayBufferViewPrototype = this.elementsLookup.get(\"ArrayBufferView\");\r\n if (arrayBufferViewPrototype) {\r\n assert(arrayBufferViewPrototype.kind == ElementKind.INTERFACE_PROTOTYPE);\r\n this.arrayBufferViewPrototype = arrayBufferViewPrototype;\r\n }\r\n\r\n // register 'String'\r\n var stringPrototype = this.elementsLookup.get(\"String\");\r\n if (stringPrototype) {\r\n assert(stringPrototype.kind == ElementKind.CLASS_PROTOTYPE);\r\n let stringInstance = (stringPrototype).resolve(null); // reports\r\n if (stringInstance) {\r\n if (this.typesLookup.has(\"string\")) {\r\n let declaration = (stringPrototype).declaration;\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, declaration.programLevelInternalName\r\n );\r\n } else {\r\n this.stringInstance = stringInstance;\r\n this.typesLookup.set(\"string\", stringInstance.type);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Tries to resolve an import by traversing exports and queued exports. */\r\n private tryResolveImport(\r\n externalName: string,\r\n queuedNamedExports: Map\r\n ): Element | null {\r\n var element: Element | null;\r\n var fileLevelExports = this.fileLevelExports;\r\n do {\r\n if (element = fileLevelExports.get(externalName)) return element;\r\n let queuedExport = queuedNamedExports.get(externalName);\r\n if (!queuedExport) break;\r\n if (queuedExport.isReExport) {\r\n externalName = queuedExport.externalName;\r\n continue;\r\n }\r\n return this.elementsLookup.get(queuedExport.externalName);\r\n } while (true);\r\n return null;\r\n }\r\n\r\n private filterDecorators(decorators: DecoratorNode[], acceptedFlags: DecoratorFlags): DecoratorFlags {\r\n var presentFlags = DecoratorFlags.NONE;\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n let kind = decoratorNameToKind(decorator.name);\r\n let flag = decoratorKindToFlag(kind);\r\n if (flag) {\r\n if (!(acceptedFlags & flag)) {\r\n this.error(\r\n DiagnosticCode.Decorator_0_is_not_valid_here,\r\n decorator.range, decorator.name.range.toString()\r\n );\r\n } else if (presentFlags & flag) {\r\n this.error(\r\n DiagnosticCode.Duplicate_decorator,\r\n decorator.range, decorator.name.range.toString()\r\n );\r\n } else {\r\n presentFlags |= flag;\r\n }\r\n }\r\n }\r\n return presentFlags;\r\n }\r\n\r\n /** Processes global options, if present. */\r\n private checkGlobalOptions(\r\n element: Element,\r\n declaration: DeclarationStatement\r\n ): void {\r\n var parentNode = declaration.parent;\r\n if (\r\n (element.hasDecorator(DecoratorFlags.GLOBAL)) ||\r\n (declaration.range.source.is(CommonFlags.BUILTIN)) ||\r\n (\r\n declaration.range.source.isLibrary &&\r\n element.is(CommonFlags.EXPORT) &&\r\n (\r\n assert(parentNode).kind == NodeKind.SOURCE ||\r\n (\r\n parentNode).kind == NodeKind.VARIABLE &&\r\n assert((parentNode).parent).kind == NodeKind.SOURCE\r\n )\r\n )\r\n ) {\r\n let globalName = declaration.programLevelInternalName;\r\n if (this.elementsLookup.has(globalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, element.internalName\r\n );\r\n } else {\r\n this.elementsLookup.set(globalName, element);\r\n if (element.is(CommonFlags.BUILTIN)) element.internalName = globalName;\r\n }\r\n }\r\n }\r\n\r\n private initializeClass(\r\n declaration: ClassDeclaration,\r\n queuedExtends: ClassPrototype[],\r\n queuedImplements: ClassPrototype[],\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var simpleName = declaration.name.text;\r\n var prototype = new ClassPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n decorators\r\n ? this.filterDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.SEALED |\r\n DecoratorFlags.UNMANAGED\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n var implementsTypes = declaration.implementsTypes;\r\n if (implementsTypes) {\r\n let numImplementsTypes = implementsTypes.length;\r\n if (prototype.hasDecorator(DecoratorFlags.UNMANAGED)) {\r\n if (numImplementsTypes) {\r\n this.error(\r\n DiagnosticCode.Unmanaged_classes_cannot_implement_interfaces,\r\n Range.join(\r\n declaration.name.range,\r\n implementsTypes[numImplementsTypes - 1].range\r\n )\r\n );\r\n }\r\n\r\n // remember classes that implement interfaces\r\n } else if (numImplementsTypes) {\r\n queuedImplements.push(prototype);\r\n }\r\n }\r\n\r\n // remember classes that extend another one\r\n if (declaration.extendsType) queuedExtends.push(prototype);\r\n\r\n // add as namespace member if applicable\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // otherwise add to file-level exports if exported\r\n } else if (prototype.is(CommonFlags.EXPORT)) {\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, prototype);\r\n this.currentFilespace.members.set(simpleName, prototype);\r\n if (prototype.is(CommonFlags.EXPORT) && declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(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 prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(internalName, prototype);\r\n }\r\n }\r\n\r\n // initialize members\r\n var memberDeclarations = declaration.members;\r\n for (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n case NodeKind.FIELDDECLARATION: {\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n }\r\n case NodeKind.METHODDECLARATION: {\r\n if (memberDeclaration.isAny(CommonFlags.GET | CommonFlags.SET)) {\r\n this.initializeAccessor(memberDeclaration, prototype);\r\n } else {\r\n this.initializeMethod(memberDeclaration, prototype);\r\n }\r\n break;\r\n }\r\n default: {\r\n throw new Error(\"class member expected\");\r\n }\r\n }\r\n }\r\n\r\n this.checkGlobalOptions(prototype, declaration);\r\n }\r\n\r\n private initializeField(\r\n declaration: FieldDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n var decorators = declaration.decorators;\r\n\r\n // static fields become global variables\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n let staticField = new Global(\r\n this,\r\n name,\r\n internalName,\r\n Type.void, // resolved later on\r\n declaration,\r\n decorators\r\n ? this.filterDecorators(decorators, DecoratorFlags.NONE)\r\n : DecoratorFlags.NONE\r\n );\r\n staticField.parent = classPrototype;\r\n classPrototype.members.set(name, staticField);\r\n this.elementsLookup.set(internalName, staticField);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n staticField.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance fields are remembered until resolved\r\n } else {\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n let instanceField = new FieldPrototype(\r\n classPrototype,\r\n name,\r\n internalName,\r\n declaration\r\n );\r\n if (decorators) this.filterDecorators(decorators, DecoratorFlags.NONE);\r\n classPrototype.instanceMembers.set(name, instanceField);\r\n // TBD: no need to mark as MODULE_EXPORT\r\n }\r\n }\r\n\r\n private initializeMethod(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var simpleName = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n var prototype: FunctionPrototype | null = null;\r\n\r\n var decorators = declaration.decorators;\r\n var decoratorFlags = DecoratorFlags.NONE;\r\n if (decorators) {\r\n decoratorFlags = this.filterDecorators(decorators,\r\n DecoratorFlags.OPERATOR_BINARY |\r\n DecoratorFlags.OPERATOR_PREFIX |\r\n DecoratorFlags.OPERATOR_POSTFIX |\r\n DecoratorFlags.INLINE\r\n );\r\n }\r\n\r\n // static methods become global functions\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n assert(declaration.name.kind != NodeKind.CONSTRUCTOR);\r\n\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0, declaration.name.range,\r\n internalName\r\n );\r\n return;\r\n }\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n classPrototype.members.set(simpleName, prototype);\r\n this.elementsLookup.set(internalName, prototype);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance methods are remembered until resolved\r\n } else {\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n // if (classPrototype.isUnmanaged && instancePrototype.isAbstract) {\r\n // this.error( Unmanaged classes cannot declare abstract methods. );\r\n // }\r\n if (declaration.name.kind == NodeKind.CONSTRUCTOR) {\r\n if (classPrototype.constructorPrototype) {\r\n this.error(\r\n DiagnosticCode.Multiple_constructor_implementations_are_not_allowed,\r\n declaration.name.range\r\n );\r\n } else {\r\n prototype.set(CommonFlags.CONSTRUCTOR);\r\n classPrototype.constructorPrototype = prototype;\r\n }\r\n } else {\r\n classPrototype.instanceMembers.set(simpleName, prototype);\r\n }\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n\r\n this.checkOperatorOverloads(declaration.decorators, prototype, classPrototype);\r\n }\r\n\r\n private checkOperatorOverloads(\r\n decorators: DecoratorNode[] | null,\r\n prototype: FunctionPrototype,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n switch (decorator.decoratorKind) {\r\n case DecoratorKind.OPERATOR:\r\n case DecoratorKind.OPERATOR_BINARY:\r\n case DecoratorKind.OPERATOR_PREFIX:\r\n case DecoratorKind.OPERATOR_POSTFIX: {\r\n let numArgs = decorator.arguments && decorator.arguments.length || 0;\r\n if (numArgs == 1) {\r\n let firstArg = (decorator.arguments)[0];\r\n if (\r\n firstArg.kind == NodeKind.LITERAL &&\r\n (firstArg).literalKind == LiteralKind.STRING\r\n ) {\r\n let kind = operatorKindFromDecorator(\r\n decorator.decoratorKind,\r\n (firstArg).value\r\n );\r\n if (kind == OperatorKind.INVALID) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n firstArg.range\r\n );\r\n } else {\r\n let overloads = classPrototype.overloadPrototypes;\r\n if (overloads.has(kind)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_function_implementation,\r\n firstArg.range\r\n );\r\n } else {\r\n prototype.operatorKind = kind;\r\n overloads.set(kind, prototype);\r\n }\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n firstArg.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n decorator.range, \"1\", numArgs.toString(0)\r\n );\r\n }\r\n }\r\n }\r\n }\r\n }\r\n }\r\n\r\n private initializeAccessor(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var simpleName = declaration.name.text;\r\n var internalPropertyName = declaration.fileLevelInternalName;\r\n var propertyElement = this.elementsLookup.get(internalPropertyName);\r\n var isGetter = declaration.is(CommonFlags.GET);\r\n var isNew = false;\r\n if (propertyElement) {\r\n if (\r\n propertyElement.kind != ElementKind.PROPERTY ||\r\n (isGetter\r\n ? (propertyElement).getterPrototype\r\n : (propertyElement).setterPrototype\r\n ) != null\r\n ) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalPropertyName\r\n );\r\n return;\r\n }\r\n } else {\r\n propertyElement = new Property(\r\n this,\r\n simpleName,\r\n internalPropertyName,\r\n classPrototype\r\n );\r\n isNew = true;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var decoratorFlags = DecoratorFlags.NONE;\r\n if (decorators) {\r\n decoratorFlags = this.filterDecorators(decorators,\r\n DecoratorFlags.INLINE\r\n );\r\n }\r\n\r\n var baseName = (isGetter ? GETTER_PREFIX : SETTER_PREFIX) + simpleName;\r\n\r\n // static accessors become global functions\r\n if (declaration.is(CommonFlags.STATIC)) {\r\n let staticName = classPrototype.internalName + STATIC_DELIMITER + baseName;\r\n if (this.elementsLookup.has(staticName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, staticName\r\n );\r\n return;\r\n }\r\n let staticPrototype = new FunctionPrototype(\r\n this,\r\n baseName,\r\n staticName,\r\n declaration,\r\n null,\r\n decoratorFlags\r\n );\r\n if (isGetter) {\r\n (propertyElement).getterPrototype = staticPrototype;\r\n } else {\r\n (propertyElement).setterPrototype = staticPrototype;\r\n }\r\n if (isNew) {\r\n if (classPrototype.members) {\r\n if (classPrototype.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, staticName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.members = new Map();\r\n }\r\n classPrototype.members.set(simpleName, propertyElement); // check above\r\n } else {\r\n assert(classPrototype.members && classPrototype.members.has(simpleName));\r\n }\r\n this.elementsLookup.set(internalPropertyName, propertyElement);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n propertyElement.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n\r\n // instance accessors are remembered until resolved\r\n } else {\r\n let instanceName = classPrototype.internalName + INSTANCE_DELIMITER + baseName;\r\n if (classPrototype.instanceMembers) {\r\n if (classPrototype.instanceMembers.has(baseName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalPropertyName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n let instancePrototype = new FunctionPrototype(\r\n this,\r\n baseName,\r\n instanceName,\r\n declaration,\r\n classPrototype,\r\n decoratorFlags\r\n );\r\n if (isGetter) {\r\n (propertyElement).getterPrototype = instancePrototype;\r\n } else {\r\n (propertyElement).setterPrototype = instancePrototype;\r\n }\r\n classPrototype.instanceMembers.set(baseName, propertyElement);\r\n this.elementsLookup.set(internalPropertyName, propertyElement);\r\n if (classPrototype.is(CommonFlags.MODULE_EXPORT)) {\r\n propertyElement.set(CommonFlags.MODULE_EXPORT);\r\n instancePrototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n }\r\n\r\n private initializeEnum(\r\n declaration: EnumDeclaration,\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n var simpleName = declaration.name.text;\r\n var element = new Enum(this, simpleName, internalName, declaration);\r\n element.parent = namespace;\r\n this.elementsLookup.set(internalName, element);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, element);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && element.is(CommonFlags.EXPORT)) {\r\n element.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (element.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, element);\r\n this.currentFilespace.members.set(simpleName, element);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(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 element.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(internalName, element);\r\n }\r\n }\r\n\r\n var values = declaration.values;\r\n for (let i = 0, k = values.length; i < k; ++i) {\r\n this.initializeEnumValue(values[i], element);\r\n }\r\n\r\n this.checkGlobalOptions(element, declaration);\r\n }\r\n\r\n private initializeEnumValue(\r\n declaration: EnumValueDeclaration,\r\n enm: Enum\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n if (enm.members) {\r\n if (enm.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n enm.members = new Map();\r\n }\r\n var value = new EnumValue(enm, this, name, internalName, declaration);\r\n enm.members.set(name, value);\r\n if (enm.is(CommonFlags.MODULE_EXPORT)) {\r\n value.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n }\r\n\r\n private initializeExports(\r\n statement: ExportStatement,\r\n queuedExports: Map\r\n ): void {\r\n var members = statement.members;\r\n if (members) { // named\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n this.initializeExport(members[i], statement.internalPath, queuedExports);\r\n }\r\n } else { // TODO: filespace\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n }\r\n }\r\n\r\n private setExportAndCheckLibrary(\r\n internalName: string,\r\n element: Element,\r\n identifier: IdentifierExpression\r\n ): void {\r\n // add to file-level exports\r\n this.fileLevelExports.set(internalName, element);\r\n\r\n // add to filespace\r\n var internalPath = identifier.range.source.internalPath;\r\n var prefix = FILESPACE_PREFIX + internalPath;\r\n var filespace = this.elementsLookup.get(prefix);\r\n if (!filespace) filespace = assert(this.elementsLookup.get(prefix + PATH_DELIMITER + \"index\"));\r\n assert(filespace.kind == ElementKind.FILESPACE);\r\n var simpleName = identifier.text;\r\n (filespace).members.set(simpleName, element);\r\n\r\n // add global alias if from a library file\r\n if (identifier.range.source.isLibrary) {\r\n if (this.elementsLookup.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n identifier.range, simpleName\r\n );\r\n } else {\r\n element.internalName = simpleName;\r\n this.elementsLookup.set(simpleName, element);\r\n }\r\n }\r\n }\r\n\r\n private initializeExport(\r\n member: ExportMember,\r\n internalPath: string | null,\r\n queuedExports: Map\r\n ): void {\r\n var externalName = member.range.source.internalPath + PATH_DELIMITER + member.externalName.text;\r\n if (this.fileLevelExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n var referencedName: string;\r\n var referencedElement: Element | null;\r\n var queuedExport: QueuedExport | null;\r\n\r\n // export local element\r\n if (internalPath == null) {\r\n referencedName = member.range.source.internalPath + PATH_DELIMITER + member.name.text;\r\n\r\n // resolve right away if the element exists\r\n if (referencedElement = this.elementsLookup.get(referencedName)) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n if (queuedExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n queuedExport = new QueuedExport();\r\n queuedExport.isReExport = false;\r\n queuedExport.externalName = referencedName; // -> here: local name\r\n queuedExport.member = member;\r\n queuedExports.set(externalName, queuedExport);\r\n\r\n // export external element\r\n } else {\r\n referencedName = internalPath + PATH_DELIMITER + member.name.text;\r\n\r\n // resolve right away if the export exists\r\n referencedElement = this.elementsLookup.get(referencedName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n\r\n // walk already known queued exports\r\n let seen = new Set();\r\n while (queuedExport = queuedExports.get(referencedName)) {\r\n if (queuedExport.isReExport) {\r\n referencedElement = this.fileLevelExports.get(queuedExport.externalName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n referencedName = queuedExport.externalName;\r\n if (seen.has(queuedExport)) break;\r\n seen.add(queuedExport);\r\n } else {\r\n referencedElement = this.elementsLookup.get(queuedExport.externalName);\r\n if (referencedElement) {\r\n this.setExportAndCheckLibrary(\r\n externalName,\r\n referencedElement,\r\n member.externalName\r\n );\r\n return;\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // otherwise queue it\r\n if (queuedExports.has(externalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n member.externalName.range, externalName\r\n );\r\n return;\r\n }\r\n queuedExport = new QueuedExport();\r\n queuedExport.isReExport = true;\r\n queuedExport.externalName = referencedName; // -> here: external name\r\n queuedExport.member = member;\r\n queuedExports.set(externalName, queuedExport);\r\n }\r\n }\r\n\r\n private initializeFunction(\r\n declaration: FunctionDeclaration,\r\n namespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n var simpleName = declaration.name.text;\r\n var decorators = declaration.decorators;\r\n var prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n null,\r\n decorators\r\n ? this.filterDecorators(decorators,\r\n DecoratorFlags.GLOBAL |\r\n DecoratorFlags.INLINE\r\n )\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(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 prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(internalName, prototype);\r\n }\r\n }\r\n\r\n this.checkGlobalOptions(prototype, declaration);\r\n }\r\n\r\n private initializeImports(\r\n statement: ImportStatement,\r\n queuedExports: Map,\r\n queuedImports: QueuedImport[]\r\n ): void {\r\n var declarations = statement.declarations;\r\n if (declarations) {\r\n for (let i = 0, k = declarations.length; i < k; ++i) {\r\n this.initializeImport(\r\n declarations[i],\r\n statement.internalPath,\r\n queuedExports, queuedImports\r\n );\r\n }\r\n } else if (statement.namespaceName) { // import * as simpleName from \"file\"\r\n let simpleName = statement.namespaceName.text;\r\n let internalName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n simpleName\r\n );\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n statement.namespaceName.range,\r\n internalName\r\n );\r\n return;\r\n }\r\n\r\n // resolve right away if the exact filespace exists\r\n let filespace = this.elementsLookup.get(statement.internalPath);\r\n if (filespace) {\r\n this.elementsLookup.set(internalName, filespace);\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n let queuedImport = new QueuedImport();\r\n queuedImport.localName = internalName;\r\n let externalName = FILESPACE_PREFIX + statement.internalPath;\r\n queuedImport.externalName = externalName;\r\n queuedImport.externalNameAlt = externalName + PATH_DELIMITER + \"index\";\r\n queuedImport.declaration = null; // filespace\r\n queuedImports.push(queuedImport);\r\n }\r\n }\r\n\r\n private initializeImport(\r\n declaration: ImportDeclaration,\r\n internalPath: string,\r\n queuedNamedExports: Map,\r\n queuedImports: QueuedImport[]\r\n ): void {\r\n var localName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(localName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, localName\r\n );\r\n return;\r\n }\r\n\r\n var externalName = internalPath + PATH_DELIMITER + declaration.externalName.text;\r\n\r\n // resolve right away if the exact export exists\r\n var element: Element | null;\r\n if (element = this.fileLevelExports.get(externalName)) {\r\n this.elementsLookup.set(localName, element);\r\n return;\r\n }\r\n\r\n // otherwise queue it\r\n const indexPart = PATH_DELIMITER + \"index\";\r\n var queuedImport = new QueuedImport();\r\n queuedImport.localName = localName;\r\n if (internalPath.endsWith(indexPart)) {\r\n queuedImport.externalName = externalName; // try exact first\r\n queuedImport.externalNameAlt = (\r\n internalPath.substring(0, internalPath.length - indexPart.length + 1) +\r\n declaration.externalName.text\r\n );\r\n } else {\r\n queuedImport.externalName = externalName; // try exact first\r\n queuedImport.externalNameAlt = (\r\n internalPath +\r\n indexPart +\r\n PATH_DELIMITER +\r\n declaration.externalName.text\r\n );\r\n }\r\n queuedImport.declaration = declaration; // named\r\n queuedImports.push(queuedImport);\r\n }\r\n\r\n private initializeInterface(declaration: InterfaceDeclaration, namespace: Element | null = null): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n\r\n var decorators = declaration.decorators;\r\n var simpleName = declaration.name.text;\r\n var prototype = new InterfacePrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n decorators\r\n ? this.filterDecorators(decorators, DecoratorFlags.GLOBAL)\r\n : DecoratorFlags.NONE\r\n );\r\n prototype.parent = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(prototype.internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(prototype.internalName, prototype);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (prototype.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n this.fileLevelExports.set(internalName, prototype);\r\n this.currentFilespace.members.set(simpleName, prototype);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(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 prototype.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(internalName, prototype);\r\n }\r\n }\r\n\r\n var memberDeclarations = declaration.members;\r\n for (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n\r\n case NodeKind.FIELDDECLARATION: {\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n }\r\n case NodeKind.METHODDECLARATION: {\r\n if (memberDeclaration.isAny(CommonFlags.GET | CommonFlags.SET)) {\r\n this.initializeAccessor(memberDeclaration, prototype);\r\n } else {\r\n this.initializeMethod(memberDeclaration, prototype);\r\n }\r\n break;\r\n }\r\n default: {\r\n throw new Error(\"interface member expected\");\r\n }\r\n }\r\n }\r\n\r\n this.checkGlobalOptions(prototype, declaration);\r\n }\r\n\r\n private initializeNamespace(\r\n declaration: NamespaceDeclaration,\r\n queuedExtends: ClassPrototype[],\r\n queuedImplements: ClassPrototype[],\r\n parentNamespace: Element | null = null\r\n ): void {\r\n var internalName = declaration.fileLevelInternalName;\r\n var simpleName = declaration.name.text;\r\n var namespace = this.elementsLookup.get(internalName);\r\n if (!namespace) {\r\n namespace = new Namespace(this, simpleName, internalName, declaration);\r\n namespace.parent = parentNamespace;\r\n this.elementsLookup.set(internalName, namespace);\r\n this.checkGlobalOptions(namespace, declaration);\r\n }\r\n\r\n if (parentNamespace) {\r\n if (parentNamespace.members) {\r\n if (parentNamespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n parentNamespace.members = new Map();\r\n }\r\n parentNamespace.members.set(simpleName, namespace);\r\n if (parentNamespace.is(CommonFlags.MODULE_EXPORT) && namespace.is(CommonFlags.EXPORT)) {\r\n namespace.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (namespace.is(CommonFlags.EXPORT)) { // no parent namespace\r\n let existingExport = this.fileLevelExports.get(internalName);\r\n if (existingExport) {\r\n if (!existingExport.is(CommonFlags.EXPORT)) {\r\n this.error(\r\n DiagnosticCode.Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local,\r\n declaration.name.range, namespace.internalName\r\n ); // recoverable\r\n }\r\n namespace = existingExport; // join\r\n } else {\r\n this.fileLevelExports.set(internalName, namespace);\r\n }\r\n this.currentFilespace.members.set(simpleName, namespace);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(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 namespace.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(internalName, namespace);\r\n }\r\n }\r\n\r\n var members = declaration.members;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n switch (members[i].kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n this.initializeClass(members[i], queuedExtends, queuedImplements, namespace);\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n this.initializeEnum(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n this.initializeFunction(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n this.initializeInterface(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n this.initializeNamespace(members[i], queuedExtends, queuedImplements, namespace);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n // this.initializeTypeAlias(members[i], namespace);\r\n // TODO: what about namespaced types?\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n members[i].range\r\n );\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n this.initializeVariables(members[i], namespace);\r\n break;\r\n }\r\n default: {\r\n throw new Error(\"namespace member expected\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n private initializeTypeAlias(declaration: TypeDeclaration, namespace: Element | null = null): void {\r\n // type aliases are program globals\r\n // TODO: what about namespaced types?\r\n var name = declaration.name.text;\r\n if (this.typesLookup.has(name) || this.typeAliases.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, name\r\n );\r\n return;\r\n }\r\n var alias = new TypeAlias();\r\n alias.typeParameters = declaration.typeParameters;\r\n alias.type = declaration.type;\r\n this.typeAliases.set(name, alias);\r\n }\r\n\r\n private initializeVariables(statement: VariableStatement, namespace: Element | null = null): void {\r\n var declarations = statement.declarations;\r\n for (let i = 0, k = declarations.length; i < k; ++i) {\r\n let declaration = declarations[i];\r\n let decorators = declaration.decorators;\r\n let internalName = declaration.fileLevelInternalName;\r\n if (this.elementsLookup.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n continue;\r\n }\r\n let simpleName = declaration.name.text;\r\n let global = new Global(\r\n this,\r\n simpleName,\r\n internalName,\r\n Type.void, // resolved later on\r\n declaration,\r\n decorators\r\n ? this.filterDecorators(decorators,\r\n DecoratorFlags.GLOBAL\r\n )\r\n : DecoratorFlags.NONE\r\n );\r\n global.parent = namespace;\r\n this.elementsLookup.set(internalName, global);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(simpleName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n continue;\r\n }\r\n } else {\r\n namespace.members = new Map();\r\n }\r\n namespace.members.set(simpleName, global);\r\n if (namespace.is(CommonFlags.MODULE_EXPORT) && global.is(CommonFlags.EXPORT)) {\r\n global.set(CommonFlags.MODULE_EXPORT);\r\n }\r\n } else if (global.is(CommonFlags.EXPORT)) { // no namespace\r\n if (this.fileLevelExports.has(internalName)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n } else {\r\n this.fileLevelExports.set(internalName, global);\r\n }\r\n this.currentFilespace.members.set(simpleName, global);\r\n if (declaration.range.source.isEntry) {\r\n if (this.moduleLevelExports.has(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 global.set(CommonFlags.MODULE_EXPORT);\r\n this.moduleLevelExports.set(internalName, global);\r\n }\r\n }\r\n this.checkGlobalOptions(global, declaration);\r\n }\r\n }\r\n\r\n /** Resolves a {@link SignatureNode} to a concrete {@link Signature}. */\r\n resolveSignature(\r\n node: SignatureNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportNotFound: bool = true\r\n ): Signature | null {\r\n var explicitThisType = node.explicitThisType;\r\n var thisType: Type | null = null;\r\n if (explicitThisType) {\r\n thisType = this.resolveType(\r\n explicitThisType,\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!thisType) return null;\r\n }\r\n var parameterTypeNodes = node.parameters;\r\n var numParameters = parameterTypeNodes.length;\r\n var parameterTypes = new Array(numParameters);\r\n var parameterNames = new Array(numParameters);\r\n var requiredParameters = 0;\r\n var hasRest = false;\r\n for (let i = 0; i < numParameters; ++i) {\r\n let parameterTypeNode = parameterTypeNodes[i];\r\n switch (parameterTypeNode.parameterKind) {\r\n case ParameterKind.DEFAULT: {\r\n requiredParameters = i + 1;\r\n break;\r\n }\r\n case ParameterKind.REST: {\r\n assert(i == numParameters);\r\n hasRest = true;\r\n break;\r\n }\r\n }\r\n let parameterType = this.resolveType(\r\n assert(parameterTypeNode.type),\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!parameterType) return null;\r\n parameterTypes[i] = parameterType;\r\n parameterNames[i] = parameterTypeNode.name.text;\r\n }\r\n var returnTypeNode = node.returnType;\r\n var returnType: Type | null;\r\n if (returnTypeNode) {\r\n returnType = this.resolveType(\r\n returnTypeNode,\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Type.void;\r\n }\r\n var signature = new Signature(parameterTypes, returnType, thisType);\r\n signature.parameterNames = parameterNames;\r\n signature.requiredParameters = requiredParameters;\r\n signature.hasRest = hasRest;\r\n return signature;\r\n }\r\n\r\n /** Resolves a {@link CommonTypeNode} to a concrete {@link Type}. */\r\n resolveType(\r\n node: CommonTypeNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportNotFound: bool = true\r\n ): Type | null {\r\n if (node.kind == NodeKind.SIGNATURE) {\r\n let signature = this.resolveSignature(node, contextualTypeArguments, reportNotFound);\r\n if (!signature) return null;\r\n return node.isNullable\r\n ? signature.type.asNullable()\r\n : signature.type;\r\n }\r\n var typeNode = node;\r\n var simpleName = typeNode.name.text;\r\n var globalName = simpleName;\r\n var localName = typeNode.range.source.internalPath + PATH_DELIMITER + simpleName;\r\n\r\n var element: Element | null;\r\n if (\r\n (element = this.elementsLookup.get(localName)) || // file-global\r\n (element = this.elementsLookup.get(globalName)) // program-global\r\n ) {\r\n switch (element.kind) {\r\n case ElementKind.ENUM: return Type.i32;\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n let instance = (element).resolveUsingTypeArguments(\r\n typeNode.typeArguments,\r\n contextualTypeArguments,\r\n null\r\n ); // reports\r\n if (!instance) return null;\r\n return node.isNullable\r\n ? instance.type.asNullable()\r\n : instance.type;\r\n }\r\n }\r\n }\r\n\r\n // check (global) type alias\r\n var alias = this.typeAliases.get(simpleName);\r\n if (alias) return this.resolveType(alias.type, contextualTypeArguments, reportNotFound);\r\n\r\n // resolve parameters\r\n if (typeNode.typeArguments) {\r\n let k = typeNode.typeArguments.length;\r\n let paramTypes = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let paramType = this.resolveType( // reports\r\n typeNode.typeArguments[i],\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!paramType) return null;\r\n paramTypes[i] = paramType;\r\n }\r\n\r\n if (k) { // can't be a placeholder if it has parameters\r\n let instanceKey = typesToString(paramTypes);\r\n if (instanceKey.length) {\r\n localName += \"<\" + instanceKey + \">\";\r\n globalName += \"<\" + instanceKey + \">\";\r\n }\r\n } else if (contextualTypeArguments) {\r\n let placeholderType = contextualTypeArguments.get(globalName);\r\n if (placeholderType) return placeholderType;\r\n }\r\n }\r\n\r\n var type: Type | null;\r\n\r\n // check file-global / program-global type\r\n if ((type = this.typesLookup.get(localName)) || (type = this.typesLookup.get(globalName))) {\r\n return type;\r\n }\r\n\r\n if (reportNotFound) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n typeNode.name.range, globalName\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /** Resolves an array of type arguments to concrete types. */\r\n resolveTypeArguments(\r\n typeParameters: TypeParameterNode[],\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): Type[] | null {\r\n var parameterCount = typeParameters.length;\r\n var argumentCount = typeArgumentNodes ? typeArgumentNodes.length : 0;\r\n if (parameterCount != argumentCount) {\r\n if (argumentCount) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n Range.join(\r\n (typeArgumentNodes)[0].range,\r\n (typeArgumentNodes)[argumentCount - 1].range\r\n ),\r\n parameterCount.toString(10), argumentCount.toString(10)\r\n );\r\n } else if (alternativeReportNode) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n alternativeReportNode.range.atEnd, parameterCount.toString(10), \"0\"\r\n );\r\n }\r\n return null;\r\n }\r\n var typeArguments = new Array(parameterCount);\r\n for (let i = 0; i < parameterCount; ++i) {\r\n let type = this.resolveType( // reports\r\n (typeArgumentNodes)[i],\r\n contextualTypeArguments,\r\n true\r\n );\r\n if (!type) return null;\r\n // TODO: check extendsType\r\n typeArguments[i] = type;\r\n }\r\n return typeArguments;\r\n }\r\n\r\n /** Resolves an identifier to the element it refers to. */\r\n resolveIdentifier(\r\n identifier: IdentifierExpression,\r\n contextualFunction: Function | null,\r\n contextualEnum: Enum | null = null\r\n ): Element | null {\r\n var name = identifier.text;\r\n\r\n var element: Element | null;\r\n var namespace: Element | null;\r\n\r\n // check siblings\r\n if (contextualEnum) {\r\n\r\n if (\r\n contextualEnum.members &&\r\n (element = contextualEnum.members.get(name)) &&\r\n element.kind == ElementKind.ENUMVALUE\r\n ) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // ENUMVALUE\r\n }\r\n\r\n } else if (contextualFunction) {\r\n\r\n // check locals\r\n if (element = contextualFunction.flow.getScopedLocal(name)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // LOCAL\r\n }\r\n\r\n // check outer scope locals\r\n // let outerScope = contextualFunction.outerScope;\r\n // while (outerScope) {\r\n // if (element = outerScope.getScopedLocal(name)) {\r\n // let scopedLocal = element;\r\n // let scopedGlobal = scopedLocal.scopedGlobal;\r\n // if (!scopedGlobal) scopedGlobal = outerScope.addScopedGlobal(scopedLocal);\r\n // if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n // return resolvedElement.set(scopedGlobal);\r\n // }\r\n // outerScope = outerScope.currentFunction.outerScope;\r\n // }\r\n\r\n // search contextual parent namespaces if applicable\r\n if (namespace = contextualFunction.prototype.parent) {\r\n do {\r\n if (element = this.elementsLookup.get(namespace.internalName + STATIC_DELIMITER + name)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // LOCAL\r\n }\r\n } while (namespace = namespace.parent);\r\n }\r\n }\r\n\r\n // search current file\r\n if (element = this.elementsLookup.get(identifier.range.source.internalPath + PATH_DELIMITER + name)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\r\n }\r\n\r\n // search global scope\r\n if (element = this.elementsLookup.get(name)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return element; // GLOBAL, FUNCTION_PROTOTYPE, CLASS_PROTOTYPE\r\n }\r\n\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n identifier.range, name\r\n );\r\n return null;\r\n }\r\n\r\n /** Resolves a property access to the element it refers to. */\r\n resolvePropertyAccess(\r\n propertyAccess: PropertyAccessExpression,\r\n contextualFunction: Function\r\n ): Element | null {\r\n // start by resolving the lhs target (expression before the last dot)\r\n var targetExpression = propertyAccess.expression;\r\n var target = this.resolveExpression(targetExpression, contextualFunction); // reports\r\n if (!target) return null;\r\n\r\n // at this point we know exactly what the target is, so look up the element within\r\n var propertyName = propertyAccess.property.text;\r\n\r\n // Resolve variable-likes to the class type they reference first\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n let classReference = (target).type.classReference;\r\n if (!classReference) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, (target).type.toString()\r\n );\r\n return null;\r\n }\r\n target = classReference;\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = assert((target).getterPrototype).resolve(); // reports\r\n if (!getter) return null;\r\n let classReference = getter.signature.returnType.classReference;\r\n if (!classReference) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, getter.signature.returnType.toString()\r\n );\r\n return null;\r\n }\r\n target = classReference;\r\n break;\r\n }\r\n case ElementKind.CLASS: {\r\n let elementExpression = this.resolvedElementExpression;\r\n if (elementExpression) {\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n elementExpression.range, (target).internalName\r\n );\r\n return null;\r\n }\r\n let returnType = indexedGet.signature.returnType;\r\n if (!(target = returnType.classReference)) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, returnType.toString()\r\n );\r\n return null;\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // Look up the member within\r\n switch (target.kind) {\r\n case ElementKind.CLASS_PROTOTYPE:\r\n case ElementKind.CLASS: {\r\n do {\r\n let members = target.members;\r\n let member: Element | null;\r\n if (members && (member = members.get(propertyName))) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = null;\r\n return member; // instance FIELD, static GLOBAL, FUNCTION_PROTOTYPE...\r\n }\r\n // traverse inherited static members on the base prototype if target is a class prototype\r\n if (target.kind == ElementKind.CLASS_PROTOTYPE) {\r\n if ((target).basePrototype) {\r\n target = (target).basePrototype;\r\n } else {\r\n break;\r\n }\r\n // traverse inherited instance members on the base class if target is a class instance\r\n } else if (target.kind == ElementKind.CLASS) {\r\n if ((target).base) {\r\n target = (target).base;\r\n } else {\r\n break;\r\n }\r\n } else {\r\n break;\r\n }\r\n } while (true);\r\n break;\r\n }\r\n default: { // enums or other namespace-like elements\r\n let members = target.members;\r\n if (members) {\r\n let member = members.get(propertyName);\r\n if (member) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = null;\r\n return member; // static ENUMVALUE, static GLOBAL, static FUNCTION_PROTOTYPE...\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, target.internalName\r\n );\r\n return null;\r\n }\r\n\r\n resolveElementAccess(\r\n elementAccess: ElementAccessExpression,\r\n contextualFunction: Function\r\n ): Element | null {\r\n var targetExpression = elementAccess.expression;\r\n var target = this.resolveExpression(targetExpression, contextualFunction);\r\n if (!target) return null;\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n let type = (target).type;\r\n if (target = type.classReference) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = elementAccess.elementExpression;\r\n return target;\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS: { // element access on element access\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n elementAccess.range, (target).internalName\r\n );\r\n return null;\r\n }\r\n let returnType = indexedGet.signature.returnType;\r\n if (target = returnType.classReference) {\r\n this.resolvedThisExpression = targetExpression;\r\n this.resolvedElementExpression = elementAccess.elementExpression;\r\n return target;\r\n }\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n targetExpression.range\r\n );\r\n return null;\r\n }\r\n\r\n resolveExpression(\r\n expression: Expression,\r\n contextualFunction: Function\r\n ): Element | null {\r\n while (expression.kind == NodeKind.PARENTHESIZED) {\r\n expression = (expression).expression;\r\n }\r\n switch (expression.kind) {\r\n case NodeKind.ASSERTION: {\r\n let type = this.resolveType((expression).toType); // reports\r\n if (type) {\r\n let classType = type.classReference;\r\n if (classType) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return classType;\r\n }\r\n }\r\n return null;\r\n }\r\n case NodeKind.BINARY: { // TODO: string concatenation, mostly\r\n throw new Error(\"not implemented\");\r\n }\r\n case NodeKind.THIS: { // -> Class / ClassPrototype\r\n if (contextualFunction.flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let explicitLocal = contextualFunction.flow.getScopedLocal(\"this\");\r\n if (explicitLocal) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return explicitLocal;\r\n }\r\n }\r\n let parent = contextualFunction.parent;\r\n if (parent) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return parent;\r\n }\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n return null;\r\n }\r\n case NodeKind.SUPER: { // -> Class\r\n if (contextualFunction.flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let explicitLocal = contextualFunction.flow.getScopedLocal(\"super\");\r\n if (explicitLocal) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return explicitLocal;\r\n }\r\n }\r\n let parent = contextualFunction.parent;\r\n if (parent && parent.kind == ElementKind.CLASS && (parent = (parent).base)) {\r\n this.resolvedThisExpression = null;\r\n this.resolvedElementExpression = null;\r\n return parent;\r\n }\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n return null;\r\n }\r\n case NodeKind.IDENTIFIER: {\r\n return this.resolveIdentifier(expression, contextualFunction);\r\n }\r\n case NodeKind.LITERAL: {\r\n switch ((expression).literalKind) {\r\n case LiteralKind.STRING: {\r\n this.resolvedThisExpression = expression;\r\n this.resolvedElementExpression = null;\r\n return this.stringInstance;\r\n }\r\n // case LiteralKind.ARRAY: // TODO\r\n }\r\n break;\r\n }\r\n case NodeKind.PROPERTYACCESS: {\r\n return this.resolvePropertyAccess(\r\n expression,\r\n contextualFunction\r\n );\r\n }\r\n case NodeKind.ELEMENTACCESS: {\r\n return this.resolveElementAccess(\r\n expression,\r\n contextualFunction\r\n );\r\n }\r\n case NodeKind.CALL: {\r\n let targetExpression = (expression).expression;\r\n let target = this.resolveExpression(targetExpression, contextualFunction); // reports\r\n if (!target) return null;\r\n if (target.kind == ElementKind.FUNCTION_PROTOTYPE) {\r\n let instance = (target).resolveUsingTypeArguments( // reports\r\n (expression).typeArguments,\r\n contextualFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n if (!instance) return null;\r\n let returnType = instance.signature.returnType;\r\n let classType = returnType.classReference;\r\n if (classType) {\r\n // reuse resolvedThisExpression (might be property access)\r\n // reuse resolvedElementExpression (might be element access)\r\n return classType;\r\n } else {\r\n let signature = returnType.signatureReference;\r\n if (signature) {\r\n let functionTarget = signature.cachedFunctionTarget;\r\n if (!functionTarget) {\r\n functionTarget = new FunctionTarget(this, signature);\r\n signature.cachedFunctionTarget = functionTarget;\r\n }\r\n // reuse resolvedThisExpression (might be property access)\r\n // reuse resolvedElementExpression (might be element access)\r\n return functionTarget;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n targetExpression.range, target.internalName\r\n );\r\n return null;\r\n }\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return null;\r\n }\r\n\r\n // resolveExpressionType(\r\n // expression: Expression,\r\n // contextualFunction: Function\r\n // ): Type {\r\n // var element = this.resolveExpression(expression, contextualFunction);\r\n // switch (element.kind) {\r\n\r\n // }\r\n // }\r\n}\r\n\r\n/** Indicates the specific kind of an {@link Element}. */\r\nexport enum ElementKind {\r\n /** A {@link Global}. */\r\n GLOBAL,\r\n /** A {@link Local}. */\r\n LOCAL,\r\n /** An {@link Enum}. */\r\n ENUM,\r\n /** An {@link EnumValue}. */\r\n ENUMVALUE,\r\n /** A {@link FunctionPrototype}. */\r\n FUNCTION_PROTOTYPE,\r\n /** A {@link Function}. */\r\n FUNCTION,\r\n /** A {@link FunctionTarget}. */\r\n FUNCTION_TARGET,\r\n /** A {@link ClassPrototype}. */\r\n CLASS_PROTOTYPE,\r\n /** A {@link Class}. */\r\n CLASS,\r\n /** An {@link InterfacePrototype}. */\r\n INTERFACE_PROTOTYPE,\r\n /** An {@link Interface}. */\r\n INTERFACE,\r\n /** A {@link FieldPrototype}. */\r\n FIELD_PROTOTYPE,\r\n /** A {@link Field}. */\r\n FIELD,\r\n /** A {@link Property}. */\r\n PROPERTY,\r\n /** A {@link Namespace}. */\r\n NAMESPACE,\r\n /** A {@link Filespace}. */\r\n FILESPACE,\r\n}\r\n\r\nexport enum DecoratorFlags {\r\n /** No flags set. */\r\n NONE = 0,\r\n /** Is a program global. */\r\n GLOBAL = 1 << 0,\r\n /** Is a binary operator overload. */\r\n OPERATOR_BINARY = 1 << 1,\r\n /** Is a unary prefix operator overload. */\r\n OPERATOR_PREFIX = 1 << 2,\r\n /** Is a unary postfix operator overload. */\r\n OPERATOR_POSTFIX = 1 << 3,\r\n /** Is an unmanaged class. */\r\n UNMANAGED = 1 << 4,\r\n /** Is a sealed class. */\r\n SEALED = 1 << 5,\r\n /** Is always inlined. */\r\n INLINE = 1 << 6\r\n}\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 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(lo: i32, hi: i32): this {\r\n this.constantValueKind = ConstantValueKind.INTEGER;\r\n this.constantIntegerValue = i64_new(lo, hi);\r\n this.set(CommonFlags.CONST | CommonFlags.INLINED);\r\n return this;\r\n }\r\n\r\n withConstantFloatValue(value: f64): this {\r\n this.constantValueKind = ConstantValueKind.FLOAT;\r\n this.constantFloatValue = value;\r\n this.set(CommonFlags.CONST | CommonFlags.INLINED);\r\n return this;\r\n }\r\n}\r\n\r\n/** A global variable. */\r\nexport class Global extends VariableLikeElement {\r\n\r\n kind = ElementKind.GLOBAL;\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n type: Type,\r\n declaration: VariableLikeDeclarationStatement | null,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName, type, declaration);\r\n this.flags = declaration ? declaration.flags : CommonFlags.NONE;\r\n this.decoratorFlags = decoratorFlags;\r\n this.type = type; // resolved later if `void`\r\n }\r\n}\r\n\r\n/** A function parameter. */\r\nexport class Parameter {\r\n\r\n // not an Element on its own\r\n\r\n /** Parameter name. */\r\n name: string;\r\n /** Parameter type. */\r\n type: Type;\r\n /** Parameter initializer. */\r\n initializer: Expression | null;\r\n\r\n /** Constructs a new function parameter. */\r\n constructor(name: string, type: Type, initializer: Expression | null = null) {\r\n this.name = name;\r\n this.type = type;\r\n this.initializer = initializer;\r\n }\r\n}\r\n\r\n/** A function local. */\r\nexport class Local extends VariableLikeElement {\r\n\r\n kind = ElementKind.LOCAL;\r\n\r\n /** Local index. */\r\n index: i32;\r\n /** Respective scoped global, if any. */\r\n scopedGlobal: Global | null = null;\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n index: i32,\r\n type: Type,\r\n declaration: VariableLikeDeclarationStatement | null = null\r\n ) {\r\n super(program, simpleName, simpleName, type, declaration);\r\n this.index = index;\r\n }\r\n}\r\n\r\n/** A yet unresolved function prototype. */\r\nexport class FunctionPrototype extends Element {\r\n\r\n kind = ElementKind.FUNCTION_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: FunctionDeclaration;\r\n /** If an instance method, the class prototype reference. */\r\n classPrototype: ClassPrototype | null;\r\n /** Resolved instances. */\r\n instances: Map = new Map();\r\n /** Class type arguments, if a partially resolved method of a generic class. Not set otherwise. */\r\n classTypeArguments: Type[] | null = null;\r\n /** Operator kind, if an overload. */\r\n operatorKind: OperatorKind = OperatorKind.INVALID;\r\n\r\n /** Constructs a new function prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FunctionDeclaration,\r\n classPrototype: ClassPrototype | null = null,\r\n decoratorFlags: DecoratorFlags = DecoratorFlags.NONE\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n this.classPrototype = classPrototype;\r\n this.decoratorFlags = decoratorFlags;\r\n }\r\n\r\n /** Resolves this prototype to an instance using the specified concrete type arguments. */\r\n resolve(\r\n functionTypeArguments: Type[] | null = null,\r\n contextualTypeArguments: Map | null = null\r\n ): Function | null {\r\n var instanceKey = functionTypeArguments ? typesToString(functionTypeArguments) : \"\";\r\n var instance = this.instances.get(instanceKey);\r\n if (instance) return instance;\r\n\r\n var declaration = this.declaration;\r\n var isInstance = this.is(CommonFlags.INSTANCE);\r\n var classPrototype = this.classPrototype;\r\n\r\n // inherit contextual type arguments as provided. might be overridden.\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(\r\n inheritedName,\r\n inheritedType\r\n );\r\n }\r\n }\r\n\r\n // override with class type arguments if a partially resolved instance method\r\n var classTypeArguments = this.classTypeArguments;\r\n if (classTypeArguments) { // set only if partially resolved\r\n assert(this.is(CommonFlags.INSTANCE));\r\n let classDeclaration = assert(classPrototype).declaration;\r\n let classTypeParameters = classDeclaration.typeParameters;\r\n let numClassTypeParameters = classTypeParameters.length;\r\n assert(numClassTypeParameters == classTypeArguments.length);\r\n for (let i = 0; i < numClassTypeParameters; ++i) {\r\n contextualTypeArguments.set(\r\n classTypeParameters[i].name.text,\r\n classTypeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!classTypeArguments);\r\n }\r\n\r\n // override with function specific type arguments\r\n var signatureNode = declaration.signature;\r\n var functionTypeParameters = declaration.typeParameters;\r\n var numFunctionTypeArguments: i32;\r\n if (functionTypeArguments && (numFunctionTypeArguments = functionTypeArguments.length)) {\r\n assert(functionTypeParameters && numFunctionTypeArguments == functionTypeParameters.length);\r\n for (let i = 0; i < numFunctionTypeArguments; ++i) {\r\n contextualTypeArguments.set(\r\n (functionTypeParameters)[i].name.text,\r\n functionTypeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!functionTypeParameters || functionTypeParameters.length == 0);\r\n }\r\n\r\n // resolve class if an instance method\r\n var classInstance: Class | null = null;\r\n var thisType: Type | null = null;\r\n if (isInstance) {\r\n classInstance = assert(classPrototype).resolve(classTypeArguments, contextualTypeArguments); // reports\r\n if (!classInstance) return null;\r\n thisType = classInstance.type;\r\n contextualTypeArguments.set(\"this\", thisType);\r\n }\r\n\r\n // resolve signature node\r\n var signatureParameters = signatureNode.parameters;\r\n var signatureParameterCount = signatureParameters.length;\r\n var parameterTypes = new Array(signatureParameterCount);\r\n var parameterNames = new Array(signatureParameterCount);\r\n var requiredParameters = 0;\r\n for (let i = 0; i < signatureParameterCount; ++i) {\r\n let parameterDeclaration = signatureParameters[i];\r\n if (parameterDeclaration.parameterKind == ParameterKind.DEFAULT) {\r\n requiredParameters = i + 1;\r\n }\r\n let typeNode = assert(parameterDeclaration.type);\r\n let parameterType = this.program.resolveType(typeNode, contextualTypeArguments, true); // reports\r\n if (!parameterType) return null;\r\n parameterTypes[i] = parameterType;\r\n parameterNames[i] = parameterDeclaration.name.text;\r\n }\r\n\r\n var returnType: Type;\r\n if (this.is(CommonFlags.SET)) {\r\n returnType = Type.void; // not annotated\r\n } else if (this.is(CommonFlags.CONSTRUCTOR)) {\r\n returnType = assert(classInstance).type; // not annotated\r\n } else {\r\n let typeNode = assert(signatureNode.returnType);\r\n let type = this.program.resolveType(typeNode, contextualTypeArguments, true); // reports\r\n if (!type) return null;\r\n returnType = type;\r\n }\r\n\r\n var signature = new Signature(parameterTypes, returnType, thisType);\r\n signature.parameterNames = parameterNames;\r\n signature.requiredParameters = requiredParameters;\r\n\r\n var internalName = this.internalName;\r\n if (instanceKey.length) internalName += \"<\" + instanceKey + \">\";\r\n instance = new Function(\r\n this,\r\n internalName,\r\n signature,\r\n classInstance\r\n ? classInstance\r\n : classPrototype,\r\n contextualTypeArguments\r\n );\r\n this.instances.set(instanceKey, instance);\r\n this.program.instancesLookup.set(internalName, instance);\r\n return instance;\r\n }\r\n\r\n /** Resolves this prototype partially by applying the specified inherited class type arguments. */\r\n resolvePartial(classTypeArguments: Type[] | null): FunctionPrototype | null {\r\n assert(this.is(CommonFlags.INSTANCE));\r\n var classPrototype = assert(this.classPrototype);\r\n\r\n if (!(classTypeArguments && classTypeArguments.length)) return this; // no need to clone\r\n\r\n var simpleName = this.simpleName;\r\n var partialKey = typesToString(classTypeArguments);\r\n var partialPrototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n classPrototype.internalName + \"<\" + partialKey + \">\" + INSTANCE_DELIMITER + simpleName,\r\n this.declaration,\r\n classPrototype,\r\n this.decoratorFlags\r\n );\r\n partialPrototype.flags = this.flags;\r\n partialPrototype.operatorKind = this.operatorKind;\r\n partialPrototype.classTypeArguments = classTypeArguments;\r\n return partialPrototype;\r\n }\r\n\r\n /** Resolves the specified type arguments prior to resolving this prototype to an instance. */\r\n resolveUsingTypeArguments(\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n reportNode: Node\r\n ): Function | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (this.is(CommonFlags.GENERIC)) {\r\n assert(typeArgumentNodes != null && typeArgumentNodes.length != 0);\r\n resolvedTypeArguments = this.program.resolveTypeArguments( // reports\r\n assert(this.declaration.typeParameters),\r\n typeArgumentNodes,\r\n contextualTypeArguments,\r\n reportNode\r\n );\r\n if (!resolvedTypeArguments) return null;\r\n }\r\n return this.resolve(resolvedTypeArguments, contextualTypeArguments);\r\n }\r\n\r\n /** Resolves the type arguments to use when compiling a built-in call. Must be a built-in. */\r\n resolveBuiltinTypeArguments(\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null\r\n ): Type[] | null {\r\n assert(this.is(CommonFlags.BUILTIN));\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (typeArgumentNodes) {\r\n let k = typeArgumentNodes.length;\r\n resolvedTypeArguments = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let resolvedType = this.program.resolveType( // reports\r\n typeArgumentNodes[i],\r\n contextualTypeArguments,\r\n true\r\n );\r\n if (!resolvedType) return null;\r\n resolvedTypeArguments[i] = resolvedType;\r\n }\r\n }\r\n return resolvedTypeArguments;\r\n }\r\n\r\n toString(): string { return this.simpleName; }\r\n}\r\n\r\n/** A resolved function. */\r\nexport class Function extends Element {\r\n\r\n kind = ElementKind.FUNCTION;\r\n\r\n /** Prototype reference. */\r\n prototype: FunctionPrototype;\r\n /** Function signature. */\r\n signature: Signature;\r\n /** Map of locals by name. */\r\n localsByName: Map = new Map();\r\n /** Array of locals by index. */\r\n localsByIndex: Local[] = [];\r\n /** List of additional non-parameter locals. */\r\n additionalLocals: Type[] = [];\r\n /** Current break context label. */\r\n breakContext: string | null = null;\r\n /** Contextual type arguments. */\r\n contextualTypeArguments: Map | null;\r\n /** Current control flow. */\r\n flow: Flow;\r\n /** Remembered debug locations. */\r\n debugLocations: Range[] = [];\r\n /** Function reference, if compiled. */\r\n ref: FunctionRef = 0;\r\n /** Function table index, if any. */\r\n functionTableIndex: i32 = -1;\r\n /** Trampoline function for calling with omitted arguments. */\r\n trampoline: Function | null = null;\r\n /** The outer scope, if a function expression. */\r\n outerScope: Flow | null = null;\r\n\r\n private nextBreakId: i32 = 0;\r\n private breakStack: i32[] | null = null;\r\n nextInlineId: i32 = 0;\r\n\r\n /** Constructs a new concrete function. */\r\n constructor(\r\n prototype: FunctionPrototype,\r\n internalName: string,\r\n signature: Signature,\r\n parent: Element | null = null,\r\n contextualTypeArguments: Map | null = null\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName);\r\n this.prototype = prototype;\r\n this.signature = signature;\r\n this.parent = parent;\r\n this.flags = prototype.flags;\r\n this.decoratorFlags = prototype.decoratorFlags;\r\n this.contextualTypeArguments = contextualTypeArguments;\r\n if (!(prototype.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN) || prototype.is(CommonFlags.DECLARE))) {\r\n let localIndex = 0;\r\n if (parent && parent.kind == ElementKind.CLASS) {\r\n assert(this.is(CommonFlags.INSTANCE));\r\n let local = new Local(\r\n prototype.program,\r\n \"this\",\r\n localIndex++,\r\n assert(signature.thisType)\r\n );\r\n this.localsByName.set(\"this\", local);\r\n this.localsByIndex[local.index] = local;\r\n let inheritedTypeArguments = (parent).contextualTypeArguments;\r\n if (inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments.has(inheritedName)) {\r\n this.contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n }\r\n } else {\r\n assert(!this.is(CommonFlags.INSTANCE)); // internal error\r\n }\r\n let parameterTypes = signature.parameterTypes;\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) {\r\n let parameterType = parameterTypes[i];\r\n let parameterName = signature.getParameterName(i);\r\n let local = new Local(\r\n prototype.program,\r\n parameterName,\r\n localIndex++,\r\n parameterType\r\n // FIXME: declaration?\r\n );\r\n this.localsByName.set(parameterName, local);\r\n this.localsByIndex[local.index] = local;\r\n }\r\n }\r\n this.flow = Flow.create(this);\r\n }\r\n\r\n /** Adds a local of the specified type, with an optional name. */\r\n addLocal(type: Type, name: string | null = null, declaration: VariableDeclaration | null = null): Local {\r\n // if it has a name, check previously as this method will throw otherwise\r\n var localIndex = this.signature.parameterTypes.length + this.additionalLocals.length;\r\n if (this.is(CommonFlags.INSTANCE)) ++localIndex;\r\n var local = new Local(\r\n this.prototype.program,\r\n name\r\n ? name\r\n : \"var$\" + localIndex.toString(10),\r\n localIndex,\r\n type,\r\n declaration\r\n );\r\n if (name) {\r\n if (this.localsByName.has(name)) throw new Error(\"duplicate local name\");\r\n this.localsByName.set(name, local);\r\n }\r\n this.localsByIndex[local.index] = local;\r\n this.additionalLocals.push(type);\r\n return local;\r\n }\r\n\r\n private tempI32s: Local[] | null = null;\r\n private tempI64s: Local[] | null = null;\r\n private tempF32s: Local[] | null = null;\r\n private tempF64s: Local[] | null = null;\r\n\r\n /** Gets a free temporary local of the specified type. */\r\n getTempLocal(type: Type, wrapped: bool = false): Local {\r\n var temps: Local[] | null;\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s;\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps && temps.length) {\r\n local = temps.pop();\r\n local.type = type;\r\n local.flags = CommonFlags.NONE;\r\n } else {\r\n local = this.addLocal(type);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\r\n return local;\r\n }\r\n\r\n /** Frees the temporary local for reuse. */\r\n freeTempLocal(local: Local): void {\r\n if (local.is(CommonFlags.INLINED)) return;\r\n assert(local.index >= 0);\r\n var temps: Local[];\r\n assert(local.type != null); // internal error\r\n switch ((local.type).toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n assert(local.index >= 0);\r\n temps.push(local);\r\n }\r\n\r\n /** Gets and immediately frees a temporary local of the specified type. */\r\n getAndFreeTempLocal(type: Type, wrapped: bool): Local {\r\n var temps: Local[];\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n var local: Local;\r\n if (temps.length) {\r\n local = temps[temps.length - 1];\r\n local.type = type;\r\n } else {\r\n local = this.addLocal(type);\r\n temps.push(local);\r\n }\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n this.flow.setLocalWrapped(local.index, wrapped);\r\n }\r\n return local;\r\n }\r\n\r\n /** Enters a(nother) break context. */\r\n enterBreakContext(): string {\r\n var id = this.nextBreakId++;\r\n if (!this.breakStack) this.breakStack = [ id ];\r\n else this.breakStack.push(id);\r\n return this.breakContext = id.toString(10);\r\n }\r\n\r\n /** Leaves the current break context. */\r\n leaveBreakContext(): void {\r\n assert(this.breakStack != null);\r\n var length = (this.breakStack).length;\r\n assert(length > 0);\r\n (this.breakStack).pop();\r\n if (length > 1) {\r\n this.breakContext = (this.breakStack)[length - 2].toString(10);\r\n } else {\r\n this.breakContext = null;\r\n this.breakStack = null;\r\n }\r\n }\r\n\r\n /** Finalizes the function once compiled, releasing no longer needed resources. */\r\n finalize(module: Module, ref: FunctionRef): void {\r\n this.ref = ref;\r\n assert(!this.breakStack || !this.breakStack.length); // internal error\r\n this.breakStack = null;\r\n this.breakContext = null;\r\n this.tempI32s = this.tempI64s = this.tempF32s = this.tempF64s = null;\r\n if (this.program.options.sourceMap) {\r\n let debugLocations = this.debugLocations;\r\n for (let i = 0, k = debugLocations.length; i < k; ++i) {\r\n let debugLocation = debugLocations[i];\r\n module.setDebugLocation(\r\n ref,\r\n debugLocation.debugInfoRef,\r\n debugLocation.source.debugInfoIndex,\r\n debugLocation.line,\r\n debugLocation.column\r\n );\r\n }\r\n }\r\n }\r\n\r\n /** Returns the TypeScript representation of this function. */\r\n toString(): string { return this.prototype.simpleName; }\r\n}\r\n\r\n/** A resolved function target, that is a function called indirectly by an index and signature. */\r\nexport class FunctionTarget extends Element {\r\n\r\n kind = ElementKind.FUNCTION_TARGET;\r\n\r\n /** Underlying signature. */\r\n signature: Signature;\r\n /** Function type. */\r\n type: Type;\r\n\r\n /** Constructs a new function target. */\r\n constructor(program: Program, signature: Signature) {\r\n super(program, \"\", \"\");\r\n var simpleName = signature.toSignatureString();\r\n this.simpleName = simpleName;\r\n this.internalName = simpleName;\r\n this.signature = signature;\r\n this.type = Type.u32.asFunction(signature);\r\n }\r\n}\r\n\r\n/** A yet unresolved instance field prototype. */\r\nexport class FieldPrototype extends Element {\r\n\r\n kind = ElementKind.FIELD_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: FieldDeclaration;\r\n /** Parent class prototype. */\r\n classPrototype: ClassPrototype;\r\n\r\n /** Constructs a new field prototype. */\r\n constructor(\r\n classPrototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FieldDeclaration\r\n ) {\r\n super(classPrototype.program, simpleName, internalName);\r\n this.classPrototype = classPrototype;\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n }\r\n}\r\n\r\n/** A resolved instance field. */\r\nexport class Field extends VariableLikeElement {\r\n\r\n kind = ElementKind.FIELD;\r\n\r\n /** Field prototype reference. */\r\n prototype: FieldPrototype;\r\n /** Field memory offset, if an instance field. */\r\n memoryOffset: i32 = -1;\r\n\r\n /** Constructs a new field. */\r\n constructor(\r\n prototype: FieldPrototype,\r\n internalName: string,\r\n type: Type,\r\n declaration: FieldDeclaration,\r\n parent: Class\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName, type, declaration);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.type = type;\r\n this.parent = parent;\r\n }\r\n}\r\n\r\n/** A property comprised of a getter and a setter function. */\r\nexport class Property extends Element {\r\n\r\n kind = ElementKind.PROPERTY;\r\n\r\n /** Parent class prototype. */\r\n parent: ClassPrototype;\r\n /** Getter prototype. */\r\n getterPrototype: FunctionPrototype | null = null;\r\n /** Setter prototype. */\r\n setterPrototype: FunctionPrototype | null = null;\r\n\r\n /** Constructs a new property prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n parent: ClassPrototype\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.parent = parent;\r\n }\r\n}\r\n\r\n/** A yet unresolved class prototype. */\r\nexport class ClassPrototype extends Element {\r\n\r\n kind = ElementKind.CLASS_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: ClassDeclaration;\r\n /** Resolved instances. */\r\n instances: Map = new Map();\r\n /** Instance member prototypes. */\r\n instanceMembers: Map | null = null;\r\n /** Base class prototype, if applicable. */\r\n basePrototype: ClassPrototype | null = null; // set in Program#initialize\r\n /** Constructor prototype. */\r\n constructorPrototype: FunctionPrototype | null = null;\r\n /** Operator overload prototypes. */\r\n overloadPrototypes: Map = new Map();\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: ClassDeclaration,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n this.decoratorFlags = decoratorFlags;\r\n }\r\n\r\n /** Resolves this prototype to an instance using the specified concrete type arguments. */\r\n resolve(\r\n typeArguments: Type[] | null,\r\n contextualTypeArguments: Map | null = null\r\n ): Class | null {\r\n var instanceKey = typeArguments ? typesToString(typeArguments) : \"\";\r\n var instance = this.instances.get(instanceKey);\r\n if (instance) return instance;\r\n\r\n // inherit contextual type arguments\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n\r\n var declaration = this.declaration;\r\n var baseClass: Class | null = null;\r\n if (declaration.extendsType) {\r\n let baseClassType = this.program.resolveType(declaration.extendsType, null); // reports\r\n if (!baseClassType) return null;\r\n if (!(baseClass = baseClassType.classReference)) {\r\n this.program.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n declaration.extendsType.range\r\n );\r\n return null;\r\n }\r\n if (baseClass.hasDecorator(DecoratorFlags.SEALED)) {\r\n this.program.error(\r\n DiagnosticCode.Class_0_is_sealed_and_cannot_be_extended,\r\n declaration.extendsType.range, baseClass.internalName\r\n );\r\n return null;\r\n }\r\n if (baseClass.hasDecorator(DecoratorFlags.UNMANAGED) != this.hasDecorator(DecoratorFlags.UNMANAGED)) {\r\n this.program.error(\r\n DiagnosticCode.Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa,\r\n Range.join(declaration.name.range, declaration.extendsType.range)\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n // override call specific contextual type arguments if provided\r\n var i: i32, k: i32;\r\n if (typeArguments) {\r\n if ((k = typeArguments.length) != declaration.typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n for (i = 0; i < k; ++i) {\r\n contextualTypeArguments.set(declaration.typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n } else if (declaration.typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n\r\n var simpleName = this.simpleName;\r\n var internalName = this.internalName;\r\n if (instanceKey.length) {\r\n simpleName += \"<\" + instanceKey + \">\";\r\n internalName += \"<\" + instanceKey + \">\";\r\n }\r\n instance = new Class(this, simpleName, internalName, typeArguments, baseClass);\r\n instance.contextualTypeArguments = contextualTypeArguments;\r\n this.instances.set(instanceKey, instance);\r\n this.program.instancesLookup.set(internalName, instance);\r\n\r\n var memoryOffset: u32 = 0;\r\n if (baseClass) {\r\n memoryOffset = baseClass.currentMemoryOffset;\r\n if (baseClass.members) {\r\n if (!instance.members) instance.members = new Map();\r\n for (let inheritedMember of baseClass.members.values()) {\r\n instance.members.set(inheritedMember.simpleName, inheritedMember);\r\n }\r\n }\r\n }\r\n\r\n // Resolve constructor\r\n if (this.constructorPrototype) {\r\n let partialConstructor = this.constructorPrototype.resolvePartial(typeArguments); // reports\r\n if (partialConstructor) instance.constructorInstance = partialConstructor.resolve(); // reports\r\n }\r\n\r\n // Resolve instance members\r\n if (this.instanceMembers) {\r\n for (let member of this.instanceMembers.values()) {\r\n switch (member.kind) {\r\n\r\n // Lay out fields in advance\r\n case ElementKind.FIELD_PROTOTYPE: {\r\n if (!instance.members) instance.members = new Map();\r\n let fieldDeclaration = (member).declaration;\r\n if (!fieldDeclaration.type) {\r\n throw new Error(\"type expected\"); // TODO: check if parent class defines a type\r\n }\r\n let fieldType = this.program.resolveType( // reports\r\n fieldDeclaration.type,\r\n instance.contextualTypeArguments\r\n );\r\n if (!fieldType) break;\r\n let fieldInstance = new Field(\r\n member,\r\n internalName + INSTANCE_DELIMITER + (member).simpleName,\r\n fieldType,\r\n fieldDeclaration,\r\n instance\r\n );\r\n switch (fieldType.byteSize) { // align\r\n case 1: break;\r\n case 2: {\r\n if (memoryOffset & 1) ++memoryOffset;\r\n break;\r\n }\r\n case 4: {\r\n if (memoryOffset & 3) memoryOffset = (memoryOffset | 3) + 1;\r\n break;\r\n }\r\n case 8: {\r\n if (memoryOffset & 7) memoryOffset = (memoryOffset | 7) + 1;\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n fieldInstance.memoryOffset = memoryOffset;\r\n memoryOffset += fieldType.byteSize;\r\n instance.members.set(member.simpleName, fieldInstance);\r\n break;\r\n }\r\n\r\n // Partially resolve methods as these might have type arguments on their own\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (!instance.members) instance.members = new Map();\r\n let partialPrototype = (member).resolvePartial(typeArguments); // reports\r\n if (partialPrototype) {\r\n partialPrototype.internalName = internalName + INSTANCE_DELIMITER + partialPrototype.simpleName;\r\n instance.members.set(member.simpleName, partialPrototype);\r\n }\r\n break;\r\n }\r\n\r\n // Clone properties and partially resolve the wrapped accessors for consistence with other methods\r\n case ElementKind.PROPERTY: {\r\n if (!instance.members) instance.members = new Map();\r\n let getterPrototype = assert((member).getterPrototype);\r\n let setterPrototype = (member).setterPrototype;\r\n let instanceProperty = new Property(\r\n this.program,\r\n member.simpleName,\r\n internalName + INSTANCE_DELIMITER + member.simpleName,\r\n this\r\n );\r\n let partialGetterPrototype = getterPrototype.resolvePartial(typeArguments);\r\n if (!partialGetterPrototype) return null;\r\n partialGetterPrototype.internalName = (\r\n internalName + INSTANCE_DELIMITER + partialGetterPrototype.simpleName\r\n );\r\n instanceProperty.getterPrototype = partialGetterPrototype;\r\n if (setterPrototype) {\r\n let partialSetterPrototype = setterPrototype.resolvePartial(typeArguments);\r\n if (!partialSetterPrototype) return null;\r\n partialSetterPrototype.internalName = (\r\n internalName + INSTANCE_DELIMITER + partialSetterPrototype.simpleName\r\n );\r\n instanceProperty.setterPrototype = partialSetterPrototype;\r\n }\r\n instance.members.set(member.simpleName, instanceProperty);\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n }\r\n\r\n // Fully resolve operator overloads (don't have type parameters on their own)\r\n for (let [kind, prototype] of this.overloadPrototypes) {\r\n assert(kind != OperatorKind.INVALID);\r\n let operatorInstance: Function | null;\r\n if (prototype.is(CommonFlags.INSTANCE)) {\r\n let operatorPartial = prototype.resolvePartial(typeArguments); // reports\r\n if (!operatorPartial) continue;\r\n operatorInstance = operatorPartial.resolve(); // reports\r\n } else {\r\n operatorInstance = prototype.resolve(); // reports\r\n }\r\n if (!operatorInstance) continue;\r\n let overloads = instance.overloads;\r\n if (!overloads) instance.overloads = overloads = new Map();\r\n overloads.set(kind, operatorInstance);\r\n }\r\n\r\n instance.currentMemoryOffset = memoryOffset; // offsetof() is the class' byte size in memory\r\n return instance;\r\n }\r\n\r\n /** Resolves the specified type arguments prior to resolving this prototype to an instance. */\r\n resolveUsingTypeArguments(\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n alternativeReportNode: Node | null\r\n ): Class | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (this.is(CommonFlags.GENERIC)) {\r\n assert(typeArgumentNodes != null && typeArgumentNodes.length != 0);\r\n resolvedTypeArguments = this.program.resolveTypeArguments(\r\n this.declaration.typeParameters,\r\n typeArgumentNodes,\r\n contextualTypeArguments,\r\n alternativeReportNode\r\n );\r\n if (!resolvedTypeArguments) return null;\r\n } else {\r\n assert(typeArgumentNodes == null || !typeArgumentNodes.length);\r\n }\r\n return this.resolve(resolvedTypeArguments, contextualTypeArguments);\r\n }\r\n\r\n toString(): string {\r\n return this.simpleName;\r\n }\r\n}\r\n\r\n/** A resolved class. */\r\nexport class Class extends Element {\r\n\r\n kind = ElementKind.CLASS;\r\n\r\n /** Prototype reference. */\r\n prototype: ClassPrototype;\r\n /** Resolved type arguments. */\r\n typeArguments: Type[] | null;\r\n /** Resolved class type. */\r\n type: Type;\r\n /** Base class, if applicable. */\r\n base: Class | null;\r\n /** Contextual type arguments for fields and methods. */\r\n contextualTypeArguments: Map | null = null;\r\n /** Current member memory offset. */\r\n currentMemoryOffset: u32 = 0;\r\n /** Constructor instance. */\r\n constructorInstance: Function | null = null;\r\n /** Operator overloads. */\r\n overloads: Map | null = null;\r\n\r\n /** Constructs a new class. */\r\n constructor(\r\n prototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n typeArguments: Type[] | null = null,\r\n base: Class | null = null\r\n ) {\r\n super(prototype.program, simpleName, internalName);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\r\n this.decoratorFlags = prototype.decoratorFlags;\r\n this.typeArguments = typeArguments;\r\n this.type = prototype.program.options.usizeType.asClass(this);\r\n this.base = base;\r\n\r\n // inherit static members and contextual type arguments from base class\r\n if (base) {\r\n let inheritedTypeArguments = base.contextualTypeArguments;\r\n if (inheritedTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [baseName, baseType] of inheritedTypeArguments) {\r\n this.contextualTypeArguments.set(baseName, baseType);\r\n }\r\n }\r\n }\r\n\r\n // apply instance-specific contextual type arguments\r\n var declaration = this.prototype.declaration;\r\n var i: i32, k: i32;\r\n if (declaration) { // irrelevant for built-ins\r\n let typeParameters = declaration.typeParameters;\r\n if (typeArguments) {\r\n if ((k = typeArguments.length) != typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n if (k) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (i = 0; i < k; ++i) {\r\n this.contextualTypeArguments.set(typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n }\r\n } else if (typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n }\r\n }\r\n\r\n /** Tests if a value of this class type is assignable to a target of the specified class type. */\r\n isAssignableTo(target: Class): bool {\r\n var current: Class | null = this;\r\n do if (current == target) return true;\r\n while (current = current.base);\r\n return false;\r\n }\r\n\r\n /** Looks up the operator overload of the specified kind. */\r\n lookupOverload(kind: OperatorKind, unchecked: bool = false): Function | null {\r\n if (unchecked) {\r\n switch (kind) {\r\n case OperatorKind.INDEXED_GET: {\r\n let uncheckedOverload = this.lookupOverload(OperatorKind.UNCHECKED_INDEXED_GET);\r\n if (uncheckedOverload) return uncheckedOverload;\r\n break;\r\n }\r\n case OperatorKind.INDEXED_SET: {\r\n let uncheckedOverload = this.lookupOverload(OperatorKind.UNCHECKED_INDEXED_SET);\r\n if (uncheckedOverload) return uncheckedOverload;\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n var instance: Class | null = this;\r\n do {\r\n let overloads = instance.overloads;\r\n if (overloads) {\r\n let overload = overloads.get(kind);\r\n if (overload) return overload;\r\n }\r\n } while (instance = instance.base);\r\n return null;\r\n }\r\n\r\n toString(): string {\r\n return this.simpleName;\r\n }\r\n}\r\n\r\n/** A yet unresolved interface. */\r\nexport class InterfacePrototype extends ClassPrototype {\r\n\r\n kind = ElementKind.INTERFACE_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: InterfaceDeclaration; // more specific\r\n\r\n /** Constructs a new interface prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: InterfaceDeclaration,\r\n decoratorFlags: DecoratorFlags\r\n ) {\r\n super(program, simpleName, internalName, declaration, decoratorFlags);\r\n }\r\n}\r\n\r\n/** A resolved interface. */\r\nexport class Interface extends Class {\r\n\r\n kind = ElementKind.INTERFACE;\r\n\r\n /** Prototype reference. */\r\n prototype: InterfacePrototype; // more specific\r\n /** Base interface, if applcable. */\r\n base: Interface | null; // more specific\r\n\r\n /** Constructs a new interface. */\r\n constructor(\r\n prototype: InterfacePrototype,\r\n simpleName: string,\r\n internalName: string,\r\n typeArguments: Type[] = [],\r\n base: Interface | null = null\r\n ) {\r\n super(prototype, simpleName, internalName, typeArguments, base);\r\n }\r\n}\r\n\r\n/** Control flow flags indicating specific conditions. */\r\nexport const enum FlowFlags {\r\n /** No specific conditions. */\r\n NONE = 0,\r\n\r\n /** This branch always returns. */\r\n RETURNS = 1 << 0,\r\n /** This branch always throws. */\r\n THROWS = 1 << 1,\r\n /** This branch always breaks. */\r\n BREAKS = 1 << 2,\r\n /** This branch always continues. */\r\n CONTINUES = 1 << 3,\r\n /** This branch always allocates. Constructors only. */\r\n ALLOCATES = 1 << 4,\r\n\r\n /** This branch conditionally returns in a child branch. */\r\n CONDITIONALLY_RETURNS = 1 << 5,\r\n /** This branch conditionally throws in a child branch. */\r\n CONDITIONALLY_THROWS = 1 << 6,\r\n /** This branch conditionally breaks in a child branch. */\r\n CONDITIONALLY_BREAKS = 1 << 7,\r\n /** This branch conditionally continues in a child branch. */\r\n CONDITIONALLY_CONTINUES = 1 << 8,\r\n /** This branch conditionally allocates in a child branch. Constructors only. */\r\n CONDITIONALLY_ALLOCATES = 1 << 9,\r\n\r\n /** This branch is part of inlining a function. */\r\n INLINE_CONTEXT = 1 << 10,\r\n /** This branch explicitly requests no bounds checking. */\r\n UNCHECKED_CONTEXT = 1 << 11,\r\n /** This branch returns a properly wrapped value. */\r\n RETURNS_WRAPPED = 1 << 12,\r\n\r\n /** This branch is terminated if any of these flags is set. */\r\n TERMINATED = FlowFlags.RETURNS | FlowFlags.THROWS | FlowFlags.BREAKS | FlowFlags.CONTINUES\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 /** Enters a new branch or scope and returns the new flow. */\r\n enterBranchOrScope(): 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 /** Leaves the current branch or scope and returns the parent flow. */\r\n leaveBranchOrScope(propagate: bool = true): Flow {\r\n var parent = assert(this.parent);\r\n\r\n // Free block-scoped locals\r\n if (this.scopedLocals) {\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\r\n // Propagate conditionaal flags to parent\r\n if (propagate) {\r\n if (this.is(FlowFlags.RETURNS)) {\r\n parent.set(FlowFlags.CONDITIONALLY_RETURNS);\r\n }\r\n if (this.is(FlowFlags.THROWS)) {\r\n parent.set(FlowFlags.CONDITIONALLY_THROWS);\r\n }\r\n if (this.is(FlowFlags.BREAKS) && parent.breakLabel == this.breakLabel) {\r\n parent.set(FlowFlags.CONDITIONALLY_BREAKS);\r\n }\r\n if (this.is(FlowFlags.CONTINUES) && parent.continueLabel == this.continueLabel) {\r\n parent.set(FlowFlags.CONDITIONALLY_CONTINUES);\r\n }\r\n if (this.is(FlowFlags.ALLOCATES)) {\r\n parent.set(FlowFlags.CONDITIONALLY_ALLOCATES);\r\n }\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. on inner block). */\r\n inherit(other: Flow): void {\r\n this.flags |= other.flags & (\r\n 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 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 mutual flags and local wrap states from the specified flows (e.g. on then/else branches). */\r\n inheritMutual(left: Flow, right: Flow): void {\r\n // flags set in both arms\r\n this.flags |= left.flags & right.flags & (\r\n 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 // locals wrapped in both arms\r\n this.wrappedLocals = i64_and(\r\n left.wrappedLocals,\r\n right.wrappedLocals\r\n );\r\n var leftExt = left.wrappedLocalsExt;\r\n var rightExt = right.wrappedLocalsExt;\r\n if (leftExt != null && rightExt != null) {\r\n let thisExt = this.wrappedLocalsExt;\r\n let minLength = min(leftExt.length, rightExt.length);\r\n if (minLength) {\r\n if (!thisExt) thisExt = new Array(minLength);\r\n else while (thisExt.length < minLength) thisExt.push(i64_new(0));\r\n for (let i = 0; i < minLength; ++i) {\r\n thisExt[i] = i64_and(\r\n leftExt[i],\r\n rightExt[i]\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n /**\r\n * Tests if an expression can possibly overflow in the context of this flow. Assumes that the\r\n * expression might already have overflown and returns `false` only if the operation neglects\r\n * any possibly combination of garbage bits being present.\r\n */\r\n canOverflow(expr: ExpressionRef, type: Type): bool {\r\n // TODO: the following catches most common and a few uncommon cases, but there are additional\r\n // opportunities here, obviously.\r\n assert(type != Type.void);\r\n\r\n // types other than i8, u8, i16, u16 and bool do not overflow\r\n if (!type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) return false;\r\n\r\n var operand: ExpressionRef;\r\n switch (getExpressionId(expr)) {\r\n\r\n // overflows if the local isn't wrapped or the conversion does\r\n case ExpressionId.GetLocal: {\r\n let currentFunction = this.currentFunction;\r\n let local = currentFunction.localsByIndex[getGetLocalIndex(expr)];\r\n return !currentFunction.flow.isLocalWrapped(local.index)\r\n || canConversionOverflow(local.type, type);\r\n }\r\n\r\n // overflows if the value does\r\n case ExpressionId.SetLocal: {\r\n assert(isTeeLocal(expr));\r\n return this.canOverflow(getSetLocalValue(expr), type);\r\n }\r\n\r\n // never overflows because globals are wrapped on set\r\n case ExpressionId.GetGlobal: return false;\r\n\r\n case ExpressionId.Binary: {\r\n switch (getBinaryOp(expr)) {\r\n\r\n // comparisons do not overflow (result is 0 or 1)\r\n case BinaryOp.EqI32:\r\n case BinaryOp.EqI64:\r\n case BinaryOp.EqF32:\r\n case BinaryOp.EqF64:\r\n case BinaryOp.NeI32:\r\n case BinaryOp.NeI64:\r\n case BinaryOp.NeF32:\r\n case BinaryOp.NeF64:\r\n case BinaryOp.LtI32:\r\n case BinaryOp.LtU32:\r\n case BinaryOp.LtI64:\r\n case BinaryOp.LtU64:\r\n case BinaryOp.LtF32:\r\n case BinaryOp.LtF64:\r\n case BinaryOp.LeI32:\r\n case BinaryOp.LeU32:\r\n case BinaryOp.LeI64:\r\n case BinaryOp.LeU64:\r\n case BinaryOp.LeF32:\r\n case BinaryOp.LeF64:\r\n case BinaryOp.GtI32:\r\n case BinaryOp.GtU32:\r\n case BinaryOp.GtI64:\r\n case BinaryOp.GtU64:\r\n case BinaryOp.GtF32:\r\n case BinaryOp.GtF64:\r\n case BinaryOp.GeI32:\r\n case BinaryOp.GeU32:\r\n case BinaryOp.GeI64:\r\n case BinaryOp.GeU64:\r\n case BinaryOp.GeF32:\r\n case BinaryOp.GeF64: return false;\r\n\r\n // result won't overflow if one side is 0 or if one side is 1 and the other wrapped\r\n case BinaryOp.MulI32: {\r\n return !(\r\n (\r\n getExpressionId(operand = getBinaryLeft(expr)) == ExpressionId.Const &&\r\n (\r\n getConstValueI32(operand) == 0 ||\r\n (\r\n getConstValueI32(operand) == 1 &&\r\n !this.canOverflow(getBinaryRight(expr), type)\r\n )\r\n )\r\n ) || (\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n (\r\n getConstValueI32(operand) == 0 ||\r\n (\r\n getConstValueI32(operand) == 1 &&\r\n !this.canOverflow(getBinaryLeft(expr), type)\r\n )\r\n )\r\n )\r\n );\r\n }\r\n\r\n // result won't overflow if one side is a constant less than this type's mask or one side\r\n // is wrapped\r\n case BinaryOp.AndI32: {\r\n // note that computeSmallIntegerMask returns the mask minus the MSB for signed types\r\n // because signed value garbage bits must be guaranteed to be equal to the MSB.\r\n return !(\r\n (\r\n (\r\n getExpressionId(operand = getBinaryLeft(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) <= type.computeSmallIntegerMask(Type.i32)\r\n ) || !this.canOverflow(operand, type)\r\n ) || (\r\n (\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) <= type.computeSmallIntegerMask(Type.i32)\r\n ) || !this.canOverflow(operand, type)\r\n )\r\n );\r\n }\r\n\r\n // overflows if the shift doesn't clear potential garbage bits\r\n case BinaryOp.ShlI32: {\r\n let shift = 32 - type.size;\r\n return getExpressionId(operand = getBinaryRight(expr)) != ExpressionId.Const\r\n || getConstValueI32(operand) < shift;\r\n }\r\n\r\n // overflows if the value does and the shift doesn't clear potential garbage bits\r\n case BinaryOp.ShrI32: {\r\n let shift = 32 - type.size;\r\n return this.canOverflow(getBinaryLeft(expr), type) && (\r\n getExpressionId(operand = getBinaryRight(expr)) != ExpressionId.Const ||\r\n getConstValueI32(operand) < shift\r\n );\r\n }\r\n\r\n // overflows if the shift does not clear potential garbage bits. if an unsigned value is\r\n // wrapped, it can't overflow.\r\n case BinaryOp.ShrU32: {\r\n let shift = 32 - type.size;\r\n return type.is(TypeFlags.SIGNED)\r\n ? !(\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) > shift // must clear MSB\r\n )\r\n : this.canOverflow(getBinaryLeft(expr), type) && !(\r\n getExpressionId(operand = getBinaryRight(expr)) == ExpressionId.Const &&\r\n getConstValueI32(operand) >= shift // can leave MSB\r\n );\r\n }\r\n\r\n // overflows if any side does\r\n case BinaryOp.DivU32:\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemU32: {\r\n return this.canOverflow(getBinaryLeft(expr), type)\r\n || this.canOverflow(getBinaryRight(expr), type);\r\n }\r\n }\r\n break;\r\n }\r\n\r\n case ExpressionId.Unary: {\r\n switch (getUnaryOp(expr)) {\r\n\r\n // comparisons do not overflow (result is 0 or 1)\r\n case UnaryOp.EqzI32:\r\n case UnaryOp.EqzI64: return false;\r\n\r\n // overflow if the maximum result (32) cannot be represented in the target type\r\n case UnaryOp.ClzI32:\r\n case UnaryOp.CtzI32:\r\n case UnaryOp.PopcntI32: return type.size < 7;\r\n }\r\n break;\r\n }\r\n\r\n // overflows if the value cannot be represented in the target type\r\n case ExpressionId.Const: {\r\n let value: i32 = 0;\r\n switch (getExpressionType(expr)) {\r\n case NativeType.I32: { value = getConstValueI32(expr); break; }\r\n case NativeType.I64: { value = getConstValueI64Low(expr); break; } // discards upper bits\r\n case NativeType.F32: { value = i32(getConstValueF32(expr)); break; }\r\n case NativeType.F64: { value = i32(getConstValueF64(expr)); break; }\r\n default: assert(false);\r\n }\r\n switch (type.kind) {\r\n case TypeKind.I8: return value < i8.MIN_VALUE || value > i8.MAX_VALUE;\r\n case TypeKind.I16: return value < i16.MIN_VALUE || value > i16.MAX_VALUE;\r\n case TypeKind.U8: return value < 0 || value > u8.MAX_VALUE;\r\n case TypeKind.U16: return value < 0 || value > u16.MAX_VALUE;\r\n case TypeKind.BOOL: return (value & ~1) != 0;\r\n }\r\n break;\r\n }\r\n\r\n // overflows if the conversion does\r\n case ExpressionId.Load: {\r\n let fromType: Type;\r\n switch (getLoadBytes(expr)) {\r\n case 1: { fromType = isLoadSigned(expr) ? Type.i8 : Type.u8; break; }\r\n case 2: { fromType = isLoadSigned(expr) ? Type.i16 : Type.u16; break; }\r\n default: { fromType = isLoadSigned(expr) ? Type.i32 : Type.u32; break; }\r\n }\r\n return canConversionOverflow(fromType, type);\r\n }\r\n\r\n // overflows if the result does, which is either\r\n // - the last expression of the block, by contract, if the block doesn't have a label\r\n // - the last expression or the value of an inner br if the block has a label (TODO)\r\n case ExpressionId.Block: {\r\n if (!getBlockName(expr)) {\r\n let size = assert(getBlockChildCount(expr));\r\n let last = getBlockChild(expr, size - 1);\r\n return this.canOverflow(last, type);\r\n }\r\n // actually, brs with a value that'd be handled here is not emitted atm\r\n break;\r\n }\r\n\r\n // overflows if either side does\r\n case ExpressionId.If: {\r\n return this.canOverflow(getIfTrue(expr), type)\r\n || this.canOverflow(assert(getIfFalse(expr)), type);\r\n }\r\n\r\n // overflows if either side does\r\n case ExpressionId.Select: {\r\n return this.canOverflow(getSelectThen(expr), type)\r\n || this.canOverflow(getSelectElse(expr), type);\r\n }\r\n\r\n // overflows if the call does not return a wrapped value or the conversion does\r\n case ExpressionId.Call: {\r\n let program = this.currentFunction.program;\r\n let instance = assert(program.instancesLookup.get(assert(getCallTarget(expr))));\r\n assert(instance.kind == ElementKind.FUNCTION);\r\n let returnType = (instance).signature.returnType;\r\n return !(instance).flow.is(FlowFlags.RETURNS_WRAPPED)\r\n || canConversionOverflow(returnType, type);\r\n }\r\n\r\n // doesn't technically overflow\r\n case ExpressionId.Unreachable: return false;\r\n }\r\n return true;\r\n }\r\n\r\n /** Finalizes this flow. Must be the topmost parent flow of the function. */\r\n finalize(): void {\r\n assert(this.parent == null); // must be the topmost parent flow\r\n this.continueLabel = null;\r\n this.breakLabel = null;\r\n this.returnLabel = null;\r\n this.contextualTypeArguments = null;\r\n }\r\n}\r\n\r\n/** Tests if a conversion from one type to another can technically overflow. */\r\nfunction canConversionOverflow(fromType: Type, toType: Type): bool {\r\n var fromSize = fromType.byteSize;\r\n var toSize = toType.byteSize;\r\n return !fromType.is(TypeFlags.INTEGER) // non-i32 locals or returns\r\n || fromSize > toSize\r\n || fromType.is(TypeFlags.SIGNED) != toType.is(TypeFlags.SIGNED);\r\n}\r\n","var g;\n\n// This works in non-strict mode\ng = (function() {\n\treturn this;\n})();\n\ntry {\n\t// This works if eval is allowed (see CSP)\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\n} catch (e) {\n\t// This works if the window reference is available\n\tif (typeof window === \"object\") g = window;\n}\n\n// g can still be undefined, but nothing to do about it...\n// We return undefined, instead of nothing here, so it's\n// easier to handle this case. if(!global) { ...}\n\nmodule.exports = g;\n","/**\r\n * Mappings from AssemblyScript types to WebAssembly types.\r\n * @module types\r\n *//***/\r\n\r\nimport {\r\n Class,\r\n FunctionTarget\r\n} from \"./program\";\r\n\r\nimport {\r\n NativeType,\r\n ExpressionRef,\r\n Module\r\n} from \"./module\";\r\n\r\n/** Indicates the kind of a type. */\r\nexport const enum TypeKind {\r\n\r\n // signed integers\r\n\r\n /** An 8-bit signed integer. */\r\n I8,\r\n /** A 16-bit signed integer. */\r\n I16,\r\n /** A 32-bit signed integer. */\r\n I32,\r\n /** A 64-bit signed integer. */\r\n I64,\r\n /** A 32-bit/64-bit signed integer, depending on the target. */\r\n ISIZE,\r\n\r\n // unsigned integers\r\n\r\n /** An 8-bit unsigned integer. */\r\n U8,\r\n /** A 16-bit unsigned integer. */\r\n U16,\r\n /** A 32-bit unsigned integer. Also the base of function types. */\r\n U32,\r\n /** A 64-bit unsigned integer. */\r\n U64,\r\n /** A 32-bit/64-bit unsigned integer, depending on the target. Also the base of class types. */\r\n USIZE,\r\n /** A 1-bit unsigned integer. */\r\n BOOL, // sic\r\n\r\n // floats\r\n\r\n /** A 32-bit float. */\r\n F32,\r\n /** A 64-bit double. */\r\n F64,\r\n\r\n // other\r\n\r\n /** No return type. */\r\n VOID\r\n}\r\n\r\n/** Indicates capabilities of a type. */\r\nexport const enum TypeFlags {\r\n NONE = 0,\r\n /** Is a signed type that can represent negative values. */\r\n SIGNED = 1 << 0,\r\n /** Is an unsigned type that cannot represent negative values. */\r\n UNSIGNED = 1 << 1,\r\n /** Is an integer type. */\r\n INTEGER = 1 << 2,\r\n /** Is a floating point type. */\r\n FLOAT = 1 << 3,\r\n /** Is a pointer type. */\r\n POINTER = 1 << 4,\r\n /** Is smaller than 32-bits. */\r\n SHORT = 1 << 5,\r\n /** Is larger than 32-bits. */\r\n LONG = 1 << 6,\r\n /** Is a value type. */\r\n VALUE = 1 << 7,\r\n /** Is a reference type. */\r\n REFERENCE = 1 << 8,\r\n /** Is a nullable type. */\r\n NULLABLE = 1 << 9\r\n}\r\n\r\n/** Represents a resolved type. */\r\nexport class Type {\r\n\r\n /** Type kind. */\r\n kind: TypeKind;\r\n /** Type flags. */\r\n flags: TypeFlags;\r\n /** Size in bits. */\r\n size: u32;\r\n /** Size in bytes. */\r\n byteSize: i32;\r\n /** Underlying class reference, if a class type. */\r\n classReference: Class | null;\r\n /** Underlying signature reference, if a function type. */\r\n signatureReference: Signature | null;\r\n /** Respective non-nullable type, if nullable. */\r\n nonNullableType: Type;\r\n /** Cached nullable type, if non-nullable. */\r\n private cachedNullableType: Type | null = null;\r\n\r\n /** Constructs a new resolved type. */\r\n constructor(kind: TypeKind, flags: TypeFlags, size: u32) {\r\n this.kind = kind;\r\n this.flags = flags;\r\n this.size = size;\r\n this.byteSize = ceil(size / 8);\r\n this.classReference = null;\r\n this.signatureReference = null;\r\n this.nonNullableType = this;\r\n }\r\n\r\n /** Returns the closest int type representing this type. */\r\n get intType(): Type {\r\n switch (this.kind) {\r\n case TypeKind.I8: return Type.i8;\r\n case TypeKind.I16: return Type.i16;\r\n case TypeKind.F32:\r\n case TypeKind.I32: return Type.i32;\r\n case TypeKind.F64:\r\n case TypeKind.I64: return Type.i64;\r\n case TypeKind.ISIZE: return this.size == 64 ? Type.isize64 : Type.isize32;\r\n case TypeKind.U8: return Type.u8;\r\n case TypeKind.U16: return Type.u16;\r\n case TypeKind.U32: return Type.u32;\r\n case TypeKind.U64: return Type.u64;\r\n case TypeKind.USIZE: return this.size == 64 ? Type.usize64 : Type.usize32;\r\n case TypeKind.BOOL:\r\n default: return Type.i32;\r\n }\r\n }\r\n\r\n /** Computes the sign-extending shift in the target type. */\r\n computeSmallIntegerShift(targetType: Type): u32 {\r\n return targetType.size - this.size;\r\n }\r\n\r\n /** Computes the truncating mask in the target type. */\r\n computeSmallIntegerMask(targetType: Type): u32 {\r\n var size = this.is(TypeFlags.UNSIGNED) ? this.size : this.size - 1;\r\n return ~0 >>> (targetType.size - size);\r\n }\r\n\r\n /** Tests if this type has (all of) the specified flags. */\r\n is(flags: TypeFlags): bool { return (this.flags & flags) == flags; }\r\n /** Tests if this type has any of the specified flags. */\r\n isAny(flags: TypeFlags): bool { return (this.flags & flags) != 0; }\r\n\r\n /** Composes a class type from this type and a class. */\r\n asClass(classType: Class): Type {\r\n assert(this.kind == TypeKind.USIZE && !this.classReference);\r\n var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size);\r\n ret.classReference = classType;\r\n return ret;\r\n }\r\n\r\n /** Composes a function type from this type and a function. */\r\n asFunction(signature: Signature): Type {\r\n assert(this.kind == TypeKind.U32 && !this.signatureReference);\r\n var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size);\r\n ret.signatureReference = signature;\r\n return ret;\r\n }\r\n\r\n /** Composes the respective nullable type of this type. */\r\n asNullable(): Type {\r\n assert(this.is(TypeFlags.REFERENCE));\r\n if (!this.cachedNullableType) {\r\n assert(!this.is(TypeFlags.NULLABLE));\r\n this.cachedNullableType = new Type(this.kind, this.flags | TypeFlags.NULLABLE, this.size);\r\n this.cachedNullableType.nonNullableType = this;\r\n this.cachedNullableType.classReference = this.classReference; // either a class reference\r\n this.cachedNullableType.signatureReference = this.signatureReference; // or a function reference\r\n }\r\n return this.cachedNullableType;\r\n }\r\n\r\n /** Tests if a value of this type is assignable to a target of the specified type. */\r\n isAssignableTo(target: Type, signednessIsRelevant: bool = false): bool {\r\n var currentClass: Class | null;\r\n var targetClass: Class | null;\r\n var currentFunction: Signature | null;\r\n var targetFunction: Signature | null;\r\n if (this.is(TypeFlags.REFERENCE)) {\r\n if (target.is(TypeFlags.REFERENCE)) {\r\n if (!this.is(TypeFlags.NULLABLE) || target.is(TypeFlags.NULLABLE)) {\r\n if (currentClass = this.classReference) {\r\n if (targetClass = target.classReference) {\r\n return currentClass.isAssignableTo(targetClass);\r\n }\r\n } else if (currentFunction = this.signatureReference) {\r\n if (targetFunction = target.signatureReference) {\r\n return currentFunction.isAssignableTo(targetFunction);\r\n }\r\n }\r\n }\r\n }\r\n } else if (!target.is(TypeFlags.REFERENCE)) {\r\n if (this.is(TypeFlags.INTEGER)) {\r\n if (target.is(TypeFlags.INTEGER)) {\r\n if (!signednessIsRelevant || this.is(TypeFlags.SIGNED) == target.is(TypeFlags.SIGNED)) {\r\n return this.size <= target.size;\r\n }\r\n } else if (target.kind == TypeKind.F32) {\r\n return this.size <= 23; // mantissa bits\r\n } else if (target.kind == TypeKind.F64) {\r\n return this.size <= 52; // ^\r\n }\r\n } else if (this.is(TypeFlags.FLOAT)) {\r\n if (target.is(TypeFlags.FLOAT)) {\r\n return this.size <= target.size;\r\n }\r\n }\r\n }\r\n return false;\r\n }\r\n\r\n /** Determines the common compatible type of two types, if any. */\r\n static commonCompatible(left: Type, right: Type, signednessIsImportant: bool): Type | null {\r\n if (right.isAssignableTo(left, signednessIsImportant)) return left;\r\n else if (left.isAssignableTo(right, signednessIsImportant)) return right;\r\n return null;\r\n }\r\n\r\n /** Converts this type to its TypeScript representation. */\r\n toString(kindOnly: bool = false): string {\r\n if (!kindOnly && this.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.classReference;\r\n if (classReference) {\r\n return this.is(TypeFlags.NULLABLE)\r\n ? classReference.toString() + \" | null\"\r\n : classReference.toString();\r\n }\r\n let signatureReference = this.signatureReference;\r\n if (signatureReference) {\r\n return this.is(TypeFlags.NULLABLE)\r\n ? \"(\" + signatureReference.toString(true) + \") | null\"\r\n : signatureReference.toString(true);\r\n }\r\n assert(false);\r\n }\r\n switch (this.kind) {\r\n case TypeKind.I8: return \"i8\";\r\n case TypeKind.I16: return \"i16\";\r\n case TypeKind.I32: return \"i32\";\r\n case TypeKind.I64: return \"i64\";\r\n case TypeKind.ISIZE: return \"isize\";\r\n case TypeKind.U8: return \"u8\";\r\n case TypeKind.U16: return \"u16\";\r\n case TypeKind.U32: return \"u32\";\r\n case TypeKind.U64: return \"u64\";\r\n case TypeKind.USIZE: return \"usize\";\r\n case TypeKind.BOOL: return \"bool\";\r\n case TypeKind.F32: return \"f32\";\r\n case TypeKind.F64: return \"f64\";\r\n default: assert(false);\r\n case TypeKind.VOID: return \"void\";\r\n }\r\n }\r\n\r\n // Binaryen specific\r\n\r\n /** Converts this type to its respective native type. */\r\n toNativeType(): NativeType {\r\n switch (this.kind) {\r\n default: return NativeType.I32;\r\n case TypeKind.I64:\r\n case TypeKind.U64: return NativeType.I64;\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: return this.size == 64 ? NativeType.I64 : NativeType.I32;\r\n case TypeKind.F32: return NativeType.F32;\r\n case TypeKind.F64: return NativeType.F64;\r\n case TypeKind.VOID: return NativeType.None;\r\n }\r\n }\r\n\r\n /** Converts this type to its native `0` value. */\r\n toNativeZero(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n case TypeKind.VOID: assert(false);\r\n default: return module.createI32(0);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(0);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(0);\r\n case TypeKind.F32: return module.createF32(0);\r\n case TypeKind.F64: return module.createF64(0);\r\n }\r\n }\r\n\r\n /** Converts this type to its native `1` value. */\r\n toNativeOne(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n case TypeKind.VOID: assert(false);\r\n default: return module.createI32(1);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(1);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(1);\r\n case TypeKind.F32: return module.createF32(1);\r\n case TypeKind.F64: return module.createF64(1);\r\n }\r\n }\r\n\r\n /** Converts this type to its native `-1` value. */\r\n toNativeNegOne(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n case TypeKind.VOID: assert(false);\r\n default: return module.createI32(-1);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(-1);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(-1, -1);\r\n case TypeKind.F32: return module.createF32(-1);\r\n case TypeKind.F64: return module.createF64(-1);\r\n }\r\n }\r\n\r\n /** Converts this type to its signature string. */\r\n toSignatureString(): string {\r\n switch (this.kind) {\r\n default: return \"i\";\r\n case TypeKind.I64:\r\n case TypeKind.U64: return \"I\";\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: return this.size == 64 ? \"I\" : \"i\";\r\n case TypeKind.F32: return \"f\";\r\n case TypeKind.F64: return \"F\";\r\n case TypeKind.VOID: return \"v\";\r\n }\r\n }\r\n\r\n // Types\r\n\r\n /** An 8-bit signed integer. */\r\n static readonly i8: Type = new Type(TypeKind.I8,\r\n TypeFlags.SIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 8\r\n );\r\n\r\n /** A 16-bit signed integer. */\r\n static readonly i16: Type = new Type(TypeKind.I16,\r\n TypeFlags.SIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 16\r\n );\r\n\r\n /** A 32-bit signed integer. */\r\n static readonly i32: Type = new Type(TypeKind.I32,\r\n TypeFlags.SIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit signed integer. */\r\n static readonly i64: Type = new Type(TypeKind.I64,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 32-bit signed size. WASM32 only. */\r\n static readonly isize32: Type = new Type(TypeKind.ISIZE,\r\n TypeFlags.SIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.POINTER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit signed size. WASM64 only. */\r\n static readonly isize64: Type = new Type(TypeKind.ISIZE,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.POINTER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** An 8-bit unsigned integer. */\r\n static readonly u8: Type = new Type(TypeKind.U8,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 8\r\n );\r\n\r\n /** A 16-bit unsigned integer. */\r\n static readonly u16: Type = new Type(TypeKind.U16,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 16\r\n );\r\n\r\n /** A 32-bit unsigned integer. */\r\n static readonly u32: Type = new Type(TypeKind.U32,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit unsigned integer. */\r\n static readonly u64: Type = new Type(TypeKind.U64,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 32-bit unsigned size. WASM32 only. */\r\n static readonly usize32: Type = new Type(TypeKind.USIZE,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.POINTER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit unsigned size. WASM64 only. */\r\n static readonly usize64: Type = new Type(TypeKind.USIZE,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.POINTER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 1-bit unsigned integer. */\r\n static readonly bool: Type = new Type(TypeKind.BOOL,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SHORT |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 1\r\n );\r\n\r\n /** A 32-bit float. */\r\n static readonly f32: Type = new Type(TypeKind.F32,\r\n TypeFlags.SIGNED |\r\n TypeFlags.FLOAT |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit float. */\r\n static readonly f64: Type = new Type(TypeKind.F64,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.FLOAT |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** No return type. */\r\n static readonly void: Type = new Type(TypeKind.VOID, TypeFlags.NONE, 0);\r\n}\r\n\r\n/** Converts an array of types to an array of native types. */\r\nexport function typesToNativeTypes(types: Type[]): NativeType[] {\r\n var numTypes = types.length;\r\n var ret = new Array(numTypes);\r\n for (let i = 0; i < numTypes; ++i) ret[i] = types[i].toNativeType();\r\n return ret;\r\n}\r\n\r\n/** Converts an array of types to its combined string representation. */\r\nexport function typesToString(types: Type[]): string {\r\n var numTypes = types.length;\r\n if (!numTypes) return \"\";\r\n var sb = new Array(numTypes);\r\n for (let i = 0; i < numTypes; ++i) sb[i] = types[i].toString();\r\n return sb.join(\",\");\r\n}\r\n\r\n/** Represents a fully resolved function signature. */\r\nexport class Signature {\r\n\r\n /** Parameter types, if any, excluding `this`. */\r\n parameterTypes: Type[];\r\n /** Parameter names, if known, excluding `this`. */\r\n parameterNames: string[] | null;\r\n /** Number of required parameters excluding `this`. Other parameters are considered optional. */\r\n requiredParameters: i32;\r\n /** Return type. */\r\n returnType: Type;\r\n /** This type, if an instance signature. */\r\n thisType: Type | null;\r\n /** Whether the last parameter is a rest parameter. */\r\n hasRest: bool;\r\n /** Cached {@link FunctionTarget}. */\r\n cachedFunctionTarget: FunctionTarget | null = null;\r\n /** Respective function type. */\r\n type: Type;\r\n\r\n /** Constructs a new signature. */\r\n constructor(\r\n parameterTypes: Type[] | null = null,\r\n returnType: Type | null = null,\r\n thisType: Type | null = null\r\n ) {\r\n this.parameterTypes = parameterTypes ? parameterTypes : [];\r\n this.parameterNames = null;\r\n this.requiredParameters = 0;\r\n this.returnType = returnType ? returnType : Type.void;\r\n this.thisType = thisType;\r\n this.hasRest = false;\r\n this.type = Type.u32.asFunction(this);\r\n }\r\n\r\n /** Gets the known or, alternatively, generic parameter name at the specified index. */\r\n getParameterName(index: i32): string {\r\n var parameterNames = this.parameterNames;\r\n return parameterNames && parameterNames.length > index\r\n ? parameterNames[index]\r\n : getDefaultParameterName(index);\r\n }\r\n\r\n /** Tests if a value of this function type is assignable to a target of the specified function type. */\r\n isAssignableTo(target: Signature): bool {\r\n // TODO: maybe cache results?\r\n\r\n // check `this` type\r\n var thisThisType = this.thisType;\r\n var targetThisType = target.thisType;\r\n if (thisThisType) {\r\n if (!(targetThisType && thisThisType.isAssignableTo(targetThisType))) return false;\r\n } else if (targetThisType) {\r\n return false;\r\n }\r\n\r\n // check rest parameter\r\n if (this.hasRest != target.hasRest) return false; // TODO\r\n\r\n // check parameter types\r\n var thisParameterTypes = this.parameterTypes;\r\n var targetParameterTypes = target.parameterTypes;\r\n var numParameters = thisParameterTypes.length;\r\n if (numParameters != targetParameterTypes.length) return false;\r\n for (let i = 0; i < numParameters; ++i) {\r\n let thisParameterType = thisParameterTypes[i];\r\n let targetParameterType = targetParameterTypes[i];\r\n if (!thisParameterType.isAssignableTo(targetParameterType)) return false;\r\n }\r\n\r\n // check return type\r\n var thisReturnType = this.returnType;\r\n var targetReturnType = target.returnType;\r\n return thisReturnType == targetReturnType || thisReturnType.isAssignableTo(targetReturnType);\r\n }\r\n\r\n /** Converts a signature to a function type string. */\r\n static makeSignatureString(parameterTypes: Type[] | null, returnType: Type, thisType: Type | null = null): string {\r\n var sb = [];\r\n if (thisType) sb.push(thisType.toSignatureString());\r\n if (parameterTypes) {\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) sb.push(parameterTypes[i].toSignatureString());\r\n }\r\n sb.push(returnType.toSignatureString());\r\n return sb.join(\"\");\r\n }\r\n\r\n /** Converts this signature to a function type string. */\r\n toSignatureString(): string {\r\n return Signature.makeSignatureString(this.parameterTypes, this.returnType, this.thisType);\r\n }\r\n\r\n /** Converts this signature to a string. */\r\n toString(includeThis: bool = false): string {\r\n var sb = new Array();\r\n sb.push(\"(\");\r\n var index = 0;\r\n var thisType = this.thisType;\r\n if (thisType) {\r\n if (includeThis) {\r\n sb.push(\"this: \");\r\n sb.push(thisType.toString());\r\n index = 1;\r\n }\r\n }\r\n var parameters = this.parameterTypes;\r\n var numParameters = parameters.length;\r\n if (numParameters) {\r\n let names = this.parameterNames;\r\n let numNames = names ? names.length : 0;\r\n let optionalStart = this.requiredParameters;\r\n let restIndex = this.hasRest ? numParameters - 1 : -1;\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n if (index) sb.push(\", \");\r\n if (i == restIndex) sb.push(\"...\");\r\n if (i < numNames) sb.push((names)[i]);\r\n else sb.push(getDefaultParameterName(i));\r\n if (i >= optionalStart && i != restIndex) sb.push(\"?: \");\r\n else sb.push(\": \");\r\n sb.push(parameters[i].toString());\r\n }\r\n }\r\n sb.push(\") => \");\r\n sb.push(this.returnType.toString());\r\n return sb.join(\"\");\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n// Cached default parameter names used where names are unknown.\r\nvar cachedDefaultParameterNames: string[] | null = null;\r\n\r\n/** Gets the cached default parameter name for the specified index. */\r\nexport function getDefaultParameterName(index: i32): string {\r\n if (!cachedDefaultParameterNames) cachedDefaultParameterNames = [];\r\n for (let i = cachedDefaultParameterNames.length; i <= index; ++i) {\r\n cachedDefaultParameterNames.push(\"arg$\" + i.toString(10));\r\n }\r\n return cachedDefaultParameterNames[index - 1];\r\n}\r\n","/**\r\n * A TypeScript tokenizer modified for AssemblyScript.\r\n *\r\n * Skips over trivia and provides a general mark/reset mechanism for the parser to utilize on\r\n * ambiguous tokens.\r\n *\r\n * @module tokenizer\r\n *//***/\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticMessage,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Source,\r\n CommentKind\r\n} from \"./ast\";\r\n\r\nimport {\r\n CharCode,\r\n isLineBreak,\r\n isWhiteSpace,\r\n isIdentifierStart,\r\n isIdentifierPart,\r\n isDecimalDigit,\r\n isOctalDigit,\r\n isKeywordCharacter\r\n} from \"./util\";\r\n\r\n/** Named token types. */\r\nexport enum Token {\r\n\r\n // keywords\r\n // discarded: ANY, BOOLEAN, NEVER, NUMBER, STRING, SYMBOL, UNDEFINED, LESSTHAN_SLASH\r\n\r\n ABSTRACT,\r\n AS,\r\n ASYNC,\r\n AWAIT, // ES2017\r\n BREAK, // ES2017\r\n CASE, // ES2017\r\n CATCH, // ES2017\r\n CLASS, // ES2017\r\n CONST, // ES2017\r\n CONTINUE, // ES2017\r\n CONSTRUCTOR,\r\n DEBUGGER, // ES2017\r\n DECLARE,\r\n DEFAULT, // ES2017\r\n DELETE, // ES2017\r\n DO, // ES2017\r\n ELSE, // ES2017\r\n ENUM, // ES2017 future\r\n EXPORT, // ES2017\r\n EXTENDS, // ES2017\r\n FALSE, // ES\r\n FINALLY, // ES2017\r\n FOR, // ES2017\r\n FROM, // AS possible identifier\r\n FUNCTION, // ES2017\r\n GET,\r\n IF, // ES2017\r\n IMPLEMENTS, // ES2017 non-lexical\r\n IMPORT, // ES2017\r\n IN, // ES2017\r\n INSTANCEOF, // ES2017\r\n INTERFACE, // ES2017 non-lexical\r\n IS,\r\n KEYOF,\r\n LET, // ES2017 non-lexical\r\n MODULE, // AS possible identifier\r\n NAMESPACE, // AS possible identifier\r\n NEW, // ES2017\r\n NULL, // ES\r\n OF,\r\n PACKAGE, // ES2017 non-lexical\r\n PRIVATE, // ES2017 non-lexical\r\n PROTECTED, // ES2017 non-lexical\r\n PUBLIC, // ES2017 non-lexical\r\n READONLY,\r\n RETURN, // ES2017\r\n SET,\r\n STATIC, // ES2017 non-lexical\r\n SUPER, // ES2017\r\n SWITCH, // ES2017\r\n THIS, // ES2017\r\n THROW, // ES2017\r\n TRUE, // ES\r\n TRY, // ES2017\r\n TYPE, // AS possible identifier\r\n TYPEOF, // ES2017\r\n VAR, // ES2017\r\n VOID, // ES2017\r\n WHILE, // ES2017\r\n WITH, // ES2017\r\n YIELD, // ES2017\r\n\r\n // punctuation\r\n\r\n OPENBRACE,\r\n CLOSEBRACE,\r\n OPENPAREN,\r\n CLOSEPAREN,\r\n OPENBRACKET,\r\n CLOSEBRACKET,\r\n DOT,\r\n DOT_DOT_DOT,\r\n SEMICOLON,\r\n COMMA,\r\n LESSTHAN,\r\n GREATERTHAN,\r\n LESSTHAN_EQUALS,\r\n GREATERTHAN_EQUALS,\r\n EQUALS_EQUALS,\r\n EXCLAMATION_EQUALS,\r\n EQUALS_EQUALS_EQUALS,\r\n EXCLAMATION_EQUALS_EQUALS,\r\n EQUALS_GREATERTHAN,\r\n PLUS,\r\n MINUS,\r\n ASTERISK_ASTERISK,\r\n ASTERISK,\r\n SLASH,\r\n PERCENT,\r\n PLUS_PLUS,\r\n MINUS_MINUS,\r\n LESSTHAN_LESSTHAN,\r\n GREATERTHAN_GREATERTHAN,\r\n GREATERTHAN_GREATERTHAN_GREATERTHAN,\r\n AMPERSAND,\r\n BAR,\r\n CARET,\r\n EXCLAMATION,\r\n TILDE,\r\n AMPERSAND_AMPERSAND,\r\n BAR_BAR,\r\n QUESTION,\r\n COLON,\r\n EQUALS,\r\n PLUS_EQUALS,\r\n MINUS_EQUALS,\r\n ASTERISK_EQUALS,\r\n ASTERISK_ASTERISK_EQUALS,\r\n SLASH_EQUALS,\r\n PERCENT_EQUALS,\r\n LESSTHAN_LESSTHAN_EQUALS,\r\n GREATERTHAN_GREATERTHAN_EQUALS,\r\n GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS,\r\n AMPERSAND_EQUALS,\r\n BAR_EQUALS,\r\n CARET_EQUALS,\r\n AT,\r\n\r\n // literals\r\n\r\n IDENTIFIER,\r\n STRINGLITERAL,\r\n INTEGERLITERAL,\r\n FLOATLITERAL,\r\n\r\n // meta\r\n\r\n INVALID,\r\n ENDOFFILE\r\n}\r\n\r\nexport enum IdentifierHandling {\r\n DEFAULT,\r\n PREFER,\r\n ALWAYS\r\n}\r\n\r\nexport function tokenFromKeyword(text: string): Token {\r\n assert(text.length);\r\n switch (text.charCodeAt(0)) {\r\n case CharCode.a: {\r\n switch (text) {\r\n case \"abstract\": return Token.ABSTRACT;\r\n case \"as\": return Token.AS;\r\n case \"async\": return Token.ASYNC;\r\n case \"await\": return Token.AWAIT;\r\n }\r\n break;\r\n }\r\n case CharCode.b: {\r\n switch (text) {\r\n case \"break\": return Token.BREAK;\r\n }\r\n break;\r\n }\r\n case CharCode.c: {\r\n switch (text) {\r\n case \"case\": return Token.CASE;\r\n case \"catch\": return Token.CATCH;\r\n case \"class\": return Token.CLASS;\r\n case \"continue\": return Token.CONTINUE;\r\n case \"const\": return Token.CONST;\r\n case \"constructor\": return Token.CONSTRUCTOR;\r\n }\r\n break;\r\n }\r\n case CharCode.d: {\r\n switch (text) {\r\n case \"debugger\": return Token.DEBUGGER;\r\n case \"declare\": return Token.DECLARE;\r\n case \"default\": return Token.DEFAULT;\r\n case \"delete\": return Token.DELETE;\r\n case \"do\": return Token.DO;\r\n }\r\n break;\r\n }\r\n case CharCode.e: {\r\n switch (text) {\r\n case \"else\": return Token.ELSE;\r\n case \"enum\": return Token.ENUM;\r\n case \"export\": return Token.EXPORT;\r\n case \"extends\": return Token.EXTENDS;\r\n }\r\n break;\r\n }\r\n case CharCode.f: {\r\n switch (text) {\r\n case \"false\": return Token.FALSE;\r\n case \"finally\": return Token.FINALLY;\r\n case \"for\": return Token.FOR;\r\n case \"from\": return Token.FROM;\r\n case \"function\": return Token.FUNCTION;\r\n }\r\n break;\r\n }\r\n case CharCode.g: {\r\n switch (text) {\r\n case \"get\": return Token.GET;\r\n }\r\n break;\r\n }\r\n case CharCode.i: {\r\n switch (text) {\r\n case \"if\": return Token.IF;\r\n case \"implements\": return Token.IMPLEMENTS;\r\n case \"import\": return Token.IMPORT;\r\n case \"in\": return Token.IN;\r\n case \"instanceof\": return Token.INSTANCEOF;\r\n case \"interface\": return Token.INTERFACE;\r\n case \"is\": return Token.IS;\r\n }\r\n break;\r\n }\r\n case CharCode.k: {\r\n switch (text) {\r\n case \"keyof\": return Token.KEYOF;\r\n }\r\n break;\r\n }\r\n case CharCode.l: {\r\n switch (text) {\r\n case \"let\": return Token.LET;\r\n }\r\n break;\r\n }\r\n case CharCode.m: {\r\n switch (text) {\r\n case \"module\": return Token.MODULE;\r\n }\r\n break;\r\n }\r\n case CharCode.n: {\r\n switch (text) {\r\n case \"namespace\": return Token.NAMESPACE;\r\n case \"new\": return Token.NEW;\r\n case \"null\": return Token.NULL;\r\n }\r\n break;\r\n }\r\n case CharCode.o: {\r\n switch (text) {\r\n case \"of\": return Token.OF;\r\n }\r\n break;\r\n }\r\n case CharCode.p: {\r\n switch (text) {\r\n case \"package\": return Token.PACKAGE;\r\n case \"private\": return Token.PRIVATE;\r\n case \"protected\": return Token.PROTECTED;\r\n case \"public\": return Token.PUBLIC;\r\n }\r\n break;\r\n }\r\n case CharCode.r: {\r\n switch (text) {\r\n case \"readonly\": return Token.READONLY;\r\n case \"return\": return Token.RETURN;\r\n }\r\n break;\r\n }\r\n case CharCode.s: {\r\n switch (text) {\r\n case \"set\": return Token.SET;\r\n case \"static\": return Token.STATIC;\r\n case \"super\": return Token.SUPER;\r\n case \"switch\": return Token.SWITCH;\r\n }\r\n break;\r\n }\r\n case CharCode.t: {\r\n switch (text) {\r\n case \"this\": return Token.THIS;\r\n case \"throw\": return Token.THROW;\r\n case \"true\": return Token.TRUE;\r\n case \"try\": return Token.TRY;\r\n case \"type\": return Token.TYPE;\r\n case \"typeof\": return Token.TYPEOF;\r\n }\r\n break;\r\n }\r\n case CharCode.v: {\r\n switch (text) {\r\n case \"var\": return Token.VAR;\r\n case \"void\": return Token.VOID;\r\n }\r\n break;\r\n }\r\n case CharCode.w: {\r\n switch (text) {\r\n case \"while\": return Token.WHILE;\r\n case \"with\": return Token.WITH;\r\n }\r\n break;\r\n }\r\n case CharCode.y: {\r\n switch (text) {\r\n case \"yield\": return Token.YIELD;\r\n }\r\n break;\r\n }\r\n }\r\n return Token.INVALID;\r\n}\r\n\r\nexport function tokenIsAlsoIdentifier(token: Token): bool {\r\n switch (token) {\r\n case Token.ABSTRACT:\r\n case Token.AS:\r\n case Token.CONSTRUCTOR:\r\n case Token.DECLARE:\r\n case Token.DELETE:\r\n case Token.FROM:\r\n case Token.FOR:\r\n case Token.GET:\r\n case Token.IS:\r\n case Token.KEYOF:\r\n case Token.MODULE:\r\n case Token.NAMESPACE:\r\n case Token.READONLY:\r\n case Token.SET:\r\n case Token.TYPE: return true;\r\n default: return false;\r\n }\r\n}\r\n\r\nexport function operatorTokenToString(token: Token): string {\r\n switch (token) {\r\n case Token.DELETE: return \"delete\";\r\n case Token.IN: return \"in\";\r\n case Token.INSTANCEOF: return \"instanceof\";\r\n case Token.NEW: return \"new\";\r\n case Token.TYPEOF: return \"typeof\";\r\n case Token.VOID: return \"void\";\r\n case Token.YIELD: return \"yield\";\r\n case Token.DOT_DOT_DOT: return \"...\";\r\n case Token.COMMA: return \",\";\r\n case Token.LESSTHAN: return \"<\";\r\n case Token.GREATERTHAN: return \">\";\r\n case Token.LESSTHAN_EQUALS: return \"<=\";\r\n case Token.GREATERTHAN_EQUALS: return \">=\";\r\n case Token.EQUALS_EQUALS: return \"==\";\r\n case Token.EXCLAMATION_EQUALS: return \"!=\";\r\n case Token.EQUALS_EQUALS_EQUALS: return \"===\";\r\n case Token.EXCLAMATION_EQUALS_EQUALS: return \"!==\";\r\n case Token.PLUS: return \"+\";\r\n case Token.MINUS: return \"-\";\r\n case Token.ASTERISK_ASTERISK: return \"**\";\r\n case Token.ASTERISK: return \"*\";\r\n case Token.SLASH: return \"/\";\r\n case Token.PERCENT: return \"%\";\r\n case Token.PLUS_PLUS: return \"++\";\r\n case Token.MINUS_MINUS: return \"--\";\r\n case Token.LESSTHAN_LESSTHAN: return \"<<\";\r\n case Token.GREATERTHAN_GREATERTHAN: return \">>\";\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: return \">>>\";\r\n case Token.AMPERSAND: return \"&\";\r\n case Token.BAR: return \"|\";\r\n case Token.CARET: return \"^\";\r\n case Token.EXCLAMATION: return \"!\";\r\n case Token.TILDE: return \"~\";\r\n case Token.AMPERSAND_AMPERSAND: return \"&&\";\r\n case Token.BAR_BAR: return \"||\";\r\n case Token.EQUALS: return \"=\";\r\n case Token.PLUS_EQUALS: return \"+=\";\r\n case Token.MINUS_EQUALS: return \"-=\";\r\n case Token.ASTERISK_EQUALS: return \"*=\";\r\n case Token.ASTERISK_ASTERISK_EQUALS: return \"**=\";\r\n case Token.SLASH_EQUALS: return \"/=\";\r\n case Token.PERCENT_EQUALS: return \"%=\";\r\n case Token.LESSTHAN_LESSTHAN_EQUALS: return \"<<=\";\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS: return \">>=\";\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS: return \">>>=\";\r\n case Token.AMPERSAND_EQUALS: return \"&=\";\r\n case Token.BAR_EQUALS: return \"|=\";\r\n case Token.CARET_EQUALS: return \"^=\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n}\r\n\r\nexport class Range {\r\n\r\n source: Source;\r\n start: i32;\r\n end: i32;\r\n\r\n // TODO: set these while tokenizing\r\n // line: i32;\r\n // column: i32;\r\n\r\n constructor(source: Source, start: i32, end: i32) {\r\n this.source = source;\r\n this.start = start;\r\n this.end = end;\r\n }\r\n\r\n static join(a: Range, b: Range): Range {\r\n if (a.source != b.source) throw new Error(\"source mismatch\");\r\n return new Range(a.source,\r\n a.start < b.start ? a.start : b.start,\r\n a.end > b.end ? a.end : b.end\r\n );\r\n }\r\n\r\n get atStart(): Range {\r\n return new Range(this.source, this.start, this.start);\r\n }\r\n get atEnd(): Range {\r\n return new Range(this.source, this.end, this.end);\r\n }\r\n\r\n get line(): i32 {\r\n var text = this.source.text;\r\n var line = 1;\r\n for (let pos = this.start; pos >= 0; --pos) {\r\n if (text.charCodeAt(pos) == CharCode.LINEFEED) line++;\r\n }\r\n return line;\r\n }\r\n\r\n get column(): i32 {\r\n var text = this.source.text;\r\n var column = 0;\r\n for (let pos = this.start - 1; pos >= 0; --pos) {\r\n if (text.charCodeAt(pos) == CharCode.LINEFEED) break;\r\n ++column;\r\n }\r\n return column;\r\n }\r\n\r\n toString(): string {\r\n return this.source.text.substring(this.start, this.end);\r\n }\r\n\r\n debugInfoRef: usize = 0;\r\n}\r\n\r\ndeclare function parseFloat(str: string): f64;\r\n\r\n/** Handler for intercepting comments while tokenizing. */\r\nexport type CommentHandler = (kind: CommentKind, text: string, range: Range) => void;\r\n\r\n/** Tokenizes a source to individual {@link Token}s. */\r\nexport class Tokenizer extends DiagnosticEmitter {\r\n\r\n source: Source;\r\n end: i32 = 0;\r\n\r\n pos: i32 = 0;\r\n token: Token = -1;\r\n tokenPos: i32 = 0;\r\n\r\n nextToken: Token = -1;\r\n nextTokenPos: i32 = 0;\r\n nextTokenOnNewLine: bool = false;\r\n\r\n onComment: CommentHandler | null = null;\r\n\r\n /** Constructs a new tokenizer. */\r\n constructor(source: Source, diagnostics: DiagnosticMessage[] | null = null) {\r\n super(diagnostics);\r\n this.source = source;\r\n this.pos = 0;\r\n this.end = source.text.length;\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n\r\n var text = source.text;\r\n\r\n // skip bom\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.BYTEORDERMARK\r\n ) {\r\n ++this.pos;\r\n }\r\n\r\n // skip shebang\r\n if (\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.HASH &&\r\n text.charCodeAt(this.pos + 1) == CharCode.EXCLAMATION\r\n ) {\r\n this.pos += 2;\r\n while (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) != CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n // 'next' now starts at lf or eof\r\n }\r\n }\r\n\r\n next(identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT): Token {\r\n this.nextToken = -1;\r\n return this.token = this.unsafeNext(identifierHandling);\r\n }\r\n\r\n private unsafeNext(\r\n identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT,\r\n maxTokenLength: i32 = i32.MAX_VALUE\r\n ): Token {\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n this.tokenPos = this.pos;\r\n let c = text.charCodeAt(this.pos);\r\n switch (c) {\r\n case CharCode.CARRIAGERETURN: {\r\n if (\r\n ++this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n break;\r\n }\r\n case CharCode.LINEFEED:\r\n case CharCode.TAB:\r\n case CharCode.VERTICALTAB:\r\n case CharCode.FORMFEED:\r\n case CharCode.SPACE: {\r\n ++this.pos;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.EXCLAMATION_EQUALS_EQUALS;\r\n }\r\n return Token.EXCLAMATION_EQUALS;\r\n }\r\n return Token.EXCLAMATION;\r\n }\r\n case CharCode.DOUBLEQUOTE:\r\n case CharCode.SINGLEQUOTE:\r\n case CharCode.BACKTICK: { // TODO\r\n return Token.STRINGLITERAL; // expects a call to readString\r\n }\r\n case CharCode.PERCENT: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.PERCENT_EQUALS;\r\n }\r\n return Token.PERCENT;\r\n }\r\n case CharCode.AMPERSAND: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.AMPERSAND) {\r\n ++this.pos;\r\n return Token.AMPERSAND_AMPERSAND;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.AMPERSAND_EQUALS;\r\n }\r\n }\r\n return Token.AMPERSAND;\r\n }\r\n case CharCode.OPENPAREN: {\r\n ++this.pos;\r\n return Token.OPENPAREN;\r\n }\r\n case CharCode.CLOSEPAREN: {\r\n ++this.pos;\r\n return Token.CLOSEPAREN;\r\n }\r\n case CharCode.ASTERISK: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.ASTERISK_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.ASTERISK_ASTERISK_EQUALS;\r\n }\r\n return Token.ASTERISK_ASTERISK;\r\n }\r\n }\r\n return Token.ASTERISK;\r\n }\r\n case CharCode.PLUS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.PLUS) {\r\n ++this.pos;\r\n return Token.PLUS_PLUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.PLUS_EQUALS;\r\n }\r\n }\r\n return Token.PLUS;\r\n }\r\n case CharCode.COMMA: {\r\n ++this.pos;\r\n return Token.COMMA;\r\n }\r\n case CharCode.MINUS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.MINUS) {\r\n ++this.pos;\r\n return Token.MINUS_MINUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.MINUS_EQUALS;\r\n }\r\n }\r\n return Token.MINUS;\r\n }\r\n case CharCode.DOT: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (isDecimalDigit(text.charCodeAt(this.pos))) {\r\n --this.pos;\r\n return Token.FLOATLITERAL; // expects a call to readFloat\r\n }\r\n if (\r\n maxTokenLength > 2 && this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.DOT &&\r\n text.charCodeAt(this.pos + 1) == CharCode.DOT\r\n ) {\r\n this.pos += 2;\r\n return Token.DOT_DOT_DOT;\r\n }\r\n }\r\n return Token.DOT;\r\n }\r\n case CharCode.SLASH: {\r\n let commentStartPos = this.pos;\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.SLASH) { // single-line\r\n let commentKind = CommentKind.LINE;\r\n if (\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n ) {\r\n ++this.pos;\r\n commentKind = CommentKind.TRIPLE;\r\n }\r\n while (++this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.LINEFEED) {\r\n ++this.pos;\r\n break;\r\n }\r\n }\r\n if (this.onComment) {\r\n this.onComment(\r\n commentKind,\r\n text.substring(commentStartPos, this.pos),\r\n this.range(commentStartPos, this.pos)\r\n );\r\n }\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) { // multi-line\r\n let closed = false;\r\n while (++this.pos < this.end) {\r\n c = text.charCodeAt(this.pos);\r\n if (\r\n c == CharCode.ASTERISK &&\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n ) {\r\n this.pos += 2;\r\n closed = true;\r\n break;\r\n }\r\n }\r\n if (!closed) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n this.range(this.pos), \"*/\"\r\n );\r\n } else if (this.onComment) {\r\n this.onComment(\r\n CommentKind.BLOCK,\r\n text.substring(commentStartPos, this.pos),\r\n this.range(commentStartPos, this.pos)\r\n );\r\n }\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.SLASH_EQUALS;\r\n }\r\n }\r\n return Token.SLASH;\r\n }\r\n case CharCode._0:\r\n case CharCode._1:\r\n case CharCode._2:\r\n case CharCode._3:\r\n case CharCode._4:\r\n case CharCode._5:\r\n case CharCode._6:\r\n case CharCode._7:\r\n case CharCode._8:\r\n case CharCode._9: {\r\n return this.testInteger()\r\n ? Token.INTEGERLITERAL // expects a call to readInteger\r\n : Token.FLOATLITERAL; // expects a call to readFloat\r\n }\r\n case CharCode.COLON: {\r\n ++this.pos;\r\n return Token.COLON;\r\n }\r\n case CharCode.SEMICOLON: {\r\n ++this.pos;\r\n return Token.SEMICOLON;\r\n }\r\n case CharCode.LESSTHAN: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.LESSTHAN) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 &&\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.LESSTHAN_LESSTHAN_EQUALS;\r\n }\r\n return Token.LESSTHAN_LESSTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.LESSTHAN_EQUALS;\r\n }\r\n }\r\n return Token.LESSTHAN;\r\n }\r\n case CharCode.EQUALS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 &&\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.EQUALS_EQUALS_EQUALS;\r\n }\r\n return Token.EQUALS_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n return Token.EQUALS_GREATERTHAN;\r\n }\r\n }\r\n return Token.EQUALS;\r\n }\r\n case CharCode.GREATERTHAN: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n if (maxTokenLength > 2 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.GREATERTHAN) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 3 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS;\r\n }\r\n return Token.GREATERTHAN_GREATERTHAN_GREATERTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_GREATERTHAN_EQUALS;\r\n }\r\n }\r\n return Token.GREATERTHAN_GREATERTHAN;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.GREATERTHAN_EQUALS;\r\n }\r\n }\r\n return Token.GREATERTHAN;\r\n }\r\n case CharCode.QUESTION: {\r\n ++this.pos;\r\n return Token.QUESTION;\r\n }\r\n case CharCode.OPENBRACKET: {\r\n ++this.pos;\r\n return Token.OPENBRACKET;\r\n }\r\n case CharCode.CLOSEBRACKET: {\r\n ++this.pos;\r\n return Token.CLOSEBRACKET;\r\n }\r\n case CharCode.CARET: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.CARET_EQUALS;\r\n }\r\n return Token.CARET;\r\n }\r\n case CharCode.OPENBRACE: {\r\n ++this.pos;\r\n return Token.OPENBRACE;\r\n }\r\n case CharCode.BAR: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.BAR) {\r\n ++this.pos;\r\n return Token.BAR_BAR;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.BAR_EQUALS;\r\n }\r\n }\r\n return Token.BAR;\r\n }\r\n case CharCode.CLOSEBRACE: {\r\n ++this.pos;\r\n return Token.CLOSEBRACE;\r\n }\r\n case CharCode.TILDE: {\r\n ++this.pos;\r\n return Token.TILDE;\r\n }\r\n case CharCode.AT: {\r\n ++this.pos;\r\n return Token.AT;\r\n }\r\n default: {\r\n if (isIdentifierStart(c)) {\r\n if (isKeywordCharacter(c)) {\r\n let posBefore = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(c = text.charCodeAt(this.pos))\r\n ) {\r\n if (!isKeywordCharacter(c)) {\r\n this.pos = posBefore;\r\n return Token.IDENTIFIER;\r\n }\r\n }\r\n let keywordText = text.substring(posBefore, this.pos);\r\n let keywordToken = tokenFromKeyword(keywordText);\r\n if (\r\n keywordToken != Token.INVALID &&\r\n identifierHandling !== IdentifierHandling.ALWAYS &&\r\n !(\r\n identifierHandling === IdentifierHandling.PREFER &&\r\n tokenIsAlsoIdentifier(keywordToken)\r\n )\r\n ) {\r\n return keywordToken;\r\n }\r\n this.pos = posBefore;\r\n }\r\n return Token.IDENTIFIER; // expects a call to readIdentifier\r\n } else if (isWhiteSpace(c)) {\r\n ++this.pos;\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Invalid_character,\r\n this.range(this.pos, this.pos + 1)\r\n );\r\n ++this.pos;\r\n return Token.INVALID;\r\n }\r\n }\r\n }\r\n return Token.ENDOFFILE;\r\n }\r\n\r\n peek(\r\n checkOnNewLine: bool = false,\r\n identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT,\r\n maxCompoundLength: i32 = i32.MAX_VALUE\r\n ): Token {\r\n var text = this.source.text;\r\n if (this.nextToken < 0) {\r\n let posBefore = this.pos;\r\n let tokenBefore = this.token;\r\n let tokenPosBefore = this.tokenPos;\r\n this.nextToken = this.unsafeNext(identifierHandling, maxCompoundLength);\r\n this.nextTokenPos = this.tokenPos;\r\n if (checkOnNewLine) {\r\n this.nextTokenOnNewLine = false;\r\n while (--this.tokenPos > posBefore) {\r\n if (isLineBreak(text.charCodeAt(this.tokenPos))) {\r\n this.nextTokenOnNewLine = true;\r\n break;\r\n }\r\n }\r\n }\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n }\r\n return this.nextToken;\r\n }\r\n\r\n skipIdentifier(): bool {\r\n return this.skip(Token.IDENTIFIER, IdentifierHandling.PREFER);\r\n }\r\n\r\n skipIdentifierName(): bool {\r\n return this.skip(Token.IDENTIFIER, IdentifierHandling.ALWAYS);\r\n }\r\n\r\n skip(token: Token, identifierHandling: IdentifierHandling = IdentifierHandling.DEFAULT): bool {\r\n var posBefore = this.pos;\r\n var tokenBefore = this.token;\r\n var tokenPosBefore = this.tokenPos;\r\n var maxCompoundLength = i32.MAX_VALUE;\r\n switch (token) {\r\n case Token.GREATERTHAN: { // where parsing type arguments\r\n maxCompoundLength = 1;\r\n break;\r\n }\r\n }\r\n this.token = this.unsafeNext(identifierHandling, maxCompoundLength);\r\n if (this.token == token) {\r\n this.nextToken = -1;\r\n return true;\r\n } else {\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n return false;\r\n }\r\n }\r\n\r\n mark(): State {\r\n var state: State;\r\n if (reusableState) {\r\n state = reusableState;\r\n reusableState = null;\r\n } else {\r\n state = new State();\r\n }\r\n state.pos = this.pos;\r\n state.token = this.token;\r\n state.tokenPos = this.tokenPos;\r\n return state;\r\n }\r\n\r\n discard(state: State): void {\r\n reusableState = state;\r\n }\r\n\r\n reset(state: State): void {\r\n this.pos = state.pos;\r\n this.token = state.token;\r\n this.tokenPos = state.tokenPos;\r\n this.nextToken = -1;\r\n }\r\n\r\n range(start: i32 = -1, end: i32 = -1): Range {\r\n if (start < 0) {\r\n start = this.tokenPos;\r\n end = this.pos;\r\n } else if (end < 0) {\r\n end = start;\r\n }\r\n return new Range(this.source, start, end);\r\n }\r\n\r\n readIdentifier(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(text.charCodeAt(this.pos))\r\n );\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readString(): string {\r\n var text = this.source.text;\r\n var quote = text.charCodeAt(this.pos++);\r\n var start = this.pos;\r\n var result = \"\";\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.end)\r\n );\r\n break;\r\n }\r\n let c = text.charCodeAt(this.pos);\r\n if (c == quote) {\r\n result += text.substring(start, this.pos++);\r\n break;\r\n }\r\n if (c == CharCode.BACKSLASH) {\r\n result += text.substring(start, this.pos);\r\n result += this.readEscapeSequence();\r\n start = this.pos;\r\n continue;\r\n }\r\n if (isLineBreak(c)) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n return result;\r\n }\r\n\r\n readEscapeSequence(): string {\r\n if (++this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.end)\r\n );\r\n return \"\";\r\n }\r\n\r\n var text = this.source.text;\r\n var c = text.charCodeAt(this.pos++);\r\n switch (c) {\r\n case CharCode._0: return \"\\0\";\r\n case CharCode.b: return \"\\b\";\r\n case CharCode.t: return \"\\t\";\r\n case CharCode.n: return \"\\n\";\r\n case CharCode.v: return \"\\v\";\r\n case CharCode.f: return \"\\f\";\r\n case CharCode.r: return \"\\r\";\r\n case CharCode.SINGLEQUOTE: return \"'\";\r\n case CharCode.DOUBLEQUOTE: return \"\\\"\";\r\n case CharCode.u: {\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.OPENBRACE\r\n ) {\r\n ++this.pos;\r\n return this.readExtendedUnicodeEscape(); // \\u{DDDDDDDD}\r\n }\r\n return this.readUnicodeEscape(); // \\uDDDD\r\n }\r\n case CharCode.CARRIAGERETURN: {\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n // fall through\r\n }\r\n case CharCode.LINEFEED:\r\n case CharCode.LINESEPARATOR:\r\n case CharCode.PARAGRAPHSEPARATOR: return \"\";\r\n default: return String.fromCharCode(c);\r\n }\r\n }\r\n\r\n readRegexpPattern(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var escaped = false;\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.end)\r\n );\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.BACKSLASH) {\r\n ++this.pos;\r\n escaped = true;\r\n continue;\r\n }\r\n let c = text.charCodeAt(this.pos);\r\n if (c == CharCode.SLASH && !escaped) break;\r\n if (isLineBreak(c)) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n escaped = false;\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readRegexpFlags(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var flags = 0;\r\n while (this.pos < this.end) {\r\n let c: i32 = text.charCodeAt(this.pos);\r\n if (!isIdentifierPart(c)) break;\r\n ++this.pos;\r\n\r\n // make sure each supported flag is unique\r\n switch (c) {\r\n case CharCode.g: {\r\n flags |= flags & 1 ? -1 : 1;\r\n break;\r\n }\r\n case CharCode.i: {\r\n flags |= flags & 2 ? -1 : 2;\r\n break;\r\n }\r\n case CharCode.m: {\r\n flags |= flags & 4 ? -1 : 4;\r\n break;\r\n }\r\n default: {\r\n flags = -1;\r\n break;\r\n }\r\n }\r\n }\r\n if (flags == -1) {\r\n this.error(\r\n DiagnosticCode.Invalid_regular_expression_flags,\r\n this.range(start, this.pos)\r\n );\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n testInteger(): bool {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 1 < this.end) {\r\n switch (text.charCodeAt(this.pos + 2)) {\r\n case CharCode.X:\r\n case CharCode.x:\r\n case CharCode.B:\r\n case CharCode.b:\r\n case CharCode.O:\r\n case CharCode.o: return true;\r\n }\r\n }\r\n var pos = this.pos;\r\n while (pos < this.end) {\r\n let c = text.charCodeAt(pos);\r\n if (c == CharCode.DOT || c == CharCode.E || c == CharCode.e) {\r\n return false;\r\n }\r\n if ((c < CharCode._0 || c > CharCode._9) && c != CharCode._) break;\r\n // does not validate separator placement (this is done in readXYInteger)\r\n pos++;\r\n }\r\n return true;\r\n }\r\n\r\n readInteger(): I64 {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 2 < this.end) {\r\n switch (text.charCodeAt(this.pos + 1)) {\r\n case CharCode.X:\r\n case CharCode.x: {\r\n this.pos += 2;\r\n return this.readHexInteger();\r\n }\r\n case CharCode.B:\r\n case CharCode.b: {\r\n this.pos += 2;\r\n return this.readBinaryInteger();\r\n }\r\n case CharCode.O:\r\n case CharCode.o: {\r\n this.pos += 2;\r\n return this.readOctalInteger();\r\n }\r\n }\r\n if (isOctalDigit(text.charCodeAt(this.pos + 1))) {\r\n let start = this.pos;\r\n ++this.pos;\r\n let value = this.readOctalInteger();\r\n this.error(\r\n DiagnosticCode.Octal_literals_are_not_allowed_in_strict_mode,\r\n this.range(start, this.pos)\r\n );\r\n return value;\r\n }\r\n }\r\n return this.readDecimalInteger();\r\n }\r\n\r\n readHexInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_16 = i64_new(16, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 16 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n // value = value * 16 + 10 + c - CharCode.A;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.A, 0)\r\n );\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n // value = value * 16 + 10 + c - CharCode.a;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.a, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readDecimalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_10 = i64_new(10, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 10 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_10),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readOctalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_8 = i64_new(8, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c >= CharCode._0 && c <= CharCode._7) {\r\n // value = value * 8 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_8),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Octal_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readBinaryInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_2 = i64_new(2, 0);\r\n var i64_1 = i64_new(1, 0);\r\n var sepEnd = start;\r\n while (this.pos < this.end) {\r\n let pos = this.pos;\r\n let c = text.charCodeAt(pos);\r\n if (c == CharCode._0) {\r\n // value = value * 2;\r\n value = i64_mul(\r\n value,\r\n i64_2\r\n );\r\n } else if (c == CharCode._1) {\r\n // value = value * 2 + 1;\r\n value = i64_add(\r\n i64_mul(value, i64_2),\r\n i64_1\r\n );\r\n } else if (c == CharCode._) {\r\n if (sepEnd == pos) {\r\n this.error(\r\n sepEnd == start\r\n ? DiagnosticCode.Numeric_separators_are_not_allowed_here\r\n : DiagnosticCode.Multiple_consecutive_numeric_separators_are_not_permitted,\r\n this.range(pos)\r\n );\r\n }\r\n sepEnd = pos + 1;\r\n } else {\r\n break;\r\n }\r\n this.pos = pos + 1;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Binary_digit_expected,\r\n this.range(start)\r\n );\r\n } else if (sepEnd == this.pos) {\r\n this.error(\r\n DiagnosticCode.Numeric_separators_are_not_allowed_here,\r\n this.range(sepEnd - 1)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readFloat(): f64 {\r\n // var text = this.source.text;\r\n // if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 2 < this.end) {\r\n // switch (text.charCodeAt(this.pos + 1)) {\r\n // case CharCode.X:\r\n // case CharCode.x: {\r\n // this.pos += 2;\r\n // return this.readHexFloat();\r\n // }\r\n // }\r\n // }\r\n return this.readDecimalFloat();\r\n }\r\n\r\n readDecimalFloat(): f64 {\r\n // TODO: numeric separators (parseFloat can't handle these)\r\n var start = this.pos;\r\n var text = this.source.text;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n if (this.pos < this.end && text.charCodeAt(this.pos) == CharCode.DOT) {\r\n ++this.pos;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n if (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos);\r\n if (c == CharCode.E || c == CharCode.e) {\r\n if (\r\n ++this.pos < this.end && (\r\n text.charCodeAt(this.pos) == CharCode.MINUS ||\r\n text.charCodeAt(this.pos) == CharCode.PLUS\r\n ) &&\r\n isDecimalDigit(text.charCodeAt(this.pos + 1))\r\n ) {\r\n ++this.pos;\r\n }\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n }\r\n return parseFloat(text.substring(start, this.pos));\r\n }\r\n\r\n readHexFloat(): f64 {\r\n throw new Error(\"not implemented\"); // TBD\r\n }\r\n\r\n readUnicodeEscape(): string {\r\n var remain = 4;\r\n var value = 0;\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos++);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n value = value * 16 + c - CharCode._0;\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n value = value * 16 + 10 + c - CharCode.A;\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n value = value * 16 + 10 + c - CharCode.a;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(this.pos - 1, this.pos)\r\n );\r\n return \"\";\r\n }\r\n if (--remain == 0) break;\r\n }\r\n if (remain) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.pos)\r\n );\r\n return \"\";\r\n }\r\n return String.fromCharCode(value);\r\n }\r\n\r\n private readExtendedUnicodeEscape(): string {\r\n var start = this.pos;\r\n var value = this.readHexInteger();\r\n var value32 = i64_low(value);\r\n var invalid = false;\r\n\r\n assert(!i64_high(value));\r\n if (value32 > 0x10FFFF) {\r\n this.error(\r\n DiagnosticCode.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n var text = this.source.text;\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(start, this.end)\r\n );\r\n invalid = true;\r\n } else if (text.charCodeAt(this.pos) == CharCode.CLOSEBRACE) {\r\n ++this.pos;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Unterminated_Unicode_escape_sequence,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n if (invalid) return \"\";\r\n return value32 < 65536\r\n ? String.fromCharCode(value32)\r\n : String.fromCharCode(\r\n (((value32 - 65536) / 1024 | 0) + 0xD800) as i32,\r\n ( (value32 - 65536) % 1024 + 0xDC00) as i32\r\n );\r\n }\r\n\r\n finish(): void {\r\n }\r\n}\r\n\r\n/** Tokenizer state as returned by {@link Tokenizer#mark} and consumed by {@link Tokenizer#reset}. */\r\nexport class State {\r\n /** Current position. */\r\n pos: i32;\r\n /** Current token. */\r\n token: Token;\r\n /** Current token's position. */\r\n tokenPos: i32;\r\n}\r\n\r\n// Reusable state object to reduce allocations\r\nvar reusableState: State | null = null;\r\n","/**\n * Generated from diagnosticsMessages.json. Do not edit.\n * @module diagnostics\n *//***/\n\n/* tslint:disable:max-line-length */\n\n/** Enum of available diagnostic codes. */\nexport enum DiagnosticCode {\n Operation_not_supported = 100,\n Operation_is_unsafe = 101,\n Conversion_from_type_0_to_1_requires_an_explicit_cast = 200,\n Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit = 201,\n Type_0_cannot_be_changed_to_type_1 = 202,\n Type_0_cannot_be_reinterpreted_as_type_1 = 203,\n Basic_type_0_cannot_be_nullable = 204,\n Cannot_export_a_mutable_global = 205,\n Compiling_constant_with_non_constant_initializer_as_mutable = 206,\n Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa = 207,\n Unmanaged_classes_cannot_implement_interfaces = 208,\n Invalid_regular_expression_flags = 209,\n Implementation_0_must_match_the_signature_1 = 210,\n Class_0_is_sealed_and_cannot_be_extended = 211,\n Decorator_0_is_not_valid_here = 212,\n Duplicate_decorator = 213,\n An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf = 214,\n Optional_parameter_must_have_an_initializer = 215,\n Unterminated_string_literal = 1002,\n Identifier_expected = 1003,\n _0_expected = 1005,\n A_file_cannot_have_a_reference_to_itself = 1006,\n Trailing_comma_not_allowed = 1009,\n Unexpected_token = 1012,\n A_rest_parameter_must_be_last_in_a_parameter_list = 1014,\n Parameter_cannot_have_question_mark_and_initializer = 1015,\n A_required_parameter_cannot_follow_an_optional_parameter = 1016,\n Enum_member_must_have_initializer = 1061,\n Statements_are_not_allowed_in_ambient_contexts = 1036,\n Initializers_are_not_allowed_in_ambient_contexts = 1039,\n _0_modifier_cannot_be_used_here = 1042,\n A_rest_parameter_cannot_be_optional = 1047,\n A_rest_parameter_cannot_have_an_initializer = 1048,\n A_set_accessor_must_have_exactly_one_parameter = 1049,\n A_set_accessor_parameter_cannot_have_an_initializer = 1052,\n A_get_accessor_cannot_have_parameters = 1054,\n Type_parameters_cannot_appear_on_a_constructor_declaration = 1092,\n Type_annotation_cannot_appear_on_a_constructor_declaration = 1093,\n An_accessor_cannot_have_type_parameters = 1094,\n A_set_accessor_cannot_have_a_return_type_annotation = 1095,\n Type_parameter_list_cannot_be_empty = 1098,\n A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement = 1104,\n A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement = 1105,\n A_return_statement_can_only_be_used_within_a_function_body = 1108,\n Expression_expected = 1109,\n Type_expected = 1110,\n A_default_clause_cannot_appear_more_than_once_in_a_switch_statement = 1113,\n Duplicate_label_0 = 1114,\n Octal_literals_are_not_allowed_in_strict_mode = 1121,\n Digit_expected = 1124,\n Hexadecimal_digit_expected = 1125,\n Unexpected_end_of_text = 1126,\n Invalid_character = 1127,\n _case_or_default_expected = 1130,\n A_declare_modifier_cannot_be_used_in_an_already_ambient_context = 1038,\n Type_argument_expected = 1140,\n String_literal_expected = 1141,\n Line_break_not_permitted_here = 1142,\n Declaration_expected = 1146,\n _const_declarations_must_be_initialized = 1155,\n Unterminated_regular_expression_literal = 1161,\n Interface_declaration_cannot_have_implements_clause = 1176,\n Binary_digit_expected = 1177,\n Octal_digit_expected = 1178,\n An_implementation_cannot_be_declared_in_ambient_contexts = 1183,\n An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive = 1198,\n Unterminated_Unicode_escape_sequence = 1199,\n Decorators_are_not_valid_here = 1206,\n _abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration = 1242,\n A_class_may_only_extend_another_class = 1311,\n A_parameter_property_cannot_be_declared_using_a_rest_parameter = 1317,\n Duplicate_identifier_0 = 2300,\n Cannot_find_name_0 = 2304,\n Module_0_has_no_exported_member_1 = 2305,\n Generic_type_0_requires_1_type_argument_s = 2314,\n Type_0_is_not_generic = 2315,\n Type_0_is_not_assignable_to_type_1 = 2322,\n Index_signature_is_missing_in_type_0 = 2329,\n _this_cannot_be_referenced_in_current_location = 2332,\n _super_can_only_be_referenced_in_a_derived_class = 2335,\n Property_0_does_not_exist_on_type_1 = 2339,\n Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures = 2349,\n Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature = 2351,\n A_function_whose_declared_type_is_not_void_must_return_a_value = 2355,\n The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access = 2357,\n The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access = 2364,\n Operator_0_cannot_be_applied_to_types_1_and_2 = 2365,\n _get_and_set_accessor_must_have_the_same_type = 2380,\n Constructor_implementation_is_missing = 2390,\n Function_implementation_is_missing_or_not_immediately_following_the_declaration = 2391,\n Multiple_constructor_implementations_are_not_allowed = 2392,\n Duplicate_function_implementation = 2393,\n Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local = 2395,\n Type_0_has_no_property_1 = 2460,\n The_0_operator_cannot_be_applied_to_type_1 = 2469,\n Export_declaration_conflicts_with_exported_declaration_of_0 = 2484,\n Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property = 2540,\n The_target_of_an_assignment_must_be_a_variable_or_a_property_access = 2541,\n Index_signature_in_type_0_only_permits_reading = 2542,\n Expected_0_arguments_but_got_1 = 2554,\n Expected_at_least_0_arguments_but_got_1 = 2555,\n Expected_0_type_arguments_but_got_1 = 2558,\n A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums = 2651,\n Namespace_0_has_no_exported_member_1 = 2694,\n File_0_not_found = 6054,\n Numeric_separators_are_not_allowed_here = 6188,\n Multiple_consecutive_numeric_separators_are_not_permitted = 6189\n}\n\n/** Translates a diagnostic code to its respective string. */\nexport function diagnosticCodeToString(code: DiagnosticCode): string {\n switch (code) {\n case 100: return \"Operation not supported.\";\n case 101: return \"Operation is unsafe.\";\n case 200: return \"Conversion from type '{0}' to '{1}' requires an explicit cast.\";\n case 201: return \"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.\";\n case 202: return \"Type '{0}' cannot be changed to type '{1}'.\";\n case 203: return \"Type '{0}' cannot be reinterpreted as type '{1}'.\";\n case 204: return \"Basic type '{0}' cannot be nullable.\";\n case 205: return \"Cannot export a mutable global.\";\n case 206: return \"Compiling constant with non-constant initializer as mutable.\";\n case 207: return \"Unmanaged classes cannot extend managed classes and vice-versa.\";\n case 208: return \"Unmanaged classes cannot implement interfaces.\";\n case 209: return \"Invalid regular expression flags.\";\n case 210: return \"Implementation '{0}' must match the signature '{1}'.\";\n case 211: return \"Class '{0}' is sealed and cannot be extended.\";\n case 212: return \"Decorator '{0}' is not valid here.\";\n case 213: return \"Duplicate decorator.\";\n case 214: return \"An allocator must be declared to allocate memory. Try importing allocator/arena or allocator/tlsf.\";\n case 215: return \"Optional parameter must have an initializer.\";\n case 1002: return \"Unterminated string literal.\";\n case 1003: return \"Identifier expected.\";\n case 1005: return \"'{0}' expected.\";\n case 1006: return \"A file cannot have a reference to itself.\";\n case 1009: return \"Trailing comma not allowed.\";\n case 1012: return \"Unexpected token.\";\n case 1014: return \"A rest parameter must be last in a parameter list.\";\n case 1015: return \"Parameter cannot have question mark and initializer.\";\n case 1016: return \"A required parameter cannot follow an optional parameter.\";\n case 1061: return \"Enum member must have initializer.\";\n case 1036: return \"Statements are not allowed in ambient contexts.\";\n case 1039: return \"Initializers are not allowed in ambient contexts.\";\n case 1042: return \"'{0}' modifier cannot be used here.\";\n case 1047: return \"A rest parameter cannot be optional.\";\n case 1048: return \"A rest parameter cannot have an initializer.\";\n case 1049: return \"A 'set' accessor must have exactly one parameter.\";\n case 1052: return \"A 'set' accessor parameter cannot have an initializer.\";\n case 1054: return \"A 'get' accessor cannot have parameters.\";\n case 1092: return \"Type parameters cannot appear on a constructor declaration.\";\n case 1093: return \"Type annotation cannot appear on a constructor declaration.\";\n case 1094: return \"An accessor cannot have type parameters.\";\n case 1095: return \"A 'set' accessor cannot have a return type annotation.\";\n case 1098: return \"Type parameter list cannot be empty.\";\n case 1104: return \"A 'continue' statement can only be used within an enclosing iteration statement.\";\n case 1105: return \"A 'break' statement can only be used within an enclosing iteration or switch statement.\";\n case 1108: return \"A 'return' statement can only be used within a function body.\";\n case 1109: return \"Expression expected.\";\n case 1110: return \"Type expected.\";\n case 1113: return \"A 'default' clause cannot appear more than once in a 'switch' statement.\";\n case 1114: return \"Duplicate label '{0}'.\";\n case 1121: return \"Octal literals are not allowed in strict mode.\";\n case 1124: return \"Digit expected.\";\n case 1125: return \"Hexadecimal digit expected.\";\n case 1126: return \"Unexpected end of text.\";\n case 1127: return \"Invalid character.\";\n case 1130: return \"'case' or 'default' expected.\";\n case 1038: return \"A 'declare' modifier cannot be used in an already ambient context.\";\n case 1140: return \"Type argument expected.\";\n case 1141: return \"String literal expected.\";\n case 1142: return \"Line break not permitted here.\";\n case 1146: return \"Declaration expected.\";\n case 1155: return \"'const' declarations must be initialized.\";\n case 1161: return \"Unterminated regular expression literal.\";\n case 1176: return \"Interface declaration cannot have 'implements' clause.\";\n case 1177: return \"Binary digit expected.\";\n case 1178: return \"Octal digit expected.\";\n case 1183: return \"An implementation cannot be declared in ambient contexts.\";\n case 1198: return \"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.\";\n case 1199: return \"Unterminated Unicode escape sequence.\";\n case 1206: return \"Decorators are not valid here.\";\n case 1242: return \"'abstract' modifier can only appear on a class, method, or property declaration.\";\n case 1311: return \"A class may only extend another class.\";\n case 1317: return \"A parameter property cannot be declared using a rest parameter.\";\n case 2300: return \"Duplicate identifier '{0}'.\";\n case 2304: return \"Cannot find name '{0}'.\";\n case 2305: return \"Module '{0}' has no exported member '{1}'.\";\n case 2314: return \"Generic type '{0}' requires {1} type argument(s).\";\n case 2315: return \"Type '{0}' is not generic.\";\n case 2322: return \"Type '{0}' is not assignable to type '{1}'.\";\n case 2329: return \"Index signature is missing in type '{0}'.\";\n case 2332: return \"'this' cannot be referenced in current location.\";\n case 2335: return \"'super' can only be referenced in a derived class.\";\n case 2339: return \"Property '{0}' does not exist on type '{1}'.\";\n case 2349: return \"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.\";\n case 2351: return \"Cannot use 'new' with an expression whose type lacks a construct signature.\";\n case 2355: return \"A function whose declared type is not 'void' must return a value.\";\n case 2357: return \"The operand of an increment or decrement operator must be a variable or a property access.\";\n case 2364: return \"The left-hand side of an assignment expression must be a variable or a property access.\";\n case 2365: return \"Operator '{0}' cannot be applied to types '{1}' and '{2}'.\";\n case 2380: return \"'get' and 'set' accessor must have the same type.\";\n case 2390: return \"Constructor implementation is missing.\";\n case 2391: return \"Function implementation is missing or not immediately following the declaration.\";\n case 2392: return \"Multiple constructor implementations are not allowed.\";\n case 2393: return \"Duplicate function implementation.\";\n case 2395: return \"Individual declarations in merged declaration '{0}' must be all exported or all local.\";\n case 2460: return \"Type '{0}' has no property '{1}'.\";\n case 2469: return \"The '{0}' operator cannot be applied to type '{1}'.\";\n case 2484: return \"Export declaration conflicts with exported declaration of '{0}'.\";\n case 2540: return \"Cannot assign to '{0}' because it is a constant or a read-only property.\";\n case 2541: return \"The target of an assignment must be a variable or a property access.\";\n case 2542: return \"Index signature in type '{0}' only permits reading.\";\n case 2554: return \"Expected {0} arguments, but got {1}.\";\n case 2555: return \"Expected at least {0} arguments, but got {1}.\";\n case 2558: return \"Expected {0} type arguments, but got {1}.\";\n case 2651: return \"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.\";\n case 2694: return \"Namespace '{0}' has no exported member '{1}'.\";\n case 6054: return \"File '{0}' not found.\";\n case 6188: return \"Numeric separators are not allowed here.\";\n case 6189: return \"Multiple consecutive numeric separators are not permitted.\";\n default: return \"\";\n }\n}\n","/**\r\n * The AssemblyScript compiler.\r\n * @module compiler\r\n *//***/\r\n\r\nimport {\r\n compileCall as compileBuiltinCall,\r\n compileAllocate as compileBuiltinAllocate,\r\n compileAbort as compileBuiltinAbort\r\n} from \"./builtins\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Module,\r\n MemorySegment,\r\n ExpressionRef,\r\n UnaryOp,\r\n BinaryOp,\r\n NativeType,\r\n FunctionRef,\r\n ExpressionId,\r\n FunctionTypeRef,\r\n GlobalRef,\r\n getExpressionId,\r\n getExpressionType,\r\n getConstValueI32,\r\n getConstValueI64Low,\r\n getConstValueI64High,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getFunctionBody,\r\n getGetLocalIndex\r\n} from \"./module\";\r\n\r\nimport {\r\n CommonFlags,\r\n PATH_DELIMITER,\r\n INNER_DELIMITER,\r\n INSTANCE_DELIMITER,\r\n STATIC_DELIMITER,\r\n GETTER_PREFIX,\r\n SETTER_PREFIX\r\n} from \"./common\";\r\n\r\nimport {\r\n Program,\r\n ClassPrototype,\r\n Class,\r\n Element,\r\n ElementKind,\r\n Enum,\r\n Field,\r\n FunctionPrototype,\r\n Function,\r\n FunctionTarget,\r\n Global,\r\n Local,\r\n Namespace,\r\n EnumValue,\r\n Property,\r\n VariableLikeElement,\r\n FlowFlags,\r\n ConstantValueKind,\r\n Flow,\r\n OperatorKind,\r\n DecoratorFlags\r\n} from \"./program\";\r\n\r\nimport {\r\n Token,\r\n operatorTokenToString\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n TypeNode,\r\n Source,\r\n Range,\r\n\r\n Statement,\r\n BlockStatement,\r\n BreakStatement,\r\n ClassDeclaration,\r\n ContinueStatement,\r\n DoStatement,\r\n EmptyStatement,\r\n EnumDeclaration,\r\n ExportStatement,\r\n ExpressionStatement,\r\n FunctionDeclaration,\r\n ForStatement,\r\n IfStatement,\r\n ImportStatement,\r\n InstanceOfExpression,\r\n InterfaceDeclaration,\r\n NamespaceDeclaration,\r\n ReturnStatement,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n VariableDeclaration,\r\n VariableStatement,\r\n VoidStatement,\r\n WhileStatement,\r\n\r\n Expression,\r\n AssertionExpression,\r\n BinaryExpression,\r\n CallExpression,\r\n CommaExpression,\r\n ElementAccessExpression,\r\n FloatLiteralExpression,\r\n FunctionExpression,\r\n IdentifierExpression,\r\n IntegerLiteralExpression,\r\n LiteralExpression,\r\n LiteralKind,\r\n NewExpression,\r\n ParenthesizedExpression,\r\n PropertyAccessExpression,\r\n TernaryExpression,\r\n ArrayLiteralExpression,\r\n StringLiteralExpression,\r\n UnaryPostfixExpression,\r\n UnaryPrefixExpression,\r\n FieldDeclaration,\r\n\r\n nodeIsConstantValue,\r\n isLastStatement\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags,\r\n Signature,\r\n\r\n typesToNativeTypes\r\n} from \"./types\";\r\n\r\nimport {\r\n writeI32,\r\n writeI64,\r\n writeF32,\r\n writeF64\r\n} from \"./util\";\r\n\r\n/** Compilation target. */\r\nexport enum Target {\r\n /** WebAssembly with 32-bit pointers. */\r\n WASM32,\r\n /** WebAssembly with 64-bit pointers. Experimental and not supported by any runtime yet. */\r\n WASM64\r\n}\r\n\r\n/** Compiler options. */\r\nexport class Options {\r\n\r\n /** WebAssembly target. Defaults to {@link Target.WASM32}. */\r\n target: Target = Target.WASM32;\r\n /** If true, compiles everything instead of just reachable code. */\r\n noTreeShaking: bool = false;\r\n /** If true, replaces assertions with nops. */\r\n noAssert: bool = false;\r\n /** If true, does not set up a memory. */\r\n noMemory: 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 /** Static memory start offset. */\r\n memoryBase: u32 = 0;\r\n /** If true, generates information necessary for source maps. */\r\n sourceMap: bool = false;\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 /** Tests if the target is WASM64 or, otherwise, WASM32. */\r\n get isWasm64(): bool {\r\n return this.target == Target.WASM64;\r\n }\r\n\r\n /** Gets the unsigned size type matching the target. */\r\n get usizeType(): Type {\r\n return this.target == Target.WASM64 ? Type.usize64 : Type.usize32;\r\n }\r\n\r\n /** Gets the signed size type matching the target. */\r\n get isizeType(): Type {\r\n return this.target == Target.WASM64 ? Type.isize64 : Type.isize32;\r\n }\r\n\r\n /** Gets the native size type matching the target. */\r\n get nativeSizeType(): NativeType {\r\n return this.target == Target.WASM64 ? NativeType.I64 : NativeType.I32;\r\n }\r\n\r\n /** Tests if a specific feature is activated. */\r\n hasFeature(feature: Feature): bool {\r\n return (this.features & feature) != 0;\r\n }\r\n}\r\n\r\n/** Indicates specific features to activate. */\r\nexport const enum Feature {\r\n /** No additional features. */\r\n NONE = 0,\r\n /** Sign extension operations. */\r\n SIGN_EXTENSION = 1 << 0, // see: https://github.com/WebAssembly/sign-extension-ops\r\n /** Mutable global imports and exports. */\r\n MUTABLE_GLOBAL = 1 << 1 // see: https://github.com/WebAssembly/mutable-global\r\n}\r\n\r\n/** Indicates the desired kind of a conversion. */\r\nexport const enum ConversionKind {\r\n /** No conversion. */\r\n NONE,\r\n /** Implicit conversion. */\r\n IMPLICIT,\r\n /** Explicit conversion. */\r\n EXPLICIT\r\n}\r\n\r\n/** Indicates the desired wrap mode of a conversion. */\r\nexport const enum WrapMode {\r\n /** No wrapping. */\r\n NONE,\r\n /** Wrap small integer values. */\r\n WRAP\r\n}\r\n\r\n/** Compiler interface. */\r\nexport class Compiler extends DiagnosticEmitter {\r\n\r\n /** Program reference. */\r\n program: Program;\r\n /** Provided options. */\r\n options: Options;\r\n /** Module instance being compiled. */\r\n module: Module;\r\n /** Current function in compilation. */\r\n currentFunction: Function;\r\n /** Outer function in compilation, if compiling a function expression. */\r\n outerFunction: Function | null = null;\r\n /** Current enum in compilation. */\r\n currentEnum: Enum | null = null;\r\n /** Current type in compilation. */\r\n currentType: Type = Type.void;\r\n /** Start function being compiled. */\r\n startFunction: Function;\r\n /** Start function statements. */\r\n startFunctionBody: ExpressionRef[] = [];\r\n /** Counting memory offset. */\r\n memoryOffset: I64;\r\n /** Memory segments being compiled. */\r\n memorySegments: MemorySegment[] = [];\r\n /** Map of already compiled static string segments. */\r\n stringSegments: Map = new Map();\r\n /** Function table being compiled. */\r\n functionTable: Function[] = [];\r\n /** Argument count helper global. */\r\n argcVar: GlobalRef = 0;\r\n /** Argument count helper setter. */\r\n argcSet: FunctionRef = 0;\r\n\r\n /** Compiles a {@link Program} to a {@link Module} using the specified options. */\r\n static compile(program: Program, options: Options | null = null): Module {\r\n return new Compiler(program, options).compile();\r\n }\r\n\r\n /** Constructs a new compiler for a {@link Program} using the specified options. */\r\n constructor(program: Program, options: Options | null = null) {\r\n super(program.diagnostics);\r\n this.program = program;\r\n if (!options) options = new Options();\r\n this.options = options;\r\n this.memoryOffset = i64_new(\r\n // leave space for `null`. also functions as a sentinel for erroneous stores at offset 0.\r\n // note that Binaryen's asm.js output utilizes the first 8 bytes for reinterpretations (#1547)\r\n max(options.memoryBase, 8)\r\n );\r\n this.module = Module.create();\r\n }\r\n\r\n /** Performs compilation of the underlying {@link Program} to a {@link Module}. */\r\n compile(): Module {\r\n var options = this.options;\r\n var module = this.module;\r\n var program = this.program;\r\n\r\n // initialize lookup maps, built-ins, imports, exports, etc.\r\n program.initialize(options);\r\n\r\n // set up the start function wrapping top-level statements, of all files.\r\n var startFunctionPrototype = assert(program.elementsLookup.get(\"start\"));\r\n assert(startFunctionPrototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n var startFunctionInstance = new Function(\r\n startFunctionPrototype,\r\n startFunctionPrototype.internalName,\r\n new Signature([], Type.void)\r\n );\r\n this.startFunction = startFunctionInstance;\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\r\n var startFunctionBody = this.startFunctionBody;\r\n if (startFunctionBody.length) {\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 module.setStart(funcRef);\r\n }\r\n\r\n // set up static memory segments and the heap base pointer\r\n if (!options.noMemory) {\r\n let 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 let pages = i64_shr_u(i64_align(memoryOffset, 0x10000), i64_new(16, 0));\r\n module.setMemory(\r\n i64_low(pages),\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\r\n // import memory if requested (default memory is named '0' by Binaryen)\r\n if (options.importMemory) module.addMemoryImport(\"0\", \"env\", \"memory\");\r\n\r\n // set up function table\r\n var functionTable = this.functionTable;\r\n var functionTableSize = functionTable.length;\r\n var functionTableExported = false;\r\n if (functionTableSize) {\r\n let entries = new Array(functionTableSize);\r\n for (let i = 0; i < functionTableSize; ++i) {\r\n entries[i] = functionTable[i].ref;\r\n }\r\n module.setFunctionTable(entries);\r\n module.addTableExport(\"0\", \"table\");\r\n functionTableExported = true;\r\n }\r\n\r\n // import table if requested (default table is named '0' by Binaryen)\r\n if (options.importTable) {\r\n module.addTableImport(\"0\", \"env\", \"table\");\r\n if (!functionTableExported) module.addTableExport(\"0\", \"table\");\r\n }\r\n\r\n return module;\r\n }\r\n\r\n // sources\r\n\r\n /** Compiles a source by looking it up by path first. */\r\n compileSourceByPath(normalizedPathWithoutExtension: string, reportNode: Node): void {\r\n var source = this.program.lookupSourceByPath(normalizedPathWithoutExtension);\r\n if (source) this.compileSource(source);\r\n else {\r\n this.error(\r\n DiagnosticCode.File_0_not_found,\r\n reportNode.range, normalizedPathWithoutExtension\r\n );\r\n }\r\n }\r\n\r\n /** Compiles a source. */\r\n compileSource(source: Source): void {\r\n if (source.is(CommonFlags.COMPILED)) return;\r\n source.set(CommonFlags.COMPILED);\r\n\r\n // compile top-level statements\r\n var noTreeShaking = this.options.noTreeShaking;\r\n var isEntry = source.isEntry;\r\n var startFunction = this.startFunction;\r\n var startFunctionBody = this.startFunctionBody;\r\n var statements = source.statements;\r\n for (let i = 0, k = statements.length; i < k; ++i) {\r\n let statement = statements[i];\r\n switch (statement.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) &&\r\n !(statement).isGeneric\r\n ) {\r\n this.compileClassDeclaration(statement, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: break;\r\n case NodeKind.ENUMDECLARATION: {\r\n if (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) {\r\n this.compileEnumDeclaration(statement);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n if (\r\n (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) &&\r\n !(statement).isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(statement, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.IMPORT: {\r\n this.compileSourceByPath(\r\n (statement).normalizedPath,\r\n (statement).path\r\n );\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n if (noTreeShaking || (isEntry && statement.is(CommonFlags.EXPORT))) {\r\n this.compileNamespaceDeclaration(statement);\r\n }\r\n break;\r\n }\r\n case NodeKind.VARIABLE: { // global, always compiled as initializers might have side effects\r\n let variableInit = this.compileVariableStatement(statement);\r\n if (variableInit) startFunctionBody.push(variableInit);\r\n break;\r\n }\r\n case NodeKind.EXPORT: {\r\n if ((statement).normalizedPath != null) {\r\n this.compileSourceByPath(\r\n (statement).normalizedPath,\r\n (statement).path\r\n );\r\n }\r\n if (noTreeShaking || isEntry) {\r\n this.compileExportStatement(statement);\r\n }\r\n break;\r\n }\r\n default: { // otherwise a top-level statement that is part of the start function's body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = startFunction;\r\n startFunctionBody.push(this.compileStatement(statement));\r\n this.currentFunction = previousFunction;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // globals\r\n\r\n compileGlobalDeclaration(declaration: VariableDeclaration): Global | null {\r\n // look up the initialized program element\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.GLOBAL);\r\n if (!this.compileGlobal(element)) return null; // reports\r\n return element;\r\n }\r\n\r\n compileGlobal(global: Global): bool {\r\n if (global.is(CommonFlags.COMPILED)) return true;\r\n global.set(CommonFlags.COMPILED);\r\n\r\n var module = this.module;\r\n var declaration = global.declaration;\r\n var initExpr: ExpressionRef = 0;\r\n\r\n if (global.type == Type.void) { // type is void if not yet resolved or not annotated\r\n if (declaration) {\r\n\r\n // resolve now if annotated\r\n if (declaration.type) {\r\n let resolvedType = this.program.resolveType(declaration.type); // reports\r\n if (!resolvedType) return false;\r\n if (resolvedType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.type.range\r\n );\r\n return false;\r\n }\r\n global.type = resolvedType;\r\n\r\n // infer from initializer if not annotated\r\n } else if (declaration.initializer) { // infer type using void/NONE for literal inference\r\n initExpr = this.compileExpressionRetainType( // reports\r\n declaration.initializer,\r\n Type.void,\r\n WrapMode.WRAP\r\n );\r\n if (this.currentType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.initializer.range, this.currentType.toString(), \"\"\r\n );\r\n return false;\r\n }\r\n global.type = this.currentType;\r\n\r\n // must either be annotated or have an initializer\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.name.range.atEnd\r\n );\r\n return false;\r\n }\r\n } else {\r\n assert(false); // must have a declaration if 'void' (and thus resolved later on)\r\n }\r\n }\r\n\r\n // ambient builtins like 'HEAP_BASE' need to be resolved but are added explicitly\r\n if (global.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) return true;\r\n\r\n var nativeType = global.type.toNativeType();\r\n var isConstant = global.isAny(CommonFlags.CONST) || global.is(CommonFlags.STATIC | CommonFlags.READONLY);\r\n\r\n // handle imports\r\n if (global.is(CommonFlags.AMBIENT)) {\r\n\r\n // constant global\r\n if (isConstant || this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n global.set(CommonFlags.MODULE_IMPORT);\r\n module.addGlobalImport(\r\n global.internalName,\r\n global.parent\r\n ? global.parent.simpleName\r\n : \"env\",\r\n global.simpleName,\r\n nativeType\r\n );\r\n global.set(CommonFlags.COMPILED);\r\n return true;\r\n\r\n // importing mutable globals is not supported in the MVP\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n assert(declaration).range\r\n );\r\n }\r\n return false;\r\n }\r\n\r\n // the MVP does not yet support initializer expressions other than constant values (and\r\n // get_globals), hence such initializations must be performed in the start function for now.\r\n var initializeInStart = false;\r\n\r\n // inlined constant can be compiled as-is\r\n if (global.is(CommonFlags.INLINED)) {\r\n initExpr = this.compileInlineConstant(global, global.type, true);\r\n\r\n } else {\r\n\r\n // evaluate initializer if present\r\n if (declaration && declaration.initializer) {\r\n if (!initExpr) {\r\n initExpr = this.compileExpression(\r\n declaration.initializer,\r\n global.type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n );\r\n }\r\n\r\n // check if the initializer is constant\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n\r\n // if a constant global, check if the initializer becomes constant after precompute\r\n if (isConstant) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n declaration.range\r\n );\r\n initializeInStart = true;\r\n }\r\n } else {\r\n initializeInStart = true;\r\n }\r\n }\r\n\r\n // initialize to zero if there's no initializer\r\n } else {\r\n initExpr = global.type.toNativeZero(module);\r\n }\r\n }\r\n\r\n var internalName = global.internalName;\r\n\r\n if (initializeInStart) { // initialize to mutable zero and set the actual value in start\r\n module.addGlobal(internalName, nativeType, true, global.type.toNativeZero(module));\r\n this.startFunctionBody.push(module.createSetGlobal(internalName, initExpr));\r\n\r\n } else { // compile as-is\r\n\r\n if (isConstant) {\r\n let exprType = getExpressionType(initExpr);\r\n switch (exprType) {\r\n case NativeType.I32: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(getConstValueI32(initExpr), 0);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(\r\n getConstValueI64Low(initExpr),\r\n getConstValueI64High(initExpr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF32(initExpr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = getConstValueF64(initExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return false;\r\n }\r\n }\r\n global.set(CommonFlags.INLINED); // inline the value from now on\r\n if (global.is(CommonFlags.MODULE_EXPORT)) {\r\n module.addGlobal(internalName, nativeType, false, initExpr);\r\n module.addGlobalExport(internalName, mangleExportName(global));\r\n } else if (declaration && declaration.isTopLevel) { // might become re-exported\r\n module.addGlobal(internalName, nativeType, false, initExpr);\r\n }\r\n\r\n } else /* mutable */ {\r\n module.addGlobal(internalName, nativeType, !isConstant, initExpr);\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n // enums\r\n\r\n compileEnumDeclaration(declaration: EnumDeclaration): Enum | null {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(element)) return null;\r\n return element;\r\n }\r\n\r\n compileEnum(element: Enum): bool {\r\n if (element.is(CommonFlags.COMPILED)) return true;\r\n element.set(CommonFlags.COMPILED);\r\n\r\n var module = this.module;\r\n this.currentEnum = element;\r\n var previousValue: EnumValue | null = null;\r\n\r\n if (element.members) {\r\n for (let member of element.members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) continue; // happens if an enum is also a namespace\r\n let initInStart = false;\r\n let val = member;\r\n let valueDeclaration = val.declaration;\r\n val.set(CommonFlags.COMPILED);\r\n if (val.is(CommonFlags.INLINED)) {\r\n if (element.declaration.isTopLevelExport) {\r\n module.addGlobal(\r\n val.internalName,\r\n NativeType.I32,\r\n false, // constant\r\n module.createI32(val.constantValue)\r\n );\r\n }\r\n } else {\r\n let initExpr: ExpressionRef;\r\n if (valueDeclaration.value) {\r\n initExpr = this.compileExpression(\r\n valueDeclaration.value,\r\n Type.i32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (getExpressionId(initExpr) != ExpressionId.Const) {\r\n if (element.is(CommonFlags.CONST)) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n valueDeclaration.range\r\n );\r\n }\r\n initInStart = true;\r\n }\r\n }\r\n } else if (previousValue == null) {\r\n initExpr = module.createI32(0);\r\n } else if (previousValue.is(CommonFlags.INLINED)) {\r\n initExpr = module.createI32(previousValue.constantValue + 1);\r\n } else {\r\n // in TypeScript this errors with TS1061, but actually we can do:\r\n initExpr = module.createBinary(BinaryOp.AddI32,\r\n module.createGetGlobal(previousValue.internalName, NativeType.I32),\r\n module.createI32(1)\r\n );\r\n if (element.is(CommonFlags.CONST)) {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n valueDeclaration.range\r\n );\r\n }\r\n initInStart = true;\r\n }\r\n if (initInStart) {\r\n module.addGlobal(\r\n val.internalName,\r\n NativeType.I32,\r\n true, // mutable\r\n module.createI32(0)\r\n );\r\n this.startFunctionBody.push(module.createSetGlobal(val.internalName, initExpr));\r\n } else {\r\n module.addGlobal(val.internalName, NativeType.I32, false, initExpr);\r\n if (getExpressionType(initExpr) == NativeType.I32) {\r\n val.constantValue = getConstValueI32(initExpr);\r\n val.set(CommonFlags.INLINED);\r\n } else {\r\n assert(false);\r\n val.constantValue = 0;\r\n }\r\n }\r\n }\r\n previousValue = val;\r\n\r\n // export values if the enum is exported\r\n if (element.is(CommonFlags.MODULE_EXPORT)) {\r\n if (member.is(CommonFlags.INLINED) || this.options.hasFeature(Feature.MUTABLE_GLOBAL)) {\r\n module.addGlobalExport(member.internalName, mangleExportName(member));\r\n } else if (valueDeclaration) {\r\n this.warning(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n valueDeclaration.range\r\n );\r\n }\r\n }\r\n }\r\n }\r\n this.currentEnum = null;\r\n return true;\r\n }\r\n\r\n // functions\r\n\r\n /** Compiles a top-level function given its declaration. */\r\n compileFunctionDeclaration(\r\n declaration: FunctionDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null\r\n ): Function | null {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return this.compileFunctionUsingTypeArguments( // reports\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n null, // no outer scope (is top level)\r\n (element).declaration.name\r\n );\r\n }\r\n\r\n /** Resolves the specified type arguments prior to compiling the resulting function instance. */\r\n compileFunctionUsingTypeArguments(\r\n prototype: FunctionPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null,\r\n outerScope: Flow | null,\r\n reportNode: Node\r\n ): Function | null {\r\n var instance = prototype.resolveUsingTypeArguments( // reports\r\n typeArguments,\r\n contextualTypeArguments,\r\n reportNode\r\n );\r\n if (!instance) return null;\r\n instance.outerScope = outerScope;\r\n if (!this.compileFunction(instance)) return null; // reports\r\n return instance;\r\n }\r\n\r\n /** Either reuses or creates the function type matching the specified signature. */\r\n private ensureFunctionType(\r\n parameterTypes: Type[] | null,\r\n returnType: Type,\r\n thisType: Type | null = null\r\n ): FunctionTypeRef {\r\n var numParameters = parameterTypes ? parameterTypes.length : 0;\r\n var paramTypes: NativeType[];\r\n var index = 0;\r\n if (thisType) {\r\n paramTypes = new Array(1 + numParameters);\r\n paramTypes[0] = thisType.toNativeType();\r\n index = 1;\r\n } else {\r\n paramTypes = new Array(numParameters);\r\n }\r\n if (parameterTypes) {\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n paramTypes[index] = parameterTypes[i].toNativeType();\r\n }\r\n }\r\n var resultType = returnType.toNativeType();\r\n var module = this.module;\r\n var typeRef = module.getFunctionTypeBySignature(resultType, paramTypes);\r\n if (!typeRef) {\r\n let name = Signature.makeSignatureString(parameterTypes, returnType, thisType);\r\n typeRef = module.addFunctionType(name, resultType, paramTypes);\r\n }\r\n return typeRef;\r\n }\r\n\r\n /** Compiles a readily resolved function instance. */\r\n compileFunction(instance: Function): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n assert(!instance.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN));\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n // check that modifiers are matching\r\n var declaration = instance.prototype.declaration;\r\n var body = declaration.body;\r\n if (body) {\r\n if (instance.is(CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n if (!instance.is(CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n declaration.name.range\r\n );\r\n }\r\n }\r\n\r\n var ref: FunctionRef;\r\n var signature = instance.signature;\r\n var typeRef = this.ensureFunctionType(signature.parameterTypes, signature.returnType, signature.thisType);\r\n var module = this.module;\r\n if (body) {\r\n let isConstructor = instance.is(CommonFlags.CONSTRUCTOR);\r\n let returnType = instance.signature.returnType;\r\n\r\n // compile body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = instance;\r\n let flow = instance.flow;\r\n let stmt: ExpressionRef;\r\n if (body.kind == NodeKind.EXPRESSION) { // () => expression\r\n assert(!instance.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.GET | CommonFlags.SET));\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 stmt = this.compileStatement(body);\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 stmt = module.createBlock(null, [\r\n stmt,\r\n module.createGetLocal(0, nativeSizeType)\r\n ], 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 stmt = module.createBlock(null, [\r\n stmt,\r\n module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, declaration.name)\r\n )\r\n ], nativeSizeType);\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 }\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 } else {\r\n instance.set(CommonFlags.MODULE_IMPORT);\r\n\r\n // create the function import\r\n let parent = instance.prototype.parent;\r\n ref = module.addFunctionImport(\r\n instance.internalName,\r\n parent\r\n ? parent.simpleName\r\n : \"env\",\r\n instance.simpleName,\r\n typeRef\r\n );\r\n }\r\n\r\n // check module-level export\r\n if (instance.is(CommonFlags.MODULE_EXPORT)) {\r\n if (signature.requiredParameters < signature.parameterTypes.length) {\r\n // export the trampoline if the function takes optional parameters\r\n instance = this.ensureTrampoline(instance);\r\n this.ensureArgcSet();\r\n }\r\n module.addFunctionExport(instance.internalName, mangleExportName(instance));\r\n }\r\n\r\n instance.finalize(module, ref);\r\n return true;\r\n }\r\n\r\n // namespaces\r\n\r\n compileNamespaceDeclaration(declaration: NamespaceDeclaration): void {\r\n var members = declaration.members;\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n switch (member.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileClassDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileInterfaceDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileEnumDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n if (\r\n (noTreeShaking || member.is(CommonFlags.EXPORT)) &&\r\n !(member).isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n this.compileNamespaceDeclaration(member);\r\n }\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n if (noTreeShaking || member.is(CommonFlags.EXPORT)) {\r\n let variableInit = this.compileVariableStatement(member, true);\r\n if (variableInit) this.startFunctionBody.push(variableInit);\r\n }\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n }\r\n\r\n compileNamespace(ns: Namespace): void {\r\n if (!ns.members) return;\r\n\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let element of ns.members.values()) {\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking ||\r\n (element).is(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n this.compileEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking || (element).is(CommonFlags.EXPORT)\r\n ) && !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // exports\r\n\r\n compileExportStatement(statement: ExportStatement): void {\r\n var module = this.module;\r\n var fileLevelExports = this.program.fileLevelExports;\r\n var members = statement.members;\r\n if (!members) return; // filespace\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n let internalExportName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n member.externalName.text\r\n );\r\n let element = fileLevelExports.get(internalExportName);\r\n if (!element) continue; // reported in Program#initialize\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (!(element).is(CommonFlags.GENERIC)) {\r\n this.compileClassUsingTypeArguments(element, []);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n this.compileEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC) &&\r\n statement.range.source.isEntry\r\n ) {\r\n let functionInstance = this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null, // no contextual type arguments\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n if (functionInstance) {\r\n let functionDeclaration = functionInstance.prototype.declaration;\r\n if (functionDeclaration && functionDeclaration.needsExplicitExport(member)) {\r\n module.addFunctionExport(functionInstance.internalName, member.externalName.text);\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (this.compileGlobal(element) && statement.range.source.isEntry) {\r\n let globalDeclaration = (element).declaration;\r\n if (globalDeclaration && globalDeclaration.needsExplicitExport(member)) {\r\n if ((element).is(CommonFlags.INLINED)) {\r\n module.addGlobalExport(element.internalName, member.externalName.text);\r\n } else {\r\n this.warning(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n member.range\r\n );\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // classes\r\n\r\n compileClassDeclaration(\r\n declaration: ClassDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n var element = assert(this.program.elementsLookup.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.compileClassUsingTypeArguments(\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n alternativeReportNode\r\n );\r\n }\r\n\r\n compileClassUsingTypeArguments(\r\n prototype: ClassPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n var instance = prototype.resolveUsingTypeArguments( // reports\r\n typeArguments,\r\n contextualTypeArguments,\r\n alternativeReportNode\r\n );\r\n if (!instance) return;\r\n this.compileClass(instance);\r\n }\r\n\r\n compileClass(instance: Class): bool {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n var staticMembers = instance.prototype.members;\r\n if (staticMembers) {\r\n for (let element of staticMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n this.compileGlobal(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [], null, null,\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], null, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], null, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n var ctorInstance = instance.constructorInstance;\r\n if (ctorInstance) this.compileFunction(ctorInstance);\r\n var instanceMembers = instance.members;\r\n if (instanceMembers) {\r\n for (let element of instanceMembers.values()) {\r\n switch (element.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (\r\n !(element).is(CommonFlags.GENERIC)\r\n ) {\r\n this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n instance.contextualTypeArguments,\r\n null, // no outer scope\r\n (element).declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n element.set(CommonFlags.COMPILED);\r\n if (!instance.is(CommonFlags.MODULE_EXPORT) || element.is(CommonFlags.PRIVATE)) break;\r\n let module = this.module;\r\n let name = (element).simpleName;\r\n let type = (element).type;\r\n let nativeType = type.toNativeType();\r\n let offset = (element).memoryOffset;\r\n let usizeType = this.options.usizeType;\r\n let nativeSizeType = this.options.nativeSizeType;\r\n\r\n // export an implicit getter: get:fieldName(this: usize) -> fieldType\r\n let getterName = mangleExportName(element, GETTER_PREFIX + name);\r\n module.addFunction(\r\n getterName,\r\n this.ensureFunctionType(null, type, usizeType),\r\n null,\r\n module.createLoad(\r\n type.byteSize,\r\n type.is(TypeFlags.SIGNED),\r\n module.createGetLocal(0, nativeSizeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(getterName, getterName);\r\n\r\n // export an implicit setter: set:fieldName(this: usize, value: fieldType) -> void\r\n if (element.is(CommonFlags.READONLY)) break;\r\n let setterName = mangleExportName(element, SETTER_PREFIX + name);\r\n module.addFunction(\r\n setterName,\r\n this.ensureFunctionType([ type ], Type.void, usizeType),\r\n null,\r\n module.createStore(\r\n type.byteSize,\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createGetLocal(1, nativeType),\r\n nativeType,\r\n offset\r\n )\r\n );\r\n module.addFunctionExport(setterName, setterName);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let getter = (element).getterPrototype;\r\n if (getter) {\r\n this.compileFunctionUsingTypeArguments(\r\n getter,\r\n [], instance.contextualTypeArguments, null,\r\n getter.declaration.name\r\n );\r\n }\r\n let setter = (element).setterPrototype;\r\n if (setter) {\r\n this.compileFunctionUsingTypeArguments(\r\n setter,\r\n [], instance.contextualTypeArguments, null,\r\n setter.declaration.name\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return true;\r\n }\r\n\r\n compileInterfaceDeclaration(\r\n declaration: InterfaceDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n // TODO\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n declaration.range\r\n );\r\n }\r\n\r\n // memory\r\n\r\n /** Adds a static memory segment with the specified data. */\r\n addMemorySegment(buffer: Uint8Array, alignment: i32 = 8): MemorySegment {\r\n var memoryOffset = i64_align(this.memoryOffset, alignment);\r\n var segment = MemorySegment.create(buffer, memoryOffset);\r\n this.memorySegments.push(segment);\r\n this.memoryOffset = i64_add(memoryOffset, i64_new(buffer.length, 0));\r\n return segment;\r\n }\r\n\r\n // function table\r\n\r\n /** Ensures that a table entry exists for the specified function and returns its index. */\r\n ensureFunctionTableEntry(func: Function): i32 {\r\n assert(func.is(CommonFlags.COMPILED));\r\n if (func.functionTableIndex >= 0) {\r\n return func.functionTableIndex;\r\n }\r\n var functionTable = this.functionTable;\r\n var index = functionTable.length;\r\n if (!func.is(CommonFlags.TRAMPOLINE) && func.signature.requiredParameters < func.signature.parameterTypes.length) {\r\n // insert the trampoline if the function has optional parameters\r\n func = this.ensureTrampoline(func);\r\n }\r\n functionTable.push(func);\r\n func.functionTableIndex = index;\r\n return index;\r\n }\r\n\r\n // statements\r\n\r\n compileStatement(statement: Statement): ExpressionRef {\r\n var module = this.module;\r\n var stmt: ExpressionRef;\r\n switch (statement.kind) {\r\n case NodeKind.BLOCK: {\r\n stmt = this.compileBlockStatement(statement);\r\n break;\r\n }\r\n case NodeKind.BREAK: {\r\n stmt = this.compileBreakStatement(statement);\r\n break;\r\n }\r\n case NodeKind.CONTINUE: {\r\n stmt = this.compileContinueStatement(statement);\r\n break;\r\n }\r\n case NodeKind.DO: {\r\n stmt = this.compileDoStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EMPTY: {\r\n stmt = this.compileEmptyStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EXPRESSION: {\r\n stmt = this.compileExpressionStatement(statement);\r\n break;\r\n }\r\n case NodeKind.FOR: {\r\n stmt = this.compileForStatement(statement);\r\n break;\r\n }\r\n case NodeKind.IF: {\r\n stmt = this.compileIfStatement(statement);\r\n break;\r\n }\r\n case NodeKind.RETURN: {\r\n stmt = this.compileReturnStatement(statement);\r\n break;\r\n }\r\n case NodeKind.SWITCH: {\r\n stmt = this.compileSwitchStatement(statement);\r\n break;\r\n }\r\n case NodeKind.THROW: {\r\n stmt = this.compileThrowStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TRY: {\r\n stmt = this.compileTryStatement(statement);\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n stmt = this.compileVariableStatement(statement);\r\n if (!stmt) stmt = module.createNop();\r\n break;\r\n }\r\n case NodeKind.VOID: {\r\n stmt = this.compileVoidStatement(statement);\r\n break;\r\n }\r\n case NodeKind.WHILE: {\r\n stmt = this.compileWhileStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n // type declarations must be top-level because function bodies are evaluated when\r\n // reachaable only.\r\n if (this.currentFunction == this.startFunction) {\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 var count = 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 if (getExpressionId(stmt) != ExpressionId.Nop) {\r\n stmts[count++] = stmt;\r\n if (flow.isAny(FlowFlags.TERMINATED)) break;\r\n }\r\n }\r\n stmts.length = count;\r\n return stmts;\r\n }\r\n\r\n compileBlockStatement(statement: BlockStatement): ExpressionRef {\r\n var statements = statement.statements;\r\n\r\n // Not actually a branch, but can contain its own scoped variables.\r\n var blockFlow = this.currentFunction.flow.enterBranchOrScope();\r\n this.currentFunction.flow = blockFlow;\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 // Switch back to the parent flow\r\n var parentFlow = blockFlow.leaveBranchOrScope();\r\n this.currentFunction.flow = parentFlow;\r\n parentFlow.inherit(blockFlow);\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 flow = currentFunction.flow.enterBranchOrScope();\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?\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.leaveBranchOrScope();\r\n currentFunction.leaveBreakContext();\r\n\r\n return module.createBlock(breakLabel, [\r\n module.createLoop(continueLabel,\r\n flow.isAny(FlowFlags.BREAKS | FlowFlags.CONTINUES | FlowFlags.RETURNS)\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 ], NativeType.None);\r\n }\r\n\r\n compileEmptyStatement(statement: EmptyStatement): ExpressionRef {\r\n return this.module.createNop();\r\n }\r\n\r\n compileExpressionStatement(statement: ExpressionStatement): ExpressionRef {\r\n var expr = this.compileExpression(statement.expression, Type.void, ConversionKind.NONE, WrapMode.NONE);\r\n if (this.currentType != Type.void) {\r\n expr = this.module.createDrop(expr);\r\n this.currentType = Type.void;\r\n }\r\n return expr;\r\n }\r\n\r\n compileForStatement(statement: ForStatement): ExpressionRef {\r\n // A for statement initiates a new branch with its own scoped variables\r\n // possibly declared in its initializer, and break context.\r\n var currentFunction = this.currentFunction;\r\n var label = currentFunction.enterBreakContext();\r\n var flow = currentFunction.flow.enterBranchOrScope();\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 = true;\r\n if (statement.condition) {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n // check if the condition is always true\r\n let condPre = this.precomputeExpressionRef(condExpr);\r\n if (getExpressionId(condPre) == ExpressionId.Const) {\r\n assert(getExpressionType(condPre) == NativeType.I32);\r\n if (getConstValueI32(condPre) != 0) alwaysTrue = true;\r\n // TODO: could skip compilation if the condition is always false here, but beware that the\r\n // initializer could still declare new 'var's that are used later on.\r\n }\r\n // recompile to original\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n } else {\r\n // omitted condition is always true\r\n condExpr = module.createI32(1);\r\n alwaysTrue = true;\r\n }\r\n var incrExpr = statement.incrementor\r\n ? this.compileExpression(statement.incrementor, Type.void, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : 0;\r\n var bodyExpr = this.compileStatement(statement.statement);\r\n\r\n // Switch back to the parent flow\r\n var parentFlow = flow.leaveBranchOrScope();\r\n if (alwaysTrue) parentFlow.inherit(flow);\r\n currentFunction.flow = parentFlow;\r\n currentFunction.leaveBreakContext();\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 (parentFlow.isAny(FlowFlags.CONTINUES | FlowFlags.CONDITIONALLY_CONTINUES)) {\r\n repeatBlock.push(\r\n module.createBlock(continueLabel, [ // inner 'continue' block\r\n module.createBreak(breakLabel, module.createUnary(UnaryOp.EqzI32, condExpr)),\r\n bodyExpr\r\n ], NativeType.None)\r\n );\r\n } else { // can omit the 'continue' block\r\n repeatBlock.push(\r\n module.createBreak(breakLabel, module.createUnary(UnaryOp.EqzI32, condExpr))\r\n );\r\n repeatBlock.push(bodyExpr);\r\n }\r\n if (incrExpr) repeatBlock.push(incrExpr);\r\n repeatBlock.push(\r\n module.createBreak(repeatLabel)\r\n );\r\n\r\n breakBlock.push(\r\n module.createLoop(repeatLabel,\r\n module.createBlock(null, repeatBlock, NativeType.None)\r\n )\r\n );\r\n\r\n var expr = module.createBlock(breakLabel, breakBlock, NativeType.None);\r\n\r\n // If the loop is guaranteed to run and return, append a hint for Binaryen\r\n if (flow.isAny(FlowFlags.RETURNS | FlowFlags.THROWS)) {\r\n expr = module.createBlock(null, [\r\n expr,\r\n module.createUnreachable()\r\n ]);\r\n }\r\n return expr;\r\n }\r\n\r\n compileIfStatement(statement: IfStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var ifTrue = statement.ifTrue;\r\n var ifFalse = statement.ifFalse;\r\n\r\n // The condition doesn't initiate a branch yet\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n\r\n if (\r\n !this.options.noTreeShaking ||\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT)\r\n ) {\r\n // Try to eliminate unnecesssary branches if the condition is constant\r\n let condExprPrecomp = this.precomputeExpressionRef(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n return getConstValueI32(condExprPrecomp)\r\n ? this.compileStatement(ifTrue)\r\n : ifFalse\r\n ? this.compileStatement(ifFalse)\r\n : module.createNop();\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n // Each arm initiates a branch\r\n var ifTrueFlow = currentFunction.flow.enterBranchOrScope();\r\n currentFunction.flow = ifTrueFlow;\r\n var ifTrueExpr = this.compileStatement(ifTrue);\r\n currentFunction.flow = ifTrueFlow.leaveBranchOrScope();\r\n\r\n var ifFalseFlow: Flow | null;\r\n var ifFalseExpr: ExpressionRef = 0;\r\n if (ifFalse) {\r\n ifFalseFlow = currentFunction.flow.enterBranchOrScope();\r\n currentFunction.flow = ifFalseFlow;\r\n ifFalseExpr = this.compileStatement(ifFalse);\r\n let parentFlow = ifFalseFlow.leaveBranchOrScope();\r\n currentFunction.flow = parentFlow;\r\n parentFlow.inheritMutual(ifTrueFlow, ifFalseFlow);\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\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 = currentFunction.flow.enterBranchOrScope();\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.TERMINATED)) {\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 currentFunction.flow = flow.leaveBranchOrScope(false);\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 let flow = currentFunction.flow;\r\n if (alwaysReturns) flow.set(FlowFlags.RETURNS);\r\n if (alwaysReturnsWrapped) flow.set(FlowFlags.RETURNS_WRAPPED);\r\n if (alwaysThrows) flow.set(FlowFlags.THROWS);\r\n if (alwaysAllocates) flow.set(FlowFlags.ALLOCATES);\r\n }\r\n return currentBlock;\r\n }\r\n\r\n compileThrowStatement(statement: ThrowStatement): ExpressionRef {\r\n var flow = this.currentFunction.flow;\r\n\r\n // Remember that this branch throws\r\n flow.set(FlowFlags.THROWS);\r\n\r\n // FIXME: without try-catch it is safe to assume RETURNS as well for now\r\n flow.set(FlowFlags.RETURNS);\r\n\r\n // TODO: requires exception-handling spec.\r\n return compileBuiltinAbort(this, null, statement);\r\n }\r\n\r\n compileTryStatement(statement: TryStatement): ExpressionRef {\r\n // TODO\r\n // can't yet support something like: try { return ... } finally { ... }\r\n // worthwhile to investigate lowering returns to block results (here)?\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n /**\r\n * Compiles a variable statement. Returns `0` if an initializer is not\r\n * necessary.\r\n */\r\n compileVariableStatement(statement: VariableStatement, isKnownGlobal: bool = false): ExpressionRef {\r\n var program = this.program;\r\n var currentFunction = this.currentFunction;\r\n var declarations = statement.declarations;\r\n var numDeclarations = declarations.length;\r\n\r\n // top-level variables and constants become globals\r\n if (isKnownGlobal || (\r\n currentFunction == this.startFunction &&\r\n statement.parent && statement.parent.kind == NodeKind.SOURCE\r\n )) {\r\n // NOTE that the above condition also covers top-level variables declared with 'let', even\r\n // though such variables could also become start function locals if, and only if, not used\r\n // within any function declared in the same source, which is unknown at this point. the only\r\n // efficient way to deal with this would be to keep track of all occasions it is used and\r\n // replace these instructions afterwards, dynamically. (TOOD: what about a Binaryen pass?)\r\n for (let i = 0; i < numDeclarations; ++i) {\r\n this.compileGlobalDeclaration(declarations[i]);\r\n }\r\n return 0;\r\n }\r\n\r\n // other variables become locals\r\n var initializers = new Array();\r\n var flow = this.currentFunction.flow;\r\n for (let i = 0; i < numDeclarations; ++i) {\r\n let declaration = declarations[i];\r\n let name = declaration.name.text;\r\n let type: Type | null = null;\r\n let initExpr: ExpressionRef = 0;\r\n if (declaration.type) {\r\n type = program.resolveType( // reports\r\n declaration.type,\r\n flow.contextualTypeArguments\r\n );\r\n if (!type) continue;\r\n if (declaration.initializer) {\r\n initExpr = this.compileExpression( // reports\r\n declaration.initializer,\r\n type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n } else if (declaration.initializer) { // infer type using void/NONE for proper literal inference\r\n initExpr = this.compileExpressionRetainType( // reports\r\n declaration.initializer,\r\n Type.void,\r\n WrapMode.NONE\r\n );\r\n if (this.currentType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.range, this.currentType.toString(), \"\"\r\n );\r\n continue;\r\n }\r\n type = this.currentType;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.name.range.atEnd\r\n );\r\n continue;\r\n }\r\n let isInlined = false;\r\n if (declaration.is(CommonFlags.CONST)) {\r\n if (initExpr) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (getExpressionId(initExpr) == ExpressionId.Const) {\r\n let local = new Local(program, name, -1, type);\r\n switch (getExpressionType(initExpr)) {\r\n case NativeType.I32: {\r\n local = local.withConstantIntegerValue(getConstValueI32(initExpr), 0);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n local = local.withConstantIntegerValue(\r\n getConstValueI64Low(initExpr),\r\n getConstValueI64High(initExpr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n local = local.withConstantFloatValue(getConstValueF32(initExpr));\r\n break;\r\n }\r\n case NativeType.F64: {\r\n local = local.withConstantFloatValue(getConstValueF64(initExpr));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n // Create a virtual local that doesn't actually exist in WebAssembly\r\n let scopedLocals = currentFunction.flow.scopedLocals;\r\n if (!scopedLocals) currentFunction.flow.scopedLocals = scopedLocals = new Map();\r\n else if (scopedLocals.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, name\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n scopedLocals.set(name, local);\r\n isInlined = true;\r\n } else {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n declaration.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._const_declarations_must_be_initialized,\r\n declaration.range\r\n );\r\n }\r\n }\r\n if (!isInlined) {\r\n let local: Local;\r\n if (\r\n declaration.isAny(CommonFlags.LET | CommonFlags.CONST) ||\r\n flow.is(FlowFlags.INLINE_CONTEXT)\r\n ) { // here: not top-level\r\n local = flow.addScopedLocal(type, name, false, declaration); // reports\r\n } else {\r\n local = currentFunction.addLocal(type, name, declaration); // reports\r\n }\r\n if (initExpr) {\r\n initializers.push(this.compileAssignmentWithValue(declaration.name, initExpr));\r\n if (local.type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped(local.index, !flow.canOverflow(initExpr, type));\r\n }\r\n } else if (local.type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped(local.index, true); // zero\r\n }\r\n }\r\n }\r\n return initializers.length // we can unwrap these here because the\r\n ? initializers.length == 1 // source didn't tell us exactly what to do\r\n ? initializers[0]\r\n : this.module.createBlock(null, initializers, NativeType.None)\r\n : 0;\r\n }\r\n\r\n compileVoidStatement(statement: VoidStatement): ExpressionRef {\r\n return this.compileExpression(statement.expression, Type.void, ConversionKind.EXPLICIT, WrapMode.NONE);\r\n }\r\n\r\n compileWhileStatement(statement: WhileStatement): ExpressionRef {\r\n var module = this.module;\r\n\r\n // The condition does not yet initialize a branch\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n\r\n if (\r\n !this.options.noTreeShaking ||\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT)\r\n ) {\r\n // Try to eliminate unnecesssary loops if the condition is constant\r\n let condExprPrecomp = this.precomputeExpressionRef(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n if (!getConstValueI32(condExprPrecomp)) return module.createNop();\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(statement.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n // Statements initiate a new branch with its own break context\r\n var currentFunction = this.currentFunction;\r\n var label = currentFunction.enterBreakContext();\r\n var flow = currentFunction.flow.enterBranchOrScope();\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 alwaysReturns = false; // CONDITION_IS_ALWAYS_TRUE && flow.is(FlowFlags.RETURNS);\r\n // TODO: evaluate if condition is always true\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.leaveBranchOrScope();\r\n currentFunction.leaveBreakContext();\r\n\r\n var expr = module.createBlock(breakLabel, [\r\n module.createLoop(continueLabel,\r\n module.createIf(condExpr,\r\n flow.isAny(FlowFlags.CONTINUES | FlowFlags.BREAKS | FlowFlags.RETURNS)\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 ], NativeType.None);\r\n\r\n // If the loop is guaranteed to run and return, propagate that and append a hint\r\n if (alwaysReturns) {\r\n expr = module.createBlock(null, [\r\n expr,\r\n module.createUnreachable()\r\n ]);\r\n }\r\n return expr;\r\n }\r\n\r\n // expressions\r\n\r\n /**\r\n * Compiles the value of an inlined constant element.\r\n * @param retainType If true, the annotated type of the constant is retained. Otherwise, the value\r\n * is precomputed according to context.\r\n */\r\n compileInlineConstant(\r\n element: VariableLikeElement,\r\n contextualType: Type,\r\n retainType: bool\r\n ): ExpressionRef {\r\n assert(element.is(CommonFlags.INLINED));\r\n var type = element.type;\r\n switch (\r\n !retainType &&\r\n type.is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n type.size < contextualType.size\r\n ? (this.currentType = contextualType).kind // essentially precomputes a (sign-)extension\r\n : (this.currentType = type).kind\r\n ) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n let shift = type.computeSmallIntegerShift(Type.i32);\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue) << shift >> shift\r\n : 0\r\n ); // recognized by canOverflow\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n let mask = element.type.computeSmallIntegerMask(Type.i32);\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue) & mask\r\n : 0\r\n ); // recognized by canOverflow\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue)\r\n : 0\r\n );\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n if (!element.program.options.isWasm64) {\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue)\r\n : 0\r\n );\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return element.constantValueKind == ConstantValueKind.INTEGER\r\n ? this.module.createI64(\r\n i64_low(element.constantIntegerValue),\r\n i64_high(element.constantIntegerValue)\r\n )\r\n : this.module.createI64(0);\r\n }\r\n case TypeKind.F64: {\r\n if (!(element.is(CommonFlags.BUILTIN) && contextualType == Type.f32)) {\r\n return this.module.createF64((element).constantFloatValue);\r\n }\r\n // otherwise fall-through: basically precomputes f32.demote/f64 of NaN / Infinity\r\n this.currentType = Type.f32;\r\n }\r\n case TypeKind.F32: {\r\n return this.module.createF32((element).constantFloatValue);\r\n }\r\n default: {\r\n assert(false);\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n }\r\n\r\n compileExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n this.currentType = contextualType;\r\n\r\n var expr: ExpressionRef;\r\n switch (expression.kind) {\r\n case NodeKind.ASSERTION: {\r\n expr = this.compileAssertionExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.BINARY: {\r\n expr = this.compileBinaryExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.CALL: {\r\n expr = this.compileCallExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.COMMA: {\r\n expr = this.compileCommaExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.ELEMENTACCESS: {\r\n expr = this.compileElementAccessExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.FUNCTION: {\r\n expr = this.compileFunctionExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.IDENTIFIER:\r\n case NodeKind.FALSE:\r\n case NodeKind.NULL:\r\n case NodeKind.THIS:\r\n case NodeKind.SUPER:\r\n case NodeKind.TRUE: {\r\n expr = this.compileIdentifierExpression(\r\n expression,\r\n contextualType,\r\n conversionKind == ConversionKind.NONE // retain type of inlined constants\r\n );\r\n break;\r\n }\r\n case NodeKind.INSTANCEOF: {\r\n expr = this.compileInstanceOfExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.LITERAL: {\r\n expr = this.compileLiteralExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.NEW: {\r\n expr = this.compileNewExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.PARENTHESIZED: {\r\n expr = this.compileParenthesizedExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.PROPERTYACCESS: {\r\n expr = this.compilePropertyAccessExpression(\r\n expression,\r\n contextualType,\r\n conversionKind == ConversionKind.NONE // retain type of inlined constants\r\n );\r\n break;\r\n }\r\n case NodeKind.TERNARY: {\r\n expr = this.compileTernaryExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.UNARYPOSTFIX: {\r\n expr = this.compileUnaryPostfixExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.UNARYPREFIX: {\r\n expr = this.compileUnaryPrefixExpression(expression, contextualType);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = this.module.createUnreachable();\r\n }\r\n }\r\n\r\n var currentType = this.currentType;\r\n if (conversionKind != ConversionKind.NONE && currentType != contextualType) {\r\n expr = this.convertExpression(expr, currentType, contextualType, conversionKind, wrapMode, expression);\r\n this.currentType = contextualType;\r\n } else if (wrapMode == WrapMode.WRAP) {\r\n expr = this.ensureSmallIntegerWrap(expr, currentType);\r\n }\r\n\r\n if (this.options.sourceMap) this.addDebugLocation(expr, expression.range);\r\n return expr;\r\n }\r\n\r\n compileExpressionRetainType(\r\n expression: Expression,\r\n contextualType: Type,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n return this.compileExpression(\r\n expression,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n wrapMode\r\n );\r\n }\r\n\r\n precomputeExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode\r\n ): ExpressionRef {\r\n return this.precomputeExpressionRef(\r\n this.compileExpression(expression, contextualType, conversionKind, wrapMode)\r\n );\r\n }\r\n\r\n precomputeExpressionRef(expr: ExpressionRef): ExpressionRef {\r\n var module = this.module;\r\n var type = this.currentType;\r\n var nativeType = type.toNativeType();\r\n var funcRef = module.addTemporaryFunction(nativeType, null, expr);\r\n module.runPasses([ \"precompute\" ], funcRef);\r\n var ret = getFunctionBody(funcRef);\r\n module.removeTemporaryFunction();\r\n return ret;\r\n }\r\n\r\n convertExpression(\r\n expr: ExpressionRef,\r\n fromType: Type,\r\n toType: Type,\r\n conversionKind: ConversionKind,\r\n wrapMode: WrapMode,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n assert(conversionKind != ConversionKind.NONE);\r\n var module = this.module;\r\n\r\n // void to any\r\n if (fromType.kind == TypeKind.VOID) {\r\n assert(toType.kind != TypeKind.VOID); // convertExpression should not be called with void -> void\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n reportNode.range, fromType.toString(), toType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // any to void\r\n if (toType.kind == TypeKind.VOID) return module.createDrop(expr);\r\n\r\n if (!fromType.isAssignableTo(toType)) {\r\n if (conversionKind == ConversionKind.IMPLICIT) {\r\n this.error(\r\n DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast,\r\n reportNode.range, fromType.toString(), toType.toString()\r\n ); // recoverable\r\n }\r\n }\r\n\r\n if (fromType.is(TypeFlags.FLOAT)) {\r\n\r\n // float to float\r\n if (toType.is(TypeFlags.FLOAT)) {\r\n if (fromType.kind == TypeKind.F32) {\r\n\r\n // f32 to f64\r\n if (toType.kind == TypeKind.F64) {\r\n expr = module.createUnary(UnaryOp.PromoteF32, expr);\r\n }\r\n\r\n // otherwise f32 to f32\r\n\r\n // f64 to f32\r\n } else if (toType.kind == TypeKind.F32) {\r\n expr = module.createUnary(UnaryOp.DemoteF64, expr);\r\n }\r\n\r\n // otherwise f64 to f64\r\n\r\n // float to int\r\n } else if (toType.is(TypeFlags.INTEGER)) {\r\n\r\n // f32 to int\r\n if (fromType.kind == TypeKind.F32) {\r\n if (toType.is(TypeFlags.SIGNED)) {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF32ToI64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF32ToI32, expr);\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF32ToU64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF32ToU32, expr);\r\n }\r\n }\r\n\r\n // f64 to int\r\n } else {\r\n if (toType.is(TypeFlags.SIGNED)) {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF64ToI64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF64ToI32, expr);\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF64ToU64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF64ToU32, expr);\r\n }\r\n }\r\n }\r\n\r\n // float to void\r\n } else {\r\n assert(toType.flags == TypeFlags.NONE, \"void type expected\");\r\n expr = module.createDrop(expr);\r\n }\r\n\r\n // int to float\r\n } else if (fromType.is(TypeFlags.INTEGER) && toType.is(TypeFlags.FLOAT)) {\r\n\r\n // int to f32\r\n if (toType.kind == TypeKind.F32) {\r\n if (fromType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI64ToF32\r\n : UnaryOp.ConvertU64ToF32,\r\n expr\r\n );\r\n } else {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI32ToF32\r\n : UnaryOp.ConvertU32ToF32,\r\n expr\r\n );\r\n }\r\n\r\n // int to f64\r\n } else {\r\n if (fromType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI64ToF64\r\n : UnaryOp.ConvertU64ToF64,\r\n expr\r\n );\r\n } else {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI32ToF64\r\n : UnaryOp.ConvertU32ToF64,\r\n expr\r\n );\r\n }\r\n }\r\n\r\n // int to int\r\n } else {\r\n // i64 to ...\r\n if (fromType.is(TypeFlags.LONG)) {\r\n\r\n // i64 to i32 or smaller\r\n if (!toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.WrapI64, expr); // discards upper bits\r\n }\r\n\r\n // i32 or smaller to i64\r\n } else if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n toType.is(TypeFlags.SIGNED) ? UnaryOp.ExtendI32 : UnaryOp.ExtendU32,\r\n this.ensureSmallIntegerWrap(expr, fromType) // must clear garbage bits\r\n );\r\n wrapMode = WrapMode.NONE;\r\n\r\n // i32 to i32\r\n } else {\r\n // small i32 to ...\r\n if (fromType.is(TypeFlags.SHORT)) {\r\n // small i32 to larger i32\r\n if (fromType.size < toType.size) {\r\n expr = this.ensureSmallIntegerWrap(expr, fromType); // must clear garbage bits\r\n wrapMode = WrapMode.NONE;\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.currentType = toType;\r\n return wrapMode == WrapMode.WRAP\r\n ? this.ensureSmallIntegerWrap(expr, toType)\r\n : expr;\r\n }\r\n\r\n compileAssertionExpression(expression: AssertionExpression, contextualType: Type): ExpressionRef {\r\n var toType = this.program.resolveType( // reports\r\n expression.toType,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!toType) return this.module.createUnreachable();\r\n return this.compileExpression(expression.expression, toType, ConversionKind.EXPLICIT, WrapMode.NONE);\r\n }\r\n\r\n private f32ModInstance: Function | null = null;\r\n private f64ModInstance: Function | null = null;\r\n private f32PowInstance: Function | null = null;\r\n private f64PowInstance: Function | null = null;\r\n\r\n compileBinaryExpression(\r\n expression: BinaryExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var left = expression.left;\r\n var right = expression.right;\r\n\r\n var leftExpr: ExpressionRef;\r\n var leftType: Type;\r\n var rightExpr: ExpressionRef;\r\n var rightType: Type;\r\n var commonType: Type | null;\r\n\r\n var expr: ExpressionRef;\r\n var compound = false;\r\n\r\n var operator = expression.operator;\r\n switch (operator) {\r\n case Token.LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.LT);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"<\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.LtI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.LtI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtI64\r\n : BinaryOp.LtI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.LtU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtU64\r\n : BinaryOp.LtU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.LtU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.LtF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.LtF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.GT);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \">\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.GtI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.GtI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.GtU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtU64\r\n : BinaryOp.GtU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.GtU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.GtF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.GtF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.LESSTHAN_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.LE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"<=\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.LeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeI64\r\n : BinaryOp.LeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.LeI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.LeU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeU64\r\n : BinaryOp.LeU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.LeU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.LeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.LeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.GREATERTHAN_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.GE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \">=\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.GeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeI64\r\n : BinaryOp.GeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.GeI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.GeU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeU64\r\n : BinaryOp.GeU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.GeU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.GeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.GeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n\r\n case Token.EQUALS_EQUALS_EQUALS:\r\n case Token.EQUALS_EQUALS: {\r\n\r\n // NOTE that this favors correctness, in terms of emitting a binary expression, over\r\n // checking for a possible use of unary EQZ. while the most classic of all optimizations,\r\n // that's not what the source told us to do. for reference, `!left` emits unary EQZ.\r\n\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (operator == Token.EQUALS_EQUALS && this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.EQ);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n // still allow '==' with references\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, operatorTokenToString(expression.operator), leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.EqI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.EqI64\r\n : BinaryOp.EqI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.EqI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.EqF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.EqF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.EXCLAMATION_EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (operator == Token.EXCLAMATION_EQUALS && this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.NE);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n // still allow '!=' with references\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, operatorTokenToString(expression.operator), leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.NeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.NeI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.NeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.NeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.EQUALS: {\r\n return this.compileAssignment(left, right, contextualType);\r\n }\r\n case Token.PLUS_EQUALS: compound = true;\r\n case Token.PLUS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.ADD);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"+\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // addition might overflow\r\n case TypeKind.I16: // ^\r\n case TypeKind.U8: // ^\r\n case TypeKind.U16: // ^\r\n case TypeKind.BOOL: // ^\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.AddI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AddI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.AddF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.AddF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_EQUALS: compound = true;\r\n case Token.MINUS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.SUB);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"-\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // subtraction might overflow\r\n case TypeKind.I16: // ^\r\n case TypeKind.U8: // ^\r\n case TypeKind.U16: // ^\r\n case TypeKind.BOOL: // ^\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.SubI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.SubF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.SubF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.ASTERISK_EQUALS: compound = true;\r\n case Token.ASTERISK: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.MUL);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"*\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.MulI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.MulI64\r\n : BinaryOp.MulI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.MulI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.MulF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.MulF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.ASTERISK_ASTERISK_EQUALS: compound = true;\r\n case Token.ASTERISK_ASTERISK: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.POW);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n let instance: Function | null;\r\n\r\n // Mathf.pow if lhs is f32 (result is f32)\r\n if (this.currentType.kind == TypeKind.F32) {\r\n rightExpr = this.compileExpression(right, Type.f32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (!(instance = this.f32PowInstance)) {\r\n let namespace = this.program.elementsLookup.get(\"Mathf\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"pow\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf.pow\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f32PowInstance = instance = (prototype).resolve();\r\n }\r\n\r\n // Math.pow otherwise (result is f64)\r\n // TODO: should the result be converted back?\r\n } else {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n this.currentType,\r\n Type.f64,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(\r\n right,\r\n Type.f64,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n rightType = this.currentType;\r\n if (!(instance = this.f64PowInstance)) {\r\n let namespace = this.program.elementsLookup.get(\"Math\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"pow\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math.pow\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f64PowInstance = instance = (prototype).resolve();\r\n }\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n case Token.SLASH_EQUALS: compound = true;\r\n case Token.SLASH: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.DIV);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"/\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8: // signed div on signed small integers might overflow, e.g. -128/-1\r\n case TypeKind.I16: // ^\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.DivI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivI64\r\n : BinaryOp.DivI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.DivI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.DivU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.DivU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivU64\r\n : BinaryOp.DivU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.DivU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.DivF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.DivF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.PERCENT_EQUALS: compound = true;\r\n case Token.PERCENT: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.REM);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType);\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP, // !\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"%\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n expr = module.createBinary(BinaryOp.RemI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.RemI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemI64\r\n : BinaryOp.RemI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.RemI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.RemU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.RemU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemU64\r\n : BinaryOp.RemU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.RemU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n let instance = this.f32ModInstance;\r\n if (!instance) {\r\n let namespace = this.program.elementsLookup.get(\"Mathf\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"mod\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Mathf.mod\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f32ModInstance = instance = (prototype).resolve();\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n let instance = this.f64ModInstance;\r\n if (!instance) {\r\n let namespace = this.program.elementsLookup.get(\"Math\");\r\n if (!namespace) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n let prototype = namespace.members ? namespace.members.get(\"mod\") : null;\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n expression.range, \"Math.mod\"\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n this.f64ModInstance = instance = (prototype).resolve();\r\n }\r\n if (!(instance && this.compileFunction(instance))) {\r\n expr = module.createUnreachable();\r\n } else {\r\n expr = this.makeCallDirect(instance, [ leftExpr, rightExpr ]);\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.LESSTHAN_LESSTHAN_EQUALS: compound = true;\r\n case Token.LESSTHAN_LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHL);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShlI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShlI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShlI64\r\n : BinaryOp.ShlI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS: compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType); // must clear garbage bits\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n expr = module.createBinary(BinaryOp.ShrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.ShrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.ShrI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrI64\r\n : BinaryOp.ShrI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShrU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS: compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_SHR_U);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n leftExpr = this.ensureSmallIntegerWrap(leftExpr, leftType); // must clear garbage bits\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n switch (this.currentType.kind) {\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: { // assumes that unsigned shr on unsigned small integers does not overflow\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n }\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShrU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.AMPERSAND_EQUALS: compound = true;\r\n case Token.AMPERSAND: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overloadd\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_AND);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"&\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.AndI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AndI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AndI64\r\n : BinaryOp.AndI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.BAR_EQUALS: compound = true;\r\n case Token.BAR: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_OR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"|\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.OrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.OrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.OrI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.OrI64\r\n : BinaryOp.OrI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.CARET_EQUALS: compound = true;\r\n case Token.CARET: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType.intType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_XOR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, leftExpr, right, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(right, leftType, WrapMode.NONE);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(\r\n leftExpr,\r\n leftType,\r\n leftType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n left\r\n );\r\n rightExpr = this.convertExpression(\r\n rightExpr,\r\n rightType,\r\n rightType = commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n right\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"^\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.XorI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.XorI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.XorI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, operatorTokenToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n\r\n // logical (no overloading)\r\n\r\n case Token.AMPERSAND_AMPERSAND: { // left && right\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n\r\n // simplify if cloning left without side effects is possible\r\n if (expr = module.cloneExpression(leftExpr, true, 0)) {\r\n this.makeIsTrueish(leftExpr, this.currentType);\r\n expr = module.createIf(\r\n this.makeIsTrueish(leftExpr, this.currentType),\r\n rightExpr,\r\n expr\r\n );\r\n\r\n // if not possible, tee left to a temp. local\r\n } else {\r\n let flow = this.currentFunction.flow;\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(\r\n this.currentType,\r\n !flow.canOverflow(leftExpr, this.currentType)\r\n );\r\n expr = module.createIf(\r\n this.makeIsTrueish(\r\n module.createTeeLocal(tempLocal.index, leftExpr),\r\n this.currentType\r\n ),\r\n rightExpr,\r\n module.createGetLocal(\r\n assert(tempLocal).index, // to be sure\r\n this.currentType.toNativeType()\r\n )\r\n );\r\n }\r\n break;\r\n }\r\n case Token.BAR_BAR: { // left || right\r\n leftExpr = this.compileExpressionRetainType(left, contextualType, WrapMode.NONE);\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpression(right, leftType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n rightType = this.currentType;\r\n\r\n // simplify if cloning left without side effects is possible\r\n if (expr = this.module.cloneExpression(leftExpr, true, 0)) {\r\n expr = this.module.createIf(\r\n this.makeIsTrueish(leftExpr, this.currentType),\r\n expr,\r\n rightExpr\r\n );\r\n\r\n // if not possible, tee left to a temp. local\r\n } else {\r\n let flow = this.currentFunction.flow;\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(\r\n this.currentType,\r\n !flow.canOverflow(leftExpr, this.currentType)\r\n );\r\n expr = module.createIf(\r\n this.makeIsTrueish(\r\n module.createTeeLocal(tempLocal.index, leftExpr),\r\n this.currentType\r\n ),\r\n module.createGetLocal(\r\n assert(tempLocal).index, // to be sure\r\n this.currentType.toNativeType()\r\n ),\r\n rightExpr\r\n );\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = this.module.createUnreachable();\r\n }\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(left, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n\r\n compileUnaryOverload(\r\n operatorInstance: Function,\r\n value: Expression,\r\n valueExpr: ExpressionRef,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n var argumentExpressions: Expression[];\r\n var thisArg: ExpressionRef = 0;\r\n if (operatorInstance.is(CommonFlags.INSTANCE)) {\r\n thisArg = valueExpr; // can reuse the previously evaluated expr as the this value here\r\n argumentExpressions = [];\r\n } else {\r\n argumentExpressions = [ value ]; // annotated type might differ -> recompile\r\n }\r\n return this.compileCallDirect(\r\n operatorInstance,\r\n argumentExpressions,\r\n reportNode,\r\n thisArg,\r\n operatorInstance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n }\r\n\r\n compileBinaryOverload(\r\n operatorInstance: Function,\r\n left: Expression,\r\n leftExpr: ExpressionRef,\r\n right: Expression,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n var argumentExpressions: Expression[];\r\n var thisArg: ExpressionRef = 0;\r\n if (operatorInstance.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(operatorInstance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n thisArg = leftExpr; // can reuse the previously evaluated leftExpr as the this value here\r\n argumentExpressions = [ right ];\r\n } else {\r\n argumentExpressions = [ left, right ]; // annotated type of LHS might differ -> recompile\r\n }\r\n var ret = this.compileCallDirect(\r\n operatorInstance,\r\n argumentExpressions,\r\n reportNode,\r\n thisArg,\r\n operatorInstance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n return ret;\r\n }\r\n\r\n compileAssignment(expression: Expression, valueExpression: Expression, contextualType: Type): ExpressionRef {\r\n var program = this.program;\r\n var currentFunction = this.currentFunction;\r\n var target = program.resolveExpression(expression, currentFunction); // reports\r\n if (!target) return this.module.createUnreachable();\r\n\r\n // to compile just the value, we need to know the target's type\r\n var targetType: Type;\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field compiled as a global\r\n return this.module.createUnreachable();\r\n }\r\n assert((target).type != Type.void); // compileGlobal must guarantee this\r\n // fall-through\r\n }\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n targetType = (target).type;\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let prototype = (target).setterPrototype;\r\n if (prototype) {\r\n let instance = prototype.resolve(); // reports\r\n if (!instance) return this.module.createUnreachable();\r\n assert(instance.signature.parameterTypes.length == 1); // parser must guarantee this\r\n targetType = instance.signature.parameterTypes[0];\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n case ElementKind.CLASS: {\r\n if (program.resolvedElementExpression) { // indexed access\r\n let isUnchecked = currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);\r\n if (!indexedSet) {\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, (target).internalName\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, (target).internalName\r\n );\r\n }\r\n return this.module.createUnreachable();\r\n }\r\n assert(indexedSet.signature.parameterTypes.length == 2); // parser must guarantee this\r\n targetType = indexedSet.signature.parameterTypes[1]; // 2nd parameter is the element\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n\r\n // compile the value and do the assignment\r\n assert(targetType != Type.void);\r\n var valueExpr = this.compileExpression(valueExpression, targetType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n return this.compileAssignmentWithValue(\r\n expression,\r\n valueExpr,\r\n contextualType != Type.void\r\n );\r\n }\r\n\r\n compileAssignmentWithValue(\r\n expression: Expression,\r\n valueWithCorrectType: ExpressionRef,\r\n tee: bool = false\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var target = this.program.resolveExpression(expression, this.currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.LOCAL: {\r\n let type = (target).type;\r\n assert(type != Type.void);\r\n this.currentType = tee ? type : Type.void;\r\n if ((target).is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let flow = this.currentFunction.flow;\r\n if (type.is(TypeFlags.SHORT | TypeFlags.INTEGER)) {\r\n flow.setLocalWrapped((target).index, !flow.canOverflow(valueWithCorrectType, type));\r\n }\r\n return tee\r\n ? module.createTeeLocal((target).index, valueWithCorrectType)\r\n : module.createSetLocal((target).index, valueWithCorrectType);\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) return module.createUnreachable();\r\n let type = (target).type;\r\n assert(type != Type.void);\r\n this.currentType = tee ? type : Type.void;\r\n if ((target).is(CommonFlags.CONST)) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range,\r\n target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n valueWithCorrectType = this.ensureSmallIntegerWrap(valueWithCorrectType, type); // guaranteed\r\n if (tee) {\r\n let nativeType = type.toNativeType();\r\n let internalName = target.internalName;\r\n return module.createBlock(null, [ // emulated teeGlobal\r\n module.createSetGlobal(internalName, valueWithCorrectType),\r\n module.createGetGlobal(internalName, nativeType)\r\n ], nativeType);\r\n } else {\r\n return module.createSetGlobal(target.internalName, valueWithCorrectType);\r\n }\r\n }\r\n case ElementKind.FIELD: {\r\n const declaration = (target).declaration;\r\n if (\r\n (target).is(CommonFlags.READONLY) &&\r\n !(\r\n this.currentFunction.is(CommonFlags.CONSTRUCTOR) ||\r\n declaration == null ||\r\n declaration.initializer != null\r\n )\r\n ) {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, (target).internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let type = (target).type;\r\n this.currentType = tee ? type : Type.void;\r\n let nativeType = type.toNativeType();\r\n if (type.kind == TypeKind.BOOL) {\r\n // make sure bools are wrapped (usually are) when storing as 8 bits\r\n valueWithCorrectType = this.ensureSmallIntegerWrap(valueWithCorrectType, type);\r\n }\r\n if (tee) {\r\n let currentFunction = this.currentFunction;\r\n let flow = currentFunction.flow;\r\n let tempLocal = currentFunction.getAndFreeTempLocal(\r\n type,\r\n !flow.canOverflow(valueWithCorrectType, type)\r\n );\r\n let tempLocalIndex = tempLocal.index;\r\n // TODO: simplify if valueWithCorrectType has no side effects\r\n return module.createBlock(null, [\r\n module.createSetLocal(tempLocalIndex, valueWithCorrectType),\r\n module.createStore(\r\n type.byteSize,\r\n thisExpr,\r\n module.createGetLocal(tempLocalIndex, nativeType),\r\n nativeType,\r\n (target).memoryOffset\r\n ),\r\n module.createGetLocal(tempLocalIndex, nativeType)\r\n ], nativeType);\r\n } else {\r\n return module.createStore(\r\n type.byteSize,\r\n thisExpr,\r\n valueWithCorrectType,\r\n nativeType,\r\n (target).memoryOffset\r\n );\r\n }\r\n }\r\n case ElementKind.PROPERTY: {\r\n let setterPrototype = (target).setterPrototype;\r\n if (setterPrototype) {\r\n let setterInstance = setterPrototype.resolve(); // reports\r\n if (!setterInstance) return module.createUnreachable();\r\n\r\n // call just the setter if the return value isn't of interest\r\n if (!tee) {\r\n if (setterInstance.is(CommonFlags.INSTANCE)) {\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n return this.makeCallDirect(setterInstance, [ thisExpr, valueWithCorrectType ]);\r\n } else {\r\n return this.makeCallDirect(setterInstance, [ valueWithCorrectType ]);\r\n }\r\n }\r\n\r\n // otherwise call the setter first, then the getter\r\n let getterPrototype = (target).getterPrototype;\r\n assert(getterPrototype != null); // must have one if there is a setter\r\n let getterInstance = (getterPrototype).resolve(); // reports\r\n if (!getterInstance) return module.createUnreachable();\r\n let returnType = getterInstance.signature.returnType;\r\n let nativeReturnType = returnType.toNativeType();\r\n if (setterInstance.is(CommonFlags.INSTANCE)) {\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(returnType, false);\r\n let tempLocalIndex = tempLocal.index;\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ // set and remember the target\r\n module.createTeeLocal(tempLocalIndex, thisExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(getterInstance, [ // get from remembered target\r\n module.createGetLocal(tempLocalIndex, nativeReturnType)\r\n ])\r\n ], nativeReturnType);\r\n } else {\r\n // note that this must be performed here because `resolved` is shared\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ valueWithCorrectType ]),\r\n this.makeCallDirect(getterInstance)\r\n ], nativeReturnType);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, target.internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n case ElementKind.CLASS: {\r\n let elementExpression = this.program.resolvedElementExpression;\r\n if (elementExpression) {\r\n let isUnchecked = this.currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET, isUnchecked);\r\n if (!indexedSet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, target.internalName\r\n );\r\n this.currentType = tee ? indexedGet.signature.returnType : Type.void;\r\n return module.createUnreachable();\r\n }\r\n let targetType = (target).type;\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n let elementExpr = this.compileExpression(\r\n elementExpression,\r\n Type.i32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (tee) {\r\n let currentFunction = this.currentFunction;\r\n let tempLocalTarget = currentFunction.getTempLocal(targetType, false);\r\n let tempLocalElement = currentFunction.getAndFreeTempLocal(this.currentType, false);\r\n let returnType = indexedGet.signature.returnType;\r\n this.currentFunction.freeTempLocal(tempLocalTarget);\r\n return module.createBlock(null, [\r\n this.makeCallDirect(indexedSet, [\r\n module.createTeeLocal(tempLocalTarget.index, thisExpr),\r\n module.createTeeLocal(tempLocalElement.index, elementExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(indexedGet, [\r\n module.createGetLocal(tempLocalTarget.index, tempLocalTarget.type.toNativeType()),\r\n module.createGetLocal(tempLocalElement.index, tempLocalElement.type.toNativeType())\r\n ])\r\n ], returnType.toNativeType());\r\n } else {\r\n return this.makeCallDirect(indexedSet, [\r\n thisExpr,\r\n elementExpr,\r\n valueWithCorrectType\r\n ]);\r\n }\r\n }\r\n // fall-through\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n compileCallExpression(expression: CallExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var target = this.program.resolveExpression(expression.expression, currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n var signature: Signature | null;\r\n var indexArg: ExpressionRef;\r\n switch (target.kind) {\r\n\r\n // direct call: concrete function\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let prototype = target;\r\n let typeArguments = expression.typeArguments;\r\n\r\n // builtins handle present respectively omitted type arguments on their own\r\n if (prototype.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) {\r\n return this.compileCallExpressionBuiltin(prototype, expression, contextualType);\r\n }\r\n\r\n let instance: Function | null = null;\r\n\r\n // resolve generic call if type arguments have been provided\r\n if (typeArguments) {\r\n if (!prototype.is(CommonFlags.GENERIC)) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n expression.expression.range, prototype.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n instance = prototype.resolveUsingTypeArguments( // reports\r\n typeArguments,\r\n this.currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n\r\n // infer generic call if type arguments have been omitted\r\n } else if (prototype.is(CommonFlags.GENERIC)) {\r\n let inferredTypes = new Map();\r\n let typeParameters = assert(prototype.declaration.typeParameters);\r\n let numTypeParameters = typeParameters.length;\r\n for (let i = 0; i < numTypeParameters; ++i) {\r\n inferredTypes.set(typeParameters[i].name.text, null);\r\n }\r\n // let numInferred = 0;\r\n let parameterTypes = prototype.declaration.signature.parameters;\r\n let numParameterTypes = parameterTypes.length;\r\n let argumentExpressions = expression.arguments;\r\n let numArguments = argumentExpressions.length;\r\n let argumentExprs = new Array(numArguments);\r\n for (let i = 0; i < numParameterTypes; ++i) {\r\n let typeNode = parameterTypes[i].type;\r\n let name = typeNode.kind == NodeKind.TYPE ? (typeNode).name.text : null;\r\n let argumentExpression = i < numArguments\r\n ? argumentExpressions[i]\r\n : prototype.declaration.signature.parameters[i].initializer;\r\n if (!argumentExpression) { // missing initializer -> too few arguments\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n expression.range, numParameterTypes.toString(10), numArguments.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (name !== null && inferredTypes.has(name)) {\r\n let inferredType = inferredTypes.get(name);\r\n if (inferredType) {\r\n argumentExprs[i] = this.compileExpressionRetainType(argumentExpression, inferredType, WrapMode.NONE);\r\n let commonType: Type | null;\r\n if (!(commonType = Type.commonCompatible(inferredType, this.currentType, true))) {\r\n if (!(commonType = Type.commonCompatible(inferredType, this.currentType, false))) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n parameterTypes[i].type.range, this.currentType.toString(), inferredType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n inferredType = commonType;\r\n } else {\r\n argumentExprs[i] = this.compileExpressionRetainType(argumentExpression, Type.i32, WrapMode.NONE);\r\n inferredType = this.currentType;\r\n // ++numInferred;\r\n }\r\n inferredTypes.set(name, inferredType);\r\n } else {\r\n let concreteType = this.program.resolveType(\r\n parameterTypes[i].type,\r\n this.currentFunction.flow.contextualTypeArguments,\r\n true\r\n );\r\n if (!concreteType) return module.createUnreachable();\r\n argumentExprs[i] = this.compileExpression(\r\n argumentExpression,\r\n concreteType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n }\r\n let resolvedTypeArguments = new Array(numTypeParameters);\r\n for (let i = 0; i < numTypeParameters; ++i) {\r\n let inferredType = assert(inferredTypes.get(typeParameters[i].name.text)); // TODO\r\n resolvedTypeArguments[i] = inferredType;\r\n }\r\n instance = prototype.resolve(\r\n resolvedTypeArguments,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n return this.makeCallDirect(instance, argumentExprs);\r\n // TODO: this skips inlining because inlining requires compiling its temporary locals in\r\n // the scope of the inlined flow. might need another mechanism to lock temp. locals early,\r\n // so inlining can be performed in `makeCallDirect` instead?\r\n\r\n // otherwise resolve the non-generic call as usual\r\n } else {\r\n instance = prototype.resolve(\r\n null,\r\n this.currentFunction.flow.contextualTypeArguments\r\n );\r\n }\r\n if (!instance) return this.module.createUnreachable();\r\n\r\n // compile 'this' expression if an instance method\r\n let thisExpr: ExpressionRef = 0;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n thisExpr = this.compileExpressionRetainType(\r\n assert(this.program.resolvedThisExpression),\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n }\r\n\r\n return this.compileCallDirect(\r\n instance,\r\n expression.arguments,\r\n expression,\r\n thisExpr,\r\n instance.hasDecorator(DecoratorFlags.INLINE)\r\n );\r\n }\r\n\r\n // indirect call: index argument with signature (non-generic, can't be inlined)\r\n case ElementKind.LOCAL: {\r\n if (signature = (target).type.signatureReference) {\r\n indexArg = module.createGetLocal((target).index, NativeType.I32);\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (signature = (target).type.signatureReference) {\r\n indexArg = module.createGetGlobal((target).internalName, (target).type.toNativeType());\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FIELD: {\r\n let type = (target).type;\r\n if (signature = type.signatureReference) {\r\n let thisExpression = assert(this.program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n indexArg = module.createLoad(\r\n 4,\r\n false,\r\n thisExpr,\r\n NativeType.I32,\r\n (target).memoryOffset\r\n );\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (target).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FUNCTION_TARGET: {\r\n signature = (target).signature;\r\n indexArg = this.compileExpression(\r\n expression.expression,\r\n (target).type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n break;\r\n }\r\n case ElementKind.PROPERTY: // TODO\r\n\r\n // not supported\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n return this.compileCallIndirect(\r\n signature,\r\n indexArg,\r\n expression.arguments,\r\n expression\r\n );\r\n }\r\n\r\n private compileCallExpressionBuiltin(\r\n prototype: FunctionPrototype,\r\n expression: CallExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var expr = compileBuiltinCall( // reports\r\n this,\r\n prototype,\r\n prototype.resolveBuiltinTypeArguments(\r\n expression.typeArguments,\r\n this.currentFunction.flow.contextualTypeArguments\r\n ),\r\n expression.arguments,\r\n contextualType,\r\n expression\r\n );\r\n if (!expr) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n return expr;\r\n }\r\n\r\n /**\r\n * Checks that a call with the given number as arguments can be performed according to the\r\n * specified signature.\r\n */\r\n checkCallSignature(\r\n signature: Signature,\r\n numArguments: i32,\r\n hasThis: bool,\r\n reportNode: Node\r\n ): bool {\r\n\r\n // cannot call an instance method without a `this` argument (TODO: `.call`?)\r\n var thisType = signature.thisType;\r\n if (hasThis != (thisType != null)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported, // TODO: better message?\r\n reportNode.range\r\n );\r\n return false;\r\n }\r\n\r\n // not yet implemented (TODO: maybe some sort of an unmanaged/lightweight array?)\r\n var hasRest = signature.hasRest;\r\n if (hasRest) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return false;\r\n }\r\n\r\n var minimum = signature.requiredParameters;\r\n var maximum = signature.parameterTypes.length;\r\n\r\n // must at least be called with required arguments\r\n if (numArguments < minimum) {\r\n this.error(\r\n minimum < maximum\r\n ? DiagnosticCode.Expected_at_least_0_arguments_but_got_1\r\n : DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, minimum.toString(), numArguments.toString()\r\n );\r\n return false;\r\n }\r\n\r\n // must not be called with more than the maximum arguments\r\n if (numArguments > maximum && !hasRest) {\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, maximum.toString(), numArguments.toString()\r\n );\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** Compiles a direct call to a concrete function. */\r\n compileCallDirect(\r\n instance: Function,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0,\r\n inline: bool = false\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n var signature = instance.signature;\r\n\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n numArguments,\r\n thisArg != 0,\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n // Inline if explicitly requested\r\n if (inline) {\r\n assert(!instance.is(CommonFlags.TRAMPOLINE)); // doesn't make sense\r\n return this.compileCallInlineUnchecked(instance, argumentExpressions, reportNode, thisArg);\r\n }\r\n\r\n // Otherwise compile to just a call\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallDirect(instance, operands);\r\n }\r\n\r\n // Depends on being pre-checked in compileCallDirect\r\n private compileCallInlineUnchecked(\r\n instance: Function,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n var signature = instance.signature;\r\n var currentFunction = this.currentFunction;\r\n var module = this.module;\r\n var declaration = instance.prototype.declaration;\r\n\r\n // Create an empty child flow with its own scope and mark it for inlining\r\n var previousFlow = currentFunction.flow;\r\n var returnLabel = instance.internalName + \"|inlined.\" + (instance.nextInlineId++).toString(10);\r\n var returnType = instance.signature.returnType;\r\n var flow = Flow.create(currentFunction);\r\n flow.set(FlowFlags.INLINE_CONTEXT);\r\n flow.returnLabel = returnLabel;\r\n flow.returnType = returnType;\r\n flow.contextualTypeArguments = instance.contextualTypeArguments;\r\n\r\n // Convert provided call arguments to temporary locals. It is important that these are compiled\r\n // here, with their respective locals being blocked. There is no 'makeCallInline'.\r\n var body = [];\r\n if (thisArg) {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n if (getExpressionId(thisArg) == ExpressionId.GetLocal) {\r\n flow.addScopedLocalAlias(\r\n getGetLocalIndex(thisArg),\r\n (parent).type,\r\n \"this\"\r\n );\r\n } else {\r\n let thisLocal = flow.addScopedLocal((parent).type, \"this\", false);\r\n body.push(\r\n module.createSetLocal(thisLocal.index, thisArg)\r\n );\r\n }\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i) {\r\n let paramExpr = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n if (getExpressionId(paramExpr) == ExpressionId.GetLocal) {\r\n flow.addScopedLocalAlias(\r\n getGetLocalIndex(paramExpr),\r\n parameterTypes[i],\r\n signature.getParameterName(i)\r\n );\r\n // inherits wrap status\r\n } else {\r\n let argumentLocal = flow.addScopedLocal(\r\n parameterTypes[i],\r\n signature.getParameterName(i),\r\n !flow.canOverflow(paramExpr, parameterTypes[i])\r\n );\r\n body.push(\r\n module.createSetLocal(argumentLocal.index, paramExpr)\r\n );\r\n }\r\n }\r\n\r\n // Compile optional parameter initializers in the scope of the inlined flow\r\n currentFunction.flow = flow;\r\n var numParameters = signature.parameterTypes.length;\r\n for (let i = numArguments; i < numParameters; ++i) {\r\n let initExpr = this.compileExpression(\r\n assert(declaration.signature.parameters[i].initializer),\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n );\r\n let argumentLocal = flow.addScopedLocal(\r\n parameterTypes[i],\r\n signature.getParameterName(i),\r\n !flow.canOverflow(initExpr, parameterTypes[i])\r\n );\r\n body.push(\r\n module.createSetLocal(argumentLocal.index, initExpr)\r\n );\r\n }\r\n\r\n // Compile the called function's body in the scope of the inlined flow\r\n var bodyStatement = assert(declaration.body);\r\n if (bodyStatement.kind == NodeKind.BLOCK) {\r\n let statements = (bodyStatement).statements;\r\n for (let i = 0, k = statements.length; i < k; ++i) {\r\n let stmt = this.compileStatement(statements[i]);\r\n if (getExpressionId(stmt) != ExpressionId.Nop) {\r\n body.push(stmt);\r\n if (flow.isAny(FlowFlags.TERMINATED)) 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.TERMINATED)) {\r\n this.error(\r\n DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,\r\n declaration.signature.returnType.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n return module.createBlock(returnLabel, body, returnType.toNativeType());\r\n }\r\n\r\n /** Gets the trampoline for the specified function. */\r\n ensureTrampoline(original: Function): Function {\r\n // A trampoline is a function that takes a fixed amount of operands with some of them possibly\r\n // being zeroed. It takes one additional argument denoting the number of actual operands\r\n // provided to the call, and takes appropriate steps to initialize zeroed operands to their\r\n // default values using the optional parameter initializers of the original function. Doing so\r\n // allows calls to functions with optional parameters to circumvent the trampoline when all\r\n // parameters are provided as a fast route, respectively setting up omitted operands in a proper\r\n // context otherwise.\r\n var trampoline = original.trampoline;\r\n if (trampoline) return trampoline;\r\n\r\n var originalSignature = original.signature;\r\n var originalName = original.internalName;\r\n var originalParameterTypes = originalSignature.parameterTypes;\r\n var originalParameterDeclarations = original.prototype.declaration.signature.parameters;\r\n var commonReturnType = originalSignature.returnType;\r\n var commonThisType = originalSignature.thisType;\r\n var isInstance = original.is(CommonFlags.INSTANCE);\r\n\r\n // arguments excl. `this`, operands incl. `this`\r\n var minArguments = originalSignature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = originalParameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (isInstance) {\r\n ++minOperands;\r\n ++maxOperands;\r\n }\r\n var numOptional = assert(maxOperands - minOperands);\r\n\r\n var forwardedOperands = new Array(minOperands);\r\n var operandIndex = 0;\r\n\r\n // forward `this` if applicable\r\n var module = this.module;\r\n if (isInstance) {\r\n forwardedOperands[0] = module.createGetLocal(0, this.options.nativeSizeType);\r\n operandIndex = 1;\r\n }\r\n\r\n // forward required arguments\r\n for (let i = 0; i < minArguments; ++i, ++operandIndex) {\r\n forwardedOperands[operandIndex] = module.createGetLocal(operandIndex, originalParameterTypes[i].toNativeType());\r\n }\r\n assert(operandIndex == minOperands);\r\n\r\n // create the trampoline element\r\n var trampolineSignature = new Signature(originalParameterTypes, commonReturnType, commonThisType);\r\n var trampolineName = originalName + \"|trampoline\";\r\n trampolineSignature.requiredParameters = maxArguments;\r\n trampoline = new Function(\r\n original.prototype,\r\n trampolineName,\r\n trampolineSignature,\r\n original.parent,\r\n original.contextualTypeArguments\r\n );\r\n trampoline.set(original.flags | CommonFlags.TRAMPOLINE | CommonFlags.COMPILED);\r\n original.trampoline = trampoline;\r\n\r\n // compile initializers of omitted arguments in scope of the trampoline function\r\n // this is necessary because initializers might need additional locals and a proper this context\r\n var previousFunction = this.currentFunction;\r\n this.currentFunction = trampoline;\r\n\r\n // create a br_table switching over the number of optional parameters provided\r\n var numNames = numOptional + 1; // incl. outer block\r\n var names = new Array(numNames);\r\n var ofN = \"of\" + numOptional.toString(10);\r\n for (let i = 0; i < numNames; ++i) {\r\n let label = i.toString(10) + ofN;\r\n names[i] = label;\r\n }\r\n var body = module.createBlock(names[0], [\r\n module.createBlock(\"oob\", [\r\n module.createSwitch(names, \"oob\",\r\n // condition is number of provided optional arguments, so subtract required arguments\r\n minArguments\r\n ? module.createBinary(\r\n BinaryOp.SubI32,\r\n module.createGetGlobal(\"~argc\", NativeType.I32),\r\n module.createI32(minArguments)\r\n )\r\n : module.createGetGlobal(\"~argc\", NativeType.I32)\r\n )\r\n ]),\r\n module.createUnreachable()\r\n ]);\r\n for (let i = 0; i < numOptional; ++i, ++operandIndex) {\r\n let type = originalParameterTypes[minArguments + i];\r\n let declaration = originalParameterDeclarations[minArguments + i];\r\n let initializer = declaration.initializer;\r\n let initExpr: ExpressionRef;\r\n if (initializer) {\r\n initExpr = module.createSetLocal(operandIndex,\r\n this.compileExpression(\r\n initializer,\r\n type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.WRAP\r\n )\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Optional_parameter_must_have_an_initializer,\r\n declaration.range\r\n );\r\n initExpr = module.createUnreachable();\r\n }\r\n body = module.createBlock(names[i + 1], [\r\n body,\r\n initExpr,\r\n ]);\r\n forwardedOperands[operandIndex] = module.createGetLocal(operandIndex, type.toNativeType());\r\n }\r\n this.currentFunction = previousFunction;\r\n assert(operandIndex == maxOperands);\r\n\r\n var funcRef = module.addFunction(\r\n trampolineName,\r\n this.ensureFunctionType(\r\n trampolineSignature.parameterTypes,\r\n trampolineSignature.returnType,\r\n trampolineSignature.thisType\r\n ),\r\n typesToNativeTypes(trampoline.additionalLocals),\r\n module.createBlock(null, [\r\n body,\r\n module.createCall(\r\n originalName,\r\n forwardedOperands,\r\n commonReturnType.toNativeType()\r\n )\r\n ], commonReturnType.toNativeType())\r\n );\r\n trampoline.finalize(module, funcRef);\r\n return trampoline;\r\n }\r\n\r\n /** Makes sure that the argument count helper global is present and returns its name. */\r\n private ensureArgcVar(): string {\r\n var internalName = \"~argc\";\r\n if (!this.argcVar) {\r\n let module = this.module;\r\n this.argcVar = module.addGlobal(\r\n internalName,\r\n NativeType.I32,\r\n true,\r\n module.createI32(0)\r\n );\r\n }\r\n return internalName;\r\n }\r\n\r\n /** Makes sure that the argument count helper setter is present and returns its name. */\r\n private ensureArgcSet(): string {\r\n var internalName = \"~setargc\";\r\n if (!this.argcSet) {\r\n let module = this.module;\r\n this.argcSet = module.addFunction(internalName,\r\n this.ensureFunctionType([ Type.u32 ], Type.void),\r\n null,\r\n module.createSetGlobal(this.ensureArgcVar(),\r\n module.createGetLocal(0, NativeType.I32)\r\n )\r\n );\r\n module.addFunctionExport(internalName, \"_setargc\");\r\n }\r\n return internalName;\r\n }\r\n\r\n /** Creates a direct call to the specified function. */\r\n makeCallDirect(\r\n instance: Function,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var numOperands = operands ? operands.length : 0;\r\n var numArguments = numOperands;\r\n var minArguments = instance.signature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = instance.signature.parameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n ++minOperands;\r\n ++maxOperands;\r\n --numArguments;\r\n }\r\n assert(numOperands >= minOperands);\r\n\r\n var module = this.module;\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n var returnType = instance.signature.returnType;\r\n var isCallImport = instance.is(CommonFlags.MODULE_IMPORT);\r\n\r\n // fill up omitted arguments with their initializers, if constant, otherwise with zeroes.\r\n if (numOperands < maxOperands) {\r\n if (!operands) {\r\n operands = new Array(maxOperands);\r\n operands.length = 0;\r\n }\r\n let parameterTypes = instance.signature.parameterTypes;\r\n let parameterNodes = instance.prototype.declaration.signature.parameters;\r\n let allOptionalsAreConstant = true;\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n let initializer = parameterNodes[i].initializer;\r\n if (!(initializer !== null && nodeIsConstantValue(initializer.kind))) {\r\n allOptionalsAreConstant = false;\r\n break;\r\n }\r\n }\r\n if (allOptionalsAreConstant) { // inline into the call\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(\r\n this.compileExpression(\r\n parameterNodes[i].initializer,\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n )\r\n );\r\n }\r\n } else { // otherwise fill up with zeroes and call the trampoline\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(parameterTypes[i].toNativeZero(module));\r\n }\r\n if (!isCallImport) {\r\n let original = instance;\r\n instance = this.ensureTrampoline(instance);\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n instance.flow.flags = original.flow.flags;\r\n this.program.instancesLookup.set(instance.internalName, instance); // so canOverflow can find it\r\n let nativeReturnType = returnType.toNativeType();\r\n this.currentType = returnType;\r\n return module.createBlock(null, [\r\n module.createSetGlobal(this.ensureArgcVar(), module.createI32(numArguments)),\r\n module.createCall(instance.internalName, operands, nativeReturnType)\r\n ], nativeReturnType);\r\n }\r\n }\r\n }\r\n\r\n // otherwise just call through\r\n this.currentType = returnType;\r\n if (isCallImport) return module.createCallImport(instance.internalName, operands, returnType.toNativeType());\r\n var ret = module.createCall(instance.internalName, operands, returnType.toNativeType());\r\n return ret;\r\n }\r\n\r\n /** Compiles an indirect call using an index argument and a signature. */\r\n compileCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n numArguments,\r\n thisArg != 0,\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallIndirect(signature, indexArg, operands);\r\n }\r\n\r\n /** Creates an indirect call to the function at `indexArg` in the function table. */\r\n makeCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var numOperands = operands ? operands.length : 0;\r\n var numArguments = numOperands;\r\n var minArguments = signature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = signature.parameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (signature.thisType) {\r\n ++minOperands;\r\n ++maxOperands;\r\n --numArguments;\r\n }\r\n assert(numOperands >= minOperands);\r\n\r\n this.ensureFunctionType(signature.parameterTypes, signature.returnType, signature.thisType);\r\n var module = this.module;\r\n\r\n // fill up omitted arguments with zeroes\r\n if (numOperands < maxOperands) {\r\n if (!operands) {\r\n operands = new Array(maxOperands);\r\n operands.length = 0;\r\n }\r\n let parameterTypes = signature.parameterTypes;\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(parameterTypes[i].toNativeZero(module));\r\n }\r\n }\r\n\r\n var returnType = signature.returnType;\r\n this.currentType = returnType;\r\n return module.createBlock(null, [\r\n module.createSetGlobal(this.ensureArgcVar(), // might still be calling a trampoline\r\n module.createI32(numArguments)\r\n ),\r\n module.createCallIndirect(indexArg, operands, signature.toSignatureString())\r\n ], returnType.toNativeType()); // not necessarily wrapped\r\n }\r\n\r\n compileCommaExpression(expression: CommaExpression, contextualType: Type): ExpressionRef {\r\n var expressions = expression.expressions;\r\n var numExpressions = expressions.length;\r\n var exprs = new Array(numExpressions--);\r\n for (let i = 0; i < numExpressions; ++i) {\r\n exprs[i] = this.compileExpression(\r\n expressions[i],\r\n Type.void, // drop all\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n exprs[numExpressions] = this.compileExpression(\r\n expressions[numExpressions],\r\n contextualType, // except last\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n return this.module.createBlock(null, exprs, this.currentType.toNativeType());\r\n }\r\n\r\n compileElementAccessExpression(expression: ElementAccessExpression, contextualType: Type): ExpressionRef {\r\n var target = this.program.resolveElementAccess(expression, this.currentFunction); // reports\r\n if (!target) return this.module.createUnreachable();\r\n switch (target.kind) {\r\n case ElementKind.CLASS: {\r\n let isUnchecked = this.currentFunction.flow.is(FlowFlags.UNCHECKED_CONTEXT);\r\n let indexedGet = (target).lookupOverload(OperatorKind.INDEXED_GET, isUnchecked);\r\n if (!indexedGet) {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.expression.range, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n let thisArg = this.compileExpression(\r\n expression.expression,\r\n (target).type,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n return this.compileCallDirect(indexedGet, [\r\n expression.elementExpression\r\n ], expression, thisArg);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileFunctionExpression(expression: FunctionExpression, contextualType: Type): ExpressionRef {\r\n var declaration = expression.declaration;\r\n var name = declaration.name;\r\n var simpleName = (name.text.length\r\n ? name.text\r\n : \"anonymous\") + \"|\" + this.functionTable.length.toString(10);\r\n var currentFunction = this.currentFunction;\r\n var prototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n currentFunction.internalName + INNER_DELIMITER + simpleName,\r\n declaration,\r\n null,\r\n DecoratorFlags.NONE\r\n );\r\n var flow = currentFunction.flow;\r\n var instance = this.compileFunctionUsingTypeArguments(\r\n prototype,\r\n [],\r\n flow.contextualTypeArguments,\r\n flow,\r\n declaration\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n this.currentType = instance.signature.type; // TODO: get cached type?\r\n // NOTE that, in order to make this work in every case, the function must be represented by a\r\n // value, so we add it and rely on the optimizer to figure out where it can be called directly.\r\n var index = this.ensureFunctionTableEntry(instance); // reports\r\n return index < 0\r\n ? this.module.createUnreachable()\r\n : this.module.createI32(index);\r\n }\r\n\r\n /**\r\n * Compiles an identifier in the specified context.\r\n * @param retainConstantType Retains the type of inlined constants if `true`, otherwise\r\n * precomputes them according to context.\r\n */\r\n compileIdentifierExpression(\r\n expression: IdentifierExpression,\r\n contextualType: Type,\r\n retainConstantType: bool\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // check special keywords first\r\n switch (expression.kind) {\r\n case NodeKind.NULL: {\r\n let options = this.options;\r\n if (!contextualType.classReference) {\r\n this.currentType = options.usizeType;\r\n }\r\n return options.isWasm64\r\n ? module.createI64(0)\r\n : module.createI32(0);\r\n }\r\n case NodeKind.TRUE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(1);\r\n }\r\n case NodeKind.FALSE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(0);\r\n }\r\n case NodeKind.THIS: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n this.currentType = scopedThis.type;\r\n return module.createGetLocal(scopedThis.index, scopedThis.type.toNativeType());\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let thisType = (parent).type;\r\n if (currentFunction.is(CommonFlags.CONSTRUCTOR)) {\r\n if (!flow.is(FlowFlags.ALLOCATES)) {\r\n flow.set(FlowFlags.ALLOCATES);\r\n // must be conditional because `this` could have been provided by a derived class\r\n this.currentType = thisType;\r\n return module.createTeeLocal(0,\r\n this.makeConditionalAllocate(parent, expression)\r\n );\r\n }\r\n }\r\n this.currentType = thisType;\r\n return module.createGetLocal(0, thisType.toNativeType());\r\n }\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n case NodeKind.SUPER: {\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n let scopedThisClass = assert(scopedThis.type.classReference);\r\n let base = scopedThisClass.base;\r\n if (base) {\r\n this.currentType = base.type;\r\n return module.createGetLocal(scopedThis.index, base.type.toNativeType());\r\n }\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let base = (parent).base;\r\n if (base) {\r\n let superType = base.type;\r\n this.currentType = superType;\r\n return module.createGetLocal(0, superType.toNativeType());\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise resolve\r\n var target = this.program.resolveIdentifier( // reports\r\n expression,\r\n currentFunction,\r\n this.currentEnum\r\n );\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.LOCAL: {\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n let localType = (target).type;\r\n let localIndex = (target).index;\r\n assert(localIndex >= 0);\r\n this.currentType = localType;\r\n return this.module.createGetLocal(localIndex, localType.toNativeType());\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field\r\n return this.module.createUnreachable();\r\n }\r\n let globalType = (target).type;\r\n assert(globalType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return this.module.createGetGlobal((target).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // here: if referenced from within the same enum\r\n if (!target.is(CommonFlags.COMPILED)) {\r\n this.error(\r\n DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,\r\n expression.range\r\n );\r\n this.currentType = Type.i32;\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.module.createI32((target).constantValue);\r\n }\r\n return this.module.createGetGlobal((target).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let instance = (target).resolve(\r\n null,\r\n currentFunction.flow.contextualTypeArguments\r\n );\r\n if (!(instance && this.compileFunction(instance))) return module.createUnreachable();\r\n let index = this.ensureFunctionTableEntry(instance);\r\n this.currentType = instance.signature.type;\r\n return this.module.createI32(index);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileInstanceOfExpression(\r\n expression: InstanceOfExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n // NOTE that this differs from TypeScript in that the rhs is a type, not an expression. at the\r\n // time of implementation, this seemed more useful because dynamic rhs expressions are not\r\n // possible in AS anyway.\r\n var expr = this.compileExpressionRetainType(expression.expression, this.options.usizeType, WrapMode.NONE);\r\n var type = this.currentType;\r\n var isType = this.program.resolveType(expression.isType);\r\n this.currentType = Type.bool;\r\n if (!isType) return module.createUnreachable();\r\n return type.is(TypeFlags.NULLABLE) && !isType.is(TypeFlags.NULLABLE)\r\n ? type.nonNullableType.isAssignableTo(isType)\r\n ? module.createBinary( // not precomputeable\r\n type.is(TypeFlags.LONG)\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n expr,\r\n type.toNativeZero(module)\r\n )\r\n : module.createI32(0)\r\n : module.createI32(type.isAssignableTo(isType, true) ? 1 : 0);\r\n }\r\n\r\n compileLiteralExpression(\r\n expression: LiteralExpression,\r\n contextualType: Type,\r\n implicitNegate: bool = false\r\n ): ExpressionRef {\r\n var module = this.module;\r\n\r\n switch (expression.literalKind) {\r\n case LiteralKind.ARRAY: {\r\n assert(!implicitNegate);\r\n let classType = contextualType.classReference;\r\n if (\r\n classType &&\r\n classType.prototype == this.program.arrayPrototype\r\n ) {\r\n return this.compileArrayLiteral(\r\n assert(classType.typeArguments)[0],\r\n (expression).elementExpressions,\r\n expression\r\n );\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n case LiteralKind.FLOAT: {\r\n let floatValue = (expression).value;\r\n if (implicitNegate) {\r\n floatValue = -floatValue;\r\n }\r\n if (contextualType == Type.f32) {\r\n return module.createF32(floatValue);\r\n }\r\n this.currentType = Type.f64;\r\n return module.createF64(floatValue);\r\n }\r\n case LiteralKind.INTEGER: {\r\n let intValue = (expression).value;\r\n if (implicitNegate) {\r\n intValue = i64_sub(\r\n i64_new(0),\r\n intValue\r\n );\r\n }\r\n switch (contextualType.kind) {\r\n\r\n // compile to contextualType if matching\r\n\r\n case TypeKind.I8: {\r\n if (i64_is_i8(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U8: {\r\n if (i64_is_u8(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.I16: {\r\n if (i64_is_i16(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U16: {\r\n if (i64_is_u16(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n if (i64_is_i32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n if (i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.BOOL: {\r\n if (i64_is_bool(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n if (!this.options.isWasm64) {\r\n if (i64_is_i32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.USIZE: {\r\n if (!this.options.isWasm64) {\r\n if (i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.F32: {\r\n if (i64_is_f32(intValue)) return module.createF32(i64_to_f32(intValue));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n if (i64_is_f64(intValue)) return module.createF64(i64_to_f64(intValue));\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n break; // compiles to best fitting type below, being dropped\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise compile to best fitting native type\r\n\r\n if (i64_is_i32(intValue)) {\r\n this.currentType = Type.i32;\r\n return module.createI32(i64_low(intValue));\r\n } else if (i64_is_u32(intValue)) {\r\n this.currentType = Type.u32;\r\n return module.createI32(i64_low(intValue));\r\n } else {\r\n this.currentType = Type.i64;\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n }\r\n case LiteralKind.STRING: {\r\n assert(!implicitNegate);\r\n return this.compileStaticString((expression).value);\r\n }\r\n // case LiteralKind.OBJECT:\r\n // case LiteralKind.REGEXP:\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n\r\n compileStaticString(stringValue: string): ExpressionRef {\r\n var module = this.module;\r\n var options = this.options;\r\n var stringSegments = this.stringSegments;\r\n\r\n var stringSegment: MemorySegment | null = stringSegments.get(stringValue);\r\n if (!stringSegment) {\r\n let stringLength = stringValue.length;\r\n let stringBuffer = new Uint8Array(4 + stringLength * 2);\r\n stringBuffer[0] = stringLength & 0xff;\r\n stringBuffer[1] = (stringLength >>> 8) & 0xff;\r\n stringBuffer[2] = (stringLength >>> 16) & 0xff;\r\n stringBuffer[3] = (stringLength >>> 24) & 0xff;\r\n for (let i = 0; i < stringLength; ++i) {\r\n stringBuffer[4 + i * 2] = stringValue.charCodeAt(i) & 0xff;\r\n stringBuffer[5 + i * 2] = (stringValue.charCodeAt(i) >>> 8) & 0xff;\r\n }\r\n stringSegment = this.addMemorySegment(stringBuffer, options.usizeType.byteSize);\r\n stringSegments.set(stringValue, stringSegment);\r\n }\r\n var stringOffset = stringSegment.offset;\r\n var stringType = this.program.typesLookup.get(\"string\");\r\n this.currentType = stringType ? stringType : options.usizeType;\r\n if (options.isWasm64) {\r\n return module.createI64(i64_low(stringOffset), i64_high(stringOffset));\r\n }\r\n assert(i64_is_i32(stringOffset));\r\n return module.createI32(i64_low(stringOffset));\r\n }\r\n\r\n compileArrayLiteral(elementType: Type, expressions: (Expression | null)[], reportNode: Node): ExpressionRef {\r\n var isStatic = true;\r\n var module = this.module;\r\n\r\n // obtain the array type\r\n var arrayPrototype = assert(this.program.arrayPrototype);\r\n if (!arrayPrototype || arrayPrototype.kind != ElementKind.CLASS_PROTOTYPE) return module.createUnreachable();\r\n var arrayInstance = (arrayPrototype).resolve([ elementType ]);\r\n if (!arrayInstance) return module.createUnreachable();\r\n var arrayType = arrayInstance.type;\r\n\r\n var elementCount = expressions.length;\r\n if (elementCount) { // non-empty static or dynamic\r\n let nativeElementType = elementType.toNativeType();\r\n let values: usize;\r\n let byteLength: usize;\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n values = changetype(new Int32Array(elementCount));\r\n byteLength = elementCount * 4;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n values = changetype(new Array(elementCount));\r\n byteLength = elementCount * 8;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n values = changetype(new Float32Array(elementCount));\r\n byteLength = elementCount * 4;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n values = changetype(new Float64Array(elementCount));\r\n byteLength = elementCount * 8;\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // precompute value expressions\r\n let exprs = new Array(elementCount);\r\n let expr: BinaryenExpressionRef;\r\n for (let i = 0; i < elementCount; ++i) {\r\n exprs[i] = expressions[i]\r\n ? this.compileExpression(expressions[i], elementType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : elementType.toNativeZero(module);\r\n if (isStatic) {\r\n expr = this.precomputeExpressionRef(exprs[i]);\r\n if (getExpressionId(expr) == ExpressionId.Const) {\r\n assert(getExpressionType(expr) == nativeElementType);\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n changetype(values)[i] = getConstValueI32(expr);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n changetype(values)[i] = i64_new(\r\n getConstValueI64Low(expr),\r\n getConstValueI64High(expr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n changetype(values)[i] = getConstValueF32(expr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n changetype(values)[i] = getConstValueF64(expr);\r\n break;\r\n }\r\n default: assert(false); // checked above\r\n }\r\n } else {\r\n // TODO: emit a warning if declared 'const'\r\n // if (isConst) {\r\n // this.warn(\r\n // DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n // reportNode.range\r\n // );\r\n // }\r\n isStatic = false;\r\n }\r\n }\r\n }\r\n\r\n let usizeTypeSize = this.options.usizeType.byteSize;\r\n if (isStatic) { // non-empty, all elements can be precomputed\r\n\r\n // Create a combined static memory segment composed of:\r\n // Array struct + ArrayBuffer struct + aligned ArrayBuffer data\r\n\r\n let arraySize = usizeTypeSize + 4; // buffer_ & length_\r\n let bufferHeaderSize = (4 + 7) & ~7; // aligned byteLength (8)\r\n let bufferTotalSize = 1 << (32 - clz(byteLength + bufferHeaderSize - 1)); // see internals\r\n let data = new Uint8Array(arraySize + bufferTotalSize);\r\n let segment = this.addMemorySegment(data);\r\n let offset = 0;\r\n\r\n // write Array struct\r\n if (usizeTypeSize == 8) {\r\n writeI64(i64_add(segment.offset, i64_new(arraySize)), data, offset); // buffer_ @ segment[arSize]\r\n offset += 8;\r\n } else {\r\n assert(i64_high(segment.offset) == 0);\r\n writeI32(i64_low(segment.offset) + arraySize, data, offset); // buffer_ @ segment[arSize]\r\n offset += 4;\r\n }\r\n writeI32(elementCount, data, offset); // length_\r\n offset += 4;\r\n assert(offset == arraySize);\r\n\r\n // write ArrayBuffer struct\r\n writeI32(byteLength, data, offset);\r\n offset += bufferHeaderSize; // incl. alignment\r\n\r\n // write ArrayBuffer data\r\n switch (nativeElementType) {\r\n case NativeType.I32: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeI32(changetype(values)[i], data, offset); offset += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.I64: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeI64(changetype(values)[i], data, offset); offset += 8;\r\n }\r\n break;\r\n }\r\n case NativeType.F32: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeF32(changetype(values)[i], data, offset); offset += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.F64: {\r\n for (let i = 0; i < elementCount; ++i) {\r\n writeF64(changetype(values)[i], data, offset); offset += 8;\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n assert(offset <= arraySize + bufferTotalSize);\r\n\r\n this.currentType = arrayType;\r\n return usizeTypeSize == 8\r\n ? module.createI64(\r\n i64_low(segment.offset),\r\n i64_high(segment.offset)\r\n )\r\n : module.createI32(\r\n i64_low(segment.offset)\r\n );\r\n\r\n } else { // non-empty, some elements can't be precomputed\r\n\r\n this.currentType = arrayType;\r\n let setter = arrayInstance.lookupOverload(OperatorKind.INDEXED_SET, true);\r\n if (!setter) {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n reportNode.range, arrayInstance.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let nativeArrayType = arrayType.toNativeType();\r\n let currentFunction = this.currentFunction;\r\n let tempLocal = currentFunction.getTempLocal(arrayType, false);\r\n let stmts = new Array(2 + elementCount);\r\n let index = 0;\r\n stmts[index++] = module.createSetLocal(tempLocal.index,\r\n this.makeCallDirect(assert(arrayInstance.constructorInstance), [\r\n module.createI32(0), // this\r\n module.createI32(elementCount)\r\n ])\r\n );\r\n for (let i = 0; i < elementCount; ++i) {\r\n stmts[index++] = this.makeCallDirect(setter, [\r\n module.createGetLocal(tempLocal.index, nativeArrayType), // this\r\n module.createI32(i),\r\n exprs[i]\r\n ]);\r\n }\r\n assert(index + 1 == stmts.length);\r\n stmts[index] = module.createGetLocal(tempLocal.index, nativeArrayType);\r\n currentFunction.freeTempLocal(tempLocal);\r\n this.currentType = arrayType;\r\n return module.createBlock(null, stmts, nativeArrayType);\r\n }\r\n\r\n } else { // empty, TBD: cache this somehow?\r\n this.currentType = arrayType;\r\n return this.makeCallDirect(assert(arrayInstance.constructorInstance), [\r\n module.createI32(0), // this\r\n module.createI32(0)\r\n ]);\r\n }\r\n }\r\n\r\n compileNewExpression(expression: NewExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var options = this.options;\r\n var currentFunction = this.currentFunction;\r\n\r\n // obtain the class being instantiated\r\n var target = this.program.resolveExpression( // reports\r\n expression.expression,\r\n currentFunction\r\n );\r\n if (!target) return module.createUnreachable();\r\n if (target.kind != ElementKind.CLASS_PROTOTYPE) {\r\n this.error(\r\n DiagnosticCode.Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature,\r\n expression.expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n var classPrototype = target;\r\n var classInstance: Class | null = null;\r\n var typeArguments = expression.typeArguments;\r\n var classReference: Class | null;\r\n if (\r\n !typeArguments &&\r\n (classReference = contextualType.classReference) !== null &&\r\n classReference.is(CommonFlags.GENERIC)\r\n ) {\r\n classInstance = classPrototype.resolve(\r\n classReference.typeArguments,\r\n currentFunction.flow.contextualTypeArguments\r\n );\r\n } else {\r\n classInstance = classPrototype.resolveUsingTypeArguments( // reports\r\n typeArguments,\r\n currentFunction.flow.contextualTypeArguments,\r\n expression\r\n );\r\n }\r\n if (!classInstance) return module.createUnreachable();\r\n\r\n var expr: ExpressionRef;\r\n\r\n // traverse to the first matching constructor\r\n var currentClassInstance: Class | null = classInstance;\r\n var constructorInstance = classInstance.constructorInstance;\r\n while (!constructorInstance && (currentClassInstance = classInstance.base)) {\r\n constructorInstance = currentClassInstance.constructorInstance;\r\n }\r\n\r\n // if a constructor is present, call it with a zero `this`\r\n if (constructorInstance) {\r\n expr = this.compileCallDirect(constructorInstance, expression.arguments, expression,\r\n options.usizeType.toNativeZero(module)\r\n );\r\n\r\n // otherwise simply allocate a new instance and initialize its fields\r\n } else {\r\n expr = this.makeAllocate(classInstance, expression);\r\n }\r\n\r\n this.currentType = classInstance.type;\r\n return expr;\r\n }\r\n\r\n compileParenthesizedExpression(\r\n expression: ParenthesizedExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n // does not change types, just order\r\n return this.compileExpression(\r\n expression.expression,\r\n contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n }\r\n\r\n /**\r\n * Compiles a property access in the specified context.\r\n * @param retainConstantType Retains the type of inlined constants if `true`, otherwise\r\n * precomputes them according to context.\r\n */\r\n compilePropertyAccessExpression(\r\n propertyAccess: PropertyAccessExpression,\r\n contextualType: Type,\r\n retainConstantType: bool\r\n ): ExpressionRef {\r\n var program = this.program;\r\n var module = this.module;\r\n\r\n var target = program.resolvePropertyAccess(propertyAccess, this.currentFunction); // reports\r\n if (!target) return module.createUnreachable();\r\n\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL: { // static property\r\n if (!this.compileGlobal(target)) { // reports; not yet compiled if a static field\r\n return module.createUnreachable();\r\n }\r\n let globalType = (target).type;\r\n assert(globalType != Type.void);\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(target, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return module.createGetGlobal((target).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // enum value\r\n let parent = (target).parent;\r\n assert(parent !== null && parent.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(parent)) {\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((target).is(CommonFlags.INLINED)) {\r\n return module.createI32((target).constantValue);\r\n }\r\n return module.createGetGlobal((target).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FIELD: { // instance field\r\n let thisExpression = assert(program.resolvedThisExpression);\r\n assert((target).memoryOffset >= 0);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n this.currentType = (target).type;\r\n return module.createLoad(\r\n (target).type.byteSize,\r\n (target).type.is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n thisExpr,\r\n (target).type.toNativeType(),\r\n (target).memoryOffset\r\n );\r\n }\r\n case ElementKind.PROPERTY: { // instance property (here: getter)\r\n let prototype = (target).getterPrototype;\r\n if (prototype) {\r\n let instance = prototype.resolve(null); // reports\r\n if (!instance) return module.createUnreachable();\r\n let signature = instance.signature;\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n 0,\r\n instance.is(CommonFlags.INSTANCE),\r\n propertyAccess\r\n )) {\r\n return module.createUnreachable();\r\n }\r\n let inline = (instance.decoratorFlags & DecoratorFlags.INLINE) != 0;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(instance.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let thisExpression = assert(program.resolvedThisExpression);\r\n let thisExpr = this.compileExpressionRetainType(\r\n thisExpression,\r\n this.options.usizeType,\r\n WrapMode.NONE\r\n );\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], propertyAccess, thisExpr, inline);\r\n } else {\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], propertyAccess, 0, inline);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.range, (target).simpleName, (target).parent.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n propertyAccess.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n compileTernaryExpression(expression: TernaryExpression, contextualType: Type): ExpressionRef {\r\n var ifThen = expression.ifThen;\r\n var ifElse = expression.ifElse;\r\n var currentFunction = this.currentFunction;\r\n\r\n var condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(expression.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n\r\n if (\r\n !this.options.noTreeShaking ||\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT)\r\n ) {\r\n // Try to eliminate unnecesssary branches if the condition is constant\r\n let condExprPrecomp = this.precomputeExpressionRef(condExpr);\r\n if (\r\n getExpressionId(condExprPrecomp) == ExpressionId.Const &&\r\n getExpressionType(condExprPrecomp) == NativeType.I32\r\n ) {\r\n return getConstValueI32(condExprPrecomp)\r\n ? this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE)\r\n : this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n\r\n // Otherwise recompile to the original and let the optimizer decide\r\n } else /* if (condExpr != condExprPrecomp) <- not guaranteed */ {\r\n condExpr = this.makeIsTrueish(\r\n this.compileExpressionRetainType(expression.condition, Type.bool, WrapMode.NONE),\r\n this.currentType\r\n );\r\n }\r\n }\r\n\r\n var ifThenExpr: ExpressionRef;\r\n var ifElseExpr: ExpressionRef;\r\n var ifThenType: Type;\r\n var ifElseType: Type;\r\n\r\n // if part of a constructor, keep track of memory allocations\r\n if (currentFunction.is(CommonFlags.CONSTRUCTOR)) {\r\n let flow = currentFunction.flow;\r\n\r\n flow = flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n ifThenExpr = this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE);\r\n ifThenType = this.currentType;\r\n let ifThenAllocates = flow.is(FlowFlags.ALLOCATES);\r\n flow = flow.leaveBranchOrScope();\r\n currentFunction.flow = flow;\r\n\r\n flow = flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n ifElseExpr = this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n ifElseType = this.currentType;\r\n let ifElseAllocates = flow.is(FlowFlags.ALLOCATES);\r\n flow = flow.leaveBranchOrScope();\r\n currentFunction.flow = flow;\r\n\r\n if (ifThenAllocates && ifElseAllocates) flow.set(FlowFlags.ALLOCATES);\r\n\r\n // otherwise simplify\r\n } else {\r\n ifThenExpr = this.compileExpressionRetainType(ifThen, contextualType, WrapMode.NONE);\r\n ifThenType = this.currentType;\r\n ifElseExpr = this.compileExpressionRetainType(ifElse, contextualType, WrapMode.NONE);\r\n ifElseType = this.currentType;\r\n }\r\n var commonType = Type.commonCompatible(ifThenType, ifElseType, false);\r\n if (!commonType) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n expression.range, ifThenType.toString(), ifElseType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n ifThenExpr = this.convertExpression(\r\n ifThenExpr,\r\n ifThenType,\r\n commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n ifThen\r\n );\r\n ifElseExpr = this.convertExpression(\r\n ifElseExpr,\r\n ifElseType,\r\n commonType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE,\r\n ifElse\r\n );\r\n this.currentType = commonType;\r\n return this.module.createIf(condExpr, ifThenExpr, ifElseExpr);\r\n }\r\n\r\n compileUnaryPostfixExpression(expression: UnaryPostfixExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // make a getter for the expression (also obtains the type)\r\n var getValue = this.compileExpression( // reports\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n // shortcut if compiling the getter already failed\r\n if (getExpressionId(getValue) == ExpressionId.Unreachable) return getValue;\r\n var currentType = this.currentType;\r\n\r\n var op: BinaryOp;\r\n var nativeType: NativeType;\r\n var nativeOne: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS_PLUS: {\r\n\r\n // TODO: check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n switch (currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n op = BinaryOp.AddI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = module.createI32(1);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n let options = this.options;\r\n op = options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32;\r\n nativeType = options.nativeSizeType;\r\n nativeOne = currentType.toNativeOne(module);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n op = BinaryOp.AddI64;\r\n nativeType = NativeType.I64;\r\n nativeOne = module.createI64(1);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n op = BinaryOp.AddF32;\r\n nativeType = NativeType.F32;\r\n nativeOne = module.createF32(1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n op = BinaryOp.AddF64;\r\n nativeType = NativeType.F64;\r\n nativeOne = module.createF64(1);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n\r\n // TODO: check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n switch (currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n op = BinaryOp.SubI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = module.createI32(1);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n let options = this.options;\r\n op = options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32;\r\n nativeType = options.nativeSizeType;\r\n nativeOne = currentType.toNativeOne(module);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n op = BinaryOp.SubI64;\r\n nativeType = NativeType.I64;\r\n nativeOne = module.createI64(1);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n op = BinaryOp.SubF32;\r\n nativeType = NativeType.F32;\r\n nativeOne = module.createF32(1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n op = BinaryOp.SubF64;\r\n nativeType = NativeType.F64;\r\n nativeOne = module.createF64(1);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // simplify if dropped anyway\r\n if (contextualType == Type.void) {\r\n return this.compileAssignmentWithValue(expression.operand,\r\n module.createBinary(op,\r\n getValue,\r\n nativeOne\r\n ),\r\n false\r\n );\r\n }\r\n\r\n // otherwise use a temp local for the intermediate value (always possibly overflows)\r\n var tempLocal = currentFunction.getTempLocal(currentType, false);\r\n var setValue = this.compileAssignmentWithValue(expression.operand,\r\n module.createBinary(op,\r\n this.module.createGetLocal(tempLocal.index, nativeType),\r\n nativeOne\r\n ),\r\n false\r\n );\r\n this.currentType = assert(tempLocal).type;\r\n currentFunction.freeTempLocal(tempLocal);\r\n\r\n var localIndex = (tempLocal).index;\r\n return module.createBlock(null, [\r\n module.createSetLocal(localIndex, getValue),\r\n setValue,\r\n module.createGetLocal(localIndex, nativeType)\r\n ], nativeType); // result of 'x++' / 'x--' might overflow\r\n }\r\n\r\n compileUnaryPrefixExpression(\r\n expression: UnaryPrefixExpression,\r\n contextualType: Type\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var compound = false;\r\n var expr: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PLUS);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // nop\r\n break;\r\n }\r\n case Token.MINUS: {\r\n if (expression.operand.kind == NodeKind.LITERAL && (\r\n (expression.operand).literalKind == LiteralKind.INTEGER ||\r\n (expression.operand).literalKind == LiteralKind.FLOAT\r\n )) {\r\n // implicitly negate integer and float literals. also enables proper checking of literal ranges.\r\n expr = this.compileLiteralExpression(expression.operand, contextualType, true);\r\n // compileExpression normally does this:\r\n if (this.options.sourceMap) this.addDebugLocation(expr, expression.range);\r\n break;\r\n }\r\n\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.MINUS);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.SubI32, module.createI32(0), expr);\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n this.currentType.toNativeZero(module),\r\n expr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, module.createI64(0), expr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createUnary(UnaryOp.NegF32, expr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createUnary(UnaryOp.NegF64, expr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.PLUS_PLUS: {\r\n compound = true;\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PREFIX_INC);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.AddI32, expr, this.module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n expr,\r\n this.currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AddI64, expr, module.createI64(1));\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.AddF32, expr, module.createF32(1));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.AddF64, expr, module.createF64(1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n compound = true;\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.PREFIX_DEC);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.SubI32, expr, module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n expr,\r\n this.currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, expr, module.createI64(1));\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.SubF32, expr, module.createF32(1));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.SubF64, expr, module.createF64(1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.EXCLAMATION: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.NOT);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n // allow '!' for references even without an overload\r\n }\r\n\r\n expr = this.makeIsFalseish(expr, this.currentType);\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.TILDE: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType.is(TypeFlags.FLOAT)\r\n ? Type.i64\r\n : contextualType,\r\n ConversionKind.NONE,\r\n WrapMode.NONE\r\n );\r\n\r\n // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classReference = this.currentType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.BITWISE_NOT);\r\n if (overload) {\r\n expr = this.compileUnaryOverload(overload, expression.operand, expr, expression);\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n } else {\r\n expr = this.convertExpression(\r\n expr,\r\n this.currentType, this.currentType.intType,\r\n ConversionKind.IMPLICIT, WrapMode.NONE,\r\n expression.operand\r\n );\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.XorI32, expr, module.createI32(-1));\r\n break;\r\n }\r\n case TypeKind.USIZE:\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n expr,\r\n this.currentType.toNativeNegOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.XorI64, expr, module.createI64(-1, -1));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.TYPEOF: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n return module.createUnreachable();\r\n }\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(expression.operand, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n\r\n /** Makes sure that a 32-bit integer value is wrapped to a valid value of the specified type. */\r\n ensureSmallIntegerWrap(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n var flow = this.currentFunction.flow;\r\n switch (type.kind) {\r\n case TypeKind.I8: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = this.options.hasFeature(Feature.SIGN_EXTENSION)\r\n ? module.createUnary(UnaryOp.ExtendI8ToI32, expr)\r\n : module.createBinary(BinaryOp.ShrI32,\r\n module.createBinary(BinaryOp.ShlI32,\r\n expr,\r\n module.createI32(24)\r\n ),\r\n module.createI32(24)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.I16: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = this.options.hasFeature(Feature.SIGN_EXTENSION)\r\n ? module.createUnary(UnaryOp.ExtendI16ToI32, expr)\r\n : module.createBinary(BinaryOp.ShrI32,\r\n module.createBinary(BinaryOp.ShlI32,\r\n expr,\r\n module.createI32(16)\r\n ),\r\n module.createI32(16)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.U8: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xff)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.U16: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xffff)\r\n );\r\n }\r\n break;\r\n }\r\n case TypeKind.BOOL: {\r\n if (flow.canOverflow(expr, type)) {\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0x1)\r\n );\r\n }\r\n break;\r\n }\r\n }\r\n return expr;\r\n }\r\n\r\n /** Creates a comparison whether an expression is 'false' in a broader sense. */\r\n makeIsFalseish(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n switch (type.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = this.ensureSmallIntegerWrap(expr, type);\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return module.createUnary(UnaryOp.EqzI32, expr);\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createUnary(UnaryOp.EqzI64, expr);\r\n }\r\n case TypeKind.USIZE: // TODO: strings?\r\n case TypeKind.ISIZE: {\r\n return module.createUnary(type.size == 64 ? UnaryOp.EqzI64 : UnaryOp.EqzI32, expr);\r\n }\r\n case TypeKind.F32: {\r\n return module.createBinary(BinaryOp.EqF32, expr, module.createF32(0));\r\n }\r\n case TypeKind.F64: {\r\n return module.createBinary(BinaryOp.EqF64, expr, module.createF64(0));\r\n }\r\n default: {\r\n assert(false);\r\n return module.createI32(1);\r\n }\r\n }\r\n }\r\n\r\n /** Creates a comparison whether an expression is 'true' in a broader sense. */\r\n makeIsTrueish(expr: ExpressionRef, type: Type): ExpressionRef {\r\n var module = this.module;\r\n switch (type.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n expr = this.ensureSmallIntegerWrap(expr, type);\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return expr;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createBinary(BinaryOp.NeI64, expr, module.createI64(0));\r\n }\r\n case TypeKind.USIZE: // TODO: strings?\r\n case TypeKind.ISIZE: {\r\n return type.size == 64\r\n ? module.createBinary(BinaryOp.NeI64, expr, module.createI64(0))\r\n : expr;\r\n }\r\n case TypeKind.F32: {\r\n return module.createBinary(BinaryOp.NeF32, expr, module.createF32(0));\r\n }\r\n case TypeKind.F64: {\r\n return module.createBinary(BinaryOp.NeF64, expr, module.createF64(0));\r\n }\r\n default: {\r\n assert(false);\r\n return module.createI32(0);\r\n }\r\n }\r\n }\r\n\r\n /** Makes an allocation expression for an instance of the specified class. */\r\n makeAllocate(classInstance: Class, reportNode: Node): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var nativeSizeType = this.options.nativeSizeType;\r\n\r\n // allocate the necessary memory and tee the pointer to a temp. local for reuse\r\n var tempLocal = currentFunction.getTempLocal(classInstance.type, false);\r\n var initializers = new Array();\r\n initializers.push(\r\n module.createSetLocal(tempLocal.index,\r\n compileBuiltinAllocate(this, classInstance, reportNode)\r\n )\r\n );\r\n\r\n // apply field initializers\r\n if (classInstance.members) {\r\n for (let member of classInstance.members.values()) {\r\n if (member.kind == ElementKind.FIELD) {\r\n let field = member;\r\n let fieldType = field.type;\r\n let nativeFieldType = fieldType.toNativeType();\r\n let fieldDeclaration = field.prototype.declaration;\r\n assert(!field.isAny(CommonFlags.CONST));\r\n if (fieldDeclaration.initializer) { // use initializer\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n this.compileExpression( // reports\r\n fieldDeclaration.initializer,\r\n fieldType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n ),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n } else { // initialize with zero\r\n // TODO: might be unnecessary if the ctor initializes the field\r\n let parameterIndex = (field.prototype.declaration).parameterIndex;\r\n initializers.push(module.createStore(fieldType.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n parameterIndex >= 0 // initialized via parameter\r\n ? module.createGetLocal(1 + parameterIndex, nativeFieldType)\r\n : fieldType.toNativeZero(module),\r\n nativeFieldType,\r\n field.memoryOffset\r\n ));\r\n }\r\n }\r\n }\r\n }\r\n\r\n // return `this`\r\n initializers.push(\r\n module.createGetLocal(tempLocal.index, nativeSizeType)\r\n );\r\n\r\n currentFunction.freeTempLocal(tempLocal);\r\n this.currentType = classInstance.type;\r\n return module.createBlock(null, initializers, nativeSizeType);\r\n }\r\n\r\n /** Makes a conditional allocation expression inside of the constructor of the specified class. */\r\n makeConditionalAllocate(classInstance: Class, reportNode: Node): ExpressionRef {\r\n // requires that `this` is the first local\r\n var module = this.module;\r\n var nativeSizeType = this.options.nativeSizeType;\r\n this.currentType = classInstance.type;\r\n return module.createIf(\r\n nativeSizeType == NativeType.I64\r\n ? module.createBinary(\r\n BinaryOp.NeI64,\r\n module.createGetLocal(0, NativeType.I64),\r\n module.createI64(0)\r\n )\r\n : module.createGetLocal(0, NativeType.I32),\r\n module.createGetLocal(0, nativeSizeType),\r\n module.createTeeLocal(0,\r\n this.makeAllocate(classInstance, reportNode)\r\n )\r\n );\r\n }\r\n\r\n /** Adds the debug location of the specified expression at the specified range to the source map. */\r\n addDebugLocation(expr: ExpressionRef, range: Range): void {\r\n var currentFunction = this.currentFunction;\r\n var source = range.source;\r\n if (source.debugInfoIndex < 0) source.debugInfoIndex = this.module.addDebugInfoFile(source.normalizedPath);\r\n range.debugInfoRef = expr;\r\n currentFunction.debugLocations.push(range);\r\n }\r\n}\r\n\r\n// helpers\r\n\r\nfunction mangleExportName(element: Element, simpleName: string = element.simpleName): string {\r\n switch (element.kind) {\r\n case ElementKind.FUNCTION: {\r\n let parent = (element).parent || (element).prototype.parent;\r\n return parent\r\n ? mangleExportName(parent)\r\n + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER)\r\n + simpleName\r\n : simpleName;\r\n }\r\n case ElementKind.FIELD: {\r\n let parent = assert((element).parent);\r\n return mangleExportName(parent)\r\n + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER)\r\n + simpleName;\r\n }\r\n case ElementKind.ENUMVALUE: {\r\n let parent = assert((element).parent);\r\n return mangleExportName(parent)\r\n + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER)\r\n + simpleName;\r\n }\r\n case ElementKind.CLASS: {\r\n let parent = (element).prototype.parent;\r\n return parent\r\n ? mangleExportName(parent)\r\n + STATIC_DELIMITER\r\n + simpleName\r\n : simpleName;\r\n }\r\n default: {\r\n let parent = element.parent;\r\n return parent\r\n ? mangleExportName(parent)\r\n + STATIC_DELIMITER\r\n + simpleName\r\n : simpleName;\r\n }\r\n }\r\n}\r\n","/**\r\n * A TypeScript parser for the AssemblyScript subset.\r\n * @module parser\r\n *//***/\r\n\r\nimport {\r\n CommonFlags,\r\n LIBRARY_PREFIX,\r\n PATH_DELIMITER\r\n} from \"./common\";\r\n\r\nimport {\r\n Program\r\n} from \"./program\";\r\n\r\nimport {\r\n Tokenizer,\r\n Token,\r\n Range,\r\n CommentHandler,\r\n IdentifierHandling\r\n} from \"./tokenizer\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n normalizePath\r\n} from \"./util\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Source,\r\n SourceKind,\r\n CommonTypeNode,\r\n TypeNode,\r\n SignatureNode,\r\n\r\n Expression,\r\n AssertionKind,\r\n CallExpression,\r\n IdentifierExpression,\r\n StringLiteralExpression,\r\n\r\n Statement,\r\n BlockStatement,\r\n BreakStatement,\r\n ClassDeclaration,\r\n ContinueStatement,\r\n DeclarationStatement,\r\n DecoratorNode,\r\n DoStatement,\r\n EnumDeclaration,\r\n EnumValueDeclaration,\r\n ExportImportStatement,\r\n ExportMember,\r\n ExportStatement,\r\n ExpressionStatement,\r\n ForStatement,\r\n FunctionExpression,\r\n FunctionDeclaration,\r\n IfStatement,\r\n ImportDeclaration,\r\n ImportStatement,\r\n NamespaceDeclaration,\r\n ParameterNode,\r\n ParameterKind,\r\n ReturnStatement,\r\n SwitchCase,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n TypeDeclaration,\r\n TypeParameterNode,\r\n VariableStatement,\r\n VariableDeclaration,\r\n VoidStatement,\r\n WhileStatement,\r\n\r\n mangleInternalPath,\r\n nodeIsCallable,\r\n nodeIsGenericCallable\r\n} from \"./ast\";\r\n\r\nconst builtinsFile = LIBRARY_PREFIX + \"builtins.ts\";\r\n\r\n/** Parser interface. */\r\nexport class Parser extends DiagnosticEmitter {\r\n\r\n /** Program being created. */\r\n program: Program;\r\n /** Source file names to be requested next. */\r\n backlog: string[] = new Array();\r\n /** Source file names already seen, that is processed or backlogged. */\r\n seenlog: Set = new Set();\r\n /** Source file names already completely processed. */\r\n donelog: Set = new Set();\r\n /** Optional handler to intercept comments while tokenizing. */\r\n onComment: CommentHandler | null = null;\r\n\r\n /** Constructs a new parser. */\r\n constructor() {\r\n super();\r\n this.program = new Program(this.diagnostics);\r\n }\r\n\r\n /** Parses a file and adds its definitions to the program. */\r\n parseFile(\r\n text: string,\r\n path: string,\r\n isEntry: bool\r\n ): void {\r\n var normalizedPath = normalizePath(path);\r\n var internalPath = mangleInternalPath(normalizedPath);\r\n\r\n // check if already processed\r\n if (this.donelog.has(internalPath)) return;\r\n this.donelog.add(internalPath); // do not parse again\r\n this.seenlog.add(internalPath); // do not request again\r\n\r\n // create the source element\r\n var source = new Source(\r\n normalizedPath,\r\n text,\r\n isEntry\r\n ? SourceKind.ENTRY\r\n : path.startsWith(LIBRARY_PREFIX) && path.indexOf(PATH_DELIMITER, LIBRARY_PREFIX.length) < 0\r\n ? SourceKind.LIBRARY\r\n : SourceKind.DEFAULT\r\n );\r\n var program = this.program;\r\n program.sources.push(source);\r\n\r\n // mark the special builtins library file\r\n if (source.normalizedPath == builtinsFile) {\r\n source.set(CommonFlags.BUILTIN);\r\n }\r\n\r\n // tokenize and parse\r\n var tn = new Tokenizer(source, program.diagnostics);\r\n tn.onComment = this.onComment;\r\n source.tokenizer = tn;\r\n var statements = source.statements;\r\n while (!tn.skip(Token.ENDOFFILE)) {\r\n let statement = this.parseTopLevelStatement(tn);\r\n if (statement) {\r\n statement.parent = source;\r\n statements.push(statement);\r\n }\r\n }\r\n tn.finish();\r\n }\r\n\r\n /** Parses a top-level statement. */\r\n parseTopLevelStatement(\r\n tn: Tokenizer,\r\n namespace: Node | null = null\r\n ): Statement | null {\r\n var flags = CommonFlags.NONE;\r\n var startPos: i32 = -1;\r\n\r\n // check decorators\r\n var decorators: DecoratorNode[] | null = null;\r\n while (tn.skip(Token.AT)) {\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n let decorator = this.parseDecorator(tn);\r\n if (!decorator) {\r\n this.skipStatement(tn);\r\n continue;\r\n }\r\n if (!decorators) decorators = [];\r\n decorators.push(decorator);\r\n }\r\n\r\n // mark builtins\r\n flags |= (tn.source.flags & CommonFlags.BUILTIN);\r\n\r\n // check modifiers\r\n var exportStart: i32 = 0;\r\n var exportEnd: i32 = 0;\r\n if (tn.skip(Token.EXPORT)) {\r\n if (tn.skip(Token.DEFAULT)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n flags |= CommonFlags.EXPORT;\r\n exportStart = tn.tokenPos;\r\n exportEnd = tn.pos;\r\n }\r\n\r\n var declareStart: i32 = 0;\r\n var declareEnd: i32 = 0;\r\n var contextIsAmbient = namespace != null && namespace.is(CommonFlags.AMBIENT);\r\n if (tn.skip(Token.DECLARE)) {\r\n if (startPos < 0) startPos = tn.tokenPos;\r\n if (contextIsAmbient) {\r\n this.error(\r\n DiagnosticCode.A_declare_modifier_cannot_be_used_in_an_already_ambient_context,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n flags |= CommonFlags.DECLARE | CommonFlags.AMBIENT;\r\n } else if (contextIsAmbient) {\r\n flags |= CommonFlags.AMBIENT;\r\n }\r\n\r\n // parse the statement\r\n var statement: Statement | null = null;\r\n\r\n // handle declarations\r\n var first = tn.peek();\r\n if (startPos < 0) startPos = tn.nextTokenPos;\r\n switch (first) {\r\n case Token.CONST: {\r\n tn.next();\r\n flags |= CommonFlags.CONST;\r\n if (tn.skip(Token.ENUM)) {\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n break;\r\n } else {\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n }\r\n break;\r\n }\r\n case Token.LET: flags |= CommonFlags.LET;\r\n case Token.VAR: {\r\n tn.next();\r\n statement = this.parseVariable(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ENUM: {\r\n tn.next();\r\n statement = this.parseEnum(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.FUNCTION: {\r\n tn.next();\r\n statement = this.parseFunction(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ABSTRACT: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (!tn.skip(Token.CLASS)) {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n break;\r\n } else {\r\n tn.discard(state);\r\n }\r\n flags |= CommonFlags.ABSTRACT;\r\n // fall through\r\n }\r\n case Token.CLASS:\r\n case Token.INTERFACE: {\r\n tn.next();\r\n statement = this.parseClassOrInterface(tn, flags, decorators, startPos);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.NAMESPACE: {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseNamespace(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n case Token.IMPORT: {\r\n tn.next();\r\n flags |= CommonFlags.IMPORT;\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExportImport(tn, startPos);\r\n } else {\r\n statement = this.parseImport(tn);\r\n }\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n tn.discard(state);\r\n statement = this.parseTypeDeclaration(tn, flags, decorators, startPos);\r\n decorators = null;\r\n } else {\r\n tn.reset(state);\r\n statement = this.parseStatement(tn, true);\r\n }\r\n break;\r\n }\r\n default: {\r\n\r\n // handle plain exports\r\n if (flags & CommonFlags.EXPORT) {\r\n statement = this.parseExport(tn, flags, startPos);\r\n\r\n // handle non-declaration statements\r\n } else {\r\n if (exportEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(exportStart, exportEnd), \"export\"\r\n ); // recoverable\r\n }\r\n if (declareEnd) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(declareStart, declareEnd), \"declare\"\r\n ); // recoverable\r\n }\r\n if (!namespace) {\r\n statement = this.parseStatement(tn, true);\r\n } // TODO: else?\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // check for decorators that weren't consumed\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n this.error(\r\n DiagnosticCode.Decorators_are_not_valid_here,\r\n decorators[i].range\r\n );\r\n }\r\n }\r\n return statement;\r\n }\r\n\r\n /** Obtains the next file to parse. */\r\n nextFile(): string | null {\r\n var backlog = this.backlog;\r\n return backlog.length ? backlog.shift() : null;\r\n }\r\n\r\n /** Finishes parsing and returns the program. */\r\n finish(): Program {\r\n if (this.backlog.length) throw new Error(\"backlog is not empty\");\r\n this.backlog = [];\r\n this.seenlog.clear();\r\n this.donelog.clear();\r\n return this.program;\r\n }\r\n\r\n /** Parses a type. */\r\n parseType(\r\n tn: Tokenizer,\r\n acceptParenthesized: bool = true,\r\n suppressErrors: bool = false\r\n ): CommonTypeNode | null {\r\n\r\n // NOTE: this parses our limited subset\r\n var token = tn.next();\r\n var startPos = tn.tokenPos;\r\n\r\n var type: CommonTypeNode;\r\n\r\n // '(' ...\r\n if (token == Token.OPENPAREN) {\r\n\r\n // '(' FunctionSignature ')' '|' 'null'?\r\n let isNullableSignature = tn.skip(Token.OPENPAREN);\r\n // FunctionSignature?\r\n let signature = this.tryParseSignature(tn);\r\n if (signature) {\r\n if (isNullableSignature) {\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.BAR)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"|\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.NULL)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"null\"\r\n );\r\n }\r\n signature.isNullable = true;\r\n }\r\n return signature;\r\n } else if (isNullableSignature || this.tryParseSignatureIsSignature) {\r\n this.error(\r\n DiagnosticCode.Unexpected_token,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n // Type (',' Type)* ')'\r\n if (acceptParenthesized) {\r\n let innerType = this.parseType(tn, false, suppressErrors);\r\n if (!innerType) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"}\"\r\n );\r\n }\r\n return null;\r\n }\r\n type = innerType;\r\n type.range.start = startPos;\r\n type.range.end = tn.pos;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Unexpected_token,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n // 'void'\r\n } else if (token == Token.VOID) {\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"void\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // 'this'\r\n } else if (token == Token.THIS) {\r\n type = Node.createType(\r\n Node.createThisExpression(tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // 'true'\r\n } else if (token == Token.TRUE || token == Token.FALSE) {\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"bool\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // StringLiteral\r\n } else if (token == Token.STRINGLITERAL) {\r\n tn.readString();\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"string\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // Identifier\r\n } else if (token == Token.IDENTIFIER) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let parameters = new Array();\r\n let nullable = false;\r\n\r\n // Name\r\n if (tn.skip(Token.LESSTHAN)) {\r\n do {\r\n let parameter = this.parseType(tn, true, suppressErrors);\r\n if (!parameter) return null;\r\n parameters.push(parameter);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \">\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n // ... | null\r\n if (tn.skip(Token.BAR)) {\r\n if (tn.skip(Token.NULL)) {\r\n nullable = true;\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"null\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n type = Node.createType(identifier, parameters, nullable, tn.range(startPos, tn.pos));\r\n\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n // ... [][]\r\n while (tn.skip(Token.OPENBRACKET)) {\r\n let bracketStart = tn.tokenPos;\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n }\r\n return null;\r\n }\r\n let bracketRange = tn.range(bracketStart, tn.pos);\r\n\r\n // ...[] | null\r\n let nullable = false;\r\n if (tn.skip(Token.BAR)) {\r\n if (tn.skip(Token.NULL)) {\r\n nullable = true;\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"null\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"Array\", bracketRange),\r\n [ type ],\r\n nullable,\r\n tn.range(startPos, tn.pos)\r\n );\r\n if (nullable) break;\r\n }\r\n\r\n return type;\r\n }\r\n\r\n // Indicates whether tryParseSignature determined that it is handling a Signature\r\n private tryParseSignatureIsSignature: bool = false;\r\n\r\n /** Parses a function signature, as used in type declarations. */\r\n tryParseSignature(\r\n tn: Tokenizer\r\n ): SignatureNode | null {\r\n\r\n // at '(': ('...'? Identifier '?'? ':' Type (',' '...'? Identifier '?'? ':' Type)* )? ')' '=>' Type\r\n\r\n var state = tn.mark();\r\n var startPos = tn.tokenPos;\r\n var parameters: ParameterNode[] | null = null;\r\n var thisType: TypeNode | null = null;\r\n var isSignature: bool = false;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n parameters = [];\r\n\r\n } else {\r\n isSignature = false; // not yet known\r\n do {\r\n let kind = ParameterKind.DEFAULT;\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n kind = ParameterKind.REST;\r\n }\r\n if (tn.skip(Token.THIS)) {\r\n if (tn.skip(Token.COLON)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n let t = this.parseType(tn, false);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n this.tryParseSignatureIsSignature = true;\r\n return null;\r\n }\r\n thisType = t;\r\n } else {\r\n tn.reset(state);\r\n this.tryParseSignatureIsSignature = false;\r\n return null;\r\n }\r\n } else if (tn.skipIdentifier()) {\r\n let name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range(tn.tokenPos, tn.pos));\r\n if (tn.skip(Token.QUESTION)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n if (kind == ParameterKind.REST) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n tn.range()\r\n ); // recoverable\r\n } else {\r\n kind = ParameterKind.OPTIONAL;\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n let type = this.parseType(tn); // not suppressing errors because known\r\n if (!type) {\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n let param = new ParameterNode();\r\n param.parameterKind = kind;\r\n param.name = name;\r\n param.type = type;\r\n if (!parameters) parameters = [ param ];\r\n else parameters.push(param);\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n }\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n }\r\n\r\n var returnType: CommonTypeNode | null;\r\n if (tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n returnType = this.parseType(tn);\r\n if (!returnType) {\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=>\"\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n this.tryParseSignatureIsSignature = true;\r\n return Node.createSignature(\r\n parameters || [],\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n\r\n // statements\r\n\r\n parseDecorator(\r\n tn: Tokenizer\r\n ): DecoratorNode | null {\r\n\r\n // at '@': Identifier ('.' Identifier)* '(' Arguments\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skipIdentifier()) {\r\n let name = tn.readIdentifier();\r\n let expression: Expression = Node.createIdentifierExpression(name, tn.range(startPos, tn.pos));\r\n while (tn.skip(Token.DOT)) {\r\n if (tn.skipIdentifier()) {\r\n name = tn.readIdentifier();\r\n expression = Node.createPropertyAccessExpression(\r\n expression,\r\n Node.createIdentifierExpression(name, tn.range()),\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n let args: Expression[] | null;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n args = this.parseArguments(tn);\r\n if (args) {\r\n return Node.createDecorator(expression, args, tn.range(startPos, tn.pos));\r\n }\r\n } else {\r\n return Node.createDecorator(expression, null, tn.range(startPos, tn.pos));\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseVariable(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): VariableStatement | null {\r\n\r\n // at ('const' | 'let' | 'var'): VariableDeclaration (',' VariableDeclaration)* ';'?\r\n\r\n var members = new Array();\r\n do {\r\n let member = this.parseVariableDeclaration(tn, flags, decorators);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (tn.skip(Token.COMMA));\r\n\r\n var ret = Node.createVariableStatement(members, decorators, flags, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseVariableDeclaration(\r\n tn: Tokenizer,\r\n parentFlags: CommonFlags,\r\n parentDecorators: DecoratorNode[] | null\r\n ): VariableDeclaration | null {\r\n\r\n // before: Identifier (':' Type)? ('=' Expression)?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var flags = parentFlags;\r\n\r\n var type: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n }\r\n\r\n var initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n initializer = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!initializer) return null;\r\n } else {\r\n if (flags & CommonFlags.CONST) {\r\n if (!(flags & CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode._const_declarations_must_be_initialized,\r\n identifier.range\r\n ); // recoverable\r\n }\r\n } else if (!type) { // neither type nor initializer\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range(tn.pos)\r\n ); // recoverable\r\n }\r\n }\r\n return Node.createVariableDeclaration(\r\n identifier,\r\n type,\r\n initializer,\r\n parentDecorators,\r\n flags,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n }\r\n\r\n parseEnum(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): EnumDeclaration | null {\r\n\r\n // at 'enum': Identifier '{' (EnumValueDeclaration (',' EnumValueDeclaration )*)? '}' ';'?\r\n\r\n if (tn.next() != Token.IDENTIFIER) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.next() != Token.OPENBRACE) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n var members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseEnumValue(tn, CommonFlags.NONE);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n var ret = Node.createEnumDeclaration(\r\n identifier,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseEnumValue(\r\n tn: Tokenizer,\r\n parentFlags: CommonFlags\r\n ): EnumValueDeclaration | null {\r\n\r\n // before: Identifier ('=' Expression)?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var value: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n value = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!value) return null;\r\n }\r\n return Node.createEnumValueDeclaration(\r\n identifier,\r\n value,\r\n parentFlags,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n }\r\n\r\n parseReturn(\r\n tn: Tokenizer\r\n ): ReturnStatement | null {\r\n\r\n // at 'return': Expression | (';' | '}' | ...'\\n')\r\n\r\n var expr: Expression | null = null;\r\n if (\r\n tn.peek(true) != Token.SEMICOLON &&\r\n tn.nextToken != Token.CLOSEBRACE &&\r\n !tn.nextTokenOnNewLine\r\n ) {\r\n if (!(expr = this.parseExpression(tn))) return null;\r\n }\r\n\r\n var ret = Node.createReturnStatement(expr, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseTypeParameters(\r\n tn: Tokenizer\r\n ): TypeParameterNode[] | null {\r\n\r\n // at '<': TypeParameter (',' TypeParameter)* '>'\r\n\r\n var typeParameters = new Array();\r\n while (!tn.skip(Token.GREATERTHAN)) {\r\n let typeParameter = this.parseTypeParameter(tn);\r\n if (!typeParameter) return null;\r\n typeParameters.push(typeParameter);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.GREATERTHAN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n if (typeParameters.length === 0) {\r\n this.error(\r\n DiagnosticCode.Type_parameter_list_cannot_be_empty,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n return typeParameters;\r\n }\r\n\r\n parseTypeParameter(\r\n tn: Tokenizer\r\n ): TypeParameterNode | null {\r\n\r\n // before: Identifier ('extends' Type)?\r\n\r\n if (tn.next() == Token.IDENTIFIER) {\r\n let identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n let extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\r\n }\r\n return Node.createTypeParameter(\r\n identifier,\r\n extendsType,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n private parseParametersThis: TypeNode | null = null;\r\n\r\n parseParameters(\r\n tn: Tokenizer,\r\n isConstructor: bool = false\r\n ): ParameterNode[] | null {\r\n\r\n // at '(': (Parameter (',' Parameter)*)? ')'\r\n\r\n var parameters = new Array();\r\n var seenRest: ParameterNode | null = null;\r\n var seenOptional = false;\r\n var reportedRest = false;\r\n var thisType: CommonTypeNode | null = null;\r\n\r\n // check if there is a leading `this` parameter\r\n this.parseParametersThis = null;\r\n if (tn.skip(Token.THIS)) {\r\n if (tn.skip(Token.COLON)) {\r\n thisType = this.parseType(tn); // reports\r\n if (!thisType) return null;\r\n if (thisType.kind == NodeKind.TYPE) {\r\n this.parseParametersThis = thisType;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n thisType.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n return parameters;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n while (!tn.skip(Token.CLOSEPAREN)) {\r\n let param = this.parseParameter(tn, isConstructor); // reports\r\n if (!param) return null;\r\n if (seenRest && !reportedRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,\r\n seenRest.name.range\r\n );\r\n reportedRest = true;\r\n }\r\n switch (param.parameterKind) {\r\n default: {\r\n if (seenOptional) {\r\n this.error(\r\n DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,\r\n param.name.range\r\n );\r\n }\r\n break;\r\n }\r\n case ParameterKind.OPTIONAL: {\r\n seenOptional = true;\r\n break;\r\n }\r\n case ParameterKind.REST: {\r\n seenRest = param;\r\n break;\r\n }\r\n }\r\n parameters.push(param);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return parameters;\r\n }\r\n\r\n parseParameter(\r\n tn: Tokenizer,\r\n isConstructor: bool = false\r\n ): ParameterNode | null {\r\n\r\n // before: ('public' | 'private' | 'protected' | '...')? Identifier '?'? (':' Type)? ('=' Expression)?\r\n\r\n var isRest = false;\r\n var isOptional = false;\r\n var startRange: Range | null = null;\r\n var accessFlags: CommonFlags = CommonFlags.NONE;\r\n if (isConstructor) {\r\n if (tn.skip(Token.PUBLIC)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PROTECTED;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n startRange = tn.range();\r\n accessFlags |= CommonFlags.PRIVATE;\r\n }\r\n if (tn.peek() == Token.READONLY) {\r\n let state = tn.mark();\r\n tn.next();\r\n if (tn.peek() != Token.COLON) { // modifier\r\n tn.discard(state);\r\n if (!startRange) startRange = tn.range();\r\n accessFlags |= CommonFlags.READONLY;\r\n } else { // identifier\r\n tn.reset(state);\r\n }\r\n }\r\n }\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n if (accessFlags) {\r\n this.error(\r\n DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,\r\n tn.range()\r\n );\r\n } else {\r\n startRange = tn.range();\r\n }\r\n isRest = true;\r\n }\r\n if (tn.skipIdentifier()) {\r\n if (!isRest) startRange = tn.range();\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let type: CommonTypeNode | null = null;\r\n if (isOptional = tn.skip(Token.QUESTION)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n identifier.range\r\n );\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n } else {\r\n type = Node.createOmittedType(tn.range(tn.pos));\r\n }\r\n let initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,\r\n identifier.range\r\n );\r\n }\r\n if (isOptional) {\r\n this.error(\r\n DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,\r\n identifier.range\r\n );\r\n } else {\r\n isOptional = true;\r\n }\r\n initializer = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!initializer) return null;\r\n }\r\n let param = Node.createParameter(\r\n identifier,\r\n type,\r\n initializer,\r\n isRest\r\n ? ParameterKind.REST\r\n : isOptional\r\n ? ParameterKind.OPTIONAL\r\n : ParameterKind.DEFAULT,\r\n Range.join(startRange, tn.range())\r\n );\r\n param.flags |= accessFlags;\r\n return param;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseFunction(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): FunctionDeclaration | null {\r\n\r\n // at 'function':\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // '(' Parameters (':' Type)?\r\n // '{' Statement* '}'\r\n // ';'?\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range(tn.pos)\r\n );\r\n return null;\r\n }\r\n\r\n var name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var signatureStart: i32 = -1;\r\n\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n signatureStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n if (signatureStart < 0) {\r\n signatureStart = tn.tokenPos;\r\n }\r\n\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n var thisType = this.parseParametersThis;\r\n\r\n var isSetter = (flags & CommonFlags.SET) != 0;\r\n if (isSetter) {\r\n if (parameters.length != 1) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,\r\n name.range\r\n ); // recoverable\r\n }\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,\r\n name.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n if (flags & CommonFlags.GET) {\r\n if (parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n name.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn, true, isSetter);\r\n if (!returnType) return null;\r\n }\r\n\r\n if (!returnType) {\r\n returnType = Node.createOmittedType(\r\n tn.range(tn.pos)\r\n );\r\n if (!isSetter) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n var body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body) return null;\r\n } else if (!(flags & CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n tn.range(tn.pos)\r\n );\r\n }\r\n\r\n var ret = Node.createFunctionDeclaration(\r\n name,\r\n typeParameters,\r\n signature,\r\n body,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseFunctionExpression(tn: Tokenizer): FunctionExpression | null {\r\n var startPos = tn.tokenPos;\r\n var name: IdentifierExpression;\r\n var isArrow = false;\r\n\r\n // either at 'function':\r\n // Identifier?\r\n // '(' Parameters (':' Type)?\r\n // Statement\r\n\r\n if (tn.token == Token.FUNCTION) {\r\n if (tn.skipIdentifier()) {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else { // empty name\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.pos));\r\n }\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n // or at '(' of arrow function:\r\n // Parameters (':' Type)?\r\n // Statement\r\n\r\n } else {\r\n isArrow = true;\r\n assert(tn.token == Token.OPENPAREN);\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.tokenPos));\r\n }\r\n\r\n // TODO: type parameters? doesn't seem worth it.\r\n\r\n var signatureStart = tn.pos;\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n return this.parseFunctionExpressionCommon(tn, name, parameters, isArrow, startPos, signatureStart);\r\n }\r\n\r\n private parseFunctionExpressionCommon(\r\n tn: Tokenizer,\r\n name: IdentifierExpression,\r\n parameters: ParameterNode[],\r\n isArrow: bool,\r\n startPos: i32 = -1,\r\n signatureStart: i32 = -1\r\n ): FunctionExpression | null {\r\n if (startPos < 0) startPos = name.range.start;\r\n if (signatureStart < 0) signatureStart = startPos;\r\n\r\n var returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n\r\n if (isArrow) {\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"=>\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n var signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n null, // TODO?\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n var body: Statement | null;\r\n if (isArrow) {\r\n body = this.parseStatement(tn, false);\r\n } else {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"{\"\r\n );\r\n return null;\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n }\r\n if (!body) return null;\r\n\r\n var declaration = Node.createFunctionDeclaration(\r\n name,\r\n null,\r\n signature,\r\n body,\r\n null,\r\n isArrow ? CommonFlags.ARROW : CommonFlags.NONE,\r\n tn.range(startPos, tn.pos)\r\n );\r\n return Node.createFunctionExpression(declaration);\r\n }\r\n\r\n parseClassOrInterface(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): ClassDeclaration | null {\r\n\r\n // at ('class' | 'interface'):\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // ('extends' Type)?\r\n // ('implements' Type (',' Type)*)?\r\n // '{' ClassMember* '}'\r\n\r\n var isInterface = tn.token == Token.INTERFACE;\r\n\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n var identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n\r\n var typeParameters: TypeParameterNode[] | null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n } else {\r\n typeParameters = [];\r\n }\r\n\r\n var extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\r\n }\r\n\r\n var implementsTypes: TypeNode[] | null = null;\r\n if (tn.skip(Token.IMPLEMENTS)) {\r\n if (isInterface) {\r\n this.error(\r\n DiagnosticCode.Interface_declaration_cannot_have_implements_clause,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n do {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n if (!isInterface) {\r\n if (!implementsTypes) implementsTypes = [];\r\n implementsTypes.push(type);\r\n }\r\n } while (tn.skip(Token.COMMA));\r\n }\r\n\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n\r\n var members = new Array();\r\n var declaration: ClassDeclaration;\r\n if (isInterface) {\r\n assert(!implementsTypes);\r\n declaration = Node.createInterfaceDeclaration(\r\n identifier,\r\n typeParameters,\r\n extendsType,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n declaration = Node.createClassDeclaration(\r\n identifier,\r\n typeParameters,\r\n extendsType,\r\n implementsTypes,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseClassMember(tn, declaration);\r\n if (!member) return null;\r\n member.parent = declaration;\r\n members.push(member);\r\n } while (!tn.skip(Token.CLOSEBRACE));\r\n }\r\n return declaration;\r\n }\r\n\r\n parseClassMember(\r\n tn: Tokenizer,\r\n parent: ClassDeclaration\r\n ): DeclarationStatement | null {\r\n\r\n // before:\r\n // ('public' | 'private' | 'protected')?\r\n // ('static' | 'abstract')?\r\n // 'readonly'?\r\n // ('get' | 'set')?\r\n // Identifier ...\r\n\r\n var startPos = tn.pos;\r\n\r\n var decorators = new Array();\r\n while (tn.skip(Token.AT)) {\r\n let decorator = this.parseDecorator(tn);\r\n if (!decorator) break;\r\n decorators.push(decorator);\r\n }\r\n\r\n var flags = parent.flags & CommonFlags.AMBIENT; // inherit\r\n\r\n if (tn.skip(Token.PUBLIC)) {\r\n flags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n flags |= CommonFlags.PRIVATE;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n flags |= CommonFlags.PROTECTED;\r\n }\r\n\r\n var staticStart: i32 = 0;\r\n var staticEnd: i32 = 0;\r\n var abstractStart: i32 = 0;\r\n var abstractEnd: i32 = 0;\r\n if (tn.skip(Token.STATIC)) {\r\n flags |= CommonFlags.STATIC;\r\n staticStart = tn.tokenPos;\r\n staticEnd = tn.pos;\r\n } else {\r\n if (tn.skip(Token.ABSTRACT)) {\r\n flags |= (CommonFlags.ABSTRACT | CommonFlags.INSTANCE);\r\n abstractStart = tn.tokenPos;\r\n abstractEnd = tn.pos;\r\n } else {\r\n flags |= CommonFlags.INSTANCE;\r\n }\r\n if (parent.flags & CommonFlags.GENERIC) {\r\n flags |= CommonFlags.GENERIC_CONTEXT;\r\n }\r\n }\r\n\r\n var readonlyStart: i32 = 0;\r\n var readonlyEnd: i32 = 0;\r\n if (tn.skip(Token.READONLY)) {\r\n flags |= CommonFlags.READONLY;\r\n readonlyStart = tn.tokenPos;\r\n readonlyEnd = tn.pos;\r\n }\r\n\r\n // check if accessor: ('get' | 'set') ^\\n Identifier\r\n var state = tn.mark();\r\n var isConstructor = false;\r\n var isGetter = false;\r\n var getStart: i32 = 0;\r\n var getEnd: i32 = 0;\r\n var isSetter = false;\r\n var setStart: i32 = 0;\r\n var setEnd: i32 = 0;\r\n if (tn.skip(Token.GET)) {\r\n if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n flags |= CommonFlags.GET;\r\n isGetter = true;\r\n setStart = tn.tokenPos;\r\n setEnd = tn.pos;\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n } else {\r\n tn.reset(state);\r\n }\r\n } else if (tn.skip(Token.SET)) {\r\n if (tn.peek(true, IdentifierHandling.PREFER) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n flags |= CommonFlags.SET | CommonFlags.SET;\r\n isSetter = true;\r\n setStart = tn.tokenPos;\r\n setEnd = tn.pos;\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n } else {\r\n tn.reset(state);\r\n }\r\n } else if (tn.skip(Token.CONSTRUCTOR)) {\r\n flags |= CommonFlags.CONSTRUCTOR;\r\n isConstructor = true;\r\n if (flags & CommonFlags.STATIC) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(staticStart, staticEnd), \"static\"\r\n ); // recoverable\r\n }\r\n if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(abstractStart, abstractEnd), \"abstract\"\r\n ); // recoverable\r\n }\r\n if (flags & CommonFlags.READONLY) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(readonlyStart, readonlyEnd), \"readonly\"\r\n ); // recoverable\r\n }\r\n }\r\n\r\n if (!isConstructor && !tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n var name = isConstructor\r\n ? Node.createConstructorExpression(tn.range())\r\n : Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n let typeParametersStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,\r\n tn.range(typeParametersStart, tn.pos)\r\n ); // recoverable\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.An_accessor_cannot_have_type_parameters,\r\n tn.range(typeParametersStart, tn.pos)\r\n ); // recoverable\r\n } else {\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n }\r\n\r\n // method: '(' Parameters (':' Type)? '{' Statement* '}' ';'?\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let signatureStart = tn.tokenPos;\r\n let parameters = this.parseParameters(tn, isConstructor);\r\n if (!parameters) return null;\r\n let thisType = this.parseParametersThis;\r\n if (isConstructor) {\r\n for (let i = 0, k = parameters.length; i < k; ++i) {\r\n let parameter = parameters[i];\r\n if (parameter.isAny(\r\n CommonFlags.PUBLIC |\r\n CommonFlags.PROTECTED |\r\n CommonFlags.PRIVATE |\r\n CommonFlags.READONLY\r\n )) {\r\n let implicitFieldDeclaration = Node.createFieldDeclaration(\r\n parameter.name,\r\n parameter.type,\r\n null, // initialized via parameter\r\n null,\r\n parameter.flags | CommonFlags.INSTANCE,\r\n parameter.range\r\n );\r\n implicitFieldDeclaration.parameterIndex = i;\r\n implicitFieldDeclaration.parent = parent;\r\n parameter.implicitFieldDeclaration = implicitFieldDeclaration;\r\n parent.members.push(implicitFieldDeclaration);\r\n }\r\n }\r\n } else if (isGetter) {\r\n if (parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n name.range\r\n );\r\n }\r\n } else if (isSetter) {\r\n if (parameters.length != 1) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,\r\n name.range\r\n );\r\n }\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,\r\n name.range\r\n );\r\n }\r\n }\r\n\r\n let returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n if (name.kind == NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration,\r\n tn.range()\r\n );\r\n } else if (isSetter) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_cannot_have_a_return_type_annotation,\r\n tn.range()\r\n );\r\n }\r\n returnType = this.parseType(tn, name.kind == NodeKind.CONSTRUCTOR || isSetter);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n if (!isSetter && name.kind != NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n let signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n let body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (flags & CommonFlags.AMBIENT) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n if (!body) return null;\r\n } else if (!(flags & CommonFlags.AMBIENT)) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n let retMethod = Node.createMethodDeclaration(\r\n name,\r\n typeParameters,\r\n signature,\r\n body,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retMethod;\r\n\r\n } else if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Constructor_implementation_is_missing,\r\n name.range\r\n );\r\n\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n name.range\r\n );\r\n\r\n // field: (':' Type)? ('=' Expression)? ';'?\r\n } else {\r\n if (flags & CommonFlags.ABSTRACT) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(abstractStart, abstractEnd), \"abstract\"\r\n ); // recoverable\r\n }\r\n\r\n if (flags & CommonFlags.GET) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(getStart, getEnd), \"get\"\r\n ); // recoverable\r\n }\r\n\r\n if (flags & CommonFlags.SET) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n tn.range(setStart, setEnd), \"set\"\r\n ); // recoverable\r\n }\r\n\r\n let type: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n let initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n initializer = this.parseExpression(tn);\r\n if (!initializer) return null;\r\n }\r\n let retField = Node.createFieldDeclaration(\r\n name,\r\n type,\r\n initializer,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retField;\r\n }\r\n return null;\r\n }\r\n\r\n parseNamespace(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): NamespaceDeclaration | null {\r\n\r\n // at 'namespace': Identifier '{' (Variable | Function)* '}'\r\n\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let members = new Array();\r\n let ns = Node.createNamespaceDeclaration(\r\n identifier,\r\n members,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseTopLevelStatement(tn, ns);\r\n if (!member) return null;\r\n member.parent = ns;\r\n members.push(member);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ns;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExport(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n startPos: i32\r\n ): ExportStatement | null {\r\n\r\n // at 'export': '{' ExportMember (',' ExportMember)* }' ('from' StringLiteral)? ';'?\r\n\r\n var path: StringLiteralExpression | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseExportMember(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n if (tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n let ret = Node.createExportStatement(members, path, flags, tn.range(startPos, tn.pos));\r\n let internalPath = ret.internalPath;\r\n if (internalPath !== null && !this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else if (tn.skip(Token.ASTERISK)) {\r\n if (tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n let ret = Node.createExportStatement(null, path, flags, tn.range(startPos, tn.pos));\r\n let internalPath = assert(ret.internalPath);\r\n let source = tn.source;\r\n if (!source.exportPaths) source.exportPaths = new Set();\r\n source.exportPaths.add(internalPath);\r\n if (!this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"from\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportMember(\r\n tn: Tokenizer\r\n ): ExportMember | null {\r\n\r\n // before: Identifier ('as' Identifier)?\r\n\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifierName()) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createExportMember(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImport(\r\n tn: Tokenizer\r\n ): ImportStatement | null {\r\n\r\n // at 'import':\r\n // ('{' (ImportMember (',' ImportMember)* '}') | ('*' 'as' Identifier)?\r\n // 'from' StringLiteral ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var members: ImportDeclaration[] | null = null;\r\n var namespaceName: IdentifierExpression | null = null;\r\n var skipFrom = false;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseImportDeclaration(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACE)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n } else if (tn.skip(Token.ASTERISK)) {\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifier()) {\r\n namespaceName = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"as\"\r\n );\r\n return null;\r\n }\r\n } else {\r\n skipFrom = true;\r\n }\r\n\r\n if (skipFrom || tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n let path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n let ret: ImportStatement;\r\n if (namespaceName) {\r\n assert(!members);\r\n ret = Node.createImportStatementWithWildcard(namespaceName, path, tn.range(startPos, tn.pos));\r\n } else {\r\n ret = Node.createImportStatement(members, path, tn.range(startPos, tn.pos));\r\n }\r\n let internalPath = ret.internalPath;\r\n if (!this.seenlog.has(internalPath)) {\r\n this.backlog.push(internalPath);\r\n this.seenlog.add(internalPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"from\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImportDeclaration(\r\n tn: Tokenizer\r\n ): ImportDeclaration | null {\r\n\r\n // before: Identifier ('as' Identifier)?\r\n\r\n if (tn.skipIdentifierName()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skipIdentifier()) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createImportDeclaration(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportImport(\r\n tn: Tokenizer,\r\n startPos: i32\r\n ): ExportImportStatement | null {\r\n\r\n // at 'export' 'import': Identifier ('=' Identifier)? ';'?\r\n\r\n if (tn.skipIdentifier()) {\r\n let asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n if (tn.skipIdentifier()) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let ret = Node.createExportImportStatement(identifier, asIdentifier, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseStatement(\r\n tn: Tokenizer,\r\n topLevel: bool = false\r\n ): Statement | null {\r\n\r\n // at previous token\r\n\r\n var state = tn.mark();\r\n var token = tn.next();\r\n var statement: Statement | null = null;\r\n switch (token) {\r\n case Token.BREAK: {\r\n statement = this.parseBreak(tn);\r\n break;\r\n }\r\n case Token.CONST: {\r\n statement = this.parseVariable(tn, CommonFlags.CONST, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.CONTINUE: {\r\n statement = this.parseContinue(tn);\r\n break;\r\n }\r\n case Token.DO: {\r\n statement = this.parseDoStatement(tn);\r\n break;\r\n }\r\n case Token.FOR: {\r\n statement = this.parseForStatement(tn);\r\n break;\r\n }\r\n case Token.IF: {\r\n statement = this.parseIfStatement(tn);\r\n break;\r\n }\r\n case Token.LET: {\r\n statement = this.parseVariable(tn, CommonFlags.LET, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.VAR: {\r\n statement = this.parseVariable(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n case Token.OPENBRACE: {\r\n statement = this.parseBlockStatement(tn, topLevel);\r\n break;\r\n }\r\n case Token.RETURN: {\r\n if (topLevel) {\r\n this.error(\r\n DiagnosticCode.A_return_statement_can_only_be_used_within_a_function_body,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n statement = this.parseReturn(tn);\r\n break;\r\n }\r\n case Token.SEMICOLON: {\r\n return Node.createEmptyStatement(tn.range(tn.tokenPos));\r\n }\r\n case Token.SWITCH: {\r\n statement = this.parseSwitchStatement(tn);\r\n break;\r\n }\r\n case Token.THROW: {\r\n statement = this.parseThrowStatement(tn);\r\n break;\r\n }\r\n case Token.TRY: {\r\n statement = this.parseTryStatement(tn);\r\n break;\r\n }\r\n case Token.VOID: {\r\n statement = this.parseVoidStatement(tn);\r\n break;\r\n }\r\n case Token.WHILE: {\r\n statement = this.parseWhileStatement(tn);\r\n break;\r\n }\r\n case Token.TYPE: { // also identifier\r\n if (tn.peek(false, IdentifierHandling.PREFER) == Token.IDENTIFIER) {\r\n statement = this.parseTypeDeclaration(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: {\r\n tn.reset(state);\r\n statement = this.parseExpressionStatement(tn);\r\n break;\r\n }\r\n }\r\n if (!statement) { // has been reported\r\n tn.reset(state);\r\n this.skipStatement(tn);\r\n } else {\r\n tn.discard(state);\r\n }\r\n return statement;\r\n }\r\n\r\n parseBlockStatement(\r\n tn: Tokenizer,\r\n topLevel: bool\r\n ): BlockStatement | null {\r\n\r\n // at '{': Statement* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let state = tn.mark();\r\n let statement = this.parseStatement(tn, topLevel);\r\n if (!statement) {\r\n tn.reset(state);\r\n this.skipStatement(tn);\r\n } else {\r\n tn.discard(state);\r\n statements.push(statement);\r\n }\r\n }\r\n var ret = Node.createBlockStatement(statements, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseBreak(\r\n tn: Tokenizer\r\n ): BreakStatement | null {\r\n\r\n // at 'break': Identifier? ';'?\r\n\r\n var identifier: IdentifierExpression | null = null;\r\n if (tn.peek(true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(IdentifierHandling.PREFER);\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = Node.createBreakStatement(identifier, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseContinue(\r\n tn: Tokenizer\r\n ): ContinueStatement | null {\r\n\r\n // at 'continue': Identifier? ';'?\r\n\r\n var identifier: IdentifierExpression | null = null;\r\n if (tn.peek(true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n tn.next(IdentifierHandling.PREFER);\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n }\r\n var ret = Node.createContinueStatement(identifier, tn.range());\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseDoStatement(\r\n tn: Tokenizer\r\n ): DoStatement | null {\r\n\r\n // at 'do': Statement 'while' '(' Expression ')' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n if (tn.skip(Token.WHILE)) {\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let ret = Node.createDoStatement(statement, condition, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"while\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExpressionStatement(\r\n tn: Tokenizer\r\n ): ExpressionStatement | null {\r\n\r\n // at previous token\r\n\r\n var expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n\r\n var ret = Node.createExpressionStatement(expr);\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseForStatement(\r\n tn: Tokenizer\r\n ): ForStatement | null {\r\n\r\n // at 'for': '(' Statement? Expression? ';' Expression? ')' Statement\r\n\r\n var startPos = tn.tokenPos;\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let initializer: Statement | null = null;\r\n\r\n if (tn.skip(Token.CONST)) {\r\n initializer = this.parseVariable(tn, CommonFlags.CONST, null, tn.tokenPos);\r\n } else if (tn.skip(Token.LET)) {\r\n initializer = this.parseVariable(tn, CommonFlags.LET, null, tn.tokenPos);\r\n } else if (tn.skip(Token.VAR)) {\r\n initializer = this.parseVariable(tn, CommonFlags.NONE, null, tn.tokenPos);\r\n\r\n } else if (!tn.skip(Token.SEMICOLON)) {\r\n initializer = this.parseExpressionStatement(tn);\r\n if (!initializer) return null;\r\n }\r\n\r\n if (tn.token == Token.SEMICOLON) {\r\n let condition: ExpressionStatement | null = null;\r\n if (!tn.skip(Token.SEMICOLON)) {\r\n condition = this.parseExpressionStatement(tn);\r\n if (!condition) return null;\r\n }\r\n\r\n if (tn.token == Token.SEMICOLON) {\r\n let incrementor: Expression | null = null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n incrementor = this.parseExpression(tn);\r\n if (!incrementor) return null;\r\n\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n return Node.createForStatement(\r\n initializer,\r\n condition\r\n ? condition.expression\r\n : null,\r\n incrementor,\r\n statement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseIfStatement(\r\n tn: Tokenizer\r\n ): IfStatement | null {\r\n\r\n // at 'if': '(' Expression ')' Statement ('else' Statement)?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let elseStatement: Statement | null = null;\r\n if (tn.skip(Token.ELSE)) {\r\n elseStatement = this.parseStatement(tn);\r\n if (!elseStatement) return null;\r\n }\r\n return Node.createIfStatement(\r\n condition,\r\n statement,\r\n elseStatement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchStatement(\r\n tn: Tokenizer\r\n ): SwitchStatement | null {\r\n\r\n // at 'switch': '(' Expression ')' '{' SwitchCase* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let cases = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let case_ = this.parseSwitchCase(tn);\r\n if (!case_) return null;\r\n cases.push(case_);\r\n }\r\n let ret = Node.createSwitchStatement(condition, cases, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchCase(\r\n tn: Tokenizer\r\n ): SwitchCase | null {\r\n\r\n var startPos = tn.tokenPos;\r\n var statements: Statement[],\r\n statement: Statement | null;\r\n\r\n // 'case' Expression ':' Statement*\r\n\r\n if (tn.skip(Token.CASE)) {\r\n let label = this.parseExpression(tn);\r\n if (!label) return null;\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(label, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n\r\n // 'default' ':' Statement*\r\n\r\n } else if (tn.skip(Token.DEFAULT)) {\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(null, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._case_or_default_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseThrowStatement(\r\n tn: Tokenizer\r\n ): ThrowStatement | null {\r\n\r\n // at 'throw': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n var ret = Node.createThrowStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseTryStatement(\r\n tn: Tokenizer\r\n ): TryStatement | null {\r\n\r\n // at 'try':\r\n // '{' Statement* '}'\r\n // ('catch' '(' VariableMember ')' '{' Statement* '}')?\r\n // ('finally' '{' Statement* '}'? ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var stmt: Statement | null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n statements.push(stmt);\r\n }\r\n let catchVariable: IdentifierExpression | null = null;\r\n let catchStatements: Statement[] | null = null;\r\n let finallyStatements: Statement[] | null = null;\r\n if (tn.skip(Token.CATCH)) {\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skipIdentifier()) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n catchVariable = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n catchStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n catchStatements.push(stmt);\r\n }\r\n }\r\n if (tn.skip(Token.FINALLY)) {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n finallyStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n finallyStatements.push(stmt);\r\n }\r\n }\r\n if (!(catchStatements || finallyStatements)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"catch\"\r\n );\r\n return null;\r\n }\r\n let ret = Node.createTryStatement(\r\n statements,\r\n catchVariable,\r\n catchStatements,\r\n finallyStatements,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseTypeDeclaration(\r\n tn: Tokenizer,\r\n flags: CommonFlags,\r\n decorators: DecoratorNode[] | null,\r\n startPos: i32\r\n ): TypeDeclaration | null {\r\n\r\n // at 'type': Identifier ('<' TypeParameters '>')? '=' Type ';'?\r\n\r\n if (tn.skipIdentifier()) {\r\n let name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n flags |= CommonFlags.GENERIC;\r\n }\r\n if (tn.skip(Token.EQUALS)) {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n let ret = Node.createTypeDeclaration(\r\n name,\r\n typeParameters,\r\n type,\r\n decorators,\r\n flags,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseVoidStatement(\r\n tn: Tokenizer\r\n ): VoidStatement | null {\r\n\r\n // at 'void': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn, Precedence.GROUPING);\r\n if (!expression) return null;\r\n var ret = Node.createVoidStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseWhileStatement(\r\n tn: Tokenizer\r\n ): WhileStatement | null {\r\n\r\n // at 'while': '(' Expression ')' Statement ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let ret = Node.createWhileStatement(expression, statement, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n // expressions\r\n // see: http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm#climbing\r\n\r\n parseExpressionStart(\r\n tn: Tokenizer\r\n ): Expression | null {\r\n\r\n var token = tn.next(IdentifierHandling.PREFER);\r\n var startPos = tn.tokenPos;\r\n var expr: Expression | null = null;\r\n\r\n if (token == Token.NULL) {\r\n return Node.createNullExpression(tn.range());\r\n }\r\n if (token == Token.TRUE) {\r\n return Node.createTrueExpression(tn.range());\r\n }\r\n if (token == Token.FALSE) {\r\n return Node.createFalseExpression(tn.range());\r\n }\r\n\r\n var precedence = determinePrecedenceStart(token);\r\n if (precedence != Precedence.INVALID) {\r\n let operand: Expression | null;\r\n\r\n // TODO: SpreadExpression, YieldExpression (currently become unsupported UnaryPrefixExpressions)\r\n\r\n // NewExpression\r\n if (token == Token.NEW) {\r\n operand = this.parseExpression(tn, Precedence.CALL);\r\n if (!operand) return null;\r\n if (operand.kind == NodeKind.CALL) {\r\n return Node.createNewExpression(\r\n (operand).expression,\r\n (operand).typeArguments,\r\n (operand).arguments,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n } else {\r\n operand = this.parseExpression(tn, precedence);\r\n if (!operand) return null;\r\n }\r\n\r\n // UnaryPrefixExpression\r\n if (token == Token.PLUS_PLUS || token == Token.MINUS_MINUS) {\r\n if (\r\n operand.kind != NodeKind.IDENTIFIER &&\r\n operand.kind != NodeKind.ELEMENTACCESS &&\r\n operand.kind != NodeKind.PROPERTYACCESS\r\n ) {\r\n this.error(\r\n DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,\r\n operand.range\r\n );\r\n }\r\n }\r\n return Node.createUnaryPrefixExpression(token, operand, tn.range(startPos, tn.pos));\r\n }\r\n\r\n switch (token) {\r\n\r\n // ParenthesizedExpression\r\n // FunctionExpression\r\n case Token.OPENPAREN: {\r\n\r\n // determine whether this is a function expression\r\n if (tn.skip(Token.CLOSEPAREN)) { // must be a function expression (fast route)\r\n return this.parseFunctionExpressionCommon(\r\n tn,\r\n Node.createEmptyIdentifierExpression(tn.range(startPos)),\r\n [],\r\n true\r\n );\r\n }\r\n let state = tn.mark();\r\n let again = true;\r\n do {\r\n switch (tn.next(IdentifierHandling.PREFER)) {\r\n\r\n // function expression\r\n case Token.DOT_DOT_DOT: {\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n switch (tn.next()) {\r\n\r\n // if we got here, check for arrow\r\n case Token.CLOSEPAREN: {\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n again = false;\r\n break;\r\n }\r\n // fall-through\r\n }\r\n // function expression\r\n case Token.COLON: { // type annotation\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.QUESTION: // optional parameter or ternary\r\n case Token.COMMA: {\r\n break; // continue\r\n }\r\n // parenthesized expression\r\n // case Token.EQUALS: // missing type annotation for simplicity\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n // parenthesized expression\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n } while (again);\r\n tn.reset(state);\r\n\r\n // parse parenthesized\r\n expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n return Node.createParenthesizedExpression(expr, tn.range(startPos, tn.pos));\r\n }\r\n // ArrayLiteralExpression\r\n case Token.OPENBRACKET: {\r\n let elementExpressions = new Array();\r\n while (!tn.skip(Token.CLOSEBRACKET)) {\r\n if (tn.peek() == Token.COMMA) {\r\n expr = null; // omitted\r\n } else {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n }\r\n elementExpressions.push(expr);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEBRACKET)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return Node.createArrayLiteralExpression(elementExpressions, tn.range(startPos, tn.pos));\r\n }\r\n // AssertionExpression (unary prefix)\r\n case Token.LESSTHAN: {\r\n let toType = this.parseType(tn);\r\n if (!toType) return null;\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n expr = this.parseExpression(tn, Precedence.CALL);\r\n if (!expr) return null;\r\n return Node.createAssertionExpression(\r\n AssertionKind.PREFIX,\r\n expr,\r\n toType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n case Token.IDENTIFIER: {\r\n return Node.createIdentifierExpression(tn.readIdentifier(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.THIS: {\r\n return Node.createThisExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.CONSTRUCTOR: {\r\n return Node.createConstructorExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.SUPER: {\r\n return Node.createSuperExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.STRINGLITERAL: {\r\n return Node.createStringLiteralExpression(tn.readString(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.INTEGERLITERAL: {\r\n return Node.createIntegerLiteralExpression(tn.readInteger(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.FLOATLITERAL: {\r\n return Node.createFloatLiteralExpression(tn.readFloat(), tn.range(startPos, tn.pos));\r\n }\r\n // RegexpLiteralExpression\r\n // note that this also continues on invalid ones so the surrounding AST remains intact\r\n case Token.SLASH: {\r\n let regexpPattern = tn.readRegexpPattern(); // also reports\r\n if (!tn.skip(Token.SLASH)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"/\"\r\n );\r\n return null;\r\n }\r\n return Node.createRegexpLiteralExpression(\r\n regexpPattern,\r\n tn.readRegexpFlags(), // also reports\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n case Token.FUNCTION: {\r\n return this.parseFunctionExpression(tn);\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Expression_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n tryParseTypeArgumentsBeforeArguments(\r\n tn: Tokenizer\r\n ): CommonTypeNode[] | null {\r\n\r\n // at '<': Type (',' Type)* '>' '('\r\n\r\n var state = tn.mark();\r\n if (!tn.skip(Token.LESSTHAN)) return null;\r\n var typeArguments = new Array();\r\n do {\r\n if (tn.peek() === Token.GREATERTHAN) {\r\n break;\r\n }\r\n let type = this.parseType(tn, true, true);\r\n if (!type) {\r\n tn.reset(state);\r\n return null;\r\n }\r\n typeArguments.push(type);\r\n } while (tn.skip(Token.COMMA));\r\n if (tn.skip(Token.GREATERTHAN) && tn.skip(Token.OPENPAREN)) {\r\n return typeArguments;\r\n }\r\n tn.reset(state);\r\n return null;\r\n }\r\n\r\n parseArguments(\r\n tn: Tokenizer\r\n ): Expression[] | null {\r\n\r\n // at '(': (Expression (',' Expression)*)? ')'\r\n\r\n var args = new Array();\r\n while (!tn.skip(Token.CLOSEPAREN)) {\r\n let expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n args.push(expr);\r\n if (!tn.skip(Token.COMMA)) {\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n return args;\r\n }\r\n\r\n parseExpression(\r\n tn: Tokenizer,\r\n precedence: Precedence = 0\r\n ): Expression | null {\r\n\r\n var expr = this.parseExpressionStart(tn);\r\n if (!expr) return null;\r\n var startPos = expr.range.start;\r\n\r\n // CallExpression?\r\n if (nodeIsCallable(expr.kind)) {\r\n let typeArguments: CommonTypeNode[] | null = null;\r\n while (\r\n tn.skip(Token.OPENPAREN)\r\n ||\r\n nodeIsGenericCallable(expr.kind) && (typeArguments = this.tryParseTypeArgumentsBeforeArguments(tn)) !== null\r\n ) {\r\n let args = this.parseArguments(tn);\r\n if (!args) return null;\r\n expr = Node.createCallExpression(expr, typeArguments, args, tn.range(startPos, tn.pos));\r\n }\r\n }\r\n\r\n var token: Token;\r\n var next: Expression | null = null;\r\n var nextPrecedence: Precedence;\r\n while (\r\n (nextPrecedence = determinePrecedence(token = tn.peek())) >= precedence\r\n ) { // precedence climbing\r\n tn.next();\r\n switch (token) {\r\n // AssertionExpression\r\n case Token.AS: {\r\n let toType = this.parseType(tn); // reports\r\n if (!toType) return null;\r\n expr = Node.createAssertionExpression(\r\n AssertionKind.AS,\r\n expr,\r\n toType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // InstanceOfExpression\r\n case Token.INSTANCEOF: {\r\n let isType = this.parseType(tn); // reports\r\n if (!isType) return null;\r\n expr = Node.createInstanceOfExpression(\r\n expr,\r\n isType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // ElementAccessExpression\r\n case Token.OPENBRACKET: {\r\n next = this.parseExpression(tn); // reports\r\n if (!next) return null;\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n expr = Node.createElementAccessExpression(\r\n expr,\r\n next,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // UnaryPostfixExpression\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS: {\r\n if (\r\n expr.kind != NodeKind.IDENTIFIER &&\r\n expr.kind != NodeKind.ELEMENTACCESS &&\r\n expr.kind != NodeKind.PROPERTYACCESS\r\n ) {\r\n this.error(\r\n DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,\r\n expr.range\r\n );\r\n }\r\n expr = Node.createUnaryPostfixExpression(\r\n token,\r\n expr,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // TernaryExpression\r\n case Token.QUESTION: {\r\n let ifThen = this.parseExpression(tn);\r\n if (!ifThen) return null;\r\n if (!tn.skip(Token.COLON)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n let ifElse = this.parseExpression(tn, precedence > Precedence.COMMA ? Precedence.COMMA + 1 : 0);\r\n if (!ifElse) return null;\r\n expr = Node.createTernaryExpression(\r\n expr,\r\n ifThen,\r\n ifElse,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // CommaExpression\r\n case Token.COMMA: {\r\n let commaExprs: Expression[] = [ expr ];\r\n do {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n commaExprs.push(expr);\r\n } while (tn.skip(Token.COMMA));\r\n expr = Node.createCommaExpression(commaExprs, tn.range(startPos, tn.pos));\r\n break;\r\n }\r\n default: {\r\n next = this.parseExpression(tn,\r\n isRightAssociative(token)\r\n ? nextPrecedence\r\n : nextPrecedence + 1\r\n );\r\n if (!next) return null;\r\n\r\n // PropertyAccessExpression\r\n if (token == Token.DOT) {\r\n if (next.kind == NodeKind.IDENTIFIER) {\r\n expr = Node.createPropertyAccessExpression(\r\n expr,\r\n next,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else if (next.kind == NodeKind.CALL) { // join\r\n let propertyCall = next;\r\n if (propertyCall.expression.kind == NodeKind.IDENTIFIER) {\r\n propertyCall.expression = Node.createPropertyAccessExpression(\r\n expr,\r\n propertyCall.expression,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n propertyCall.expression.range\r\n );\r\n return null;\r\n }\r\n expr = propertyCall;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n next.range\r\n );\r\n return null;\r\n }\r\n\r\n // BinaryExpression\r\n } else {\r\n expr = Node.createBinaryExpression(token, expr, next, tn.range(startPos, tn.pos));\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n return expr;\r\n }\r\n\r\n /** Skips over a statement on errors in an attempt to reduce unnecessary diagnostic noise. */\r\n skipStatement(tn: Tokenizer): void {\r\n tn.peek(true);\r\n if (tn.nextTokenOnNewLine) tn.next(); // if reset() to the previous line\r\n do {\r\n let nextToken = tn.peek(true);\r\n if (\r\n nextToken == Token.ENDOFFILE || // next step should handle this\r\n nextToken == Token.SEMICOLON // end of the statement for sure\r\n ) {\r\n tn.next();\r\n break;\r\n }\r\n if (tn.nextTokenOnNewLine) break; // end of the statement maybe\r\n switch (tn.next()) {\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n break;\r\n }\r\n case Token.STRINGLITERAL: {\r\n tn.readString();\r\n break;\r\n }\r\n case Token.INTEGERLITERAL: {\r\n tn.readInteger();\r\n break;\r\n }\r\n case Token.FLOATLITERAL: {\r\n tn.readFloat();\r\n break;\r\n }\r\n }\r\n } while (true);\r\n }\r\n\r\n /** Skips over a block on errors in an attempt to reduce unnecessary diagnostic noise. */\r\n // skipBlock(tn: Tokenizer): void {\r\n // var depth = 0;\r\n // var token: Token;\r\n // do {\r\n // token = tn.next();\r\n // if (token == Token.OPENBRACE) {\r\n // ++depth;\r\n // } else if (token == Token.CLOSEBRACE) {\r\n // if (depth) --depth;\r\n // if (!depth) break; // done\r\n // }\r\n // } while (token != Token.ENDOFFILE);\r\n // }\r\n}\r\n\r\n/** Operator precedence from least to largest. */\r\nexport const enum Precedence {\r\n COMMA,\r\n SPREAD,\r\n YIELD,\r\n ASSIGNMENT,\r\n CONDITIONAL,\r\n LOGICAL_OR,\r\n LOGICAL_AND,\r\n BITWISE_OR,\r\n BITWISE_XOR,\r\n BITWISE_AND,\r\n EQUALITY,\r\n RELATIONAL,\r\n SHIFT,\r\n ADDITIVE,\r\n MULTIPLICATIVE,\r\n EXPONENTIATED,\r\n UNARY_PREFIX,\r\n UNARY_POSTFIX,\r\n CALL,\r\n MEMBERACCESS,\r\n GROUPING,\r\n INVALID = -1\r\n}\r\n\r\n/** Determines the precedence of a starting token. */\r\nfunction determinePrecedenceStart(kind: Token): Precedence {\r\n switch (kind) {\r\n case Token.DOT_DOT_DOT: return Precedence.SPREAD;\r\n case Token.YIELD: return Precedence.YIELD;\r\n case Token.EXCLAMATION:\r\n case Token.TILDE:\r\n case Token.PLUS:\r\n case Token.MINUS:\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS:\r\n case Token.TYPEOF:\r\n case Token.VOID:\r\n case Token.DELETE: return Precedence.UNARY_PREFIX;\r\n case Token.NEW: return Precedence.MEMBERACCESS;\r\n default: return Precedence.INVALID;\r\n }\r\n}\r\n\r\n/** Determines the precende of a non-starting token. */\r\nfunction determinePrecedence(kind: Token): Precedence {\r\n switch (kind) {\r\n case Token.COMMA: return Precedence.COMMA;\r\n case Token.EQUALS:\r\n case Token.PLUS_EQUALS:\r\n case Token.MINUS_EQUALS:\r\n case Token.ASTERISK_ASTERISK_EQUALS:\r\n case Token.ASTERISK_EQUALS:\r\n case Token.SLASH_EQUALS:\r\n case Token.PERCENT_EQUALS:\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.AMPERSAND_EQUALS:\r\n case Token.CARET_EQUALS:\r\n case Token.BAR_EQUALS: return Precedence.ASSIGNMENT;\r\n case Token.QUESTION: return Precedence.CONDITIONAL;\r\n case Token.BAR_BAR: return Precedence.LOGICAL_OR;\r\n case Token.AMPERSAND_AMPERSAND: return Precedence.LOGICAL_AND;\r\n case Token.BAR: return Precedence.BITWISE_OR;\r\n case Token.CARET: return Precedence.BITWISE_XOR;\r\n case Token.AMPERSAND: return Precedence.BITWISE_AND;\r\n case Token.EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS:\r\n case Token.EQUALS_EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS_EQUALS: return Precedence.EQUALITY;\r\n case Token.AS:\r\n case Token.IN:\r\n case Token.INSTANCEOF:\r\n case Token.LESSTHAN:\r\n case Token.GREATERTHAN:\r\n case Token.LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_EQUALS: return Precedence.RELATIONAL;\r\n case Token.LESSTHAN_LESSTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: return Precedence.SHIFT;\r\n case Token.PLUS:\r\n case Token.MINUS: return Precedence.ADDITIVE;\r\n case Token.ASTERISK:\r\n case Token.SLASH:\r\n case Token.PERCENT: return Precedence.MULTIPLICATIVE;\r\n case Token.ASTERISK_ASTERISK: return Precedence.EXPONENTIATED;\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS: return Precedence.UNARY_POSTFIX;\r\n case Token.DOT:\r\n case Token.NEW:\r\n case Token.OPENBRACKET: return Precedence.MEMBERACCESS;\r\n default: return Precedence.INVALID;\r\n }\r\n}\r\n\r\n/** Determines whether a non-starting token is right associative. */\r\nfunction isRightAssociative(kind: Token): bool {\r\n switch (kind) {\r\n case Token.EQUALS:\r\n case Token.PLUS_EQUALS:\r\n case Token.MINUS_EQUALS:\r\n case Token.ASTERISK_ASTERISK_EQUALS:\r\n case Token.ASTERISK_EQUALS:\r\n case Token.SLASH_EQUALS:\r\n case Token.PERCENT_EQUALS:\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.AMPERSAND_EQUALS:\r\n case Token.CARET_EQUALS:\r\n case Token.BAR_EQUALS:\r\n case Token.QUESTION:\r\n case Token.ASTERISK_ASTERISK: return true;\r\n default: return false;\r\n }\r\n}\r\n","/**\r\n * Definition builders for WebIDL and TypeScript.\r\n * @module definitions\r\n *//***/\r\n\r\nimport {\r\n CommonFlags\r\n} from \"./common\";\r\n\r\nimport {\r\n Program,\r\n Element,\r\n ElementKind,\r\n Global,\r\n Enum,\r\n EnumValue,\r\n Field,\r\n Function,\r\n FunctionPrototype,\r\n Class,\r\n ClassPrototype,\r\n Namespace,\r\n ConstantValueKind,\r\n Interface,\r\n Property\r\n} from \"./program\";\r\n\r\nimport {\r\n Type,\r\n TypeKind\r\n} from \"./types\";\r\n\r\nimport {\r\n indent\r\n} from \"./util\";\r\n\r\n/** Walker base class. */\r\nabstract class ExportsWalker {\r\n\r\n /** Program reference. */\r\n program: Program;\r\n /** Whether to include private members */\r\n includePrivate: bool;\r\n /** Elements still to do. */\r\n todo: Element[] = [];\r\n /** Already seen elements. */\r\n seen: Set = new Set();\r\n\r\n /** Constructs a new Element walker. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n this.program = program;\r\n this.includePrivate;\r\n }\r\n\r\n /** Walks all exports and calls the respective handlers. */\r\n walk(): void {\r\n for (let element of this.program.moduleLevelExports.values()) this.visitElement(element);\r\n var todo = this.todo;\r\n for (let i = 0; i < todo.length; ) this.visitElement(todo[i]);\r\n }\r\n\r\n /** Visits an element.*/\r\n visitElement(element: Element): void {\r\n if (element.is(CommonFlags.PRIVATE) && !this.includePrivate) return;\r\n if (this.seen.has(element)) return;\r\n this.seen.add(element);\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitGlobal(element);\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n if (element.is(CommonFlags.COMPILED)) this.visitEnum(element);\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n this.visitFunctionInstances(element);\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n this.visitClassInstances(element);\r\n break;\r\n }\r\n case ElementKind.FIELD: {\r\n if ((element).is(CommonFlags.COMPILED)) this.visitField(element);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let prop = element;\r\n let getter = prop.getterPrototype;\r\n if (getter) this.visitFunctionInstances(getter);\r\n let setter = prop.setterPrototype;\r\n if (setter) this.visitFunctionInstances(setter);\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n if (hasCompiledMember(element)) this.visitNamespace(element);\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n\r\n private visitFunctionInstances(element: FunctionPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitFunction(instance);\r\n }\r\n }\r\n\r\n private visitClassInstances(element: ClassPrototype): void {\r\n for (let instance of element.instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) this.visitClass(instance);\r\n }\r\n }\r\n\r\n abstract visitGlobal(element: Global): void;\r\n abstract visitEnum(element: Enum): void;\r\n abstract visitFunction(element: Function): void;\r\n abstract visitClass(element: Class): void;\r\n abstract visitInterface(element: Interface): void;\r\n abstract visitField(element: Field): void;\r\n abstract visitNamespace(element: Element): void;\r\n}\r\n\r\n/** A WebIDL definitions builder. */\r\nexport class IDLBuilder extends ExportsWalker {\r\n\r\n /** Builds WebIDL definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new IDLBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n if (isConst) {\r\n switch (element.constantValueKind) {\r\n case ConstantValueKind.INTEGER: {\r\n sb.push(\" = \");\r\n sb.push(i64_to_string(element.constantIntegerValue));\r\n break;\r\n }\r\n case ConstantValueKind.FLOAT: {\r\n sb.push(\" = \");\r\n sb.push(element.constantFloatValue.toString());\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n let isConst = (member).is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"readonly \");\r\n sb.push(\"unsigned long \");\r\n sb.push(name);\r\n if (isConst) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\";\\n\");\r\n }\r\n }\r\n for (let member of members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) this.visitElement(member);\r\n }\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\" \");\r\n sb.push(element.simpleName);\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(this.typeToString(parameters[i]));\r\n sb.push(\" \");\r\n sb.push(signature.getParameterName(i));\r\n }\r\n sb.push(\");\\n\");\r\n var members = element.members;\r\n if (members && members.size) {\r\n indent(sb, this.indentLevel);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n // TODO\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n // TODO\r\n }\r\n\r\n visitNamespace(element: Namespace): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"interface \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.kind) {\r\n case TypeKind.I8: return \"byte\";\r\n case TypeKind.I16: return \"short\";\r\n case TypeKind.I32: return \"long\";\r\n case TypeKind.I64: return \"long long\";\r\n case TypeKind.ISIZE: return this.program.options.isWasm64 ? \"long long\" : \"long\";\r\n case TypeKind.U8: return \"octet\";\r\n case TypeKind.U16: return \"unsigned short\";\r\n case TypeKind.U32: return \"unsigned long\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"unsigned long long\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"unsigned long long\" : \"unsigned long\";\r\n // ^ TODO: class types\r\n case TypeKind.BOOL: return \"boolean\";\r\n case TypeKind.F32: return \"unrestricted float\";\r\n case TypeKind.F64: return \"unrestricted double\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"interface ASModule {\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n return sb.join(\"\");\r\n }\r\n}\r\n\r\n/** A TypeScript definitions builder. */\r\nexport class TSDBuilder extends ExportsWalker {\r\n\r\n /** Builds TypeScript definitions for the specified program. */\r\n static build(program: Program): string {\r\n return new TSDBuilder(program).build();\r\n }\r\n\r\n private sb: string[] = [];\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program, includePrivate: bool = false) {\r\n super(program, includePrivate);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.STATIC)) {\r\n if (isConst) sb.push(\"static readonly \");\r\n else sb.push(\"static \");\r\n } else {\r\n if (isConst) sb.push(\"const \");\r\n else sb.push(\"var \");\r\n }\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitEnum(element: Enum): void {\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"enum \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n var members = element.members;\r\n if (members) {\r\n let numMembers = members.size;\r\n for (let [name, member] of members) {\r\n if (member.kind == ElementKind.ENUMVALUE) {\r\n indent(sb, this.indentLevel);\r\n sb.push(name);\r\n if (member.is(CommonFlags.INLINED)) {\r\n sb.push(\" = \");\r\n sb.push((member).constantValue.toString(10));\r\n }\r\n sb.push(\",\\n\");\r\n --numMembers;\r\n }\r\n }\r\n if (numMembers) this.visitNamespace(element);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitFunction(element: Function): void {\r\n if (element.isAny(CommonFlags.PRIVATE | CommonFlags.SET)) return;\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.GET)) {\r\n sb.push(element.prototype.declaration.name.text); // 'get:funcName' internally\r\n sb.push(\": \");\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\";\\n\");\r\n return;\r\n } else {\r\n if (!element.isAny(CommonFlags.STATIC | CommonFlags.INSTANCE)) sb.push(\"function \");\r\n sb.push(element.simpleName);\r\n }\r\n sb.push(\"(\");\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n // var requiredParameters = signature.requiredParameters;\r\n for (let i = 0; i < numParameters; ++i) {\r\n if (i) sb.push(\", \");\r\n // if (i >= requiredParameters) sb.push(\"optional \");\r\n sb.push(signature.getParameterName(i));\r\n sb.push(\": \");\r\n sb.push(this.typeToString(parameters[i]));\r\n }\r\n if (element.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.SET)) {\r\n sb.push(\")\");\r\n } else {\r\n sb.push(\"): \");\r\n sb.push(this.typeToString(signature.returnType));\r\n }\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitClass(element: Class): void {\r\n var sb = this.sb;\r\n var isInterface = element.kind == ElementKind.INTERFACE;\r\n indent(sb, this.indentLevel++);\r\n if (isInterface) {\r\n sb.push(\"interface \");\r\n } else {\r\n if (element.is(CommonFlags.ABSTRACT)) sb.push(\"abstract \");\r\n sb.push(\"class \");\r\n }\r\n sb.push(element.simpleName);\r\n var base = element.base;\r\n if (base && base.is(CommonFlags.COMPILED | CommonFlags.MODULE_EXPORT)) {\r\n sb.push(\" extends \");\r\n sb.push(base.simpleName); // TODO: fqn\r\n }\r\n sb.push(\" {\\n\");\r\n var members = element.prototype.members; // static\r\n if (members) {\r\n for (let member of members.values()) {\r\n this.visitElement(member);\r\n }\r\n }\r\n var ctor = element.constructorInstance;\r\n if (ctor) this.visitFunction(ctor);\r\n members = element.members; // instance\r\n if (members) {\r\n for (let member of members.values()) this.visitElement(member);\r\n }\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n\r\n visitInterface(element: Interface): void {\r\n this.visitClass(element);\r\n }\r\n\r\n visitField(element: Field): void {\r\n if (element.is(CommonFlags.PRIVATE)) return;\r\n var sb = this.sb;\r\n indent(sb, this.indentLevel);\r\n if (element.is(CommonFlags.PROTECTED)) sb.push(\"protected \");\r\n if (element.is(CommonFlags.STATIC)) sb.push(\"static \");\r\n if (element.is(CommonFlags.READONLY)) sb.push(\"readonly \");\r\n sb.push(element.simpleName);\r\n sb.push(\": \");\r\n sb.push(this.typeToString(element.type));\r\n sb.push(\";\\n\");\r\n }\r\n\r\n visitNamespace(element: Element): void {\r\n var members = element.members;\r\n if (members && members.size) {\r\n let sb = this.sb;\r\n indent(sb, this.indentLevel++);\r\n sb.push(\"namespace \");\r\n sb.push(element.simpleName);\r\n sb.push(\" {\\n\");\r\n for (let member of members.values()) this.visitElement(member);\r\n indent(sb, --this.indentLevel);\r\n sb.push(\"}\\n\");\r\n }\r\n }\r\n\r\n typeToString(type: Type): string {\r\n switch (type.kind) {\r\n case TypeKind.I8: return \"i8\";\r\n case TypeKind.I16: return \"i16\";\r\n case TypeKind.I32: return \"i32\";\r\n case TypeKind.I64: return \"I64\";\r\n case TypeKind.ISIZE: return this.program.options.isWasm64 ? \"I64\" : \"i32\";\r\n case TypeKind.U8: return \"u8\";\r\n case TypeKind.U16: return \"u16\";\r\n case TypeKind.U32: return \"u32\";\r\n // ^ TODO: function types\r\n case TypeKind.U64: return \"U64\";\r\n case TypeKind.USIZE: return this.program.options.isWasm64 ? \"U64\" : \"u32\";\r\n // ^ TODO: class types\r\n case TypeKind.BOOL: return \"bool\";\r\n case TypeKind.F32: return \"f32\";\r\n case TypeKind.F64: return \"f64\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n build(): string {\r\n var sb = this.sb;\r\n sb.push(\"declare module ASModule {\\n\");\r\n sb.push(\" type i8 = number;\\n\");\r\n sb.push(\" type i16 = number;\\n\");\r\n sb.push(\" type i32 = number;\\n\");\r\n sb.push(\" type u8 = number;\\n\");\r\n sb.push(\" type u16 = number;\\n\");\r\n sb.push(\" type u32 = number;\\n\");\r\n sb.push(\" type f32 = number;\\n\");\r\n sb.push(\" type f64 = number;\\n\");\r\n sb.push(\" type bool = any;\\n\");\r\n ++this.indentLevel;\r\n this.walk();\r\n --this.indentLevel;\r\n sb.push(\"}\\n\");\r\n sb.push(\"export default ASModule;\\n\");\r\n return this.sb.join(\"\");\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n/** Tests if a namespace-like element has at least one compiled member. */\r\nfunction hasCompiledMember(element: Element): bool {\r\n var members = element.members;\r\n if (members) {\r\n for (let member of members.values()) {\r\n switch (member.kind) {\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n for (let instance of (member).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) return true;\r\n }\r\n break;\r\n }\r\n default: {\r\n if (member.is(CommonFlags.COMPILED) || hasCompiledMember(member)) return true;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n return false;\r\n}\r\n","/**\r\n * A decompiler that generates low-level AssemblyScript from WebAssembly binaries.\r\n * @module decompiler\r\n *//***/\r\n\r\nimport {\r\n Module,\r\n NativeType,\r\n ExpressionId,\r\n UnaryOp,\r\n BinaryOp,\r\n HostOp,\r\n FunctionRef,\r\n ExpressionRef,\r\n Index,\r\n getFunctionName,\r\n getFunctionBody,\r\n getFunctionParamCount,\r\n getFunctionParamType,\r\n getFunctionResultType,\r\n getExpressionId,\r\n getExpressionType,\r\n getBlockName,\r\n getBlockChildCount,\r\n getBlockChild,\r\n getIfCondition,\r\n getIfTrue,\r\n getIfFalse,\r\n getLoopName,\r\n getLoopBody,\r\n getBreakName,\r\n getBreakCondition,\r\n getGetLocalIndex,\r\n getSetLocalIndex,\r\n getSetLocalValue,\r\n getLoadOffset,\r\n getLoadPtr,\r\n getStoreOffset,\r\n getStorePtr,\r\n getStoreValue,\r\n getConstValueI32,\r\n getConstValueI64Low,\r\n getConstValueI64High,\r\n getConstValueF32,\r\n getConstValueF64,\r\n getUnaryOp,\r\n getUnaryValue,\r\n getBinaryOp,\r\n getBinaryLeft,\r\n getBinaryRight,\r\n getSelectThen,\r\n getSelectElse,\r\n getSelectCondition,\r\n getDropValue,\r\n getReturnValue,\r\n getHostOp,\r\n getHostOperand\r\n} from \"./module\";\r\n\r\n// TODO :-)\r\n\r\nexport class Decompiler {\r\n\r\n static decompile(module: Module): string {\r\n var decompiler = new Decompiler();\r\n decompiler.decompile(module);\r\n return decompiler.finish();\r\n }\r\n\r\n text: string[] = [];\r\n functionId: i32 = 0;\r\n\r\n constructor() { }\r\n\r\n /** Decompiles a module to an AST that can then be serialized. */\r\n decompile(module: Module): void {\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n decompileFunction(func: FunctionRef): void {\r\n var name = getFunctionName(func) || \"$\" + this.functionId.toString(10);\r\n var body = getFunctionBody(func);\r\n this.push(\"function \");\r\n this.push(name);\r\n this.push(\"(\");\r\n for (let i: Index = 0, k: Index = getFunctionParamCount(func); i < k; ++i) {\r\n if (i > 0) this.push(\", \");\r\n this.push(\"$\");\r\n this.push(i.toString(10));\r\n this.push(\": \");\r\n this.push(nativeTypeToType(getFunctionParamType(func, i)));\r\n }\r\n this.push(\"): \");\r\n this.push(nativeTypeToType(getFunctionResultType(func)));\r\n this.push(\" \");\r\n if (getExpressionId(body) != ExpressionId.Block) {\r\n this.push(\"{\\n\");\r\n }\r\n this.decompileExpression(body);\r\n if (getExpressionId(body) != ExpressionId.Block) {\r\n this.push(\"\\n}\\n\");\r\n }\r\n ++this.functionId;\r\n }\r\n\r\n decompileExpression(expr: ExpressionRef): void {\r\n var id = getExpressionId(expr);\r\n var type = getExpressionType(expr);\r\n\r\n var nested: ExpressionRef;\r\n var string: string | null;\r\n var i: Index, k: Index;\r\n\r\n switch (id) {\r\n case ExpressionId.Block: { // TODO: magic\r\n if ((string = getBlockName(expr)) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"{\\n\");\r\n k = getBlockChildCount(expr);\r\n for (i = 0; i < k; ++i) {\r\n this.decompileExpression(getBlockChild(expr, i));\r\n }\r\n this.push(\"}\\n\");\r\n return;\r\n }\r\n case ExpressionId.If: {\r\n if (type == NativeType.None) {\r\n this.push(\"if (\");\r\n this.decompileExpression(getIfCondition(expr));\r\n this.push(\") \");\r\n this.decompileExpression(getIfTrue(expr));\r\n if (nested = getIfFalse(expr)) {\r\n this.push(\" else \");\r\n this.decompileExpression(nested);\r\n }\r\n } else {\r\n this.decompileExpression(getIfCondition(expr));\r\n this.push(\" ? \");\r\n this.decompileExpression(getIfTrue(expr));\r\n this.push(\" : \");\r\n this.decompileExpression(getIfFalse(expr));\r\n }\r\n return;\r\n }\r\n case ExpressionId.Loop: {\r\n if ((string = getLoopName(expr)) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"do \");\r\n this.decompileExpression(getLoopBody(expr));\r\n this.push(\"while (0);\\n\");\r\n }\r\n case ExpressionId.Break: {\r\n if (nested = getBreakCondition(expr)) {\r\n this.push(\"if (\");\r\n this.decompileExpression(nested);\r\n this.push(\") \");\r\n }\r\n if ((string = getBreakName(expr)) != null) {\r\n this.push(\"break \");\r\n this.push(string);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"break;\\n\");\r\n }\r\n return;\r\n }\r\n case ExpressionId.Switch:\r\n case ExpressionId.Call:\r\n case ExpressionId.CallImport:\r\n case ExpressionId.CallIndirect: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.GetLocal: {\r\n this.push(\"$\");\r\n this.push(getGetLocalIndex(expr).toString(10));\r\n return;\r\n }\r\n case ExpressionId.SetLocal: {\r\n this.push(\"$\");\r\n this.push(getSetLocalIndex(expr).toString(10));\r\n this.push(\" = \");\r\n this.decompileExpression(getSetLocalValue(expr));\r\n return;\r\n }\r\n case ExpressionId.GetGlobal:\r\n case ExpressionId.SetGlobal: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.Load: {\r\n this.push(\"load<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(getLoadOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getLoadPtr(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Store: {\r\n this.push(\"store<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(getStoreOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(getStorePtr(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getStoreValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Const: {\r\n switch (type) {\r\n case NativeType.I32: {\r\n this.push(getConstValueI32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.I64: {\r\n this.push(\r\n i64_to_string(\r\n i64_new(\r\n getConstValueI64Low(expr),\r\n getConstValueI64High(expr)\r\n )\r\n )\r\n );\r\n return;\r\n }\r\n case NativeType.F32: {\r\n this.push(getConstValueF32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.F64: {\r\n this.push(getConstValueF64(expr).toString(10));\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Unary: {\r\n switch (getUnaryOp(expr)) {\r\n case UnaryOp.ClzI32: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI32: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI32: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NegF32:\r\n case UnaryOp.NegF64: {\r\n this.push(\"-\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.AbsF32: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF32: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF32: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF32: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF32: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF32: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.EqzI32:\r\n case UnaryOp.EqzI64: {\r\n this.push(\"!\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ClzI64: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI64: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI64: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.AbsF64: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF64: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF64: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF64: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF64: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF64: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ExtendI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ExtendU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.WrapI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.PromoteF32: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.DemoteF64: {\r\n this.push(\"\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(getUnaryValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Binary: { // TODO: precedence\r\n switch (getBinaryOp(expr)) {\r\n case BinaryOp.AddI32:\r\n case BinaryOp.AddI64:\r\n case BinaryOp.AddF32:\r\n case BinaryOp.AddF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" + \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.SubI32:\r\n case BinaryOp.SubI64:\r\n case BinaryOp.SubF32:\r\n case BinaryOp.SubF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" - \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.MulI32:\r\n case BinaryOp.MulI64:\r\n case BinaryOp.MulF32:\r\n case BinaryOp.MulF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" * \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivI32:\r\n case BinaryOp.DivI64:\r\n case BinaryOp.DivF32:\r\n case BinaryOp.DivF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.AndI32:\r\n case BinaryOp.AndI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" & \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.OrI32:\r\n case BinaryOp.OrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" | \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.XorI32:\r\n case BinaryOp.XorI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" ^ \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShlI32:\r\n case BinaryOp.ShlI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" << \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrU32:\r\n case BinaryOp.ShrU64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >>> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrI32:\r\n case BinaryOp.ShrI64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >> \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI32: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI32: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.EqI32:\r\n case BinaryOp.EqI64:\r\n case BinaryOp.EqF32:\r\n case BinaryOp.EqF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" == \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.NeI32:\r\n case BinaryOp.NeI64:\r\n case BinaryOp.NeF32:\r\n case BinaryOp.NeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" != \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtI32:\r\n case BinaryOp.LtI64:\r\n case BinaryOp.LtF32:\r\n case BinaryOp.LtF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeI32:\r\n case BinaryOp.LeI64:\r\n case BinaryOp.LeF32:\r\n case BinaryOp.LeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtI32:\r\n case BinaryOp.GtI64:\r\n case BinaryOp.GtF32:\r\n case BinaryOp.GtF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeI32:\r\n case BinaryOp.GeI64:\r\n case BinaryOp.GeF32:\r\n case BinaryOp.GeF64: {\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI64: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI64: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.LtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n return;\r\n }\r\n case BinaryOp.CopysignF32: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF32: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF32: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.CopysignF64: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF64: {\r\n this.push(\"min(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF64: {\r\n this.push(\"max(\");\r\n this.decompileExpression(getBinaryLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getBinaryRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n return;\r\n }\r\n case ExpressionId.Select: {\r\n this.push(\"select<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.decompileExpression(getSelectThen(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectElse(expr));\r\n this.push(\", \");\r\n this.decompileExpression(getSelectCondition(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Drop: {\r\n this.decompileExpression(getDropValue(expr));\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Return: {\r\n if (nested = getReturnValue(expr)) {\r\n this.push(\"return \");\r\n this.decompileExpression(nested);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"return;\\n\");\r\n }\r\n return;\r\n }\r\n case ExpressionId.Host: {\r\n switch (getHostOp(expr)) {\r\n case HostOp.CurrentMemory: {\r\n this.push(\"current_memory()\");\r\n return;\r\n }\r\n case HostOp.GrowMemory: {\r\n this.push(\"grow_memory(\");\r\n this.decompileExpression(getHostOperand(expr, 0));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Nop: {\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Unreachable: {\r\n this.push(\"unreachable()\");\r\n return;\r\n }\r\n case ExpressionId.AtomicCmpxchg:\r\n case ExpressionId.AtomicRMW:\r\n case ExpressionId.AtomicWait:\r\n case ExpressionId.AtomicWake:\r\n }\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n private push(text: string): void {\r\n // mostly here so we can add debugging if necessary\r\n this.text.push(text);\r\n }\r\n\r\n finish(): string {\r\n var ret = this.text.join(\"\");\r\n this.text = [];\r\n return ret;\r\n }\r\n}\r\n\r\nfunction nativeTypeToType(type: NativeType): string {\r\n switch (type) {\r\n case NativeType.None: return \"void\";\r\n case NativeType.I32: return \"i32\";\r\n case NativeType.I64: return \"i64\";\r\n case NativeType.F32: return \"f32\";\r\n case NativeType.F64: return \"f64\";\r\n case NativeType.Unreachable: throw new Error(\"unreachable type\");\r\n case NativeType.Auto: throw new Error(\"auto type\");\r\n default: throw new Error(\"unexpected type\");\r\n }\r\n}\r\n","/**\r\n * Low-level C-like compiler API.\r\n * @module index\r\n *//***/\r\n\r\nimport {\r\n Compiler,\r\n Options,\r\n Target,\r\n Feature\r\n} from \"./compiler\";\r\n\r\nimport {\r\n Decompiler\r\n} from \"./decompiler\";\r\n\r\nimport {\r\n IDLBuilder,\r\n TSDBuilder\r\n} from \"./definitions\";\r\n\r\nimport {\r\n DiagnosticMessage,\r\n DiagnosticCategory,\r\n formatDiagnosticMessage\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Module\r\n} from \"./module\";\r\n\r\nimport {\r\n Parser\r\n} from \"./parser\";\r\n\r\nimport {\r\n Program\r\n} from \"./program\";\r\n\r\n/** Parses a source file. If `parser` has been omitted a new one is created. */\r\nexport function parseFile(text: string, path: string, isEntry: bool = false,\r\n parser: Parser | null = null\r\n): Parser {\r\n if (!parser) parser = new Parser();\r\n parser.parseFile(text, path, isEntry);\r\n return parser;\r\n}\r\n\r\n/** Obtains the next required file's path. Returns `null` once complete. */\r\nexport function nextFile(parser: Parser): string | null {\r\n return parser.nextFile();\r\n}\r\n\r\n/** Obtains the next diagnostic message. Returns `null` once complete. */\r\nexport function nextDiagnostic(parser: Parser): DiagnosticMessage | null {\r\n var program = parser.program;\r\n return program.diagnosticsOffset < program.diagnostics.length\r\n ? program.diagnostics[program.diagnosticsOffset++]\r\n : null;\r\n}\r\n\r\n/** Formats a diagnostic message to a string. */\r\nexport { formatDiagnosticMessage as formatDiagnostic };\r\n\r\n/** Tests whether a diagnostic is informatory. */\r\nexport function isInfo(message: DiagnosticMessage): bool {\r\n return message.category == DiagnosticCategory.INFO;\r\n}\r\n\r\n/** Tests whether a diagnostic is a warning. */\r\nexport function isWarning(message: DiagnosticMessage): bool {\r\n return message.category == DiagnosticCategory.WARNING;\r\n}\r\n\r\n/** Tests whether a diagnostic is an error. */\r\nexport function isError(message: DiagnosticMessage): bool {\r\n return message.category == DiagnosticCategory.ERROR;\r\n}\r\n\r\n/** Creates a new set of compiler options. */\r\nexport function createOptions(): Options {\r\n return new Options();\r\n}\r\n\r\n/** Sets the `target` option. */\r\nexport function setTarget(options: Options, target: Target): void {\r\n options.target = target;\r\n}\r\n\r\n/** Sets the `noTreeShaking` option. */\r\nexport function setNoTreeShaking(options: Options, noTreeShaking: bool): void {\r\n options.noTreeShaking = noTreeShaking;\r\n}\r\n\r\n/** Sets the `noAssert` option. */\r\nexport function setNoAssert(options: Options, noAssert: bool): void {\r\n options.noAssert = noAssert;\r\n}\r\n\r\n/** Sets the `noMemory` option. */\r\nexport function setNoMemory(options: Options, noMemory: bool): void {\r\n options.noMemory = noMemory;\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/** 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","const F64 = new Float64Array(1);\r\nconst F32 = new Float32Array(F64.buffer);\r\nconst I32 = new Int32Array(F64.buffer);\r\n\r\nglobal.f32_as_i32 = function(value) {\r\n F32[0] = value;\r\n return I32[0];\r\n};\r\n\r\nglobal.i32_as_f32 = function(value) {\r\n I32[0] = value;\r\n return F32[0];\r\n};\r\n\r\nglobal.f64_as_i64 = function(value) {\r\n F64[0] = value;\r\n return i64_new(I32[0], I32[1]);\r\n};\r\n\r\nglobal.i64_as_f64 = function(value) {\r\n I32[0] = i64_low(value);\r\n I32[1] = i64_high(value);\r\n return F64[0];\r\n};\r\n","module.exports = Long;\r\n\r\n/**\r\n * wasm optimizations, to do native i64 multiplication and divide\r\n */\r\nvar wasm = null;\r\n\r\ntry {\r\n wasm = new WebAssembly.Instance(new WebAssembly.Module(new Uint8Array([\r\n 0, 97, 115, 109, 1, 0, 0, 0, 1, 13, 2, 96, 0, 1, 127, 96, 4, 127, 127, 127, 127, 1, 127, 3, 7, 6, 0, 1, 1, 1, 1, 1, 6, 6, 1, 127, 1, 65, 0, 11, 7, 50, 6, 3, 109, 117, 108, 0, 1, 5, 100, 105, 118, 95, 115, 0, 2, 5, 100, 105, 118, 95, 117, 0, 3, 5, 114, 101, 109, 95, 115, 0, 4, 5, 114, 101, 109, 95, 117, 0, 5, 8, 103, 101, 116, 95, 104, 105, 103, 104, 0, 0, 10, 191, 1, 6, 4, 0, 35, 0, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 126, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 127, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 128, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 129, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11, 36, 1, 1, 126, 32, 0, 173, 32, 1, 173, 66, 32, 134, 132, 32, 2, 173, 32, 3, 173, 66, 32, 134, 132, 130, 34, 4, 66, 32, 135, 167, 36, 0, 32, 4, 167, 11\r\n ])), {}).exports;\r\n} catch (e) {\r\n // no wasm support :(\r\n}\r\n\r\n/**\r\n * Constructs a 64 bit two's-complement integer, given its low and high 32 bit values as *signed* integers.\r\n * See the from* functions below for more convenient ways of constructing Longs.\r\n * @exports Long\r\n * @class A Long class for representing a 64 bit two's-complement integer value.\r\n * @param {number} low The low (signed) 32 bits of the long\r\n * @param {number} high The high (signed) 32 bits of the long\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @constructor\r\n */\r\nfunction Long(low, high, unsigned) {\r\n\r\n /**\r\n * The low 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.low = low | 0;\r\n\r\n /**\r\n * The high 32 bits as a signed value.\r\n * @type {number}\r\n */\r\n this.high = high | 0;\r\n\r\n /**\r\n * Whether unsigned or not.\r\n * @type {boolean}\r\n */\r\n this.unsigned = !!unsigned;\r\n}\r\n\r\n// The internal representation of a long is the two given signed, 32-bit values.\r\n// We use 32-bit pieces because these are the size of integers on which\r\n// Javascript performs bit-operations. For operations like addition and\r\n// multiplication, we split each number into 16 bit pieces, which can easily be\r\n// multiplied within Javascript's floating-point representation without overflow\r\n// or change in sign.\r\n//\r\n// In the algorithms below, we frequently reduce the negative case to the\r\n// positive case by negating the input(s) and then post-processing the result.\r\n// Note that we must ALWAYS check specially whether those values are MIN_VALUE\r\n// (-2^63) because -MIN_VALUE == MIN_VALUE (since 2^63 cannot be represented as\r\n// a positive number, it overflows back into a negative). Not handling this\r\n// case would often result in infinite recursion.\r\n//\r\n// Common constant values ZERO, ONE, NEG_ONE, etc. are defined below the from*\r\n// methods on which they depend.\r\n\r\n/**\r\n * An indicator used to reliably determine if an object is a Long or not.\r\n * @type {boolean}\r\n * @const\r\n * @private\r\n */\r\nLong.prototype.__isLong__;\r\n\r\nObject.defineProperty(Long.prototype, \"__isLong__\", { value: true });\r\n\r\n/**\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n * @inner\r\n */\r\nfunction isLong(obj) {\r\n return (obj && obj[\"__isLong__\"]) === true;\r\n}\r\n\r\n/**\r\n * Tests if the specified object is a Long.\r\n * @function\r\n * @param {*} obj Object\r\n * @returns {boolean}\r\n */\r\nLong.isLong = isLong;\r\n\r\n/**\r\n * A cache of the Long representations of small integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar INT_CACHE = {};\r\n\r\n/**\r\n * A cache of the Long representations of small unsigned integer values.\r\n * @type {!Object}\r\n * @inner\r\n */\r\nvar UINT_CACHE = {};\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromInt(value, unsigned) {\r\n var obj, cachedObj, cache;\r\n if (unsigned) {\r\n value >>>= 0;\r\n if (cache = (0 <= value && value < 256)) {\r\n cachedObj = UINT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, (value | 0) < 0 ? -1 : 0, true);\r\n if (cache)\r\n UINT_CACHE[value] = obj;\r\n return obj;\r\n } else {\r\n value |= 0;\r\n if (cache = (-128 <= value && value < 128)) {\r\n cachedObj = INT_CACHE[value];\r\n if (cachedObj)\r\n return cachedObj;\r\n }\r\n obj = fromBits(value, value < 0 ? -1 : 0, false);\r\n if (cache)\r\n INT_CACHE[value] = obj;\r\n return obj;\r\n }\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given 32 bit integer value.\r\n * @function\r\n * @param {number} value The 32 bit integer in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromInt = fromInt;\r\n\r\n/**\r\n * @param {number} value\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromNumber(value, unsigned) {\r\n if (isNaN(value))\r\n return unsigned ? UZERO : ZERO;\r\n if (unsigned) {\r\n if (value < 0)\r\n return UZERO;\r\n if (value >= TWO_PWR_64_DBL)\r\n return MAX_UNSIGNED_VALUE;\r\n } else {\r\n if (value <= -TWO_PWR_63_DBL)\r\n return MIN_VALUE;\r\n if (value + 1 >= TWO_PWR_63_DBL)\r\n return MAX_VALUE;\r\n }\r\n if (value < 0)\r\n return fromNumber(-value, unsigned).neg();\r\n return fromBits((value % TWO_PWR_32_DBL) | 0, (value / TWO_PWR_32_DBL) | 0, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the given value, provided that it is a finite number. Otherwise, zero is returned.\r\n * @function\r\n * @param {number} value The number in question\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromNumber = fromNumber;\r\n\r\n/**\r\n * @param {number} lowBits\r\n * @param {number} highBits\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromBits(lowBits, highBits, unsigned) {\r\n return new Long(lowBits, highBits, unsigned);\r\n}\r\n\r\n/**\r\n * Returns a Long representing the 64 bit integer that comes by concatenating the given low and high bits. Each is\r\n * assumed to use 32 bits.\r\n * @function\r\n * @param {number} lowBits The low 32 bits\r\n * @param {number} highBits The high 32 bits\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromBits = fromBits;\r\n\r\n/**\r\n * @function\r\n * @param {number} base\r\n * @param {number} exponent\r\n * @returns {number}\r\n * @inner\r\n */\r\nvar pow_dbl = Math.pow; // Used 4 times (4*8 to 15+4)\r\n\r\n/**\r\n * @param {string} str\r\n * @param {(boolean|number)=} unsigned\r\n * @param {number=} radix\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromString(str, unsigned, radix) {\r\n if (str.length === 0)\r\n throw Error('empty string');\r\n if (str === \"NaN\" || str === \"Infinity\" || str === \"+Infinity\" || str === \"-Infinity\")\r\n return ZERO;\r\n if (typeof unsigned === 'number') {\r\n // For goog.math.long compatibility\r\n radix = unsigned,\r\n unsigned = false;\r\n } else {\r\n unsigned = !! unsigned;\r\n }\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n\r\n var p;\r\n if ((p = str.indexOf('-')) > 0)\r\n throw Error('interior hyphen');\r\n else if (p === 0) {\r\n return fromString(str.substring(1), unsigned, radix).neg();\r\n }\r\n\r\n // Do several (8) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 8));\r\n\r\n var result = ZERO;\r\n for (var i = 0; i < str.length; i += 8) {\r\n var size = Math.min(8, str.length - i),\r\n value = parseInt(str.substring(i, i + size), radix);\r\n if (size < 8) {\r\n var power = fromNumber(pow_dbl(radix, size));\r\n result = result.mul(power).add(fromNumber(value));\r\n } else {\r\n result = result.mul(radixToPower);\r\n result = result.add(fromNumber(value));\r\n }\r\n }\r\n result.unsigned = unsigned;\r\n return result;\r\n}\r\n\r\n/**\r\n * Returns a Long representation of the given string, written using the specified radix.\r\n * @function\r\n * @param {string} str The textual representation of the Long\r\n * @param {(boolean|number)=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {number=} radix The radix in which the text is written (2-36), defaults to 10\r\n * @returns {!Long} The corresponding Long value\r\n */\r\nLong.fromString = fromString;\r\n\r\n/**\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val\r\n * @param {boolean=} unsigned\r\n * @returns {!Long}\r\n * @inner\r\n */\r\nfunction fromValue(val, unsigned) {\r\n if (typeof val === 'number')\r\n return fromNumber(val, unsigned);\r\n if (typeof val === 'string')\r\n return fromString(val, unsigned);\r\n // Throws for non-objects, converts non-instanceof Long:\r\n return fromBits(val.low, val.high, typeof unsigned === 'boolean' ? unsigned : val.unsigned);\r\n}\r\n\r\n/**\r\n * Converts the specified value to a Long using the appropriate from* function for its type.\r\n * @function\r\n * @param {!Long|number|string|!{low: number, high: number, unsigned: boolean}} val Value\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {!Long}\r\n */\r\nLong.fromValue = fromValue;\r\n\r\n// NOTE: the compiler should inline these constant values below and then remove these variables, so there should be\r\n// no runtime penalty for these.\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_16_DBL = 1 << 16;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24_DBL = 1 << 24;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_32_DBL = TWO_PWR_16_DBL * TWO_PWR_16_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_64_DBL = TWO_PWR_32_DBL * TWO_PWR_32_DBL;\r\n\r\n/**\r\n * @type {number}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_63_DBL = TWO_PWR_64_DBL / 2;\r\n\r\n/**\r\n * @type {!Long}\r\n * @const\r\n * @inner\r\n */\r\nvar TWO_PWR_24 = fromInt(TWO_PWR_24_DBL);\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ZERO = fromInt(0);\r\n\r\n/**\r\n * Signed zero.\r\n * @type {!Long}\r\n */\r\nLong.ZERO = ZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UZERO = fromInt(0, true);\r\n\r\n/**\r\n * Unsigned zero.\r\n * @type {!Long}\r\n */\r\nLong.UZERO = UZERO;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar ONE = fromInt(1);\r\n\r\n/**\r\n * Signed one.\r\n * @type {!Long}\r\n */\r\nLong.ONE = ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar UONE = fromInt(1, true);\r\n\r\n/**\r\n * Unsigned one.\r\n * @type {!Long}\r\n */\r\nLong.UONE = UONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar NEG_ONE = fromInt(-1);\r\n\r\n/**\r\n * Signed negative one.\r\n * @type {!Long}\r\n */\r\nLong.NEG_ONE = NEG_ONE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_VALUE = fromBits(0xFFFFFFFF|0, 0x7FFFFFFF|0, false);\r\n\r\n/**\r\n * Maximum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_VALUE = MAX_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MAX_UNSIGNED_VALUE = fromBits(0xFFFFFFFF|0, 0xFFFFFFFF|0, true);\r\n\r\n/**\r\n * Maximum unsigned value.\r\n * @type {!Long}\r\n */\r\nLong.MAX_UNSIGNED_VALUE = MAX_UNSIGNED_VALUE;\r\n\r\n/**\r\n * @type {!Long}\r\n * @inner\r\n */\r\nvar MIN_VALUE = fromBits(0, 0x80000000|0, false);\r\n\r\n/**\r\n * Minimum signed value.\r\n * @type {!Long}\r\n */\r\nLong.MIN_VALUE = MIN_VALUE;\r\n\r\n/**\r\n * @alias Long.prototype\r\n * @inner\r\n */\r\nvar LongPrototype = Long.prototype;\r\n\r\n/**\r\n * Converts the Long to a 32 bit integer, assuming it is a 32 bit integer.\r\n * @returns {number}\r\n */\r\nLongPrototype.toInt = function toInt() {\r\n return this.unsigned ? this.low >>> 0 : this.low;\r\n};\r\n\r\n/**\r\n * Converts the Long to a the nearest floating-point representation of this value (double, 53 bit mantissa).\r\n * @returns {number}\r\n */\r\nLongPrototype.toNumber = function toNumber() {\r\n if (this.unsigned)\r\n return ((this.high >>> 0) * TWO_PWR_32_DBL) + (this.low >>> 0);\r\n return this.high * TWO_PWR_32_DBL + (this.low >>> 0);\r\n};\r\n\r\n/**\r\n * Converts the Long to a string written in the specified radix.\r\n * @param {number=} radix Radix (2-36), defaults to 10\r\n * @returns {string}\r\n * @override\r\n * @throws {RangeError} If `radix` is out of range\r\n */\r\nLongPrototype.toString = function toString(radix) {\r\n radix = radix || 10;\r\n if (radix < 2 || 36 < radix)\r\n throw RangeError('radix');\r\n if (this.isZero())\r\n return '0';\r\n if (this.isNegative()) { // Unsigned Longs are never negative\r\n if (this.eq(MIN_VALUE)) {\r\n // We need to change the Long value before it can be negated, so we remove\r\n // the bottom-most digit in this base and then recurse to do the rest.\r\n var radixLong = fromNumber(radix),\r\n div = this.div(radixLong),\r\n rem1 = div.mul(radixLong).sub(this);\r\n return div.toString(radix) + rem1.toInt().toString(radix);\r\n } else\r\n return '-' + this.neg().toString(radix);\r\n }\r\n\r\n // Do several (6) digits each time through the loop, so as to\r\n // minimize the calls to the very expensive emulated div.\r\n var radixToPower = fromNumber(pow_dbl(radix, 6), this.unsigned),\r\n rem = this;\r\n var result = '';\r\n while (true) {\r\n var remDiv = rem.div(radixToPower),\r\n intval = rem.sub(remDiv.mul(radixToPower)).toInt() >>> 0,\r\n digits = intval.toString(radix);\r\n rem = remDiv;\r\n if (rem.isZero())\r\n return digits + result;\r\n else {\r\n while (digits.length < 6)\r\n digits = '0' + digits;\r\n result = '' + digits + result;\r\n }\r\n }\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as a signed integer.\r\n * @returns {number} Signed high bits\r\n */\r\nLongPrototype.getHighBits = function getHighBits() {\r\n return this.high;\r\n};\r\n\r\n/**\r\n * Gets the high 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned high bits\r\n */\r\nLongPrototype.getHighBitsUnsigned = function getHighBitsUnsigned() {\r\n return this.high >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as a signed integer.\r\n * @returns {number} Signed low bits\r\n */\r\nLongPrototype.getLowBits = function getLowBits() {\r\n return this.low;\r\n};\r\n\r\n/**\r\n * Gets the low 32 bits as an unsigned integer.\r\n * @returns {number} Unsigned low bits\r\n */\r\nLongPrototype.getLowBitsUnsigned = function getLowBitsUnsigned() {\r\n return this.low >>> 0;\r\n};\r\n\r\n/**\r\n * Gets the number of bits needed to represent the absolute value of this Long.\r\n * @returns {number}\r\n */\r\nLongPrototype.getNumBitsAbs = function getNumBitsAbs() {\r\n if (this.isNegative()) // Unsigned Longs are never negative\r\n return this.eq(MIN_VALUE) ? 64 : this.neg().getNumBitsAbs();\r\n var val = this.high != 0 ? this.high : this.low;\r\n for (var bit = 31; bit > 0; bit--)\r\n if ((val & (1 << bit)) != 0)\r\n break;\r\n return this.high != 0 ? bit + 33 : bit + 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isZero = function isZero() {\r\n return this.high === 0 && this.low === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals zero. This is an alias of {@link Long#isZero}.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eqz = LongPrototype.isZero;\r\n\r\n/**\r\n * Tests if this Long's value is negative.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isNegative = function isNegative() {\r\n return !this.unsigned && this.high < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is positive.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isPositive = function isPositive() {\r\n return this.unsigned || this.high >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is odd.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isOdd = function isOdd() {\r\n return (this.low & 1) === 1;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is even.\r\n * @returns {boolean}\r\n */\r\nLongPrototype.isEven = function isEven() {\r\n return (this.low & 1) === 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.equals = function equals(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.unsigned !== other.unsigned && (this.high >>> 31) === 1 && (other.high >>> 31) === 1)\r\n return false;\r\n return this.high === other.high && this.low === other.low;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value equals the specified's. This is an alias of {@link Long#equals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.eq = LongPrototype.equals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.notEquals = function notEquals(other) {\r\n return !this.eq(/* validates */ other);\r\n};\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.neq = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value differs from the specified's. This is an alias of {@link Long#notEquals}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ne = LongPrototype.notEquals;\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThan = function lessThan(other) {\r\n return this.comp(/* validates */ other) < 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than the specified's. This is an alias of {@link Long#lessThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lt = LongPrototype.lessThan;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lessThanOrEqual = function lessThanOrEqual(other) {\r\n return this.comp(/* validates */ other) <= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.lte = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is less than or equal the specified's. This is an alias of {@link Long#lessThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.le = LongPrototype.lessThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThan = function greaterThan(other) {\r\n return this.comp(/* validates */ other) > 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than the specified's. This is an alias of {@link Long#greaterThan}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gt = LongPrototype.greaterThan;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.greaterThanOrEqual = function greaterThanOrEqual(other) {\r\n return this.comp(/* validates */ other) >= 0;\r\n};\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.gte = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Tests if this Long's value is greater than or equal the specified's. This is an alias of {@link Long#greaterThanOrEqual}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {boolean}\r\n */\r\nLongPrototype.ge = LongPrototype.greaterThanOrEqual;\r\n\r\n/**\r\n * Compares this Long's value with the specified's.\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.compare = function compare(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n if (this.eq(other))\r\n return 0;\r\n var thisNeg = this.isNegative(),\r\n otherNeg = other.isNegative();\r\n if (thisNeg && !otherNeg)\r\n return -1;\r\n if (!thisNeg && otherNeg)\r\n return 1;\r\n // At this point the sign bits are the same\r\n if (!this.unsigned)\r\n return this.sub(other).isNegative() ? -1 : 1;\r\n // Both are positive if at least one is unsigned\r\n return (other.high >>> 0) > (this.high >>> 0) || (other.high === this.high && (other.low >>> 0) > (this.low >>> 0)) ? -1 : 1;\r\n};\r\n\r\n/**\r\n * Compares this Long's value with the specified's. This is an alias of {@link Long#compare}.\r\n * @function\r\n * @param {!Long|number|string} other Other value\r\n * @returns {number} 0 if they are the same, 1 if the this is greater and -1\r\n * if the given one is greater\r\n */\r\nLongPrototype.comp = LongPrototype.compare;\r\n\r\n/**\r\n * Negates this Long's value.\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.negate = function negate() {\r\n if (!this.unsigned && this.eq(MIN_VALUE))\r\n return MIN_VALUE;\r\n return this.not().add(ONE);\r\n};\r\n\r\n/**\r\n * Negates this Long's value. This is an alias of {@link Long#negate}.\r\n * @function\r\n * @returns {!Long} Negated Long\r\n */\r\nLongPrototype.neg = LongPrototype.negate;\r\n\r\n/**\r\n * Returns the sum of this and the specified Long.\r\n * @param {!Long|number|string} addend Addend\r\n * @returns {!Long} Sum\r\n */\r\nLongPrototype.add = function add(addend) {\r\n if (!isLong(addend))\r\n addend = fromValue(addend);\r\n\r\n // Divide each number into 4 chunks of 16 bits, and then sum the chunks.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = addend.high >>> 16;\r\n var b32 = addend.high & 0xFFFF;\r\n var b16 = addend.low >>> 16;\r\n var b00 = addend.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 + b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 + b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 + b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 + b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long.\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.subtract = function subtract(subtrahend) {\r\n if (!isLong(subtrahend))\r\n subtrahend = fromValue(subtrahend);\r\n return this.add(subtrahend.neg());\r\n};\r\n\r\n/**\r\n * Returns the difference of this and the specified Long. This is an alias of {@link Long#subtract}.\r\n * @function\r\n * @param {!Long|number|string} subtrahend Subtrahend\r\n * @returns {!Long} Difference\r\n */\r\nLongPrototype.sub = LongPrototype.subtract;\r\n\r\n/**\r\n * Returns the product of this and the specified Long.\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.multiply = function multiply(multiplier) {\r\n if (this.isZero())\r\n return ZERO;\r\n if (!isLong(multiplier))\r\n multiplier = fromValue(multiplier);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = wasm.mul(this.low,\r\n this.high,\r\n multiplier.low,\r\n multiplier.high);\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (multiplier.isZero())\r\n return ZERO;\r\n if (this.eq(MIN_VALUE))\r\n return multiplier.isOdd() ? MIN_VALUE : ZERO;\r\n if (multiplier.eq(MIN_VALUE))\r\n return this.isOdd() ? MIN_VALUE : ZERO;\r\n\r\n if (this.isNegative()) {\r\n if (multiplier.isNegative())\r\n return this.neg().mul(multiplier.neg());\r\n else\r\n return this.neg().mul(multiplier).neg();\r\n } else if (multiplier.isNegative())\r\n return this.mul(multiplier.neg()).neg();\r\n\r\n // If both longs are small, use float multiplication\r\n if (this.lt(TWO_PWR_24) && multiplier.lt(TWO_PWR_24))\r\n return fromNumber(this.toNumber() * multiplier.toNumber(), this.unsigned);\r\n\r\n // Divide each long into 4 chunks of 16 bits, and then add up 4x4 products.\r\n // We can skip products that would overflow.\r\n\r\n var a48 = this.high >>> 16;\r\n var a32 = this.high & 0xFFFF;\r\n var a16 = this.low >>> 16;\r\n var a00 = this.low & 0xFFFF;\r\n\r\n var b48 = multiplier.high >>> 16;\r\n var b32 = multiplier.high & 0xFFFF;\r\n var b16 = multiplier.low >>> 16;\r\n var b00 = multiplier.low & 0xFFFF;\r\n\r\n var c48 = 0, c32 = 0, c16 = 0, c00 = 0;\r\n c00 += a00 * b00;\r\n c16 += c00 >>> 16;\r\n c00 &= 0xFFFF;\r\n c16 += a16 * b00;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c16 += a00 * b16;\r\n c32 += c16 >>> 16;\r\n c16 &= 0xFFFF;\r\n c32 += a32 * b00;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a16 * b16;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c32 += a00 * b32;\r\n c48 += c32 >>> 16;\r\n c32 &= 0xFFFF;\r\n c48 += a48 * b00 + a32 * b16 + a16 * b32 + a00 * b48;\r\n c48 &= 0xFFFF;\r\n return fromBits((c16 << 16) | c00, (c48 << 16) | c32, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the product of this and the specified Long. This is an alias of {@link Long#multiply}.\r\n * @function\r\n * @param {!Long|number|string} multiplier Multiplier\r\n * @returns {!Long} Product\r\n */\r\nLongPrototype.mul = LongPrototype.multiply;\r\n\r\n/**\r\n * Returns this Long divided by the specified. The result is signed if this Long is signed or\r\n * unsigned if this Long is unsigned.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.divide = function divide(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n if (divisor.isZero())\r\n throw Error('division by zero');\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n // guard against signed division overflow: the largest\r\n // negative number / -1 would be 1 larger than the largest\r\n // positive number, due to two's complement.\r\n if (!this.unsigned &&\r\n this.high === -0x80000000 &&\r\n divisor.low === -1 && divisor.high === -1) {\r\n // be consistent with non-wasm code path\r\n return this;\r\n }\r\n var low = (this.unsigned ? wasm.div_u : wasm.div_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n if (this.isZero())\r\n return this.unsigned ? UZERO : ZERO;\r\n var approx, rem, res;\r\n if (!this.unsigned) {\r\n // This section is only relevant for signed longs and is derived from the\r\n // closure library as a whole.\r\n if (this.eq(MIN_VALUE)) {\r\n if (divisor.eq(ONE) || divisor.eq(NEG_ONE))\r\n return MIN_VALUE; // recall that -MIN_VALUE == MIN_VALUE\r\n else if (divisor.eq(MIN_VALUE))\r\n return ONE;\r\n else {\r\n // At this point, we have |other| >= 2, so |this/other| < |MIN_VALUE|.\r\n var halfThis = this.shr(1);\r\n approx = halfThis.div(divisor).shl(1);\r\n if (approx.eq(ZERO)) {\r\n return divisor.isNegative() ? ONE : NEG_ONE;\r\n } else {\r\n rem = this.sub(divisor.mul(approx));\r\n res = approx.add(rem.div(divisor));\r\n return res;\r\n }\r\n }\r\n } else if (divisor.eq(MIN_VALUE))\r\n return this.unsigned ? UZERO : ZERO;\r\n if (this.isNegative()) {\r\n if (divisor.isNegative())\r\n return this.neg().div(divisor.neg());\r\n return this.neg().div(divisor).neg();\r\n } else if (divisor.isNegative())\r\n return this.div(divisor.neg()).neg();\r\n res = ZERO;\r\n } else {\r\n // The algorithm below has not been made for unsigned longs. It's therefore\r\n // required to take special care of the MSB prior to running it.\r\n if (!divisor.unsigned)\r\n divisor = divisor.toUnsigned();\r\n if (divisor.gt(this))\r\n return UZERO;\r\n if (divisor.gt(this.shru(1))) // 15 >>> 1 = 7 ; with divisor = 8 ; true\r\n return UONE;\r\n res = UZERO;\r\n }\r\n\r\n // Repeat the following until the remainder is less than other: find a\r\n // floating-point that approximates remainder / other *from below*, add this\r\n // into the result, and subtract it from the remainder. It is critical that\r\n // the approximate value is less than or equal to the real value so that the\r\n // remainder never becomes negative.\r\n rem = this;\r\n while (rem.gte(divisor)) {\r\n // Approximate the result of division. This may be a little greater or\r\n // smaller than the actual value.\r\n approx = Math.max(1, Math.floor(rem.toNumber() / divisor.toNumber()));\r\n\r\n // We will tweak the approximate result by changing it in the 48-th digit or\r\n // the smallest non-fractional digit, whichever is larger.\r\n var log2 = Math.ceil(Math.log(approx) / Math.LN2),\r\n delta = (log2 <= 48) ? 1 : pow_dbl(2, log2 - 48),\r\n\r\n // Decrease the approximation until it is smaller than the remainder. Note\r\n // that if it is too large, the product overflows and is negative.\r\n approxRes = fromNumber(approx),\r\n approxRem = approxRes.mul(divisor);\r\n while (approxRem.isNegative() || approxRem.gt(rem)) {\r\n approx -= delta;\r\n approxRes = fromNumber(approx, this.unsigned);\r\n approxRem = approxRes.mul(divisor);\r\n }\r\n\r\n // We know the answer can't be zero... and actually, zero would cause\r\n // infinite recursion since we would make no progress.\r\n if (approxRes.isZero())\r\n approxRes = ONE;\r\n\r\n res = res.add(approxRes);\r\n rem = rem.sub(approxRem);\r\n }\r\n return res;\r\n};\r\n\r\n/**\r\n * Returns this Long divided by the specified. This is an alias of {@link Long#divide}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Quotient\r\n */\r\nLongPrototype.div = LongPrototype.divide;\r\n\r\n/**\r\n * Returns this Long modulo the specified.\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.modulo = function modulo(divisor) {\r\n if (!isLong(divisor))\r\n divisor = fromValue(divisor);\r\n\r\n // use wasm support if present\r\n if (wasm) {\r\n var low = (this.unsigned ? wasm.rem_u : wasm.rem_s)(\r\n this.low,\r\n this.high,\r\n divisor.low,\r\n divisor.high\r\n );\r\n return fromBits(low, wasm.get_high(), this.unsigned);\r\n }\r\n\r\n return this.sub(this.div(divisor).mul(divisor));\r\n};\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.mod = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns this Long modulo the specified. This is an alias of {@link Long#modulo}.\r\n * @function\r\n * @param {!Long|number|string} divisor Divisor\r\n * @returns {!Long} Remainder\r\n */\r\nLongPrototype.rem = LongPrototype.modulo;\r\n\r\n/**\r\n * Returns the bitwise NOT of this Long.\r\n * @returns {!Long}\r\n */\r\nLongPrototype.not = function not() {\r\n return fromBits(~this.low, ~this.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise AND of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.and = function and(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low & other.low, this.high & other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise OR of this Long and the specified.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.or = function or(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low | other.low, this.high | other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns the bitwise XOR of this Long and the given one.\r\n * @param {!Long|number|string} other Other Long\r\n * @returns {!Long}\r\n */\r\nLongPrototype.xor = function xor(other) {\r\n if (!isLong(other))\r\n other = fromValue(other);\r\n return fromBits(this.low ^ other.low, this.high ^ other.high, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftLeft = function shiftLeft(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits(this.low << numBits, (this.high << numBits) | (this.low >>> (32 - numBits)), this.unsigned);\r\n else\r\n return fromBits(0, this.low << (numBits - 32), this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits shifted to the left by the given amount. This is an alias of {@link Long#shiftLeft}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shl = LongPrototype.shiftLeft;\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRight = function shiftRight(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n if ((numBits &= 63) === 0)\r\n return this;\r\n else if (numBits < 32)\r\n return fromBits((this.low >>> numBits) | (this.high << (32 - numBits)), this.high >> numBits, this.unsigned);\r\n else\r\n return fromBits(this.high >> (numBits - 32), this.high >= 0 ? 0 : -1, this.unsigned);\r\n};\r\n\r\n/**\r\n * Returns this Long with bits arithmetically shifted to the right by the given amount. This is an alias of {@link Long#shiftRight}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr = LongPrototype.shiftRight;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount.\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shiftRightUnsigned = function shiftRightUnsigned(numBits) {\r\n if (isLong(numBits))\r\n numBits = numBits.toInt();\r\n numBits &= 63;\r\n if (numBits === 0)\r\n return this;\r\n else {\r\n var high = this.high;\r\n if (numBits < 32) {\r\n var low = this.low;\r\n return fromBits((low >>> numBits) | (high << (32 - numBits)), high >>> numBits, this.unsigned);\r\n } else if (numBits === 32)\r\n return fromBits(high, 0, this.unsigned);\r\n else\r\n return fromBits(high >>> (numBits - 32), 0, this.unsigned);\r\n }\r\n};\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shru = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Returns this Long with bits logically shifted to the right by the given amount. This is an alias of {@link Long#shiftRightUnsigned}.\r\n * @function\r\n * @param {number|!Long} numBits Number of bits\r\n * @returns {!Long} Shifted Long\r\n */\r\nLongPrototype.shr_u = LongPrototype.shiftRightUnsigned;\r\n\r\n/**\r\n * Converts this Long to signed.\r\n * @returns {!Long} Signed long\r\n */\r\nLongPrototype.toSigned = function toSigned() {\r\n if (!this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, false);\r\n};\r\n\r\n/**\r\n * Converts this Long to unsigned.\r\n * @returns {!Long} Unsigned long\r\n */\r\nLongPrototype.toUnsigned = function toUnsigned() {\r\n if (this.unsigned)\r\n return this;\r\n return fromBits(this.low, this.high, true);\r\n};\r\n\r\n/**\r\n * Converts this Long to its byte representation.\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {!Array.} Byte representation\r\n */\r\nLongPrototype.toBytes = function toBytes(le) {\r\n return le ? this.toBytesLE() : this.toBytesBE();\r\n};\r\n\r\n/**\r\n * Converts this Long to its little endian byte representation.\r\n * @returns {!Array.} Little endian byte representation\r\n */\r\nLongPrototype.toBytesLE = function toBytesLE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n lo & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo >>> 16 & 0xff,\r\n lo >>> 24 ,\r\n hi & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi >>> 16 & 0xff,\r\n hi >>> 24\r\n ];\r\n};\r\n\r\n/**\r\n * Converts this Long to its big endian byte representation.\r\n * @returns {!Array.} Big endian byte representation\r\n */\r\nLongPrototype.toBytesBE = function toBytesBE() {\r\n var hi = this.high,\r\n lo = this.low;\r\n return [\r\n hi >>> 24 ,\r\n hi >>> 16 & 0xff,\r\n hi >>> 8 & 0xff,\r\n hi & 0xff,\r\n lo >>> 24 ,\r\n lo >>> 16 & 0xff,\r\n lo >>> 8 & 0xff,\r\n lo & 0xff\r\n ];\r\n};\r\n\r\n/**\r\n * Creates a Long from its byte representation.\r\n * @param {!Array.} bytes Byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @param {boolean=} le Whether little or big endian, defaults to big endian\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytes = function fromBytes(bytes, unsigned, le) {\r\n return le ? Long.fromBytesLE(bytes, unsigned) : Long.fromBytesBE(bytes, unsigned);\r\n};\r\n\r\n/**\r\n * Creates a Long from its little endian byte representation.\r\n * @param {!Array.} bytes Little endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesLE = function fromBytesLE(bytes, unsigned) {\r\n return new Long(\r\n bytes[0] |\r\n bytes[1] << 8 |\r\n bytes[2] << 16 |\r\n bytes[3] << 24,\r\n bytes[4] |\r\n bytes[5] << 8 |\r\n bytes[6] << 16 |\r\n bytes[7] << 24,\r\n unsigned\r\n );\r\n};\r\n\r\n/**\r\n * Creates a Long from its big endian byte representation.\r\n * @param {!Array.} bytes Big endian byte representation\r\n * @param {boolean=} unsigned Whether unsigned or not, defaults to signed\r\n * @returns {Long} The corresponding Long value\r\n */\r\nLong.fromBytesBE = function fromBytesBE(bytes, unsigned) {\r\n return new Long(\r\n bytes[4] << 24 |\r\n bytes[5] << 16 |\r\n bytes[6] << 8 |\r\n bytes[7],\r\n bytes[0] << 24 |\r\n bytes[1] << 16 |\r\n bytes[2] << 8 |\r\n bytes[3],\r\n unsigned\r\n );\r\n};\r\n","const Long = global.Long || require(\"long\");\r\n\r\nglobal.i64_zero = Long.ZERO;\r\n\r\nglobal.i64_one = Long.ONE;\r\n\r\nglobal.i64_new = function(lo, hi) {\r\n return Long.fromBits(lo, hi);\r\n};\r\n\r\nglobal.i64_low = function(value) {\r\n return value.low;\r\n};\r\n\r\nglobal.i64_high = function(value) {\r\n return value.high;\r\n};\r\n\r\nglobal.i64_add = function(left, right) {\r\n return left.add(right);\r\n};\r\n\r\nglobal.i64_sub = function(left, right) {\r\n return left.sub(right);\r\n};\r\n\r\nglobal.i64_mul = function(left, right) {\r\n return left.mul(right);\r\n};\r\n\r\nglobal.i64_div = function(left, right) {\r\n return left.div(right);\r\n};\r\n\r\nglobal.i64_div_u = function(left, right) {\r\n return left.toUnsigned().div(right.toUnsigned()).toSigned();\r\n};\r\n\r\nglobal.i64_rem = function(left, right) {\r\n return left.mod(right);\r\n};\r\n\r\nglobal.i64_rem_u = function(left, right) {\r\n return left.toUnsigned().mod(right.toUnsigned()).toSigned();\r\n};\r\n\r\nglobal.i64_and = function(left, right) {\r\n return left.and(right);\r\n};\r\n\r\nglobal.i64_or = function(left, right) {\r\n return left.or(right);\r\n};\r\n\r\nglobal.i64_xor = function(left, right) {\r\n return left.xor(right);\r\n};\r\n\r\nglobal.i64_shl = function(left, right) {\r\n return left.shl(right);\r\n};\r\n\r\nglobal.i64_shr = function(left, right) {\r\n return left.shr(right);\r\n};\r\n\r\nglobal.i64_shr_u = function(left, right) {\r\n return left.shru(right);\r\n};\r\n\r\nglobal.i64_not = function(value) {\r\n return value.not();\r\n};\r\n\r\nglobal.i64_eq = function(left, right) {\r\n return left.eq(right);\r\n};\r\n\r\nglobal.i64_ne = function(left, right) {\r\n return left.ne(right);\r\n};\r\n\r\nglobal.i64_align = function(value, alignment) {\r\n assert(alignment && (alignment & (alignment - 1)) == 0);\r\n var mask = Long.fromInt(alignment - 1);\r\n return value.add(mask).and(mask.not());\r\n};\r\n\r\nglobal.i64_is_i8 = function(value) {\r\n return value.high === 0 && (value.low >= 0 && value.low <= i8.MAX_VALUE)\r\n || value.high === -1 && (value.low >= i8.MIN_VALUE && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_i16 = function(value) {\r\n return value.high === 0 && (value.low >= 0 && value.low <= i16.MAX_VALUE)\r\n || value.high === -1 && (value.low >= i16.MIN_VALUE && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_i32 = function(value) {\r\n return (value.high === 0 && value.low >= 0)\r\n || (value.high === -1 && value.low < 0);\r\n};\r\n\r\nglobal.i64_is_u8 = function(value) {\r\n return value.high === 0 && value.low >= 0 && value.low <= u8.MAX_VALUE;\r\n};\r\n\r\nglobal.i64_is_u16 = function(value) {\r\n return value.high === 0 && value.low >= 0 && value.low <= u16.MAX_VALUE;\r\n};\r\n\r\nglobal.i64_is_u32 = function(value) {\r\n return value.high === 0;\r\n};\r\n\r\nglobal.i64_is_bool = function(value) {\r\n return value.high === 0 && (value.low === 0 || value.low === 1);\r\n};\r\n\r\nconst minSafeF32 = Long.fromNumber(f32.MIN_SAFE_INTEGER);\r\nconst maxSafeF32 = Long.fromNumber(f32.MAX_SAFE_INTEGER);\r\n\r\nglobal.i64_is_f32 = function(value) {\r\n return value.gte(minSafeF32) && value.lte(maxSafeF32);\r\n};\r\n\r\nconst minSafeF64 = Long.fromNumber(f64.MIN_SAFE_INTEGER);\r\nconst maxSafeF64 = Long.fromNumber(f64.MAX_SAFE_INTEGER);\r\n\r\nglobal.i64_is_f64 = function(value) {\r\n return value.gte(minSafeF64) && value.lte(maxSafeF64);\r\n};\r\n\r\nglobal.i64_to_f32 = function(value) {\r\n return global.Math.fround(value.toNumber());\r\n};\r\n\r\nglobal.i64_to_f64 = function(value) {\r\n return value.toNumber();\r\n};\r\n\r\nglobal.i64_to_string = function(value, unsigned) {\r\n return (unsigned ? value.toUnsigned() : value).toString(10);\r\n};\r\n","/** @module util *//***/\r\n\r\n/** Reads a 32-bit integer from the specified buffer. */\r\nexport function readI32(buffer: Uint8Array, offset: i32): i32 {\r\n return buffer[offset ]\r\n | buffer[offset + 1] << 8\r\n | buffer[offset + 2] << 16\r\n | buffer[offset + 3] << 24;\r\n}\r\n\r\n/** Writes a 32-bit integer to the specified buffer. */\r\nexport function writeI32(value: i32, buffer: Uint8Array, offset: i32): void {\r\n buffer[offset ] = value;\r\n buffer[offset + 1] = value >>> 8;\r\n buffer[offset + 2] = value >>> 16;\r\n buffer[offset + 3] = value >>> 24;\r\n}\r\n\r\n/** Reads a 64-bit integer from the specified buffer. */\r\nexport function readI64(buffer: Uint8Array, offset: i32): I64 {\r\n var lo = readI32(buffer, offset);\r\n var hi = readI32(buffer, offset + 4);\r\n return i64_new(lo, hi);\r\n}\r\n\r\n/** Writes a 64-bit integer to the specified buffer. */\r\nexport function writeI64(value: I64, buffer: Uint8Array, offset: i32): void {\r\n writeI32(i64_low(value), buffer, offset);\r\n writeI32(i64_high(value), buffer, offset + 4);\r\n}\r\n\r\n/** Reads a 32-bit float from the specified buffer. */\r\nexport function readF32(buffer: Uint8Array, offset: i32): f32 {\r\n return i32_as_f32(readI32(buffer, offset));\r\n}\r\n\r\n/** Writes a 32-bit float to the specified buffer. */\r\nexport function writeF32(value: f32, buffer: Uint8Array, offset: i32): void {\r\n writeI32(f32_as_i32(value), buffer, offset);\r\n}\r\n\r\n/** Reads a 64-bit float from the specified buffer. */\r\nexport function readF64(buffer: Uint8Array, offset: i32): f64 {\r\n return i64_as_f64(readI64(buffer, offset));\r\n}\r\n\r\n/** Writes a 64-bit float to the specified buffer. */\r\nexport function writeF64(value: f64, buffer: Uint8Array, offset: i32): void {\r\n var valueI64 = f64_as_i64(value);\r\n writeI32(i64_low(valueI64), buffer, offset);\r\n writeI32(i64_high(valueI64), buffer, offset + 4);\r\n}\r\n","/** @module util *//***/\r\n\r\nconst indentX1 = \" \";\r\nconst indentX2 = \" \";\r\nconst indentX4 = \" \";\r\n\r\n/** Creates an indentation matching the number of specified levels. */\r\nexport function indent(sb: string[], level: i32): void {\r\n while (level >= 4) {\r\n sb.push(indentX4);\r\n level -= 4;\r\n }\r\n if (level >= 2) {\r\n sb.push(indentX2);\r\n level -= 2;\r\n }\r\n if (level) {\r\n sb.push(indentX1);\r\n }\r\n}\r\n","/** @module util *//***/\r\n\r\nimport {\r\n CharCode\r\n} from \"./charcode\";\r\n\r\nconst separator = CharCode.SLASH;\r\n\r\n/**\r\n * Normalizes the specified path, removing interior placeholders.\r\n * Expects a posix-compatible relative path (not Windows compatible).\r\n */\r\nexport function normalizePath(path: string): string {\r\n var pos = 0;\r\n var len = path.length;\r\n\r\n // trim leading './'\r\n while (pos + 1 < len &&\r\n path.charCodeAt(pos) == CharCode.DOT &&\r\n path.charCodeAt(pos + 1) == separator\r\n ) {\r\n pos += 2;\r\n }\r\n\r\n if (pos > 0 || len < path.length) {\r\n path = path.substring(pos, len);\r\n len -= pos;\r\n pos = 0;\r\n }\r\n\r\n var atEnd: bool;\r\n while (pos + 1 < len) {\r\n atEnd = false;\r\n\r\n // we are only interested in '/.' sequences ...\r\n if (\r\n path.charCodeAt(pos) == separator &&\r\n path.charCodeAt(pos + 1) == CharCode.DOT\r\n ) {\r\n // '/.' ( '/' | $ )\r\n atEnd = pos + 2 == len;\r\n if (atEnd ||\r\n pos + 2 < len &&\r\n path.charCodeAt(pos + 2) == separator\r\n ) {\r\n path = atEnd\r\n ? path.substring(0, pos)\r\n : path.substring(0, pos) + path.substring(pos + 2);\r\n len -= 2;\r\n continue;\r\n }\r\n\r\n // '/.' ( './' | '.' $ )\r\n atEnd = pos + 3 == len;\r\n if (atEnd && path.charCodeAt(pos + 2) == CharCode.DOT ||\r\n pos + 3 < len &&\r\n path.charCodeAt(pos + 2) == CharCode.DOT &&\r\n path.charCodeAt(pos + 3) == separator\r\n ) {\r\n // find preceeding '/'\r\n let ipos = pos;\r\n while (--ipos >= 0) {\r\n if (path.charCodeAt(ipos) == separator) {\r\n if (pos - ipos != 3 ||\r\n path.charCodeAt(ipos + 1) != CharCode.DOT ||\r\n path.charCodeAt(ipos + 2) != CharCode.DOT\r\n ) { // exclude '..' itself\r\n path = atEnd\r\n ? path.substring(0, ipos)\r\n : path.substring(0, ipos) + path.substring(pos + 3);\r\n len -= pos + 3 - ipos;\r\n pos = ipos - 1; // incremented again at end of loop\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // if there's no preceeding '/', trim start if non-empty\r\n if (ipos < 0 && pos > 0) {\r\n if (pos != 2 ||\r\n path.charCodeAt(0) != CharCode.DOT ||\r\n path.charCodeAt(1) != CharCode.DOT\r\n ) { // exclude '..' itself\r\n path = path.substring(pos + 4);\r\n len = path.length;\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n pos++;\r\n }\r\n return len > 0 ? path : \".\";\r\n}\r\n\r\n/** Resolves the specified path relative to the specified origin. */\r\nexport function resolvePath(normalizedPath: string, origin: string): string {\r\n if (normalizedPath.startsWith(\"std/\")) {\r\n return normalizedPath;\r\n }\r\n return normalizePath(\r\n dirname(origin) + String.fromCharCode(separator) + normalizedPath\r\n );\r\n}\r\n\r\n/** Obtains the directory portion of a normalized path. */\r\nexport function dirname(normalizedPath: string): string {\r\n var pos = normalizedPath.length;\r\n while (--pos > 0) {\r\n if (normalizedPath.charCodeAt(pos) == separator) {\r\n return normalizedPath.substring(0, pos);\r\n }\r\n }\r\n return \".\";\r\n}\r\n","/** @module util *//***/\r\n\r\n/** An enum of named character codes. */\r\nexport const enum CharCode {\r\n\r\n NULL = 0,\r\n LINEFEED = 0x0A,\r\n CARRIAGERETURN = 0x0D,\r\n LINESEPARATOR = 0x2028,\r\n PARAGRAPHSEPARATOR = 0x2029,\r\n NEXTLINE = 0x0085,\r\n\r\n SPACE = 0x20,\r\n NONBREAKINGSPACE = 0xA0,\r\n ENQUAD = 0x2000,\r\n EMQUAD = 0x2001,\r\n ENSPACE = 0x2002,\r\n EMSPACE = 0x2003,\r\n THREEPEREMSPACE = 0x2004,\r\n FOURPEREMSPACE = 0x2005,\r\n SIXPEREMSPACE = 0x2006,\r\n FIGURESPACE = 0x2007,\r\n PUNCTUATIONSPACE = 0x2008,\r\n THINSPACE = 0x2009,\r\n HAIRSPACE = 0x200A,\r\n ZEROWIDTHSPACE = 0x200B,\r\n NARROWNOBREAKSPACE = 0x202F,\r\n IDEOGRAPHICSPACE = 0x3000,\r\n MATHEMATICALSPACE = 0x205F,\r\n OGHAM = 0x1680,\r\n\r\n _ = 0x5F,\r\n\r\n _0 = 0x30,\r\n _1 = 0x31,\r\n _2 = 0x32,\r\n _3 = 0x33,\r\n _4 = 0x34,\r\n _5 = 0x35,\r\n _6 = 0x36,\r\n _7 = 0x37,\r\n _8 = 0x38,\r\n _9 = 0x39,\r\n\r\n a = 0x61,\r\n b = 0x62,\r\n c = 0x63,\r\n d = 0x64,\r\n e = 0x65,\r\n f = 0x66,\r\n g = 0x67,\r\n h = 0x68,\r\n i = 0x69,\r\n j = 0x6A,\r\n k = 0x6B,\r\n l = 0x6C,\r\n m = 0x6D,\r\n n = 0x6E,\r\n o = 0x6F,\r\n p = 0x70,\r\n q = 0x71,\r\n r = 0x72,\r\n s = 0x73,\r\n t = 0x74,\r\n u = 0x75,\r\n v = 0x76,\r\n w = 0x77,\r\n x = 0x78,\r\n y = 0x79,\r\n z = 0x7A,\r\n\r\n A = 0x41,\r\n B = 0x42,\r\n C = 0x43,\r\n D = 0x44,\r\n E = 0x45,\r\n F = 0x46,\r\n G = 0x47,\r\n H = 0x48,\r\n I = 0x49,\r\n J = 0x4A,\r\n K = 0x4B,\r\n L = 0x4C,\r\n M = 0x4D,\r\n N = 0x4E,\r\n O = 0x4F,\r\n P = 0x50,\r\n Q = 0x51,\r\n R = 0x52,\r\n S = 0x53,\r\n T = 0x54,\r\n U = 0x55,\r\n V = 0x56,\r\n W = 0x57,\r\n X = 0x58,\r\n Y = 0x59,\r\n Z = 0x5a,\r\n\r\n AMPERSAND = 0x26,\r\n ASTERISK = 0x2A,\r\n AT = 0x40,\r\n BACKSLASH = 0x5C,\r\n BACKTICK = 0x60,\r\n BAR = 0x7C,\r\n CARET = 0x5E,\r\n CLOSEBRACE = 0x7D,\r\n CLOSEBRACKET = 0x5D,\r\n CLOSEPAREN = 0x29,\r\n COLON = 0x3A,\r\n COMMA = 0x2C,\r\n DOLLAR = 0x24,\r\n DOT = 0x2E,\r\n DOUBLEQUOTE = 0x22,\r\n EQUALS = 0x3D,\r\n EXCLAMATION = 0x21,\r\n GREATERTHAN = 0x3E,\r\n HASH = 0x23,\r\n LESSTHAN = 0x3C,\r\n MINUS = 0x2D,\r\n OPENBRACE = 0x7B,\r\n OPENBRACKET = 0x5B,\r\n OPENPAREN = 0x28,\r\n PERCENT = 0x25,\r\n PLUS = 0x2B,\r\n QUESTION = 0x3F,\r\n SEMICOLON = 0x3B,\r\n SINGLEQUOTE = 0x27,\r\n SLASH = 0x2F,\r\n TILDE = 0x7E,\r\n\r\n BACKSPACE = 0x08,\r\n FORMFEED = 0x0C,\r\n BYTEORDERMARK = 0xFEFF,\r\n TAB = 0x09,\r\n VERTICALTAB = 0x0B\r\n}\r\n\r\n/** Tests if the specified character code is some sort of line break. */\r\nexport function isLineBreak(c: CharCode): bool {\r\n switch (c) {\r\n case CharCode.LINEFEED:\r\n case CharCode.CARRIAGERETURN:\r\n case CharCode.LINESEPARATOR:\r\n case CharCode.PARAGRAPHSEPARATOR: {\r\n return true;\r\n }\r\n default: {\r\n return false;\r\n }\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is some sort of white space. */\r\nexport function isWhiteSpace(c: i32): bool {\r\n switch (c) {\r\n case CharCode.SPACE:\r\n case CharCode.TAB:\r\n case CharCode.VERTICALTAB:\r\n case CharCode.FORMFEED:\r\n case CharCode.NONBREAKINGSPACE:\r\n case CharCode.NEXTLINE:\r\n case CharCode.OGHAM:\r\n case CharCode.NARROWNOBREAKSPACE:\r\n case CharCode.MATHEMATICALSPACE:\r\n case CharCode.IDEOGRAPHICSPACE:\r\n case CharCode.BYTEORDERMARK: {\r\n return true;\r\n }\r\n default: {\r\n return c >= CharCode.ENQUAD && c <= CharCode.ZEROWIDTHSPACE;\r\n }\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is a valid decimal digit. */\r\nexport function isDecimalDigit(c: i32): bool {\r\n return c >= CharCode._0 && c <= CharCode._9;\r\n}\r\n\r\n/** Tests if the specified character code is a valid octal digit. */\r\nexport function isOctalDigit(c: i32): bool {\r\n return c >= CharCode._0 && c <= CharCode._7;\r\n}\r\n\r\n/** Tests if the specified character code is a valid start of an identifier. */\r\nexport function isIdentifierStart(c: i32): bool {\r\n return c >= CharCode.A && c <= CharCode.Z\r\n || c >= CharCode.a && c <= CharCode.z\r\n || c == CharCode.DOLLAR\r\n || c == CharCode._\r\n || c > 0x7f && isUnicodeIdentifierStart(c);\r\n}\r\n\r\n/** Tests if the specified character code is a valid keyword character. */\r\nexport function isKeywordCharacter(c: i32): bool {\r\n return c >= CharCode.a && c <= CharCode.z;\r\n}\r\n\r\n/** Tests if the specified character code is a valid part of an identifier. */\r\nexport function isIdentifierPart(c: i32): bool {\r\n return c >= CharCode.A && c <= CharCode.Z\r\n || c >= CharCode.a && c <= CharCode.z\r\n || c >= CharCode._0 && c <= CharCode._9\r\n || c == CharCode.DOLLAR\r\n || c == CharCode._\r\n || c > 0x7f && isUnicodeIdentifierPart(c);\r\n}\r\n\r\n// storing as u16 to save memory\r\nconst unicodeIdentifierStart: u16[] = [\r\n 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736,\r\n 740, 748, 748, 750, 750, 880, 884, 886, 887, 890, 893, 902, 902, 904, 906,\r\n 908, 908, 910, 929, 931,\r\n 1013, 1015, 1153, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415, 1488, 1514,\r\n 1520, 1522, 1568, 1610, 1646, 1647, 1649, 1747, 1749, 1749, 1765, 1766, 1774,\r\n 1775, 1786, 1788, 1791, 1791, 1808, 1808, 1810, 1839, 1869, 1957, 1969, 1969,\r\n 1994, 2026, 2036, 2037, 2042, 2042, 2048, 2069, 2074, 2074, 2084, 2084, 2088,\r\n 2088, 2112, 2136, 2208, 2208, 2210, 2220, 2308, 2361, 2365, 2365, 2384, 2384,\r\n 2392, 2401, 2417, 2423, 2425, 2431, 2437, 2444, 2447, 2448, 2451, 2472, 2474,\r\n 2480, 2482, 2482, 2486, 2489, 2493, 2493, 2510, 2510, 2524, 2525, 2527, 2529,\r\n 2544, 2545, 2565, 2570, 2575, 2576, 2579, 2600, 2602, 2608, 2610, 2611, 2613,\r\n 2614, 2616, 2617, 2649, 2652, 2654, 2654, 2674, 2676, 2693, 2701, 2703, 2705,\r\n 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2749, 2749, 2768, 2768, 2784,\r\n 2785, 2821, 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873,\r\n 2877, 2877, 2908, 2909, 2911, 2913, 2929, 2929, 2947, 2947, 2949, 2954, 2958,\r\n 2960, 2962, 2965, 2969, 2970, 2972, 2972, 2974, 2975, 2979, 2980, 2984, 2986,\r\n 2990, 3001, 3024, 3024, 3077, 3084, 3086, 3088, 3090, 3112, 3114, 3123, 3125,\r\n 3129, 3133, 3133, 3160, 3161, 3168, 3169, 3205, 3212, 3214, 3216, 3218, 3240,\r\n 3242, 3251, 3253, 3257, 3261, 3261, 3294, 3294, 3296, 3297, 3313, 3314, 3333,\r\n 3340, 3342, 3344, 3346, 3386, 3389, 3389, 3406, 3406, 3424, 3425, 3450, 3455,\r\n 3461, 3478, 3482, 3505, 3507, 3515, 3517, 3517, 3520, 3526, 3585, 3632, 3634,\r\n 3635, 3648, 3654, 3713, 3714, 3716, 3716, 3719, 3720, 3722, 3722, 3725, 3725,\r\n 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751, 3751, 3754, 3755, 3757,\r\n 3760, 3762, 3763, 3773, 3773, 3776, 3780, 3782, 3782, 3804, 3807, 3840, 3840,\r\n 3904, 3911, 3913, 3948, 3976, 3980, 4096, 4138, 4159, 4159, 4176, 4181, 4186,\r\n 4189, 4193, 4193, 4197, 4198, 4206, 4208, 4213, 4225, 4238, 4238, 4256, 4293,\r\n 4295, 4295, 4301, 4301, 4304, 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696,\r\n 4696, 4698, 4701, 4704, 4744, 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798,\r\n 4800, 4800, 4802, 4805, 4808, 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4992,\r\n 5007, 5024, 5108, 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872,\r\n 5888, 5900, 5902, 5905, 5920, 5937, 5952, 5969, 5984, 5996, 5998, 6000, 6016,\r\n 6067, 6103, 6103, 6108, 6108, 6176, 6263, 6272, 6312, 6314, 6314, 6320, 6389,\r\n 6400, 6428, 6480, 6509, 6512, 6516, 6528, 6571, 6593, 6599, 6656, 6678, 6688,\r\n 6740, 6823, 6823, 6917, 6963, 6981, 6987, 7043, 7072, 7086, 7087, 7098, 7141,\r\n 7168, 7203, 7245, 7247, 7258, 7293, 7401, 7404, 7406, 7409, 7413, 7414, 7424,\r\n 7615, 7680, 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025,\r\n 8027, 8027, 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130,\r\n 8132, 8134, 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188,\r\n 8305, 8305, 8319, 8319, 8336, 8348, 8450, 8450, 8455, 8455, 8458, 8467, 8469,\r\n 8469, 8473, 8477, 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505,\r\n 8508, 8511, 8517, 8521, 8526, 8526, 8544, 8584,\r\n 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11502, 11506, 11507, 11520,\r\n 11557, 11559, 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11648, 11670,\r\n 11680, 11686, 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720,\r\n 11726, 11728, 11734, 11736, 11742, 11823, 11823, 12293, 12295, 12321, 12329,\r\n 12337, 12341, 12344, 12348, 12353, 12438, 12445, 12447, 12449, 12538, 12540,\r\n 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799, 13312, 19893,\r\n 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512, 42527, 42538,\r\n 42539, 42560, 42606, 42623, 42647, 42656, 42735, 42775, 42783, 42786, 42888,\r\n 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43009, 43011, 43013, 43015,\r\n 43018, 43020, 43042, 43072, 43123, 43138, 43187, 43250, 43255, 43259, 43259,\r\n 43274, 43301, 43312, 43334, 43360, 43388, 43396, 43442, 43471, 43471, 43520,\r\n 43560, 43584, 43586, 43588, 43595, 43616, 43638, 43642, 43642, 43648, 43695,\r\n 43697, 43697, 43701, 43702, 43705, 43709, 43712, 43712, 43714, 43714, 43739,\r\n 43741, 43744, 43754, 43762, 43764, 43777, 43782, 43785, 43790, 43793, 43798,\r\n 43808, 43814, 43816, 43822, 43968, 44002, 44032, 55203, 55216, 55238, 55243,\r\n 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275, 64279, 64285, 64285,\r\n 64287, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321, 64323,\r\n 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008, 65019,\r\n 65136, 65140, 65142, 65276, 65313, 65338, 65345, 65370, 65382, 65470, 65474,\r\n 65479, 65482, 65487, 65490, 65495, 65498, 65500,\r\n];\r\nconst unicodeIdentifierPart: u16[] = [\r\n 170, 170, 181, 181, 186, 186, 192, 214, 216, 246, 248, 705, 710, 721, 736,\r\n 740, 748, 748, 750, 750, 768, 884, 886, 887, 890, 893, 902, 902, 904, 906,\r\n 908, 908, 910, 929, 931,\r\n 1013, 1015, 1153, 1155, 1159, 1162, 1319, 1329, 1366, 1369, 1369, 1377, 1415,\r\n 1425, 1469, 1471, 1471, 1473, 1474, 1476, 1477, 1479, 1479, 1488, 1514, 1520,\r\n 1522, 1552, 1562, 1568, 1641, 1646, 1747, 1749, 1756, 1759, 1768, 1770, 1788,\r\n 1791, 1791, 1808, 1866, 1869, 1969, 1984, 2037, 2042, 2042, 2048, 2093, 2112,\r\n 2139, 2208, 2208, 2210, 2220, 2276, 2302, 2304, 2403, 2406, 2415, 2417, 2423,\r\n 2425, 2431, 2433, 2435, 2437, 2444, 2447, 2448, 2451, 2472, 2474, 2480, 2482,\r\n 2482, 2486, 2489, 2492, 2500, 2503, 2504, 2507, 2510, 2519, 2519, 2524, 2525,\r\n 2527, 2531, 2534, 2545, 2561, 2563, 2565, 2570, 2575, 2576, 2579, 2600, 2602,\r\n 2608, 2610, 2611, 2613, 2614, 2616, 2617, 2620, 2620, 2622, 2626, 2631, 2632,\r\n 2635, 2637, 2641, 2641, 2649, 2652, 2654, 2654, 2662, 2677, 2689, 2691, 2693,\r\n 2701, 2703, 2705, 2707, 2728, 2730, 2736, 2738, 2739, 2741, 2745, 2748, 2757,\r\n 2759, 2761, 2763, 2765, 2768, 2768, 2784, 2787, 2790, 2799, 2817, 2819, 2821,\r\n 2828, 2831, 2832, 2835, 2856, 2858, 2864, 2866, 2867, 2869, 2873, 2876, 2884,\r\n 2887, 2888, 2891, 2893, 2902, 2903, 2908, 2909, 2911, 2915, 2918, 2927, 2929,\r\n 2929, 2946, 2947, 2949, 2954, 2958, 2960, 2962, 2965, 2969, 2970, 2972, 2972,\r\n 2974, 2975, 2979, 2980, 2984, 2986, 2990, 3001, 3006, 3010, 3014, 3016, 3018,\r\n 3021, 3024, 3024, 3031, 3031, 3046, 3055, 3073, 3075, 3077, 3084, 3086, 3088,\r\n 3090, 3112, 3114, 3123, 3125, 3129, 3133, 3140, 3142, 3144, 3146, 3149, 3157,\r\n 3158, 3160, 3161, 3168, 3171, 3174, 3183, 3202, 3203, 3205, 3212, 3214, 3216,\r\n 3218, 3240, 3242, 3251, 3253, 3257, 3260, 3268, 3270, 3272, 3274, 3277, 3285,\r\n 3286, 3294, 3294, 3296, 3299, 3302, 3311, 3313, 3314, 3330, 3331, 3333, 3340,\r\n 3342, 3344, 3346, 3386, 3389, 3396, 3398, 3400, 3402, 3406, 3415, 3415, 3424,\r\n 3427, 3430, 3439, 3450, 3455, 3458, 3459, 3461, 3478, 3482, 3505, 3507, 3515,\r\n 3517, 3517, 3520, 3526, 3530, 3530, 3535, 3540, 3542, 3542, 3544, 3551, 3570,\r\n 3571, 3585, 3642, 3648, 3662, 3664, 3673, 3713, 3714, 3716, 3716, 3719, 3720,\r\n 3722, 3722, 3725, 3725, 3732, 3735, 3737, 3743, 3745, 3747, 3749, 3749, 3751,\r\n 3751, 3754, 3755, 3757, 3769, 3771, 3773, 3776, 3780, 3782, 3782, 3784, 3789,\r\n 3792, 3801, 3804, 3807, 3840, 3840, 3864, 3865, 3872, 3881, 3893, 3893, 3895,\r\n 3895, 3897, 3897, 3902, 3911, 3913, 3948, 3953, 3972, 3974, 3991, 3993, 4028,\r\n 4038, 4038, 4096, 4169, 4176, 4253, 4256, 4293, 4295, 4295, 4301, 4301, 4304,\r\n 4346, 4348, 4680, 4682, 4685, 4688, 4694, 4696, 4696, 4698, 4701, 4704, 4744,\r\n 4746, 4749, 4752, 4784, 4786, 4789, 4792, 4798, 4800, 4800, 4802, 4805, 4808,\r\n 4822, 4824, 4880, 4882, 4885, 4888, 4954, 4957, 4959, 4992, 5007, 5024, 5108,\r\n 5121, 5740, 5743, 5759, 5761, 5786, 5792, 5866, 5870, 5872, 5888, 5900, 5902,\r\n 5908, 5920, 5940, 5952, 5971, 5984, 5996, 5998, 6000, 6002, 6003, 6016, 6099,\r\n 6103, 6103, 6108, 6109, 6112, 6121, 6155, 6157, 6160, 6169, 6176, 6263, 6272,\r\n 6314, 6320, 6389, 6400, 6428, 6432, 6443, 6448, 6459, 6470, 6509, 6512, 6516,\r\n 6528, 6571, 6576, 6601, 6608, 6617, 6656, 6683, 6688, 6750, 6752, 6780, 6783,\r\n 6793, 6800, 6809, 6823, 6823, 6912, 6987, 6992, 7001, 7019, 7027, 7040, 7155,\r\n 7168, 7223, 7232, 7241, 7245, 7293, 7376, 7378, 7380, 7414, 7424, 7654, 7676,\r\n 7957, 7960, 7965, 7968, 8005, 8008, 8013, 8016, 8023, 8025, 8025, 8027, 8027,\r\n 8029, 8029, 8031, 8061, 8064, 8116, 8118, 8124, 8126, 8126, 8130, 8132, 8134,\r\n 8140, 8144, 8147, 8150, 8155, 8160, 8172, 8178, 8180, 8182, 8188, 8204, 8205,\r\n 8255, 8256, 8276, 8276, 8305, 8305, 8319, 8319, 8336, 8348, 8400, 8412, 8417,\r\n 8417, 8421, 8432, 8450, 8450, 8455, 8455, 8458, 8467, 8469, 8469, 8473, 8477,\r\n 8484, 8484, 8486, 8486, 8488, 8488, 8490, 8493, 8495, 8505, 8508, 8511, 8517,\r\n 8521, 8526, 8526, 8544, 8584,\r\n 11264, 11310, 11312, 11358, 11360, 11492, 11499, 11507, 11520, 11557, 11559,\r\n 11559, 11565, 11565, 11568, 11623, 11631, 11631, 11647, 11670, 11680, 11686,\r\n 11688, 11694, 11696, 11702, 11704, 11710, 11712, 11718, 11720, 11726, 11728,\r\n 11734, 11736, 11742, 11744, 11775, 11823, 11823, 12293, 12295, 12321, 12335,\r\n 12337, 12341, 12344, 12348, 12353, 12438, 12441, 12442, 12445, 12447, 12449,\r\n 12538, 12540, 12543, 12549, 12589, 12593, 12686, 12704, 12730, 12784, 12799,\r\n 13312, 19893, 19968, 40908, 40960, 42124, 42192, 42237, 42240, 42508, 42512,\r\n 42539, 42560, 42607, 42612, 42621, 42623, 42647, 42655, 42737, 42775, 42783,\r\n 42786, 42888, 42891, 42894, 42896, 42899, 42912, 42922, 43000, 43047, 43072,\r\n 43123, 43136, 43204, 43216, 43225, 43232, 43255, 43259, 43259, 43264, 43309,\r\n 43312, 43347, 43360, 43388, 43392, 43456, 43471, 43481, 43520, 43574, 43584,\r\n 43597, 43600, 43609, 43616, 43638, 43642, 43643, 43648, 43714, 43739, 43741,\r\n 43744, 43759, 43762, 43766, 43777, 43782, 43785, 43790, 43793, 43798, 43808,\r\n 43814, 43816, 43822, 43968, 44010, 44012, 44013, 44016, 44025, 44032, 55203,\r\n 55216, 55238, 55243, 55291, 63744, 64109, 64112, 64217, 64256, 64262, 64275,\r\n 64279, 64285, 64296, 64298, 64310, 64312, 64316, 64318, 64318, 64320, 64321,\r\n 64323, 64324, 64326, 64433, 64467, 64829, 64848, 64911, 64914, 64967, 65008,\r\n 65019, 65024, 65039, 65056, 65062, 65075, 65076, 65101, 65103, 65136, 65140,\r\n 65142, 65276, 65296, 65305, 65313, 65338, 65343, 65343, 65345, 65370, 65382,\r\n 65470, 65474, 65479, 65482, 65487, 65490, 65495, 65498, 65500,\r\n];\r\n\r\nfunction lookupInUnicodeMap(code: u16, map: u16[]): bool {\r\n if (code < map[0]) return false;\r\n\r\n var lo = 0;\r\n var hi = map.length;\r\n var mid: i32;\r\n\r\n while (lo + 1 < hi) {\r\n mid = lo + (hi - lo) / 2;\r\n mid -= mid % 2;\r\n if (map[mid] <= code && code <= map[mid + 1]) {\r\n return true;\r\n }\r\n if (code < map[mid]) {\r\n hi = mid;\r\n } else {\r\n lo = mid + 2;\r\n }\r\n }\r\n return false;\r\n}\r\n\r\nfunction isUnicodeIdentifierStart(code: i32): bool {\r\n return code < 0 || code > 0xffff ? false\r\n : lookupInUnicodeMap(code as u16, unicodeIdentifierStart);\r\n}\r\n\r\nfunction isUnicodeIdentifierPart(code: i32): bool {\r\n return code < 0 || code > 0xffff ? false\r\n : lookupInUnicodeMap(code as u16, unicodeIdentifierPart);\r\n}\r\n","/**\r\n * Built-in elements providing WebAssembly core functionality.\r\n * @module builtins\r\n *//***/\r\n\r\n import {\r\n Compiler,\r\n ConversionKind,\r\n WrapMode\r\n} from \"./compiler\";\r\n\r\nimport {\r\n DiagnosticCode\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Expression,\r\n LiteralKind,\r\n LiteralExpression,\r\n StringLiteralExpression\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags\r\n} from \"./types\";\r\n\r\nimport {\r\n BinaryOp,\r\n UnaryOp,\r\n HostOp,\r\n NativeType,\r\n ExpressionRef,\r\n ExpressionId,\r\n getExpressionId,\r\n getExpressionType,\r\n getConstValueI64High,\r\n getConstValueI64Low,\r\n getConstValueI32\r\n} from \"./module\";\r\n\r\nimport {\r\n ElementKind,\r\n FunctionPrototype,\r\n Class,\r\n Field,\r\n OperatorKind,\r\n FlowFlags\r\n} from \"./program\";\r\n\r\n/** Compiles a call to a built-in function. */\r\nexport function compileCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var module = compiler.module;\r\n\r\n var arg0: ExpressionRef,\r\n arg1: ExpressionRef,\r\n arg2: ExpressionRef,\r\n ret: ExpressionRef;\r\n\r\n // NOTE that some implementations below make use of the select expression where straight-forward.\r\n // whether worth or not should probably be tested once/ it's known if/how embedders handle it.\r\n // search: createSelect\r\n\r\n switch (prototype.internalName) {\r\n\r\n // types\r\n\r\n case \"isInteger\": { // isInteger() / isInteger(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.INTEGER) && !type.is(TypeFlags.REFERENCE)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isFloat\": { // isFloat() / isFloat(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.FLOAT)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isSigned\": { // isSigned() / isSigned(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n return type.is(TypeFlags.SIGNED)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isReference\": { // isReference() / isReference(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n compiler.currentType = Type.bool;\r\n return type.is(TypeFlags.REFERENCE)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isString\": { // isString() / isString(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n let classType = type.classReference;\r\n if (classType) {\r\n let stringInstance = compiler.program.stringInstance;\r\n if (stringInstance && classType.isAssignableTo(stringInstance)) return module.createI32(1);\r\n }\r\n return module.createI32(0);\r\n }\r\n case \"isArray\": { // isArray() / isArray(value: T) -> bool\r\n let type = evaluateConstantType(compiler, typeArguments, operands, reportNode);\r\n compiler.currentType = Type.bool;\r\n if (!type) return module.createUnreachable();\r\n let classType = type.classReference;\r\n return classType != null && classType.lookupOverload(OperatorKind.INDEXED_GET) != null\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n\r\n // math\r\n\r\n case \"clz\": { // clz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ClzI64\r\n : UnaryOp.ClzI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.ClzI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"ctz\": { // ctz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.NONE, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.CtzI64\r\n : UnaryOp.CtzI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.CtzI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"popcnt\": { // popcnt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16: {\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n }\r\n case TypeKind.BOOL: // usually overflows\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.PopcntI64\r\n : UnaryOp.PopcntI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.PopcntI64, arg0);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"rotl\": { // rotl(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = compiler.ensureSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotlI32, arg0, arg1),\r\n compiler.currentType\r\n );\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createBinary(BinaryOp.RotlI32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotlI64\r\n : BinaryOp.RotlI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createBinary(BinaryOp.RotlI64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret; // possibly overflows\r\n }\r\n case \"rotr\": { // rotr(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = compiler.ensureSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotrI32, arg0, arg1),\r\n compiler.currentType\r\n );\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createBinary(BinaryOp.RotrI32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotrI64\r\n : BinaryOp.RotrI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createBinary(BinaryOp.RotrI64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret; // possibly overflowws\r\n }\r\n case \"abs\": { // abs(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n // possibly overflows, e.g. abs(-128) == 128\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32, false);\r\n ret = module.createSelect( // x > 0 ? x : 0-x\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(BinaryOp.SubI32, // ifFalse\r\n module.createI32(0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32)\r\n ),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n module.createI32(0)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n compiler.options.usizeType.toNativeZero(module),\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType)\r\n ),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType),\r\n compiler.options.usizeType.toNativeZero(module)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createBinary(BinaryOp.SubI64,\r\n module.createI64(0, 0),\r\n module.createGetLocal(tempLocal.index, NativeType.I64),\r\n ),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal.index, NativeType.I64),\r\n module.createI64(0, 0)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.U64:\r\n case TypeKind.BOOL: {\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.AbsF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.AbsF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"max\": { // max(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtU32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.GtU64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.GtU64\r\n : BinaryOp.GtU32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.MaxF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.MaxF64, arg0, arg1);\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"min\": { // min(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.WRAP);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg1, compiler.currentType)\r\n );\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtU32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createGetLocal(tempLocal1.index, NativeType.I32)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtI64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(BinaryOp.LtU64,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n module.createGetLocal(tempLocal1.index, NativeType.I64)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.LtI64\r\n : BinaryOp.LtI32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType, false);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n compiler.currentFunction.freeTempLocal(tempLocal0);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createTeeLocal(tempLocal1.index, arg1),\r\n module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.LtU64\r\n : BinaryOp.LtU32,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType),\r\n module.createGetLocal(tempLocal1.index, compiler.options.nativeSizeType)\r\n )\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.MinF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.MinF64, arg0, arg1);\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"ceil\": { // ceil(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.CeilF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.CeilF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"floor\": { // floor(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.FloorF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.FloorF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"copysign\": { // copysign(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n switch (compiler.currentType.kind) { // TODO: does an integer version make sense?\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.CopysignF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.CopysignF64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"nearest\": { // nearest(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.NearestF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.NearestF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"reinterpret\": { // reinterpret(value: *) -> T\r\n if (operands.length != 1) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n switch (typeArguments[0].kind) {\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n arg0 = compiler.compileExpression(operands[0], Type.f32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretF32, arg0);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretF64, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (typeArguments[0].is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.f64\r\n : Type.f32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ReinterpretF64\r\n : UnaryOp.ReinterpretF32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretI32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n arg0 = compiler.compileExpression(operands[0], Type.i64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n ret = module.createUnary(UnaryOp.ReinterpretI64, arg0);\r\n break;\r\n }\r\n default: { // small integers and void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n compiler.currentType = typeArguments[0];\r\n return ret;\r\n }\r\n case \"sqrt\": { // sqrt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) { // TODO: integer versions (that return f64 or convert)?\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.SqrtF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.SqrtF64, arg0);\r\n break;\r\n }\r\n // case TypeKind.VOID:\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"trunc\": { // trunc(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments && typeArguments.length) {\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE, WrapMode.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.is(TypeFlags.REFERENCE)) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n // fall-through\r\n }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n // TODO: truncate to contextual type directly (if not void etc.)?\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.TruncF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.TruncF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n // memory access\r\n\r\n case \"load\": { // load(offset: usize, constantOffset?: usize) -> *\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n let offset = operands.length == 2 ? evaluateConstantOffset(compiler, operands[1]) : 0; // reports\r\n if (offset < 0) { // reported in evaluateConstantOffset\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = typeArguments[0];\r\n return module.createLoad(\r\n typeArguments[0].byteSize,\r\n typeArguments[0].is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n arg0,\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n contextualType.size > typeArguments[0].size\r\n ? (compiler.currentType = contextualType).toNativeType()\r\n : (compiler.currentType = typeArguments[0]).toNativeType(),\r\n offset\r\n );\r\n }\r\n case \"store\": { // store(offset: usize, value: *, constantOffset?: usize) -> void\r\n compiler.currentType = Type.void;\r\n if (operands.length < 2 || operands.length > 3) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n if (operands.length < 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n typeArguments[0],\r\n typeArguments[0].is(TypeFlags.INTEGER)\r\n ? ConversionKind.NONE // no need to convert to small int (but now might result in a float)\r\n : ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n let type: Type;\r\n if (\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n (\r\n !compiler.currentType.is(TypeFlags.INTEGER) || // float to int\r\n compiler.currentType.size < typeArguments[0].size // int to larger int (clear garbage bits)\r\n )\r\n ) {\r\n arg1 = compiler.convertExpression(\r\n arg1,\r\n compiler.currentType, typeArguments[0],\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE, // still clears garbage bits\r\n operands[1]\r\n );\r\n type = typeArguments[0];\r\n } else {\r\n type = compiler.currentType;\r\n }\r\n let offset = operands.length == 3 ? evaluateConstantOffset(compiler, operands[2]) : 0; // reports\r\n if (offset < 0) { // reported in evaluateConstantOffset\r\n return module.createUnreachable();\r\n }\r\n compiler.currentType = Type.void;\r\n return module.createStore(typeArguments[0].byteSize, arg0, arg1, type.toNativeType(), offset);\r\n }\r\n case \"sizeof\": { // sizeof() -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length != 0) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n let byteSize = (typeArguments)[0].byteSize;\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n ret = module.createI32(byteSize);\r\n } else {\r\n ret = module.createI64(byteSize, 0);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n ret = module.createI64(byteSize, 0);\r\n } else {\r\n ret = module.createI32(byteSize);\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"alignof\": { // alignof() -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length != 0) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n let byteSize = (typeArguments)[0].byteSize;\r\n let alignLog2: i32;\r\n switch (byteSize) {\r\n case 1: { alignLog2 = 0; break; }\r\n case 2: { alignLog2 = 1; break; }\r\n case 4: { alignLog2 = 2; break; }\r\n case 8: { alignLog2 = 3; break; }\r\n default: { assert(false); return module.createUnreachable(); }\r\n }\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n ret = module.createI32(alignLog2);\r\n } else {\r\n ret = module.createI64(alignLog2, 0);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n ret = module.createI64(alignLog2, 0);\r\n } else {\r\n ret = module.createI32(alignLog2);\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"offsetof\": { // offsetof(fieldName?: string) -> usize\r\n compiler.currentType = compiler.options.usizeType;\r\n if (operands.length > 1) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n let classType = typeArguments[0].classReference;\r\n if (!classType) {\r\n compiler.error( // TODO: better error\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let offset: i32;\r\n if (operands.length) {\r\n if (\r\n operands[0].kind != NodeKind.LITERAL ||\r\n (operands[0]).literalKind != LiteralKind.STRING\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.String_literal_expected,\r\n operands[0].range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let fieldName = (operands[0]).value;\r\n let field = classType.members ? classType.members.get(fieldName) : null;\r\n if (!(field && field.kind == ElementKind.FIELD)) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_has_no_property_1,\r\n operands[0].range, classType.internalName, fieldName\r\n );\r\n return module.createUnreachable();\r\n }\r\n offset = (field).memoryOffset;\r\n } else {\r\n offset = classType.currentMemoryOffset;\r\n }\r\n if (compiler.options.isWasm64) {\r\n // implicitly wrap if contextual type is a 32-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size <= 32) {\r\n compiler.currentType = Type.u32;\r\n return module.createI32(offset);\r\n } else {\r\n return module.createI64(offset);\r\n }\r\n } else {\r\n // implicitly extend if contextual type is a 64-bit integer\r\n if (contextualType.is(TypeFlags.INTEGER) && contextualType.size == 64) {\r\n compiler.currentType = Type.u64;\r\n return module.createI64(offset);\r\n } else {\r\n return module.createI32(offset);\r\n }\r\n }\r\n }\r\n\r\n // control flow\r\n\r\n case \"select\": { // select(ifTrue: T, ifFalse: T, condition: bool) -> T\r\n if (operands.length != 3) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n let type = compiler.currentType;\r\n arg1 = compiler.compileExpression(operands[1], type, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n arg2 = compiler.makeIsTrueish(\r\n compiler.compileExpressionRetainType(operands[2], Type.bool, WrapMode.NONE),\r\n compiler.currentType\r\n );\r\n compiler.currentType = type;\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n }\r\n default: { // any other value type\r\n ret = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"unreachable\": { // unreachable() -> *\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n\r\n // host operations\r\n\r\n case \"current_memory\": { // current_memory() -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.CurrentMemory);\r\n }\r\n case \"grow_memory\": { // grow_memory(pages: i32) -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n arg0 = module.createUnreachable();\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.GrowMemory, null, [ arg0 ]);\r\n }\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n case \"move_memory\": { // move_memory(dest: usize, src: usize: n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.MoveMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n case \"set_memory\": { // set_memory(dest: usize, value: u8, n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n Type.u32,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n arg2 = compiler.compileExpression(\r\n operands[2],\r\n compiler.options.usizeType,\r\n ConversionKind.IMPLICIT,\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.SetMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n\r\n // other\r\n\r\n case \"changetype\": { // changetype(value: *) -> T\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpressionRetainType(\r\n operands[0],\r\n typeArguments[0],\r\n WrapMode.NONE\r\n );\r\n compiler.currentType = typeArguments[0];\r\n if (compiler.currentType.size != typeArguments[0].size) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // if (reportNode.range.source.sourceKind != SourceKind.STDLIB)\r\n // compiler.warning(DiagnosticCode.Operation_is_unsafe, reportNode.range);\r\n return arg0; // any usize to any usize\r\n }\r\n case \"assert\": { // assert(isTrueish: T, message?: string) -> T with T != null\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else if (operands.length > 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.WRAP);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.bool, WrapMode.WRAP);\r\n }\r\n\r\n let type = compiler.currentType;\r\n compiler.currentType = type.nonNullableType;\r\n\r\n // just return ifTrueish if assertions are disabled, or simplify if dropped anyway\r\n if (compiler.options.noAssert) {\r\n if (contextualType == Type.void) {\r\n compiler.currentType = Type.void;\r\n return module.createNop();\r\n }\r\n return arg0;\r\n }\r\n\r\n let abort = compileAbort(compiler, operands.length == 2 ? operands[1] : null, reportNode);\r\n\r\n compiler.currentType = type.nonNullableType;\r\n\r\n if (contextualType == Type.void) { // simplify if dropped anyway\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n // TODO: also check for NaN in float assertions, as in `Boolean(NaN) -> false`?\r\n case TypeKind.F32: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n arg0,\r\n module.createF32(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n arg0,\r\n module.createF64(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n compiler.currentType = Type.void;\r\n } else {\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n let flow = compiler.currentFunction.flow;\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(\r\n compiler.currentType,\r\n !flow.canOverflow(arg0, compiler.currentType)\r\n );\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n default: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32, false);\r\n ret = module.createIf(\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createGetLocal(tempLocal.index, NativeType.I32),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i64, false);\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.I64)\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType, false);\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, compiler.options.nativeSizeType)\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f32, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF32(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.F32)\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f64, false);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n module.createTeeLocal(tempLocal.index, arg0),\r\n module.createF64(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.F64)\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"unchecked\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let flow = compiler.currentFunction.flow;\r\n flow.set(FlowFlags.UNCHECKED_CONTEXT);\r\n ret = compiler.compileExpressionRetainType(operands[0], contextualType, WrapMode.NONE);\r\n flow.unset(FlowFlags.UNCHECKED_CONTEXT);\r\n return ret;\r\n }\r\n case \"call_indirect\": { // call_indirect(target: Function | u32, ...args: *[]) -> T\r\n if (operands.length < 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n let returnType: Type;\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n returnType = typeArguments[0];\r\n } else {\r\n returnType = contextualType;\r\n }\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.u32, WrapMode.NONE);\r\n if (compiler.currentType.kind != TypeKind.U32) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n operands[0].range\r\n );\r\n return module.createUnreachable();\r\n }\r\n let numOperands = operands.length - 1;\r\n let operandExprs = new Array(numOperands);\r\n let signatureParts = new Array(numOperands + 1);\r\n let nativeReturnType = returnType.toNativeType();\r\n let nativeParamTypes = new Array(numOperands);\r\n for (let i = 0; i < numOperands; ++i) {\r\n operandExprs[i] = compiler.compileExpressionRetainType(operands[1 + i], Type.i32, WrapMode.NONE);\r\n let operandType = compiler.currentType;\r\n signatureParts[i] = operandType.toSignatureString();\r\n nativeParamTypes[i] = operandType.toNativeType();\r\n }\r\n signatureParts[numOperands] = returnType.toSignatureString();\r\n let typeName = signatureParts.join(\"\");\r\n let typeRef = module.getFunctionTypeBySignature(nativeReturnType, nativeParamTypes);\r\n if (!typeRef) typeRef = module.addFunctionType(typeName, nativeReturnType, nativeParamTypes);\r\n compiler.currentType = returnType;\r\n // of course this can easily result in a 'RuntimeError: function signature mismatch' trap and\r\n // thus must be used with care. it exists because it *might* be useful in specific scenarios.\r\n return module.createCallIndirect(arg0, operandExprs, typeName);\r\n }\r\n\r\n // conversions\r\n\r\n case \"i8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"i64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.i64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"isize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u8,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u16,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"u64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.u64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"usize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"bool\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.bool;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.bool,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"f32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.f32,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n case \"f64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n Type.f64,\r\n ConversionKind.EXPLICIT,\r\n WrapMode.NONE\r\n );\r\n }\r\n }\r\n var expr = deferASMCall(compiler, prototype, operands, contextualType, reportNode);\r\n if (expr) {\r\n if (typeArguments && typeArguments.length) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return expr;\r\n }\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n}\r\n\r\n/** Defers an inline-assembler-like call to a built-in function. */\r\nfunction deferASMCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n switch (prototype.internalName) {\r\n\r\n // TODO: Operators can't be just deferred (don't have a corresponding generic built-in)\r\n // add, sub, mul, div_s, div_u, rem_s, rem_u\r\n // and, or, xor, shl, shr_u, shr_s\r\n // eq, eqz, ne, lt_s, lt_u, le_s, le_u, gt_s, gt_u, ge_s, ge_u\r\n\r\n case \"i32.clz\": return deferASM(\"clz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.clz\": return deferASM(\"clz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.ctz\": return deferASM(\"ctz\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.ctz\": return deferASM(\"ctz\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.popcnt\": return deferASM(\"popcnt\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.popcnt\": return deferASM(\"popcnt\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotl\": return deferASM(\"rotl\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotl\": return deferASM(\"rotl\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"i32.rotr\": return deferASM(\"rotr\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.rotr\": return deferASM(\"rotr\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.abs\": return deferASM(\"abs\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.abs\": return deferASM(\"abs\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.max\": return deferASM(\"max\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.max\": return deferASM(\"max\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.min\": return deferASM(\"min\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.min\": return deferASM(\"min\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.ceil\": return deferASM(\"ceil\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.ceil\": return deferASM(\"ceil\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.floor\": return deferASM(\"floor\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.floor\": return deferASM(\"floor\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.copysign\": return deferASM(\"copysign\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.copysign\": return deferASM(\"copysign\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.nearest\": return deferASM(\"nearest\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.nearest\": return deferASM(\"nearest\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.reinterpret_f32\": return deferASM(\"reinterpret\", compiler, Type.i32, operands, Type.f32, reportNode);\r\n case \"i64.reinterpret_f64\": return deferASM(\"reinterpret\", compiler, Type.i64, operands, Type.f64, reportNode);\r\n case \"f32.reinterpret_i32\": return deferASM(\"reinterpret\", compiler, Type.f32, operands, Type.i32, reportNode);\r\n case \"f64.reinterpret_i64\": return deferASM(\"reinterpret\", compiler, Type.f64, operands, Type.i64, reportNode);\r\n\r\n case \"f32.sqrt\": return deferASM(\"sqrt\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.sqrt\": return deferASM(\"sqrt\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"f32.trunc\": return deferASM(\"trunc\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.trunc\": return deferASM(\"trunc\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u32, reportNode);\r\n case \"i32.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u32, reportNode);\r\n case \"i32.load\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.load8_s\": return deferASM(\"load\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.load8_u\": return deferASM(\"load\", compiler, Type.u8, operands, Type.u64, reportNode);\r\n case \"i64.load16_s\": return deferASM(\"load\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.load16_u\": return deferASM(\"load\", compiler, Type.u16, operands, Type.u64, reportNode);\r\n case \"i64.load32_s\": return deferASM(\"load\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.load32_u\": return deferASM(\"load\", compiler, Type.u32, operands, Type.u64, reportNode);\r\n case \"i64.load\": return deferASM(\"load\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.load\": return deferASM(\"load\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.load\": return deferASM(\"load\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n\r\n case \"i32.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i32, reportNode);\r\n case \"i32.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i32, reportNode);\r\n case \"i32.store\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i32, reportNode);\r\n case \"i64.store8\": return deferASM(\"store\", compiler, Type.i8, operands, Type.i64, reportNode);\r\n case \"i64.store16\": return deferASM(\"store\", compiler, Type.i16, operands, Type.i64, reportNode);\r\n case \"i64.store32\": return deferASM(\"store\", compiler, Type.i32, operands, Type.i64, reportNode);\r\n case \"i64.store\": return deferASM(\"store\", compiler, Type.i64, operands, Type.i64, reportNode);\r\n case \"f32.store\": return deferASM(\"store\", compiler, Type.f32, operands, Type.f32, reportNode);\r\n case \"f64.store\": return deferASM(\"store\", compiler, Type.f64, operands, Type.f64, reportNode);\r\n }\r\n return 0;\r\n}\r\n\r\n/** A helper for deferring inline-assembler-like calls to built-in functions. */\r\nfunction deferASM(\r\n name: string,\r\n compiler: Compiler,\r\n typeArgument: Type,\r\n operands: Expression[],\r\n valueType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var prototype = assert(compiler.program.elementsLookup.get(name));\r\n assert(prototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return compileCall(compiler, prototype, [ typeArgument ], operands, valueType, reportNode);\r\n}\r\n\r\n/** Evaluates the constant type of a type argument *or* expression. */\r\nfunction evaluateConstantType(\r\n compiler: Compiler,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n reportNode: Node\r\n): Type | null {\r\n if (operands.length == 0) { // requires type argument\r\n if (!typeArguments || typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return null;\r\n }\r\n return typeArguments[0];\r\n }\r\n if (operands.length == 1) { // optional type argument\r\n if (typeArguments) {\r\n if (typeArguments.length == 1) {\r\n compiler.compileExpression(operands[0], typeArguments[0], ConversionKind.IMPLICIT, WrapMode.NONE);\r\n } else {\r\n if (typeArguments.length) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return null;\r\n }\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n } else {\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, WrapMode.NONE);\r\n }\r\n return compiler.currentType;\r\n }\r\n if (typeArguments && typeArguments.length > 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return null;\r\n}\r\n\r\n/** Evaluates a `constantOffset` argument.*/\r\nfunction evaluateConstantOffset(compiler: Compiler, expression: Expression): i32 {\r\n var expr: ExpressionRef;\r\n var value: i32;\r\n if (compiler.options.isWasm64) {\r\n expr = compiler.precomputeExpression(expression, Type.usize64, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I64 ||\r\n getConstValueI64High(expr) != 0 ||\r\n (value = getConstValueI64Low(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n } else {\r\n expr = compiler.precomputeExpression(expression, Type.usize32, ConversionKind.IMPLICIT, WrapMode.NONE);\r\n if (\r\n getExpressionId(expr) != ExpressionId.Const ||\r\n getExpressionType(expr) != NativeType.I32 ||\r\n (value = getConstValueI32(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n }\r\n return value;\r\n}\r\n\r\nconst allocateInternalName = \"allocate_memory\";\r\n\r\n/** Compiles a memory allocation for an instance of the specified class. */\r\nexport function compileAllocate(\r\n compiler: Compiler,\r\n classInstance: Class,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = compiler.program;\r\n assert(classInstance.program == program);\r\n var module = compiler.module;\r\n var options = compiler.options;\r\n\r\n var allocatePrototype = program.elementsLookup.get(allocateInternalName);\r\n if (!allocatePrototype) {\r\n program.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n reportNode.range, allocateInternalName\r\n );\r\n program.info(\r\n DiagnosticCode.An_allocator_must_be_declared_to_allocate_memory_Try_importing_allocator_arena_or_allocator_tlsf,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (allocatePrototype.kind != ElementKind.FUNCTION_PROTOTYPE) {\r\n program.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n reportNode.range, allocatePrototype.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n var allocateInstance = (allocatePrototype).resolve(); // reports\r\n if (!(allocateInstance && compiler.compileFunction(allocateInstance))) return module.createUnreachable();\r\n\r\n compiler.currentType = classInstance.type;\r\n return module.createCall(\r\n allocateInstance.internalName, [\r\n options.isWasm64\r\n ? module.createI64(classInstance.currentMemoryOffset)\r\n : module.createI32(classInstance.currentMemoryOffset)\r\n ],\r\n options.nativeSizeType\r\n );\r\n}\r\n\r\nconst abortInternalName = \"abort\";\r\n\r\n/** Compiles an abort wired to the conditionally imported 'abort' function. */\r\nexport function compileAbort(\r\n compiler: Compiler,\r\n message: Expression | null,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = compiler.program;\r\n var module = compiler.module;\r\n\r\n var stringType = program.typesLookup.get(\"string\"); // might be intended\r\n if (!stringType) return module.createUnreachable();\r\n\r\n var abortPrototype = program.elementsLookup.get(abortInternalName); // might be intended\r\n if (!abortPrototype || abortPrototype.kind != ElementKind.FUNCTION_PROTOTYPE) return module.createUnreachable();\r\n\r\n var abortInstance = (abortPrototype).resolve(); // reports\r\n if (!(abortInstance && compiler.compileFunction(abortInstance))) return module.createUnreachable();\r\n\r\n var messageArg = message != null\r\n ? compiler.compileExpression(message, stringType, ConversionKind.IMPLICIT, WrapMode.NONE)\r\n : stringType.toNativeZero(module);\r\n\r\n var filenameArg = compiler.compileStaticString(reportNode.range.source.normalizedPath);\r\n\r\n compiler.currentType = Type.void;\r\n return module.createBlock(null, [\r\n module.createCallImport(\r\n abortInstance.internalName, [\r\n messageArg,\r\n filenameArg,\r\n module.createI32(reportNode.range.line),\r\n module.createI32(reportNode.range.column)\r\n ],\r\n NativeType.None\r\n ),\r\n module.createUnreachable()\r\n ]);\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__23__;","// Copy Binaryen exports to global scope\r\n\r\nconst binaryen = global.Binaryen || require(\"binaryen\");\r\n\r\nfor (var key in binaryen)\r\n if (key.startsWith(\"_Binaryen\") || key.startsWith(\"_Relooper\"))\r\n global[key] = binaryen[key];\r\n\r\n// Utilize Binaryen's heap\r\n\r\nglobal.allocate_memory = function(size) {\r\n if (!size) return 0; // should be safe in our case\r\n return binaryen._malloc(size);\r\n};\r\n\r\nglobal.free_memory = function(ptr) {\r\n if (ptr) binaryen._free(ptr);\r\n};\r\n\r\nglobal.move_memory = function(dest, src, n) {\r\n return binaryen._memmove(dest, src, n);\r\n};\r\n\r\nglobal.store = function(ptr, val) {\r\n binaryen.HEAPU8[ptr] = val;\r\n};\r\n\r\nglobal.load = function(ptr) {\r\n return binaryen.HEAPU8[ptr];\r\n};\r\n\r\n// Implement module stubs\r\n\r\nconst Module = require(\"../../module\").Module;\r\n\r\nModule.prototype.toText = function toText() {\r\n var previousPrint = binaryen.print;\r\n var ret = \"\";\r\n binaryen.print = function(x) { ret += x + \"\\n\" };\r\n _BinaryenModulePrint(this.ref);\r\n binaryen.print = previousPrint;\r\n return ret;\r\n};\r\n\r\nModule.prototype.toAsmjs = function toAsmjs() {\r\n var previousPrint = binaryen.print;\r\n var ret = \"\";\r\n binaryen.print = function(x) { ret += x + \"\\n\" };\r\n _BinaryenModulePrintAsmjs(this.ref);\r\n binaryen.print = previousPrint;\r\n return ret;\r\n};\r\n","module.exports = globalScope => {\r\n var HEAP = new Uint8Array(0);\r\n var HEAP_OFFSET = 0;\r\n\r\n globalScope[\"allocate_memory\"] = function allocate_memory(size) {\r\n if (!(size >>>= 0)) return 0;\r\n\r\n if (HEAP_OFFSET + size > HEAP.length) {\r\n var oldHeap = HEAP;\r\n HEAP = new Uint8Array(Math.max(65536, HEAP.length + size, HEAP.length * 2));\r\n HEAP.set(oldHeap);\r\n }\r\n\r\n var ptr = HEAP_OFFSET;\r\n if ((HEAP_OFFSET += size) & 7)\r\n HEAP_OFFSET = (HEAP_OFFSET | 7) + 1;\r\n\r\n return ptr;\r\n };\r\n\r\n globalScope[\"free_memory\"] = function free_memory(ptr) {\r\n // TODO\r\n };\r\n\r\n globalScope[\"move_memory\"] = function move_memory(dest, src, size) {\r\n HEAP.copyWithin(dest, src, src + size);\r\n };\r\n\r\n globalScope[\"store\"] = function store(ptr, value, offset) {\r\n HEAP[ptr + (offset | 0)] = value;\r\n };\r\n\r\n globalScope[\"load\"] = function load(ptr, offset) {\r\n return HEAP[ptr + (offset | 0)];\r\n };\r\n};\r\n","module.exports = globalScope => {\r\n globalScope[\"JSMath\"] = Math;\r\n};\r\n","/** @module std/portable *//***/\r\n\r\nvar globalScope = typeof window !== \"undefined\" && window || typeof global !== \"undefined\" && global || self;\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\nrequire(\"./portable/math\")(globalScope);\r\nrequire(\"./portable/memory\")(globalScope);\r\n","/**\r\n * JavaScript glue code.\r\n * @module glue/js\r\n * @preferred\r\n *//***/\r\n\r\nimport \"../../../std/portable\";\r\nimport \"./binaryen\";\r\nimport \"./i64\";\r\nimport \"./float\";\r\n"],"sourceRoot":""} \ No newline at end of file diff --git a/examples/n-body/build/index.asm.js b/examples/n-body/build/index.asm.js index ceb2bc3d..332b9c2b 100644 --- a/examples/n-body/build/index.asm.js +++ b/examples/n-body/build/index.asm.js @@ -17,6 +17,9 @@ function asmFunc(global, env, buffer) { var Math_floor = global.Math.floor; var Math_ceil = global.Math.ceil; var Math_sqrt = global.Math.sqrt; + var abort = env.abort; + var nan = global.NaN; + var infinity = global.Infinity; var $lib_env_abort = env.abort; var $lib_allocator_arena_startOffset = 0; var $lib_allocator_arena_offset = 0; @@ -25,7 +28,7 @@ function asmFunc(global, env, buffer) { var i64toi32_i32$HIGH_BITS = 0; function $lib_allocator_arena_allocate_memory($0) { $0 = $0 | 0; - var $3 = 0, $1 = 0, $2 = 0, wasm2asm_i32$0 = 0, wasm2asm_i32$1 = 0, wasm2asm_i32$2 = 0; + var $1 = 0, $2 = 0, $3 = 0, wasm2asm_i32$0 = 0, wasm2asm_i32$1 = 0, wasm2asm_i32$2 = 0; if ($0) { if ($0 >>> 0 > 1073741824 >>> 0) abort(); $1 = $lib_allocator_arena_offset; @@ -33,7 +36,7 @@ function asmFunc(global, env, buffer) { $2 = __wasm_current_memory(); if ($0 >>> 0 > ($2 << 16 | 0) >>> 0) { $3 = ((($0 - $1 | 0) + 65535 | 0) & 4294901760 | 0) >>> 16 | 0; - if ((__wasm_grow_memory((wasm2asm_i32$2 = ($2 | 0) > ($3 | 0), wasm2asm_i32$0 = $2, wasm2asm_i32$1 = $3, wasm2asm_i32$2 ? wasm2asm_i32$0 : wasm2asm_i32$1) | 0) | 0) < (0 | 0)) if ((__wasm_grow_memory($3 | 0) | 0) < (0 | 0)) abort();; + if ((__wasm_grow_memory((wasm2asm_i32$0 = $2, wasm2asm_i32$1 = $3, wasm2asm_i32$2 = ($2 | 0) > ($3 | 0), wasm2asm_i32$2 ? wasm2asm_i32$0 : wasm2asm_i32$1) | 0) | 0) < (0 | 0)) if ((__wasm_grow_memory($3 | 0) | 0) < (0 | 0)) abort();; } $lib_allocator_arena_offset = $0; return $1 | 0; @@ -50,66 +53,131 @@ function asmFunc(global, env, buffer) { $5 = +$5; $6 = +$6; $7 = +$7; - var $8 = 0, $29 = 0; - if ($0) $29 = $0; else { - $8 = $lib_allocator_arena_allocate_memory(56 | 0) | 0; - HEAPF64[$8 >> 3] = $1; - HEAPF64[($8 + 8 | 0) >> 3] = $2; - HEAPF64[($8 + 16 | 0) >> 3] = $3; - HEAPF64[($8 + 24 | 0) >> 3] = $4; - HEAPF64[($8 + 32 | 0) >> 3] = $5; - HEAPF64[($8 + 40 | 0) >> 3] = $6; - HEAPF64[($8 + 48 | 0) >> 3] = $7; - $29 = $8; + var wasm2asm_i32$0 = 0, wasm2asm_f64$0 = 0.0; + if (($0 | 0) == (0 | 0)) { + $0 = $lib_allocator_arena_allocate_memory(56 | 0) | 0; + wasm2asm_i32$0 = $0; + wasm2asm_f64$0 = $1; + HEAPF64[wasm2asm_i32$0 >> 3] = wasm2asm_f64$0; + wasm2asm_i32$0 = $0; + wasm2asm_f64$0 = $2; + HEAPF64[(wasm2asm_i32$0 + 8 | 0) >> 3] = wasm2asm_f64$0; + wasm2asm_i32$0 = $0; + wasm2asm_f64$0 = $3; + HEAPF64[(wasm2asm_i32$0 + 16 | 0) >> 3] = wasm2asm_f64$0; + wasm2asm_i32$0 = $0; + wasm2asm_f64$0 = $4; + HEAPF64[(wasm2asm_i32$0 + 24 | 0) >> 3] = wasm2asm_f64$0; + wasm2asm_i32$0 = $0; + wasm2asm_f64$0 = $5; + HEAPF64[(wasm2asm_i32$0 + 32 | 0) >> 3] = wasm2asm_f64$0; + wasm2asm_i32$0 = $0; + wasm2asm_f64$0 = $6; + HEAPF64[(wasm2asm_i32$0 + 40 | 0) >> 3] = wasm2asm_f64$0; + wasm2asm_i32$0 = $0; + wasm2asm_f64$0 = $7; + HEAPF64[(wasm2asm_i32$0 + 48 | 0) >> 3] = wasm2asm_f64$0; } - return $29 | 0; + return $0 | 0; } function $lib_memory_set_memory($0, $1, $2) { $0 = $0 | 0; $1 = $1 | 0; $2 = $2 | 0; - var i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, $4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $3 = 0, $14 = 0, $126 = 0, $126$hi = 0, $129$hi = 0, $3$hi = 0, wasm2asm_i32$0 = 0, wasm2asm_i32$1 = 0; + var i64toi32_i32$2 = 0, i64toi32_i32$0 = 0, $3 = 0, $4 = 0, i64toi32_i32$1 = 0, i64toi32_i32$4 = 0, i64toi32_i32$3 = 0, $4$hi = 0, $14 = 0, $121 = 0, $121$hi = 0, $123$hi = 0, wasm2asm_i32$0 = 0, wasm2asm_i32$1 = 0, wasm2asm_i32$2 = 0, wasm2asm_i32$3 = 0; if (($2 | 0) == (0 | 0)) return; - HEAP8[$0 >> 0] = $1; - HEAP8[(($0 + $2 | 0) - 1 | 0) >> 0] = $1; + wasm2asm_i32$0 = $0; + wasm2asm_i32$1 = $1; + HEAP8[wasm2asm_i32$0 >> 0] = wasm2asm_i32$1; + wasm2asm_i32$0 = ($0 + $2 | 0) - 1 | 0; + wasm2asm_i32$1 = $1; + HEAP8[wasm2asm_i32$0 >> 0] = wasm2asm_i32$1; if ($2 >>> 0 <= 2 >>> 0) return; - HEAP8[($0 + 1 | 0) >> 0] = $1; - HEAP8[($0 + 2 | 0) >> 0] = $1; - HEAP8[(($0 + $2 | 0) - 2 | 0) >> 0] = $1; - HEAP8[(($0 + $2 | 0) - 3 | 0) >> 0] = $1; + wasm2asm_i32$0 = $0 + 1 | 0; + wasm2asm_i32$1 = $1; + HEAP8[wasm2asm_i32$0 >> 0] = wasm2asm_i32$1; + wasm2asm_i32$0 = $0 + 2 | 0; + wasm2asm_i32$1 = $1; + HEAP8[wasm2asm_i32$0 >> 0] = wasm2asm_i32$1; + $3 = $0 + $2 | 0; + wasm2asm_i32$0 = $3 - 2 | 0; + wasm2asm_i32$1 = $1; + HEAP8[wasm2asm_i32$0 >> 0] = wasm2asm_i32$1; + wasm2asm_i32$0 = $3 - 3 | 0; + wasm2asm_i32$1 = $1; + HEAP8[wasm2asm_i32$0 >> 0] = wasm2asm_i32$1; if ($2 >>> 0 <= 6 >>> 0) return; - HEAP8[($0 + 3 | 0) >> 0] = $1; - HEAP8[(($0 + $2 | 0) - 4 | 0) >> 0] = $1; + wasm2asm_i32$0 = $0 + 3 | 0; + wasm2asm_i32$1 = $1; + HEAP8[wasm2asm_i32$0 >> 0] = wasm2asm_i32$1; + wasm2asm_i32$0 = ($0 + $2 | 0) - 4 | 0; + wasm2asm_i32$1 = $1; + HEAP8[wasm2asm_i32$0 >> 0] = wasm2asm_i32$1; if ($2 >>> 0 <= 8 >>> 0) return; - $4 = (0 - $0 | 0) & 3 | 0; - $0 = $0 + $4 | 0; + $3 = (0 - $0 | 0) & 3 | 0; + $2 = $2 - $3 | 0; + $0 = $0 + $3 | 0; $1 = Math_imul($1 & 255 | 0, 16843009); - HEAP32[$0 >> 2] = $1; - $2 = ($2 - $4 | 0) & 4294967292 | 0; - HEAP32[(($0 + $2 | 0) - 4 | 0) >> 2] = $1; + wasm2asm_i32$0 = $0; + wasm2asm_i32$1 = $1; + HEAP32[wasm2asm_i32$0 >> 2] = wasm2asm_i32$1; + $2 = $2 & 4294967292 | 0; + wasm2asm_i32$0 = ($0 + $2 | 0) - 4 | 0; + wasm2asm_i32$1 = $1; + HEAP32[wasm2asm_i32$0 >> 2] = wasm2asm_i32$1; if ($2 >>> 0 <= 8 >>> 0) return; - HEAP32[($0 + 4 | 0) >> 2] = $1; - HEAP32[($0 + 8 | 0) >> 2] = $1; - HEAP32[(($0 + $2 | 0) - 12 | 0) >> 2] = $1; - HEAP32[(($0 + $2 | 0) - 8 | 0) >> 2] = $1; + wasm2asm_i32$0 = $0 + 4 | 0; + wasm2asm_i32$1 = $1; + HEAP32[wasm2asm_i32$0 >> 2] = wasm2asm_i32$1; + wasm2asm_i32$0 = $0 + 8 | 0; + wasm2asm_i32$1 = $1; + HEAP32[wasm2asm_i32$0 >> 2] = wasm2asm_i32$1; + $3 = $0 + $2 | 0; + wasm2asm_i32$0 = $3 - 12 | 0; + wasm2asm_i32$1 = $1; + HEAP32[wasm2asm_i32$0 >> 2] = wasm2asm_i32$1; + wasm2asm_i32$0 = $3 - 8 | 0; + wasm2asm_i32$1 = $1; + HEAP32[wasm2asm_i32$0 >> 2] = wasm2asm_i32$1; if ($2 >>> 0 <= 24 >>> 0) return; - HEAP32[($0 + 12 | 0) >> 2] = $1; - HEAP32[($0 + 16 | 0) >> 2] = $1; - HEAP32[($0 + 20 | 0) >> 2] = $1; - HEAP32[($0 + 24 | 0) >> 2] = $1; - HEAP32[(($0 + $2 | 0) - 28 | 0) >> 2] = $1; - HEAP32[(($0 + $2 | 0) - 24 | 0) >> 2] = $1; - HEAP32[(($0 + $2 | 0) - 20 | 0) >> 2] = $1; - HEAP32[(($0 + $2 | 0) - 16 | 0) >> 2] = $1; - $4 = ($0 & 4 | 0) + 24 | 0; - $0 = $0 + $4 | 0; - $2 = $2 - $4 | 0; - i64toi32_i32$0 = 0; - $126 = $1; - $126$hi = i64toi32_i32$0; + wasm2asm_i32$0 = $0 + 12 | 0; + wasm2asm_i32$1 = $1; + HEAP32[wasm2asm_i32$0 >> 2] = wasm2asm_i32$1; + wasm2asm_i32$0 = $0 + 16 | 0; + wasm2asm_i32$1 = $1; + HEAP32[wasm2asm_i32$0 >> 2] = wasm2asm_i32$1; + wasm2asm_i32$0 = $0 + 20 | 0; + wasm2asm_i32$1 = $1; + HEAP32[wasm2asm_i32$0 >> 2] = wasm2asm_i32$1; + wasm2asm_i32$0 = $0 + 24 | 0; + wasm2asm_i32$1 = $1; + HEAP32[wasm2asm_i32$0 >> 2] = wasm2asm_i32$1; + $3 = $0 + $2 | 0; + wasm2asm_i32$0 = $3 - 28 | 0; + wasm2asm_i32$1 = $1; + HEAP32[wasm2asm_i32$0 >> 2] = wasm2asm_i32$1; + wasm2asm_i32$0 = $3 - 24 | 0; + wasm2asm_i32$1 = $1; + HEAP32[wasm2asm_i32$0 >> 2] = wasm2asm_i32$1; + wasm2asm_i32$0 = $3 - 20 | 0; + wasm2asm_i32$1 = $1; + HEAP32[wasm2asm_i32$0 >> 2] = wasm2asm_i32$1; + wasm2asm_i32$0 = $3 - 16 | 0; + wasm2asm_i32$1 = $1; + HEAP32[wasm2asm_i32$0 >> 2] = wasm2asm_i32$1; + $3 = ($0 & 4 | 0) + 24 | 0; + $0 = $0 + $3 | 0; + $2 = $2 - $3 | 0; i64toi32_i32$0 = 0; i64toi32_i32$0 = i64toi32_i32$0; + $4 = $1; + $4$hi = i64toi32_i32$0; + i64toi32_i32$0 = i64toi32_i32$0; + $121 = $1; + $121$hi = i64toi32_i32$0; + i64toi32_i32$0 = i64toi32_i32$0; + i64toi32_i32$0 = i64toi32_i32$0; i64toi32_i32$2 = $1; i64toi32_i32$1 = 0; i64toi32_i32$3 = 32; @@ -121,37 +189,53 @@ function asmFunc(global, env, buffer) { i64toi32_i32$1 = ((1 << i64toi32_i32$4 | 0) - 1 | 0) & (i64toi32_i32$2 >>> (32 - i64toi32_i32$4 | 0) | 0) | 0 | (i64toi32_i32$0 << i64toi32_i32$4 | 0) | 0; $14 = i64toi32_i32$2 << i64toi32_i32$4 | 0; } - $129$hi = i64toi32_i32$1; - i64toi32_i32$1 = $126$hi; - i64toi32_i32$0 = $126; - i64toi32_i32$2 = $129$hi; + $123$hi = i64toi32_i32$1; + i64toi32_i32$1 = $121$hi; + i64toi32_i32$0 = $121; + i64toi32_i32$2 = $123$hi; i64toi32_i32$3 = $14; i64toi32_i32$2 = i64toi32_i32$1 | i64toi32_i32$2 | 0; i64toi32_i32$2 = i64toi32_i32$2; - $3 = i64toi32_i32$0 | i64toi32_i32$3 | 0; - $3$hi = i64toi32_i32$2; + $4 = i64toi32_i32$0 | i64toi32_i32$3 | 0; + $4$hi = i64toi32_i32$2; continue_0 : do { if ($2 >>> 0 >= 32 >>> 0) { - i64toi32_i32$2 = $3$hi; + i64toi32_i32$2 = $4$hi; i64toi32_i32$0 = $0; i64toi32_i32$2 = i64toi32_i32$2; - HEAP32[$0 >> 2] = $3; - (wasm2asm_i32$0 = $0, wasm2asm_i32$1 = i64toi32_i32$2), ((HEAP8[(wasm2asm_i32$0 + 4 | 0) >> 0] = wasm2asm_i32$1 & 255 | 0, HEAP8[(wasm2asm_i32$0 + 5 | 0) >> 0] = (wasm2asm_i32$1 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$0 + 6 | 0) >> 0] = (wasm2asm_i32$1 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$0 + 7 | 0) >> 0] = (wasm2asm_i32$1 >>> 24 | 0) & 255 | 0; + wasm2asm_i32$0 = $0; + wasm2asm_i32$1 = $4; + HEAP32[wasm2asm_i32$0 >> 2] = wasm2asm_i32$1; + wasm2asm_i32$0 = $0; + wasm2asm_i32$1 = i64toi32_i32$2; + (wasm2asm_i32$2 = wasm2asm_i32$0, wasm2asm_i32$3 = wasm2asm_i32$1), ((HEAP8[(wasm2asm_i32$2 + 4 | 0) >> 0] = wasm2asm_i32$3 & 255 | 0, HEAP8[(wasm2asm_i32$2 + 5 | 0) >> 0] = (wasm2asm_i32$3 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$2 + 6 | 0) >> 0] = (wasm2asm_i32$3 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$2 + 7 | 0) >> 0] = (wasm2asm_i32$3 >>> 24 | 0) & 255 | 0; i64toi32_i32$2 = i64toi32_i32$2; i64toi32_i32$0 = $0 + 8 | 0; i64toi32_i32$2 = i64toi32_i32$2; - HEAP32[i64toi32_i32$0 >> 2] = $3; - (wasm2asm_i32$0 = i64toi32_i32$0, wasm2asm_i32$1 = i64toi32_i32$2), ((HEAP8[(wasm2asm_i32$0 + 4 | 0) >> 0] = wasm2asm_i32$1 & 255 | 0, HEAP8[(wasm2asm_i32$0 + 5 | 0) >> 0] = (wasm2asm_i32$1 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$0 + 6 | 0) >> 0] = (wasm2asm_i32$1 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$0 + 7 | 0) >> 0] = (wasm2asm_i32$1 >>> 24 | 0) & 255 | 0; + wasm2asm_i32$0 = i64toi32_i32$0; + wasm2asm_i32$1 = $4; + HEAP32[wasm2asm_i32$0 >> 2] = wasm2asm_i32$1; + wasm2asm_i32$0 = i64toi32_i32$0; + wasm2asm_i32$1 = i64toi32_i32$2; + (wasm2asm_i32$2 = wasm2asm_i32$0, wasm2asm_i32$3 = wasm2asm_i32$1), ((HEAP8[(wasm2asm_i32$2 + 4 | 0) >> 0] = wasm2asm_i32$3 & 255 | 0, HEAP8[(wasm2asm_i32$2 + 5 | 0) >> 0] = (wasm2asm_i32$3 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$2 + 6 | 0) >> 0] = (wasm2asm_i32$3 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$2 + 7 | 0) >> 0] = (wasm2asm_i32$3 >>> 24 | 0) & 255 | 0; i64toi32_i32$2 = i64toi32_i32$2; i64toi32_i32$0 = $0 + 16 | 0; i64toi32_i32$2 = i64toi32_i32$2; - HEAP32[i64toi32_i32$0 >> 2] = $3; - (wasm2asm_i32$0 = i64toi32_i32$0, wasm2asm_i32$1 = i64toi32_i32$2), ((HEAP8[(wasm2asm_i32$0 + 4 | 0) >> 0] = wasm2asm_i32$1 & 255 | 0, HEAP8[(wasm2asm_i32$0 + 5 | 0) >> 0] = (wasm2asm_i32$1 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$0 + 6 | 0) >> 0] = (wasm2asm_i32$1 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$0 + 7 | 0) >> 0] = (wasm2asm_i32$1 >>> 24 | 0) & 255 | 0; + wasm2asm_i32$0 = i64toi32_i32$0; + wasm2asm_i32$1 = $4; + HEAP32[wasm2asm_i32$0 >> 2] = wasm2asm_i32$1; + wasm2asm_i32$0 = i64toi32_i32$0; + wasm2asm_i32$1 = i64toi32_i32$2; + (wasm2asm_i32$2 = wasm2asm_i32$0, wasm2asm_i32$3 = wasm2asm_i32$1), ((HEAP8[(wasm2asm_i32$2 + 4 | 0) >> 0] = wasm2asm_i32$3 & 255 | 0, HEAP8[(wasm2asm_i32$2 + 5 | 0) >> 0] = (wasm2asm_i32$3 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$2 + 6 | 0) >> 0] = (wasm2asm_i32$3 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$2 + 7 | 0) >> 0] = (wasm2asm_i32$3 >>> 24 | 0) & 255 | 0; i64toi32_i32$2 = i64toi32_i32$2; i64toi32_i32$0 = $0 + 24 | 0; i64toi32_i32$2 = i64toi32_i32$2; - HEAP32[i64toi32_i32$0 >> 2] = $3; - (wasm2asm_i32$0 = i64toi32_i32$0, wasm2asm_i32$1 = i64toi32_i32$2), ((HEAP8[(wasm2asm_i32$0 + 4 | 0) >> 0] = wasm2asm_i32$1 & 255 | 0, HEAP8[(wasm2asm_i32$0 + 5 | 0) >> 0] = (wasm2asm_i32$1 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$0 + 6 | 0) >> 0] = (wasm2asm_i32$1 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$0 + 7 | 0) >> 0] = (wasm2asm_i32$1 >>> 24 | 0) & 255 | 0; + wasm2asm_i32$0 = i64toi32_i32$0; + wasm2asm_i32$1 = $4; + HEAP32[wasm2asm_i32$0 >> 2] = wasm2asm_i32$1; + wasm2asm_i32$0 = i64toi32_i32$0; + wasm2asm_i32$1 = i64toi32_i32$2; + (wasm2asm_i32$2 = wasm2asm_i32$0, wasm2asm_i32$3 = wasm2asm_i32$1), ((HEAP8[(wasm2asm_i32$2 + 4 | 0) >> 0] = wasm2asm_i32$3 & 255 | 0, HEAP8[(wasm2asm_i32$2 + 5 | 0) >> 0] = (wasm2asm_i32$3 >>> 8 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$2 + 6 | 0) >> 0] = (wasm2asm_i32$3 >>> 16 | 0) & 255 | 0), HEAP8[(wasm2asm_i32$2 + 7 | 0) >> 0] = (wasm2asm_i32$3 >>> 24 | 0) & 255 | 0; $2 = $2 - 32 | 0; $0 = $0 + 32 | 0; continue continue_0; @@ -163,31 +247,39 @@ function asmFunc(global, env, buffer) { function $lib_array_Array_Body__constructor($0, $1) { $0 = $0 | 0; $1 = $1 | 0; - var $2 = 0, $3 = 0, $4 = 0; + var $2 = 0, $3 = 0, wasm2asm_i32$0 = 0, wasm2asm_i32$1 = 0; if ($1 >>> 0 > 268435454 >>> 0) { $lib_env_abort(0 | 0, 8 | 0, 23 | 0, 39 | 0); abort(); } - $3 = $1 << 2 | 0; - $2 = $3; - $4 = $lib_allocator_arena_allocate_memory(1 << (32 - Math_clz32($2 + 7 | 0) | 0) | 0 | 0) | 0; - HEAP32[$4 >> 2] = $2; - $2 = $4; + $2 = $1 << 2 | 0; + $3 = $lib_allocator_arena_allocate_memory(1 << (32 - Math_clz32($2 + 7 | 0) | 0) | 0 | 0) | 0; + wasm2asm_i32$0 = $3; + wasm2asm_i32$1 = $2; + HEAP32[wasm2asm_i32$0 >> 2] = wasm2asm_i32$1; if (($0 | 0) == (0 | 0)) { $0 = $lib_allocator_arena_allocate_memory(8 | 0) | 0; - HEAP32[$0 >> 2] = 0; - HEAP32[($0 + 4 | 0) >> 2] = 0; + wasm2asm_i32$0 = $0; + wasm2asm_i32$1 = 0; + HEAP32[wasm2asm_i32$0 >> 2] = wasm2asm_i32$1; + wasm2asm_i32$0 = $0; + wasm2asm_i32$1 = 0; + HEAP32[(wasm2asm_i32$0 + 4 | 0) >> 2] = wasm2asm_i32$1; } - HEAP32[$0 >> 2] = $2; - HEAP32[($0 + 4 | 0) >> 2] = $1; - $lib_memory_set_memory($2 + 8 | 0 | 0, 0 | 0, $3 | 0); + wasm2asm_i32$0 = $0; + wasm2asm_i32$1 = $3; + HEAP32[wasm2asm_i32$0 >> 2] = wasm2asm_i32$1; + wasm2asm_i32$0 = $0; + wasm2asm_i32$1 = $1; + HEAP32[(wasm2asm_i32$0 + 4 | 0) >> 2] = wasm2asm_i32$1; + $lib_memory_set_memory($3 + 8 | 0 | 0, 0 | 0, $2 | 0); return $0 | 0; } function assembly_index_NBodySystem_constructor($0, $1) { $0 = $0 | 0; $1 = $1 | 0; - var $2 = 0, $3 = 0, $4 = 0.0, $5 = 0.0, $6 = 0.0, $7 = 0.0, $72 = 0, $8 = 0, $50 = 0; + var $2 = 0, $3 = 0, $4 = 0.0, $5 = 0.0, $6 = 0.0, $7 = 0.0, $8 = 0, $50 = 0, wasm2asm_i32$0 = 0, wasm2asm_f64$0 = 0.0, wasm2asm_i32$1 = 0; $8 = HEAP32[($1 + 4 | 0) >> 2] | 0; break_0 : { repeat_0 : do { @@ -205,31 +297,48 @@ function asmFunc(global, env, buffer) { $2 = HEAPU32[$1 >> 2] | 0; if (0 >>> 0 < ((HEAP32[$2 >> 2] | 0) >>> 2 | 0) >>> 0) $50 = HEAPU32[($2 + 8 | 0) >> 2] | 0; else abort(); $2 = $50; - HEAPF64[($2 + 24 | 0) >> 3] = -$5 / 39.47841760435743; - HEAPF64[($2 + 32 | 0) >> 3] = -$6 / 39.47841760435743; - HEAPF64[($2 + 40 | 0) >> 3] = -$7 / 39.47841760435743; - if ($0) $72 = $0; else { + wasm2asm_i32$0 = $2; + wasm2asm_f64$0 = -$5 / 39.47841760435743; + HEAPF64[(wasm2asm_i32$0 + 24 | 0) >> 3] = wasm2asm_f64$0; + wasm2asm_i32$0 = $2; + wasm2asm_f64$0 = -$6 / 39.47841760435743; + HEAPF64[(wasm2asm_i32$0 + 32 | 0) >> 3] = wasm2asm_f64$0; + wasm2asm_i32$0 = $2; + wasm2asm_f64$0 = -$7 / 39.47841760435743; + HEAPF64[(wasm2asm_i32$0 + 40 | 0) >> 3] = wasm2asm_f64$0; + if (($0 | 0) == (0 | 0)) { $2 = $lib_allocator_arena_allocate_memory(4 | 0) | 0; - HEAP32[$2 >> 2] = $1; - $72 = $2; + wasm2asm_i32$0 = $2; + wasm2asm_i32$1 = $1; + HEAP32[wasm2asm_i32$0 >> 2] = wasm2asm_i32$1; + $0 = $2; } - return $72 | 0; + return $0 | 0; } function assembly_index_init() { - var $0 = 0, $1 = 0, $2 = 0; + var $0 = 0, $1 = 0, wasm2asm_i32$0 = 0, wasm2asm_i32$1 = 0; $1 = $lib_array_Array_Body__constructor(0 | 0, 5 | 0) | 0; - $0 = $1; - $2 = assembly_index_Body_constructor(0 | 0, +(0.0), +(0.0), +(0.0), +(0.0), +(0.0), +(0.0), +(39.47841760435743)) | 0; - HEAP32[((HEAPU32[$1 >> 2] | 0) + 8 | 0) >> 2] = $2; + $0 = assembly_index_Body_constructor(0 | 0, +(0.0), +(0.0), +(0.0), +(0.0), +(0.0), +(0.0), +(39.47841760435743)) | 0; + wasm2asm_i32$0 = HEAPU32[$1 >> 2] | 0; + wasm2asm_i32$1 = $0; + HEAP32[(wasm2asm_i32$0 + 8 | 0) >> 2] = wasm2asm_i32$1; $0 = assembly_index_Body_constructor(0 | 0, +(4.841431442464721), +(-1.1603200440274284), +(-.10362204447112311), +(.606326392995832), +(2.81198684491626), +(-.02521836165988763), +(.03769367487038949)) | 0; - HEAP32[(((HEAPU32[$1 >> 2] | 0) + 4 | 0) + 8 | 0) >> 2] = $0; + wasm2asm_i32$0 = (HEAPU32[$1 >> 2] | 0) + 4 | 0; + wasm2asm_i32$1 = $0; + HEAP32[(wasm2asm_i32$0 + 8 | 0) >> 2] = wasm2asm_i32$1; $0 = assembly_index_Body_constructor(0 | 0, +(8.34336671824458), +(4.124798564124305), +(-.4035234171143214), +(-1.0107743461787924), +(1.8256623712304119), +(.008415761376584154), +(.011286326131968767)) | 0; - HEAP32[(((HEAPU32[$1 >> 2] | 0) + 8 | 0) + 8 | 0) >> 2] = $0; + wasm2asm_i32$0 = (HEAPU32[$1 >> 2] | 0) + 8 | 0; + wasm2asm_i32$1 = $0; + HEAP32[(wasm2asm_i32$0 + 8 | 0) >> 2] = wasm2asm_i32$1; $0 = assembly_index_Body_constructor(0 | 0, +(12.894369562139131), +(-15.111151401698631), +(-.22330757889265573), +(1.0827910064415354), +(.8687130181696082), +(-.010832637401363636), +(1.7237240570597112e-03)) | 0; - HEAP32[(((HEAPU32[$1 >> 2] | 0) + 12 | 0) + 8 | 0) >> 2] = $0; + wasm2asm_i32$0 = (HEAPU32[$1 >> 2] | 0) + 12 | 0; + wasm2asm_i32$1 = $0; + HEAP32[(wasm2asm_i32$0 + 8 | 0) >> 2] = wasm2asm_i32$1; $0 = assembly_index_Body_constructor(0 | 0, +(15.379697114850917), +(-25.919314609987964), +(.17925877295037118), +(.979090732243898), +(.5946989986476762), +(-.034755955504078104), +(2.0336868699246304e-03)) | 0; - HEAP32[(((HEAPU32[$1 >> 2] | 0) + 16 | 0) + 8 | 0) >> 2] = $0; + wasm2asm_i32$0 = (HEAPU32[$1 >> 2] | 0) + 16 | 0; + wasm2asm_i32$1 = $0; + HEAP32[(wasm2asm_i32$0 + 8 | 0) >> 2] = wasm2asm_i32$1; assembly_index_system = assembly_index_NBodySystem_constructor(0 | 0, $1 | 0) | 0; } @@ -242,13 +351,14 @@ function asmFunc(global, env, buffer) { if ($0 >>> 0 < ((HEAP32[$1 >> 2] | 0) >>> 2 | 0) >>> 0) $20 = HEAPU32[(($1 + ($0 << 2 | 0) | 0) + 8 | 0) >> 2] | 0; else abort(); $22 = $20; } else $22 = 0; - return $22 | 0; + $0 = $22; + return $0 | 0; } function assembly_index_NBodySystem_advance($0, $1) { $0 = $0 | 0; $1 = +$1; - var $2 = 0, $3 = 0.0, $9 = 0.0, $4 = 0, $5 = 0.0, $6 = 0.0, $7 = 0.0, $8 = 0, $10 = 0.0, $11 = 0.0, $12 = 0.0, $13 = 0, $14 = 0, $15 = 0.0, $16 = 0.0, $17 = 0.0, $18 = 0.0; + var $2 = 0, $3 = 0.0, $9 = 0.0, $4 = 0, $5 = 0.0, $6 = 0.0, $7 = 0.0, $8 = 0, $10 = 0.0, $11 = 0.0, $12 = 0.0, $13 = 0, $14 = 0, $19 = 0.0, $15 = 0.0, $16 = 0.0, $17 = 0.0, $18 = 0.0, wasm2asm_i32$0 = 0, wasm2asm_f64$0 = 0.0; $13 = HEAPU32[$0 >> 2] | 0; $14 = HEAP32[($13 + 4 | 0) >> 2] | 0; break_0 : { @@ -267,30 +377,50 @@ function asmFunc(global, env, buffer) { repeat_1 : do { if ($8 >>> 0 >= $14 >>> 0) break break_1; $2 = HEAPU32[(((HEAPU32[$13 >> 2] | 0) + ($8 << 2 | 0) | 0) + 8 | 0) >> 2] | 0; - $10 = $15 - +HEAPF64[$2 >> 3]; - $11 = $16 - +HEAPF64[($2 + 8 | 0) >> 3]; - $12 = $17 - +HEAPF64[($2 + 16 | 0) >> 3]; - $3 = $10 * $10 + $11 * $11 + $12 * $12; - $9 = $1 / ($3 * Math_sqrt($3)); - $3 = $18 * $9; - $9 = +HEAPF64[($2 + 48 | 0) >> 3] * $9; - $5 = $5 - $10 * $9; - $6 = $6 - $11 * $9; - $7 = $7 - $12 * $9; - HEAPF64[($2 + 24 | 0) >> 3] = +HEAPF64[($2 + 24 | 0) >> 3] + $10 * $3; - HEAPF64[($2 + 32 | 0) >> 3] = +HEAPF64[($2 + 32 | 0) >> 3] + $11 * $3; - HEAPF64[($2 + 40 | 0) >> 3] = +HEAPF64[($2 + 40 | 0) >> 3] + $12 * $3; + $19 = $15 - +HEAPF64[$2 >> 3]; + $3 = $19; + $10 = $16 - +HEAPF64[($2 + 8 | 0) >> 3]; + $11 = $17 - +HEAPF64[($2 + 16 | 0) >> 3]; + $9 = $3 * $3 + $10 * $10 + $11 * $11; + $12 = Math_sqrt($9); + $12 = $1 / ($9 * $12); + $9 = +HEAPF64[($2 + 48 | 0) >> 3] * $12; + $5 = $5 - $3 * $9; + $6 = $6 - $10 * $9; + $7 = $7 - $11 * $9; + $3 = $18 * $12; + wasm2asm_i32$0 = $2; + wasm2asm_f64$0 = +HEAPF64[($2 + 24 | 0) >> 3] + $19 * $3; + HEAPF64[(wasm2asm_i32$0 + 24 | 0) >> 3] = wasm2asm_f64$0; + wasm2asm_i32$0 = $2; + wasm2asm_f64$0 = +HEAPF64[($2 + 32 | 0) >> 3] + $10 * $3; + HEAPF64[(wasm2asm_i32$0 + 32 | 0) >> 3] = wasm2asm_f64$0; + wasm2asm_i32$0 = $2; + wasm2asm_f64$0 = +HEAPF64[($2 + 40 | 0) >> 3] + $11 * $3; + HEAPF64[(wasm2asm_i32$0 + 40 | 0) >> 3] = wasm2asm_f64$0; $8 = $8 + 1 | 0; continue repeat_1; break repeat_1; } while (1); }; - HEAPF64[($0 + 24 | 0) >> 3] = $5; - HEAPF64[($0 + 32 | 0) >> 3] = $6; - HEAPF64[($0 + 40 | 0) >> 3] = $7; - HEAPF64[$0 >> 3] = +HEAPF64[$0 >> 3] + $1 * $5; - HEAPF64[($0 + 8 | 0) >> 3] = +HEAPF64[($0 + 8 | 0) >> 3] + $1 * $6; - HEAPF64[($0 + 16 | 0) >> 3] = +HEAPF64[($0 + 16 | 0) >> 3] + $1 * $7; + wasm2asm_i32$0 = $0; + wasm2asm_f64$0 = $5; + HEAPF64[(wasm2asm_i32$0 + 24 | 0) >> 3] = wasm2asm_f64$0; + wasm2asm_i32$0 = $0; + wasm2asm_f64$0 = $6; + HEAPF64[(wasm2asm_i32$0 + 32 | 0) >> 3] = wasm2asm_f64$0; + wasm2asm_i32$0 = $0; + wasm2asm_f64$0 = $7; + HEAPF64[(wasm2asm_i32$0 + 40 | 0) >> 3] = wasm2asm_f64$0; + wasm2asm_i32$0 = $0; + wasm2asm_f64$0 = +HEAPF64[$0 >> 3] + $1 * $5; + HEAPF64[wasm2asm_i32$0 >> 3] = wasm2asm_f64$0; + wasm2asm_i32$0 = $0; + wasm2asm_f64$0 = +HEAPF64[($0 + 8 | 0) >> 3] + $1 * $6; + HEAPF64[(wasm2asm_i32$0 + 8 | 0) >> 3] = wasm2asm_f64$0; + wasm2asm_i32$0 = $0; + wasm2asm_f64$0 = +HEAPF64[($0 + 16 | 0) >> 3] + $1 * $7; + HEAPF64[(wasm2asm_i32$0 + 16 | 0) >> 3] = wasm2asm_f64$0; $4 = $4 + 1 | 0; continue repeat_0; break repeat_0; diff --git a/examples/n-body/build/optimized.wasm b/examples/n-body/build/optimized.wasm index 51d50d200c648e3199a00cb12d470e786dc258c3..380b00894cc77aba02f06f3710fea952490d3848 100644 GIT binary patch delta 503 zcmX|8J#Q015Z#^G^PPQnW}Q$tf#TglVTs0~u(C-MSdlwt zEg?eq3sK7akx)@mz-+8gy$`*4JEQ%$@q2Lkt@GJd$C}T61_J`0{b|B81$AVehaIb( zg7z#L zB>DJDZ^bT+Q?!!kgi`b+9YBnScSacgXZP<|Tv213fr;1jijOtLEq0bdK7Btsk*ygd zW$_I^*yhwKS4_x&Lot;l$g*sC6+iKhN9j%@6SRJw8kH_sv8H)YA+x5@@vS*5q+yhb zE>`BX?n#NZ*<&hw{F_a>PL(%A*}RVXo$34@vJ^FePNpL&96e#Rbek?m-oip;v2+!x zc7Z`scIj%=?ZTB`nm!8T$s9wYM8Ey&`mHP5WmBMw3W;^mLw(D7@?(-6ViOyZb$Pq+ UyggjIkoc{EwH~3q*vl{VKZti!FaQ7m delta 522 zcmYjOJ#W-N5Z#?w+k3b6#fhTm_$Z!NNLY%LoKgf#fwV-3f}cP`hvbtGND=Mv6Nt8; zkrw8JGsxmEnY*Y##-Bll?24>|XPH7|l9iI9}W z>q>?A&g{q6=GYQcE#>Lvvw5jU(5_4#kb4w=C8wGDNt7(|c$l_}J!tG88N4RYd0Uh9 zbjYgnIr1JQgxJm(DEcLK2Ud1|f=R#h8L}_^rFVUm$p_~{ZU)zj&{Y;A6hgXcgfS-T f(^&Q>o~c-~emN|Oa3BK2xfZZ7)R^2HWh?y;^PO1x diff --git a/examples/n-body/build/optimized.wat b/examples/n-body/build/optimized.wat index 8b6aae94..debca963 100644 --- a/examples/n-body/build/optimized.wat +++ b/examples/n-body/build/optimized.wat @@ -26,7 +26,6 @@ (local $1 i32) (local $2 i32) (local $3 i32) - (local $4 i32) (if (get_local $0) (block @@ -65,26 +64,24 @@ (grow_memory (select (get_local $2) - (tee_local $4 - (tee_local $3 - (i32.shr_u - (i32.and - (i32.add - (i32.sub - (get_local $0) - (get_local $1) - ) - (i32.const 65535) + (tee_local $3 + (i32.shr_u + (i32.and + (i32.add + (i32.sub + (get_local $0) + (get_local $1) ) - (i32.const -65536) + (i32.const 65535) ) - (i32.const 16) + (i32.const -65536) ) + (i32.const 16) ) ) (i32.gt_s (get_local $2) - (get_local $4) + (get_local $3) ) ) ) @@ -112,13 +109,13 @@ (i32.const 0) ) (func $assembly/index/Body#constructor (; 2 ;) (type $iFFFFFFFi) (param $0 i32) (param $1 f64) (param $2 f64) (param $3 f64) (param $4 f64) (param $5 f64) (param $6 f64) (param $7 f64) (result i32) - (local $8 i32) - (if (result i32) - (get_local $0) - (get_local $0) - (block (result i32) + (if + (i32.eqz + (get_local $0) + ) + (block (f64.store - (tee_local $8 + (tee_local $0 (call $~lib/allocator/arena/allocate_memory (i32.const 56) ) @@ -126,36 +123,36 @@ (get_local $1) ) (f64.store offset=8 - (get_local $8) + (get_local $0) (get_local $2) ) (f64.store offset=16 - (get_local $8) + (get_local $0) (get_local $3) ) (f64.store offset=24 - (get_local $8) + (get_local $0) (get_local $4) ) (f64.store offset=32 - (get_local $8) + (get_local $0) (get_local $5) ) (f64.store offset=40 - (get_local $8) + (get_local $0) (get_local $6) ) (f64.store offset=48 - (get_local $8) + (get_local $0) (get_local $7) ) - (get_local $8) ) ) + (get_local $0) ) (func $~lib/memory/set_memory (; 3 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) - (local $3 i64) - (local $4 i32) + (local $3 i32) + (local $4 i64) (if (i32.eqz (get_local $2) @@ -199,9 +196,11 @@ ) (i32.store8 (i32.sub - (i32.add - (get_local $0) - (get_local $2) + (tee_local $3 + (i32.add + (get_local $0) + (get_local $2) + ) ) (i32.const 2) ) @@ -209,10 +208,7 @@ ) (i32.store8 (i32.sub - (i32.add - (get_local $0) - (get_local $2) - ) + (get_local $3) (i32.const 3) ) (get_local $1) @@ -248,19 +244,25 @@ ) (return) ) + (set_local $2 + (i32.sub + (get_local $2) + (tee_local $3 + (i32.and + (i32.sub + (i32.const 0) + (get_local $0) + ) + (i32.const 3) + ) + ) + ) + ) (i32.store (tee_local $0 (i32.add (get_local $0) - (tee_local $4 - (i32.and - (i32.sub - (i32.const 0) - (get_local $0) - ) - (i32.const 3) - ) - ) + (get_local $3) ) ) (tee_local $1 @@ -279,10 +281,7 @@ (get_local $0) (tee_local $2 (i32.and - (i32.sub - (get_local $2) - (get_local $4) - ) + (get_local $2) (i32.const -4) ) ) @@ -314,9 +313,11 @@ ) (i32.store (i32.sub - (i32.add - (get_local $0) - (get_local $2) + (tee_local $3 + (i32.add + (get_local $0) + (get_local $2) + ) ) (i32.const 12) ) @@ -324,10 +325,7 @@ ) (i32.store (i32.sub - (i32.add - (get_local $0) - (get_local $2) - ) + (get_local $3) (i32.const 8) ) (get_local $1) @@ -369,9 +367,11 @@ ) (i32.store (i32.sub - (i32.add - (get_local $0) - (get_local $2) + (tee_local $3 + (i32.add + (get_local $0) + (get_local $2) + ) ) (i32.const 28) ) @@ -379,30 +379,21 @@ ) (i32.store (i32.sub - (i32.add - (get_local $0) - (get_local $2) - ) + (get_local $3) (i32.const 24) ) (get_local $1) ) (i32.store (i32.sub - (i32.add - (get_local $0) - (get_local $2) - ) + (get_local $3) (i32.const 20) ) (get_local $1) ) (i32.store (i32.sub - (i32.add - (get_local $0) - (get_local $2) - ) + (get_local $3) (i32.const 16) ) (get_local $1) @@ -410,7 +401,7 @@ (set_local $0 (i32.add (get_local $0) - (tee_local $4 + (tee_local $3 (i32.add (i32.and (get_local $0) @@ -424,18 +415,18 @@ (set_local $2 (i32.sub (get_local $2) - (get_local $4) + (get_local $3) ) ) - (set_local $3 + (set_local $4 (i64.or - (i64.extend_u/i32 - (get_local $1) - ) - (i64.shl + (tee_local $4 (i64.extend_u/i32 (get_local $1) ) + ) + (i64.shl + (get_local $4) (i64.const 32) ) ) @@ -449,28 +440,28 @@ (block (i64.store (get_local $0) - (get_local $3) + (get_local $4) ) (i64.store (i32.add (get_local $0) (i32.const 8) ) - (get_local $3) + (get_local $4) ) (i64.store (i32.add (get_local $0) (i32.const 16) ) - (get_local $3) + (get_local $4) ) (i64.store (i32.add (get_local $0) (i32.const 24) ) - (get_local $3) + (get_local $4) ) (set_local $2 (i32.sub @@ -492,7 +483,6 @@ (func $~lib/array/Array#constructor (; 4 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) (local $3 i32) - (local $4 i32) (if (i32.gt_u (get_local $1) @@ -509,7 +499,7 @@ ) ) (i32.store - (tee_local $4 + (tee_local $3 (call $~lib/allocator/arena/allocate_memory (i32.shl (i32.const 1) @@ -518,11 +508,9 @@ (i32.clz (i32.add (tee_local $2 - (tee_local $3 - (i32.shl - (get_local $1) - (i32.const 2) - ) + (i32.shl + (get_local $1) + (i32.const 2) ) ) (i32.const 7) @@ -534,9 +522,6 @@ ) (get_local $2) ) - (set_local $2 - (get_local $4) - ) (if (i32.eqz (get_local $0) @@ -558,7 +543,7 @@ ) (i32.store (get_local $0) - (get_local $2) + (get_local $3) ) (i32.store offset=4 (get_local $0) @@ -566,11 +551,11 @@ ) (call $~lib/memory/set_memory (i32.add - (get_local $2) + (get_local $3) (i32.const 8) ) (i32.const 0) - (get_local $3) + (get_local $2) ) (get_local $0) ) @@ -701,10 +686,11 @@ (f64.const 39.47841760435743) ) ) - (if (result i32) - (get_local $0) - (get_local $0) - (block (result i32) + (if + (i32.eqz + (get_local $0) + ) + (block (i32.store (tee_local $2 (call $~lib/allocator/arena/allocate_memory @@ -713,172 +699,172 @@ ) (get_local $1) ) - (get_local $2) + (set_local $0 + (get_local $2) + ) ) ) + (get_local $0) ) (func $assembly/index/init (; 6 ;) (type $v) (local $0 i32) (local $1 i32) - (local $2 i32) + (set_local $1 + (call $~lib/array/Array#constructor + (i32.const 0) + (i32.const 5) + ) + ) + (set_local $0 + (call $assembly/index/Body#constructor + (i32.const 0) + (f64.const 0) + (f64.const 0) + (f64.const 0) + (f64.const 0) + (f64.const 0) + (f64.const 0) + (f64.const 39.47841760435743) + ) + ) + (i32.store offset=8 + (i32.load + (get_local $1) + ) + (get_local $0) + ) + (set_local $0 + (call $assembly/index/Body#constructor + (i32.const 0) + (f64.const 4.841431442464721) + (f64.const -1.1603200440274284) + (f64.const -0.10362204447112311) + (f64.const 0.606326392995832) + (f64.const 2.81198684491626) + (f64.const -0.02521836165988763) + (f64.const 0.03769367487038949) + ) + ) + (i32.store offset=8 + (i32.add + (i32.load + (get_local $1) + ) + (i32.const 4) + ) + (get_local $0) + ) + (set_local $0 + (call $assembly/index/Body#constructor + (i32.const 0) + (f64.const 8.34336671824458) + (f64.const 4.124798564124305) + (f64.const -0.4035234171143214) + (f64.const -1.0107743461787924) + (f64.const 1.8256623712304119) + (f64.const 0.008415761376584154) + (f64.const 0.011286326131968767) + ) + ) + (i32.store offset=8 + (i32.add + (i32.load + (get_local $1) + ) + (i32.const 8) + ) + (get_local $0) + ) + (set_local $0 + (call $assembly/index/Body#constructor + (i32.const 0) + (f64.const 12.894369562139131) + (f64.const -15.111151401698631) + (f64.const -0.22330757889265573) + (f64.const 1.0827910064415354) + (f64.const 0.8687130181696082) + (f64.const -0.010832637401363636) + (f64.const 1.7237240570597112e-03) + ) + ) + (i32.store offset=8 + (i32.add + (i32.load + (get_local $1) + ) + (i32.const 12) + ) + (get_local $0) + ) + (set_local $0 + (call $assembly/index/Body#constructor + (i32.const 0) + (f64.const 15.379697114850917) + (f64.const -25.919314609987964) + (f64.const 0.17925877295037118) + (f64.const 0.979090732243898) + (f64.const 0.5946989986476762) + (f64.const -0.034755955504078104) + (f64.const 2.0336868699246304e-03) + ) + ) + (i32.store offset=8 + (i32.add + (i32.load + (get_local $1) + ) + (i32.const 16) + ) + (get_local $0) + ) (set_global $assembly/index/system (call $assembly/index/NBodySystem#constructor (i32.const 0) - (block (result i32) - (set_local $0 - (tee_local $1 - (call $~lib/array/Array#constructor - (i32.const 0) - (i32.const 5) - ) - ) - ) - (set_local $2 - (call $assembly/index/Body#constructor - (i32.const 0) - (f64.const 0) - (f64.const 0) - (f64.const 0) - (f64.const 0) - (f64.const 0) - (f64.const 0) - (f64.const 39.47841760435743) - ) - ) - (i32.store offset=8 - (i32.load - (get_local $0) - ) - (get_local $2) - ) - (set_local $0 - (call $assembly/index/Body#constructor - (i32.const 0) - (f64.const 4.841431442464721) - (f64.const -1.1603200440274284) - (f64.const -0.10362204447112311) - (f64.const 0.606326392995832) - (f64.const 2.81198684491626) - (f64.const -0.02521836165988763) - (f64.const 0.03769367487038949) - ) - ) - (i32.store offset=8 - (i32.add - (i32.load - (get_local $1) - ) - (i32.const 4) - ) - (get_local $0) - ) - (set_local $0 - (call $assembly/index/Body#constructor - (i32.const 0) - (f64.const 8.34336671824458) - (f64.const 4.124798564124305) - (f64.const -0.4035234171143214) - (f64.const -1.0107743461787924) - (f64.const 1.8256623712304119) - (f64.const 0.008415761376584154) - (f64.const 0.011286326131968767) - ) - ) - (i32.store offset=8 - (i32.add - (i32.load - (get_local $1) - ) - (i32.const 8) - ) - (get_local $0) - ) - (set_local $0 - (call $assembly/index/Body#constructor - (i32.const 0) - (f64.const 12.894369562139131) - (f64.const -15.111151401698631) - (f64.const -0.22330757889265573) - (f64.const 1.0827910064415354) - (f64.const 0.8687130181696082) - (f64.const -0.010832637401363636) - (f64.const 1.7237240570597112e-03) - ) - ) - (i32.store offset=8 - (i32.add - (i32.load - (get_local $1) - ) - (i32.const 12) - ) - (get_local $0) - ) - (set_local $0 - (call $assembly/index/Body#constructor - (i32.const 0) - (f64.const 15.379697114850917) - (f64.const -25.919314609987964) - (f64.const 0.17925877295037118) - (f64.const 0.979090732243898) - (f64.const 0.5946989986476762) - (f64.const -0.034755955504078104) - (f64.const 2.0336868699246304e-03) - ) - ) - (i32.store offset=8 - (i32.add - (i32.load - (get_local $1) - ) - (i32.const 16) - ) - (get_local $0) - ) - (get_local $1) - ) + (get_local $1) ) ) ) (func $assembly/index/getBody (; 7 ;) (type $ii) (param $0 i32) (result i32) (local $1 i32) - (if (result i32) - (i32.lt_u - (get_local $0) - (i32.load offset=4 - (tee_local $1 - (i32.load - (get_global $assembly/index/system) - ) - ) - ) - ) + (tee_local $0 (if (result i32) (i32.lt_u (get_local $0) - (i32.shr_u - (i32.load - (tee_local $1 - (i32.load - (get_local $1) - ) + (i32.load offset=4 + (tee_local $1 + (i32.load + (get_global $assembly/index/system) ) ) - (i32.const 2) ) ) - (i32.load offset=8 - (i32.add - (get_local $1) - (i32.shl - (get_local $0) + (if (result i32) + (i32.lt_u + (get_local $0) + (i32.shr_u + (i32.load + (tee_local $1 + (i32.load + (get_local $1) + ) + ) + ) (i32.const 2) ) ) + (i32.load offset=8 + (i32.add + (get_local $1) + (i32.shl + (get_local $0) + (i32.const 2) + ) + ) + ) + (unreachable) ) - (unreachable) + (i32.const 0) ) - (i32.const 0) ) ) (func $assembly/index/NBodySystem#advance (; 8 ;) (type $iFv) (param $0 i32) (param $1 f64) @@ -899,6 +885,7 @@ (local $16 f64) (local $17 f64) (local $18 f64) + (local $19 f64) (set_local $14 (i32.load offset=4 (tee_local $13 @@ -977,67 +964,58 @@ (get_local $14) ) ) - (set_local $3 - (f64.mul - (get_local $18) + (set_local $12 + (f64.sqrt (tee_local $9 - (f64.div - (get_local $1) - (f64.mul - (tee_local $3 - (f64.add - (f64.add - (f64.mul - (tee_local $10 - (f64.sub - (get_local $15) - (f64.load - (tee_local $2 - (i32.load offset=8 - (i32.add - (i32.load - (get_local $13) - ) - (i32.shl - (get_local $8) - (i32.const 2) - ) - ) + (f64.add + (f64.add + (f64.mul + (tee_local $3 + (tee_local $19 + (f64.sub + (get_local $15) + (f64.load + (tee_local $2 + (i32.load offset=8 + (i32.add + (i32.load + (get_local $13) + ) + (i32.shl + (get_local $8) + (i32.const 2) ) ) ) ) ) - (get_local $10) - ) - (f64.mul - (tee_local $11 - (f64.sub - (get_local $16) - (f64.load offset=8 - (get_local $2) - ) - ) - ) - (get_local $11) ) ) - (f64.mul - (tee_local $12 - (f64.sub - (get_local $17) - (f64.load offset=16 - (get_local $2) - ) - ) + ) + (get_local $3) + ) + (f64.mul + (tee_local $10 + (f64.sub + (get_local $16) + (f64.load offset=8 + (get_local $2) ) - (get_local $12) + ) + ) + (get_local $10) + ) + ) + (f64.mul + (tee_local $11 + (f64.sub + (get_local $17) + (f64.load offset=16 + (get_local $2) ) ) ) - (f64.sqrt - (get_local $3) - ) + (get_local $11) ) ) ) @@ -1047,13 +1025,21 @@ (f64.sub (get_local $5) (f64.mul - (get_local $10) + (get_local $3) (tee_local $9 (f64.mul (f64.load offset=48 (get_local $2) ) - (get_local $9) + (tee_local $12 + (f64.div + (get_local $1) + (f64.mul + (get_local $9) + (get_local $12) + ) + ) + ) ) ) ) @@ -1063,7 +1049,7 @@ (f64.sub (get_local $6) (f64.mul - (get_local $11) + (get_local $10) (get_local $9) ) ) @@ -1072,7 +1058,7 @@ (f64.sub (get_local $7) (f64.mul - (get_local $12) + (get_local $11) (get_local $9) ) ) @@ -1084,8 +1070,13 @@ (get_local $2) ) (f64.mul - (get_local $10) - (get_local $3) + (get_local $19) + (tee_local $3 + (f64.mul + (get_local $18) + (get_local $12) + ) + ) ) ) ) @@ -1096,7 +1087,7 @@ (get_local $2) ) (f64.mul - (get_local $11) + (get_local $10) (get_local $3) ) ) @@ -1108,7 +1099,7 @@ (get_local $2) ) (f64.mul - (get_local $12) + (get_local $11) (get_local $3) ) ) diff --git a/examples/n-body/build/untouched.wat b/examples/n-body/build/untouched.wat index c561e5e9..68beb3e5 100644 --- a/examples/n-body/build/untouched.wat +++ b/examples/n-body/build/untouched.wat @@ -188,9 +188,7 @@ ) ) ;;@ ~lib/allocator/arena.ts:34:9 - (return - (i32.const 0) - ) + (i32.const 0) ) (func $assembly/index/Body#constructor (; 2 ;) (type $iFFFFFFFi) (param $0 i32) (param $1 f64) (param $2 f64) (param $3 f64) (param $4 f64) (param $5 f64) (param $6 f64) (param $7 f64) (result i32) (local $8 i32) @@ -243,205 +241,188 @@ ) (func $assembly/index/Sun (; 3 ;) (type $i) (result i32) ;;@ assembly/index.ts:31:21 - (return - ;;@ assembly/index.ts:32:9 - (call $assembly/index/Body#constructor - (i32.const 0) - ;;@ assembly/index.ts:33:4 - (f64.const 0) - ;;@ assembly/index.ts:33:9 - (f64.const 0) - ;;@ assembly/index.ts:33:14 - (f64.const 0) - ;;@ assembly/index.ts:33:19 - (f64.const 0) - ;;@ assembly/index.ts:33:24 - (f64.const 0) - ;;@ assembly/index.ts:33:29 - (f64.const 0) - ;;@ assembly/index.ts:33:34 - (f64.const 39.47841760435743) - ) + (call $assembly/index/Body#constructor + (i32.const 0) + ;;@ assembly/index.ts:33:4 + (f64.const 0) + ;;@ assembly/index.ts:33:9 + (f64.const 0) + ;;@ assembly/index.ts:33:14 + (f64.const 0) + ;;@ assembly/index.ts:33:19 + (f64.const 0) + ;;@ assembly/index.ts:33:24 + (f64.const 0) + ;;@ assembly/index.ts:33:29 + (f64.const 0) + ;;@ assembly/index.ts:33:34 + (f64.const 39.47841760435743) ) ) (func $assembly/index/Jupiter (; 4 ;) (type $i) (result i32) ;;@ assembly/index.ts:37:25 - (return - ;;@ assembly/index.ts:38:9 - (call $assembly/index/Body#constructor - (i32.const 0) - ;;@ assembly/index.ts:39:4 - (f64.const 4.841431442464721) - ;;@ assembly/index.ts:40:4 - (f64.const -1.1603200440274284) - ;;@ assembly/index.ts:41:4 - (f64.const -0.10362204447112311) - ;;@ assembly/index.ts:42:4 - (f64.mul - (f64.const 0.001660076642744037) - ;;@ assembly/index.ts:42:30 - (f64.const 365.24) - ) - ;;@ assembly/index.ts:43:4 - (f64.mul - (f64.const 0.007699011184197404) - ;;@ assembly/index.ts:43:30 - (f64.const 365.24) - ) - ;;@ assembly/index.ts:44:4 - (f64.mul - (f64.const -6.90460016972063e-05) - ;;@ assembly/index.ts:44:31 - (f64.const 365.24) - ) - ;;@ assembly/index.ts:45:4 - (f64.mul - (f64.const 9.547919384243266e-04) - ;;@ assembly/index.ts:45:30 - (f64.const 39.47841760435743) - ) + (call $assembly/index/Body#constructor + (i32.const 0) + ;;@ assembly/index.ts:39:4 + (f64.const 4.841431442464721) + ;;@ assembly/index.ts:40:4 + (f64.const -1.1603200440274284) + ;;@ assembly/index.ts:41:4 + (f64.const -0.10362204447112311) + ;;@ assembly/index.ts:42:4 + (f64.mul + (f64.const 0.001660076642744037) + ;;@ assembly/index.ts:42:30 + (f64.const 365.24) + ) + ;;@ assembly/index.ts:43:4 + (f64.mul + (f64.const 0.007699011184197404) + ;;@ assembly/index.ts:43:30 + (f64.const 365.24) + ) + ;;@ assembly/index.ts:44:4 + (f64.mul + (f64.const -6.90460016972063e-05) + ;;@ assembly/index.ts:44:31 + (f64.const 365.24) + ) + ;;@ assembly/index.ts:45:4 + (f64.mul + (f64.const 9.547919384243266e-04) + ;;@ assembly/index.ts:45:30 + (f64.const 39.47841760435743) ) ) ) (func $assembly/index/Saturn (; 5 ;) (type $i) (result i32) ;;@ assembly/index.ts:49:24 - (return - ;;@ assembly/index.ts:50:9 - (call $assembly/index/Body#constructor - (i32.const 0) - ;;@ assembly/index.ts:51:4 - (f64.const 8.34336671824458) - ;;@ assembly/index.ts:52:4 - (f64.const 4.124798564124305) - ;;@ assembly/index.ts:53:4 - (f64.const -0.4035234171143214) - ;;@ assembly/index.ts:54:4 - (f64.mul - (f64.const -0.002767425107268624) - ;;@ assembly/index.ts:54:31 - (f64.const 365.24) - ) - ;;@ assembly/index.ts:55:4 - (f64.mul - (f64.const 0.004998528012349172) - ;;@ assembly/index.ts:55:30 - (f64.const 365.24) - ) - ;;@ assembly/index.ts:56:4 - (f64.mul - (f64.const 2.3041729757376393e-05) - ;;@ assembly/index.ts:56:30 - (f64.const 365.24) - ) - ;;@ assembly/index.ts:57:4 - (f64.mul - (f64.const 2.858859806661308e-04) - ;;@ assembly/index.ts:57:30 - (f64.const 39.47841760435743) - ) + (call $assembly/index/Body#constructor + (i32.const 0) + ;;@ assembly/index.ts:51:4 + (f64.const 8.34336671824458) + ;;@ assembly/index.ts:52:4 + (f64.const 4.124798564124305) + ;;@ assembly/index.ts:53:4 + (f64.const -0.4035234171143214) + ;;@ assembly/index.ts:54:4 + (f64.mul + (f64.const -0.002767425107268624) + ;;@ assembly/index.ts:54:31 + (f64.const 365.24) + ) + ;;@ assembly/index.ts:55:4 + (f64.mul + (f64.const 0.004998528012349172) + ;;@ assembly/index.ts:55:30 + (f64.const 365.24) + ) + ;;@ assembly/index.ts:56:4 + (f64.mul + (f64.const 2.3041729757376393e-05) + ;;@ assembly/index.ts:56:30 + (f64.const 365.24) + ) + ;;@ assembly/index.ts:57:4 + (f64.mul + (f64.const 2.858859806661308e-04) + ;;@ assembly/index.ts:57:30 + (f64.const 39.47841760435743) ) ) ) (func $assembly/index/Uranus (; 6 ;) (type $i) (result i32) ;;@ assembly/index.ts:61:24 - (return - ;;@ assembly/index.ts:62:9 - (call $assembly/index/Body#constructor - (i32.const 0) - ;;@ assembly/index.ts:63:4 - (f64.const 12.894369562139131) - ;;@ assembly/index.ts:64:4 - (f64.const -15.111151401698631) - ;;@ assembly/index.ts:65:4 - (f64.const -0.22330757889265573) - ;;@ assembly/index.ts:66:4 - (f64.mul - (f64.const 0.002964601375647616) - ;;@ assembly/index.ts:66:30 - (f64.const 365.24) - ) - ;;@ assembly/index.ts:67:4 - (f64.mul - (f64.const 2.3784717395948095e-03) - ;;@ assembly/index.ts:67:30 - (f64.const 365.24) - ) - ;;@ assembly/index.ts:68:4 - (f64.mul - (f64.const -2.9658956854023756e-05) - ;;@ assembly/index.ts:68:31 - (f64.const 365.24) - ) - ;;@ assembly/index.ts:69:4 - (f64.mul - (f64.const 4.366244043351563e-05) - ;;@ assembly/index.ts:69:30 - (f64.const 39.47841760435743) - ) + (call $assembly/index/Body#constructor + (i32.const 0) + ;;@ assembly/index.ts:63:4 + (f64.const 12.894369562139131) + ;;@ assembly/index.ts:64:4 + (f64.const -15.111151401698631) + ;;@ assembly/index.ts:65:4 + (f64.const -0.22330757889265573) + ;;@ assembly/index.ts:66:4 + (f64.mul + (f64.const 0.002964601375647616) + ;;@ assembly/index.ts:66:30 + (f64.const 365.24) + ) + ;;@ assembly/index.ts:67:4 + (f64.mul + (f64.const 2.3784717395948095e-03) + ;;@ assembly/index.ts:67:30 + (f64.const 365.24) + ) + ;;@ assembly/index.ts:68:4 + (f64.mul + (f64.const -2.9658956854023756e-05) + ;;@ assembly/index.ts:68:31 + (f64.const 365.24) + ) + ;;@ assembly/index.ts:69:4 + (f64.mul + (f64.const 4.366244043351563e-05) + ;;@ assembly/index.ts:69:30 + (f64.const 39.47841760435743) ) ) ) (func $assembly/index/Neptune (; 7 ;) (type $i) (result i32) ;;@ assembly/index.ts:73:25 - (return - ;;@ assembly/index.ts:74:9 - (call $assembly/index/Body#constructor - (i32.const 0) - ;;@ assembly/index.ts:75:4 - (f64.const 15.379697114850917) - ;;@ assembly/index.ts:76:4 - (f64.const -25.919314609987964) - ;;@ assembly/index.ts:77:4 - (f64.const 0.17925877295037118) - ;;@ assembly/index.ts:78:4 - (f64.mul - (f64.const 2.6806777249038932e-03) - ;;@ assembly/index.ts:78:30 - (f64.const 365.24) - ) - ;;@ assembly/index.ts:79:4 - (f64.mul - (f64.const 0.001628241700382423) - ;;@ assembly/index.ts:79:30 - (f64.const 365.24) - ) - ;;@ assembly/index.ts:80:4 - (f64.mul - (f64.const -9.515922545197159e-05) - ;;@ assembly/index.ts:80:31 - (f64.const 365.24) - ) - ;;@ assembly/index.ts:81:4 - (f64.mul - (f64.const 5.1513890204661145e-05) - ;;@ assembly/index.ts:81:30 - (f64.const 39.47841760435743) - ) + (call $assembly/index/Body#constructor + (i32.const 0) + ;;@ assembly/index.ts:75:4 + (f64.const 15.379697114850917) + ;;@ assembly/index.ts:76:4 + (f64.const -25.919314609987964) + ;;@ assembly/index.ts:77:4 + (f64.const 0.17925877295037118) + ;;@ assembly/index.ts:78:4 + (f64.mul + (f64.const 2.6806777249038932e-03) + ;;@ assembly/index.ts:78:30 + (f64.const 365.24) + ) + ;;@ assembly/index.ts:79:4 + (f64.mul + (f64.const 0.001628241700382423) + ;;@ assembly/index.ts:79:30 + (f64.const 365.24) + ) + ;;@ assembly/index.ts:80:4 + (f64.mul + (f64.const -9.515922545197159e-05) + ;;@ assembly/index.ts:80:31 + (f64.const 365.24) + ) + ;;@ assembly/index.ts:81:4 + (f64.mul + (f64.const 5.1513890204661145e-05) + ;;@ assembly/index.ts:81:30 + (f64.const 39.47841760435743) ) ) ) (func $~lib/internal/arraybuffer/computeSize (; 8 ;) (type $ii) (param $0 i32) (result i32) ;;@ ~lib/internal/arraybuffer.ts:10:52 - (return + (i32.shl ;;@ ~lib/internal/arraybuffer.ts:17:9 - (i32.shl - (i32.const 1) - ;;@ ~lib/internal/arraybuffer.ts:17:21 - (i32.sub - ;;@ ~lib/internal/arraybuffer.ts:17:29 - (i32.const 32) - ;;@ ~lib/internal/arraybuffer.ts:17:39 - (i32.clz - ;;@ ~lib/internal/arraybuffer.ts:17:48 - (i32.sub - (i32.add - (get_local $0) - ;;@ ~lib/internal/arraybuffer.ts:17:61 - (i32.const 8) - ) - ;;@ ~lib/internal/arraybuffer.ts:17:75 - (i32.const 1) + (i32.const 1) + ;;@ ~lib/internal/arraybuffer.ts:17:21 + (i32.sub + ;;@ ~lib/internal/arraybuffer.ts:17:29 + (i32.const 32) + ;;@ ~lib/internal/arraybuffer.ts:17:39 + (i32.clz + ;;@ ~lib/internal/arraybuffer.ts:17:48 + (i32.sub + (i32.add + (get_local $0) + ;;@ ~lib/internal/arraybuffer.ts:17:61 + (i32.const 8) ) + ;;@ ~lib/internal/arraybuffer.ts:17:75 + (i32.const 1) ) ) ) @@ -488,10 +469,7 @@ (get_local $0) ) ;;@ ~lib/internal/arraybuffer.ts:25:39 - (return - ;;@ ~lib/internal/arraybuffer.ts:25:9 - (get_local $1) - ) + (get_local $1) ) (func $~lib/memory/set_memory (; 10 ;) (type $iiiv) (param $0 i32) (param $1 i32) (param $2 i32) (local $3 i32) @@ -1139,40 +1117,32 @@ ) (func $~lib/array/Array#get:length (; 13 ;) (type $ii) (param $0 i32) (result i32) ;;@ ~lib/array.ts:35:20 - (return + (i32.load offset=4 ;;@ ~lib/array.ts:36:11 - (i32.load offset=4 - (get_local $0) - ) + (get_local $0) ) ) (func $~lib/array/Array#__unchecked_get (; 14 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 i32) ;;@ ~lib/array.ts:76:41 - (return - ;;@ ~lib/array.ts:77:11 - (block $~lib/internal/arraybuffer/loadUnsafe|inlined.0 (result i32) - (set_local $2 - ;;@ ~lib/array.ts:77:27 - (i32.load - (get_local $0) - ) + (block $~lib/internal/arraybuffer/loadUnsafe|inlined.0 (result i32) + (set_local $2 + ;;@ ~lib/array.ts:77:27 + (i32.load + (get_local $0) ) - ;;@ ~lib/internal/arraybuffer.ts:64:91 - (br $~lib/internal/arraybuffer/loadUnsafe|inlined.0 - ;;@ ~lib/internal/arraybuffer.ts:64:9 - (i32.load offset=8 - ;;@ ~lib/internal/arraybuffer.ts:64:20 - (i32.add - (get_local $2) - ;;@ ~lib/internal/arraybuffer.ts:64:48 - (i32.shl - ;;@ ~lib/internal/arraybuffer.ts:64:49 - (get_local $1) - ;;@ ~lib/internal/arraybuffer.ts:64:65 - (i32.const 2) - ) - ) + ) + ;;@ ~lib/internal/arraybuffer.ts:64:91 + (i32.load offset=8 + ;;@ ~lib/internal/arraybuffer.ts:64:20 + (i32.add + (get_local $2) + ;;@ ~lib/internal/arraybuffer.ts:64:48 + (i32.shl + ;;@ ~lib/internal/arraybuffer.ts:64:49 + (get_local $1) + ;;@ ~lib/internal/arraybuffer.ts:64:65 + (i32.const 2) ) ) ) @@ -1188,44 +1158,39 @@ ) ) ;;@ ~lib/array.ts:72:23 - (return + (if (result i32) ;;@ ~lib/array.ts:70:11 - (if (result i32) - (i32.lt_u - (get_local $1) - ;;@ ~lib/array.ts:70:24 - (i32.shr_u - ;;@ ~lib/array.ts:70:30 - (i32.load - (get_local $2) - ) - ;;@ ~lib/array.ts:70:52 - (i32.const 2) + (i32.lt_u + (get_local $1) + ;;@ ~lib/array.ts:70:24 + (i32.shr_u + ;;@ ~lib/array.ts:70:30 + (i32.load + (get_local $2) ) + ;;@ ~lib/array.ts:70:52 + (i32.const 2) ) - ;;@ ~lib/array.ts:71:8 - (block $~lib/internal/arraybuffer/loadUnsafe|inlined.1 (result i32) - ;;@ ~lib/internal/arraybuffer.ts:64:91 - (br $~lib/internal/arraybuffer/loadUnsafe|inlined.1 - ;;@ ~lib/internal/arraybuffer.ts:64:9 - (i32.load offset=8 - ;;@ ~lib/internal/arraybuffer.ts:64:20 - (i32.add - (get_local $2) - ;;@ ~lib/internal/arraybuffer.ts:64:48 - (i32.shl - ;;@ ~lib/internal/arraybuffer.ts:64:49 - (get_local $1) - ;;@ ~lib/internal/arraybuffer.ts:64:65 - (i32.const 2) - ) - ) - ) - ) - ) - ;;@ ~lib/array.ts:72:8 - (unreachable) ) + ;;@ ~lib/array.ts:71:8 + (block $~lib/internal/arraybuffer/loadUnsafe|inlined.1 (result i32) + ;;@ ~lib/internal/arraybuffer.ts:64:91 + (i32.load offset=8 + ;;@ ~lib/internal/arraybuffer.ts:64:20 + (i32.add + (get_local $2) + ;;@ ~lib/internal/arraybuffer.ts:64:48 + (i32.shl + ;;@ ~lib/internal/arraybuffer.ts:64:49 + (get_local $1) + ;;@ ~lib/internal/arraybuffer.ts:64:65 + (i32.const 2) + ) + ) + ) + ) + ;;@ ~lib/array.ts:72:8 + (unreachable) ) ) (func $assembly/index/Body#offsetMomentum (; 16 ;) (type $iFFFi) (param $0 i32) (param $1 f64) (param $2 f64) (param $3 f64) (result i32) @@ -1269,9 +1234,7 @@ ) ) ;;@ assembly/index.ts:27:11 - (return - (get_local $0) - ) + (get_local $0) ) (func $assembly/index/NBodySystem#constructor (; 17 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (local $2 f64) @@ -1494,26 +1457,24 @@ ) ) ;;@ assembly/index.ts:202:59 - (return + (if (result i32) ;;@ assembly/index.ts:202:9 - (if (result i32) - (i32.lt_u - (get_local $0) - ;;@ assembly/index.ts:202:22 - (call $~lib/array/Array#get:length - ;;@ assembly/index.ts:202:27 - (get_local $1) - ) - ) - ;;@ assembly/index.ts:202:43 - (call $~lib/array/Array#__get + (i32.lt_u + (get_local $0) + ;;@ assembly/index.ts:202:22 + (call $~lib/array/Array#get:length + ;;@ assembly/index.ts:202:27 (get_local $1) - ;;@ assembly/index.ts:202:50 - (get_local $0) ) - ;;@ assembly/index.ts:202:59 - (i32.const 0) ) + ;;@ assembly/index.ts:202:43 + (call $~lib/array/Array#__get + (get_local $1) + ;;@ assembly/index.ts:202:50 + (get_local $0) + ) + ;;@ assembly/index.ts:202:59 + (i32.const 0) ) ) (func $assembly/index/NBodySystem#advance (; 20 ;) (type $iFv) (param $0 i32) (param $1 f64) @@ -1728,12 +1689,9 @@ ;;@ assembly/index.ts:131:23 (block $~lib/math/NativeMath.sqrt|inlined.0 (result f64) ;;@ ~lib/math.ts:1076:30 - (br $~lib/math/NativeMath.sqrt|inlined.0 - ;;@ ~lib/math.ts:1076:11 - (f64.sqrt - ;;@ ~lib/math.ts:1076:29 - (get_local $18) - ) + (f64.sqrt + ;;@ ~lib/math.ts:1076:29 + (get_local $18) ) ) ) @@ -2190,12 +2148,9 @@ ) ) ;;@ ~lib/math.ts:1076:30 - (br $~lib/math/NativeMath.sqrt|inlined.1 - ;;@ ~lib/math.ts:1076:11 - (f64.sqrt - ;;@ ~lib/math.ts:1076:29 - (get_local $18) - ) + (f64.sqrt + ;;@ ~lib/math.ts:1076:29 + (get_local $18) ) ) ) @@ -2242,9 +2197,7 @@ ) ) ;;@ assembly/index.ts:184:11 - (return - (get_local $1) - ) + (get_local $1) ) (func $assembly/index/step (; 22 ;) (type $F) (result f64) ;;@ assembly/index.ts:206:9 @@ -2255,12 +2208,9 @@ (f64.const 0.01) ) ;;@ assembly/index.ts:207:23 - (return - ;;@ assembly/index.ts:207:16 - (call $assembly/index/NBodySystem#energy - ;;@ assembly/index.ts:207:9 - (get_global $assembly/index/system) - ) + (call $assembly/index/NBodySystem#energy + ;;@ assembly/index.ts:207:9 + (get_global $assembly/index/system) ) ) (func $assembly/index/bench (; 23 ;) (type $iv) (param $0 i32) diff --git a/src/ast.ts b/src/ast.ts index 15b63dc7..4f05239c 100644 --- a/src/ast.ts +++ b/src/ast.ts @@ -9,7 +9,7 @@ import { STATIC_DELIMITER, INSTANCE_DELIMITER, LIBRARY_PREFIX -} from "./program"; +} from "./common"; import { Token, @@ -110,6 +110,26 @@ export function nodeIsConstantValue(kind: NodeKind): bool { return false; } +/** Checks if a node might be callable. */ +export function nodeIsCallable(kind: NodeKind): bool { + switch (kind) { + case NodeKind.IDENTIFIER: + case NodeKind.CALL: + case NodeKind.ELEMENTACCESS: + case NodeKind.PROPERTYACCESS: return true; + } + return false; +} + +/** Checks if a node might be callable with generic arguments. */ +export function nodeIsGenericCallable(kind: NodeKind): bool { + switch (kind) { + case NodeKind.IDENTIFIER: + case NodeKind.PROPERTYACCESS: return true; + } + return false; +} + /** Base class of all nodes. */ export abstract class Node { diff --git a/src/common.ts b/src/common.ts new file mode 100644 index 00000000..5b6b1017 --- /dev/null +++ b/src/common.ts @@ -0,0 +1,94 @@ +/** + * Common constants. + * @module common + *//***/ + +/** Indicates traits of a {@link Node} or {@link Element}. */ +export enum CommonFlags { + /** No flags set. */ + NONE = 0, + + // Basic modifiers + + /** Has an `import` modifier. */ + IMPORT = 1 << 0, + /** Has an `export` modifier. */ + EXPORT = 1 << 1, + /** Has a `declare` modifier. */ + DECLARE = 1 << 2, + /** Has a `const` modifier. */ + CONST = 1 << 3, + /** Has a `let` modifier. */ + LET = 1 << 4, + /** Has a `static` modifier. */ + STATIC = 1 << 5, + /** Has a `readonly` modifier. */ + READONLY = 1 << 6, + /** Has an `abstract` modifier. */ + ABSTRACT = 1 << 7, + /** Has a `public` modifier. */ + PUBLIC = 1 << 8, + /** Has a `private` modifier. */ + PRIVATE = 1 << 9, + /** Has a `protected` modifier. */ + PROTECTED = 1 << 10, + /** Has a `get` modifier. */ + GET = 1 << 11, + /** Has a `set` modifier. */ + SET = 1 << 12, + + // Extended modifiers usually derived from basic modifiers + + /** Is ambient, that is either declared or nested in a declared element. */ + AMBIENT = 1 << 13, + /** Is generic. */ + GENERIC = 1 << 14, + /** Is part of a generic context. */ + GENERIC_CONTEXT = 1 << 15, + /** Is an instance member. */ + INSTANCE = 1 << 16, + /** Is a constructor. */ + CONSTRUCTOR = 1 << 17, + /** Is an arrow function. */ + ARROW = 1 << 18, + /** Is a module export. */ + MODULE_EXPORT = 1 << 19, + /** Is a module import. */ + MODULE_IMPORT = 1 << 20, + + // Compilation states + + /** Is a builtin. */ + BUILTIN = 1 << 21, + /** Is compiled. */ + COMPILED = 1 << 22, + /** Has a constant value and is therefore inlined. */ + INLINED = 1 << 23, + /** Is scoped. */ + SCOPED = 1 << 24, + /** Is a trampoline. */ + TRAMPOLINE = 1 << 25, + /** Is a virtual method. */ + VIRTUAL = 1 << 26 +} + +/** Path delimiter inserted between file system levels. */ +export const PATH_DELIMITER = "/"; +/** Substitution used to indicate the parent directory. */ +export const PARENT_SUBST = ".."; +/** Function name prefix used for getters. */ +export const GETTER_PREFIX = "get:"; +/** Function name prefix used for setters. */ +export const SETTER_PREFIX = "set:"; +/** Delimiter used between class names and instance members. */ +export const INSTANCE_DELIMITER = "#"; +/** Delimiter used between class and namespace names and static members. */ +export const STATIC_DELIMITER = "."; +/** Delimiter used between a function and its inner elements. */ +export const INNER_DELIMITER = "~"; +/** Substitution used to indicate a library directory. */ +export const LIBRARY_SUBST = "~lib"; +/** Library directory prefix. */ +export const LIBRARY_PREFIX = LIBRARY_SUBST + PATH_DELIMITER; +/** Prefix used to indicate a filespace element. */ +export const FILESPACE_PREFIX = "file:"; diff --git a/src/compiler.ts b/src/compiler.ts index d60da493..d383294d 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -36,6 +36,16 @@ import { getGetLocalIndex } from "./module"; +import { + CommonFlags, + PATH_DELIMITER, + INNER_DELIMITER, + INSTANCE_DELIMITER, + STATIC_DELIMITER, + GETTER_PREFIX, + SETTER_PREFIX +} from "./common"; + import { Program, ClassPrototype, @@ -54,18 +64,10 @@ import { Property, VariableLikeElement, FlowFlags, - CommonFlags, ConstantValueKind, Flow, OperatorKind, - DecoratorFlags, - - PATH_DELIMITER, - INNER_DELIMITER, - INSTANCE_DELIMITER, - STATIC_DELIMITER, - GETTER_PREFIX, - SETTER_PREFIX + DecoratorFlags } from "./program"; import { @@ -1487,17 +1489,11 @@ export class Compiler extends DiagnosticEmitter { this.currentFunction.flow = blockFlow; var stmts = this.compileStatements(statements); - var lastType: NativeType; var stmt = stmts.length == 0 ? this.module.createNop() : stmts.length == 1 ? stmts[0] - : this.module.createBlock(null, stmts, - // if the last expression is a value, annotate the block's return value - (lastType = getExpressionType(stmts[stmts.length - 1])) == NativeType.None - ? NativeType.None - : lastType - ); + : this.module.createBlock(null, stmts,getExpressionType(stmts[stmts.length - 1])); // Switch back to the parent flow var parentFlow = blockFlow.leaveBranchOrScope(); diff --git a/src/definitions.ts b/src/definitions.ts index 5d633bd6..02091e01 100644 --- a/src/definitions.ts +++ b/src/definitions.ts @@ -3,10 +3,13 @@ * @module definitions *//***/ +import { + CommonFlags +} from "./common"; + import { Program, Element, - CommonFlags, ElementKind, Global, Enum, diff --git a/src/extra/ast.ts b/src/extra/ast.ts index 96b21483..9f004237 100644 --- a/src/extra/ast.ts +++ b/src/extra/ast.ts @@ -92,7 +92,7 @@ import { import { CommonFlags -} from "../program"; +} from "../common"; /** An AST builder. */ export class ASTBuilder { diff --git a/src/index.ts b/src/index.ts index 3678f3ab..d0257019 100644 --- a/src/index.ts +++ b/src/index.ts @@ -34,8 +34,7 @@ import { } from "./parser"; import { - Program, - LIBRARY_PREFIX + Program } from "./program"; /** Parses a source file. If `parser` has been omitted a new one is created. */ @@ -168,4 +167,4 @@ export function buildTSD(program: Program): string { } /** Prefix indicating a library file. */ -export { LIBRARY_PREFIX }; +export { LIBRARY_PREFIX } from "./common"; diff --git a/src/parser.ts b/src/parser.ts index 3c2d4db4..5ab1cd69 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -4,10 +4,13 @@ *//***/ import { - Program, CommonFlags, LIBRARY_PREFIX, PATH_DELIMITER +} from "./common"; + +import { + Program } from "./program"; import { @@ -77,7 +80,9 @@ import { VoidStatement, WhileStatement, - mangleInternalPath + mangleInternalPath, + nodeIsCallable, + nodeIsGenericCallable } from "./ast"; const builtinsFile = LIBRARY_PREFIX + "builtins.ts"; @@ -3113,16 +3118,18 @@ export class Parser extends DiagnosticEmitter { if (!expr) return null; var startPos = expr.range.start; - // CallExpression with type arguments - var typeArguments: CommonTypeNode[] | null; - while ( - // there might be better ways to distinguish a LESSTHAN from a CALL with type arguments - (typeArguments = this.tryParseTypeArgumentsBeforeArguments(tn)) || - tn.skip(Token.OPENPAREN) - ) { - let args = this.parseArguments(tn); - if (!args) return null; - expr = Node.createCallExpression(expr, typeArguments, args, tn.range(startPos, tn.pos)); + // CallExpression? + if (nodeIsCallable(expr.kind)) { + let typeArguments: CommonTypeNode[] | null = null; + while ( + tn.skip(Token.OPENPAREN) + || + nodeIsGenericCallable(expr.kind) && (typeArguments = this.tryParseTypeArgumentsBeforeArguments(tn)) !== null + ) { + let args = this.parseArguments(tn); + if (!args) return null; + expr = Node.createCallExpression(expr, typeArguments, args, tn.range(startPos, tn.pos)); // is again callable + } } var token: Token; diff --git a/src/program.ts b/src/program.ts index 6df8f6cd..ee74b491 100644 --- a/src/program.ts +++ b/src/program.ts @@ -3,6 +3,17 @@ * @module program *//***/ +import { + CommonFlags, + PATH_DELIMITER, + STATIC_DELIMITER, + INSTANCE_DELIMITER, + LIBRARY_PREFIX, + GETTER_PREFIX, + SETTER_PREFIX, + FILESPACE_PREFIX +} from "./common"; + import { Options } from "./compiler"; @@ -18,7 +29,6 @@ import { TypeKind, TypeFlags, Signature, - typesToString } from "./types"; @@ -105,27 +115,6 @@ import { CharCode } from "./util"; -/** Path delimiter inserted between file system levels. */ -export const PATH_DELIMITER = "/"; -/** Substitution used to indicate the parent directory. */ -export const PARENT_SUBST = ".."; -/** Function name prefix used for getters. */ -export const GETTER_PREFIX = "get:"; -/** Function name prefix used for setters. */ -export const SETTER_PREFIX = "set:"; -/** Delimiter used between class names and instance members. */ -export const INSTANCE_DELIMITER = "#"; -/** Delimiter used between class and namespace names and static members. */ -export const STATIC_DELIMITER = "."; -/** Delimiter used between a function and its inner elements. */ -export const INNER_DELIMITER = "~"; -/** Substitution used to indicate a library directory. */ -export const LIBRARY_SUBST = "~lib"; -/** Library directory prefix. */ -export const LIBRARY_PREFIX = LIBRARY_SUBST + PATH_DELIMITER; -/** Prefix used to indicate a filespace element. */ -export const FILESPACE_PREFIX = "file:"; - /** Represents a yet unresolved import. */ class QueuedImport { localName: string; @@ -2415,6 +2404,16 @@ export class Program extends DiagnosticEmitter { ); return null; } + + // resolveExpressionType( + // expression: Expression, + // contextualFunction: Function + // ): Type { + // var element = this.resolveExpression(expression, contextualFunction); + // switch (element.kind) { + + // } + // } } /** Indicates the specific kind of an {@link Element}. */ @@ -2453,75 +2452,6 @@ export enum ElementKind { FILESPACE, } -/** Indicates traits of a {@link Node} or {@link Element}. */ -export enum CommonFlags { - /** No flags set. */ - NONE = 0, - - // Basic modifiers - - /** Has an `import` modifier. */ - IMPORT = 1 << 0, - /** Has an `export` modifier. */ - EXPORT = 1 << 1, - /** Has a `declare` modifier. */ - DECLARE = 1 << 2, - /** Has a `const` modifier. */ - CONST = 1 << 3, - /** Has a `let` modifier. */ - LET = 1 << 4, - /** Has a `static` modifier. */ - STATIC = 1 << 5, - /** Has a `readonly` modifier. */ - READONLY = 1 << 6, - /** Has an `abstract` modifier. */ - ABSTRACT = 1 << 7, - /** Has a `public` modifier. */ - PUBLIC = 1 << 8, - /** Has a `private` modifier. */ - PRIVATE = 1 << 9, - /** Has a `protected` modifier. */ - PROTECTED = 1 << 10, - /** Has a `get` modifier. */ - GET = 1 << 11, - /** Has a `set` modifier. */ - SET = 1 << 12, - - // Extended modifiers usually derived from basic modifiers - - /** Is ambient, that is either declared or nested in a declared element. */ - AMBIENT = 1 << 13, - /** Is generic. */ - GENERIC = 1 << 14, - /** Is part of a generic context. */ - GENERIC_CONTEXT = 1 << 15, - /** Is an instance member. */ - INSTANCE = 1 << 16, - /** Is a constructor. */ - CONSTRUCTOR = 1 << 17, - /** Is an arrow function. */ - ARROW = 1 << 18, - /** Is a module export. */ - MODULE_EXPORT = 1 << 19, - /** Is a module import. */ - MODULE_IMPORT = 1 << 20, - - // Compilation states - - /** Is a builtin. */ - BUILTIN = 1 << 21, - /** Is compiled. */ - COMPILED = 1 << 22, - /** Has a constant value and is therefore inlined. */ - INLINED = 1 << 23, - /** Is scoped. */ - SCOPED = 1 << 24, - /** Is a trampoline. */ - TRAMPOLINE = 1 << 25, - /** Is a virtual method. */ - VIRTUAL = 1 << 26 -} - export enum DecoratorFlags { /** No flags set. */ NONE = 0,