From 25b433dca96b69c2933e554a05953bd567ce60f4 Mon Sep 17 00:00:00 2001 From: dcodeIO Date: Tue, 12 Jun 2018 00:45:19 +0200 Subject: [PATCH] Support 'import * as' directives, see #27 --- dist/assemblyscript.js | 2 +- dist/assemblyscript.js.map | 2 +- src/ast.ts | 8 +- src/compiler.ts | 5 +- src/parser.ts | 36 +++++- src/program.ts | 163 +++++++++++++++++++++------- tests/compiler/import.optimized.wat | 19 ++++ tests/compiler/import.ts | 10 ++ tests/compiler/import.untouched.wat | 19 ++++ 9 files changed, 213 insertions(+), 51 deletions(-) diff --git a/dist/assemblyscript.js b/dist/assemblyscript.js index 3dab72e2..c55df94f 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,{configurable:!1,enumerable:!0,get:n})},r.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},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;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,f=new Map,E=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=f,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"),n=new R(this,K,w,C||l,t),this.instances.set(r,n),this.program.instancesLookup.set(K,n),n},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",O+="<"+n+">"),(i=new P(this,C,O,e,A)).contextualTypeArguments=r,this.instances.set(n,i),this.program.instancesLookup.set(O,i);var S,b,L,k,R,x,B,F,w=0;if(A&&(w=A.currentMemoryOffset,A.members)){i.members||(i.members=new Map);try{for(var M=a(A.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&&(k=M.return)&&k.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){var Q=new U(X,O+t.INSTANCE_DELIMITER+X.simpleName,Y,W,i);switch(Y.byteSize){case 1:break;case 2:1&w&&++w;break;case 4:3&w&&(w=1+(3|w));break;case 8:7&w&&(w=1+(7|w));break;default:assert(!1)}Q.memoryOffset=w,w+=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=O+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,O+t.INSTANCE_DELIMITER+X.simpleName,this),J=j.resolvePartial(e);if(!J)return null;if(J.internalName=O+t.INSTANCE_DELIMITER+J.simpleName,$.getterPrototype=J,Z){var ee=Z.resolvePartial(e);if(!ee)return null;ee.internalName=O+t.INSTANCE_DELIMITER+ee.simpleName,$.setterPrototype=ee}i.members.set(X.simpleName,$);break;default:assert(!1)}}}catch(e){R={error:e}}finally{try{H&&!H.done&&(x=V.return)&&x.call(V)}finally{if(R)throw R.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){B={error:e}}finally{try{re&&!re.done&&(F=te.return)&&F.call(te)}finally{if(B)throw B.error}}return i.currentMemoryOffset=w,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=F;var P=function(e){function t(t,r,n,i,o){void 0===i&&(i=null),void 0===o&&(o=null);var c=e.call(this,t.program,r,n)||this;if(c.kind=m.CLASS,c.contextualTypeArguments=null,c.currentMemoryOffset=0,c.constructorInstance=null,c.overloads=null,c.prototype=t,c.flags=t.flags,c.decoratorFlags=t.decoratorFlags,c.typeArguments=i,c.type=t.program.options.usizeType.asClass(c),c.base=o,o){var p=o.contextualTypeArguments;if(p){c.contextualTypeArguments||(c.contextualTypeArguments=new Map);try{for(var l=a(p),u=l.next();!u.done;u=l.next()){var h=s(u.value,2),d=h[0],_=h[1];c.contextualTypeArguments.set(d,_)}}catch(e){T={error:e}}finally{try{u&&!u.done&&(f=l.return)&&f.call(l)}finally{if(T)throw T.error}}}}var y,g,T,f,E=c.prototype.declaration;if(E){var I=E.typeParameters;if(i){if((g=i.length)!=I.length)throw new Error("type argument count mismatch");if(g)for(c.contextualTypeArguments||(c.contextualTypeArguments=new Map),y=0;y=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 K(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)||K(_,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 K(e,t){var r=e.byteSize,n=t.byteSize;return!e.is(4)||r>n||e.is(1)!=t.is(1)}t.Flow=G},function(e,t,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={}));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 fe=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=fe;var Ee=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=Ee;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 be=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=be;var Le=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:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:return this;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){if(e.is(l.CommonFlags.COMPILED))return!0;e.set(l.CommonFlags.COMPILED);var t=this.module;this.currentEnum=e;var r,n,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&&t.addGlobal(_.internalName,p.NativeType.I32,!1,t.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=t.createI32(0):i.is(l.CommonFlags.INLINED)?m=t.createI32(i.constantValue+1):(m=t.createBinary(p.BinaryOp.AddI32,t.createGetGlobal(i.internalName,p.NativeType.I32),t.createI32(1)),e.is(l.CommonFlags.CONST)&&this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range),h=!0),h?(t.addGlobal(_.internalName,p.NativeType.I32,!0,t.createI32(0)),this.startFunctionBody.push(t.createSetGlobal(_.internalName,m))):(t.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)?t.addGlobalExport(u.internalName,g(u)):y&&this.warning(c.DiagnosticCode.Cannot_export_a_mutable_global,y.range))}}}catch(e){r={error:e}}finally{try{o&&!o.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.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,f=!0;for(h=0;h=0){v=r.flow;m&&v.set(1),g&&v.set(4096),T&&v.set(2),f&&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 f=new l.Local(r,y,-1,m);switch(p.getExpressionType(g)){case p.NativeType.I32:f=f.withConstantIntegerValue(p.getConstValueI32(g),0);break;case p.NativeType.I64:f=f.withConstantIntegerValue(p.getConstValueI64Low(g),p.getConstValueI64High(g));break;case p.NativeType.F32:f=f.withConstantFloatValue(p.getConstValueF32(g));break;case p.NativeType.F64:f=f.withConstantFloatValue(p.getConstValueF64(g));break;default:return assert(!1),this.module.createUnreachable()}var E=n.flow.scopedLocals;if(E){if(E.has(y))return this.error(c.DiagnosticCode.Duplicate_identifier_0,_.name.range,y),this.module.createUnreachable()}else n.flow.scopedLocals=E=new Map;E.set(y,f),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){f=void 0;f=_.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)),f.type.is(36)&&u.setLocalWrapped(f.index,!u.canOverflow(g,m))):f.type.is(36)&&u.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,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(!(f=this.program.elementsLookup.get("Mathf"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),o=h.createUnreachable();break}if(!(E=f.members?f.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.pow"),o=h.createUnreachable();break}assert(E.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f32PowInstance=T=E.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(!(f=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),o=h.createUnreachable();break}if(!(E=f.members?f.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.pow"),o=h.createUnreachable();break}assert(E.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f64PowInstance=T=E.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(!(f=this.program.elementsLookup.get("Mathf"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),o=h.createUnreachable();break}if(!(E=f.members?f.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.mod"),o=h.createUnreachable();break}assert(E.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f32ModInstance=T=E.resolve()}o=T&&this.compileFunction(T)?this.makeCallDirect(T,[r,i]):h.createUnreachable();break;case 12:if(!(T=this.f64ModInstance)){var f,E;if(!(f=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),o=h.createUnreachable();break}if(!(E=f.members?f.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.mod"),o=h.createUnreachable();break}assert(E.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f64ModInstance=T=E.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()}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(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 f=T.resolve();if(!f)return n.createUnreachable();var E=(k=f.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(f,[n.createGetLocal(y,E)])],E)}return n.createBlock(null,[this.makeCallDirect(g,[t]),this.makeCallDirect(f)],E)}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,b=(S=this.currentFunction).getTempLocal(C,!1),L=S.getAndFreeTempLocal(this.currentType,!1),k=A.signature.returnType;return this.currentFunction.freeTempLocal(b),n.createBlock(null,[this.makeCallDirect(N,[n.createTeeLocal(b.index,_),n.createTeeLocal(L.index,O),t]),this.makeCallDirect(A,[n.createGetLocal(b.index,b.type.toNativeType()),n.createGetLocal(L.index,L.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(f,T.toNativeType());case l.ElementKind.GLOBAL:if(!this.compileGlobal(g))return this.module.createUnreachable();var E=g.type;return assert(E!=d.Type.void),g.is(l.CommonFlags.INLINED)?this.compileInlineConstant(g,t,r):(this.currentType=E,this.module.createGetGlobal(g.internalName,E.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:case 7:if(i64_is_i32(s)||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:case 9:if(!this.options.isWasm64){if(i64_is_i32(s)||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))):(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();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)}return this.currentType=m.returnType,this.compileCallDirect(y,[],e)}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,t==d.Type.void?0:1,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(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 f=y.prototype.declaration.parameterIndex;u.push(i.createStore(m.byteSize,i.createGetLocal(p.index,c),f>=0?i.createGetLocal(1+f,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,f=!1,E=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,E=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,f=!0,E=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||f?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 b=0,L=O.length;b"),null):null;case s.Token.IDENTIFIER:return p.Node.createIdentifierExpression(e.readIdentifier(),e.range(r,e.pos));case s.Token.THIS:return p.Node.createThisExpression(e.range(r,e.pos));case s.Token.CONSTRUCTOR:return p.Node.createConstructorExpression(e.range(r,e.pos));case s.Token.SUPER:return p.Node.createSuperExpression(e.range(r,e.pos));case s.Token.STRINGLITERAL:return p.Node.createStringLiteralExpression(e.readString(),e.range(r,e.pos));case s.Token.INTEGERLITERAL:return p.Node.createIntegerLiteralExpression(e.readInteger(),e.range(r,e.pos));case s.Token.FLOATLITERAL:return p.Node.createFloatLiteralExpression(e.readFloat(),e.range(r,e.pos));case s.Token.SLASH:var d=e.readRegexpPattern();return e.skip(s.Token.SLASH)?p.Node.createRegexpLiteralExpression(d,e.readRegexpFlags(),e.range(r,e.pos)):(this.error(o.DiagnosticCode._0_expected,e.range(),"/"),null);case s.Token.FUNCTION:return this.parseFunctionExpression(e);default:return this.error(o.DiagnosticCode.Expression_expected,e.range()),null}},t.prototype.tryParseTypeArgumentsBeforeArguments=function(e){var t=e.mark();if(!e.skip(s.Token.LESSTHAN))return null;var r=new Array;do{if(e.peek()===s.Token.GREATERTHAN)break;var n=this.parseType(e,!0,!0);if(!n)return e.reset(t),null;r.push(n)}while(e.skip(s.Token.COMMA));return e.skip(s.Token.GREATERTHAN)&&e.skip(s.Token.OPENPAREN)?r:(e.reset(t),null)},t.prototype.parseArguments=function(e){for(var t=new Array;!e.skip(s.Token.CLOSEPAREN);){var r=this.parseExpression(e,1);if(!r)return null;if(t.push(r),!e.skip(s.Token.COMMA)){if(e.skip(s.Token.CLOSEPAREN))break;return this.error(o.DiagnosticCode._0_expected,e.range(),")"),null}}return t},t.prototype.parseExpression=function(e,t){void 0===t&&(t=0);var r=this.parseExpressionStart(e);if(!r)return null;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 f=u;if(f.expression.kind!=p.NodeKind.IDENTIFIER)return this.error(o.DiagnosticCode.Identifier_expected,f.expression.range),null;f.expression=p.Node.createPropertyAccessExpression(r,f.expression,e.range(a,e.pos)),r=f}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(){try{for(var e=a(this.program.moduleLevelExports.values()),t=e.next();!t.done;t=e.next()){var r=t.value;this.visitElement(r)}}catch(e){n={error:e}}finally{try{t&&!t.done&&(i=e.return)&&i.call(e)}finally{if(n)throw n.error}}for(var n,i,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(f)},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,f=0;return T+=(f+=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|(f&=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 E;a=T}else{if(this.eq(N))return e.eq(f)||e.eq(I)?N:e.eq(N)?f:(t=this.shr(1).div(e).shl(1)).eq(g)?e.isNegative()?f: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=f),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)),f.createUnreachable()):r&&1==r.length?(y=e.compileExpression(c[0],e.options.usizeType,1,0),(L=2==c.length?u(e,c[1]):0)<0?f.createUnreachable():(e.currentType=r[0],f.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(),L))):(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"),f.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)),f.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"),f.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);E=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)),f.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"),f.createUnreachable();var b;if(!(b=r[0].classReference))return e.error(n.DiagnosticCode.Operation_not_supported,d.range),f.createUnreachable();var L=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),f.createUnreachable();var k=c[0].value,R=b.members?b.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,b.internalName,k),f.createUnreachable();L=R.memoryOffset}else L=b.currentMemoryOffset;return e.options.isWasm64?h.is(4)&&h.size<=32?(e.currentType=a.Type.u32,f.createI32(L)):f.createI64(L):h.is(4)&&64==h.size?(e.currentType=a.Type.u64,f.createI64(L)):f.createI32(L);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)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(c[0],r[0],1,0)}else y=e.compileExpressionRetainType(c[0],a.Type.i32,0);E=e.currentType;switch(m=e.compileExpression(c[1],E,1,0),g=e.makeIsTrueish(e.compileExpressionRetainType(c[2],a.Type.bool,0),e.currentType),e.currentType=E,e.currentType.kind){case 0:case 1:case 5:case 6:case 10:default:T=f.createSelect(y,m,g);break;case 13:e.error(n.DiagnosticCode.Operation_not_supported,d.range),T=f.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),f.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),f.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=f.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),f.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,f.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,f.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],f.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),f.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"),f.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)),f.createUnreachable();if(r){if(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length)return e.error(n.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(c[0],r[0],1,1)}else y=e.compileExpressionRetainType(c[0],a.Type.bool,1);E=e.currentType;if(e.currentType=E.nonNullableType,e.options.noAssert)return h==a.Type.void?(e.currentType=a.Type.void,f.createNop()):y;var x=_(e,2==c.length?c[1]:null,d);if(e.currentType=E.nonNullableType,h==a.Type.void){switch(e.currentType.kind){default:T=f.createIf(f.createUnary(s.UnaryOp.EqzI32,y),x);break;case 3:case 8:T=f.createIf(f.createUnary(s.UnaryOp.EqzI64,y),x);break;case 4:case 9:T=f.createIf(f.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,y),x);break;case 11:T=f.createIf(f.createBinary(s.BinaryOp.EqF32,y,f.createF32(0)),x);break;case 12:T=f.createIf(f.createBinary(s.BinaryOp.EqF64,y,f.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=f.createIf(f.createTeeLocal(v.index,y),f.createGetLocal(v.index,s.NativeType.I32),x);break;case 2:case 7:default:v=e.currentFunction.getAndFreeTempLocal(a.Type.i32,!1);T=f.createIf(f.createTeeLocal(v.index,y),f.createGetLocal(v.index,s.NativeType.I32),x);break;case 3:case 8:v=e.currentFunction.getAndFreeTempLocal(a.Type.i64,!1);T=f.createIf(f.createUnary(s.UnaryOp.EqzI64,f.createTeeLocal(v.index,y)),x,f.createGetLocal(v.index,s.NativeType.I64));break;case 4:case 9:v=e.currentFunction.getAndFreeTempLocal(e.options.usizeType,!1);T=f.createIf(f.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,f.createTeeLocal(v.index,y)),x,f.createGetLocal(v.index,e.options.nativeSizeType));break;case 11:v=e.currentFunction.getAndFreeTempLocal(a.Type.f32,!1);T=f.createIf(f.createBinary(s.BinaryOp.EqF32,f.createTeeLocal(v.index,y),f.createF32(0)),x,f.createGetLocal(v.index,s.NativeType.F32));break;case 12:v=e.currentFunction.getAndFreeTempLocal(a.Type.f64,!1);T=f.createIf(f.createBinary(s.BinaryOp.EqF64,f.createTeeLocal(v.index,y),f.createF64(0)),x,f.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)),f.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)),f.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)),f.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),f.createUnreachable();for(var U=c.length-1,D=new Array(U),F=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,{configurable:!1,enumerable:!0,get:n})},r.r=function(e){Object.defineProperty(e,"__esModule",{value:!0})},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"),n=new x(this,K,w,C||l,t),this.instances.set(r,n),this.program.instancesLookup.set(K,n),n},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",O+="<"+n+">"),(i=new w(this,C,O,e,A)).contextualTypeArguments=r,this.instances.set(n,i),this.program.instancesLookup.set(O,i);var S,L,b,k,R,x,B,U,P=0;if(A&&(P=A.currentMemoryOffset,A.members)){i.members||(i.members=new Map);try{for(var M=a(A.members.values()),G=M.next();!G.done;G=M.next()){var K=G.value;i.members.set(K.simpleName,K)}}catch(e){b={error:e}}finally{try{G&&!G.done&&(k=M.return)&&k.call(M)}finally{if(b)throw b.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){var Q=new F(X,O+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=O+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,O+t.INSTANCE_DELIMITER+X.simpleName,this),J=j.resolvePartial(e);if(!J)return null;if(J.internalName=O+t.INSTANCE_DELIMITER+J.simpleName,$.getterPrototype=J,Z){var ee=Z.resolvePartial(e);if(!ee)return null;ee.internalName=O+t.INSTANCE_DELIMITER+ee.simpleName,$.setterPrototype=ee}i.members.set(X.simpleName,$);break;default:assert(!1)}}}catch(e){R={error:e}}finally{try{H&&!H.done&&(x=V.return)&&x.call(V)}finally{if(R)throw R.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){B={error:e}}finally{try{re&&!re.done&&(U=te.return)&&U.call(te)}finally{if(B)throw B.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){void 0===i&&(i=null),void 0===o&&(o=null);var c=e.call(this,t.program,r,n)||this;if(c.kind=m.CLASS,c.contextualTypeArguments=null,c.currentMemoryOffset=0,c.constructorInstance=null,c.overloads=null,c.prototype=t,c.flags=t.flags,c.decoratorFlags=t.decoratorFlags,c.typeArguments=i,c.type=t.program.options.usizeType.asClass(c),c.base=o,o){var p=o.contextualTypeArguments;if(p){c.contextualTypeArguments||(c.contextualTypeArguments=new Map);try{for(var l=a(p),u=l.next();!u.done;u=l.next()){var h=s(u.value,2),d=h[0],_=h[1];c.contextualTypeArguments.set(d,_)}}catch(e){T={error:e}}finally{try{u&&!u.done&&(E=l.return)&&E.call(l)}finally{if(T)throw T.error}}}}var y,g,T,E,f=c.prototype.declaration;if(f){var I=f.typeParameters;if(i){if((g=i.length)!=I.length)throw new Error("type argument count mismatch");if(g)for(c.contextualTypeArguments||(c.contextualTypeArguments=new Map),y=0;y=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={}));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:case 1:case 2:case 3:case 4:case 5:case 6:case 7:case 8:case 9:return this;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){if(e.is(l.CommonFlags.COMPILED))return!0;e.set(l.CommonFlags.COMPILED);var t=this.module;this.currentEnum=e;var r,n,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&&t.addGlobal(_.internalName,p.NativeType.I32,!1,t.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=t.createI32(0):i.is(l.CommonFlags.INLINED)?m=t.createI32(i.constantValue+1):(m=t.createBinary(p.BinaryOp.AddI32,t.createGetGlobal(i.internalName,p.NativeType.I32),t.createI32(1)),e.is(l.CommonFlags.CONST)&&this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range),h=!0),h?(t.addGlobal(_.internalName,p.NativeType.I32,!0,t.createI32(0)),this.startFunctionBody.push(t.createSetGlobal(_.internalName,m))):(t.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)?t.addGlobalExport(u.internalName,g(u)):y&&this.warning(c.DiagnosticCode.Cannot_export_a_mutable_global,y.range))}}}catch(e){r={error:e}}finally{try{o&&!o.done&&(n=s.return)&&n.call(s)}finally{if(r)throw r.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()}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(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:case 7:if(i64_is_i32(s)||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:case 9:if(!this.options.isWasm64){if(i64_is_i32(s)||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))):(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();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)}return this.currentType=m.returnType,this.compileCallDirect(y,[],e)}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,t==d.Type.void?0:1,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(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(){try{for(var e=a(this.program.moduleLevelExports.values()),t=e.next();!t.done;t=e.next()){var r=t.value;this.visitElement(r)}}catch(e){n={error:e}}finally{try{t&&!t.done&&(i=e.return)&&i.call(e)}finally{if(n)throw n.error}}for(var n,i,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)}])}); //# sourceMappingURL=assemblyscript.js.map \ No newline at end of file diff --git a/dist/assemblyscript.js.map b/dist/assemblyscript.js.map index 6360f65c..bf6252d0 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","configurable","enumerable","get","r","value","n","__esModule","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","OperatorKind","QueuedExport","QueuedImport","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","initialize","options","Type","i8","i16","i32","i64","isizeType","u8","u16","u32","u64","usizeType","bool","f32","f64","void","queuedExports","queuedImports","Array","queuedExtends","queuedImplements","statements","j","statement","kind","NodeKind","CLASSDECLARATION","initializeClass","ENUMDECLARATION","initializeEnum","EXPORT","initializeExports","FUNCTIONDECLARATION","initializeFunction","IMPORT","initializeImports","INTERFACEDECLARATION","initializeInterface","NAMESPACEDECLARATION","initializeNamespace","TYPEDECLARATION","initializeTypeAlias","VARIABLE","initializeVariables","queuedImport","element","tryResolveImport","referencedName","set","internalName","splice","referencedNameAlt","error","DiagnosticCode","Module_0_has_no_exported_member_1","declaration","range","parent","path","externalName","text","queuedExports_1","__values","queuedExports_1_1","next","done","_a","__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","_c","alias","Error","INTERFACE_PROTOTYPE","stringPrototype","resolve","has","Duplicate_identifier_0","programLevelInternalName","type","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","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","localName","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","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","create","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","baseClass","baseClassType","Class_0_is_sealed_and_cannot_be_extended","Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa","Class","currentMemoryOffset","_d","inheritedMember","partialConstructor","constructorInstance","_f","_g","fieldDeclaration","fieldType","fieldInstance","byteSize","instanceProperty","partialGetterPrototype","partialSetterPrototype","_j","_k","_l","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","_b","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","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","NULL","REGEXP","TERNARY","TRUE","FALSE","UnaryExpression","UNARYPOSTFIX","UNARYPREFIX","SourceKind","Statement","Source","tokenizer","sourceKind","ENTRY","LIBRARY","DeclarationStatement","cachedProgramLevelInternalName","cachedFileLevelInternalName","mangleInternalName","isTopLevelExport","needsExplicitExport","VariableLikeDeclarationStatement","BLOCK","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","computeSmallIntegerShift","targetType","signednessIsRelevant","currentClass","targetClass","targetFunction","commonCompatible","signednessIsImportant","kindOnly","toNativeZero","toNativeOne","toNativeNegOne","isize32","isize64","usize32","usize64","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","compileExpression","Type_0_is_not_assignable_to_type_1","nativeType","isConstant","MODULE_IMPORT","initializeInStart","compileInlineConstant","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","ns","compileClassUsingTypeArguments","internalExportName","functionInstance","functionDeclaration","globalDeclaration","compileClass","staticMembers","setter","ctorInstance","_e","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","compileExpressionRetainType","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","t","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","determinePrecedenceStart","The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access","again","PREFIX","regexpPattern","Expression_expected","tryParseTypeArgumentsBeforeArguments","precedence","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","key","_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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AM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,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,M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","file":"assemblyscript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"binaryen\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"binaryen\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"assemblyscript\"] = factory(require(\"binaryen\"));\n\telse\n\t\troot[\"assemblyscript\"] = factory(root[\"binaryen\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE__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, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\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\nimport { CharCode } 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\r\n/** Represents a yet unresolved export. */\r\nclass QueuedExport {\r\n isReExport: bool;\r\n referencedName: string;\r\n member: ExportMember;\r\n}\r\n\r\n/** Represents a yet unresolved import. */\r\nclass QueuedImport {\r\n internalName: string;\r\n referencedName: string;\r\n referencedNameAlt: string;\r\n declaration: ImportDeclaration;\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 /** 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 /** 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\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 return (\r\n this.getSource(normalizedPathWithoutExtension + \".ts\") ||\r\n this.getSource(normalizedPathWithoutExtension + \"/index.ts\") ||\r\n this.getSource(LIBRARY_PREFIX + normalizedPathWithoutExtension + \".ts\") ||\r\n this.getSource(LIBRARY_PREFIX + normalizedPathWithoutExtension + \"/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 queuedExports = new Map();\r\n var queuedImports = new Array();\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 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 element = this.tryResolveImport(queuedImport.referencedName, queuedExports);\r\n if (element) {\r\n this.elementsLookup.set(queuedImport.internalName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n if (element = this.tryResolveImport(queuedImport.referencedNameAlt, queuedExports)) {\r\n this.elementsLookup.set(queuedImport.internalName, 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 queuedImport.declaration.range,\r\n (queuedImport.declaration.parent).path.value,\r\n queuedImport.declaration.externalName.text\r\n );\r\n ++i;\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.referencedName)) {\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.referencedName);\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.referencedName)) ||\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 referencedName: string,\r\n queuedExports: 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(referencedName)) return element;\r\n let queuedExport = queuedExports.get(referencedName);\r\n if (!queuedExport) return null;\r\n if (queuedExport.isReExport) {\r\n referencedName = queuedExport.referencedName;\r\n continue;\r\n }\r\n return this.elementsLookup.get(queuedExport.referencedName);\r\n } while (true);\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 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 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 for (let i = 0, k = members.length; i < k; ++i) {\r\n this.initializeExport(members[i], statement.internalPath, queuedExports);\r\n }\r\n }\r\n\r\n private setExportAndCheckLibrary(\r\n name: string,\r\n element: Element,\r\n identifier: IdentifierExpression\r\n ): void {\r\n this.fileLevelExports.set(name, element);\r\n if (identifier.range.source.isLibrary) { // add global alias\r\n if (this.elementsLookup.has(identifier.text)) {\r\n this.error(\r\n DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0,\r\n identifier.range, identifier.text\r\n );\r\n } else {\r\n element.internalName = identifier.text;\r\n this.elementsLookup.set(identifier.text, 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.referencedName = referencedName; // -> internal 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.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 referencedName = queuedExport.referencedName;\r\n if (seen.has(queuedExport)) break;\r\n seen.add(queuedExport);\r\n } else {\r\n referencedElement = this.elementsLookup.get(queuedExport.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 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.referencedName = referencedName; // -> export 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 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 this.error( // TODO\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n }\r\n }\r\n\r\n private initializeImport(\r\n declaration: ImportDeclaration,\r\n internalPath: string,\r\n queuedExports: Map,\r\n queuedImports: QueuedImport[]\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 referencedName = 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(referencedName)) {\r\n this.elementsLookup.set(internalName, 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.internalName = internalName;\r\n if (internalPath.endsWith(indexPart)) {\r\n queuedImport.referencedName = referencedName; // try exact first\r\n queuedImport.referencedNameAlt = (\r\n internalPath.substring(0, internalPath.length - indexPart.length + 1) +\r\n declaration.externalName.text\r\n );\r\n } else {\r\n queuedImport.referencedName = referencedName; // try exact first\r\n queuedImport.referencedNameAlt = (\r\n internalPath +\r\n indexPart +\r\n PATH_DELIMITER +\r\n declaration.externalName.text\r\n );\r\n }\r\n queuedImport.declaration = declaration;\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 prototype = new InterfacePrototype(\r\n this,\r\n declaration.name.text,\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 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 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 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 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; // static ENUMVALUE, static GLOBAL, static FUNCTION_PROTOTYPE...\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}\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 namespace. */\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) {\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 }\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[93m\";\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/** 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[],\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; 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\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\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. */\r\n members: ExportMember[];\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;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\r\n} catch (e) {\r\n\t// This works if the window reference is available\r\n\tif (typeof window === \"object\") g = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n","/**\r\n * 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.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 int type of this type. Defaults to `Type.i32` if this is not an int type. */\r\n get intType(): Type {\r\n switch (this.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.I64:\r\n case TypeKind.ISIZE:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.U64:\r\n case TypeKind.USIZE: return this;\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} 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.compileExpression( // reports\r\n declaration.initializer,\r\n Type.void,\r\n ConversionKind.NONE,\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 exports = this.program.fileLevelExports;\r\n var members = statement.members;\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 = exports.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, NativeType.None);\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 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 // 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.compileExpression( // reports\r\n declaration.initializer,\r\n Type.void,\r\n ConversionKind.NONE,\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 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 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 && initializer.kind == NodeKind.LITERAL)) {\r\n // TODO: other kinds might be constant as well\r\n // NOTE: if the initializer is missing this is reported in ensureTrampoline below\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 case TypeKind.U32: {\r\n if (i64_is_i32(intValue) || 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) || 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.USIZE: {\r\n if (!this.options.isWasm64) {\r\n if (i64_is_i32(intValue) || 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 {\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 = classPrototype.resolveUsingTypeArguments( // reports\r\n expression.typeArguments,\r\n currentFunction.flow.contextualTypeArguments,\r\n expression\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 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);\r\n } else {\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], propertyAccess);\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 contextualType == Type.void\r\n ? ConversionKind.NONE\r\n : ConversionKind.IMPLICIT,\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 }\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 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 let path: StringLiteralExpression | null = null;\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 {\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 p = determinePrecedenceStart(token);\r\n if (p != 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, p);\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): i32 {\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): i32 {\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/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","configurable","enumerable","get","r","value","n","__esModule","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","QueuedExport","QueuedImport","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","queuedExports","queuedImports","Array","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","referencedName","splice","referencedNameAlt","error","DiagnosticCode","Module_0_has_no_exported_member_1","range","parent","path","externalName","text","queuedExports_1","__values","queuedExports_1_1","next","done","_a","__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","_c","alias","Error","INTERFACE_PROTOTYPE","stringPrototype","resolve","has","Duplicate_identifier_0","programLevelInternalName","type","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","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","localName","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","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","create","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","baseClass","baseClassType","Class_0_is_sealed_and_cannot_be_extended","Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa","Class","currentMemoryOffset","_d","inheritedMember","partialConstructor","constructorInstance","_f","_g","fieldDeclaration","fieldType","fieldInstance","byteSize","instanceProperty","partialGetterPrototype","partialSetterPrototype","_j","_k","_l","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","_b","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","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","NULL","REGEXP","TERNARY","TRUE","FALSE","UnaryExpression","UNARYPOSTFIX","UNARYPREFIX","SourceKind","Statement","Source","tokenizer","sourceKind","ENTRY","LIBRARY","DeclarationStatement","cachedProgramLevelInternalName","cachedFileLevelInternalName","mangleInternalName","isTopLevelExport","needsExplicitExport","VariableLikeDeclarationStatement","BLOCK","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","computeSmallIntegerShift","targetType","signednessIsRelevant","currentClass","targetClass","targetFunction","commonCompatible","signednessIsImportant","kindOnly","toNativeZero","toNativeOne","toNativeNegOne","isize32","isize64","usize32","usize64","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","compileExpression","Type_0_is_not_assignable_to_type_1","nativeType","isConstant","MODULE_IMPORT","initializeInStart","compileInlineConstant","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","ns","compileClassUsingTypeArguments","internalExportName","functionInstance","functionDeclaration","globalDeclaration","compileClass","staticMembers","setter","ctorInstance","_e","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","compileExpressionRetainType","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","t","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","key","_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,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,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,EAA4BzwD,EAAWrI,GACrC,GAAIqI,EAAOrI,EAAI,GAAI,OAAO,EAM1B,IAJA,IAEIi5D,EAFAhjE,EAAK,EACLC,EAAK8J,EAAI9hB,OAGN+X,EAAK,EAAIC,GAAI,CAGlB,GAFA+iE,EAAMhjE,GAAMC,EAAKD,GAAM,EAEnB+J,EADJi5D,GAAOA,EAAM,IACG5wD,GAAQA,GAAQrI,EAAIi5D,EAAM,GACxC,OAAO,EAEL5wD,EAAOrI,EAAIi5D,GACb/iE,EAAK+iE,EAELhjE,EAAKgjE,EAAM,EAGf,OAAO,kFCjWT,IAAAr8E,EAAA3B,EAAA,GAIA6B,EAAA7B,EAAA,GASA4B,EAAA5B,EAAA,GAMA8B,EAAA9B,EAAA,GAcAuvC,EAAAvvC,EAAA,GAUA,SAAA48D,EACEqhB,EACA18E,EACAsV,EACA2lB,EACAk5B,EACAt4C,GAEA,IAEIkQ,EACAC,EACAC,EACAkZ,EALAlnC,EAASy+E,EAASz+E,OAWtB,OAAQ+B,EAAUuH,cAIhB,IAAK,YACH,IAAI2E,EAAOywE,EAAqBD,EAAUpnE,EAAe2lB,EAAUpf,GAEnE,OADA6gE,EAAS/xB,YAActqD,EAAA2F,KAAKW,KACvBuF,EACEA,EAAKiB,GAAE,KAAwBjB,EAAKiB,GAAE,KACzClP,EAAO87B,UAAU,GACjB97B,EAAO87B,UAAU,GAHH97B,EAAOyhC,oBAK3B,IAAK,UACCxzB,EAAOywE,EAAqBD,EAAUpnE,EAAe2lB,EAAUpf,GAEnE,OADA6gE,EAAS/xB,YAActqD,EAAA2F,KAAKW,KACvBuF,EACEA,EAAKiB,GAAE,GACVlP,EAAO87B,UAAU,GACjB97B,EAAO87B,UAAU,GAHH97B,EAAOyhC,oBAK3B,IAAK,WACCxzB,EAAOywE,EAAqBD,EAAUpnE,EAAe2lB,EAAUpf,GAEnE,OADA6gE,EAAS/xB,YAActqD,EAAA2F,KAAKW,KACvBuF,EACEA,EAAKiB,GAAE,GACVlP,EAAO87B,UAAU,GACjB97B,EAAO87B,UAAU,GAHH97B,EAAOyhC,oBAK3B,IAAK,cACCxzB,EAAOywE,EAAqBD,EAAUpnE,EAAe2lB,EAAUpf,GAEnE,OADA6gE,EAAS/xB,YAActqD,EAAA2F,KAAKW,KACvBuF,GACLwwE,EAAS/xB,YAActqD,EAAA2F,KAAKW,KACrBuF,EAAKiB,GAAE,KACVlP,EAAO87B,UAAU,GACjB97B,EAAO87B,UAAU,IAJH97B,EAAOyhC,oBAM3B,IAAK,WACCxzB,EAAOywE,EAAqBD,EAAUpnE,EAAe2lB,EAAUpf,GAEnE,GADA6gE,EAAS/xB,YAActqD,EAAA2F,KAAKW,MACvBuF,EAAM,OAAOjO,EAAOyhC,oBAEzB,GADI5nB,EAAY5L,EAAK+K,eACN,CACb,IAAI/R,EAAiBw3E,EAASzjE,QAAQ/T,eACtC,GAAIA,GAAkB4S,EAAU4J,eAAexc,GAAiB,OAAOjH,EAAO87B,UAAU,GAE1F,OAAO97B,EAAO87B,UAAU,GAE1B,IAAK,UACC7tB,EAAOywE,EAAqBD,EAAUpnE,EAAe2lB,EAAUpf,GAEnE,OADA6gE,EAAS/xB,YAActqD,EAAA2F,KAAKW,KACvBuF,EAEe,OADhB4L,EAAY5L,EAAK+K,iBAC6D,MAAtDa,EAAUR,eAAe02B,EAAA9sC,aAAaa,aAC9D9D,EAAO87B,UAAU,GACjB97B,EAAO87B,UAAU,GAJH97B,EAAOyhC,oBAS3B,IAAK,MACH,GAAuB,GAAnBzE,EAASv5B,OAcX,OAbI4T,IACEA,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IACnC,GAAxBA,EAAc5T,QAChBg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,MAI3D6vE,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAE3C5O,EAAOyhC,oBAEhB,GAAIpqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc5T,OAMhB,OALI4T,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IAC/DonE,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,KAEhD5O,EAAOyhC,oBAEhB3T,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI3lB,EAAc,GAAE,UAE/DyW,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI56B,EAAA2F,KAAKG,IAAG,KAEzD,OAAQu2E,EAAS/xB,YAAY/iD,MAC3B,OACA,OACA,OACA,OACEu9B,EAAMlnC,EAAO08B,YAAYp6B,EAAAqoB,QAAQG,OAAQgD,GACzC,MAEF,QACA,OACA,OACEoZ,EAAMlnC,EAAO08B,YAAYp6B,EAAAqoB,QAAQG,OAAQgD,GACzC,MAEF,OACE,GAAI2wD,EAAS/xB,YAAYx9C,GAAE,KAAuB,CAChDuvE,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBACb,MAIJ,OACEyF,EAAMlnC,EAAO08B,YACX+hD,EAAS32E,QAAQgmD,SACbxrD,EAAAqoB,QAAQmlD,OACRxtE,EAAAqoB,QAAQG,OACZgD,GAEF,MAEF,OACA,OACEoZ,EAAMlnC,EAAO08B,YAAYp6B,EAAAqoB,QAAQmlD,OAAQhiD,GACzC,MAEF,QACE2wD,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBAIjB,OAAOyF,EAET,IAAK,MACH,GAAuB,GAAnBlK,EAASv5B,OAcX,OAbI4T,IACEA,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IACnC,GAAxBA,EAAc5T,QAChBg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,MAI3D6vE,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAE3C5O,EAAOyhC,oBAEhB,GAAIpqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc5T,OAMhB,OALI4T,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IAC/DonE,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,KAEhD5O,EAAOyhC,oBAEhB3T,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI3lB,EAAc,GAAE,UAE/DyW,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI56B,EAAA2F,KAAKG,IAAG,KAEzD,OAAQu2E,EAAS/xB,YAAY/iD,MAC3B,OACA,OACA,OACA,OACEu9B,EAAMlnC,EAAO08B,YAAYp6B,EAAAqoB,QAAQI,OAAQ+C,GACzC,MAEF,QACA,OACA,OACEoZ,EAAMlnC,EAAO08B,YAAYp6B,EAAAqoB,QAAQI,OAAQ+C,GACzC,MAEF,OACE,GAAI2wD,EAAS/xB,YAAYx9C,GAAE,KAAuB,CAChDuvE,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBACb,MAIJ,OACEyF,EAAMlnC,EAAO08B,YACX+hD,EAAS32E,QAAQgmD,SACbxrD,EAAAqoB,QAAQolD,OACRztE,EAAAqoB,QAAQI,OACZ+C,GAEF,MAEF,OACA,OACEoZ,EAAMlnC,EAAO08B,YAAYp6B,EAAAqoB,QAAQolD,OAAQjiD,GACzC,MAEF,QACE2wD,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBAIjB,OAAOyF,EAET,IAAK,SACH,GAAuB,GAAnBlK,EAASv5B,OAcX,OAbI4T,IACEA,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IACnC,GAAxBA,EAAc5T,QAChBg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,MAI3D6vE,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAE3C5O,EAAOyhC,oBAEhB,GAAIpqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc5T,OAMhB,OALI4T,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IAC/DonE,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,KAEhD5O,EAAOyhC,oBAEhB3T,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI3lB,EAAc,GAAE,UAE/DyW,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI56B,EAAA2F,KAAKG,IAAG,KAEzD,OAAQu2E,EAAS/xB,YAAY/iD,MAC3B,OACA,OACA,OACA,OACEu9B,EAAMlnC,EAAO08B,YAAYp6B,EAAAqoB,QAAQK,UAAW8C,GAC5C,MAEF,QACA,OACA,OACEoZ,EAAMlnC,EAAO08B,YAAYp6B,EAAAqoB,QAAQK,UAAW8C,GAC5C,MAEF,OACE,GAAI2wD,EAAS/xB,YAAYx9C,GAAE,KAAuB,CAChDuvE,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBACb,MAIJ,OACEyF,EAAMlnC,EAAO08B,YACX+hD,EAAS32E,QAAQgmD,SACbxrD,EAAAqoB,QAAQqlD,UACR1tE,EAAAqoB,QAAQK,UACZ8C,GAEF,MAEF,OACA,OACEoZ,EAAMlnC,EAAO08B,YAAYp6B,EAAAqoB,QAAQqlD,UAAWliD,GAC5C,MAEF,QACE2wD,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBAIjB,OAAOyF,EAET,IAAK,OACH,GAAuB,GAAnBlK,EAASv5B,OAcX,OAbI4T,IACEA,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IACnC,GAAxBA,EAAc5T,QAChBg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,MAI3D6vE,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAE3C5O,EAAOyhC,oBAEhB,GAAIpqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc5T,OAMhB,OALI4T,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IAC/DonE,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,KAEhD5O,EAAOyhC,oBAEhB3T,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI3lB,EAAc,GAAE,UAE/DyW,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI56B,EAAA2F,KAAKG,IAAG,KAGzD,OADA6lB,EAAO0wD,EAASnvB,kBAAkBtyB,EAAS,GAAIyhD,EAAS/xB,YAAW,KAC3D+xB,EAAS/xB,YAAY/iD,MAC3B,OACA,OACA,OACA,OACA,QACEu9B,EAAMu3C,EAASlnB,uBACbv3D,EAAO68B,aAAav6B,EAAAmlB,SAASkpD,QAAS7iD,EAAMC,GAC5C0wD,EAAS/xB,aAIb,OACA,OACExlB,EAAMlnC,EAAO68B,aAAav6B,EAAAmlB,SAASkpD,QAAS7iD,EAAMC,GAClD,MAEF,OACE,GAAI0wD,EAAS/xB,YAAYx9C,GAAE,KAAuB,CAChDuvE,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBACb,MAIJ,OACEyF,EAAMlnC,EAAO68B,aACX4hD,EAAS32E,QAAQgmD,SACbxrD,EAAAmlB,SAASopD,QACTvuE,EAAAmlB,SAASkpD,QACb7iD,EACAC,GAEF,MAEF,OACA,OACEmZ,EAAMlnC,EAAO68B,aAAav6B,EAAAmlB,SAASopD,QAAS/iD,EAAMC,GAClD,MAEF,QACE0wD,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBAIjB,OAAOyF,EAET,IAAK,OACH,GAAuB,GAAnBlK,EAASv5B,OAcX,OAbI4T,IACEA,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IACnC,GAAxBA,EAAc5T,QAChBg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,MAI3D6vE,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAE3C5O,EAAOyhC,oBAEhB,GAAIpqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc5T,OAMhB,OALI4T,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IAC/DonE,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,KAEhD5O,EAAOyhC,oBAEhB3T,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI3lB,EAAc,GAAE,UAE/DyW,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI56B,EAAA2F,KAAKG,IAAG,KAGzD,OADA6lB,EAAO0wD,EAASnvB,kBAAkBtyB,EAAS,GAAIyhD,EAAS/xB,YAAW,KAC3D+xB,EAAS/xB,YAAY/iD,MAC3B,OACA,OACA,OACA,OACA,QACEu9B,EAAMu3C,EAASlnB,uBACbv3D,EAAO68B,aAAav6B,EAAAmlB,SAASmpD,QAAS9iD,EAAMC,GAC5C0wD,EAAS/xB,aAEX,MAEF,OACA,OACExlB,EAAMlnC,EAAO68B,aAAav6B,EAAAmlB,SAASmpD,QAAS9iD,EAAMC,GAClD,MAEF,OACE,GAAI0wD,EAAS/xB,YAAYx9C,GAAE,KAAuB,CAChDuvE,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBACb,MAIJ,OACEyF,EAAMlnC,EAAO68B,aACX4hD,EAAS32E,QAAQgmD,SACbxrD,EAAAmlB,SAASqpD,QACTxuE,EAAAmlB,SAASmpD,QACb9iD,EACAC,GAEF,MAEF,OACA,OACEmZ,EAAMlnC,EAAO68B,aAAav6B,EAAAmlB,SAASqpD,QAAShjD,EAAMC,GAClD,MAEF,QACE0wD,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBAIjB,OAAOyF,EAET,IAAK,MACH,GAAuB,GAAnBlK,EAASv5B,OAcX,OAbI4T,IACEA,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IACnC,GAAxBA,EAAc5T,QAChBg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,MAI3D6vE,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAE3C5O,EAAOyhC,oBAEhB,GAAIpqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc5T,OAMhB,OALI4T,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IAC/DonE,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,KAEhD5O,EAAOyhC,oBAEhB3T,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI3lB,EAAc,GAAE,UAE/DyW,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI56B,EAAA2F,KAAKa,IAAG,KAEzD,OAAQ61E,EAAS/xB,YAAY/iD,MAC3B,OACA,OACA,OAEE,IAAImrD,EAAY2pB,EAASv6D,gBAAgBzD,oBAAoBre,EAAA2F,KAAKG,KAAK,GACvEg/B,EAAMlnC,EAAO0gC,aACX1gC,EAAOq9B,eAAey3B,EAAU34C,MAAO2R,GACvC9tB,EAAO68B,aAAav6B,EAAAmlB,SAASkyC,OAC3B35D,EAAO87B,UAAU,GACjB97B,EAAOm9B,eAAe23B,EAAU34C,MAAO7Z,EAAA2d,WAAWC,MAEpDlgB,EAAO68B,aAAav6B,EAAAmlB,SAASqB,MAC3B9oB,EAAOm9B,eAAe23B,EAAU34C,MAAO7Z,EAAA2d,WAAWC,KAClDlgB,EAAO87B,UAAU,KAGrB,MAEF,OACMg5B,EAAY2pB,EAASv6D,gBAAgBzD,oBAAoBg+D,EAAS32E,QAAQW,WAAW,GACzFy+B,EAAMlnC,EAAO0gC,aACX1gC,EAAOq9B,eAAey3B,EAAU34C,MAAO2R,GACvC9tB,EAAO68B,aACL4hD,EAAS32E,QAAQgmD,SACbxrD,EAAAmlB,SAASmyC,OACTt3D,EAAAmlB,SAASkyC,OACb8kB,EAAS32E,QAAQW,UAAUuhD,aAAahqD,GACxCA,EAAOm9B,eAAe23B,EAAU34C,MAAOsiE,EAAS32E,QAAQ+oD,iBAE1D7wD,EAAO68B,aACL4hD,EAAS32E,QAAQgmD,SACbxrD,EAAAmlB,SAASuB,MACT1mB,EAAAmlB,SAASqB,MACb9oB,EAAOm9B,eAAe23B,EAAU34C,MAAOsiE,EAAS32E,QAAQ+oD,gBACxD4tB,EAAS32E,QAAQW,UAAUuhD,aAAahqD,KAG5C,MAEF,OACM80D,EAAY2pB,EAASv6D,gBAAgBzD,oBAAoBre,EAAA2F,KAAKI,KAAK,GACvE++B,EAAMlnC,EAAO0gC,aACX1gC,EAAOq9B,eAAey3B,EAAU34C,MAAO2R,GACvC9tB,EAAO68B,aAAav6B,EAAAmlB,SAASmyC,OAC3B55D,EAAOk8B,UAAU,EAAG,GACpBl8B,EAAOm9B,eAAe23B,EAAU34C,MAAO7Z,EAAA2d,WAAWE,MAEpDngB,EAAO68B,aAAav6B,EAAAmlB,SAASuB,MAC3BhpB,EAAOm9B,eAAe23B,EAAU34C,MAAO7Z,EAAA2d,WAAWE,KAClDngB,EAAOk8B,UAAU,EAAG,KAGxB,MAEF,OACE,GAAIuiD,EAAS/xB,YAAYx9C,GAAE,KAAuB,CAChDuvE,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBACb,MAIJ,OACA,OACA,OACA,OACA,QACEyF,EAAMpZ,EACN,MAEF,QACEoZ,EAAMlnC,EAAO08B,YAAYp6B,EAAAqoB,QAAQ6kD,OAAQ1hD,GACzC,MAEF,QACEoZ,EAAMlnC,EAAO08B,YAAYp6B,EAAAqoB,QAAQslD,OAAQniD,GACzC,MAEF,QACEoZ,EAAMlnC,EAAOyhC,oBACb,MAEF,QACEg9C,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBAIjB,OAAOyF,EAET,IAAK,MACH,GAAuB,GAAnBlK,EAASv5B,OAcX,OAbI4T,IACEA,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IACnC,GAAxBA,EAAc5T,QAChBg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,MAI3D6vE,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAE3C5O,EAAOyhC,oBAEhB,GAAIpqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc5T,OAMhB,OALI4T,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IAC/DonE,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,KAEhD5O,EAAOyhC,oBAEhB3T,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI3lB,EAAc,GAAE,UAE/DyW,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI56B,EAAA2F,KAAKa,IAAG,KAGzD,OADAmlB,EAAO0wD,EAASnvB,kBAAkBtyB,EAAS,GAAIyhD,EAAS/xB,YAAW,KAC3D+xB,EAAS/xB,YAAY/iD,MAC3B,OACA,OACA,OACE,IAAI0O,EAAOomE,EAASv6D,gBAAgB7L,KAChCsmE,EAAaF,EAASv6D,gBAAgBrE,aACxC4+D,EAAS/xB,aACRr0C,EAAKsO,YAAYmH,EAAM2wD,EAAS/xB,cAE/BkyB,EAAaH,EAASv6D,gBAAgBzD,oBACxCg+D,EAAS/xB,aACRr0C,EAAKsO,YAAYoH,EAAM0wD,EAAS/xB,cAEnC+xB,EAASv6D,gBAAgB1D,cAAcm+D,GACvCz3C,EAAMlnC,EAAO0gC,aACX1gC,EAAOq9B,eAAeshD,EAAWxiE,MAAO2R,GACxC9tB,EAAOq9B,eAAeuhD,EAAWziE,MAAO4R,GACxC/tB,EAAO68B,aAAav6B,EAAAmlB,SAASqB,MAC3B9oB,EAAOm9B,eAAewhD,EAAWxiE,MAAO7Z,EAAA2d,WAAWC,KACnDlgB,EAAOm9B,eAAeyhD,EAAWziE,MAAO7Z,EAAA2d,WAAWC,OAGvD,MAEF,OACA,OACA,OACA,QACM7H,EAAOomE,EAASv6D,gBAAgB7L,KAChCsmE,EAAaF,EAASv6D,gBAAgBrE,aACxC4+D,EAAS/xB,aACRr0C,EAAKsO,YAAYmH,EAAM2wD,EAAS/xB,cAE/BkyB,EAAaH,EAASv6D,gBAAgBzD,oBACxCg+D,EAAS/xB,aACRr0C,EAAKsO,YAAYoH,EAAM0wD,EAAS/xB,cAEnC+xB,EAASv6D,gBAAgB1D,cAAcm+D,GACvCz3C,EAAMlnC,EAAO0gC,aACX1gC,EAAOq9B,eAAeshD,EAAWxiE,MAAO2R,GACxC9tB,EAAOq9B,eAAeuhD,EAAWziE,MAAO4R,GACxC/tB,EAAO68B,aAAav6B,EAAAmlB,SAASsB,MAC3B/oB,EAAOm9B,eAAewhD,EAAWxiE,MAAO7Z,EAAA2d,WAAWC,KACnDlgB,EAAOm9B,eAAeyhD,EAAWziE,MAAO7Z,EAAA2d,WAAWC,OAGvD,MAEF,OACMy+D,EAAaF,EAASv6D,gBAAgBrE,aAAazd,EAAA2F,KAAKI,KAAK,GAC7Dy2E,EAAaH,EAASv6D,gBAAgBzD,oBAAoBre,EAAA2F,KAAKI,KAAK,GACxEs2E,EAASv6D,gBAAgB1D,cAAcm+D,GACvCz3C,EAAMlnC,EAAO0gC,aACX1gC,EAAOq9B,eAAeshD,EAAWxiE,MAAO2R,GACxC9tB,EAAOq9B,eAAeuhD,EAAWziE,MAAO4R,GACxC/tB,EAAO68B,aAAav6B,EAAAmlB,SAASuB,MAC3BhpB,EAAOm9B,eAAewhD,EAAWxiE,MAAO7Z,EAAA2d,WAAWE,KACnDngB,EAAOm9B,eAAeyhD,EAAWziE,MAAO7Z,EAAA2d,WAAWE,OAGvD,MAEF,OACMw+D,EAAaF,EAASv6D,gBAAgBrE,aAAazd,EAAA2F,KAAKI,KAAK,GAC7Dy2E,EAAaH,EAASv6D,gBAAgBzD,oBAAoBre,EAAA2F,KAAKI,KAAK,GACxEs2E,EAASv6D,gBAAgB1D,cAAcm+D,GACvCz3C,EAAMlnC,EAAO0gC,aACX1gC,EAAOq9B,eAAeshD,EAAWxiE,MAAO2R,GACxC9tB,EAAOq9B,eAAeuhD,EAAWziE,MAAO4R,GACxC/tB,EAAO68B,aAAav6B,EAAAmlB,SAASwB,MAC3BjpB,EAAOm9B,eAAewhD,EAAWxiE,MAAO7Z,EAAA2d,WAAWE,KACnDngB,EAAOm9B,eAAeyhD,EAAWziE,MAAO7Z,EAAA2d,WAAWE,OAGvD,MAEF,OACMw+D,EAAaF,EAASv6D,gBAAgBrE,aAAa4+D,EAAS32E,QAAQW,WAAW,GAC/Em2E,EAAaH,EAASv6D,gBAAgBzD,oBAAoBg+D,EAAS32E,QAAQW,WAAW,GAC1Fg2E,EAASv6D,gBAAgB1D,cAAcm+D,GACvCz3C,EAAMlnC,EAAO0gC,aACX1gC,EAAOq9B,eAAeshD,EAAWxiE,MAAO2R,GACxC9tB,EAAOq9B,eAAeuhD,EAAWziE,MAAO4R,GACxC/tB,EAAO68B,aACL4hD,EAAS32E,QAAQgmD,SACbxrD,EAAAmlB,SAASuB,MACT1mB,EAAAmlB,SAASqB,MACb9oB,EAAOm9B,eAAewhD,EAAWxiE,MAAOsiE,EAAS32E,QAAQ+oD,gBACzD7wD,EAAOm9B,eAAeyhD,EAAWziE,MAAOsiE,EAAS32E,QAAQ+oD,kBAG7D,MAEF,OACE,GAAI4tB,EAAS/xB,YAAYx9C,GAAE,KAAuB,CAChDuvE,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBACb,MAEEk9C,EAAaF,EAASv6D,gBAAgBrE,aAAa4+D,EAAS32E,QAAQW,WAAW,GAC/Em2E,EAAaH,EAASv6D,gBAAgBzD,oBAAoBg+D,EAAS32E,QAAQW,WAAW,GAC1Fg2E,EAASv6D,gBAAgB1D,cAAcm+D,GACvCz3C,EAAMlnC,EAAO0gC,aACX1gC,EAAOq9B,eAAeshD,EAAWxiE,MAAO2R,GACxC9tB,EAAOq9B,eAAeuhD,EAAWziE,MAAO4R,GACxC/tB,EAAO68B,aACL4hD,EAAS32E,QAAQgmD,SACbxrD,EAAAmlB,SAASwB,MACT3mB,EAAAmlB,SAASsB,MACb/oB,EAAOm9B,eAAewhD,EAAWxiE,MAAOsiE,EAAS32E,QAAQ+oD,gBACzD7wD,EAAOm9B,eAAeyhD,EAAWziE,MAAOsiE,EAAS32E,QAAQ+oD,kBAG7D,MAEF,QACE3pB,EAAMlnC,EAAO68B,aAAav6B,EAAAmlB,SAASwpD,OAAQnjD,EAAMC,GACjD,MAEF,QACEmZ,EAAMlnC,EAAO68B,aAAav6B,EAAAmlB,SAAS2pD,OAAQtjD,EAAMC,GACjD,MAEF,QACE0wD,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBAIjB,OAAOyF,EAET,IAAK,MACH,GAAuB,GAAnBlK,EAASv5B,OAcX,OAbI4T,IACEA,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IACnC,GAAxBA,EAAc5T,QAChBg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,MAI3D6vE,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAE3C5O,EAAOyhC,oBAEhB,GAAIpqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc5T,OAMhB,OALI4T,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IAC/DonE,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,KAEhD5O,EAAOyhC,oBAEhB3T,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI3lB,EAAc,GAAE,UAE/DyW,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI56B,EAAA2F,KAAKa,IAAG,KAGzD,OADAmlB,EAAO0wD,EAASnvB,kBAAkBtyB,EAAS,GAAIyhD,EAAS/xB,YAAW,KAC3D+xB,EAAS/xB,YAAY/iD,MAC3B,OACA,OACA,OACM0O,EAAOomE,EAASv6D,gBAAgB7L,KAChCsmE,EAAaF,EAASv6D,gBAAgBrE,aACxC4+D,EAAS/xB,aACRr0C,EAAKsO,YAAYmH,EAAM2wD,EAAS/xB,cAE/BkyB,EAAaH,EAASv6D,gBAAgBzD,oBACxCg+D,EAAS/xB,aACRr0C,EAAKsO,YAAYoH,EAAM0wD,EAAS/xB,cAEnC+xB,EAASv6D,gBAAgB1D,cAAcm+D,GACvCz3C,EAAMlnC,EAAO0gC,aACX1gC,EAAOq9B,eAAeshD,EAAWxiE,MAAO2R,GACxC9tB,EAAOq9B,eAAeuhD,EAAWziE,MAAO4R,GACxC/tB,EAAO68B,aAAav6B,EAAAmlB,SAASS,MAC3BloB,EAAOm9B,eAAewhD,EAAWxiE,MAAO7Z,EAAA2d,WAAWC,KACnDlgB,EAAOm9B,eAAeyhD,EAAWziE,MAAO7Z,EAAA2d,WAAWC,OAGvD,MAEF,OACA,OACA,OACA,QACM7H,EAAOomE,EAASv6D,gBAAgB7L,KAChCsmE,EAAaF,EAASv6D,gBAAgBrE,aACxC4+D,EAAS/xB,aACRr0C,EAAKsO,YAAYmH,EAAM2wD,EAAS/xB,cAE/BkyB,EAAaH,EAASv6D,gBAAgBzD,oBACxCg+D,EAAS/xB,aACRr0C,EAAKsO,YAAYoH,EAAM0wD,EAAS/xB,cAEnC+xB,EAASv6D,gBAAgB1D,cAAcm+D,GACvCz3C,EAAMlnC,EAAO0gC,aACX1gC,EAAOq9B,eAAeshD,EAAWxiE,MAAO2R,GACxC9tB,EAAOq9B,eAAeuhD,EAAWziE,MAAO4R,GACxC/tB,EAAO68B,aAAav6B,EAAAmlB,SAASU,MAC3BnoB,EAAOm9B,eAAewhD,EAAWxiE,MAAO7Z,EAAA2d,WAAWC,KACnDlgB,EAAOm9B,eAAeyhD,EAAWziE,MAAO7Z,EAAA2d,WAAWC,OAGvD,MAEF,OACMy+D,EAAaF,EAASv6D,gBAAgBrE,aAAazd,EAAA2F,KAAKI,KAAK,GAC7Dy2E,EAAaH,EAASv6D,gBAAgBzD,oBAAoBre,EAAA2F,KAAKI,KAAK,GACxEs2E,EAASv6D,gBAAgB1D,cAAcm+D,GACvCz3C,EAAMlnC,EAAO0gC,aACX1gC,EAAOq9B,eAAeshD,EAAWxiE,MAAO2R,GACxC9tB,EAAOq9B,eAAeuhD,EAAWziE,MAAO4R,GACxC/tB,EAAO68B,aAAav6B,EAAAmlB,SAASW,MAC3BpoB,EAAOm9B,eAAewhD,EAAWxiE,MAAO7Z,EAAA2d,WAAWE,KACnDngB,EAAOm9B,eAAeyhD,EAAWziE,MAAO7Z,EAAA2d,WAAWE,OAGvD,MAEF,OACMw+D,EAAaF,EAASv6D,gBAAgBrE,aAAazd,EAAA2F,KAAKI,KAAK,GAC7Dy2E,EAAaH,EAASv6D,gBAAgBzD,oBAAoBre,EAAA2F,KAAKI,KAAK,GACxEs2E,EAASv6D,gBAAgB1D,cAAcm+D,GACvCz3C,EAAMlnC,EAAO0gC,aACX1gC,EAAOq9B,eAAeshD,EAAWxiE,MAAO2R,GACxC9tB,EAAOq9B,eAAeuhD,EAAWziE,MAAO4R,GACxC/tB,EAAO68B,aAAav6B,EAAAmlB,SAASY,MAC3BroB,EAAOm9B,eAAewhD,EAAWxiE,MAAO7Z,EAAA2d,WAAWE,KACnDngB,EAAOm9B,eAAeyhD,EAAWziE,MAAO7Z,EAAA2d,WAAWE,OAGvD,MAEF,OACMw+D,EAAaF,EAASv6D,gBAAgBrE,aAAa4+D,EAAS32E,QAAQW,WAAW,GAC/Em2E,EAAaH,EAASv6D,gBAAgBzD,oBAAoBg+D,EAAS32E,QAAQW,WAAW,GAC1Fg2E,EAASv6D,gBAAgB1D,cAAcm+D,GACvCz3C,EAAMlnC,EAAO0gC,aACX1gC,EAAOq9B,eAAeshD,EAAWxiE,MAAO2R,GACxC9tB,EAAOq9B,eAAeuhD,EAAWziE,MAAO4R,GACxC/tB,EAAO68B,aACL4hD,EAAS32E,QAAQgmD,SACbxrD,EAAAmlB,SAASW,MACT9lB,EAAAmlB,SAASS,MACbloB,EAAOm9B,eAAewhD,EAAWxiE,MAAOsiE,EAAS32E,QAAQ+oD,gBACzD7wD,EAAOm9B,eAAeyhD,EAAWziE,MAAOsiE,EAAS32E,QAAQ+oD,kBAG7D,MAEF,OACE,GAAI4tB,EAAS/xB,YAAYx9C,GAAE,KAAuB,CAChDuvE,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBACb,MAEEk9C,EAAaF,EAASv6D,gBAAgBrE,aAAa4+D,EAAS32E,QAAQW,WAAW,GAC/Em2E,EAAaH,EAASv6D,gBAAgBzD,oBAAoBg+D,EAAS32E,QAAQW,WAAW,GAC1Fg2E,EAASv6D,gBAAgB1D,cAAcm+D,GACvCz3C,EAAMlnC,EAAO0gC,aACX1gC,EAAOq9B,eAAeshD,EAAWxiE,MAAO2R,GACxC9tB,EAAOq9B,eAAeuhD,EAAWziE,MAAO4R,GACxC/tB,EAAO68B,aACL4hD,EAAS32E,QAAQgmD,SACbxrD,EAAAmlB,SAASY,MACT/lB,EAAAmlB,SAASU,MACbnoB,EAAOm9B,eAAewhD,EAAWxiE,MAAOsiE,EAAS32E,QAAQ+oD,gBACzD7wD,EAAOm9B,eAAeyhD,EAAWziE,MAAOsiE,EAAS32E,QAAQ+oD,kBAG7D,MAEF,QACE3pB,EAAMlnC,EAAO68B,aAAav6B,EAAAmlB,SAASupD,OAAQljD,EAAMC,GACjD,MAEF,QACEmZ,EAAMlnC,EAAO68B,aAAav6B,EAAAmlB,SAAS0pD,OAAQrjD,EAAMC,GACjD,MAEF,QACE0wD,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBAIjB,OAAOyF,EAET,IAAK,OACH,GAAuB,GAAnBlK,EAASv5B,OAcX,OAbI4T,IACEA,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IACnC,GAAxBA,EAAc5T,QAChBg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,MAI3D6vE,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAE3C5O,EAAOyhC,oBAEhB,GAAIpqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc5T,OAMhB,OALI4T,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IAC/DonE,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,KAEhD5O,EAAOyhC,oBAEhB3T,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI3lB,EAAc,GAAE,UAE/DyW,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI56B,EAAA2F,KAAKa,IAAG,KAEzD,OAAQ61E,EAAS/xB,YAAY/iD,MAC3B,OACE,GAAI80E,EAAS/xB,YAAYx9C,GAAE,KAAuB,CAChDuvE,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBACb,MAIJ,QACEyF,EAAMpZ,EACN,MAEF,QACEoZ,EAAMlnC,EAAO08B,YAAYp6B,EAAAqoB,QAAQ8kD,QAAS3hD,GAC1C,MAEF,QACEoZ,EAAMlnC,EAAO08B,YAAYp6B,EAAAqoB,QAAQulD,QAASpiD,GAC1C,MAEF,QACE2wD,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBAIjB,OAAOyF,EAET,IAAK,QACH,GAAuB,GAAnBlK,EAASv5B,OAcX,OAbI4T,IACEA,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IACnC,GAAxBA,EAAc5T,QAChBg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,MAI3D6vE,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAE3C5O,EAAOyhC,oBAEhB,GAAIpqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc5T,OAMhB,OALI4T,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IAC/DonE,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,KAEhD5O,EAAOyhC,oBAEhB3T,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI3lB,EAAc,GAAE,UAE/DyW,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI56B,EAAA2F,KAAKa,IAAG,KAEzD,OAAQ61E,EAAS/xB,YAAY/iD,MAC3B,OACE,GAAI80E,EAAS/xB,YAAYx9C,GAAE,KAAuB,CAChDuvE,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBACb,MAIJ,QACEyF,EAAMpZ,EACN,MAEF,QACEoZ,EAAMlnC,EAAO08B,YAAYp6B,EAAAqoB,QAAQ+kD,SAAU5hD,GAC3C,MAEF,QACEoZ,EAAMlnC,EAAO08B,YAAYp6B,EAAAqoB,QAAQwlD,SAAUriD,GAC3C,MAEF,QACE2wD,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBAIjB,OAAOyF,EAET,IAAK,WACH,GAAuB,GAAnBlK,EAASv5B,OAcX,OAbI4T,IACEA,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IACnC,GAAxBA,EAAc5T,QAChBg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,MAI3D6vE,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAE3C5O,EAAOyhC,oBAEhB,GAAIpqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc5T,OAMhB,OALI4T,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IAC/DonE,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,KAEhD5O,EAAOyhC,oBAEhB3T,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI3lB,EAAc,GAAE,UAE/DyW,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI56B,EAAA2F,KAAKa,IAAG,KAGzD,OADAmlB,EAAO0wD,EAASnvB,kBAAkBtyB,EAAS,GAAIyhD,EAAS/xB,YAAW,KAC3D+xB,EAAS/xB,YAAY/iD,MAC3B,QACEu9B,EAAMlnC,EAAO68B,aAAav6B,EAAAmlB,SAASspD,YAAajjD,EAAMC,GACtD,MAEF,QACEmZ,EAAMlnC,EAAO68B,aAAav6B,EAAAmlB,SAASypD,YAAapjD,EAAMC,GACtD,MAEF,QACE0wD,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBAIjB,OAAOyF,EAET,IAAK,UACH,GAAuB,GAAnBlK,EAASv5B,OAcX,OAbI4T,IACEA,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IACnC,GAAxBA,EAAc5T,QAChBg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,MAI3D6vE,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAE3C5O,EAAOyhC,oBAEhB,GAAIpqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc5T,OAMhB,OALI4T,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IAC/DonE,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,KAEhD5O,EAAOyhC,oBAEhB3T,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI3lB,EAAc,GAAE,UAE/DyW,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI56B,EAAA2F,KAAKa,IAAG,KAEzD,OAAQ61E,EAAS/xB,YAAY/iD,MAC3B,OACE,GAAI80E,EAAS/xB,YAAYx9C,GAAE,KAAuB,CAChDuvE,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBACb,MAIJ,QACEyF,EAAMpZ,EACN,MAEF,QACEoZ,EAAMlnC,EAAO08B,YAAYp6B,EAAAqoB,QAAQilD,WAAY9hD,GAC7C,MAEF,QACEoZ,EAAMlnC,EAAO08B,YAAYp6B,EAAAqoB,QAAQ0lD,WAAYviD,GAC7C,MAEF,QACE2wD,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBAIjB,OAAOyF,EAET,IAAK,cACH,GAAuB,GAAnBlK,EAASv5B,OAYX,OAXM4T,GAAyC,GAAxBA,EAAc5T,SAC/B4T,GAAiBA,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IAChFonE,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAgBA,EAAc5T,OAAOmL,SAAS,IAAM,MAG/E6vE,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAE3C5O,EAAOyhC,oBAEhB,IAAMpqB,GAAyC,GAAxBA,EAAc5T,OAMnC,OALI4T,GAAiBA,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IAChFonE,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAgBA,EAAc5T,OAAOmL,SAAS,IAAM,KAEtE5O,EAAOyhC,oBAEhB,OAAQpqB,EAAc,GAAG1N,MACvB,OACA,OACEmkB,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI56B,EAAA2F,KAAKY,IAAG,KACvDu+B,EAAMlnC,EAAO08B,YAAYp6B,EAAAqoB,QAAQ4lD,eAAgBziD,GACjD,MAEF,OACA,OACEA,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI56B,EAAA2F,KAAKa,IAAG,KACvDs+B,EAAMlnC,EAAO08B,YAAYp6B,EAAAqoB,QAAQ6lD,eAAgB1iD,GACjD,MAEF,OACE,GAAIzW,EAAc,GAAGnI,GAAE,KAMrB,OALAuvE,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEbgzE,EAAS/xB,YAAcr1C,EAAc,GAC9BrX,EAAOyhC,oBAIlB,OACE3T,EAAO2wD,EAASnvB,kBACdtyB,EAAS,GACTyhD,EAAS32E,QAAQgmD,SACb1rD,EAAA2F,KAAKa,IACLxG,EAAA2F,KAAKY,IAAG,KAIdu+B,EAAMlnC,EAAO08B,YACX+hD,EAAS32E,QAAQgmD,SACbxrD,EAAAqoB,QAAQ6lD,eACRluE,EAAAqoB,QAAQ4lD,eACZziD,GAEF,MAEF,QACEA,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI56B,EAAA2F,KAAKG,IAAG,KACvDg/B,EAAMlnC,EAAO08B,YAAYp6B,EAAAqoB,QAAQ8lD,eAAgB3iD,GACjD,MAEF,QACEA,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI56B,EAAA2F,KAAKI,IAAG,KACvD++B,EAAMlnC,EAAO08B,YAAYp6B,EAAAqoB,QAAQ+lD,eAAgB5iD,GACjD,MAEF,QACE2wD,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBAKjB,OADAg9C,EAAS/xB,YAAcr1C,EAAc,GAC9B6vB,EAET,IAAK,OACH,GAAuB,GAAnBlK,EAASv5B,OAcX,OAbI4T,IACEA,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IACnC,GAAxBA,EAAc5T,QAChBg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,MAI3D6vE,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAE3C5O,EAAOyhC,oBAEhB,GAAIpqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc5T,OAMhB,OALI4T,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IAC/DonE,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,KAEhD5O,EAAOyhC,oBAEhB3T,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI3lB,EAAc,GAAE,UAE/DyW,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI56B,EAAA2F,KAAKa,IAAG,KAEzD,OAAQ61E,EAAS/xB,YAAY/iD,MAC3B,QACEu9B,EAAMlnC,EAAO08B,YAAYp6B,EAAAqoB,QAAQklD,QAAS/hD,GAC1C,MAEF,QACEoZ,EAAMlnC,EAAO08B,YAAYp6B,EAAAqoB,QAAQ2lD,QAASxiD,GAC1C,MAGF,QACE2wD,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBAIjB,OAAOyF,EAET,IAAK,QACH,GAAuB,GAAnBlK,EAASv5B,OAcX,OAbI4T,IACEA,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IACnC,GAAxBA,EAAc5T,QAChBg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,MAI3D6vE,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAE3C5O,EAAOyhC,oBAEhB,GAAIpqB,GAAiBA,EAAc5T,OAAQ,CAEzC,GADAg7E,EAAS/xB,YAAcr1C,EAAc,GACT,GAAxBA,EAAc5T,OAMhB,OALI4T,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IAC/DonE,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,KAEhD5O,EAAOyhC,oBAEhB3T,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI3lB,EAAc,GAAE,UAE/DyW,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI56B,EAAA2F,KAAKa,IAAG,KAEzD,OAAQ61E,EAAS/xB,YAAY/iD,MAC3B,OACE,GAAI80E,EAAS/xB,YAAYx9C,GAAE,KAAuB,CAChDuvE,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBACb,MAIJ,QACEyF,EAAMpZ,EACN,MAGF,QACEoZ,EAAMlnC,EAAO08B,YAAYp6B,EAAAqoB,QAAQglD,SAAU7hD,GAC3C,MAEF,QACEoZ,EAAMlnC,EAAO08B,YAAYp6B,EAAAqoB,QAAQylD,SAAUtiD,GAC3C,MAEF,QACE2wD,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBAIjB,OAAOyF,EAKT,IAAK,OACH,OAAIlK,EAASv5B,OAAS,GAAKu5B,EAASv5B,OAAS,GACrC4T,GAAyC,GAAxBA,EAAc5T,QACnCg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAgBA,EAAc5T,OAAOmL,SAAS,IAAM,KAG3EouB,EAASv5B,OAAS,EACpBg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeiyD,wCACf5/C,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAGlD6vE,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAG7C5O,EAAOyhC,qBAEVpqB,GAAyC,GAAxBA,EAAc5T,QAQrCqqB,EAAO2wD,EAASnvB,kBACdtyB,EAAS,GACTyhD,EAAS32E,QAAQW,UAAS,MAIxB2xB,EAA4B,GAAnB4C,EAASv5B,OAAco7E,EAAuBJ,EAAUzhD,EAAS,IAAM,GACvE,EACJh9B,EAAOyhC,qBAEhBg9C,EAAS/xB,YAAcr1C,EAAc,GAC9BrX,EAAOy9B,WACZpmB,EAAc,GAAGuL,SACjBvL,EAAc,GAAGnI,GAAG,GACpB4e,EACAzW,EAAc,GAAGnI,GAAE,IACnBgnD,EAAehnD,GAAE,IACjBgnD,EAAe/rC,KAAO9S,EAAc,GAAG8S,MAClCs0D,EAAS/xB,YAAcwJ,GAAgBl2C,gBACvCy+D,EAAS/xB,YAAcr1C,EAAc,IAAI2I,eAC9Coa,MA3BI/iB,GAAiBA,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IAChFonE,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAgBA,EAAc5T,OAAOmL,SAAS,IAAM,KAEtE5O,EAAOyhC,qBAyBlB,IAAK,QAEH,GADAg9C,EAAS/xB,YAActqD,EAAA2F,KAAKc,KACxBm0B,EAASv5B,OAAS,GAAKu5B,EAASv5B,OAAS,EAkB3C,OAjBM4T,GAAyC,GAAxBA,EAAc5T,QACnCg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAgBA,EAAc5T,OAAOmL,SAAS,IAAM,KAG3EouB,EAASv5B,OAAS,EACpBg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeiyD,wCACf5/C,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAGlD6vE,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAG7C5O,EAAOyhC,oBAEhB,IAAMpqB,GAAyC,GAAxBA,EAAc5T,OAKnC,OAJAg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAgBA,EAAc5T,OAAOmL,SAAS,IAAM,KAEtE5O,EAAOyhC,oBAEhB3T,EAAO2wD,EAASnvB,kBACdtyB,EAAS,GACTyhD,EAAS32E,QAAQW,UAAS,KAI5BslB,EAAO0wD,EAASnvB,kBACdtyB,EAAS,GACT3lB,EAAc,GACdA,EAAc,GAAGnI,GAAE,GAChB,EACA,EAAwB,GAGzBjB,OAAI,EAoBR,OAlBEoJ,EAAc,GAAGnI,GAAE,MAEhBuvE,EAAS/xB,YAAYx9C,GAAE,IACxBuvE,EAAS/xB,YAAYviC,KAAO9S,EAAc,GAAG8S,OAG/C4D,EAAO0wD,EAASnnB,kBACdvpC,EACA0wD,EAAS/xB,YAAar1C,EAAc,GAAE,IAGtC2lB,EAAS,IAEX/uB,EAAOoJ,EAAc,IAErBpJ,EAAOwwE,EAAS/xB,aAEdtyB,EAA4B,GAAnB4C,EAASv5B,OAAco7E,EAAuBJ,EAAUzhD,EAAS,IAAM,GACvE,EACJh9B,EAAOyhC,qBAEhBg9C,EAAS/xB,YAActqD,EAAA2F,KAAKc,KACrB7I,EAAO89B,YAAYzmB,EAAc,GAAGuL,SAAUkL,EAAMC,EAAM9f,EAAK+R,eAAgBoa,IAExF,IAAK,SAEH,GADAqkD,EAAS/xB,YAAc+xB,EAAS32E,QAAQW,UACjB,GAAnBu0B,EAASv5B,OAWX,OAVM4T,GAAyC,GAAxBA,EAAc5T,QACnCg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAgBA,EAAc5T,OAAOmL,SAAS,IAAM,KAG/E6vE,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAE3C5O,EAAOyhC,oBAEVpqB,GAAyC,GAAxBA,EAAc5T,QACnCg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAgBA,EAAc5T,OAAOmL,SAAS,IAAM,KAG/E,IAAIgU,EAAoBvL,EAAe,GAAGuL,SAkB1C,OAjBI67D,EAAS32E,QAAQgmD,SAEfoI,EAAehnD,GAAE,IAAuBgnD,EAAe/rC,MAAQ,IACjEs0D,EAAS/xB,YAActqD,EAAA2F,KAAKQ,IAC5B2+B,EAAMlnC,EAAO87B,UAAUlZ,IAEvBskB,EAAMlnC,EAAOk8B,UAAUtZ,EAAU,GAI/BszC,EAAehnD,GAAE,IAA8C,IAAvBgnD,EAAe/rC,MACzDs0D,EAAS/xB,YAActqD,EAAA2F,KAAKS,IAC5B0+B,EAAMlnC,EAAOk8B,UAAUtZ,EAAU,IAEjCskB,EAAMlnC,EAAO87B,UAAUlZ,GAGpBskB,EAET,IAAK,UAEH,GADAu3C,EAAS/xB,YAAc+xB,EAAS32E,QAAQW,UACjB,GAAnBu0B,EAASv5B,OAWX,OAVM4T,GAAyC,GAAxBA,EAAc5T,QACnCg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAgBA,EAAc5T,OAAOmL,SAAS,IAAM,KAG/E6vE,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAE3C5O,EAAOyhC,oBAEhB,IAAMpqB,GAAyC,GAAxBA,EAAc5T,OAKnC,OAJAg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAgBA,EAAc5T,OAAOmL,SAAS,IAAM,KAEtE5O,EAAOyhC,oBAEhB,IACIq9C,OAAS,EACb,OAFIl8D,EAAoBvL,EAAe,GAAGuL,UAGxC,KAAK,EAAKk8D,EAAY,EAAG,MACzB,KAAK,EAAKA,EAAY,EAAG,MACzB,KAAK,EAAKA,EAAY,EAAG,MACzB,KAAK,EAAKA,EAAY,EAAG,MACzB,QAA0B,OAAft7E,QAAO,GAAexD,EAAOyhC,oBAmB1C,OAjBIg9C,EAAS32E,QAAQgmD,SAEfoI,EAAehnD,GAAE,IAAuBgnD,EAAe/rC,MAAQ,IACjEs0D,EAAS/xB,YAActqD,EAAA2F,KAAKQ,IAC5B2+B,EAAMlnC,EAAO87B,UAAUgjD,IAEvB53C,EAAMlnC,EAAOk8B,UAAU4iD,EAAW,GAIhC5oB,EAAehnD,GAAE,IAA8C,IAAvBgnD,EAAe/rC,MACzDs0D,EAAS/xB,YAActqD,EAAA2F,KAAKS,IAC5B0+B,EAAMlnC,EAAOk8B,UAAU4iD,EAAW,IAElC53C,EAAMlnC,EAAO87B,UAAUgjD,GAGpB53C,EAET,IAAK,WAEH,GADAu3C,EAAS/xB,YAAc+xB,EAAS32E,QAAQW,UACpCu0B,EAASv5B,OAAS,EAWpB,OAVM4T,GAAyC,GAAxBA,EAAc5T,QACnCg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAgBA,EAAc5T,OAAOmL,SAAS,IAAM,KAG/E6vE,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAE3C5O,EAAOyhC,oBAEhB,IAAMpqB,GAAyC,GAAxBA,EAAc5T,OAKnC,OAJAg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAgBA,EAAc5T,OAAOmL,SAAS,IAAM,KAEtE5O,EAAOyhC,oBAEhB,IAAI5nB,EACJ,KADIA,EAAYxC,EAAc,GAAG2B,gBAM/B,OAJAylE,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAENzL,EAAOyhC,oBAEhB,IAAIrH,OAAM,EACV,GAAI4C,EAASv5B,OAAQ,CACnB,GACEu5B,EAAS,GAAGrzB,MAAQtH,EAAAuH,SAASsI,SACT8qB,EAAS,GAAI7qB,aAAe9P,EAAA+P,YAAYC,OAM5D,OAJAosE,EAASnzE,MACPnJ,EAAAoJ,eAAeoH,wBACfqqB,EAAS,GAAGvxB,OAEPzL,EAAOyhC,oBAEhB,IAAIs9C,EAAsC/hD,EAAS,GAAIt7B,MACnDmiE,EAAQhqD,EAAU1J,QAAU0J,EAAU1J,QAAQ3O,IAAIu9E,GAAa,KACnE,IAAMlb,GAASA,EAAMl6D,MAAQomC,EAAAhqC,YAAYgT,MAKvC,OAJA0lE,EAASnzE,MACPnJ,EAAAoJ,eAAeyzE,yBACfhiD,EAAS,GAAGvxB,MAAOoO,EAAUvQ,aAAcy1E,GAEtC/+E,EAAOyhC,oBAEhBrH,EAAiBypC,EAAOniD,kBAExB0Y,EAASvgB,EAAUqI,oBAErB,OAAIu8D,EAAS32E,QAAQgmD,SAEfoI,EAAehnD,GAAE,IAAuBgnD,EAAe/rC,MAAQ,IACjEs0D,EAAS/xB,YAActqD,EAAA2F,KAAKQ,IACrBvI,EAAO87B,UAAU1B,IAEjBp6B,EAAOk8B,UAAU9B,GAItB87B,EAAehnD,GAAE,IAA8C,IAAvBgnD,EAAe/rC,MACzDs0D,EAAS/xB,YAActqD,EAAA2F,KAAKS,IACrBxI,EAAOk8B,UAAU9B,IAEjBp6B,EAAO87B,UAAU1B,GAO9B,IAAK,SACH,GAAuB,GAAnB4C,EAASv5B,OAcX,OAbI4T,IACEA,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IACnC,GAAxBA,EAAc5T,QAChBg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,MAI3D6vE,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAE3C5O,EAAOyhC,oBAEhB,GAAIpqB,EAAe,CACjB,GAA4B,GAAxBA,EAAc5T,OAMhB,OALI4T,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IAC/DonE,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,KAEhD5O,EAAOyhC,oBAEhB3T,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI3lB,EAAc,GAAE,UAE/DyW,EAAO2wD,EAASzqB,4BAA4Bh3B,EAAS,GAAI56B,EAAA2F,KAAKG,IAAG,GAE/D+F,EAAOwwE,EAAS/xB,YAOpB,OANA3+B,EAAO0wD,EAASnvB,kBAAkBtyB,EAAS,GAAI/uB,EAAI,KACnD+f,EAAOywD,EAAS5qB,cACd4qB,EAASzqB,4BAA4Bh3B,EAAS,GAAI56B,EAAA2F,KAAKW,KAAI,GAC3D+1E,EAAS/xB,aAEX+xB,EAAS/xB,YAAcz+C,EACfwwE,EAAS/xB,YAAY/iD,MAC3B,OACA,OACA,OACA,OACA,QAIA,QACEu9B,EAAMlnC,EAAO0gC,aAAa5S,EAAMC,EAAMC,GACtC,MAEF,QACEywD,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAMlnC,EAAOyhC,oBAIjB,OAAOyF,EAET,IAAK,cAaH,OAZuB,GAAnBlK,EAASv5B,QACXg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAGhDyI,GACFonE,EAASnzE,MACPnJ,EAAAoJ,eAAemxD,sBACf9+C,EAAWnS,MAAO1J,EAAUuH,cAGzBtJ,EAAOyhC,oBAKhB,IAAK,iBAcH,OAbAg9C,EAAS/xB,YAActqD,EAAA2F,KAAKG,IACL,GAAnB80B,EAASv5B,QACXg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAGhDyI,GACFonE,EAASnzE,MACPnJ,EAAAoJ,eAAemxD,sBACf9+C,EAAWnS,MAAO1J,EAAUuH,cAGzBtJ,EAAO+8B,WAAWz6B,EAAAg3B,OAAOk4C,eAElC,IAAK,cAiBH,OAhBAiN,EAAS/xB,YAActqD,EAAA2F,KAAKG,IACL,GAAnB80B,EAASv5B,QACXg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAElDkf,EAAO9tB,EAAOyhC,qBAEd3T,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI56B,EAAA2F,KAAKG,IAAG,KAErDmP,GACFonE,EAASnzE,MACPnJ,EAAAoJ,eAAemxD,sBACf9+C,EAAWnS,MAAO1J,EAAUuH,cAGzBtJ,EAAO+8B,WAAWz6B,EAAAg3B,OAAOm4C,WAAY,MAAQ3jD,IAGtD,IAAK,cAOH,GANIzW,GACFonE,EAASnzE,MACPnJ,EAAAoJ,eAAemxD,sBACf9+C,EAAWnS,MAAO1J,EAAUuH,cAGT,GAAnB0zB,EAASv5B,OAMX,OALAg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAElD6vE,EAAS/xB,YAActqD,EAAA2F,KAAKc,KACrB7I,EAAOyhC,oBAqBhB,MAnBA3T,EAAO2wD,EAASnvB,kBACdtyB,EAAS,GACTyhD,EAAS32E,QAAQW,UAAS,KAI5BslB,EAAO0wD,EAASnvB,kBACdtyB,EAAS,GACTyhD,EAAS32E,QAAQW,UAAS,KAI5BulB,EAAOywD,EAASnvB,kBACdtyB,EAAS,GACTyhD,EAAS32E,QAAQW,UAAS,KAI5Bg2E,EAAS/xB,YAActqD,EAAA2F,KAAKc,KACtB,IAAI6E,MAAM,mBAGlB,IAAK,aAOH,GANI2J,GACFonE,EAASnzE,MACPnJ,EAAAoJ,eAAemxD,sBACf9+C,EAAWnS,MAAO1J,EAAUuH,cAGT,GAAnB0zB,EAASv5B,OAMX,OALAg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAElD6vE,EAAS/xB,YAActqD,EAAA2F,KAAKc,KACrB7I,EAAOyhC,oBAqBhB,MAnBA3T,EAAO2wD,EAASnvB,kBACdtyB,EAAS,GACTyhD,EAAS32E,QAAQW,UAAS,KAI5BslB,EAAO0wD,EAASnvB,kBACdtyB,EAAS,GACT56B,EAAA2F,KAAKQ,IAAG,KAIVylB,EAAOywD,EAASnvB,kBACdtyB,EAAS,GACTyhD,EAAS32E,QAAQW,UAAS,KAI5Bg2E,EAAS/xB,YAActqD,EAAA2F,KAAKc,KACtB,IAAI6E,MAAM,mBAMlB,IAAK,aACH,OAAM2J,GAAyC,GAAxBA,EAAc5T,OAQd,GAAnBu5B,EAASv5B,QACXg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAElD6vE,EAAS/xB,YAAcr1C,EAAc,GAC9BrX,EAAOyhC,sBAEhB3T,EAAO2wD,EAASzqB,4BACdh3B,EAAS,GACT3lB,EAAc,GAAE,GAGlBonE,EAAS/xB,YAAcr1C,EAAc,GACjConE,EAAS/xB,YAAYviC,MAAQ9S,EAAc,GAAG8S,MAChDs0D,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAENzL,EAAOyhC,qBAIT3T,IA9BDzW,GAAiBA,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IAChFonE,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAgBA,EAAc5T,OAAOmL,SAAS,IAAM,KAEtE5O,EAAOyhC,qBA2BlB,IAAK,SACH,GAAIzE,EAASv5B,OAAS,GAAKu5B,EAASv5B,OAAS,EAqB3C,OApBI4T,IACEA,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,GAAGiyC,iBACtC,GAAxBjyC,EAAc5T,QAChBg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,MAIvDouB,EAASv5B,OAAS,EACpBg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeiyD,wCACf5/C,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAEzCouB,EAASv5B,OAAS,GAC3Bg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAG7C5O,EAAOyhC,oBAEhB,GAAIpqB,EAAe,CAEjB,GADIA,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,GAAGiyC,iBACtC,GAAxBjyC,EAAc5T,OAKhB,OAJAg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,KAEhD5O,EAAOyhC,oBAEhB3T,EAAO2wD,EAASnvB,kBAAkBtyB,EAAS,GAAI3lB,EAAc,GAAE,UAE/DyW,EAAO2wD,EAASzqB,4BAA4Bh3B,EAAS,GAAI56B,EAAA2F,KAAKW,KAAI,GAGhEuF,EAAOwwE,EAAS/xB,YAIpB,GAHA+xB,EAAS/xB,YAAcz+C,EAAKq7C,gBAGxBm1B,EAAS32E,QAAQ8jD,SACnB,OAAIsK,GAAkB9zD,EAAA2F,KAAKc,MACzB41E,EAAS/xB,YAActqD,EAAA2F,KAAKc,KACrB7I,EAAOsgC,aAETxS,EAGT,IAAImxD,EAAQtpB,EAAa8oB,EAA6B,GAAnBzhD,EAASv5B,OAAcu5B,EAAS,GAAK,KAAMpf,GAI9E,GAFA6gE,EAAS/xB,YAAcz+C,EAAKq7C,gBAExB4M,GAAkB9zD,EAAA2F,KAAKc,KAAM,CAC/B,OAAQ41E,EAAS/xB,YAAY/iD,MAC3B,QACEu9B,EAAMlnC,EAAOkgC,SACXlgC,EAAO08B,YAAYp6B,EAAAqoB,QAAQC,OACzBkD,GAEFmxD,GAEF,MAEF,OACA,OACE/3C,EAAMlnC,EAAOkgC,SACXlgC,EAAO08B,YAAYp6B,EAAAqoB,QAAQE,OACzBiD,GAEFmxD,GAEF,MAEF,OACA,OACE/3C,EAAMlnC,EAAOkgC,SACXlgC,EAAO08B,YACL+hD,EAAS32E,QAAQgmD,SACbxrD,EAAAqoB,QAAQE,OACRvoB,EAAAqoB,QAAQC,OACZkD,GAEFmxD,GAEF,MAGF,QACE/3C,EAAMlnC,EAAOkgC,SACXlgC,EAAO68B,aAAav6B,EAAAmlB,SAASG,MAC3BkG,EACA9tB,EAAOs8B,UAAU,IAEnB2iD,GAEF,MAEF,QACE/3C,EAAMlnC,EAAOkgC,SACXlgC,EAAO68B,aAAav6B,EAAAmlB,SAASI,MAC3BiG,EACA9tB,EAAOw8B,UAAU,IAEnByiD,GAEF,MAEF,QACER,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAM+3C,EAIVR,EAAS/xB,YAActqD,EAAA2F,KAAKc,UAE5B,OAAQ41E,EAAS/xB,YAAY/iD,MAC3B,OACA,OACA,OACA,OACA,QACM0O,EAAOomE,EAASv6D,gBAAgB7L,KAChCy8C,EAAY2pB,EAASv6D,gBAAgBzD,oBACvCg+D,EAAS/xB,aACRr0C,EAAKsO,YAAYmH,EAAM2wD,EAAS/xB,cAEnCxlB,EAAMlnC,EAAOkgC,SACXlgC,EAAOq9B,eAAey3B,EAAU34C,MAAO2R,GACvC9tB,EAAOm9B,eAAe23B,EAAU34C,MAAO7Z,EAAA2d,WAAWC,KAClD++D,GAEF,MAEF,OACA,OACA,QACMnqB,EAAY2pB,EAASv6D,gBAAgBzD,oBAAoBre,EAAA2F,KAAKG,KAAK,GACvEg/B,EAAMlnC,EAAOkgC,SACXlgC,EAAOq9B,eAAey3B,EAAU34C,MAAO2R,GACvC9tB,EAAOm9B,eAAe23B,EAAU34C,MAAO7Z,EAAA2d,WAAWC,KAClD++D,GAEF,MAEF,OACA,OACMnqB,EAAY2pB,EAASv6D,gBAAgBzD,oBAAoBre,EAAA2F,KAAKI,KAAK,GACvE++B,EAAMlnC,EAAOkgC,SACXlgC,EAAO08B,YAAYp6B,EAAAqoB,QAAQE,OACzB7qB,EAAOq9B,eAAey3B,EAAU34C,MAAO2R,IAEzCmxD,EACAj/E,EAAOm9B,eAAe23B,EAAU34C,MAAO7Z,EAAA2d,WAAWE,MAEpD,MAEF,OACA,OACM20C,EAAY2pB,EAASv6D,gBAAgBzD,oBAAoBg+D,EAAS32E,QAAQW,WAAW,GACzFy+B,EAAMlnC,EAAOkgC,SACXlgC,EAAO08B,YACL+hD,EAAS32E,QAAQgmD,SACbxrD,EAAAqoB,QAAQE,OACRvoB,EAAAqoB,QAAQC,OACZ5qB,EAAOq9B,eAAey3B,EAAU34C,MAAO2R,IAEzCmxD,EACAj/E,EAAOm9B,eAAe23B,EAAU34C,MAAOsiE,EAAS32E,QAAQ+oD,iBAE1D,MAEF,QACMiE,EAAY2pB,EAASv6D,gBAAgBzD,oBAAoBre,EAAA2F,KAAKY,KAAK,GACvEu+B,EAAMlnC,EAAOkgC,SACXlgC,EAAO68B,aAAav6B,EAAAmlB,SAASG,MAC3B5nB,EAAOq9B,eAAey3B,EAAU34C,MAAO2R,GACvC9tB,EAAOs8B,UAAU,IAEnB2iD,EACAj/E,EAAOm9B,eAAe23B,EAAU34C,MAAO7Z,EAAA2d,WAAWG,MAEpD,MAEF,QACM00C,EAAY2pB,EAASv6D,gBAAgBzD,oBAAoBre,EAAA2F,KAAKa,KAAK,GACvEs+B,EAAMlnC,EAAOkgC,SACXlgC,EAAO68B,aAAav6B,EAAAmlB,SAASI,MAC3B7nB,EAAOq9B,eAAey3B,EAAU34C,MAAO2R,GACvC9tB,EAAOw8B,UAAU,IAEnByiD,EACAj/E,EAAOm9B,eAAe23B,EAAU34C,MAAO7Z,EAAA2d,WAAWI,MAEpD,MAEF,QACEo+D,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAEby7B,EAAM+3C,EAKZ,OAAO/3C,EAET,IAAK,YAOH,OANI7vB,GACFonE,EAASnzE,MACPnJ,EAAAoJ,eAAemxD,sBACf9+C,EAAWnS,MAAO1J,EAAUuH,cAGT,GAAnB0zB,EAASv5B,QACXg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAE3C5O,EAAOyhC,uBAEZppB,EAAOomE,EAASv6D,gBAAgB7L,MAC/BhP,IAAG,MACR69B,EAAMu3C,EAASzqB,4BAA4Bh3B,EAAS,GAAIk5B,EAAc,GACtE79C,EAAKoM,MAAK,MACHyiB,GAET,IAAK,gBACH,GAAIlK,EAASv5B,OAAS,EAcpB,OAbI4T,IACEA,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IACnC,GAAxBA,EAAc5T,QAChBg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,MAI3D6vE,EAASnzE,MACPnJ,EAAAoJ,eAAeiyD,wCACf5/C,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAE3C5O,EAAOyhC,oBAEhB,IAAIhrB,OAAU,EACd,GAAIY,EAAe,CACjB,GAA4B,GAAxBA,EAAc5T,OAMhB,OALI4T,EAAc5T,SAAQg7E,EAAS/xB,YAAcr1C,EAAc,IAC/DonE,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,KAEhD5O,EAAOyhC,oBAEhBhrB,EAAaY,EAAc,QAE3BZ,EAAay/C,EAGf,GADApoC,EAAO2wD,EAASzqB,4BAA4Bh3B,EAAS,GAAI56B,EAAA2F,KAAKQ,IAAG,GACpC,GAAzBk2E,EAAS/xB,YAAY/iD,KAKvB,OAJA80E,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACf0qB,EAAS,GAAGvxB,OAEPzL,EAAOyhC,oBAOhB,IALA,IAAI29B,EAAcpiC,EAASv5B,OAAS,EAChCy7E,EAAe,IAAIl2E,MAAqBo2D,GACxC+f,EAAiB,IAAIn2E,MAAco2D,EAAc,GACjDhD,EAAmB3lD,EAAWuJ,eAC9Bo/D,EAAmB,IAAIp2E,MAAkBo2D,GACpC1+D,EAAI,EAAGA,EAAI0+D,IAAe1+D,EAAG,CACpCw+E,EAAax+E,GAAK+9E,EAASzqB,4BAA4Bh3B,EAAS,EAAIt8B,GAAI0B,EAAA2F,KAAKG,IAAG,GAChF,IAAIm3E,EAAcZ,EAAS/xB,YAC3ByyB,EAAez+E,GAAK2+E,EAAY/9D,oBAChC89D,EAAiB1+E,GAAK2+E,EAAYr/D,eAEpCm/D,EAAe/f,GAAe3oD,EAAW6K,oBACzC,IAAIigB,EAAW49C,EAAelvE,KAAK,IAC/BoyB,EAAUriC,EAAO07B,2BAA2B0gC,EAAkBgjB,GAKlE,OAJK/8C,IAASA,EAAUriC,EAAOo7B,gBAAgBmG,EAAU66B,EAAkBgjB,IAC3EX,EAAS/xB,YAAcj2C,EAGhBzW,EAAOshC,mBAAmBxT,EAAMoxD,EAAc39C,GAKvD,IAAK,KAOH,OANIlqB,GACFonE,EAASnzE,MACPnJ,EAAAoJ,eAAemxD,sBACf9+C,EAAWnS,MAAO1J,EAAUuH,cAGT,GAAnB0zB,EAASv5B,QACXg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAElD6vE,EAAS/xB,YAActqD,EAAA2F,KAAKC,GACrBhI,EAAOyhC,qBAETg9C,EAASnvB,kBACdtyB,EAAS,GACT56B,EAAA2F,KAAKC,GAAE,KAKX,IAAK,MAOH,OANIqP,GACFonE,EAASnzE,MACPnJ,EAAAoJ,eAAemxD,sBACf9+C,EAAWnS,MAAO1J,EAAUuH,cAGT,GAAnB0zB,EAASv5B,QACXg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAElD6vE,EAAS/xB,YAActqD,EAAA2F,KAAKE,IACrBjI,EAAOyhC,qBAETg9C,EAASnvB,kBACdtyB,EAAS,GACT56B,EAAA2F,KAAKE,IAAG,KAKZ,IAAK,MAOH,OANIoP,GACFonE,EAASnzE,MACPnJ,EAAAoJ,eAAemxD,sBACf9+C,EAAWnS,MAAO1J,EAAUuH,cAGT,GAAnB0zB,EAASv5B,QACXg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAElD6vE,EAAS/xB,YAActqD,EAAA2F,KAAKG,IACrBlI,EAAOyhC,qBAETg9C,EAASnvB,kBACdtyB,EAAS,GACT56B,EAAA2F,KAAKG,IAAG,KAKZ,IAAK,MAOH,OANImP,GACFonE,EAASnzE,MACPnJ,EAAAoJ,eAAemxD,sBACf9+C,EAAWnS,MAAO1J,EAAUuH,cAGT,GAAnB0zB,EAASv5B,QACXg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAElD6vE,EAAS/xB,YAActqD,EAAA2F,KAAKI,IACrBnI,EAAOyhC,qBAETg9C,EAASnvB,kBACdtyB,EAAS,GACT56B,EAAA2F,KAAKI,IAAG,KAKZ,IAAK,QAOH,OANIkP,GACFonE,EAASnzE,MACPnJ,EAAAoJ,eAAemxD,sBACf9+C,EAAWnS,MAAO1J,EAAUuH,cAGT,GAAnB0zB,EAASv5B,QACXg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAElD6vE,EAAS/xB,YAAc+xB,EAAS32E,QAAQgmD,SACpC1rD,EAAA2F,KAAKqiD,QACLhoD,EAAA2F,KAAKoiD,QACFnqD,EAAOyhC,qBAETg9C,EAASnvB,kBACdtyB,EAAS,GACTyhD,EAAS32E,QAAQgmD,SACb1rD,EAAA2F,KAAKqiD,QACLhoD,EAAA2F,KAAKoiD,QAAO,KAKpB,IAAK,KAOH,OANI9yC,GACFonE,EAASnzE,MACPnJ,EAAAoJ,eAAemxD,sBACf9+C,EAAWnS,MAAO1J,EAAUuH,cAGT,GAAnB0zB,EAASv5B,QACXg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAElD6vE,EAAS/xB,YAActqD,EAAA2F,KAAKM,GACrBrI,EAAOyhC,qBAETg9C,EAASnvB,kBACdtyB,EAAS,GACT56B,EAAA2F,KAAKM,GAAE,KAKX,IAAK,MAOH,OANIgP,GACFonE,EAASnzE,MACPnJ,EAAAoJ,eAAemxD,sBACf9+C,EAAWnS,MAAO1J,EAAUuH,cAGT,GAAnB0zB,EAASv5B,QACXg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAElD6vE,EAAS/xB,YAActqD,EAAA2F,KAAKO,IACrBtI,EAAOyhC,qBAETg9C,EAASnvB,kBACdtyB,EAAS,GACT56B,EAAA2F,KAAKO,IAAG,KAKZ,IAAK,MAOH,OANI+O,GACFonE,EAASnzE,MACPnJ,EAAAoJ,eAAemxD,sBACf9+C,EAAWnS,MAAO1J,EAAUuH,cAGT,GAAnB0zB,EAASv5B,QACXg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAElD6vE,EAAS/xB,YAActqD,EAAA2F,KAAKQ,IACrBvI,EAAOyhC,qBAETg9C,EAASnvB,kBACdtyB,EAAS,GACT56B,EAAA2F,KAAKQ,IAAG,KAKZ,IAAK,MAOH,OANI8O,GACFonE,EAASnzE,MACPnJ,EAAAoJ,eAAemxD,sBACf9+C,EAAWnS,MAAO1J,EAAUuH,cAGT,GAAnB0zB,EAASv5B,QACXg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAElD6vE,EAAS/xB,YAActqD,EAAA2F,KAAKS,IACrBxI,EAAOyhC,qBAETg9C,EAASnvB,kBACdtyB,EAAS,GACT56B,EAAA2F,KAAKS,IAAG,KAKZ,IAAK,QAOH,OANI6O,GACFonE,EAASnzE,MACPnJ,EAAAoJ,eAAemxD,sBACf9+C,EAAWnS,MAAO1J,EAAUuH,cAGT,GAAnB0zB,EAASv5B,QACXg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAElD6vE,EAAS/xB,YAAc+xB,EAAS32E,QAAQW,UACjCzI,EAAOyhC,qBAETg9C,EAASnvB,kBACdtyB,EAAS,GACTyhD,EAAS32E,QAAQW,UAAS,KAK9B,IAAK,OAOH,OANI4O,GACFonE,EAASnzE,MACPnJ,EAAAoJ,eAAemxD,sBACf9+C,EAAWnS,MAAO1J,EAAUuH,cAGT,GAAnB0zB,EAASv5B,QACXg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAElD6vE,EAAS/xB,YAActqD,EAAA2F,KAAKW,KACrB1I,EAAOyhC,qBAETg9C,EAASnvB,kBACdtyB,EAAS,GACT56B,EAAA2F,KAAKW,KAAI,KAKb,IAAK,MAOH,OANI2O,GACFonE,EAASnzE,MACPnJ,EAAAoJ,eAAemxD,sBACf9+C,EAAWnS,MAAO1J,EAAUuH,cAGT,GAAnB0zB,EAASv5B,QACXg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAElD6vE,EAAS/xB,YAActqD,EAAA2F,KAAKY,IACrB3I,EAAOyhC,qBAETg9C,EAASnvB,kBACdtyB,EAAS,GACT56B,EAAA2F,KAAKY,IAAG,KAKZ,IAAK,MAOH,OANI0O,GACFonE,EAASnzE,MACPnJ,EAAAoJ,eAAemxD,sBACf9+C,EAAWnS,MAAO1J,EAAUuH,cAGT,GAAnB0zB,EAASv5B,QACXg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAElD6vE,EAAS/xB,YAActqD,EAAA2F,KAAKa,IACrB5I,EAAOyhC,qBAETg9C,EAASnvB,kBACdtyB,EAAS,GACT56B,EAAA2F,KAAKa,IAAG,KAMd,IAAIge,EAkBN,SACE63D,EACA18E,EACAi7B,EACAk5B,EACAt4C,GAEA,OAAQ7b,EAAUuH,cAOhB,IAAK,UAAW,OAAOg2E,EAAS,MAAOb,EAAUr8E,EAAA2F,KAAKG,IAAK80B,EAAU56B,EAAA2F,KAAKG,IAAK0V,GAC/E,IAAK,UAAW,OAAO0hE,EAAS,MAAOb,EAAUr8E,EAAA2F,KAAKI,IAAK60B,EAAU56B,EAAA2F,KAAKI,IAAKyV,GAE/E,IAAK,UAAW,OAAO0hE,EAAS,MAAOb,EAAUr8E,EAAA2F,KAAKG,IAAK80B,EAAU56B,EAAA2F,KAAKG,IAAK0V,GAC/E,IAAK,UAAW,OAAO0hE,EAAS,MAAOb,EAAUr8E,EAAA2F,KAAKI,IAAK60B,EAAU56B,EAAA2F,KAAKI,IAAKyV,GAE/E,IAAK,aAAc,OAAO0hE,EAAS,SAAUb,EAAUr8E,EAAA2F,KAAKG,IAAK80B,EAAU56B,EAAA2F,KAAKG,IAAK0V,GACrF,IAAK,aAAc,OAAO0hE,EAAS,SAAUb,EAAUr8E,EAAA2F,KAAKI,IAAK60B,EAAU56B,EAAA2F,KAAKI,IAAKyV,GAErF,IAAK,WAAY,OAAO0hE,EAAS,OAAQb,EAAUr8E,EAAA2F,KAAKG,IAAK80B,EAAU56B,EAAA2F,KAAKG,IAAK0V,GACjF,IAAK,WAAY,OAAO0hE,EAAS,OAAQb,EAAUr8E,EAAA2F,KAAKI,IAAK60B,EAAU56B,EAAA2F,KAAKI,IAAKyV,GAEjF,IAAK,WAAY,OAAO0hE,EAAS,OAAQb,EAAUr8E,EAAA2F,KAAKG,IAAK80B,EAAU56B,EAAA2F,KAAKG,IAAK0V,GACjF,IAAK,WAAY,OAAO0hE,EAAS,OAAQb,EAAUr8E,EAAA2F,KAAKI,IAAK60B,EAAU56B,EAAA2F,KAAKI,IAAKyV,GAEjF,IAAK,UAAW,OAAO0hE,EAAS,MAAOb,EAAUr8E,EAAA2F,KAAKY,IAAKq0B,EAAU56B,EAAA2F,KAAKY,IAAKiV,GAC/E,IAAK,UAAW,OAAO0hE,EAAS,MAAOb,EAAUr8E,EAAA2F,KAAKa,IAAKo0B,EAAU56B,EAAA2F,KAAKa,IAAKgV,GAE/E,IAAK,UAAW,OAAO0hE,EAAS,MAAOb,EAAUr8E,EAAA2F,KAAKY,IAAKq0B,EAAU56B,EAAA2F,KAAKY,IAAKiV,GAC/E,IAAK,UAAW,OAAO0hE,EAAS,MAAOb,EAAUr8E,EAAA2F,KAAKa,IAAKo0B,EAAU56B,EAAA2F,KAAKa,IAAKgV,GAE/E,IAAK,UAAW,OAAO0hE,EAAS,MAAOb,EAAUr8E,EAAA2F,KAAKY,IAAKq0B,EAAU56B,EAAA2F,KAAKY,IAAKiV,GAC/E,IAAK,UAAW,OAAO0hE,EAAS,MAAOb,EAAUr8E,EAAA2F,KAAKa,IAAKo0B,EAAU56B,EAAA2F,KAAKa,IAAKgV,GAE/E,IAAK,WAAY,OAAO0hE,EAAS,OAAQb,EAAUr8E,EAAA2F,KAAKY,IAAKq0B,EAAU56B,EAAA2F,KAAKY,IAAKiV,GACjF,IAAK,WAAY,OAAO0hE,EAAS,OAAQb,EAAUr8E,EAAA2F,KAAKa,IAAKo0B,EAAU56B,EAAA2F,KAAKa,IAAKgV,GAEjF,IAAK,YAAa,OAAO0hE,EAAS,QAASb,EAAUr8E,EAAA2F,KAAKY,IAAKq0B,EAAU56B,EAAA2F,KAAKY,IAAKiV,GACnF,IAAK,YAAa,OAAO0hE,EAAS,QAASb,EAAUr8E,EAAA2F,KAAKa,IAAKo0B,EAAU56B,EAAA2F,KAAKa,IAAKgV,GAEnF,IAAK,eAAgB,OAAO0hE,EAAS,WAAYb,EAAUr8E,EAAA2F,KAAKY,IAAKq0B,EAAU56B,EAAA2F,KAAKY,IAAKiV,GACzF,IAAK,eAAgB,OAAO0hE,EAAS,WAAYb,EAAUr8E,EAAA2F,KAAKa,IAAKo0B,EAAU56B,EAAA2F,KAAKa,IAAKgV,GAEzF,IAAK,cAAe,OAAO0hE,EAAS,UAAWb,EAAUr8E,EAAA2F,KAAKY,IAAKq0B,EAAU56B,EAAA2F,KAAKY,IAAKiV,GACvF,IAAK,cAAe,OAAO0hE,EAAS,UAAWb,EAAUr8E,EAAA2F,KAAKa,IAAKo0B,EAAU56B,EAAA2F,KAAKa,IAAKgV,GAEvF,IAAK,sBAAuB,OAAO0hE,EAAS,cAAeb,EAAUr8E,EAAA2F,KAAKG,IAAK80B,EAAU56B,EAAA2F,KAAKY,IAAKiV,GACnG,IAAK,sBAAuB,OAAO0hE,EAAS,cAAeb,EAAUr8E,EAAA2F,KAAKI,IAAK60B,EAAU56B,EAAA2F,KAAKa,IAAKgV,GACnG,IAAK,sBAAuB,OAAO0hE,EAAS,cAAeb,EAAUr8E,EAAA2F,KAAKY,IAAKq0B,EAAU56B,EAAA2F,KAAKG,IAAK0V,GACnG,IAAK,sBAAuB,OAAO0hE,EAAS,cAAeb,EAAUr8E,EAAA2F,KAAKa,IAAKo0B,EAAU56B,EAAA2F,KAAKI,IAAKyV,GAEnG,IAAK,WAAY,OAAO0hE,EAAS,OAAQb,EAAUr8E,EAAA2F,KAAKY,IAAKq0B,EAAU56B,EAAA2F,KAAKY,IAAKiV,GACjF,IAAK,WAAY,OAAO0hE,EAAS,OAAQb,EAAUr8E,EAAA2F,KAAKa,IAAKo0B,EAAU56B,EAAA2F,KAAKa,IAAKgV,GAEjF,IAAK,YAAa,OAAO0hE,EAAS,QAASb,EAAUr8E,EAAA2F,KAAKY,IAAKq0B,EAAU56B,EAAA2F,KAAKY,IAAKiV,GACnF,IAAK,YAAa,OAAO0hE,EAAS,QAASb,EAAUr8E,EAAA2F,KAAKa,IAAKo0B,EAAU56B,EAAA2F,KAAKa,IAAKgV,GAEnF,IAAK,cAAe,OAAO0hE,EAAS,OAAQb,EAAUr8E,EAAA2F,KAAKC,GAAIg1B,EAAU56B,EAAA2F,KAAKG,IAAK0V,GACnF,IAAK,cAAe,OAAO0hE,EAAS,OAAQb,EAAUr8E,EAAA2F,KAAKM,GAAI20B,EAAU56B,EAAA2F,KAAKQ,IAAKqV,GACnF,IAAK,eAAgB,OAAO0hE,EAAS,OAAQb,EAAUr8E,EAAA2F,KAAKE,IAAK+0B,EAAU56B,EAAA2F,KAAKG,IAAK0V,GACrF,IAAK,eAAgB,OAAO0hE,EAAS,OAAQb,EAAUr8E,EAAA2F,KAAKO,IAAK00B,EAAU56B,EAAA2F,KAAKQ,IAAKqV,GACrF,IAAK,WAAY,OAAO0hE,EAAS,OAAQb,EAAUr8E,EAAA2F,KAAKG,IAAK80B,EAAU56B,EAAA2F,KAAKG,IAAK0V,GACjF,IAAK,cAAe,OAAO0hE,EAAS,OAAQb,EAAUr8E,EAAA2F,KAAKC,GAAIg1B,EAAU56B,EAAA2F,KAAKI,IAAKyV,GACnF,IAAK,cAAe,OAAO0hE,EAAS,OAAQb,EAAUr8E,EAAA2F,KAAKM,GAAI20B,EAAU56B,EAAA2F,KAAKS,IAAKoV,GACnF,IAAK,eAAgB,OAAO0hE,EAAS,OAAQb,EAAUr8E,EAAA2F,KAAKE,IAAK+0B,EAAU56B,EAAA2F,KAAKI,IAAKyV,GACrF,IAAK,eAAgB,OAAO0hE,EAAS,OAAQb,EAAUr8E,EAAA2F,KAAKO,IAAK00B,EAAU56B,EAAA2F,KAAKS,IAAKoV,GACrF,IAAK,eAAgB,OAAO0hE,EAAS,OAAQb,EAAUr8E,EAAA2F,KAAKG,IAAK80B,EAAU56B,EAAA2F,KAAKI,IAAKyV,GACrF,IAAK,eAAgB,OAAO0hE,EAAS,OAAQb,EAAUr8E,EAAA2F,KAAKQ,IAAKy0B,EAAU56B,EAAA2F,KAAKS,IAAKoV,GACrF,IAAK,WAAY,OAAO0hE,EAAS,OAAQb,EAAUr8E,EAAA2F,KAAKI,IAAK60B,EAAU56B,EAAA2F,KAAKI,IAAKyV,GACjF,IAAK,WAAY,OAAO0hE,EAAS,OAAQb,EAAUr8E,EAAA2F,KAAKY,IAAKq0B,EAAU56B,EAAA2F,KAAKY,IAAKiV,GACjF,IAAK,WAAY,OAAO0hE,EAAS,OAAQb,EAAUr8E,EAAA2F,KAAKa,IAAKo0B,EAAU56B,EAAA2F,KAAKa,IAAKgV,GAEjF,IAAK,aAAc,OAAO0hE,EAAS,QAASb,EAAUr8E,EAAA2F,KAAKC,GAAIg1B,EAAU56B,EAAA2F,KAAKG,IAAK0V,GACnF,IAAK,cAAe,OAAO0hE,EAAS,QAASb,EAAUr8E,EAAA2F,KAAKE,IAAK+0B,EAAU56B,EAAA2F,KAAKG,IAAK0V,GACrF,IAAK,YAAa,OAAO0hE,EAAS,QAASb,EAAUr8E,EAAA2F,KAAKG,IAAK80B,EAAU56B,EAAA2F,KAAKG,IAAK0V,GACnF,IAAK,aAAc,OAAO0hE,EAAS,QAASb,EAAUr8E,EAAA2F,KAAKC,GAAIg1B,EAAU56B,EAAA2F,KAAKI,IAAKyV,GACnF,IAAK,cAAe,OAAO0hE,EAAS,QAASb,EAAUr8E,EAAA2F,KAAKE,IAAK+0B,EAAU56B,EAAA2F,KAAKI,IAAKyV,GACrF,IAAK,cAAe,OAAO0hE,EAAS,QAASb,EAAUr8E,EAAA2F,KAAKG,IAAK80B,EAAU56B,EAAA2F,KAAKI,IAAKyV,GACrF,IAAK,YAAa,OAAO0hE,EAAS,QAASb,EAAUr8E,EAAA2F,KAAKI,IAAK60B,EAAU56B,EAAA2F,KAAKI,IAAKyV,GACnF,IAAK,YAAa,OAAO0hE,EAAS,QAASb,EAAUr8E,EAAA2F,KAAKY,IAAKq0B,EAAU56B,EAAA2F,KAAKY,IAAKiV,GACnF,IAAK,YAAa,OAAO0hE,EAAS,QAASb,EAAUr8E,EAAA2F,KAAKa,IAAKo0B,EAAU56B,EAAA2F,KAAKa,IAAKgV,GAErF,OAAO,EAxGI2hE,CAAad,EAAU18E,EAAWi7B,EAAUk5B,EAAgBt4C,GACvE,OAAIgJ,GACEvP,GAAiBA,EAAc5T,QACjCg7E,EAASnzE,MACPnJ,EAAAoJ,eAAemxD,sBACf9+C,EAAWnS,MAAO1J,EAAUuH,cAGzBsd,IAET63D,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfsL,EAAWnS,OAENzL,EAAOyhC,qBA8FhB,SAAA69C,EACEr+E,EACAw9E,EACAe,EACAxiD,EACAyiD,EACA7hE,GAEA,IAAI7b,EAAYyB,OAAOi7E,EAASzjE,QAAQvU,eAAejF,IAAIP,IAE3D,OADAuC,OAAOzB,EAAU4H,MAAQomC,EAAAhqC,YAAYyU,oBAC9B4iD,EAAYqhB,EAA6B18E,GAAay9E,GAAgBxiD,EAAUyiD,EAAW7hE,GAIpG,SAAA8gE,EACED,EACApnE,EACA2lB,EACApf,GAEA,GAAuB,GAAnBof,EAASv5B,OACX,OAAK4T,GAAyC,GAAxBA,EAAc5T,OAO7B4T,EAAc,IANnBonE,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAgBA,EAAc5T,OAAOmL,SAAS,IAAM,KAEtE,MAIX,GAAuB,GAAnBouB,EAASv5B,OAAa,CACxB,GAAI4T,EACF,GAA4B,GAAxBA,EAAc5T,OAChBg7E,EAASnvB,kBAAkBtyB,EAAS,GAAI3lB,EAAc,GAAE,SACnD,CACL,GAAIA,EAAc5T,OAKhB,OAJAg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,KAEhD,KAET6vE,EAASzqB,4BAA4Bh3B,EAAS,GAAI56B,EAAA2F,KAAKG,IAAG,QAG5Du2E,EAASzqB,4BAA4Bh3B,EAAS,GAAI56B,EAAA2F,KAAKG,IAAG,GAE5D,OAAOu2E,EAAS/xB,YAYlB,OAVIr1C,GAAiBA,EAAc5T,OAAS,GAC1Cg7E,EAASnzE,MACPnJ,EAAAoJ,eAAeyM,oCACf4F,EAAWnS,MAAO,IAAK4L,EAAc5T,OAAOmL,SAAS,KAGzD6vE,EAASnzE,MACPnJ,EAAAoJ,eAAeqH,+BACfgL,EAAWnS,MAAO,IAAKuxB,EAASv5B,OAAOmL,SAAS,KAE3C,KAIT,SAAAiwE,EAAgCJ,EAAoB/lE,GAClD,IAAIkO,EACAllB,EA6BJ,OA5BI+8E,EAAS32E,QAAQgmD,UACnBlnC,EAAO63D,EAASjnB,qBAAqB9+C,EAAYtW,EAAA2F,KAAKuiD,QAAO,MAE3DhoD,EAAAwkB,gBAAgBF,IAAStkB,EAAAykB,aAAa6C,OACtCtnB,EAAA2oB,kBAAkBrE,IAAStkB,EAAA2d,WAAWE,KACR,GAA9B7d,EAAA4nC,qBAAqBtjB,KACpBllB,EAAQY,EAAA4oB,oBAAoBtE,IAAS,KAEtC63D,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfoG,EAAWjN,OAEb/J,GAAS,KAGXklB,EAAO63D,EAASjnB,qBAAqB9+C,EAAYtW,EAAA2F,KAAKsiD,QAAO,MAE3D/nD,EAAAwkB,gBAAgBF,IAAStkB,EAAAykB,aAAa6C,OACtCtnB,EAAA2oB,kBAAkBrE,IAAStkB,EAAA2d,WAAWC,MACrCxe,EAAQY,EAAAunB,iBAAiBjD,IAAS,KAEnC63D,EAASnzE,MACPnJ,EAAAoJ,eAAe+G,wBACfoG,EAAWjN,OAEb/J,GAAS,IAGNA,EAlpFT3B,EAAAq9D,cAqpFA,IAAMsiB,EAAuB,kBAG7B3/E,EAAA6jE,gBAAA,SACE6a,EACArhE,EACAQ,GAEA,IAAI5C,EAAUyjE,EAASzjE,QACvBxX,OAAO4Z,EAAcpC,SAAWA,GAChC,IAAIhb,EAASy+E,EAASz+E,OAClB8H,EAAU22E,EAAS32E,QAEnB63E,EAAoB3kE,EAAQvU,eAAejF,IAAIk+E,GACnD,IAAKC,EASH,OARA3kE,EAAQ1P,MACNnJ,EAAAoJ,eAAeoB,mBACfiR,EAAWnS,MAAOi0E,GAEpB1kE,EAAQgU,KACN7sB,EAAAoJ,eAAeq0E,iGACfhiE,EAAWnS,OAENzL,EAAOyhC,oBAEhB,GAAIk+C,EAAkBh2E,MAAQomC,EAAAhqC,YAAYyU,mBAKxC,OAJAQ,EAAQ1P,MACNnJ,EAAAoJ,eAAesP,uGACf+C,EAAWnS,MAAOk0E,EAAkBr2E,cAE/BtJ,EAAOyhC,oBAGhB,IAAIo+C,EAAuCF,EAAmB9xE,UAC9D,OAAMgyE,GAAoBpB,EAASjuB,gBAAgBqvB,IAEnDpB,EAAS/xB,YAActvC,EAAcnP,KAC9BjO,EAAOkhC,WACZ2+C,EAAiBv2E,cACfxB,EAAQgmD,SACJ9tD,EAAOk8B,UAAU9e,EAAc8E,qBAC/BliB,EAAO87B,UAAU1e,EAAc8E,sBAErCpa,EAAQ+oD,iBAToE7wD,EAAOyhC,qBAavF,IAAMq+C,EAAoB,QAG1B,SAAAnqB,EACE8oB,EACA5wD,EACAjQ,GAEA,IAAI5C,EAAUyjE,EAASzjE,QACnBhb,EAASy+E,EAASz+E,OAElBshE,EAAatmD,EAAQrU,YAAYnF,IAAI,UACzC,IAAK8/D,EAAY,OAAOthE,EAAOyhC,oBAE/B,IAAIs+C,EAAiB/kE,EAAQvU,eAAejF,IAAIs+E,GAChD,IAAKC,GAAkBA,EAAep2E,MAAQomC,EAAAhqC,YAAYyU,mBAAoB,OAAOxa,EAAOyhC,oBAE5F,IAAIu+C,EAAoCD,EAAgBlyE,UACxD,IAAMmyE,IAAiBvB,EAASjuB,gBAAgBwvB,GAAiB,OAAOhgF,EAAOyhC,oBAE/E,IAAIw+C,EAAwB,MAAXpyD,EACb4wD,EAASnvB,kBAAkBzhC,EAASyzC,EAAU,KAC9CA,EAAWtX,aAAahqD,GAExBkgF,EAAczB,EAASzd,oBAAoBpjD,EAAWnS,MAAMhE,OAAOF,gBAGvE,OADAk3E,EAAS/xB,YAActqD,EAAA2F,KAAKc,KACrB7I,EAAOq/B,YAAY,MACxBr/B,EAAOohC,iBACL4+C,EAAc12E,cACZ22E,EACAC,EACAlgF,EAAO87B,UAAUle,EAAWnS,MAAM0V,MAClCnhB,EAAO87B,UAAUle,EAAWnS,MAAM2V,SAEpC9e,EAAA2d,WAAWuf,MAEbx/B,EAAOyhC,sBAlCX1hC,EAAA41D,8BC7vFA31D,EAAAD,QAAAO,oBCAA,SAAA6uD,GAEA,MAAAgxB,EAAAhxB,EAAAixB,UAAA5/E,EAAA,IAEA,QAAA6/E,KAAAF,GACAE,EAAA3pC,WAAA,cAAA2pC,EAAA3pC,WAAA,gBACAyY,EAAAkxB,GAAAF,EAAAE,IAIAlxB,EAAAt0B,gBAAA,SAAA1Q,GACA,OAAAA,EACAg2D,EAAAG,QAAAn2D,GADA,GAIAglC,EAAAj0B,YAAA,SAAA0C,GACAA,GAAAuiD,EAAAI,MAAA3iD,IAGAuxB,EAAAqxB,YAAA,SAAAC,EAAAC,EAAA/+E,GACA,OAAAw+E,EAAAQ,SAAAF,EAAAC,EAAA/+E,IAGAwtD,EAAAngB,MAAA,SAAApR,EAAAsR,GACAixC,EAAAS,OAAAhjD,GAAAsR,GAGAigB,EAAA7nB,KAAA,SAAA1J,GACA,OAAAuiD,EAAAS,OAAAhjD,IAKA,MAAAtD,EAAA95B,EAAA,GAAA85B,OAEAA,EAAAv4B,UAAA0lC,OAAA,WACA,IAAAo5C,EAAAV,EAAAW,MACA55C,EAAA,GAIA,OAHAi5C,EAAAW,MAAA,SAAAC,GAAgC75C,GAAA65C,EAAA,MAChCC,qBAAA3gF,KAAAke,KACA4hE,EAAAW,MAAAD,EACA35C,GAGA5M,EAAAv4B,UAAA2lC,QAAA,WACA,IAAAm5C,EAAAV,EAAAW,MACA55C,EAAA,GAIA,OAHAi5C,EAAAW,MAAA,SAAAC,GAAgC75C,GAAA65C,EAAA,MAChCE,0BAAA5gF,KAAAke,KACA4hE,EAAAW,MAAAD,EACA35C,oCClDAlnC,EAAAD,QAAAmhF,KACA,IAAAC,EAAA,IAAA95C,WAAA,GACA+5C,EAAA,EAEAF,EAAA,yBAAA/2D,GACA,KAAAA,KAAA,YAEA,GAAAi3D,EAAAj3D,EAAAg3D,EAAA19E,OAAA,CACA,IAAA49E,EAAAF,GACAA,EAAA,IAAA95C,WAAAquC,KAAAroB,IAAA,MAAA8zB,EAAA19E,OAAA0mB,EAAA,EAAAg3D,EAAA19E,UACA4F,IAAAg4E,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,EAAAl8B,EAAA04B,GACA+mD,EAAAvjD,GAAA,EAAAxD,IAAA14B,GAGAw/E,EAAA,cAAAtjD,EAAAxD,GACA,OAAA+mD,EAAAvjD,GAAA,EAAAxD,sBCjCAp6B,EAAAD,QAAAmhF,KACAA,EAAA,OAAAxL,yBCDA,SAAAvmB,GAEA,IAAA+xB,EAAA,oBAAA9iC,qBAAA,IAAA+Q,MAAA/uD,KA2IA,SAAAmhF,IACA7zE,MAAA8zE,kBACA9zE,MAAA8zE,kBAAAnhF,KAAAkhF,GAEAlhF,KAAAohF,MAAAphF,KAAAY,KAAA,KAAAZ,KAAAwtB,QAAA,UAAAngB,OAAA+zE,MAWA,SAAAC,EAAA7zD,GACAxtB,KAAAwtB,WAAA,mBACAngB,MAAA8zE,kBACA9zE,MAAA8zE,kBAAAnhF,KAAAqhF,GAEArhF,KAAAohF,MAAAphF,KAAAY,KAAA,KAAAZ,KAAAwtB,QAAA,UAAAngB,OAAA+zE,MA7JArgF,OAAAugF,iBACAT,EAAA,YAAAx/E,GAA0C,OAAAA,GAAA,SAE1C2pB,WAAgB3pB,OAAA,IAAAkgF,UAAA,GAChBt2D,WAAgB5pB,MAAA,IAAAkgF,UAAA,KAGhBxgF,OAAAugF,iBACAT,EAAA,aAAAx/E,GAA4C,OAAAA,GAAA,SAE5C2pB,WAAgB3pB,OAAA,MAAAkgF,UAAA,GAChBt2D,WAAgB5pB,MAAA,MAAAkgF,UAAA,KAGhBxgF,OAAAugF,iBACAT,EAAA,IAAAA,EAAA,eAAAx/E,GAAmE,SAAAA,IAEnE2pB,WAAgB3pB,OAAA,WAAAkgF,UAAA,GAChBt2D,WAAgB5pB,MAAA,WAAAkgF,UAAA,KAGhBxgF,OAAAugF,iBACAT,EAAA,YAAAx/E,GAA0C,WAAAA,IAE1C2pB,WAAgB3pB,MAAA,EAAAkgF,UAAA,GAChBt2D,WAAgB5pB,MAAA,IAAAkgF,UAAA,KAGhBxgF,OAAAugF,iBACAT,EAAA,aAAAx/E,GAA4C,aAAAA,IAE5C2pB,WAAgB3pB,MAAA,EAAAkgF,UAAA,GAChBt2D,WAAgB5pB,MAAA,MAAAkgF,UAAA,KAGhBxgF,OAAAugF,iBACAT,EAAA,IAAAA,EAAA,eAAAx/E,GAAmE,OAAAA,IAAA,IAEnE2pB,WAAgB3pB,MAAA,EAAAkgF,UAAA,GAChBt2D,WAAgB5pB,MAAA,WAAAkgF,UAAA,KAGhBxgF,OAAAugF,iBACAT,EAAA,cAAAx/E,GAA8C,QAAAA,IAE9C2pB,WAAgB3pB,MAAA,EAAAkgF,UAAA,GAChBt2D,WAAgB5pB,MAAA,EAAAkgF,UAAA,KAGhBxgF,OAAAugF,iBACAT,EAAA,aAAAx/E,GAA4C,OAAAg0E,KAAA6H,OAAA77E,KAE5C2pB,WAAgB3pB,MAAAg0E,KAAA6H,QAAA,eAAAqE,UAAA,GAChBt2D,WAAgB5pB,MAAAg0E,KAAA6H,OAAA,eAAAqE,UAAA,GAChBC,oBAAyBngF,MAAAg0E,KAAA6H,OAAA,iBAAAqE,UAAA,GACzB1E,kBAAuBx7E,OAAA,SAAAkgF,UAAA,GACvBxE,kBAAuB17E,MAAA,SAAAkgF,UAAA,GACvBE,SAAcpgF,MAAAg0E,KAAA6H,OAAA,cAAAqE,UAAA,KAGdxgF,OAAAugF,iBACAT,EAAA,aAAAx/E,GAA4C,OAAAA,IAE5C2pB,WAAgB3pB,OAAA,uBAAAkgF,UAAA,GAChBt2D,WAAgB5pB,MAAA,uBAAAkgF,UAAA,GAChBC,oBAAyBngF,MAAA,wBAAAkgF,UAAA,GACzB1E,kBAAuBx7E,OAAA,iBAAAkgF,UAAA,GACvBxE,kBAAuB17E,MAAA,iBAAAkgF,UAAA,GACvBE,SAAcpgF,MAAA,sBAAAkgF,UAAA,KAGdV,EAAA,IAAAxL,KAAAqM,MAEAb,EAAA,aAAAx/E,GACA,IAAAX,EAAA20E,KAAAqM,MAAArgF,MACA,OAAAA,EAAA,GAAAX,KAGAmgF,EAAA,gBAAAx/E,GAGA,kBADAA,GAAA,WADAA,OAAA,gBACAA,IAAA,eACAA,IAAA,oBAGAw/E,EAAA,cAAAx/E,EAAAwoB,GAEA,OAAAxoB,IADAwoB,GAAA,IACAxoB,IAAA,GAAAwoB,GAGAg3D,EAAA,cAAAx/E,EAAAwoB,GAEA,OAAAxoB,KADAwoB,GAAA,IACAxoB,GAAA,GAAAwoB,GAGAg3D,EAAA,IAAAxL,KAAAsM,IAEAd,EAAA,IAAAxL,KAAAroB,IAEA6zB,EAAA,IAAAxL,KAAAhvD,IAEAw6D,EAAA,KAAAxL,KAAArsB,KAEA63B,EAAA,MAAAxL,KAAAsF,MAGAkG,EAAA,iBAAAx/E,GACA,WAAAg0E,KAAAsM,IAAAtgF,EAAAg0E,KAAAuM,MAAAvgF,IACA,EAAAg0E,KAAAwM,MAAA,GAAAxgF,GAEAg0E,KAAAwM,MAAAxgF,IAGAw/E,EAAA,gBAAA/gD,EAAAC,EAAAT,GACA,OAAAA,EAAAQ,EAAAC,GAGA8gD,EAAA,KAAAxL,KAAAyM,KAEAjB,EAAA,MAAAxL,KAAAuM,MAEAf,EAAA,kBAAAH,EAAAqB,GACA,OAAA1M,KAAAsM,IAAAjB,GAAArL,KAAA2M,KAAAD,IAGAlB,EAAA,eAAAx/E,GACA,IAAAkhD,EAAAlhD,GAAA,WACAmhD,GAAA,SAAAnhD,IAAA,EAIA,OAFAkhD,GADAlhD,EAAAkhD,EAAAC,IACA,WACAA,GAAA,MAAAnhD,IAAA,KAIAw/E,EAAA,iBAAAx/E,GACA,OAAAA,GAAA,QAAAA,GAAA,iBAAAA,GAUA6/E,EAAAx/E,UAAAX,OAAAue,OAAAjS,MAAA3L,WACAw/E,EAAAx/E,UAAAd,KAAA,mBACAsgF,EAAAx/E,UAAA8rB,QAAA,cAEAqzD,EAAA,uBACA,UAAAK,GAWAG,EAAA3/E,UAAAX,OAAAue,OAAAjS,MAAA3L,WACA2/E,EAAA3/E,UAAAd,KAAA,iBAEAigF,EAAA,gBAAAoB,EAAAz0D,GACA,GAAAy0D,EAAA,OAAAA,EACA,UAAAZ,EAAA7zD,IAGAqzD,EAAA,oBAAAx/E,GACA,OAAAA,GAGAw/E,EAAA,kBAAA9xC,EAAAymC,GACA,SAAAG,SAAA5mC,OAAAmzC,IAGA1yC,OAAA,uBAAAD,GACA,OAAAC,OAAAgX,aAAA5M,MAAApK,OAAAD,IAGAC,OAAA,wBAAAD,GACA,OAAAC,OAAA2yC,cAAAvoC,MAAApK,OAAAD,IAGAsxC,EAAA,UAAAuB,OAAAC,UAEAxB,EAAA,iBAAA39E,GACA,uBAAAA,GAGA29E,EAAA,qBAAA39E,GACA,uBAAAA,GAAA,iBAAAA,GAGA29E,EAAA,kBAAA39E,GACA,uBAAAA,gBAAAssC,QAGAqxC,EAAA,QAAAl4E,MAAA25E,QAEAzB,EAAA,mBAAAt6D,GACA,OAAAA,GAGAs6D,EAAA,cAAAH,EAAAqB,GACA,OAAArB,EAAAqB,GAGAlB,EAAA,eAAAH,EAAAqB,GACA,OAAA1M,KAAA6H,OAAAwD,EAAAqB,IAGA5hF,EAAA,GAAAA,CAAA0gF,GACA1gF,EAAA,GAAAA,CAAA0gF,oGCnNA1gF,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, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\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\nimport { CharCode } 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 export. */\r\nclass QueuedExport {\r\n isReExport: bool;\r\n referencedName: string;\r\n member: ExportMember;\r\n}\r\n\r\n/** Represents a yet unresolved import. */\r\nclass QueuedImport {\r\n internalName: string;\r\n referencedName: string;\r\n referencedNameAlt: string;\r\n declaration: ImportDeclaration | null; // not set if a filespace\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 /** 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 /** 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 queuedExports = new Map();\r\n var queuedImports = new Array();\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.referencedName, queuedExports);\r\n if (element) {\r\n this.elementsLookup.set(queuedImport.internalName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n if (element = this.tryResolveImport(queuedImport.referencedNameAlt, queuedExports)) {\r\n this.elementsLookup.set(queuedImport.internalName, 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.referencedName);\r\n if (element) {\r\n this.elementsLookup.set(queuedImport.internalName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n if (element = this.elementsLookup.get(queuedImport.referencedNameAlt)) {\r\n this.elementsLookup.set(queuedImport.internalName, 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.referencedName)) {\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.referencedName);\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.referencedName)) ||\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 referencedName: string,\r\n queuedExports: 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(referencedName)) return element;\r\n let queuedExport = queuedExports.get(referencedName);\r\n if (!queuedExport) return null;\r\n if (queuedExport.isReExport) {\r\n referencedName = queuedExport.referencedName;\r\n continue;\r\n }\r\n return this.elementsLookup.get(queuedExport.referencedName);\r\n } while (true);\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.referencedName = referencedName; // -> internal 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.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 referencedName = queuedExport.referencedName;\r\n if (seen.has(queuedExport)) break;\r\n seen.add(queuedExport);\r\n } else {\r\n referencedElement = this.elementsLookup.get(queuedExport.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 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.referencedName = referencedName; // -> export 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.internalName = internalName;\r\n let prefix = FILESPACE_PREFIX + statement.internalPath;\r\n queuedImport.referencedName = prefix;\r\n queuedImport.referencedNameAlt = prefix + PATH_DELIMITER + \"index\";\r\n queuedImport.declaration = null;\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 queuedExports: Map,\r\n queuedImports: QueuedImport[]\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 referencedName = 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(referencedName)) {\r\n this.elementsLookup.set(internalName, 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.internalName = internalName;\r\n if (internalPath.endsWith(indexPart)) {\r\n queuedImport.referencedName = referencedName; // try exact first\r\n queuedImport.referencedNameAlt = (\r\n internalPath.substring(0, internalPath.length - indexPart.length + 1) +\r\n declaration.externalName.text\r\n );\r\n } else {\r\n queuedImport.referencedName = referencedName; // try exact first\r\n queuedImport.referencedNameAlt = (\r\n internalPath +\r\n indexPart +\r\n PATH_DELIMITER +\r\n declaration.externalName.text\r\n );\r\n }\r\n queuedImport.declaration = declaration;\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) {\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 }\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[93m\";\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/** 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\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\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;\r\n\r\n// This works in non-strict mode\r\ng = (function() {\r\n\treturn this;\r\n})();\r\n\r\ntry {\r\n\t// This works if eval is allowed (see CSP)\r\n\tg = g || Function(\"return this\")() || (1, eval)(\"this\");\r\n} catch (e) {\r\n\t// This works if the window reference is available\r\n\tif (typeof window === \"object\") g = window;\r\n}\r\n\r\n// g can still be undefined, but nothing to do about it...\r\n// We return undefined, instead of nothing here, so it's\r\n// easier to handle this case. if(!global) { ...}\r\n\r\nmodule.exports = g;\r\n","/**\r\n * 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.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 int type of this type. Defaults to `Type.i32` if this is not an int type. */\r\n get intType(): Type {\r\n switch (this.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.I64:\r\n case TypeKind.ISIZE:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.U64:\r\n case TypeKind.USIZE: return this;\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} 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.compileExpression( // reports\r\n declaration.initializer,\r\n Type.void,\r\n ConversionKind.NONE,\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, NativeType.None);\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 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 // 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.compileExpression( // reports\r\n declaration.initializer,\r\n Type.void,\r\n ConversionKind.NONE,\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 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 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 && initializer.kind == NodeKind.LITERAL)) {\r\n // TODO: other kinds might be constant as well\r\n // NOTE: if the initializer is missing this is reported in ensureTrampoline below\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 case TypeKind.U32: {\r\n if (i64_is_i32(intValue) || 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) || 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.USIZE: {\r\n if (!this.options.isWasm64) {\r\n if (i64_is_i32(intValue) || 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 {\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 = classPrototype.resolveUsingTypeArguments( // reports\r\n expression.typeArguments,\r\n currentFunction.flow.contextualTypeArguments,\r\n expression\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 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);\r\n } else {\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], propertyAccess);\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 contextualType == Type.void\r\n ? ConversionKind.NONE\r\n : ConversionKind.IMPLICIT,\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 }\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 = 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 {\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 diff --git a/src/ast.ts b/src/ast.ts index 17391b8d..f354d3c6 100644 --- a/src/ast.ts +++ b/src/ast.ts @@ -602,7 +602,7 @@ export abstract class Node { } static createExportStatement( - members: ExportMember[], + members: ExportMember[] | null, path: StringLiteralExpression | null, flags: CommonFlags, range: Range @@ -610,7 +610,7 @@ export abstract class Node { var stmt = new ExportStatement(); stmt.range = range; stmt.flags = flags; - stmt.members = members; setParent(members, stmt); + stmt.members = members; if (members) setParent(members, stmt); stmt.path = path; if (path) { let normalizedPath = normalizePath(path.value); @@ -1627,8 +1627,8 @@ export class ExportMember extends Node { export class ExportStatement extends Statement { kind = NodeKind.EXPORT; - /** Array of members. */ - members: ExportMember[]; + /** Array of members if a set of named exports, or `null` if a filespace export. */ + members: ExportMember[] | null; /** Path being exported from, if applicable. */ path: StringLiteralExpression | null; /** Normalized path, if `path` is set. */ diff --git a/src/compiler.ts b/src/compiler.ts index a2792ad6..e984ab3e 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -1097,8 +1097,9 @@ export class Compiler extends DiagnosticEmitter { compileExportStatement(statement: ExportStatement): void { var module = this.module; - var exports = this.program.fileLevelExports; + var fileLevelExports = this.program.fileLevelExports; var members = statement.members; + if (!members) return; // filespace for (let i = 0, k = members.length; i < k; ++i) { let member = members[i]; let internalExportName = ( @@ -1106,7 +1107,7 @@ export class Compiler extends DiagnosticEmitter { PATH_DELIMITER + member.externalName.text ); - let element = exports.get(internalExportName); + let element = fileLevelExports.get(internalExportName); if (!element) continue; // reported in Program#initialize switch (element.kind) { case ElementKind.CLASS_PROTOTYPE: { diff --git a/src/parser.ts b/src/parser.ts index 62ea7b33..c6459a6f 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -1915,6 +1915,7 @@ export class Parser extends DiagnosticEmitter { // at 'export': '{' ExportMember (',' ExportMember)* }' ('from' StringLiteral)? ';'? + var path: StringLiteralExpression | null = null; if (tn.skip(Token.OPENBRACE)) { let members = new Array(); while (!tn.skip(Token.CLOSEBRACE)) { @@ -1933,7 +1934,6 @@ export class Parser extends DiagnosticEmitter { } } } - let path: StringLiteralExpression | null = null; if (tn.skip(Token.FROM)) { if (tn.skip(Token.STRINGLITERAL)) { path = Node.createStringLiteralExpression(tn.readString(), tn.range()); @@ -1953,6 +1953,30 @@ export class Parser extends DiagnosticEmitter { } tn.skip(Token.SEMICOLON); return ret; + } else if (tn.skip(Token.ASTERISK)) { + if (tn.skip(Token.FROM)) { + if (tn.skip(Token.STRINGLITERAL)) { + path = Node.createStringLiteralExpression(tn.readString(), tn.range()); + let ret = Node.createExportStatement(null, path, flags, tn.range(startPos, tn.pos)); + let internalPath = ret.internalPath; + if (internalPath !== null && !this.seenlog.has(internalPath)) { + this.backlog.push(internalPath); + this.seenlog.add(internalPath); + } + tn.skip(Token.SEMICOLON); + return ret; + } else { + this.error( + DiagnosticCode.String_literal_expected, + tn.range() + ); + } + } else { + this.error( + DiagnosticCode._0_expected, + tn.range(), "from" + ); + } } else { this.error( DiagnosticCode._0_expected, @@ -2805,8 +2829,8 @@ export class Parser extends DiagnosticEmitter { return Node.createFalseExpression(tn.range()); } - var p = determinePrecedenceStart(token); - if (p != Precedence.INVALID) { + var precedence = determinePrecedenceStart(token); + if (precedence != Precedence.INVALID) { let operand: Expression | null; // TODO: SpreadExpression, YieldExpression (currently become unsupported UnaryPrefixExpressions) @@ -2830,7 +2854,7 @@ export class Parser extends DiagnosticEmitter { } return null; } else { - operand = this.parseExpression(tn, p); + operand = this.parseExpression(tn, precedence); if (!operand) return null; } @@ -3328,7 +3352,7 @@ export const enum Precedence { } /** Determines the precedence of a starting token. */ -function determinePrecedenceStart(kind: Token): i32 { +function determinePrecedenceStart(kind: Token): Precedence { switch (kind) { case Token.DOT_DOT_DOT: return Precedence.SPREAD; case Token.YIELD: return Precedence.YIELD; @@ -3347,7 +3371,7 @@ function determinePrecedenceStart(kind: Token): i32 { } /** Determines the precende of a non-starting token. */ -function determinePrecedence(kind: Token): i32 { +function determinePrecedence(kind: Token): Precedence { switch (kind) { case Token.COMMA: return Precedence.COMMA; case Token.EQUALS: diff --git a/src/program.ts b/src/program.ts index 3e97b7a6..d3ffdc38 100644 --- a/src/program.ts +++ b/src/program.ts @@ -120,6 +120,8 @@ export const INNER_DELIMITER = "~"; 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 export. */ class QueuedExport { @@ -133,7 +135,7 @@ class QueuedImport { internalName: string; referencedName: string; referencedNameAlt: string; - declaration: ImportDeclaration; + declaration: ImportDeclaration | null; // not set if a filespace } /** Represents a type alias. */ @@ -338,6 +340,8 @@ export class Program extends DiagnosticEmitter { resolvedThisExpression: Expression | null = null; /** Element expression of the previously resolved element access. */ resolvedElementExpression : Expression | null = null; + /** Currently processing filespace. */ + currentFilespace: Filespace; /** Constructs a new program, optionally inheriting parser diagnostics. */ constructor(diagnostics: DiagnosticMessage[] | null = null) { @@ -357,11 +361,12 @@ export class Program extends DiagnosticEmitter { /** Looks up the source for the specified possibly ambiguous path. */ lookupSourceByPath(normalizedPathWithoutExtension: string): Source | null { + var tmp: string; return ( this.getSource(normalizedPathWithoutExtension + ".ts") || this.getSource(normalizedPathWithoutExtension + "/index.ts") || - this.getSource(LIBRARY_PREFIX + normalizedPathWithoutExtension + ".ts") || - this.getSource(LIBRARY_PREFIX + normalizedPathWithoutExtension + "/index.ts") + this.getSource((tmp = LIBRARY_PREFIX + normalizedPathWithoutExtension) + ".ts") || + this.getSource( tmp + "/index.ts") ); } @@ -395,6 +400,13 @@ export class Program extends DiagnosticEmitter { // build initial lookup maps of internal names to declarations for (let i = 0, k = this.sources.length; i < k; ++i) { let source = this.sources[i]; + + // create one filespace per source + let filespace = new Filespace(this, source); + this.elementsLookup.set(filespace.internalName, filespace); + this.currentFilespace = filespace; + + // process this source's statements let statements = source.statements; for (let j = 0, l = statements.length; j < l; ++j) { let statement = statements[j]; @@ -442,22 +454,39 @@ export class Program extends DiagnosticEmitter { // queued imports should be resolvable now through traversing exports and queued exports for (let i = 0; i < queuedImports.length;) { let queuedImport = queuedImports[i]; - let element = this.tryResolveImport(queuedImport.referencedName, queuedExports); - if (element) { - this.elementsLookup.set(queuedImport.internalName, element); - queuedImports.splice(i, 1); - } else { - if (element = this.tryResolveImport(queuedImport.referencedNameAlt, queuedExports)) { + let declaration = queuedImport.declaration; + if (declaration) { // named + let element = this.tryResolveImport(queuedImport.referencedName, queuedExports); + if (element) { this.elementsLookup.set(queuedImport.internalName, element); queuedImports.splice(i, 1); } else { - this.error( - DiagnosticCode.Module_0_has_no_exported_member_1, - queuedImport.declaration.range, - (queuedImport.declaration.parent).path.value, - queuedImport.declaration.externalName.text - ); - ++i; + if (element = this.tryResolveImport(queuedImport.referencedNameAlt, queuedExports)) { + this.elementsLookup.set(queuedImport.internalName, element); + queuedImports.splice(i, 1); + } else { + this.error( + DiagnosticCode.Module_0_has_no_exported_member_1, + declaration.range, + (declaration.parent).path.value, + declaration.externalName.text + ); + ++i; + } + } + } else { // filespace + let element = this.elementsLookup.get(queuedImport.referencedName); + if (element) { + this.elementsLookup.set(queuedImport.internalName, element); + queuedImports.splice(i, 1); + } else { + if (element = this.elementsLookup.get(queuedImport.referencedNameAlt)) { + this.elementsLookup.set(queuedImport.internalName, element); + queuedImports.splice(i, 1); + } else { + assert(false); // already reported by the parser not finding the file + ++i; + } } } } @@ -732,6 +761,7 @@ export class Program extends DiagnosticEmitter { return; } this.fileLevelExports.set(internalName, prototype); + this.currentFilespace.members.set(simpleName, prototype); if (prototype.is(CommonFlags.EXPORT) && declaration.range.source.isEntry) { if (this.moduleLevelExports.has(internalName)) { this.error( @@ -1165,6 +1195,7 @@ export class Program extends DiagnosticEmitter { return; } this.fileLevelExports.set(internalName, element); + this.currentFilespace.members.set(simpleName, element); if (declaration.range.source.isEntry) { if (this.moduleLevelExports.has(internalName)) { this.error( @@ -1215,26 +1246,45 @@ export class Program extends DiagnosticEmitter { queuedExports: Map ): void { var members = statement.members; - for (let i = 0, k = members.length; i < k; ++i) { - this.initializeExport(members[i], statement.internalPath, queuedExports); + if (members) { // named + for (let i = 0, k = members.length; i < k; ++i) { + this.initializeExport(members[i], statement.internalPath, queuedExports); + } + } else { // TODO: filespace + this.error( + DiagnosticCode.Operation_not_supported, + statement.range + ); } } private setExportAndCheckLibrary( - name: string, + internalName: string, element: Element, identifier: IdentifierExpression ): void { - this.fileLevelExports.set(name, element); - if (identifier.range.source.isLibrary) { // add global alias - if (this.elementsLookup.has(identifier.text)) { + // add to file-level exports + this.fileLevelExports.set(internalName, element); + + // add to filespace + var internalPath = identifier.range.source.internalPath; + var prefix = FILESPACE_PREFIX + internalPath; + var filespace = this.elementsLookup.get(prefix); + if (!filespace) filespace = assert(this.elementsLookup.get(prefix + PATH_DELIMITER + "index")); + assert(filespace.kind == ElementKind.FILESPACE); + var simpleName = identifier.text; + (filespace).members.set(simpleName, element); + + // add global alias if from a library file + if (identifier.range.source.isLibrary) { + if (this.elementsLookup.has(simpleName)) { this.error( DiagnosticCode.Export_declaration_conflicts_with_exported_declaration_of_0, - identifier.range, identifier.text + identifier.range, simpleName ); } else { - element.internalName = identifier.text; - this.elementsLookup.set(identifier.text, element); + element.internalName = simpleName; + this.elementsLookup.set(simpleName, element); } } } @@ -1401,6 +1451,7 @@ export class Program extends DiagnosticEmitter { return; } this.fileLevelExports.set(internalName, prototype); + this.currentFilespace.members.set(simpleName, prototype); if (declaration.range.source.isEntry) { if (this.moduleLevelExports.has(internalName)) { this.error( @@ -1446,10 +1497,22 @@ export class Program extends DiagnosticEmitter { ); return; } - this.error( // TODO - DiagnosticCode.Operation_not_supported, - statement.range - ); + + // resolve right away if the exact filespace exists + let filespace = this.elementsLookup.get(statement.internalPath); + if (filespace) { + this.elementsLookup.set(internalName, filespace); + return; + } + + // otherwise queue it + let queuedImport = new QueuedImport(); + queuedImport.internalName = internalName; + let prefix = FILESPACE_PREFIX + statement.internalPath; + queuedImport.referencedName = prefix; + queuedImport.referencedNameAlt = prefix + PATH_DELIMITER + "index"; + queuedImport.declaration = null; + queuedImports.push(queuedImport); } } @@ -1511,9 +1574,10 @@ export class Program extends DiagnosticEmitter { } var decorators = declaration.decorators; + var simpleName = declaration.name.text; var prototype = new InterfacePrototype( this, - declaration.name.text, + simpleName, internalName, declaration, decorators @@ -1548,6 +1612,7 @@ export class Program extends DiagnosticEmitter { return; } this.fileLevelExports.set(internalName, prototype); + this.currentFilespace.members.set(simpleName, prototype); if (declaration.range.source.isEntry) { if (this.moduleLevelExports.has(internalName)) { this.error( @@ -1632,6 +1697,7 @@ export class Program extends DiagnosticEmitter { } else { this.fileLevelExports.set(internalName, namespace); } + this.currentFilespace.members.set(simpleName, namespace); if (declaration.range.source.isEntry) { if (this.moduleLevelExports.has(internalName)) { this.error( @@ -1759,6 +1825,7 @@ export class Program extends DiagnosticEmitter { } else { this.fileLevelExports.set(internalName, global); } + this.currentFilespace.members.set(simpleName, global); if (declaration.range.source.isEntry) { if (this.moduleLevelExports.has(internalName)) { this.error( @@ -2144,11 +2211,13 @@ export class Program extends DiagnosticEmitter { } default: { // enums or other namespace-like elements let members = target.members; - let member: Element | null; - if (members && (member = members.get(propertyName))) { - this.resolvedThisExpression = targetExpression; - this.resolvedElementExpression = null; - return member; // static ENUMVALUE, static GLOBAL, static FUNCTION_PROTOTYPE... + if (members) { + let member = members.get(propertyName); + if (member) { + this.resolvedThisExpression = targetExpression; + this.resolvedElementExpression = null; + return member; // static ENUMVALUE, static GLOBAL, static FUNCTION_PROTOTYPE... + } } break; } @@ -2373,7 +2442,9 @@ export enum ElementKind { /** A {@link Property}. */ PROPERTY, /** A {@link Namespace}. */ - NAMESPACE + NAMESPACE, + /** A {@link Filespace}. */ + FILESPACE, } /** Indicates traits of a {@link Node} or {@link Element}. */ @@ -2515,7 +2586,25 @@ export abstract class Element { hasDecorator(flag: DecoratorFlags): bool { return (this.decoratorFlags & flag) == flag; } } -/** A namespace. */ +/** A filespace representing the implicit top-level namespace of a source. */ +export class Filespace extends Element { + + kind = ElementKind.FILESPACE; + + /** File members (externally visible only). */ + members: Map; // more specific + + /** Constructs a new filespace. */ + constructor( + program: Program, + source: Source + ) { + super(program, source.internalPath, FILESPACE_PREFIX + source.internalPath); + this.members = new Map(); + } +} + +/** A namespace that differs from a filespace in being user-declared with a name. */ export class Namespace extends Element { // All elements have namespace semantics. This is an explicitly declared one. diff --git a/tests/compiler/import.optimized.wat b/tests/compiler/import.optimized.wat index 39a84b87..d330a25d 100644 --- a/tests/compiler/import.optimized.wat +++ b/tests/compiler/import.optimized.wat @@ -45,5 +45,24 @@ ) ) (call $export/ns.two) + (drop + (i32.add + (i32.add + (call $export/add + (i32.const 1) + (i32.const 2) + ) + (call $export/sub + (i32.const 2) + (i32.const 3) + ) + ) + (call $export/mul + (i32.const 3) + (i32.const 1) + ) + ) + ) + (call $export/ns.two) ) ) diff --git a/tests/compiler/import.ts b/tests/compiler/import.ts index fcbaa9cc..35e127c8 100644 --- a/tests/compiler/import.ts +++ b/tests/compiler/import.ts @@ -1,3 +1,5 @@ +/* tslint:disable:no-duplicate-imports */ + import { add, sub as sub, @@ -11,3 +13,11 @@ import { add(a, b) + sub(b, c) + mul(c, a); renamed_ns.two(); + +import * as other from "./export"; + +other.add(other.a, other.b) + +other.sub(other.b, other.renamed_c) + +other.renamed_mul(other.renamed_c, other.a); + +other.ns.two(); diff --git a/tests/compiler/import.untouched.wat b/tests/compiler/import.untouched.wat index 19ef6331..3eba5519 100644 --- a/tests/compiler/import.untouched.wat +++ b/tests/compiler/import.untouched.wat @@ -55,5 +55,24 @@ ) ) (call $export/ns.two) + (drop + (i32.add + (i32.add + (call $export/add + (i32.const 1) + (i32.const 2) + ) + (call $export/sub + (i32.const 2) + (i32.const 3) + ) + ) + (call $export/mul + (i32.const 3) + (i32.const 1) + ) + ) + ) + (call $export/ns.two) ) )