From 81223977d00875a5f6b1ee04a870a70bdb6e298d Mon Sep 17 00:00:00 2001 From: dcodeIO Date: Sun, 15 Apr 2018 00:34:19 +0200 Subject: [PATCH] Fix external names of class exports and similar; Support a few more kinds in TSDBuilder, see #74 --- dist/assemblyscript.js | 2 +- dist/assemblyscript.js.map | 2 +- src/compiler.ts | 296 +++++++++++++++++++++----- src/definitions.ts | 206 ++++++++++++------ src/program.ts | 72 +++---- src/types.ts | 25 ++- tests/compiler/enum.optimized.wat | 28 +-- tests/compiler/enum.untouched.wat | 28 +-- tests/compiler/export.optimized.wat | 2 +- tests/compiler/export.untouched.wat | 2 +- tests/compiler/exports.optimized.wat | 66 ++++++ tests/compiler/exports.ts | 54 +++++ tests/compiler/exports.untouched.wat | 116 ++++++++++ tests/compiler/showcase.optimized.wat | 8 +- tests/compiler/showcase.untouched.wat | 8 +- 15 files changed, 713 insertions(+), 202 deletions(-) create mode 100644 tests/compiler/exports.optimized.wat create mode 100644 tests/compiler/exports.ts create mode 100644 tests/compiler/exports.untouched.wat diff --git a/dist/assemblyscript.js b/dist/assemblyscript.js index 4993a4fa..da064c9d 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}}}},o=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),o=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)o.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 o};Object.defineProperty(t,"__esModule",{value:!0});var s=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(){}}(),_=function(){return function(){}}(),d=function(){return function(){}}();function y(e){switch(e){case"[]":return u.INDEXED_GET;case"[]=":return u.INDEXED_SET;case"+":return u.ADD;case"-":return u.SUB;case"*":return u.MUL;case"/":return u.DIV;case"%":return u.REM;case"**":return u.POW;case"&":return u.AND;case"|":return u.OR;case"^":return u.XOR;case"==":return u.EQ;case"!=":return u.NE;case">":return u.GT;case">=":return u.GE;case"<":return u.LT;case"<=":return u.LE}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.ADD=3]="ADD",e[e.SUB=4]="SUB",e[e.MUL=5]="MUL",e[e.DIV=6]="DIV",e[e.REM=7]="REM",e[e.POW=8]="POW",e[e.AND=9]="AND",e[e.OR=10]="OR",e[e.XOR=11]="XOR",e[e.EQ=12]="EQ",e[e.NE=13]="NE",e[e.GT=14]="GT",e[e.GE=15]="GE",e[e.LT=16]="LT",e[e.LE=17]="LE"}(u=t.OperatorKind||(t.OperatorKind={}));var m,g,E,f=new Map,T=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.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+="<"+v+">")}else if(r){var I=r.get(u);if(I)return I}}return(d=this.typesLookup.get(h))||(d=this.typesLookup.get(u))?d:(n&&this.error(s.DiagnosticCode.Cannot_find_name_0,o.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(s.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(s.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range.atEnd,i.toString(10),"0"),null;for(var o=new Array(i),c=0;c"),n=new x(this,K,w,C||l,t),this.instances.set(r,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),o=new r(this.program,i,n.internalName+"<"+a+">"+t.INSTANCE_DELIMITER+i,this.declaration,n,this.decoratorFlags);return o.flags=this.flags,o.operatorKind=this.operatorKind,o.classTypeArguments=e,o},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){var t;switch(e.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")}if(t.length>0)return t[t.length-1];var r=this.addLocal(e);return t.push(r),r},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){var r=this.debugLocations;if(r)for(var n=0,i=r.length;n",S+="<"+n+">"),(i=new P(this,C,S,e,A)).contextualTypeArguments=r,this.instances.set(n,i);var O,b,L,k,x,R,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 W=H.value;switch(W.kind){case m.FIELD_PROTOTYPE:i.members||(i.members=new Map);var X=W.declaration;if(!X.type)throw new Error("type expected");var Y=this.program.resolveType(X.type,i.contextualTypeArguments);if(Y){var Q=new D(W,S+t.INSTANCE_DELIMITER+W.simpleName,Y,X);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(W.simpleName,Q)}break;case m.FUNCTION_PROTOTYPE:i.members||(i.members=new Map);var q=W.resolvePartial(e);q&&(q.internalName=S+t.INSTANCE_DELIMITER+q.simpleName,i.members.set(W.simpleName,q));break;case m.PROPERTY:i.members||(i.members=new Map);var j=assert(W.getterPrototype),Z=W.setterPrototype,$=new U(this.program,W.simpleName,S+t.INSTANCE_DELIMITER+W.simpleName,this),J=j.resolvePartial(e);if(!J)return null;if(J.internalName=S+t.INSTANCE_DELIMITER+J.simpleName,$.getterPrototype=J,Z){var ee=Z.resolvePartial(e);if(!ee)return null;ee.internalName=S+t.INSTANCE_DELIMITER+ee.simpleName,$.setterPrototype=ee}i.members.set(W.simpleName,$);break;default:assert(!1)}}}catch(e){x={error:e}}finally{try{H&&!H.done&&(R=V.return)&&R.call(V)}finally{if(x)throw x.error}}try{for(var te=a(this.overloadPrototypes),re=te.next();!re.done;re=te.next()){var ne=o(re.value,2),ie=ne[0],ae=ne[1];assert(ie!=u.INVALID);var oe=void 0;if(ae.is(g.INSTANCE)){var se=ae.resolvePartial(e);if(!se)continue;oe=se.resolve()}else oe=ae.resolve();if(oe){var ce=i.overloads;ce||(i.overloads=ce=new Map),ce.set(ie,oe)}}}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}(I);t.ClassPrototype=F;var P=function(e){function t(t,r,n,i,s){void 0===i&&(i=null),void 0===s&&(s=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=s,s){var p=s.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=o(u.value,2),_=h[0],d=h[1];c.contextualTypeArguments.set(_,d)}}catch(e){E={error:e}}finally{try{u&&!u.done&&(f=l.return)&&f.call(l)}finally{if(E)throw E.error}}}}var y,g,E,f,T=c.prototype.declaration;if(T){var v=T.typeParameters;if(i){if((g=i.length)!=v.length)throw new Error("type argument count mismatch");if(g)for(c.contextualTypeArguments||(c.contextualTypeArguments=new Map),y=0;y0&&!a.isLineBreak(n.charCodeAt(o-1));)o--;for(;s=0;--o)free_memory(a[o])}},e.prototype.createCall=function(e,t,r){var n=u(e),i=l(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=u(e),i=l(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=l(t),i=u(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=u(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=u(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=u(e);try{_BinaryenRemoveFunction(this.ref,t)}finally{free_memory(t)}},e.prototype.addFunctionExport=function(e,t){var r=u(e),n=u(t);try{return _BinaryenAddFunctionExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addTableExport=function(e,t){var r=u(e),n=u(t);try{return _BinaryenAddTableExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addMemoryExport=function(e,t){var r=u(e),n=u(t);try{return _BinaryenAddMemoryExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addGlobalExport=function(e,t){var r=u(e),n=u(t);try{return _BinaryenAddGlobalExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.removeExport=function(e){var t=u(e);try{_BinaryenRemoveExport(this.ref,t)}finally{free_memory(t)}},e.prototype.addFunctionImport=function(e,t,r,n){var i=u(e),a=u(t),o=u(r);try{return _BinaryenAddFunctionImport(this.ref,i,a,o,n)}finally{free_memory(o),free_memory(a),free_memory(i)}},e.prototype.addTableImport=function(e,t,r){var n=u(e),i=u(t),a=u(r);try{return _BinaryenAddTableImport(this.ref,n,i,a)}finally{free_memory(a),free_memory(i),free_memory(n)}},e.prototype.addMemoryImport=function(e,t,r){var n=u(e),i=u(t),a=u(r);try{return _BinaryenAddMemoryImport(this.ref,n,i,a)}finally{free_memory(a),free_memory(i),free_memory(n)}},e.prototype.addGlobalImport=function(e,t,r,n){var i=u(e),a=u(t),o=u(r);try{return _BinaryenAddGlobalImport(this.ref,i,a,o,n)}finally{free_memory(o),free_memory(a),free_memory(i)}},e.prototype.removeImport=function(e){var t=u(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 o=u(i),s=r.length,c=new Array(s),h=new Array(s),_=new Array(s),d=0;d=0;--d)free_memory(c[d]);free_memory(o)}},e.prototype.setFunctionTable=function(e){var t=l(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.validate=function(){return 1==_BinaryenModuleValidate(this.ref)},e.prototype.interpret=function(){_BinaryenModuleInterpret(this.ref)},e.prototype.toBinary=function(e){var t=this.out,r=u(e),n=0,i=0;try{_BinaryenModuleAllocateAndWrite(t,this.ref,r),n=h(t);var a=h(t+4);i=h(t+8);var o=new d;return o.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){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 h(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,o=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++)))):o.push((31&t)<<6|r)):o.push(t);return String.fromCodePoints(o)}t.Relooper=c,t.readString=_;var d=function(){return function(){}}();t.BinaryModule=d},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),o=r(6);t.Token=o.Token,t.Range=o.Range;var s,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.LITERAL=13]="LITERAL",e[e.NEW=14]="NEW",e[e.NULL=15]="NULL",e[e.PARENTHESIZED=16]="PARENTHESIZED",e[e.PROPERTYACCESS=17]="PROPERTYACCESS",e[e.TERNARY=18]="TERNARY",e[e.SUPER=19]="SUPER",e[e.THIS=20]="THIS",e[e.TRUE=21]="TRUE",e[e.CONSTRUCTOR=22]="CONSTRUCTOR",e[e.UNARYPOSTFIX=23]="UNARYPOSTFIX",e[e.UNARYPREFIX=24]="UNARYPREFIX",e[e.BLOCK=25]="BLOCK",e[e.BREAK=26]="BREAK",e[e.CONTINUE=27]="CONTINUE",e[e.DO=28]="DO",e[e.EMPTY=29]="EMPTY",e[e.EXPORT=30]="EXPORT",e[e.EXPORTIMPORT=31]="EXPORTIMPORT",e[e.EXPRESSION=32]="EXPRESSION",e[e.FOR=33]="FOR",e[e.IF=34]="IF",e[e.IMPORT=35]="IMPORT",e[e.RETURN=36]="RETURN",e[e.SWITCH=37]="SWITCH",e[e.THROW=38]="THROW",e[e.TRY=39]="TRY",e[e.VARIABLE=40]="VARIABLE",e[e.VOID=41]="VOID",e[e.WHILE=42]="WHILE",e[e.CLASSDECLARATION=43]="CLASSDECLARATION",e[e.ENUMDECLARATION=44]="ENUMDECLARATION",e[e.ENUMVALUEDECLARATION=45]="ENUMVALUEDECLARATION",e[e.FIELDDECLARATION=46]="FIELDDECLARATION",e[e.FUNCTIONDECLARATION=47]="FUNCTIONDECLARATION",e[e.IMPORTDECLARATION=48]="IMPORTDECLARATION",e[e.INTERFACEDECLARATION=49]="INTERFACEDECLARATION",e[e.METHODDECLARATION=50]="METHODDECLARATION",e[e.NAMESPACEDECLARATION=51]="NAMESPACEDECLARATION",e[e.TYPEDECLARATION=52]="TYPEDECLARATION",e[e.VARIABLEDECLARATION=53]="VARIABLEDECLARATION",e[e.DECORATOR=54]="DECORATOR",e[e.EXPORTMEMBER=55]="EXPORTMEMBER",e[e.SWITCHCASE=56]="SWITCHCASE",e[e.COMMENT=57]="COMMENT"}(s=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&&Re(t,i),i.isNullable=r,i},e.createOmittedType=function(t){return e.createType(e.createIdentifierExpression("",t),null,!1,t)},e.createTypeParameter=function(e,t,r){var n=new 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 _;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.parameterTypes=e,Re(e,a),a.returnType=t,t.parent=a,a.explicitThisType=r,r&&(r.parent=a),a.isNullable=n,a},e.createDecorator=function(e,t,r){var n=new g;return n.range=r,n.name=e,e.parent=n,n.arguments=t,t&&Re(t,n),n.decoratorKind=e.kind==s.IDENTIFIER?m(e.text):d.CUSTOM,n},e.createComment=function(e,t,r){var n=new E;return n.range=r,n.commentKind=t,n.text=e,n},e.createIdentifierExpression=function(e,t){var r=new v;return r.range=t,r.text=e,r},e.createEmptyIdentifierExpression=function(e){var t=new v;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}(j);t.ClassDeclaration=ee;var te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.CONTINUE,t}return i(t,e),t}(Q);t.ContinueStatement=te;var re=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.DO,t}return i(t,e),t}(Q);t.DoStatement=re;var ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EMPTY,t}return i(t,e),t}(Q);t.EmptyStatement=ne;var ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMDECLARATION,t}return i(t,e),t}(j);t.EnumDeclaration=ie;var ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMVALUEDECLARATION,t}return i(t,e),t}(j);t.EnumValueDeclaration=ae;var oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORTIMPORT,t}return i(t,e),t}(p);t.ExportImportStatement=oe;var se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORTMEMBER,t}return i(t,e),t}(p);t.ExportMember=se;var ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORT,t}return i(t,e),t}(Q);t.ExportStatement=ce;var pe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPRESSION,t}return i(t,e),t}(Q);t.ExpressionStatement=pe;var le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FIELDDECLARATION,t.parameterIndex=-1,t}return i(t,e),t}(Z);t.FieldDeclaration=le;var ue=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FOR,t}return i(t,e),t}(Q);t.ForStatement=ue;var he=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FUNCTIONDECLARATION,t}return 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}(j);t.FunctionDeclaration=he;var _e=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IF,t}return i(t,e),t}(Q);t.IfStatement=_e;var de=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORTDECLARATION,t}return i(t,e),t}(j);t.ImportDeclaration=de;var ye=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORT,t}return i(t,e),t}(Q);t.ImportStatement=ye;var me=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.INTERFACEDECLARATION,t}return i(t,e),t}(ee);t.InterfaceDeclaration=me;var ge=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.METHODDECLARATION,t}return i(t,e),t}(he);t.MethodDeclaration=ge;var Ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.NAMESPACEDECLARATION,t}return i(t,e),t}(j);t.NamespaceDeclaration=Ee;var fe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.RETURN,t}return i(t,e),t}(Q);t.ReturnStatement=fe;var Te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCHCASE,t}return i(t,e),t}(p);t.SwitchCase=Te;var ve=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCH,t}return i(t,e),t}(Q);t.SwitchStatement=ve;var Ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.THROW,t}return i(t,e),t}(Q);t.ThrowStatement=Ie;var Ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TRY,t}return i(t,e),t}(Q);t.TryStatement=Ae;var Ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TYPEDECLARATION,t}return i(t,e),t}(j);t.TypeDeclaration=Ne;var Ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLEDECLARATION,t}return i(t,e),t}(Z);t.VariableDeclaration=Ce;var Se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLE,t}return i(t,e),t}(Q);t.VariableStatement=Se;var Oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VOID,t}return i(t,e),t}(Q);t.VoidStatement=Oe;var be=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.WHILE,t}return i(t,e),t}(Q);function Le(e,t){if(t)for(var r=0,n=t.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 u=function(){function e(e,t,r){this.debugInfoRef=0,this.source=e,this.start=t,this.end=r}return e.join=function(t,r){if(t.source!=r.source)throw new Error("source mismatch");return new e(t.source,t.startr.end?t.end:r.end)},Object.defineProperty(e.prototype,"atStart",{get:function(){return new e(this.source,this.start,this.start)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"atEnd",{get:function(){return new e(this.source,this.end,this.end)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"line",{get:function(){for(var e=this.source.text,t=1,r=this.start;r>=0;--r)10==e.charCodeAt(r)&&t++;return t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"column",{get:function(){for(var e=this.source.text,t=0,r=this.start-1;r>=0&&10!=e.charCodeAt(r);--r)++t;return t},enumerable:!0,configurable:!0}),e.prototype.toString=function(){return this.source.text.substring(this.start,this.end)},e}();t.Range=u;var h=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,r)||this;n.end=0,n.pos=0,n.token=-1,n.tokenPos=0,n.nextToken=-1,n.nextTokenPos=0,n.nextTokenOnNewLine=!1,n.onComment=null,n.source=t,n.pos=0,n.end=t.text.length,n.diagnostics=r||new Array;var i=t.text;if(n.pos1&&this.pos2&&this.pos1&&this.pos1&&this.pos1&&this.pos2&&this.pos1&&this.pos1&&this.pos1&&this.pos2&&this.pos+11&&this.pos1&&this.pos2&&this.pos1&&this.pos2&&this.pos1&&this.pos2&&this.pos3&&this.pos1&&this.pos1&&this.posi;)if(c.isLineBreak(n.charCodeAt(this.tokenPos))){this.nextTokenOnNewLine=!0;break}this.pos=i,this.token=a,this.tokenPos=o}return this.nextToken},t.prototype.skip=function(e){var t=this.pos,r=this.token,n=this.tokenPos,i=i32.MAX_VALUE;switch(e){case a.GREATERTHAN:i=1}return this.token=this.unsafeNext(e==a.IDENTIFIER,i),this.token==e?(this.nextToken=-1,!0):(this.pos=t,this.token=r,this.tokenPos=n,!1)},t.prototype.mark=function(){var e;return d?(e=d,d=null):e=new _,e.pos=this.pos,e.token=this.token,e.tokenPos=this.tokenPos,e},t.prototype.discard=function(e){d=e},t.prototype.reset=function(e){this.pos=e.pos,this.token=e.token,this.tokenPos=e.tokenPos,this.nextToken=-1,d=e},t.prototype.range=function(e,t){return void 0===e&&(e=-1),void 0===t&&(t=-1),e<0?(e=this.tokenPos,t=this.pos):t<0&&(t=e),new u(this.source,e,t)},t.prototype.readIdentifier=function(){for(var e=this.source.text,t=this.pos;++this.pos=this.end){n+=e.substring(r,this.pos),this.error(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(c.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(c.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)break;t++}return!0},t.prototype.readInteger=function(){var e=this.source.text;if(48==e.charCodeAt(this.pos)&&this.pos+2=48&&i<=57)r=i64_add(i64_mul(r,n),i64_new(i-48,0));else if(i>=65&&i<=70)r=i64_add(i64_mul(r,n),i64_new(10+i-65,0));else{if(!(i>=97&&i<=102))break;r=i64_add(i64_mul(r,n),i64_new(10+i-97,0))}++this.pos}return this.pos==t&&this.error(o.DiagnosticCode.Hexadecimal_digit_expected,this.range(t)),r},t.prototype.readDecimalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(10,0);this.pos=48&&i<=57))break;r=i64_add(i64_mul(r,n),i64_new(i-48,0)),++this.pos}return this.pos==t&&this.error(o.DiagnosticCode.Digit_expected,this.range(t)),r},t.prototype.readOctalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(8,0);this.pos=48&&i<=55))break;r=i64_add(i64_mul(r,n),i64_new(i-48,0)),++this.pos}return this.pos==t&&this.error(o.DiagnosticCode.Octal_digit_expected,this.range(t)),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);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=h;var _=function(){return function(){}}();t.State=_;var d=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.SIZE=16]="SIZE",e[e.SMALL=32]="SMALL",e[e.LONG=64]="LONG",e[e.VALUE=128]="VALUE",e[e.REFERENCE=256]="REFERENCE",e[e.NULLABLE=512]="NULLABLE",e[e.THIS=1024]="THIS"}(t.TypeFlags||(t.TypeFlags={}));var i=function(){function e(e,t,r){this.nullableType=null,this.thisType=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 e.prototype.computeSmallIntegerShift=function(e){return e.size-this.size},e.prototype.computeSmallIntegerMask=function(e){return-1>>>e.size-this.size},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.nullableType||(assert(!this.is(512)),this.nullableType=new e(this.kind,512|this.flags,this.size),this.nullableType.classReference=this.classReference,this.nullableType.signatureReference=this.signatureReference),this.nullableType},e.prototype.asThis=function(){var t=this.thisType;return t||((t=new e(this.kind,1024|this.flags,this.size)).classReference=this.classReference,t.nullableType=this.nullableType,t.nonNullableType=this.nonNullableType,this.thisType=t,t)},e.prototype.isAssignableTo=function(e,t){var r,n,i,a;if(void 0===t&&(t=!1),this.is(256)){if(e.is(256))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){switch(void 0===e&&(e=!1),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:var t=this.signatureReference;return e||!t?"u32":t.toString(!0);case 8:return"u64";case 9:var r=this.classReference;return e||!r?"usize":r.toString();case 10:return"bool";case 11:return"f32";case 12:return"f64";case 13:return"void";default:return assert(!1),""}},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]:s(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 o=0;o=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 o=null;function s(e){o||(o=[]);for(var t=o.length;t<=e;++t)o.push("arg$"+t.toString(10));return o[e-1]}t.getGenericParameterName=s},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 o,s=r(21),c=r(2),p=r(3),l=r(0),u=r(6),h=r(4),_=r(7),d=r(1);!function(e){e[e.WASM32=0]="WASM32",e[e.WASM64=1]="WASM64"}(o=t.Target||(t.Target={}));var y=function(){function e(){this.target=o.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}return Object.defineProperty(e.prototype,"isWasm64",{get:function(){return this.target==o.WASM64},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"usizeType",{get:function(){return this.target==o.WASM64?_.Type.usize64:_.Type.usize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isizeType",{get:function(){return this.target==o.WASM64?_.Type.isize64:_.Type.isize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"nativeSizeType",{get:function(){return this.target==o.WASM64?p.NativeType.I64:p.NativeType.I32},enumerable:!0,configurable:!0}),e}();t.Options=y,function(e){e[e.NONE=0]="NONE",e[e.IMPLICIT=1]="IMPLICIT",e[e.EXPLICIT=2]="EXPLICIT"}(t.ConversionKind||(t.ConversionKind={}));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=_.Type.void,n.startFunctionBody=[],n.memorySegments=new Array,n.stringSegments=new Map,n.functionTable=new Array,n.argumentCountRef=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,r.usizeType.byteSize)),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 _.Signature([],_.Type.void));this.startFunction=i,this.currentFunction=i;for(var a=r.sources,o=0,s=a.length;o"),!1;e.type=this.currentType}else assert(!1);var a=e.type.toNativeType(),o=e.isAny(l.CommonFlags.CONST)||e.is(l.CommonFlags.STATIC|l.CommonFlags.READONLY);if(e.is(l.CommonFlags.AMBIENT))return o?(e.set(l.CommonFlags.MODULE_IMPORT),t.addGlobalImport(e.internalName,e.namespace?e.namespace.simpleName:"env",e.simpleName,a),e.set(l.CommonFlags.COMPILED),!0):(this.error(c.DiagnosticCode.Operation_not_supported,assert(r).range),!1);var s=!1;e.is(l.CommonFlags.INLINED)?n=this.compileInlineConstant(e,e.type,!0):r&&r.initializer?(n||(n=this.compileExpression(r.initializer,e.type)),_BinaryenExpressionGetId(n)!=p.ExpressionId.Const&&(o?(n=this.precomputeExpressionRef(n),_BinaryenExpressionGetId(n)!=p.ExpressionId.Const&&(this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,r.range),s=!0)):s=!0)):n=e.type.toNativeZero(t);var u=e.internalName;if(s)t.addGlobal(u,a,!0,e.type.toNativeZero(t)),this.startFunctionBody.push(t.createSetGlobal(u,n));else if(o){switch(_BinaryenExpressionGetType(n)){case p.NativeType.I32:e.constantValueKind=1,e.constantIntegerValue=i64_new(_BinaryenConstGetValueI32(n),0);break;case p.NativeType.I64:e.constantValueKind=1,e.constantIntegerValue=i64_new(_BinaryenConstGetValueI64Low(n),_BinaryenConstGetValueI64High(n));break;case p.NativeType.F32:e.constantValueKind=2,e.constantFloatValue=_BinaryenConstGetValueF32(n);break;case p.NativeType.F64:e.constantValueKind=2,e.constantFloatValue=_BinaryenConstGetValueF64(n);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,assert(e.declaration).range),e.constantValueKind=1,e.constantIntegerValue=i64_new(0)}e.set(l.CommonFlags.INLINED),r?(r.isTopLevel&&t.addGlobal(u,a,!1,n),r.range.source.isEntry&&r.isTopLevelExport&&t.addGlobalExport(e.internalName,r.programLevelInternalName)):assert(!1)}else t.addGlobal(u,a,!o,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 o=a(e.members.values()),s=o.next();!s.done;s=o.next()){var u=s.value;if(u.kind==l.ElementKind.ENUMVALUE){var h=!1,d=u,y=d.declaration;if(d.set(l.CommonFlags.COMPILED),d.is(l.CommonFlags.INLINED))e.declaration.isTopLevelExport&&t.addGlobal(d.internalName,p.NativeType.I32,!1,t.createI32(d.constantValue));else{var m=void 0;y.value?(m=this.compileExpression(y.value,_.Type.i32),_BinaryenExpressionGetId(m)!=p.ExpressionId.Const&&(m=this.precomputeExpressionRef(m),_BinaryenExpressionGetId(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(d.internalName,p.NativeType.I32,!0,t.createI32(0)),this.startFunctionBody.push(t.createSetGlobal(d.internalName,m))):(t.addGlobal(d.internalName,p.NativeType.I32,!1,m),_BinaryenExpressionGetType(m)==p.NativeType.I32?(d.constantValue=_BinaryenConstGetValueI32(m),d.set(l.CommonFlags.INLINED)):(assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,y.range),d.constantValue=0))}i=d,e.declaration.range.source.isEntry&&e.declaration.isTopLevelExport&&(u.is(l.CommonFlags.INLINED)?t.addGlobalExport(u.internalName,u.internalName):y&&this.warning(c.DiagnosticCode.Cannot_export_a_mutable_global,y.range))}}}catch(e){r={error:e}}finally{try{s&&!s.done&&(n=o.return)&&n.call(o)}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){var t,r=e.parameterTypes.length,n=e.thisType,i=0;n?((t=new Array(1+r))[0]=n.toNativeType(),i=1):t=new Array(r);for(var a=0;a=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")+"|"+n);var y=t.createBlock("case0|"+n,c,p.NativeType.None),m=!0,g=!0,E=!0;for(h=0;h=0){I=r.flow;m&&I.set(1),g&&I.set(2),E&&I.set(16)}return y},t.prototype.compileThrowStatement=function(e){var t=this.currentFunction.flow;return t.set(2),t.set(1),s.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 o=0;o");continue}m=this.currentType}var E=!1;if(d.is(l.CommonFlags.CONST))if(g)if(g=this.precomputeExpressionRef(g),_BinaryenExpressionGetId(g)==p.ExpressionId.Const){var f=new l.Local(r,y,-1,m);switch(_BinaryenExpressionGetType(g)){case p.NativeType.I32:f=f.withConstantIntegerValue(_BinaryenConstGetValueI32(g),0);break;case p.NativeType.I64:f=f.withConstantIntegerValue(_BinaryenConstGetValueI64Low(g),_BinaryenConstGetValueI64High(g));break;case p.NativeType.F32:f=f.withConstantFloatValue(_BinaryenConstGetValueF32(g));break;case p.NativeType.F64:f=f.withConstantFloatValue(_BinaryenConstGetValueF64(g));break;default:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,d.range),this.module.createUnreachable()}var T=n.flow.scopedLocals;if(T){if(T.has(y))return this.error(c.DiagnosticCode.Duplicate_identifier_0,d.name.range,y),this.module.createUnreachable()}else n.flow.scopedLocals=T=new Map;T.set(y,f),E=!0}else this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,d.range);else this.error(c.DiagnosticCode._const_declarations_must_be_initialized,d.range);E||(d.isAny(l.CommonFlags.LET|l.CommonFlags.CONST)||u.is(1024)?u.addScopedLocal(m,y,d):n.addLocal(m,y,d),g&&s.push(this.compileAssignmentWithValue(d.name,g)))}return s.length?1==s.length?s[0]:this.module.createBlock(null,s,p.NativeType.None):0},t.prototype.compileVoidStatement=function(e){return this.compileExpression(e.expression,_.Type.void,2,!1)},t.prototype.compileWhileStatement=function(e){var t=this.module,r=T(this.compileExpression(e.condition,_.Type.i32,0),this.currentType,t);if(this.currentFunction.isAny(l.CommonFlags.GENERIC|l.CommonFlags.GENERIC_CONTEXT)&&_BinaryenExpressionGetId(r=this.precomputeExpressionRef(r))==p.ExpressionId.Const&&_BinaryenExpressionGetType(r)==p.NativeType.I32&&!_BinaryenConstGetValueI32(r))return t.createNop();var n=this.currentFunction,i=n.enterBreakContext(),a=n.flow.enterBranchOrScope();n.flow=a;var o="break|"+i;a.breakLabel=o;var s="continue|"+i;a.continueLabel=s;var c=this.compileStatement(e.statement);n.flow=a.leaveBranchOrScope(),n.leaveBreakContext();var u=t.createBlock(o,[t.createLoop(s,t.createIf(r,t.createBlock(null,[c,t.createBreak(s)],p.NativeType.None)))],p.NativeType.None);return u},t.prototype.compileInlineConstant=function(e,t,r){assert(e.is(l.CommonFlags.INLINED));var n=e.type;switch(!r&&n.is(4)&&t.is(4)&&n.size>i:0);case 5:case 6:case 10:var a=e.type.computeSmallIntegerMask(_.Type.i32);return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue)&a:0);case 2:case 7:return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 4:case 9:if(!e.program.options.isWasm64)return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 3:case 8:return 1==e.constantValueKind?this.module.createI64(i64_low(e.constantIntegerValue),i64_high(e.constantIntegerValue)):this.module.createI64(0);case 11:return this.module.createF32(e.constantFloatValue);case 12:return this.module.createF64(e.constantFloatValue);default:return assert(!1),this.module.createUnreachable()}},t.prototype.compileExpression=function(e,t,r,n){var i;switch(void 0===r&&(r=1),void 0===n&&(n=!0),this.currentType=t,e.kind){case h.NodeKind.ASSERTION:i=this.compileAssertionExpression(e,t);break;case h.NodeKind.BINARY:i=this.compileBinaryExpression(e,t,n);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.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,n);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,n);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),i=this.module.createUnreachable()}var a=this.currentType;return 0!=r&&a!=t&&(i=this.convertExpression(i,a,t,r,e),this.currentType=t),this.options.sourceMap&&g(i,e.range,this.module,this.currentFunction),i},t.prototype.compileExpressionRetainType=function(e,t,r){return void 0===r&&(r=!0),this.compileExpression(e,t==_.Type.void?_.Type.i32:t,0,r)},t.prototype.precomputeExpression=function(e,t,r){return void 0===r&&(r=1),this.precomputeExpressionRef(this.compileExpression(e,t,r))},t.prototype.precomputeExpressionRef=function(e){var t=this.module,r=this.currentType,n=r.toNativeType(),i=t.getFunctionTypeBySignature(n,null);i||(i=t.addFunctionType(r.toSignatureString(),n,null));var a=t.addFunction("__precompute",i,null,e);t.runPasses(["precompute"],a);var o=_BinaryenFunctionGetBody(a);return t.removeFunction("__precompute"),o},t.prototype.convertExpression=function(e,t,r,n,i){assert(0!=n);var a=this.module;return 13==t.kind?(assert(13!=r.kind),this.error(c.DiagnosticCode.Type_0_is_not_assignable_to_type_1,i.range,t.toString(),r.toString()),a.createUnreachable()):13==r.kind?a.createDrop(e):(1!=n||t.isAssignableTo(r)||this.error(c.DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast,i.range,t.toString(),r.toString()),t.is(8)?r.is(8)?11==t.kind?12==r.kind&&(e=a.createUnary(p.UnaryOp.PromoteF32,e)):11==r.kind&&(e=a.createUnary(p.UnaryOp.DemoteF64,e)):r.is(4)?11==t.kind?r.is(1)?r.is(64)?e=a.createUnary(p.UnaryOp.TruncF32ToI64,e):(e=a.createUnary(p.UnaryOp.TruncF32ToI32,e),r.is(32)&&(e=E(e,r,a))):r.is(64)?e=a.createUnary(p.UnaryOp.TruncF32ToU64,e):(e=a.createUnary(p.UnaryOp.TruncF32ToU32,e),r.is(32)&&(e=E(e,r,a))):r.is(1)?r.is(64)?e=a.createUnary(p.UnaryOp.TruncF64ToI64,e):(e=a.createUnary(p.UnaryOp.TruncF64ToI32,e),r.is(32)&&(e=E(e,r,a))):r.is(64)?e=a.createUnary(p.UnaryOp.TruncF64ToU64,e):(e=a.createUnary(p.UnaryOp.TruncF64ToU32,e),r.is(32)&&(e=E(e,r,a))):(assert(0==r.flags,"void type expected"),e=a.createDrop(e)):t.is(4)&&r.is(8)?e=11==r.kind?t.is(64)?a.createUnary(t.is(1)?p.UnaryOp.ConvertI64ToF32:p.UnaryOp.ConvertU64ToF32,e):a.createUnary(t.is(1)?p.UnaryOp.ConvertI32ToF32:p.UnaryOp.ConvertU32ToF32,e):t.is(64)?a.createUnary(t.is(1)?p.UnaryOp.ConvertI64ToF64:p.UnaryOp.ConvertU64ToF64,e):a.createUnary(t.is(1)?p.UnaryOp.ConvertI32ToF64:p.UnaryOp.ConvertU32ToF64,e):t.is(64)?r.is(64)||(e=a.createUnary(p.UnaryOp.WrapI64,e),r.is(32)&&(e=E(e,r,a))):r.is(64)?e=a.createUnary(r.is(1)?p.UnaryOp.ExtendI32:p.UnaryOp.ExtendU32,e):r.is(32)&&(t.size>r.size||t.size==r.size&&t.is(1)!=r.is(1))&&(e=E(e,r,a)),this.currentType=r,e)},t.prototype.compileAssertionExpression=function(e,t){var r=this.program.resolveType(e.toType,this.currentFunction.flow.contextualTypeArguments);return r?this.compileExpression(e.expression,r,2):this.module.createUnreachable()},t.prototype.compileBinaryExpression=function(e,t,r){void 0===r&&(r=!0);var n,i,a,o,s,h,d,y=this.module,m=e.left,g=e.right,f=!1,v=!1,I=null,A=e.operator;switch(A){case u.Token.LESSTHAN:if(n=this.compileExpressionRetainType(m,t),O=(i=this.currentType).classReference)if(b=O.lookupOverload(l.OperatorKind.LT)){d=this.compileBinaryOverload(b,m,g,e);break}if(a=this.compileExpressionRetainType(g,i),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!0)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"<",i.toString(),o.toString()),this.currentType=t,y.createUnreachable();switch(n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g),s.kind){case 0:case 1:case 2:d=y.createBinary(p.BinaryOp.LtI32,n,a);break;case 3:d=y.createBinary(p.BinaryOp.LtI64,n,a);break;case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.LtI64:p.BinaryOp.LtI32,n,a);break;case 5:case 6:case 7:case 10:d=y.createBinary(p.BinaryOp.LtU32,n,a);break;case 9:d=y.createBinary(this.options.isWasm64?p.BinaryOp.LtU64:p.BinaryOp.LtU32,n,a);break;case 8:d=y.createBinary(p.BinaryOp.LtU64,n,a);break;case 11:d=y.createBinary(p.BinaryOp.LtF32,n,a);break;case 12:d=y.createBinary(p.BinaryOp.LtF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}this.currentType=_.Type.bool;break;case u.Token.GREATERTHAN:if(n=this.compileExpressionRetainType(m,t),O=(i=this.currentType).classReference)if(b=O.lookupOverload(l.OperatorKind.GT)){d=this.compileBinaryOverload(b,m,g,e);break}if(a=this.compileExpressionRetainType(g,i),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!0)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,">",i.toString(),o.toString()),this.currentType=t,y.createUnreachable();switch(n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g),s.kind){case 0:case 1:case 2:d=y.createBinary(p.BinaryOp.GtI32,n,a);break;case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.GtI64:p.BinaryOp.GtI32,n,a);break;case 3:d=y.createBinary(p.BinaryOp.GtI64,n,a);break;case 5:case 6:case 7:case 10:d=y.createBinary(p.BinaryOp.GtU32,n,a);break;case 9:d=y.createBinary(this.options.isWasm64?p.BinaryOp.GtU64:p.BinaryOp.GtU32,n,a);break;case 8:d=y.createBinary(p.BinaryOp.GtU64,n,a);break;case 11:d=y.createBinary(p.BinaryOp.GtF32,n,a);break;case 12:d=y.createBinary(p.BinaryOp.GtF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}this.currentType=_.Type.bool;break;case u.Token.LESSTHAN_EQUALS:if(n=this.compileExpressionRetainType(m,t),O=(i=this.currentType).classReference)if(b=O.lookupOverload(l.OperatorKind.LE)){d=this.compileBinaryOverload(b,m,g,e);break}if(a=this.compileExpressionRetainType(g,i),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!0)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"<=",i.toString(),o.toString()),this.currentType=t,y.createUnreachable();switch(n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g),s.kind){case 0:case 1:case 2:d=y.createBinary(p.BinaryOp.LeI32,n,a);break;case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.LeI64:p.BinaryOp.LeI32,n,a);break;case 3:d=y.createBinary(p.BinaryOp.LeI64,n,a);break;case 5:case 6:case 7:case 10:d=y.createBinary(p.BinaryOp.LeU32,n,a);break;case 9:d=y.createBinary(this.options.isWasm64?p.BinaryOp.LeU64:p.BinaryOp.LeU32,n,a);break;case 8:d=y.createBinary(p.BinaryOp.LeU64,n,a);break;case 11:d=y.createBinary(p.BinaryOp.LeF32,n,a);break;case 12:d=y.createBinary(p.BinaryOp.LeF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}this.currentType=_.Type.bool;break;case u.Token.GREATERTHAN_EQUALS:if(n=this.compileExpressionRetainType(m,t),O=(i=this.currentType).classReference)if(b=O.lookupOverload(l.OperatorKind.GE)){d=this.compileBinaryOverload(b,m,g,e);break}if(a=this.compileExpressionRetainType(g,i),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!0)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,">=",i.toString(),o.toString()),this.currentType=t,y.createUnreachable();switch(n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g),s.kind){case 0:case 1:case 2:d=y.createBinary(p.BinaryOp.GeI32,n,a);break;case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.GeI64:p.BinaryOp.GeI32,n,a);break;case 3:d=y.createBinary(p.BinaryOp.GeI64,n,a);break;case 5:case 6:case 7:case 10:d=y.createBinary(p.BinaryOp.GeU32,n,a);break;case 9:d=y.createBinary(this.options.isWasm64?p.BinaryOp.GeU64:p.BinaryOp.GeU32,n,a);break;case 8:d=y.createBinary(p.BinaryOp.GeU64,n,a);break;case 11:d=y.createBinary(p.BinaryOp.GeF32,n,a);break;case 12:d=y.createBinary(p.BinaryOp.GeF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}this.currentType=_.Type.bool;break;case u.Token.EQUALS_EQUALS_EQUALS:case u.Token.EQUALS_EQUALS:if(n=this.compileExpressionRetainType(m,t),i=this.currentType,A==u.Token.EQUALS_EQUALS)if(O=i.classReference)if(b=O.lookupOverload(l.OperatorKind.EQ)){d=this.compileBinaryOverload(b,m,g,e);break}if(a=this.compileExpressionRetainType(g,i),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,u.operatorTokenToString(e.operator),i.toString(),o.toString()),this.currentType=t,y.createUnreachable();switch(n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:d=y.createBinary(p.BinaryOp.EqI32,n,a);break;case 9:case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.EqI64:p.BinaryOp.EqI32,n,a);break;case 3:case 8:d=y.createBinary(p.BinaryOp.EqI64,n,a);break;case 11:d=y.createBinary(p.BinaryOp.EqF32,n,a);break;case 12:d=y.createBinary(p.BinaryOp.EqF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}this.currentType=_.Type.bool;break;case u.Token.EXCLAMATION_EQUALS_EQUALS:case u.Token.EXCLAMATION_EQUALS:if(n=this.compileExpressionRetainType(m,t),i=this.currentType,A==u.Token.EXCLAMATION_EQUALS)if(O=i.classReference)if(b=O.lookupOverload(l.OperatorKind.NE)){d=this.compileBinaryOverload(b,m,g,e);break}if(a=this.compileExpressionRetainType(g,i),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,u.operatorTokenToString(e.operator),i.toString(),o.toString()),this.currentType=t,y.createUnreachable();switch(n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:d=y.createBinary(p.BinaryOp.NeI32,n,a);break;case 9:case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.NeI64:p.BinaryOp.NeI32,n,a);break;case 3:case 8:d=y.createBinary(p.BinaryOp.NeI64,n,a);break;case 11:d=y.createBinary(p.BinaryOp.NeF32,n,a);break;case 12:d=y.createBinary(p.BinaryOp.NeF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}this.currentType=_.Type.bool;break;case u.Token.EQUALS:return this.compileAssignment(m,g,t);case u.Token.PLUS_EQUALS:f=!0;case u.Token.PLUS:if(n=this.compileExpressionRetainType(m,t,!1),O=(i=this.currentType).classReference)if(b=O.lookupOverload(l.OperatorKind.ADD)){d=this.compileBinaryOverload(b,m,g,e);break}if(f)a=this.compileExpression(g,i,1,!1);else{if(a=this.compileExpressionRetainType(g,i,!1),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"+",i.toString(),o.toString()),this.currentType=t,y.createUnreachable();n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:v=!0;case 2:case 7:d=y.createBinary(p.BinaryOp.AddI32,n,a);break;case 9:case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,n,a);break;case 3:case 8:d=y.createBinary(p.BinaryOp.AddI64,n,a);break;case 11:d=y.createBinary(p.BinaryOp.AddF32,n,a);break;case 12:d=y.createBinary(p.BinaryOp.AddF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}break;case u.Token.MINUS_EQUALS:f=!0;case u.Token.MINUS:if(n=this.compileExpressionRetainType(m,t,!1),O=(i=this.currentType).classReference)if(b=O.lookupOverload(l.OperatorKind.SUB)){d=this.compileBinaryOverload(b,m,g,e);break}if(f)a=this.compileExpression(g,i,1,!1);else{if(a=this.compileExpressionRetainType(g,i,!1),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"-",i.toString(),o.toString()),this.currentType=t,y.createUnreachable();n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:v=!0;case 2:case 7:d=y.createBinary(p.BinaryOp.SubI32,n,a);break;case 9:case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,n,a);break;case 3:case 8:d=y.createBinary(p.BinaryOp.SubI64,n,a);break;case 11:d=y.createBinary(p.BinaryOp.SubF32,n,a);break;case 12:d=y.createBinary(p.BinaryOp.SubF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}break;case u.Token.ASTERISK_EQUALS:f=!0;case u.Token.ASTERISK:if(n=this.compileExpressionRetainType(m,t,!1),O=(i=this.currentType).classReference)if(b=O.lookupOverload(l.OperatorKind.MUL)){d=this.compileBinaryOverload(b,m,g,e);break}if(f)a=this.compileExpression(g,i,1,!1);else{if(a=this.compileExpressionRetainType(g,i,!1),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"*",i.toString(),o.toString()),this.currentType=t,y.createUnreachable();n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:v=!0;case 2:case 7:d=y.createBinary(p.BinaryOp.MulI32,n,a);break;case 9:case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.MulI64:p.BinaryOp.MulI32,n,a);break;case 3:case 8:d=y.createBinary(p.BinaryOp.MulI64,n,a);break;case 11:d=y.createBinary(p.BinaryOp.MulF32,n,a);break;case 12:d=y.createBinary(p.BinaryOp.MulF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}break;case u.Token.ASTERISK_ASTERISK_EQUALS:f=!0;case u.Token.ASTERISK_ASTERISK:if(n=this.compileExpressionRetainType(m,t,!0),O=(i=this.currentType).classReference)if(b=O.lookupOverload(l.OperatorKind.POW)){d=this.compileBinaryOverload(b,m,g,e);break}var N=void 0;if(this.currentType==_.Type.f32){if(a=this.compileExpression(g,this.currentType),!(N=this.f32PowInstance)){if(!(C=this.program.elementsLookup.get("Mathf"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),d=y.createUnreachable();break}if(!(S=C.members?C.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.pow"),d=y.createUnreachable();break}assert(S.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f32PowInstance=N=S.resolve()}}else if(n=this.convertExpression(n,this.currentType,_.Type.f64,1,m),a=this.compileExpression(g,_.Type.f64),!(N=this.f64PowInstance)){if(!(C=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),d=y.createUnreachable();break}if(!(S=C.members?C.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.pow"),d=y.createUnreachable();break}assert(S.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f64PowInstance=N=S.resolve()}d=N&&this.compileFunction(N)?this.makeCallDirect(N,[n,a]):y.createUnreachable();break;case u.Token.SLASH_EQUALS:f=!0;case u.Token.SLASH:if(n=this.compileExpressionRetainType(m,t,!0),O=(i=this.currentType).classReference)if(b=O.lookupOverload(l.OperatorKind.DIV)){d=this.compileBinaryOverload(b,m,g,e);break}if(f)a=this.compileExpression(g,i,1,!1);else{if(a=this.compileExpressionRetainType(g,i,!1),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"/",i.toString(),o.toString()),this.currentType=t,y.createUnreachable();n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g)}switch(this.currentType.kind){case 0:case 1:v=!0;case 2:d=y.createBinary(p.BinaryOp.DivI32,n,a);break;case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.DivI64:p.BinaryOp.DivI32,n,a);break;case 3:d=y.createBinary(p.BinaryOp.DivI64,n,a);break;case 5:case 6:case 10:v=!0;case 7:d=y.createBinary(p.BinaryOp.DivU32,n,a);break;case 9:d=y.createBinary(this.options.isWasm64?p.BinaryOp.DivU64:p.BinaryOp.DivU32,n,a);break;case 8:d=y.createBinary(p.BinaryOp.DivU64,n,a);break;case 11:d=y.createBinary(p.BinaryOp.DivF32,n,a);break;case 12:d=y.createBinary(p.BinaryOp.DivF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}break;case u.Token.PERCENT_EQUALS:f=!0;case u.Token.PERCENT:if(n=this.compileExpressionRetainType(m,t,!0),O=(i=this.currentType).classReference)if(b=O.lookupOverload(l.OperatorKind.REM)){d=this.compileBinaryOverload(b,m,g,e);break}if(f)a=this.compileExpression(g,i,1,!1);else{if(a=this.compileExpressionRetainType(g,i,!1),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"%",i.toString(),o.toString()),this.currentType=t,y.createUnreachable();n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g)}switch(this.currentType.kind){case 0:case 1:case 2:d=y.createBinary(p.BinaryOp.RemI32,n,a);break;case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.RemI64:p.BinaryOp.RemI32,n,a);break;case 3:d=y.createBinary(p.BinaryOp.RemI64,n,a);break;case 5:case 6:case 7:case 10:d=y.createBinary(p.BinaryOp.RemU32,n,a);break;case 9:d=y.createBinary(this.options.isWasm64?p.BinaryOp.RemU64:p.BinaryOp.RemU32,n,a);break;case 8:d=y.createBinary(p.BinaryOp.RemU64,n,a);break;case 11:if(!(N=this.f32ModInstance)){if(!(C=this.program.elementsLookup.get("Mathf"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),d=y.createUnreachable();break}if(!(S=C.members?C.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.mod"),d=y.createUnreachable();break}assert(S.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f32ModInstance=N=S.resolve()}d=N&&this.compileFunction(N)?this.makeCallDirect(N,[n,a]):y.createUnreachable();break;case 12:if(!(N=this.f64ModInstance)){var C,S;if(!(C=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),d=y.createUnreachable();break}if(!(S=C.members?C.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.mod"),d=y.createUnreachable();break}assert(S.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f64ModInstance=N=S.resolve()}d=N&&this.compileFunction(N)?this.makeCallDirect(N,[n,a]):y.createUnreachable();break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}break;case u.Token.LESSTHAN_LESSTHAN_EQUALS:f=!0;case u.Token.LESSTHAN_LESSTHAN:switch(n=this.compileExpressionRetainType(m,t,!1),a=this.compileExpression(g,this.currentType,1,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:v=!0;default:d=y.createBinary(p.BinaryOp.ShlI32,n,a);break;case 3:case 8:d=y.createBinary(p.BinaryOp.ShlI64,n,a);break;case 9:case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.ShlI64:p.BinaryOp.ShlI32,n,a);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()),y.createUnreachable();case 13:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}break;case u.Token.GREATERTHAN_GREATERTHAN_EQUALS:f=!0;case u.Token.GREATERTHAN_GREATERTHAN:switch(n=this.compileExpressionRetainType(m,t,!0),a=this.compileExpression(g,this.currentType,1,!0),this.currentType.kind){default:d=y.createBinary(p.BinaryOp.ShrI32,n,a);break;case 3:d=y.createBinary(p.BinaryOp.ShrI64,n,a);break;case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.ShrI64:p.BinaryOp.ShrI32,n,a);break;case 5:case 6:case 10:case 7:d=y.createBinary(p.BinaryOp.ShrU32,n,a);break;case 8:d=y.createBinary(p.BinaryOp.ShrU64,n,a);break;case 9:d=y.createBinary(this.options.isWasm64?p.BinaryOp.ShrU64:p.BinaryOp.ShrU32,n,a);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()),y.createUnreachable();case 13:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}break;case u.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:f=!0;case u.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:switch(n=this.compileExpressionRetainType(m,t,!0),a=this.compileExpression(g,this.currentType,1,!0),this.currentType.kind){case 0:case 1:v=!0;default:d=y.createBinary(p.BinaryOp.ShrU32,n,a);break;case 3:case 8:d=y.createBinary(p.BinaryOp.ShrU64,n,a);break;case 9:case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.ShrU64:p.BinaryOp.ShrU32,n,a);break;case 13:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}break;case u.Token.AMPERSAND_EQUALS:f=!0;case u.Token.AMPERSAND:if(n=this.compileExpressionRetainType(m,t,!1),O=(i=this.currentType).classReference)if(b=O.lookupOverload(l.OperatorKind.AND)){d=this.compileBinaryOverload(b,m,g,e);break}if(f)a=this.compileExpression(g,i,1,!1);else{if(a=this.compileExpressionRetainType(g,i,!1),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"&",i.toString(),o.toString()),this.currentType=t,y.createUnreachable();n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:v=!0;default:d=y.createBinary(p.BinaryOp.AndI32,n,a);break;case 3:case 8:d=y.createBinary(p.BinaryOp.AndI64,n,a);break;case 9:case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.AndI64:p.BinaryOp.AndI32,n,a);break;case 13:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}break;case u.Token.BAR_EQUALS:f=!0;case u.Token.BAR:if(n=this.compileExpressionRetainType(m,t,!1),O=(i=this.currentType).classReference)if(b=O.lookupOverload(l.OperatorKind.OR)){d=this.compileBinaryOverload(b,m,g,e);break}if(f)a=this.compileExpression(g,i,1,!1);else{if(a=this.compileExpressionRetainType(g,i,!1),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"|",i.toString(),o.toString()),this.currentType=t,y.createUnreachable();n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:v=!0;default:d=y.createBinary(p.BinaryOp.OrI32,n,a);break;case 3:case 8:d=y.createBinary(p.BinaryOp.OrI64,n,a);break;case 9:case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.OrI64:p.BinaryOp.OrI32,n,a);break;case 13:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}break;case u.Token.CARET_EQUALS:f=!0;case u.Token.CARET:var O,b;if(n=this.compileExpressionRetainType(m,t,!1),O=(i=this.currentType).classReference)if(b=O.lookupOverload(l.OperatorKind.XOR)){d=this.compileBinaryOverload(b,m,g,e);break}if(f)a=this.compileExpression(g,i,1,!1);else{if(a=this.compileExpressionRetainType(g,i,!1),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"^",i.toString(),o.toString()),this.currentType=t,y.createUnreachable();n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:v=!0;default:d=y.createBinary(p.BinaryOp.XorI32,n,a);break;case 3:case 8:d=y.createBinary(p.BinaryOp.XorI64,n,a);break;case 9:case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.XorI64:p.BinaryOp.XorI32,n,a);break;case 13:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}break;case u.Token.AMPERSAND_AMPERSAND:n=this.compileExpressionRetainType(m,t),a=this.compileExpression(g,this.currentType,1,!1),(d=y.cloneExpression(n,!0,0))||(I=this.currentFunction.getAndFreeTempLocal(this.currentType),n=y.createTeeLocal(I.index,n)),v=this.currentType.is(36),h=T(n,this.currentType,y),d=d?y.createIf(h,a,d):y.createIf(h,a,y.createGetLocal(assert(I).index,this.currentType.toNativeType()));break;case u.Token.BAR_BAR:n=this.compileExpressionRetainType(m,t),a=this.compileExpression(g,this.currentType,1,!1),(d=this.module.cloneExpression(n,!0,0))||(I=this.currentFunction.getAndFreeTempLocal(this.currentType),n=y.createTeeLocal(I.index,n)),v=this.currentType.is(36),h=T(n,this.currentType,y),d=d?this.module.createIf(h,d,a):y.createIf(h,y.createGetLocal(assert(I).index,this.currentType.toNativeType()),a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=this.module.createUnreachable()}return v&&r&&(assert(this.currentType.is(36)),d=E(d,this.currentType,y)),f?this.compileAssignmentWithValue(m,d,t!=_.Type.void):d},t.prototype.compileUnaryOverload=function(e,t,r){var n,i=0;if(e.is(l.CommonFlags.INSTANCE)){var a=assert(e.memberOf);assert(a.kind==l.ElementKind.CLASS),i=this.compileExpression(t,a.type),n=[]}else n=[t];return this.compileCallDirect(e,n,r,i,e.hasDecorator(l.DecoratorFlags.INLINE))},t.prototype.compileBinaryOverload=function(e,t,r,n){var i,a=0;if(e.is(l.CommonFlags.INSTANCE)){var o=assert(e.memberOf);assert(o.kind==l.ElementKind.CLASS),a=this.compileExpression(t,o.type),i=[r]}else i=[t,r];return this.compileCallDirect(e,i,n,a,e.hasDecorator(l.DecoratorFlags.INLINE))},t.prototype.compileAssignment=function(e,t,r){var n,i=this.program,a=this.currentFunction,o=i.resolveExpression(e,a);if(!o)return this.module.createUnreachable();switch(o.kind){case l.ElementKind.GLOBAL:if(!this.compileGlobal(o))return this.module.createUnreachable();assert(o.type!=_.Type.void);case l.ElementKind.LOCAL:case l.ElementKind.FIELD:n=o.type;break;case l.ElementKind.PROPERTY:var s=o.setterPrototype;if(s){var p=s.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,o.internalName),this.module.createUnreachable();case l.ElementKind.CLASS:if(i.resolvedElementExpression){var u=o.lookupOverload(l.OperatorKind.INDEXED_GET);if(!u)return this.error(c.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,o.internalName),this.module.createUnreachable();n=u.signature.returnType;break}default:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}var h=this.compileExpression(t,n);return this.compileAssignmentWithValue(e,h,r!=_.Type.void)},t.prototype.compileAssignmentWithValue=function(e,t,r){void 0===r&&(r=!1);var n=this.module,i=this.program.resolveExpression(e,this.currentFunction);if(!i)return n.createUnreachable();switch(i.kind){case l.ElementKind.LOCAL:return this.currentType=r?i.type:_.Type.void,i.is(l.CommonFlags.CONST)?(this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable()):r?n.createTeeLocal(i.index,t):n.createSetLocal(i.index,t);case l.ElementKind.GLOBAL:if(!this.compileGlobal(i))return n.createUnreachable();var a=i.type;if(assert(a!=_.Type.void),this.currentType=r?a:_.Type.void,i.is(l.CommonFlags.CONST))return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();if(r){var o=a.toNativeType(),s=i.internalName;return n.createBlock(null,[n.createSetGlobal(s,t),n.createGetGlobal(s,o)],o)}return n.createSetGlobal(i.internalName,t);case l.ElementKind.FIELD:var p=i.declaration;if(i.is(l.CommonFlags.READONLY)&&!this.currentFunction.is(l.CommonFlags.CONSTRUCTOR)&&null!=p&&null==p.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 u=assert(this.program.resolvedThisExpression),h=this.compileExpressionRetainType(u,this.options.usizeType);a=i.type;this.currentType=r?a:_.Type.void;o=a.toNativeType();if(r){var d=this.currentFunction.getAndFreeTempLocal(a).index;return n.createBlock(null,[n.createSetLocal(d,t),n.createStore(a.size>>3,h,n.createGetLocal(d,o),o,i.memoryOffset),n.createGetLocal(d,o)],o)}return n.createStore(a.size>>3,h,t,o,i.memoryOffset);case l.ElementKind.PROPERTY:var y=i.setterPrototype;if(y){var m=y.resolve();if(!m)return n.createUnreachable();if(!r){if(m.is(l.CommonFlags.INSTANCE)){u=assert(this.program.resolvedThisExpression),h=this.compileExpressionRetainType(u,this.options.usizeType);return this.makeCallDirect(m,[h,t])}return this.makeCallDirect(m,[t])}var g=i.getterPrototype;assert(null!=g);var E=g.resolve();if(!E)return n.createUnreachable();var f=(O=E.signature.returnType).toNativeType();if(m.is(l.CommonFlags.INSTANCE)){u=assert(this.program.resolvedThisExpression),h=this.compileExpressionRetainType(u,this.options.usizeType),d=this.currentFunction.getAndFreeTempLocal(O).index;return n.createBlock(null,[this.makeCallDirect(m,[n.createTeeLocal(d,h),t]),this.makeCallDirect(E,[n.createGetLocal(d,f)])],f)}return n.createBlock(null,[this.makeCallDirect(m,[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 T=this.program.resolvedElementExpression;if(T){var v=i.lookupOverload(l.OperatorKind.INDEXED_GET);if(!v)return this.error(c.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,i.internalName),n.createUnreachable();var I=i.lookupOverload(l.OperatorKind.INDEXED_SET);if(!I)return this.error(c.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,i.internalName),this.currentType=r?v.signature.returnType:_.Type.void,n.createUnreachable();var A=i.type,N=(u=assert(this.program.resolvedThisExpression),h=this.compileExpressionRetainType(u,this.options.usizeType),this.compileExpression(T,_.Type.i32));if(r){var C=this.currentFunction.getTempLocal(A),S=this.currentFunction.getAndFreeTempLocal(this.currentType),O=v.signature.returnType;return this.currentFunction.freeTempLocal(C),n.createBlock(null,[this.makeCallDirect(I,[n.createTeeLocal(C.index,h),n.createTeeLocal(S.index,N),t]),this.makeCallDirect(v,[n.createGetLocal(C.index,C.type.toNativeType()),n.createGetLocal(S.index,S.type.toNativeType())])],O.toNativeType())}return this.makeCallDirect(I,[h,N,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,o=this.program.resolveExpression(e.expression,a);if(!o)return i.createUnreachable();switch(o.kind){case l.ElementKind.FUNCTION_PROTOTYPE:var s=o,u=e.typeArguments;if(s.is(l.CommonFlags.AMBIENT|l.CommonFlags.BUILTIN))return this.compileCallExpressionBuiltin(s,e,t);var d=null;if(u){if(!s.is(l.CommonFlags.GENERIC))return this.error(c.DiagnosticCode.Type_0_is_not_generic,e.expression.range,s.internalName),i.createUnreachable();d=s.resolveUsingTypeArguments(u,this.currentFunction.flow.contextualTypeArguments,e)}else{if(s.is(l.CommonFlags.GENERIC)){for(var y=new Map,m=assert(s.declaration.typeParameters),g=m.length,E=0;Eo&&!i)||(this.error(c.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,o.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,o=e.signature;if(!this.checkCallSignature(o,a,0!=n,r))return this.module.createUnreachable();if(i)return assert(!e.is(l.CommonFlags.TRAMPOLINE)),this.compileCallInlineUnchecked(e,t,r,n);var s=n?a+1:a,c=new Array(s),p=0;n&&(c[0]=n,p=1);for(var u=o.parameterTypes,h=0;h=i);var s=this.module;if(!this.compileFunction(e))return s.createUnreachable();var c=e.signature.returnType,p=e.is(l.CommonFlags.MODULE_IMPORT);if(r=a),this.ensureFunctionType(e);var c=this.module;if(n=0),this.currentType=f,this.module.createGetLocal(T,f.toNativeType());case l.ElementKind.GLOBAL:if(E.is(l.CommonFlags.AMBIENT|l.CommonFlags.BUILTIN))return s.compileGetConstant(this,E,e);if(!this.compileGlobal(E))return this.module.createUnreachable();var v=E.type;return assert(v!=_.Type.void),E.is(l.CommonFlags.INLINED)?this.compileInlineConstant(E,t,r):(this.currentType=v,this.module.createGetGlobal(E.internalName,v.toNativeType()));case l.ElementKind.ENUMVALUE:return E.is(l.CommonFlags.COMPILED)?(this.currentType=_.Type.i32,E.is(l.CommonFlags.INLINED)?this.module.createI32(E.constantValue):this.module.createGetGlobal(E.internalName,p.NativeType.I32)):(this.error(c.DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,e.range),this.currentType=_.Type.i32,this.module.createUnreachable());case l.ElementKind.FUNCTION_PROTOTYPE:var A=E.resolve(null,this.currentFunction.flow.contextualTypeArguments);if(!A||!this.compileFunction(A))return n.createUnreachable();var N=this.ensureFunctionTableEntry(A);return this.currentType=A.signature.type,this.module.createI32(N)}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.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.compileStaticArray(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==_.Type.f32?n.createF32(a):(this.currentType=_.Type.f64,n.createF64(a));case h.LiteralKind.INTEGER:var o=e.value;switch(r&&(o=i64_sub(i64_new(0),o)),t.kind){case 0:if(i64_is_i8(o))return n.createI32(i64_low(o));break;case 5:if(i64_is_u8(o))return n.createI32(i64_low(o));break;case 1:if(i64_is_i16(o))return n.createI32(i64_low(o));break;case 6:if(i64_is_u16(o))return n.createI32(i64_low(o));break;case 2:case 7:if(i64_is_i32(o)||i64_is_u32(o))return n.createI32(i64_low(o));break;case 10:if(i64_is_bool(o))return n.createI32(i64_low(o));break;case 4:case 9:if(!this.options.isWasm64){if(i64_is_i32(o)||i64_is_u32(o))return n.createI32(i64_low(o));break}return n.createI64(i64_low(o),i64_high(o));case 3:case 8:return n.createI64(i64_low(o),i64_high(o));case 11:if(i64_is_f32(o))return n.createF32(i64_to_f32(o));break;case 12:if(i64_is_f64(o))return n.createF64(i64_to_f64(o));break;case 13:break;default:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}return i64_is_i32(o)?(this.currentType=_.Type.i32,n.createI32(i64_low(o))):(this.currentType=_.Type.i64,n.createI64(i64_low(o),i64_high(o)));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,o=new Uint8Array(4+2*a);o[0]=255&a,o[1]=a>>>8&255,o[2]=a>>>16&255,o[3]=a>>>24&255;for(var s=0;s>>8&255;i=this.addMemorySegment(o,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.compileStaticArray=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 o=a.resolve([e]);if(!o)return i.createUnreachable();var s,u,h=t.length,_=e.toNativeType();switch(_){case p.NativeType.I32:s=changetype(new Int32Array(h)),u=4*h;break;case p.NativeType.I64:s=changetype(new Array(h)),u=8*h;break;case p.NativeType.F32:s=changetype(new Float32Array(h)),u=4*h;break;case p.NativeType.F64:s=changetype(new Float64Array(h)),u=8*h;break;default:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,r.range),i.createUnreachable()}for(var y,m=new Array(h),g=0;g=0);var h=this.compileExpressionRetainType(u,this.options.usizeType);return this.currentType=a.type,i.createLoad(a.type.size>>3,a.type.is(5),h,a.type.toNativeType(),a.memoryOffset);case l.ElementKind.PROPERTY:var d=a.getterPrototype;if(d){var y=d.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)){var g=assert(y.memberOf);assert(g.kind==l.ElementKind.CLASS);u=assert(n.resolvedThisExpression),h=this.compileExpressionRetainType(u,this.options.usizeType);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=e.ifThen,n=e.ifElse,i=T(this.compileExpression(e.condition,_.Type.u32,0),this.currentType,this.module);if(this.currentFunction.isAny(l.CommonFlags.GENERIC|l.CommonFlags.GENERIC_CONTEXT)&&_BinaryenExpressionGetId(i=this.precomputeExpressionRef(i))==p.ExpressionId.Const&&_BinaryenExpressionGetType(i)==p.NativeType.I32)return _BinaryenConstGetValueI32(i)?this.compileExpression(r,t):this.compileExpression(n,t);var a,o,s=this.currentFunction;if(s.is(l.CommonFlags.CONSTRUCTOR)){var c=s.flow;c=c.enterBranchOrScope(),s.flow=c,a=this.compileExpression(r,t);var u=c.is(16);c=c.leaveBranchOrScope(),s.flow=c,c=c.enterBranchOrScope(),s.flow=c,o=this.compileExpression(n,t);var h=c.is(16);c=c.leaveBranchOrScope(),s.flow=c,u&&h&&c.set(16)}else a=this.compileExpression(r,t),o=this.compileExpression(n,t);return this.module.createIf(i,a,o)},t.prototype.compileUnaryPostfixExpression=function(e,t){var r=this.module,n=this.currentFunction,i=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,!1);if(_BinaryenExpressionGetId(i)==p.ExpressionId.Unreachable)return i;var a,o,s,l,h=this.currentType,d=!1;switch(e.operator){case u.Token.PLUS_PLUS:if(h.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),r.createUnreachable();switch(h.kind){case 0:case 1:case 5:case 6:case 10:d=!0;default:a=p.BinaryOp.AddI32,o=p.NativeType.I32,s=r.createI32(1);break;case 9:case 4:a=(y=this.options).isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,o=y.nativeSizeType,s=h.toNativeOne(r);break;case 3:case 8:a=p.BinaryOp.AddI64,o=p.NativeType.I64,s=r.createI64(1);break;case 11:a=p.BinaryOp.AddF32,o=p.NativeType.F32,s=r.createF32(1);break;case 12:a=p.BinaryOp.AddF64,o=p.NativeType.F64,s=r.createF64(1);break;case 13:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),r.createUnreachable()}break;case u.Token.MINUS_MINUS:if(h.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),r.createUnreachable();switch(h.kind){case 0:case 1:case 5:case 6:case 10:d=!0;default:a=p.BinaryOp.SubI32,o=p.NativeType.I32,s=r.createI32(1);break;case 9:case 4:var y;a=(y=this.options).isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,o=y.nativeSizeType,s=h.toNativeOne(r);break;case 3:case 8:a=p.BinaryOp.SubI64,o=p.NativeType.I64,s=r.createI64(1);break;case 11:a=p.BinaryOp.SubF32,o=p.NativeType.F32,s=r.createF32(1);break;case 12:a=p.BinaryOp.SubF64,o=p.NativeType.F64,s=r.createF64(1);break;case 13:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),r.createUnreachable()}break;default:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),r.createUnreachable()}var m=null;if(t==_.Type.void?l=r.createBinary(a,i,s):(m=n.getTempLocal(h),l=r.createBinary(a,this.module.createGetLocal(m.index,o),s)),d&&(assert(h.is(36)),l=E(l,h,r)),l=this.compileAssignmentWithValue(e.operand,l,!1),t==_.Type.void)return assert(!m),l;this.currentType=assert(m).type,n.freeTempLocal(m);var g=m.index;return r.createBlock(null,[r.createSetLocal(g,i),l,r.createGetLocal(g,o)],o)},t.prototype.compileUnaryPrefixExpression=function(e,t,r){void 0===r&&(r=!0);var n,i=this.module,a=this.currentType,o=!1,s=!1;switch(e.operator){case u.Token.PLUS:if(a.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();n=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,!1),o=(a=this.currentType).is(36);break;case u.Token.MINUS:if(a.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();if(e.operand.kind!=h.NodeKind.LITERAL||e.operand.literalKind!=h.LiteralKind.INTEGER&&e.operand.literalKind!=h.LiteralKind.FLOAT)switch(n=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,!1),(a=this.currentType).kind){case 0:case 1:case 5:case 6:case 10:o=!0;default:n=i.createBinary(p.BinaryOp.SubI32,i.createI32(0),n);break;case 9:if(a.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();case 4:n=i.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,a.toNativeZero(i),n);break;case 3:case 8:n=i.createBinary(p.BinaryOp.SubI64,i.createI64(0),n);break;case 11:n=i.createUnary(p.UnaryOp.NegF32,n);break;case 12:n=i.createUnary(p.UnaryOp.NegF64,n)}else n=this.compileLiteralExpression(e.operand,t,!0),this.options.sourceMap&&g(n,e.range,i,this.currentFunction),a=this.currentType;break;case u.Token.PLUS_PLUS:if(a.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();switch(s=!0,n=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,!1),(a=this.currentType).kind){case 0:case 1:case 5:case 6:case 10:o=!0;default:n=i.createBinary(p.BinaryOp.AddI32,n,this.module.createI32(1));break;case 9:if(a.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();case 4:n=i.createBinary(this.options.isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,n,a.toNativeOne(i));break;case 3:case 8:n=i.createBinary(p.BinaryOp.AddI64,n,i.createI64(1));break;case 11:n=i.createBinary(p.BinaryOp.AddF32,n,i.createF32(1));break;case 12:n=i.createBinary(p.BinaryOp.AddF64,n,i.createF64(1))}break;case u.Token.MINUS_MINUS:if(a.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();switch(s=!0,n=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,!1),(a=this.currentType).kind){case 0:case 1:case 5:case 6:case 10:o=!0;default:n=i.createBinary(p.BinaryOp.SubI32,n,i.createI32(1));break;case 9:if(a.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();case 4:n=i.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,n,a.toNativeOne(i));break;case 3:case 8:n=i.createBinary(p.BinaryOp.SubI64,n,i.createI64(1));break;case 11:n=i.createBinary(p.BinaryOp.SubF32,n,i.createF32(1));break;case 12:n=i.createBinary(p.BinaryOp.SubF64,n,i.createF64(1))}break;case u.Token.EXCLAMATION:n=f(n=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,!0),this.currentType,i),this.currentType=_.Type.bool;break;case u.Token.TILDE:if(a.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();switch(n=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t.is(8)?_.Type.i64:t,t==_.Type.void?0:1,!1),(a=this.currentType).kind){case 0:case 1:case 5:case 6:case 10:o=!0;default:n=i.createBinary(p.BinaryOp.XorI32,n,i.createI32(-1));break;case 9:if(a.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();case 4:n=i.createBinary(this.options.isWasm64?p.BinaryOp.XorI64:p.BinaryOp.XorI32,n,a.toNativeNegOne(i));break;case 3:case 8:n=i.createBinary(p.BinaryOp.XorI64,n,i.createI64(-1,-1))}break;case u.Token.TYPEOF:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();default:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable()}return o&&r&&(assert(a.is(36)),n=E(n,a,i)),s?this.compileAssignmentWithValue(e.operand,n,t!=_.Type.void):n},t}(c.DiagnosticEmitter);function g(e,t,r,n){var i=t.source;i.debugInfoIndex<0&&(i.debugInfoIndex=r.addDebugInfoFile(i.normalizedPath)),t.debugInfoRef=e,n.debugLocations||(n.debugLocations=[]),n.debugLocations.push(t)}function E(e,t,r){switch(t.kind){case 0:return r.createBinary(p.BinaryOp.ShrI32,r.createBinary(p.BinaryOp.ShlI32,e,r.createI32(24)),r.createI32(24));case 1:return r.createBinary(p.BinaryOp.ShrI32,r.createBinary(p.BinaryOp.ShlI32,e,r.createI32(16)),r.createI32(16));case 5:return r.createBinary(p.BinaryOp.AndI32,e,r.createI32(255));case 6:return r.createBinary(p.BinaryOp.AndI32,e,r.createI32(65535));case 10:return r.createBinary(p.BinaryOp.AndI32,e,r.createI32(1));default:return assert(!1),e}}function f(e,t,r){switch(t.kind){default: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));case 13:return assert(!1),r.createI32(1)}}function T(e,t,r){switch(t.kind){default: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));case 13:return assert(!1),r.createI32(0)}}function v(e,t,r){var n,i,o=e.module,c=e.currentFunction,p=e.options.nativeSizeType,u=c.getTempLocal(t.type),h=new Array;if(h.push(o.createSetLocal(u.index,s.compileAllocate(e,t,r))),t.members)try{for(var _=a(t.members.values()),d=_.next();!d.done;d=_.next()){var y=d.value;if(y.kind==l.ElementKind.FIELD){var m=y,g=m.type,E=g.toNativeType(),f=m.prototype.declaration;if(assert(!m.isAny(l.CommonFlags.CONST)),f.initializer)h.push(o.createStore(g.byteSize,o.createGetLocal(u.index,p),e.compileExpression(f.initializer,g),E,m.memoryOffset));else{var T=m.prototype.declaration.parameterIndex;h.push(o.createStore(g.byteSize,o.createGetLocal(u.index,p),T>=0?o.createGetLocal(1+T,E):g.toNativeZero(o),E,m.memoryOffset))}}}}catch(e){n={error:e}}finally{try{d&&!d.done&&(i=_.return)&&i.call(_)}finally{if(n)throw n.error}}return h.push(o.createGetLocal(u.index,p)),c.freeTempLocal(u),e.currentType=t.type,o.createBlock(null,h,p)}function I(e,t,r){var n=e.module,i=e.options.nativeSizeType;return e.currentType=t.type,n.createIf(i==p.NativeType.I64?n.createBinary(p.BinaryOp.NeI64,n.createGetLocal(0,p.NativeType.I64),n.createI64(0)):n.createGetLocal(0,p.NativeType.I32),n.createGetLocal(0,i),n.createTeeLocal(0,v(e,t,r)))}t.Compiler=m,t.makeSmallIntegerWrap=E,t.makeIsFalseish=f,t.makeIsTrueish=T,t.makeAllocate=v,t.makeConditionalAllocate=I},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.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"}(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 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.";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)});Object.defineProperty(t,"__esModule",{value:!0});var a=r(0),o=r(6),s=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.onComment=null,t.tryParseSignatureIsSignature=!1,t.program=new a.Program(t.diagnostics),t}return i(t,e),t.prototype.parseFile=function(e,t,r){for(var n=this.program,i=c.normalizePath(t),s=p.mangleInternalPath(i),u=n.sources,h=0,_=u.length;h<_;++h)if(u[h].internalPath==s)return;this.seenlog.add(s);var d=new p.Source(i,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.push(d),d.normalizedPath==l&&d.set(a.CommonFlags.BUILTIN);var y=new o.Tokenizer(d,n.diagnostics);y.onComment=this.onComment,d.tokenizer=y;for(var m=d.statements;!y.skip(o.Token.ENDOFFILE);){var g=this.parseTopLevelStatement(y);g&&(g.parent=d,m.push(g))}y.finish()},t.prototype.parseTopLevelStatement=function(e,t){void 0===t&&(t=null);for(var r=a.CommonFlags.NONE,n=-1,i=null;e.skip(o.Token.AT);){n<0&&(n=e.tokenPos);var 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(o.Token.EXPORT)&&(n<0&&(n=e.tokenPos),r|=a.CommonFlags.EXPORT,p=e.tokenPos,l=e.pos);var u=null!=t&&t.is(a.CommonFlags.AMBIENT);e.skip(o.Token.DECLARE)?(n<0&&(n=e.tokenPos),u&&this.error(s.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,_=e.peek();switch(n<0&&(n=e.nextTokenPos),_){case o.Token.CONST:if(e.next(),r|=a.CommonFlags.CONST,e.skip(o.Token.ENUM)){h=this.parseEnum(e,r,i,n);break}h=this.parseVariable(e,r,i,n),i=null;break;case o.Token.LET:r|=a.CommonFlags.LET;case o.Token.VAR:e.next(),h=this.parseVariable(e,r,i,n),i=null;break;case o.Token.ENUM:e.next(),h=this.parseEnum(e,r,i,n),i=null;break;case o.Token.FUNCTION:e.next(),h=this.parseFunction(e,r,i,n),i=null;break;case o.Token.ABSTRACT:if(e.next(),r|=a.CommonFlags.ABSTRACT,!e.skip(o.Token.CLASS)){this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"class");break}case o.Token.CLASS:case o.Token.INTERFACE:e.next(),h=this.parseClassOrInterface(e,r,i,n),i=null;break;case o.Token.NAMESPACE:e.next(),h=this.parseNamespace(e,r,i,n),i=null;break;case o.Token.IMPORT:e.next(),h=(r|=a.CommonFlags.IMPORT)&a.CommonFlags.EXPORT?this.parseExportImport(e,n):this.parseImport(e);break;case o.Token.TYPE:e.next(),h=this.parseTypeDeclaration(e,r,i,n),i=null;break;default:r&a.CommonFlags.EXPORT?h=this.parseExport(e,r,n):(l&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(p,l),"export"),t||(h=this.parseStatement(e,!0)))}if(i)for(var d=0,y=i.length;d"),null}if(e.skip(o.Token.BAR)){if(!e.skip(o.Token.NULL))return r||this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"null"),null;d=!0}n=p.Node.createType(h,_,d,e.range(a,e.pos))}for(;e.skip(o.Token.OPENBRACKET);){var m=e.tokenPos;if(!e.skip(o.Token.CLOSEBRACKET))return r||this.error(s.DiagnosticCode._0_expected,e.range(),"]"),null;var g=e.range(m,e.pos);d=!1;if(e.skip(o.Token.BAR)){if(!e.skip(o.Token.NULL))return r||this.error(s.DiagnosticCode._0_expected,e.range(),"null"),null;d=!0}if(n=p.Node.createType(p.Node.createIdentifierExpression("Array",g),[n],d,e.range(a,e.pos)),d)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(o.Token.CLOSEPAREN))c=!0,e.discard(r),i=[];else{c=!1;do{var l=p.ParameterKind.DEFAULT;if(e.skip(o.Token.DOT_DOT_DOT)&&(c=!0,e.discard(r),l=p.ParameterKind.REST),e.skip(o.Token.THIS)){if(!e.skip(o.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(s.DiagnosticCode.Operation_not_supported,u.range),this.tryParseSignatureIsSignature=!0,null;a=u}else{if(!e.skip(o.Token.IDENTIFIER))return c?this.error(s.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(o.Token.QUESTION)&&(c=!0,e.discard(r),l==p.ParameterKind.REST?this.error(s.DiagnosticCode.A_rest_parameter_cannot_be_optional,e.range()):l=p.ParameterKind.OPTIONAL),e.skip(o.Token.COLON)){c=!0,e.discard(r);var _=this.parseType(e);if(!_)return this.tryParseSignatureIsSignature=c,null;var d=new p.ParameterNode;d.parameterKind=l,d.name=h,d.type=_,i?i.push(d):i=[d]}else c&&this.error(s.DiagnosticCode.Type_expected,e.range())}}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(),")"),this.tryParseSignatureIsSignature=c,null}return e.skip(o.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(s.DiagnosticCode._0_expected,e.range(),"=>"):e.reset(r),this.tryParseSignatureIsSignature=c,null)},t.prototype.parseDecorator=function(e){var t=e.tokenPos;if(e.skip(o.Token.IDENTIFIER)){for(var r=e.readIdentifier(),n=p.Node.createIdentifierExpression(r,e.range(t,e.pos));e.skip(o.Token.DOT);){if(!e.skip(o.Token.IDENTIFIER))return this.error(s.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(o.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(s.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseVariable=function(e,t,r,n){var i=new Array;do{var a=this.parseVariableDeclaration(e,t,r);if(!a)return null;i.push(a)}while(e.skip(o.Token.COMMA));var s=p.Node.createVariableStatement(i,r,t,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),s},t.prototype.parseVariableDeclaration=function(e,t,r){if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;var n=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),i=t,c=null;e.skip(o.Token.COLON)&&(c=this.parseType(e));var l=null;if(e.skip(o.Token.EQUALS)){if(i&a.CommonFlags.AMBIENT&&this.error(s.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(s.DiagnosticCode._const_declarations_must_be_initialized,n.range):c||this.error(s.DiagnosticCode.Type_expected,e.range(e.pos));return p.Node.createVariableDeclaration(n,c,l,r,i,o.Range.join(n.range,e.range()))},t.prototype.parseEnum=function(e,t,r,n){if(e.next()!=o.Token.IDENTIFIER)return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;var i=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.next()!=o.Token.OPENBRACE)return this.error(s.DiagnosticCode._0_expected,e.range(),"{"),null;var c=new Array;if(!e.skip(o.Token.CLOSEBRACE)){do{var l=this.parseEnumValue(e,a.CommonFlags.NONE);if(!l)return null;c.push(l)}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(),"}"),null}var u=p.Node.createEnumDeclaration(i,c,r,t,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),u},t.prototype.parseEnumValue=function(e,t){if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;var r=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),n=null;return e.skip(o.Token.EQUALS)&&!(n=this.parseExpression(e,1))?null:p.Node.createEnumValueDeclaration(r,n,t,o.Range.join(r.range,e.range()))},t.prototype.parseReturn=function(e){var t=null;if(e.peek(!0)!=o.Token.SEMICOLON&&e.nextToken!=o.Token.CLOSEBRACE&&!e.nextTokenOnNewLine&&!(t=this.parseExpression(e)))return null;var r=p.Node.createReturnStatement(t,e.range());return e.skip(o.Token.SEMICOLON),r},t.prototype.parseTypeParameters=function(e){var t=new Array;if(e.skip(o.Token.GREATERTHAN))this.error(s.DiagnosticCode.Type_parameter_list_cannot_be_empty,e.range());else{do{var r=this.parseTypeParameter(e);if(!r)return null;t.push(r)}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.GREATERTHAN))return this.error(s.DiagnosticCode._0_expected,e.range(),">"),null}return t},t.prototype.parseTypeParameter=function(e){if(e.next()==o.Token.IDENTIFIER){var t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(o.Token.EXTENDS)){var n=this.parseType(e);if(!n)return null;if(n.kind!=p.NodeKind.TYPE)return this.error(s.DiagnosticCode.Operation_not_supported,n.range),null;r=n}return p.Node.createTypeParameter(t,r,o.Range.join(t.range,e.range()))}return this.error(s.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;if(e.peek()!=o.Token.CLOSEPAREN)do{var c=this.parseParameter(e,t);if(!c)return null;switch(n&&!a&&(this.error(s.DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,n.name.range),a=!0),c.parameterKind){default:i&&this.error(s.DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,c.name.range);break;case p.ParameterKind.OPTIONAL:i=!0;break;case p.ParameterKind.REST:n=c}r.push(c)}while(e.skip(o.Token.COMMA));return e.skip(o.Token.CLOSEPAREN)?r:(this.error(s.DiagnosticCode._0_expected,e.range(),")"),null)},t.prototype.parseParameter=function(e,t){void 0===t&&(t=!1);var r=!1,n=!1,i=null,c=a.CommonFlags.NONE;if(e.skip(o.Token.PUBLIC)?(i=e.range(),t||this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,i,"public"),c|=a.CommonFlags.PUBLIC):e.skip(o.Token.PROTECTED)?(i=e.range(),t||this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,i,"protected"),c|=a.CommonFlags.PROTECTED):e.skip(o.Token.PRIVATE)&&(i=e.range(),t||this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,i,"private"),c|=a.CommonFlags.PRIVATE),e.skip(o.Token.READONLY)&&(i||(i=e.range()),t||this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,i,"readonly"),c|=a.CommonFlags.READONLY),e.skip(o.Token.DOT_DOT_DOT)&&(c?this.error(s.DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,e.range()):i=e.range(),r=!0),e.skip(o.Token.IDENTIFIER)){r||(i=e.range());var l=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),u=null;if((n=e.skip(o.Token.QUESTION))&&r&&this.error(s.DiagnosticCode.A_rest_parameter_cannot_be_optional,l.range),e.skip(o.Token.COLON)){if(!(u=this.parseType(e)))return null}else u=p.Node.createOmittedType(e.range(e.pos));var h=null;if(e.skip(o.Token.EQUALS)&&(r&&this.error(s.DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,l.range),n?this.error(s.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,l.range):n=!0,!(h=this.parseExpression(e,1))))return null;var _=p.Node.createParameter(l,u,h,r?p.ParameterKind.REST:n?p.ParameterKind.OPTIONAL:p.ParameterKind.DEFAULT,o.Range.join(i,e.range()));return _.flags|=c,_}return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseFunction=function(e,t,r,n){if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range(e.pos)),null;var i=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),c=-1,l=null;if(e.skip(o.Token.LESSTHAN)){if(c=e.tokenPos,!(l=this.parseTypeParameters(e)))return null;t|=a.CommonFlags.GENERIC}if(!e.skip(o.Token.OPENPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"("),null;c<0&&(c=e.tokenPos);var u=this.parseParameters(e);if(!u)return null;var h=0!=(t&a.CommonFlags.SET);h&&(1!=u.length&&this.error(s.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,i.range),u.length&&u[0].initializer&&this.error(s.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,i.range)),t&a.CommonFlags.GET&&u.length&&this.error(s.DiagnosticCode.A_get_accessor_cannot_have_parameters,i.range);var _=null;if(e.skip(o.Token.COLON)&&!(_=this.parseType(e,!0,h)))return null;_||(_=p.Node.createOmittedType(e.range(e.pos)),h||this.error(s.DiagnosticCode.Type_expected,_.range));var d=p.Node.createSignature(u,_,null,!1,e.range(c,e.pos)),y=null;if(e.skip(o.Token.OPENBRACE)){if(t&a.CommonFlags.AMBIENT&&this.error(s.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,e.range()),!(y=this.parseBlockStatement(e,!1)))return null}else t&a.CommonFlags.AMBIENT||this.error(s.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,e.range(e.pos));var m=p.Node.createFunctionDeclaration(i,l,d,y,r,t,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),m},t.prototype.parseFunctionExpression=function(e){var t,r=e.tokenPos,n=!1;if(e.token==o.Token.FUNCTION){if(t=e.skip(o.Token.IDENTIFIER)?p.Node.createIdentifierExpression(e.readIdentifier(),e.range()):p.Node.createEmptyIdentifierExpression(e.range(e.pos)),!e.skip(o.Token.OPENPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"("),null}else n=!0,assert(e.token==o.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(o.Token.COLON)){if(!(l=this.parseType(e)))return null}else l=p.Node.createOmittedType(e.range(e.pos)),this.error(s.DiagnosticCode.Type_expected,l.range);if(n&&!e.skip(o.Token.EQUALS_GREATERTHAN))return this.error(s.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(o.Token.OPENBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;u=this.parseBlockStatement(e,!1)}if(!u)return null;var _=p.Node.createFunctionDeclaration(t,null,h,u,null,n?a.CommonFlags.ARROW:a.CommonFlags.NONE,e.range(i,e.pos));return p.Node.createFunctionExpression(_)},t.prototype.parseClassOrInterface=function(e,t,r,n){var i=e.token==o.Token.INTERFACE;if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;var c,l=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(o.Token.LESSTHAN)){if(!(c=this.parseTypeParameters(e)))return null;t|=a.CommonFlags.GENERIC}else c=[];var u=null;if(e.skip(o.Token.EXTENDS)){var h=this.parseType(e);if(!h)return null;if(h.kind!=p.NodeKind.TYPE)return this.error(s.DiagnosticCode.Operation_not_supported,h.range),null;u=h}var _=null;if(e.skip(o.Token.IMPLEMENTS)){i&&this.error(s.DiagnosticCode.Interface_declaration_cannot_have_implements_clause,e.range());do{var d=this.parseType(e);if(!d)return null;i||(_||(_=[]),_.push(d))}while(e.skip(o.Token.COMMA))}if(!e.skip(o.Token.OPENBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(),"{"),null;var y,m=new Array;if(i?(assert(!_),y=p.Node.createInterfaceDeclaration(l,c,u,m,r,t,e.range(n,e.pos))):y=p.Node.createClassDeclaration(l,c,u,_,m,r,t,e.range(n,e.pos)),!e.skip(o.Token.CLOSEBRACE))do{var g=this.parseClassMember(e,y);if(!g)return null;g.parent=y,m.push(g)}while(!e.skip(o.Token.CLOSEBRACE));return y},t.prototype.parseClassMember=function(e,t){for(var r=e.pos,n=new Array;e.skip(o.Token.AT);){var i=this.parseDecorator(e);if(!i)break;n.push(i)}var c=t.flags&a.CommonFlags.AMBIENT;e.skip(o.Token.PUBLIC)?c|=a.CommonFlags.PUBLIC:e.skip(o.Token.PRIVATE)?c|=a.CommonFlags.PRIVATE:e.skip(o.Token.PROTECTED)&&(c|=a.CommonFlags.PROTECTED);var l=0,u=0,h=0,_=0;e.skip(o.Token.STATIC)?(c|=a.CommonFlags.STATIC,l=e.tokenPos,u=e.pos):(e.skip(o.Token.ABSTRACT)?(c|=a.CommonFlags.ABSTRACT|a.CommonFlags.INSTANCE,h=e.tokenPos,_=e.pos):c|=a.CommonFlags.INSTANCE,t.flags&a.CommonFlags.GENERIC&&(c|=a.CommonFlags.GENERIC_CONTEXT));var d=0,y=0;e.skip(o.Token.READONLY)&&(c|=a.CommonFlags.READONLY,d=e.tokenPos,y=e.pos);var m=e.mark(),g=!1,E=!1,f=!1,T=0,v=0;if(e.skip(o.Token.GET)?e.peek(!0,!0)!=o.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(m):(c|=a.CommonFlags.GET,E=!0,T=e.tokenPos,v=e.pos,c&a.CommonFlags.READONLY&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(d,y),"readonly")):e.skip(o.Token.SET)?e.peek(!0,!0)!=o.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(m):(c|=a.CommonFlags.SET|a.CommonFlags.SET,f=!0,T=e.tokenPos,v=e.pos,c&a.CommonFlags.READONLY&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(d,y),"readonly")):e.skip(o.Token.CONSTRUCTOR)&&(g=!0,(c|=a.CommonFlags.CONSTRUCTOR)&a.CommonFlags.STATIC&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(l,u),"static"),c&a.CommonFlags.ABSTRACT&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(h,_),"abstract"),c&a.CommonFlags.READONLY&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(d,y),"readonly")),!g&&!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;var I=g?p.Node.createConstructorExpression(e.range()):p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),A=null;if(e.skip(o.Token.LESSTHAN)){var N=e.tokenPos;if(!(A=this.parseTypeParameters(e)))return null;g?this.error(s.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,e.range(N,e.pos)):E||f?this.error(s.DiagnosticCode.An_accessor_cannot_have_type_parameters,e.range(N,e.pos)):c|=a.CommonFlags.GENERIC}if(e.skip(o.Token.OPENPAREN)){var C=e.tokenPos,S=this.parseParameters(e,g);if(!S)return null;if(g)for(var O=0,b=S.length;O"),null):null;case o.Token.IDENTIFIER:return p.Node.createIdentifierExpression(e.readIdentifier(),e.range(r,e.pos));case o.Token.THIS:return p.Node.createThisExpression(e.range(r,e.pos));case o.Token.CONSTRUCTOR:return p.Node.createConstructorExpression(e.range(r,e.pos));case o.Token.SUPER:return p.Node.createSuperExpression(e.range(r,e.pos));case o.Token.STRINGLITERAL:return p.Node.createStringLiteralExpression(e.readString(),e.range(r,e.pos));case o.Token.INTEGERLITERAL:return p.Node.createIntegerLiteralExpression(e.readInteger(),e.range(r,e.pos));case o.Token.FLOATLITERAL:return p.Node.createFloatLiteralExpression(e.readFloat(),e.range(r,e.pos));case o.Token.SLASH:var _=e.readRegexpPattern();return e.skip(o.Token.SLASH)?p.Node.createRegexpLiteralExpression(_,e.readRegexpFlags(),e.range(r,e.pos)):(this.error(s.DiagnosticCode._0_expected,e.range(),"/"),null);case o.Token.FUNCTION:return this.parseFunctionExpression(e);default:return this.error(s.DiagnosticCode.Expression_expected,e.range()),null}},t.prototype.tryParseTypeArgumentsBeforeArguments=function(e){var t=e.mark();if(!e.skip(o.Token.LESSTHAN))return null;var r=new Array;do{var n=this.parseType(e,!0,!0);if(!n)return e.reset(t),null;r.push(n)}while(e.skip(o.Token.COMMA));return e.skip(o.Token.GREATERTHAN)&&e.skip(o.Token.OPENPAREN)?r:(e.reset(t),null)},t.prototype.parseArguments=function(e){var t=new Array;if(!e.skip(o.Token.CLOSEPAREN)){do{var r=this.parseExpression(e,1);if(!r)return null;t.push(r)}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEPAREN))return this.error(s.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(o.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 o.Token.AS:var d=this.parseType(e);if(!d)return null;r=p.Node.createAssertionExpression(p.AssertionKind.AS,r,d,e.range(a,e.pos));break;case o.Token.OPENBRACKET:if(!(u=this.parseExpression(e)))return null;if(!e.skip(o.Token.CLOSEBRACKET))return this.error(s.DiagnosticCode._0_expected,e.range(),"]"),null;r=p.Node.createElementAccessExpression(r,u,e.range(a,e.pos));break;case o.Token.PLUS_PLUS:case o.Token.MINUS_MINUS:r.kind!=p.NodeKind.IDENTIFIER&&r.kind!=p.NodeKind.ELEMENTACCESS&&r.kind!=p.NodeKind.PROPERTYACCESS&&this.error(s.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 o.Token.QUESTION:var y=this.parseExpression(e);if(!y)return null;if(!e.skip(o.Token.COLON))return this.error(s.DiagnosticCode._0_expected,e.range(),":"),null;var m=this.parseExpression(e);if(!m)return null;r=p.Node.createTernaryExpression(r,y,m,e.range(a,e.pos));break;case o.Token.COMMA:var g=[r];do{if(!(r=this.parseExpression(e,1)))return null;g.push(r)}while(e.skip(o.Token.COMMA));r=p.Node.createCommaExpression(g,e.range(a,e.pos));break;default:if(!(u=this.parseExpression(e,_(i)?l:l+1)))return null;if(i==o.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(s.DiagnosticCode.Identifier_expected,u.range),null;var E=u;if(E.expression.kind!=p.NodeKind.IDENTIFIER)return this.error(s.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==o.Token.ENDOFFILE||t==o.Token.CLOSEBRACE)break;if(t==o.Token.SEMICOLON){e.next();break}if(e.nextTokenOnNewLine)break;switch(e.next()){case o.Token.IDENTIFIER:e.readIdentifier();break;case o.Token.STRINGLITERAL:e.readString();break;case o.Token.INTEGERLITERAL:e.readInteger();break;case o.Token.FLOATLITERAL:e.readFloat()}}},t}(s.DiagnosticEmitter);function h(e){switch(e){case o.Token.COMMA:return 0;case o.Token.EQUALS:case o.Token.PLUS_EQUALS:case o.Token.MINUS_EQUALS:case o.Token.ASTERISK_ASTERISK_EQUALS:case o.Token.ASTERISK_EQUALS:case o.Token.SLASH_EQUALS:case o.Token.PERCENT_EQUALS:case o.Token.LESSTHAN_LESSTHAN_EQUALS:case o.Token.GREATERTHAN_GREATERTHAN_EQUALS:case o.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case o.Token.AMPERSAND_EQUALS:case o.Token.CARET_EQUALS:case o.Token.BAR_EQUALS:return 3;case o.Token.QUESTION:return 4;case o.Token.BAR_BAR:return 5;case o.Token.AMPERSAND_AMPERSAND:return 6;case o.Token.BAR:return 7;case o.Token.CARET:return 8;case o.Token.AMPERSAND:return 9;case o.Token.EQUALS_EQUALS:case o.Token.EXCLAMATION_EQUALS:case o.Token.EQUALS_EQUALS_EQUALS:case o.Token.EXCLAMATION_EQUALS_EQUALS:return 10;case o.Token.AS:case o.Token.IN:case o.Token.INSTANCEOF:case o.Token.LESSTHAN:case o.Token.GREATERTHAN:case o.Token.LESSTHAN_EQUALS:case o.Token.GREATERTHAN_EQUALS:return 11;case o.Token.LESSTHAN_LESSTHAN:case o.Token.GREATERTHAN_GREATERTHAN:case o.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:return 12;case o.Token.PLUS:case o.Token.MINUS:return 13;case o.Token.ASTERISK:case o.Token.SLASH:case o.Token.PERCENT:return 14;case o.Token.ASTERISK_ASTERISK:return 15;case o.Token.PLUS_PLUS:case o.Token.MINUS_MINUS:return 17;case o.Token.DOT:case o.Token.NEW:case o.Token.OPENBRACKET:return 19;default:return-1}}function _(e){switch(e){case o.Token.EQUALS:case o.Token.PLUS_EQUALS:case o.Token.MINUS_EQUALS:case o.Token.ASTERISK_ASTERISK_EQUALS:case o.Token.ASTERISK_EQUALS:case o.Token.SLASH_EQUALS:case o.Token.PERCENT_EQUALS:case o.Token.LESSTHAN_LESSTHAN_EQUALS:case o.Token.GREATERTHAN_GREATERTHAN_EQUALS:case o.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case o.Token.AMPERSAND_EQUALS:case o.Token.CARET_EQUALS:case o.Token.BAR_EQUALS:case o.Token.QUESTION:case o.Token.ASTERISK_ASTERISK:return!0;default:return!1}}t.Parser=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}}}},o=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),o=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)o.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 o};Object.defineProperty(t,"__esModule",{value:!0});var s=r(0),c=r(1),p=function(){function e(e){this.program=e}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}}var n,i},e.prototype.visitElement=function(e){switch(e.kind){case s.ElementKind.GLOBAL:e.is(s.CommonFlags.COMPILED)&&this.visitGlobal(e);break;case s.ElementKind.ENUM:e.is(s.CommonFlags.COMPILED)&&this.visitEnum(e);break;case s.ElementKind.FUNCTION_PROTOTYPE:try{for(var t=a(e.instances.values()),r=t.next();!r.done;r=t.next()){(o=r.value).is(s.CommonFlags.COMPILED)&&this.visitFunction(o)}}catch(e){c={error:e}}finally{try{r&&!r.done&&(p=t.return)&&p.call(t)}finally{if(c)throw c.error}}break;case s.ElementKind.CLASS_PROTOTYPE:try{for(var n=a(e.instances.values()),i=n.next();!i.done;i=n.next()){var o;(o=i.value).is(s.CommonFlags.COMPILED)&&this.visitClass(o)}}catch(e){l={error:e}}finally{try{i&&!i.done&&(u=n.return)&&u.call(n)}finally{if(l)throw l.error}}break;case s.ElementKind.NAMESPACE:e.is(s.CommonFlags.COMPILED)&&this.visitNamespace(e);break;default:assert(!1)}var c,p,l,u},e}(),l=function(e){function t(t){var r=e.call(this,t)||this;return r.sb=[],r.seen=new Set,r.indentLevel=0,r}return i(t,e),t.build=function(e){return new t(e).build()},t.prototype.visitGlobal=function(e){if(!this.seen.has(e)){this.seen.add(e);var t=this.sb,r=e.is(s.CommonFlags.INLINED);if(c.indent(t,this.indentLevel),r&&t.push("const "),t.push(this.typeToString(e.type)),t.push(" "),t.push(e.simpleName),r)switch(e.constantValueKind){case 1:t.push(" = "),t.push(i64_to_string(e.constantIntegerValue));break;case 2:t.push(" = "),t.push(e.constantFloatValue.toString());break;default:assert(!1)}t.push(";\n")}},t.prototype.visitEnum=function(e){if(!this.seen.has(e)){this.seen.add(e);var t=this.sb;c.indent(t,this.indentLevel++),t.push("interface "),t.push(e.simpleName),t.push(" {\n");var r,n,i,p,l=e.members;if(l){try{for(var u=a(l),h=u.next();!h.done;h=u.next()){var _=o(h.value,2),d=_[0];if((E=_[1]).kind==s.ElementKind.ENUMVALUE){var y=E.is(s.CommonFlags.INLINED);c.indent(t,this.indentLevel),y?t.push("const "):t.push("readonly "),t.push("unsigned long "),t.push(d),y&&(t.push(" = "),t.push(E.constantValue.toString(10))),t.push(";\n")}}}catch(e){r={error:e}}finally{try{h&&!h.done&&(n=u.return)&&n.call(u)}finally{if(r)throw r.error}}try{for(var m=a(l.values()),g=m.next();!g.done;g=m.next()){var E;(E=g.value).kind!=s.ElementKind.ENUMVALUE&&this.visitElement(E)}}catch(e){i={error:e}}finally{try{g&&!g.done&&(p=m.return)&&p.call(m)}finally{if(i)throw i.error}}}c.indent(t,--this.indentLevel),t.push("}\n")}},t.prototype.visitFunction=function(e){if(!this.seen.has(e)){this.seen.add(e);var t=this.sb,r=e.signature;c.indent(t,this.indentLevel),t.push(this.typeToString(r.returnType)),t.push(" "),t.push(e.simpleName),t.push("(");for(var n=r.parameterTypes,i=n.length,o=0;o0&&this.push(", "),this.push("$"),this.push(i.toString(10)),this.push(": "),this.push(a(_BinaryenFunctionGetParam(e,i)));this.push("): "),this.push(a(_BinaryenFunctionGetResult(e))),this.push(" "),_BinaryenExpressionGetId(r)!=n.ExpressionId.Block&&this.push("{\n"),this.decompileExpression(r),_BinaryenExpressionGetId(r)!=n.ExpressionId.Block&&this.push("\n}\n"),++this.functionId},e.prototype.decompileExpression=function(e){var t,r,i,o,s=_BinaryenExpressionGetId(e),c=_BinaryenExpressionGetType(e);switch(s){case n.ExpressionId.Block:for(null!=(r=n.readString(_BinaryenBlockGetName(e)))&&(this.push(r),this.push(": ")),this.push("{\n"),o=_BinaryenBlockGetNumChildren(e),i=0;i("),this.push(_BinaryenLoadGetOffset(e).toString(10)),this.push(" + "),this.decompileExpression(_BinaryenLoadGetPtr(e)),void this.push(")");case n.ExpressionId.Store:return this.push("store<"),this.push(a(c)),this.push(">("),this.push(_BinaryenStoreGetOffset(e).toString(10)),this.push(" + "),this.decompileExpression(_BinaryenStoreGetPtr(e)),this.push(", "),this.decompileExpression(_BinaryenStoreGetValue(e)),void this.push(")");case n.ExpressionId.Const:switch(c){case n.NativeType.I32:return void this.push(_BinaryenConstGetValueI32(e).toString(10));case n.NativeType.I64:return void this.push(i64_to_string(i64_new(_BinaryenConstGetValueI64Low(e),_BinaryenConstGetValueI64High(e))));case n.NativeType.F32:return void this.push(_BinaryenConstGetValueF32(e).toString(10));case n.NativeType.F64:return void this.push(_BinaryenConstGetValueF64(e).toString(10))}break;case n.ExpressionId.Unary:switch(_BinaryenUnaryGetOp(e)){case n.UnaryOp.ClzI32:return this.push("clz("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.CtzI32:return this.push("ctz("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.PopcntI32:return this.push("popcnt("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.NegF32:case n.UnaryOp.NegF64:return this.push("-"),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.AbsF32:return this.push("abs("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.CeilF32:return this.push("ceil("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.FloorF32:return this.push("floor("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.TruncF32:return this.push("trunc("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.NearestF32:return this.push("nearest("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.SqrtF32:return this.push("sqrt("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.EqzI32:case n.UnaryOp.EqzI64:return this.push("!"),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ClzI64:return this.push("clz("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.CtzI64:return this.push("ctz("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.PopcntI64:return this.push("popcnt("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.AbsF64:return this.push("abs("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.CeilF64:return this.push("ceil("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.FloorF64:return this.push("floor("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.TruncF64:return this.push("trunc("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.NearestF64:return this.push("nearest("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.SqrtF64:return this.push("sqrt("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.ExtendI32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ExtendU32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.WrapI64:case n.UnaryOp.TruncF32ToI32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.TruncF32ToI64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.TruncF32ToU32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.TruncF32ToU64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.TruncF64ToI32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.TruncF64ToI64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.TruncF64ToU32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.TruncF64ToU64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ReinterpretF32:return this.push("reinterpret("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.ReinterpretF64:return this.push("reinterpret("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.ConvertI32ToF32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ConvertI32ToF64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ConvertU32ToF32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ConvertU32ToF64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ConvertI64ToF32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ConvertI64ToF64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ConvertU64ToF32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ConvertU64ToF64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.PromoteF32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.DemoteF64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ReinterpretI32:return this.push("reinterpret("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.ReinterpretI64:return this.push("reinterpret("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")")}break;case n.ExpressionId.Binary:switch(_BinaryenBinaryGetOp(e)){case n.BinaryOp.AddI32:case n.BinaryOp.AddI64:case n.BinaryOp.AddF32:case n.BinaryOp.AddF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" + "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.SubI32:case n.BinaryOp.SubI64:case n.BinaryOp.SubF32:case n.BinaryOp.SubF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" - "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.MulI32:case n.BinaryOp.MulI64:case n.BinaryOp.MulF32:case n.BinaryOp.MulF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" * "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.DivI32:case n.BinaryOp.DivI64:case n.BinaryOp.DivF32:case n.BinaryOp.DivF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" / "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.DivU32:return this.push("("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" / "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.RemI32:case n.BinaryOp.RemI64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" % "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.RemU32:return this.push("("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" / "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.AndI32:case n.BinaryOp.AndI64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" & "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.OrI32:case n.BinaryOp.OrI64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" | "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.XorI32:case n.BinaryOp.XorI64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" ^ "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.ShlI32:case n.BinaryOp.ShlI64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" << "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.ShrU32:case n.BinaryOp.ShrU64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" >>> "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.ShrI32:case n.BinaryOp.ShrI64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" >> "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.RotlI32:return this.push("rotl("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.RotrI32:return this.push("rotr("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.EqI32:case n.BinaryOp.EqI64:case n.BinaryOp.EqF32:case n.BinaryOp.EqF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" == "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.NeI32:case n.BinaryOp.NeI64:case n.BinaryOp.NeF32:case n.BinaryOp.NeF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" != "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.LtI32:case n.BinaryOp.LtI64:case n.BinaryOp.LtF32:case n.BinaryOp.LtF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" < "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.LtU32:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" < "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.LeI32:case n.BinaryOp.LeI64:case n.BinaryOp.LeF32:case n.BinaryOp.LeF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" <= "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.LeU32:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" <= "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.GtI32:case n.BinaryOp.GtI64:case n.BinaryOp.GtF32:case n.BinaryOp.GtF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" > "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.GtU32:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" > "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.GeI32:case n.BinaryOp.GeI64:case n.BinaryOp.GeF32:case n.BinaryOp.GeF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" >= "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.GeU32:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" >= "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.DivU64:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" / "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.RemU64:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" % "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.RotlI64:return this.push("rotl("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.RotrI64:return this.push("rotr("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.LtU64:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" < "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.LeU64:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" <= "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.GtU64:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" > "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.GeU64:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" >= "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.CopysignF32:return this.push("copysign("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.MinF32:return this.push("min("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.MaxF32:return this.push("max("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.CopysignF64:return this.push("copysign("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.MinF64:return this.push("min("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.MaxF64:return this.push("max("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")")}return;case n.ExpressionId.Select:return this.push("select<"),this.push(a(c)),this.push(">("),this.decompileExpression(_BinaryenSelectGetIfTrue(e)),this.push(", "),this.decompileExpression(_BinaryenSelectGetIfFalse(e)),this.push(", "),this.decompileExpression(_BinaryenSelectGetCondition(e)),void this.push(")");case n.ExpressionId.Drop:return this.decompileExpression(_BinaryenDropGetValue(e)),void this.push(";\n");case n.ExpressionId.Return:return void((t=_BinaryenReturnGetValue(e))?(this.push("return "),this.decompileExpression(t),this.push(";\n")):this.push("return;\n"));case n.ExpressionId.Host:switch(_BinaryenHostGetOp(e)){case n.HostOp.CurrentMemory:return void this.push("current_memory()");case n.HostOp.GrowMemory:return this.push("grow_memory("),this.decompileExpression(_BinaryenHostGetOperand(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(8),i=r(12),a=r(11),o=r(2);t.formatDiagnostic=o.formatDiagnosticMessage;var s=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 s.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=o[e])?n:(r=p(e,(0|e)<0?-1:0,!0),i&&(o[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?E:g;if(t){if(e<0)return E;if(e>=d)return A}else{if(e<=-y)return N;if(e+1>=y)return I}return e<0?c(-e,t).neg():p(e%_|0,e/_|0,t)}function p(e,t,r){return new n(e,t,r)}n.fromInt=s,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,o=0;o>>0:this.low},C.toNumber=function(){return this.unsigned?(this.high>>>0)*_+(this.low>>>0):this.high*_+(this.low>>>0)},C.toString=function(e){if((e=e||10)<2||36>>0).toString(e);if((a=s).isZero())return p+o;for(;p.length<6;)p="0"+p;o=""+p+o}},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,o=e.high>>>16,s=65535&e.high,c=e.low>>>16,l=0,u=0,_=0,d=0;return _+=(d+=a+(65535&e.low))>>>16,u+=(_+=n+c)>>>16,l+=(u+=r+s)>>>16,l+=t+o,p((_&=65535)<<16|(d&=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,o=65535&this.low,s=e.high>>>16,l=65535&e.high,u=e.low>>>16,_=65535&e.low,d=0,y=0,E=0,f=0;return E+=(f+=o*_)>>>16,y+=(E+=a*_)>>>16,E&=65535,y+=(E+=o*u)>>>16,d+=(y+=n*_)>>>16,y&=65535,d+=(y+=a*u)>>>16,y&=65535,d+=(y+=o*l)>>>16,d+=t*_+n*u+a*l+o*s,p((E&=65535)<<16|(f&=65535),(d&=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?E:g;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return E;if(e.gt(this.shru(1)))return T;a=E}else{if(this.eq(N))return e.eq(f)||e.eq(v)?N:e.eq(N)?f:(t=this.shr(1).div(e).shl(1)).eq(g)?e.isNegative()?f:v:(n=this.sub(e.mul(t)),a=t.add(n.div(e)));else if(e.eq(N))return this.unsigned?E: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 o=Math.ceil(Math.log(t)/Math.LN2),s=o<=48?1:l(2,o-48),u=c(t),_=u.mul(e);_.isNegative()||_.gt(n);)_=(u=c(t-=s,this.unsigned)).mul(e);u.isZero()&&(u=f),a=a.add(u),n=n.sub(_)}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_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_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),o=t.fromNumber(f64.MAX_SAFE_INTEGER);e.i64_is_f64=function(e){return e.gte(a)&&e.lte(o)},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(e1&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,"1",t.length.toString(10)),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,"1",r.length.toString(10)),null}function l(e,t){var r,n;return e.options.isWasm64?(r=e.precomputeExpression(t,o.Type.usize64),(_BinaryenExpressionGetId(r)!=s.ExpressionId.Const||_BinaryenExpressionGetType(r)!=s.NativeType.I64||0!=_BinaryenConstGetValueI64High(r)||(n=_BinaryenConstGetValueI64Low(r))<0)&&(e.error(i.DiagnosticCode.Operation_not_supported,t.range),n=-1)):(r=e.precomputeExpression(t,o.Type.usize32),(_BinaryenExpressionGetId(r)!=s.ExpressionId.Const||_BinaryenExpressionGetType(r)!=s.NativeType.I32||(n=_BinaryenConstGetValueI32(r))<0)&&(e.error(i.DiagnosticCode.Operation_not_supported,t.range),n=-1)),n}t.compileGetConstant=function(e,t,r){switch(t.internalName){case"NaN":return e.currentType==o.Type.f32?e.module.createF32(NaN):(e.currentType=o.Type.f64,e.module.createF64(NaN));case"Infinity":return e.currentType==o.Type.f32?e.module.createF32(1/0):(e.currentType=o.Type.f64,e.module.createF64(1/0));case"HEAP_BASE":return e.currentType=e.options.usizeType,e.module.createGetGlobal("HEAP_BASE",e.currentType.toNativeType())}return e.error(i.DiagnosticCode.Operation_not_supported,r.range),e.module.createUnreachable()},t.compileCall=function(e,t,r,u,h,d){var y,m,g,E,f=e.module;switch(t.internalName){case"isInteger":var T=p(e,r,u,d);return e.currentType=o.Type.bool,T?T.is(4)&&!T.is(256)?f.createI32(1):f.createI32(0):f.createUnreachable();case"isFloat":return T=p(e,r,u,d),e.currentType=o.Type.bool,T?T.is(8)?f.createI32(1):f.createI32(0):f.createUnreachable();case"isReference":return T=p(e,r,u,d),e.currentType=o.Type.bool,T?(e.currentType=o.Type.bool,T.is(256)?f.createI32(1):f.createI32(0)):f.createUnreachable();case"isString":if(T=p(e,r,u,d),e.currentType=o.Type.bool,!T)return f.createUnreachable();if(O=T.classReference){var v=e.program.stringInstance;if(v&&O.isAssignableTo(v))return f.createI32(1)}return f.createI32(0);case"isArray":return T=p(e,r,u,d),e.currentType=o.Type.bool,T?null!=(O=T.classReference)&&null!=O.lookupOverload(c.OperatorKind.INDEXED_GET)?f.createI32(1):f.createI32(0):f.createUnreachable();case"isNaN":if(e.currentType=o.Type.bool,1!=u.length)return r&&1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.f64,0);switch(e.currentType.kind){case 11:E=f.createBinary(s.BinaryOp.GtU32,f.createBinary(s.BinaryOp.AndI32,f.createUnary(s.UnaryOp.ReinterpretF32,y),f.createI32(2147483647)),f.createI32(2139095040));break;case 12:E=f.createBinary(s.BinaryOp.GtU64,f.createBinary(s.BinaryOp.AndI64,f.createUnary(s.UnaryOp.ReinterpretF64,y),f.createI64(4294967295,2147483647)),f.createI64(0,2146435072));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable();break;default:E=f.createI32(0)}return e.currentType=o.Type.bool,E;case"isFinite":if(e.currentType=o.Type.bool,1!=u.length)return r&&1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.f64,0);switch(e.currentType.kind){case 11:E=f.createBinary(s.BinaryOp.LtU32,f.createBinary(s.BinaryOp.AndI32,f.createUnary(s.UnaryOp.ReinterpretF32,y),f.createI32(2147483647)),f.createI32(2139095040));break;case 12:E=f.createBinary(s.BinaryOp.LtU64,f.createBinary(s.BinaryOp.AndI64,f.createUnary(s.UnaryOp.ReinterpretF64,y),f.createI64(4294967295,2147483647)),f.createI64(0,2146435072));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable();break;default:E=f.createI32(1)}return e.currentType=o.Type.bool,E;case"clz":if(1!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.i32,0);switch(e.currentType.kind){default:E=f.createUnary(s.UnaryOp.ClzI32,y);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable();break}case 4:E=f.createUnary(e.options.isWasm64?s.UnaryOp.ClzI64:s.UnaryOp.ClzI32,y);break;case 3:case 8:E=f.createUnary(s.UnaryOp.ClzI64,y);break;case 11:case 12:case 13:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable()}return E;case"ctz":if(1!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.i32,0);switch(e.currentType.kind){default:E=f.createUnary(s.UnaryOp.CtzI32,y);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable();break}case 4:E=f.createUnary(e.options.isWasm64?s.UnaryOp.CtzI64:s.UnaryOp.CtzI32,y);break;case 3:case 8:E=f.createUnary(s.UnaryOp.CtzI64,y);break;case 11:case 12:case 13:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable()}return E;case"popcnt":if(1!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.i32,0);switch(e.currentType.kind){default:E=f.createUnary(s.UnaryOp.PopcntI32,y);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable();break}case 4:E=f.createUnary(e.options.isWasm64?s.UnaryOp.PopcntI64:s.UnaryOp.PopcntI32,y);break;case 3:case 8:E=f.createUnary(s.UnaryOp.PopcntI64,y);break;case 11:case 12:case 13:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable()}return E;case"rotl":if(2!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",u.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.i32,0);switch(m=e.compileExpression(u[1],e.currentType),e.currentType.kind){case 0:case 1:case 5:case 6:case 10:E=n.makeSmallIntegerWrap(f.createBinary(s.BinaryOp.RotlI32,y,m),e.currentType,f);case 2:case 7:E=f.createBinary(s.BinaryOp.RotlI32,y,m);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable();break}case 4:E=f.createBinary(e.options.isWasm64?s.BinaryOp.RotlI64:s.BinaryOp.RotlI32,y,m);break;case 3:case 8:E=f.createBinary(s.BinaryOp.RotlI64,y,m);break;default:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable()}return E;case"rotr":if(2!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",u.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.i32,0);switch(m=e.compileExpression(u[1],e.currentType),e.currentType.kind){case 0:case 1:case 5:case 6:case 10:E=n.makeSmallIntegerWrap(f.createBinary(s.BinaryOp.RotrI32,y,m),e.currentType,f);break;case 2:case 7:E=f.createBinary(s.BinaryOp.RotrI32,y,m);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable();break}case 4:E=f.createBinary(e.options.isWasm64?s.BinaryOp.RotrI64:s.BinaryOp.RotrI32,y,m);break;case 3:case 8:E=f.createBinary(s.BinaryOp.RotrI64,y,m);break;default:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable()}return E;case"abs":if(1!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.f64,0);switch(e.currentType.kind){case 0:case 1:case 2:var I=e.currentFunction.getAndFreeTempLocal(o.Type.i32);E=f.createSelect(f.createTeeLocal(I.index,y),f.createBinary(s.BinaryOp.SubI32,f.createI32(0),f.createGetLocal(I.index,s.NativeType.I32)),f.createBinary(s.BinaryOp.GtI32,f.createGetLocal(I.index,s.NativeType.I32),f.createI32(0)));break;case 4:I=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),E=f.createSelect(f.createTeeLocal(I.index,y),f.createBinary(e.options.isWasm64?s.BinaryOp.SubI64:s.BinaryOp.SubI32,e.options.usizeType.toNativeZero(f),f.createGetLocal(I.index,e.options.nativeSizeType)),f.createBinary(e.options.isWasm64?s.BinaryOp.GtI64:s.BinaryOp.GtI32,f.createGetLocal(I.index,e.options.nativeSizeType),e.options.usizeType.toNativeZero(f)));break;case 3:I=e.currentFunction.getAndFreeTempLocal(o.Type.i64),E=f.createSelect(f.createTeeLocal(I.index,y),f.createBinary(s.BinaryOp.SubI64,f.createI64(0,0),f.createGetLocal(I.index,s.NativeType.I64)),f.createBinary(s.BinaryOp.GtI64,f.createGetLocal(I.index,s.NativeType.I64),f.createI64(0,0)));break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable();break}case 5:case 6:case 7:case 8:case 10:E=y;break;case 11:E=f.createUnary(s.UnaryOp.AbsF32,y);break;case 12:E=f.createUnary(s.UnaryOp.AbsF64,y);break;case 13:E=f.createUnreachable();break;default:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable()}return E;case"max":if(2!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",u.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.f64,0);switch(m=e.compileExpression(u[1],e.currentType),e.currentType.kind){case 0:case 1:case 2:var A=e.currentFunction.getTempLocal(o.Type.i32),N=e.currentFunction.getAndFreeTempLocal(o.Type.i32);e.currentFunction.freeTempLocal(A),E=f.createSelect(f.createTeeLocal(A.index,y),f.createTeeLocal(N.index,m),f.createBinary(s.BinaryOp.GtI32,f.createGetLocal(A.index,s.NativeType.I32),f.createGetLocal(N.index,s.NativeType.I32)));break;case 5:case 6:case 7:case 10:A=e.currentFunction.getTempLocal(o.Type.i32),N=e.currentFunction.getAndFreeTempLocal(o.Type.i32),e.currentFunction.freeTempLocal(A),E=f.createSelect(f.createTeeLocal(A.index,y),f.createTeeLocal(N.index,m),f.createBinary(s.BinaryOp.GtU32,f.createGetLocal(A.index,s.NativeType.I32),f.createGetLocal(N.index,s.NativeType.I32)));break;case 3:A=e.currentFunction.getTempLocal(o.Type.i64),N=e.currentFunction.getAndFreeTempLocal(o.Type.i64),e.currentFunction.freeTempLocal(A),E=f.createSelect(f.createTeeLocal(A.index,y),f.createTeeLocal(N.index,m),f.createBinary(s.BinaryOp.GtI64,f.createGetLocal(A.index,s.NativeType.I64),f.createGetLocal(N.index,s.NativeType.I64)));break;case 8:A=e.currentFunction.getTempLocal(o.Type.i64),N=e.currentFunction.getAndFreeTempLocal(o.Type.i64),e.currentFunction.freeTempLocal(A),E=f.createSelect(f.createTeeLocal(A.index,y),f.createTeeLocal(N.index,m),f.createBinary(s.BinaryOp.GtU64,f.createGetLocal(A.index,s.NativeType.I64),f.createGetLocal(N.index,s.NativeType.I64)));break;case 4:A=e.currentFunction.getTempLocal(e.options.usizeType),N=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(A),E=f.createSelect(f.createTeeLocal(A.index,y),f.createTeeLocal(N.index,m),f.createBinary(e.options.isWasm64?s.BinaryOp.GtI64:s.BinaryOp.GtI32,f.createGetLocal(A.index,e.options.nativeSizeType),f.createGetLocal(N.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable();break}A=e.currentFunction.getTempLocal(e.options.usizeType),N=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(A),E=f.createSelect(f.createTeeLocal(A.index,y),f.createTeeLocal(N.index,m),f.createBinary(e.options.isWasm64?s.BinaryOp.GtU64:s.BinaryOp.GtU32,f.createGetLocal(A.index,e.options.nativeSizeType),f.createGetLocal(N.index,e.options.nativeSizeType)));break;case 11:E=f.createBinary(s.BinaryOp.MaxF32,y,m);break;case 12:E=f.createBinary(s.BinaryOp.MaxF64,y,m);break;default:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable()}return E;case"min":if(2!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",u.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.f64,0);switch(m=e.compileExpression(u[1],e.currentType),e.currentType.kind){case 0:case 1:case 2:A=e.currentFunction.getTempLocal(o.Type.i32),N=e.currentFunction.getAndFreeTempLocal(o.Type.i32),e.currentFunction.freeTempLocal(A),E=f.createSelect(f.createTeeLocal(A.index,y),f.createTeeLocal(N.index,m),f.createBinary(s.BinaryOp.LtI32,f.createGetLocal(A.index,s.NativeType.I32),f.createGetLocal(N.index,s.NativeType.I32)));break;case 5:case 6:case 7:case 10:A=e.currentFunction.getTempLocal(o.Type.i32),N=e.currentFunction.getAndFreeTempLocal(o.Type.i32),e.currentFunction.freeTempLocal(A),E=f.createSelect(f.createTeeLocal(A.index,y),f.createTeeLocal(N.index,m),f.createBinary(s.BinaryOp.LtU32,f.createGetLocal(A.index,s.NativeType.I32),f.createGetLocal(N.index,s.NativeType.I32)));break;case 3:A=e.currentFunction.getTempLocal(o.Type.i64),N=e.currentFunction.getAndFreeTempLocal(o.Type.i64),e.currentFunction.freeTempLocal(A),E=f.createSelect(f.createTeeLocal(A.index,y),f.createTeeLocal(N.index,m),f.createBinary(s.BinaryOp.LtI64,f.createGetLocal(A.index,s.NativeType.I64),f.createGetLocal(N.index,s.NativeType.I64)));break;case 8:A=e.currentFunction.getTempLocal(o.Type.i64),N=e.currentFunction.getAndFreeTempLocal(o.Type.i64),e.currentFunction.freeTempLocal(A),E=f.createSelect(f.createTeeLocal(A.index,y),f.createTeeLocal(N.index,m),f.createBinary(s.BinaryOp.LtU64,f.createGetLocal(A.index,s.NativeType.I64),f.createGetLocal(N.index,s.NativeType.I64)));break;case 4:A=e.currentFunction.getTempLocal(e.options.usizeType),N=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(A),E=f.createSelect(f.createTeeLocal(A.index,y),f.createTeeLocal(N.index,m),f.createBinary(e.options.isWasm64?s.BinaryOp.LtI64:s.BinaryOp.LtI32,f.createGetLocal(A.index,e.options.nativeSizeType),f.createGetLocal(N.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable();break}A=e.currentFunction.getTempLocal(e.options.usizeType),N=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(A),E=f.createSelect(f.createTeeLocal(A.index,y),f.createTeeLocal(N.index,m),f.createBinary(e.options.isWasm64?s.BinaryOp.LtU64:s.BinaryOp.LtU32,f.createGetLocal(A.index,e.options.nativeSizeType),f.createGetLocal(N.index,e.options.nativeSizeType)));break;case 11:E=f.createBinary(s.BinaryOp.MinF32,y,m);break;case 12:E=f.createBinary(s.BinaryOp.MinF64,y,m);break;default:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable()}return E;case"ceil":if(1!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.f64,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable();break}default:E=y;break;case 11:E=f.createUnary(s.UnaryOp.CeilF32,y);break;case 12:E=f.createUnary(s.UnaryOp.CeilF64,y);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable()}return E;case"floor":if(1!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.f64,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable();break}default:E=y;break;case 11:E=f.createUnary(s.UnaryOp.FloorF32,y);break;case 12:E=f.createUnary(s.UnaryOp.FloorF64,y);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable()}return E;case"copysign":if(2!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",u.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.f64,0);switch(m=e.compileExpression(u[1],e.currentType),e.currentType.kind){case 11:E=f.createBinary(s.BinaryOp.CopysignF32,y,m);break;case 12:E=f.createBinary(s.BinaryOp.CopysignF64,y,m);break;default:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable()}return E;case"nearest":if(1!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.f64,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable();break}default:E=y;break;case 11:E=f.createUnary(s.UnaryOp.NearestF32,y);break;case 12:E=f.createUnary(s.UnaryOp.NearestF64,y);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable()}return E;case"reinterpret":if(1!=u.length)return r&&1==r.length||(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0")),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),f.createUnreachable();if(!r||1!=r.length)return r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),f.createUnreachable();switch(r[0].kind){case 2:case 7:y=e.compileExpression(u[0],o.Type.f32),E=f.createUnary(s.UnaryOp.ReinterpretF32,y);break;case 3:case 8:y=e.compileExpression(u[0],o.Type.f64),E=f.createUnary(s.UnaryOp.ReinterpretF64,y);break;case 9:if(r[0].is(256))return e.error(i.DiagnosticCode.Operation_not_supported,d.range),e.currentType=r[0],f.createUnreachable();case 4:y=e.compileExpression(u[0],e.options.isWasm64?o.Type.f64:o.Type.f32),E=f.createUnary(e.options.isWasm64?s.UnaryOp.ReinterpretF64:s.UnaryOp.ReinterpretF32,y);break;case 11:y=e.compileExpression(u[0],o.Type.u32),E=f.createUnary(s.UnaryOp.ReinterpretI32,y);break;case 12:y=e.compileExpression(u[0],o.Type.u64),E=f.createUnary(s.UnaryOp.ReinterpretI64,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable()}return e.currentType=r[0],E;case"sqrt":if(1!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.f64,0);switch(e.currentType.kind){case 11:E=f.createUnary(s.UnaryOp.SqrtF32,y);break;case 12:E=f.createUnary(s.UnaryOp.SqrtF64,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable()}return E;case"trunc":if(1!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),f.createUnreachable();if(r&&r.length){if(e.currentType=r[0],1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.f64,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable();break}default:E=y;break;case 11:E=f.createUnary(s.UnaryOp.TruncF32,y);break;case 12:E=f.createUnary(s.UnaryOp.TruncF64,y);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable()}return E;case"load":return u.length<1||u.length>2?(r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),u.length<1?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"1",u.length.toString(10)):e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",u.length.toString(10)),f.createUnreachable()):r&&1==r.length?(y=e.compileExpression(u[0],e.options.usizeType),(b=2==u.length?l(e,u[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(),b))):(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),f.createUnreachable());case"store":return e.currentType=o.Type.void,u.length<2||u.length>3?(r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),u.length<2?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"2",u.length.toString(10)):e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",u.length.toString(10)),f.createUnreachable()):r&&1==r.length?(y=e.compileExpression(u[0],e.options.usizeType),m=e.compileExpression(u[1],r[0],r[0].is(4)?0:1),T=void 0,e.currentType.is(4)&&r[0].is(4)&&r[0].size>e.currentType.size?(m=e.convertExpression(m,e.currentType,r[0],1,u[1]),T=r[0]):T=e.currentType,(b=3==u.length?l(e,u[2]):0)<0?f.createUnreachable():(e.currentType=o.Type.void,f.createStore(r[0].byteSize,y,m,T.toNativeType(),b))):(e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),f.createUnreachable());case"sizeof":if(e.currentType=e.options.usizeType,0!=u.length)return r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",u.length.toString(10)),f.createUnreachable();r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0");var C=r[0].byteSize;return e.options.isWasm64?h.is(4)&&h.size<=32?(e.currentType=o.Type.u32,E=f.createI32(C)):E=f.createI64(C,0):h.is(4)&&64==h.size?(e.currentType=o.Type.u64,E=f.createI64(C,0)):E=f.createI32(C),E;case"alignof":if(e.currentType=e.options.usizeType,0!=u.length)return r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",u.length.toString(10)),f.createUnreachable();if(!r||1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),f.createUnreachable();var S=void 0;switch(C=r[0].byteSize){case 1:S=0;break;case 2:S=1;break;case 4:S=2;break;case 8:S=3;break;default:return assert(!1),f.createUnreachable()}return e.options.isWasm64?h.is(4)&&h.size<=32?(e.currentType=o.Type.u32,E=f.createI32(S)):E=f.createI64(S,0):h.is(4)&&64==h.size?(e.currentType=o.Type.u64,E=f.createI64(S,0)):E=f.createI32(S),E;case"offsetof":if(e.currentType=e.options.usizeType,u.length>1)return r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),f.createUnreachable();if(!r||1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),f.createUnreachable();var O;if(!(O=r[0].classReference))return e.error(i.DiagnosticCode.Operation_not_supported,d.range),f.createUnreachable();var b=void 0;if(u.length){if(u[0].kind!=a.NodeKind.LITERAL||u[0].literalKind!=a.LiteralKind.STRING)return e.error(i.DiagnosticCode.String_literal_expected,u[0].range),f.createUnreachable();var L=u[0].value,k=O.members?O.members.get(L):null;if(!k||k.kind!=c.ElementKind.FIELD)return e.error(i.DiagnosticCode.Type_0_has_no_property_1,u[0].range,O.internalName,L),f.createUnreachable();b=k.memoryOffset}else b=O.currentMemoryOffset;return e.options.isWasm64?h.is(4)&&h.size<=32?(e.currentType=o.Type.u32,f.createI32(b)):f.createI64(b):h.is(4)&&64==h.size?(e.currentType=o.Type.u64,f.createI64(b)):f.createI32(b);case"select":if(3!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",u.length.toString(10)),f.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.i32,0);switch(T=e.currentType,m=e.compileExpression(u[1],T),g=e.compileExpression(u[2],o.Type.i32),e.currentType=T,e.currentType.kind){default:E=f.createSelect(y,m,g);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=f.createUnreachable()}return E;case"unreachable":return 0!=u.length&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",u.length.toString(10)),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),f.createUnreachable();case"current_memory":return e.currentType=o.Type.i32,0!=u.length&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",u.length.toString(10)),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),f.createHost(s.HostOp.CurrentMemory);case"grow_memory":return e.currentType=o.Type.i32,1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",u.length.toString(10)),y=f.createUnreachable()):y=e.compileExpression(u[0],o.Type.i32),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),f.createHost(s.HostOp.GrowMemory,null,[y]);case"move_memory":if(r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),3!=u.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",u.length.toString(10)),e.currentType=o.Type.void,f.createUnreachable();throw y=e.compileExpression(u[0],e.options.usizeType),m=e.compileExpression(u[1],e.options.usizeType),g=e.compileExpression(u[2],e.options.usizeType),e.currentType=o.Type.void,new Error("not implemented");case"set_memory":if(r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),3!=u.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",u.length.toString(10)),e.currentType=o.Type.void,f.createUnreachable();throw y=e.compileExpression(u[0],e.options.usizeType),m=e.compileExpression(u[1],o.Type.u32),g=e.compileExpression(u[2],e.options.usizeType),e.currentType=o.Type.void,new Error("not implemented");case"changetype":return r&&1==r.length?9!=r[0].kind?(e.error(i.DiagnosticCode.Operation_not_supported,d.range),e.currentType=r[0],f.createUnreachable()):1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=r[0],f.createUnreachable()):(y=e.compileExpression(u[0],e.options.usizeType,0),e.currentType=r[0],9!=e.currentType.kind?(e.error(i.DiagnosticCode.Operation_not_supported,d.range),f.createUnreachable()):y):(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),f.createUnreachable());case"assert":if(u.length<1||u.length>2)return r&&(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),u.length<1?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"1",u.length.toString(10)):u.length>2&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",u.length.toString(10)),f.createUnreachable();if(r){if(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),f.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpressionRetainType(u[0],o.Type.i32);if(T=e.currentType,e.currentType=T.nonNullableType,e.options.noAssert)return h==o.Type.void?(e.currentType=o.Type.void,f.createNop()):y;var x=_(e,2==u.length?u[1]:null,d);if(e.currentType=T.nonNullableType,h==o.Type.void){switch(e.currentType.kind){default:E=f.createIf(f.createUnary(s.UnaryOp.EqzI32,y),x);break;case 3:case 8:E=f.createIf(f.createUnary(s.UnaryOp.EqzI64,y),x);break;case 4:case 9:E=f.createIf(f.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,y),x);break;case 11:E=f.createIf(f.createBinary(s.BinaryOp.EqF32,y,f.createF32(0)),x);break;case 12:E=f.createIf(f.createBinary(s.BinaryOp.EqF64,y,f.createF64(0)),x);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=x}e.currentType=o.Type.void}else switch(e.currentType.kind){default:I=e.currentFunction.getAndFreeTempLocal(o.Type.i32),E=f.createIf(f.createUnary(s.UnaryOp.EqzI32,f.createTeeLocal(I.index,y)),x,f.createGetLocal(I.index,s.NativeType.I32));break;case 3:case 8:I=e.currentFunction.getAndFreeTempLocal(o.Type.i64),E=f.createIf(f.createUnary(s.UnaryOp.EqzI64,f.createTeeLocal(I.index,y)),x,f.createGetLocal(I.index,s.NativeType.I64));break;case 4:case 9:I=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),E=f.createIf(f.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,f.createTeeLocal(I.index,y)),x,f.createGetLocal(I.index,e.options.nativeSizeType));break;case 11:I=e.currentFunction.getAndFreeTempLocal(o.Type.f32),E=f.createIf(f.createBinary(s.BinaryOp.EqF32,f.createTeeLocal(I.index,y),f.createF32(0)),x,f.createGetLocal(I.index,s.NativeType.F32));break;case 12:I=e.currentFunction.getAndFreeTempLocal(o.Type.f64),E=f.createIf(f.createBinary(s.BinaryOp.EqF64,f.createTeeLocal(I.index,y),f.createF64(0)),x,f.createGetLocal(I.index,s.NativeType.F64));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=x}return E;case"i8":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=o.Type.i8,f.createUnreachable()):e.compileExpression(u[0],o.Type.i8,2);case"i16":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=o.Type.i16,f.createUnreachable()):e.compileExpression(u[0],o.Type.i16,2);case"i32":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=o.Type.i32,f.createUnreachable()):e.compileExpression(u[0],o.Type.i32,2);case"i64":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=o.Type.i64,f.createUnreachable()):e.compileExpression(u[0],o.Type.i64,2);case"isize":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=e.options.isWasm64?o.Type.isize64:o.Type.isize32,f.createUnreachable()):e.compileExpression(u[0],e.options.isWasm64?o.Type.isize64:o.Type.isize32,2);case"u8":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=o.Type.u8,f.createUnreachable()):e.compileExpression(u[0],o.Type.u8,2);case"u16":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=o.Type.u16,f.createUnreachable()):e.compileExpression(u[0],o.Type.u16,2);case"u32":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=o.Type.u32,f.createUnreachable()):e.compileExpression(u[0],o.Type.u32,2);case"u64":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=o.Type.u64,f.createUnreachable()):e.compileExpression(u[0],o.Type.u64,2);case"usize":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=e.options.usizeType,f.createUnreachable()):e.compileExpression(u[0],e.options.usizeType,2);case"bool":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=o.Type.bool,f.createUnreachable()):e.compileExpression(u[0],o.Type.bool,2);case"f32":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=o.Type.f32,f.createUnreachable()):e.compileExpression(u[0],o.Type.f32,2);case"f64":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=o.Type.f64,f.createUnreachable()):e.compileExpression(u[0],o.Type.f64,2)}return e.error(i.DiagnosticCode.Operation_not_supported,d.range),f.createUnreachable()};var u="allocate_memory";t.compileAllocate=function(e,t,r){var n=e.program;assert(t.program==n);var a=e.module,o=e.options,s=n.elementsLookup.get(u);if(!s)return n.error(i.DiagnosticCode.Cannot_find_name_0,r.range,u),a.createUnreachable();if(s.kind!=c.ElementKind.FUNCTION_PROTOTYPE)return n.error(i.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,r.range,s.internalName),a.createUnreachable();var p=s.resolve();return p&&e.compileFunction(p)?(e.currentType=t.type,a.createCall(p.internalName,[o.isWasm64?a.createI64(t.currentMemoryOffset):a.createI32(t.currentMemoryOffset)],o.nativeSizeType)):a.createUnreachable()};var h="abort";function _(e,t,r){var n=e.program,i=e.module,a=n.typesLookup.get("string");if(!a)return i.createUnreachable();var p=n.elementsLookup.get(h);if(!p||p.kind!=c.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,a):a.toNativeZero(i),_=e.compileStaticString(r.range.source.normalizedPath);return e.currentType=o.Type.void,i.createBlock(null,[i.createCallImport(l.internalName,[u,_,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){"number"==typeof n&&(e+=n),t[e]=r},e.load=function(e){return"number"==typeof off&&(e+=off),t[e]}})},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.abs=Math.abs,t.max=Math.max,t.min=Math.min,t.ceil=Math.ceil,t.floor=Math.floor,t.select=function(e,t,r){return r?e:t},t.sqrt=Math.sqrt,t.trunc=Math.trunc,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.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}}}},o=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),o=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)o.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 o};Object.defineProperty(t,"__esModule",{value:!0});var s=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(){}}(),_=function(){return function(){}}(),d=function(){return function(){}}();function y(e){switch(e){case"[]":return u.INDEXED_GET;case"[]=":return u.INDEXED_SET;case"+":return u.ADD;case"-":return u.SUB;case"*":return u.MUL;case"/":return u.DIV;case"%":return u.REM;case"**":return u.POW;case"&":return u.AND;case"|":return u.OR;case"^":return u.XOR;case"==":return u.EQ;case"!=":return u.NE;case">":return u.GT;case">=":return u.GE;case"<":return u.LT;case"<=":return u.LE}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.ADD=3]="ADD",e[e.SUB=4]="SUB",e[e.MUL=5]="MUL",e[e.DIV=6]="DIV",e[e.REM=7]="REM",e[e.POW=8]="POW",e[e.AND=9]="AND",e[e.OR=10]="OR",e[e.XOR=11]="XOR",e[e.EQ=12]="EQ",e[e.NE=13]="NE",e[e.GT=14]="GT",e[e.GE=15]="GE",e[e.LT=16]="LT",e[e.LE=17]="LE"}(u=t.OperatorKind||(t.OperatorKind={}));var m,g,E,T=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.typesLookup=T,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+="<"+v+">")}else if(r){var I=r.get(u);if(I)return I}}return(d=this.typesLookup.get(h))||(d=this.typesLookup.get(u))?d:(n&&this.error(s.DiagnosticCode.Cannot_find_name_0,o.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(s.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(s.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range.atEnd,i.toString(10),"0"),null;for(var o=new Array(i),c=0;c"),n=new x(this,K,w,C||l,t),this.instances.set(r,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),o=new r(this.program,i,n.internalName+"<"+a+">"+t.INSTANCE_DELIMITER+i,this.declaration,n,this.decoratorFlags);return o.flags=this.flags,o.operatorKind=this.operatorKind,o.classTypeArguments=e,o},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){var t;switch(e.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")}if(t.length>0)return t[t.length-1];var r=this.addLocal(e);return t.push(r),r},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){var r=this.debugLocations;if(r)for(var n=0,i=r.length;n",S+="<"+n+">"),(i=new P(this,C,S,e,A)).contextualTypeArguments=r,this.instances.set(n,i);var O,b,L,k,x,R,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 D(X,S+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=S+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 U(this.program,X.simpleName,S+t.INSTANCE_DELIMITER+X.simpleName,this),J=j.resolvePartial(e);if(!J)return null;if(J.internalName=S+t.INSTANCE_DELIMITER+J.simpleName,$.getterPrototype=J,Z){var ee=Z.resolvePartial(e);if(!ee)return null;ee.internalName=S+t.INSTANCE_DELIMITER+ee.simpleName,$.setterPrototype=ee}i.members.set(X.simpleName,$);break;default:assert(!1)}}}catch(e){x={error:e}}finally{try{H&&!H.done&&(R=V.return)&&R.call(V)}finally{if(x)throw x.error}}try{for(var te=a(this.overloadPrototypes),re=te.next();!re.done;re=te.next()){var ne=o(re.value,2),ie=ne[0],ae=ne[1];assert(ie!=u.INVALID);var oe=void 0;if(ae.is(g.INSTANCE)){var se=ae.resolvePartial(e);if(!se)continue;oe=se.resolve()}else oe=ae.resolve();if(oe){var ce=i.overloads;ce||(i.overloads=ce=new Map),ce.set(ie,oe)}}}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}(I);t.ClassPrototype=F;var P=function(e){function t(t,r,n,i,s){void 0===i&&(i=null),void 0===s&&(s=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=s,s){var p=s.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=o(u.value,2),_=h[0],d=h[1];c.contextualTypeArguments.set(_,d)}}catch(e){E={error:e}}finally{try{u&&!u.done&&(T=l.return)&&T.call(l)}finally{if(E)throw E.error}}}}var y,g,E,T,f=c.prototype.declaration;if(f){var v=f.typeParameters;if(i){if((g=i.length)!=v.length)throw new Error("type argument count mismatch");if(g)for(c.contextualTypeArguments||(c.contextualTypeArguments=new Map),y=0;y0&&!a.isLineBreak(n.charCodeAt(o-1));)o--;for(;s=0;--o)free_memory(a[o])}},e.prototype.createCall=function(e,t,r){var n=u(e),i=l(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=u(e),i=l(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=l(t),i=u(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=u(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=u(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=u(e);try{_BinaryenRemoveFunction(this.ref,t)}finally{free_memory(t)}},e.prototype.addFunctionExport=function(e,t){var r=u(e),n=u(t);try{return _BinaryenAddFunctionExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addTableExport=function(e,t){var r=u(e),n=u(t);try{return _BinaryenAddTableExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addMemoryExport=function(e,t){var r=u(e),n=u(t);try{return _BinaryenAddMemoryExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addGlobalExport=function(e,t){var r=u(e),n=u(t);try{return _BinaryenAddGlobalExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.removeExport=function(e){var t=u(e);try{_BinaryenRemoveExport(this.ref,t)}finally{free_memory(t)}},e.prototype.addFunctionImport=function(e,t,r,n){var i=u(e),a=u(t),o=u(r);try{return _BinaryenAddFunctionImport(this.ref,i,a,o,n)}finally{free_memory(o),free_memory(a),free_memory(i)}},e.prototype.addTableImport=function(e,t,r){var n=u(e),i=u(t),a=u(r);try{return _BinaryenAddTableImport(this.ref,n,i,a)}finally{free_memory(a),free_memory(i),free_memory(n)}},e.prototype.addMemoryImport=function(e,t,r){var n=u(e),i=u(t),a=u(r);try{return _BinaryenAddMemoryImport(this.ref,n,i,a)}finally{free_memory(a),free_memory(i),free_memory(n)}},e.prototype.addGlobalImport=function(e,t,r,n){var i=u(e),a=u(t),o=u(r);try{return _BinaryenAddGlobalImport(this.ref,i,a,o,n)}finally{free_memory(o),free_memory(a),free_memory(i)}},e.prototype.removeImport=function(e){var t=u(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 o=u(i),s=r.length,c=new Array(s),h=new Array(s),_=new Array(s),d=0;d=0;--d)free_memory(c[d]);free_memory(o)}},e.prototype.setFunctionTable=function(e){var t=l(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.validate=function(){return 1==_BinaryenModuleValidate(this.ref)},e.prototype.interpret=function(){_BinaryenModuleInterpret(this.ref)},e.prototype.toBinary=function(e){var t=this.out,r=u(e),n=0,i=0;try{_BinaryenModuleAllocateAndWrite(t,this.ref,r),n=h(t);var a=h(t+4);i=h(t+8);var o=new d;return o.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){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 h(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,o=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++)))):o.push((31&t)<<6|r)):o.push(t);return String.fromCodePoints(o)}t.Relooper=c,t.readString=_;var d=function(){return function(){}}();t.BinaryModule=d},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),o=r(6);t.Token=o.Token,t.Range=o.Range;var s,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.LITERAL=13]="LITERAL",e[e.NEW=14]="NEW",e[e.NULL=15]="NULL",e[e.PARENTHESIZED=16]="PARENTHESIZED",e[e.PROPERTYACCESS=17]="PROPERTYACCESS",e[e.TERNARY=18]="TERNARY",e[e.SUPER=19]="SUPER",e[e.THIS=20]="THIS",e[e.TRUE=21]="TRUE",e[e.CONSTRUCTOR=22]="CONSTRUCTOR",e[e.UNARYPOSTFIX=23]="UNARYPOSTFIX",e[e.UNARYPREFIX=24]="UNARYPREFIX",e[e.BLOCK=25]="BLOCK",e[e.BREAK=26]="BREAK",e[e.CONTINUE=27]="CONTINUE",e[e.DO=28]="DO",e[e.EMPTY=29]="EMPTY",e[e.EXPORT=30]="EXPORT",e[e.EXPORTIMPORT=31]="EXPORTIMPORT",e[e.EXPRESSION=32]="EXPRESSION",e[e.FOR=33]="FOR",e[e.IF=34]="IF",e[e.IMPORT=35]="IMPORT",e[e.RETURN=36]="RETURN",e[e.SWITCH=37]="SWITCH",e[e.THROW=38]="THROW",e[e.TRY=39]="TRY",e[e.VARIABLE=40]="VARIABLE",e[e.VOID=41]="VOID",e[e.WHILE=42]="WHILE",e[e.CLASSDECLARATION=43]="CLASSDECLARATION",e[e.ENUMDECLARATION=44]="ENUMDECLARATION",e[e.ENUMVALUEDECLARATION=45]="ENUMVALUEDECLARATION",e[e.FIELDDECLARATION=46]="FIELDDECLARATION",e[e.FUNCTIONDECLARATION=47]="FUNCTIONDECLARATION",e[e.IMPORTDECLARATION=48]="IMPORTDECLARATION",e[e.INTERFACEDECLARATION=49]="INTERFACEDECLARATION",e[e.METHODDECLARATION=50]="METHODDECLARATION",e[e.NAMESPACEDECLARATION=51]="NAMESPACEDECLARATION",e[e.TYPEDECLARATION=52]="TYPEDECLARATION",e[e.VARIABLEDECLARATION=53]="VARIABLEDECLARATION",e[e.DECORATOR=54]="DECORATOR",e[e.EXPORTMEMBER=55]="EXPORTMEMBER",e[e.SWITCHCASE=56]="SWITCHCASE",e[e.COMMENT=57]="COMMENT"}(s=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&&Re(t,i),i.isNullable=r,i},e.createOmittedType=function(t){return e.createType(e.createIdentifierExpression("",t),null,!1,t)},e.createTypeParameter=function(e,t,r){var n=new 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 _;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.parameterTypes=e,Re(e,a),a.returnType=t,t.parent=a,a.explicitThisType=r,r&&(r.parent=a),a.isNullable=n,a},e.createDecorator=function(e,t,r){var n=new g;return n.range=r,n.name=e,e.parent=n,n.arguments=t,t&&Re(t,n),n.decoratorKind=e.kind==s.IDENTIFIER?m(e.text):d.CUSTOM,n},e.createComment=function(e,t,r){var n=new E;return n.range=r,n.commentKind=t,n.text=e,n},e.createIdentifierExpression=function(e,t){var r=new v;return r.range=t,r.text=e,r},e.createEmptyIdentifierExpression=function(e){var t=new v;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}(j);t.ClassDeclaration=ee;var te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.CONTINUE,t}return i(t,e),t}(Q);t.ContinueStatement=te;var re=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.DO,t}return i(t,e),t}(Q);t.DoStatement=re;var ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EMPTY,t}return i(t,e),t}(Q);t.EmptyStatement=ne;var ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMDECLARATION,t}return i(t,e),t}(j);t.EnumDeclaration=ie;var ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMVALUEDECLARATION,t}return i(t,e),t}(j);t.EnumValueDeclaration=ae;var oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORTIMPORT,t}return i(t,e),t}(p);t.ExportImportStatement=oe;var se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORTMEMBER,t}return i(t,e),t}(p);t.ExportMember=se;var ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORT,t}return i(t,e),t}(Q);t.ExportStatement=ce;var pe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPRESSION,t}return i(t,e),t}(Q);t.ExpressionStatement=pe;var le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FIELDDECLARATION,t.parameterIndex=-1,t}return i(t,e),t}(Z);t.FieldDeclaration=le;var ue=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FOR,t}return i(t,e),t}(Q);t.ForStatement=ue;var he=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FUNCTIONDECLARATION,t}return 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}(j);t.FunctionDeclaration=he;var _e=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IF,t}return i(t,e),t}(Q);t.IfStatement=_e;var de=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORTDECLARATION,t}return i(t,e),t}(j);t.ImportDeclaration=de;var ye=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORT,t}return i(t,e),t}(Q);t.ImportStatement=ye;var me=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.INTERFACEDECLARATION,t}return i(t,e),t}(ee);t.InterfaceDeclaration=me;var ge=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.METHODDECLARATION,t}return i(t,e),t}(he);t.MethodDeclaration=ge;var Ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.NAMESPACEDECLARATION,t}return i(t,e),t}(j);t.NamespaceDeclaration=Ee;var Te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.RETURN,t}return i(t,e),t}(Q);t.ReturnStatement=Te;var fe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCHCASE,t}return i(t,e),t}(p);t.SwitchCase=fe;var ve=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCH,t}return i(t,e),t}(Q);t.SwitchStatement=ve;var Ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.THROW,t}return i(t,e),t}(Q);t.ThrowStatement=Ie;var Ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TRY,t}return i(t,e),t}(Q);t.TryStatement=Ae;var Ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TYPEDECLARATION,t}return i(t,e),t}(j);t.TypeDeclaration=Ne;var Ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLEDECLARATION,t}return i(t,e),t}(Z);t.VariableDeclaration=Ce;var Se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLE,t}return i(t,e),t}(Q);t.VariableStatement=Se;var Oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VOID,t}return i(t,e),t}(Q);t.VoidStatement=Oe;var be=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.WHILE,t}return i(t,e),t}(Q);function Le(e,t){if(t)for(var r=0,n=t.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 u=function(){function e(e,t,r){this.debugInfoRef=0,this.source=e,this.start=t,this.end=r}return e.join=function(t,r){if(t.source!=r.source)throw new Error("source mismatch");return new e(t.source,t.startr.end?t.end:r.end)},Object.defineProperty(e.prototype,"atStart",{get:function(){return new e(this.source,this.start,this.start)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"atEnd",{get:function(){return new e(this.source,this.end,this.end)},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"line",{get:function(){for(var e=this.source.text,t=1,r=this.start;r>=0;--r)10==e.charCodeAt(r)&&t++;return t},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"column",{get:function(){for(var e=this.source.text,t=0,r=this.start-1;r>=0&&10!=e.charCodeAt(r);--r)++t;return t},enumerable:!0,configurable:!0}),e.prototype.toString=function(){return this.source.text.substring(this.start,this.end)},e}();t.Range=u;var h=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,r)||this;n.end=0,n.pos=0,n.token=-1,n.tokenPos=0,n.nextToken=-1,n.nextTokenPos=0,n.nextTokenOnNewLine=!1,n.onComment=null,n.source=t,n.pos=0,n.end=t.text.length,n.diagnostics=r||new Array;var i=t.text;if(n.pos1&&this.pos2&&this.pos1&&this.pos1&&this.pos1&&this.pos2&&this.pos1&&this.pos1&&this.pos1&&this.pos2&&this.pos+11&&this.pos1&&this.pos2&&this.pos1&&this.pos2&&this.pos1&&this.pos2&&this.pos3&&this.pos1&&this.pos1&&this.posi;)if(c.isLineBreak(n.charCodeAt(this.tokenPos))){this.nextTokenOnNewLine=!0;break}this.pos=i,this.token=a,this.tokenPos=o}return this.nextToken},t.prototype.skip=function(e){var t=this.pos,r=this.token,n=this.tokenPos,i=i32.MAX_VALUE;switch(e){case a.GREATERTHAN:i=1}return this.token=this.unsafeNext(e==a.IDENTIFIER,i),this.token==e?(this.nextToken=-1,!0):(this.pos=t,this.token=r,this.tokenPos=n,!1)},t.prototype.mark=function(){var e;return d?(e=d,d=null):e=new _,e.pos=this.pos,e.token=this.token,e.tokenPos=this.tokenPos,e},t.prototype.discard=function(e){d=e},t.prototype.reset=function(e){this.pos=e.pos,this.token=e.token,this.tokenPos=e.tokenPos,this.nextToken=-1,d=e},t.prototype.range=function(e,t){return void 0===e&&(e=-1),void 0===t&&(t=-1),e<0?(e=this.tokenPos,t=this.pos):t<0&&(t=e),new u(this.source,e,t)},t.prototype.readIdentifier=function(){for(var e=this.source.text,t=this.pos;++this.pos=this.end){n+=e.substring(r,this.pos),this.error(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(c.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(c.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)break;t++}return!0},t.prototype.readInteger=function(){var e=this.source.text;if(48==e.charCodeAt(this.pos)&&this.pos+2=48&&i<=57)r=i64_add(i64_mul(r,n),i64_new(i-48,0));else if(i>=65&&i<=70)r=i64_add(i64_mul(r,n),i64_new(10+i-65,0));else{if(!(i>=97&&i<=102))break;r=i64_add(i64_mul(r,n),i64_new(10+i-97,0))}++this.pos}return this.pos==t&&this.error(o.DiagnosticCode.Hexadecimal_digit_expected,this.range(t)),r},t.prototype.readDecimalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(10,0);this.pos=48&&i<=57))break;r=i64_add(i64_mul(r,n),i64_new(i-48,0)),++this.pos}return this.pos==t&&this.error(o.DiagnosticCode.Digit_expected,this.range(t)),r},t.prototype.readOctalInteger=function(){for(var e=this.source.text,t=this.pos,r=i64_new(0,0),n=i64_new(8,0);this.pos=48&&i<=55))break;r=i64_add(i64_mul(r,n),i64_new(i-48,0)),++this.pos}return this.pos==t&&this.error(o.DiagnosticCode.Octal_digit_expected,this.range(t)),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);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=h;var _=function(){return function(){}}();t.State=_;var d=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.SIZE=16]="SIZE",e[e.SMALL=32]="SMALL",e[e.LONG=64]="LONG",e[e.VALUE=128]="VALUE",e[e.REFERENCE=256]="REFERENCE",e[e.NULLABLE=512]="NULLABLE",e[e.THIS=1024]="THIS"}(t.TypeFlags||(t.TypeFlags={}));var i=function(){function e(e,t,r){this.nullableType=null,this.thisType=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 e.prototype.computeSmallIntegerShift=function(e){return e.size-this.size},e.prototype.computeSmallIntegerMask=function(e){return-1>>>e.size-this.size},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.nullableType||(assert(!this.is(512)),this.nullableType=new e(this.kind,512|this.flags,this.size),this.nullableType.classReference=this.classReference,this.nullableType.signatureReference=this.signatureReference),this.nullableType},e.prototype.asThis=function(){var t=this.thisType;return t||((t=new e(this.kind,1024|this.flags,this.size)).classReference=this.classReference,t.nullableType=this.nullableType,t.nonNullableType=this.nonNullableType,this.thisType=t,t)},e.prototype.isAssignableTo=function(e,t){var r,n,i,a;if(void 0===t&&(t=!1),this.is(256)){if(e.is(256))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){switch(void 0===e&&(e=!1),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:var t=this.signatureReference;return e||!t?"u32":t.toString(!0);case 8:return"u64";case 9:var r=this.classReference;return e||!r?"usize":r.toString();case 10:return"bool";case 11:return"f32";case 12:return"f64";case 13:return"void";default:return assert(!1),""}},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]:s(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 o=0;o=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 o=null;function s(e){o||(o=[]);for(var t=o.length;t<=e;++t)o.push("arg$"+t.toString(10));return o[e-1]}t.getGenericParameterName=s},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 o,s=r(21),c=r(2),p=r(3),l=r(0),u=r(6),h=r(4),_=r(7),d=r(1);!function(e){e[e.WASM32=0]="WASM32",e[e.WASM64=1]="WASM64"}(o=t.Target||(t.Target={}));var y=function(){function e(){this.target=o.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}return Object.defineProperty(e.prototype,"isWasm64",{get:function(){return this.target==o.WASM64},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"usizeType",{get:function(){return this.target==o.WASM64?_.Type.usize64:_.Type.usize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isizeType",{get:function(){return this.target==o.WASM64?_.Type.isize64:_.Type.isize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"nativeSizeType",{get:function(){return this.target==o.WASM64?p.NativeType.I64:p.NativeType.I32},enumerable:!0,configurable:!0}),e}();t.Options=y,function(e){e[e.NONE=0]="NONE",e[e.IMPLICIT=1]="IMPLICIT",e[e.EXPLICIT=2]="EXPLICIT"}(t.ConversionKind||(t.ConversionKind={}));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=_.Type.void,n.startFunctionBody=[],n.memorySegments=new Array,n.stringSegments=new Map,n.functionTable=new Array,n.argumentCountRef=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,r.usizeType.byteSize)),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 _.Signature([],_.Type.void));this.startFunction=i,this.currentFunction=i;for(var a=r.sources,o=0,s=a.length;o"),!1;e.type=this.currentType}else assert(!1);var a=e.type.toNativeType(),o=e.isAny(l.CommonFlags.CONST)||e.is(l.CommonFlags.STATIC|l.CommonFlags.READONLY);if(e.is(l.CommonFlags.AMBIENT))return o?(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 s=!1;e.is(l.CommonFlags.INLINED)?n=this.compileInlineConstant(e,e.type,!0):r&&r.initializer?(n||(n=this.compileExpression(r.initializer,e.type)),_BinaryenExpressionGetId(n)!=p.ExpressionId.Const&&(o?(n=this.precomputeExpressionRef(n),_BinaryenExpressionGetId(n)!=p.ExpressionId.Const&&(this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,r.range),s=!0)):s=!0)):n=e.type.toNativeZero(t);var u=e.internalName;if(s)t.addGlobal(u,a,!0,e.type.toNativeZero(t)),this.startFunctionBody.push(t.createSetGlobal(u,n));else if(o){switch(_BinaryenExpressionGetType(n)){case p.NativeType.I32:e.constantValueKind=1,e.constantIntegerValue=i64_new(_BinaryenConstGetValueI32(n),0);break;case p.NativeType.I64:e.constantValueKind=1,e.constantIntegerValue=i64_new(_BinaryenConstGetValueI64Low(n),_BinaryenConstGetValueI64High(n));break;case p.NativeType.F32:e.constantValueKind=2,e.constantFloatValue=_BinaryenConstGetValueF32(n);break;case p.NativeType.F64:e.constantValueKind=2,e.constantFloatValue=_BinaryenConstGetValueF64(n);break;default:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,assert(e.declaration).range),!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,!o,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 o=a(e.members.values()),s=o.next();!s.done;s=o.next()){var u=s.value;if(u.kind==l.ElementKind.ENUMVALUE){var h=!1,d=u,y=d.declaration;if(d.set(l.CommonFlags.COMPILED),d.is(l.CommonFlags.INLINED))e.declaration.isTopLevelExport&&t.addGlobal(d.internalName,p.NativeType.I32,!1,t.createI32(d.constantValue));else{var m=void 0;y.value?(m=this.compileExpression(y.value,_.Type.i32),_BinaryenExpressionGetId(m)!=p.ExpressionId.Const&&(m=this.precomputeExpressionRef(m),_BinaryenExpressionGetId(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(d.internalName,p.NativeType.I32,!0,t.createI32(0)),this.startFunctionBody.push(t.createSetGlobal(d.internalName,m))):(t.addGlobal(d.internalName,p.NativeType.I32,!1,m),_BinaryenExpressionGetType(m)==p.NativeType.I32?(d.constantValue=_BinaryenConstGetValueI32(m),d.set(l.CommonFlags.INLINED)):(assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,y.range),d.constantValue=0))}i=d,e.is(l.CommonFlags.MODULE_EXPORT)&&(u.is(l.CommonFlags.INLINED)?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{s&&!s.done&&(n=o.return)&&n.call(o)}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 o=0;o=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")+"|"+n);var y=t.createBlock("case0|"+n,c,p.NativeType.None),m=!0,g=!0,E=!0;for(h=0;h=0){I=r.flow;m&&I.set(1),g&&I.set(2),E&&I.set(16)}return y},t.prototype.compileThrowStatement=function(e){var t=this.currentFunction.flow;return t.set(2),t.set(1),s.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 o=0;o");continue}m=this.currentType}var E=!1;if(d.is(l.CommonFlags.CONST))if(g)if(g=this.precomputeExpressionRef(g),_BinaryenExpressionGetId(g)==p.ExpressionId.Const){var T=new l.Local(r,y,-1,m);switch(_BinaryenExpressionGetType(g)){case p.NativeType.I32:T=T.withConstantIntegerValue(_BinaryenConstGetValueI32(g),0);break;case p.NativeType.I64:T=T.withConstantIntegerValue(_BinaryenConstGetValueI64Low(g),_BinaryenConstGetValueI64High(g));break;case p.NativeType.F32:T=T.withConstantFloatValue(_BinaryenConstGetValueF32(g));break;case p.NativeType.F64:T=T.withConstantFloatValue(_BinaryenConstGetValueF64(g));break;default:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,d.range),this.module.createUnreachable()}var f=n.flow.scopedLocals;if(f){if(f.has(y))return this.error(c.DiagnosticCode.Duplicate_identifier_0,d.name.range,y),this.module.createUnreachable()}else n.flow.scopedLocals=f=new Map;f.set(y,T),E=!0}else this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,d.range);else this.error(c.DiagnosticCode._const_declarations_must_be_initialized,d.range);E||(d.isAny(l.CommonFlags.LET|l.CommonFlags.CONST)||u.is(1024)?u.addScopedLocal(m,y,d):n.addLocal(m,y,d),g&&s.push(this.compileAssignmentWithValue(d.name,g)))}return s.length?1==s.length?s[0]:this.module.createBlock(null,s,p.NativeType.None):0},t.prototype.compileVoidStatement=function(e){return this.compileExpression(e.expression,_.Type.void,2,!1)},t.prototype.compileWhileStatement=function(e){var t=this.module,r=v(this.compileExpression(e.condition,_.Type.i32,0),this.currentType,t);if(this.currentFunction.isAny(l.CommonFlags.GENERIC|l.CommonFlags.GENERIC_CONTEXT)&&_BinaryenExpressionGetId(r=this.precomputeExpressionRef(r))==p.ExpressionId.Const&&_BinaryenExpressionGetType(r)==p.NativeType.I32&&!_BinaryenConstGetValueI32(r))return t.createNop();var n=this.currentFunction,i=n.enterBreakContext(),a=n.flow.enterBranchOrScope();n.flow=a;var o="break|"+i;a.breakLabel=o;var s="continue|"+i;a.continueLabel=s;var c=this.compileStatement(e.statement);n.flow=a.leaveBranchOrScope(),n.leaveBreakContext();var u=t.createBlock(o,[t.createLoop(s,t.createIf(r,t.createBlock(null,[c,t.createBreak(s)],p.NativeType.None)))],p.NativeType.None);return u},t.prototype.compileInlineConstant=function(e,t,r){assert(e.is(l.CommonFlags.INLINED));var n=e.type;switch(!r&&n.is(4)&&t.is(4)&&n.size>i:0);case 5:case 6:case 10:var a=e.type.computeSmallIntegerMask(_.Type.i32);return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue)&a:0);case 2:case 7:return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 4:case 9:if(!e.program.options.isWasm64)return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 3:case 8:return 1==e.constantValueKind?this.module.createI64(i64_low(e.constantIntegerValue),i64_high(e.constantIntegerValue)):this.module.createI64(0);case 11:return this.module.createF32(e.constantFloatValue);case 12:return this.module.createF64(e.constantFloatValue);default:return assert(!1),this.module.createUnreachable()}},t.prototype.compileExpression=function(e,t,r,n){var i;switch(void 0===r&&(r=1),void 0===n&&(n=!0),this.currentType=t,e.kind){case h.NodeKind.ASSERTION:i=this.compileAssertionExpression(e,t);break;case h.NodeKind.BINARY:i=this.compileBinaryExpression(e,t,n);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.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,n);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,n);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),i=this.module.createUnreachable()}var a=this.currentType;return 0!=r&&a!=t&&(i=this.convertExpression(i,a,t,r,e),this.currentType=t),this.options.sourceMap&&E(i,e.range,this.module,this.currentFunction),i},t.prototype.compileExpressionRetainType=function(e,t,r){return void 0===r&&(r=!0),this.compileExpression(e,t==_.Type.void?_.Type.i32:t,0,r)},t.prototype.precomputeExpression=function(e,t,r){return void 0===r&&(r=1),this.precomputeExpressionRef(this.compileExpression(e,t,r))},t.prototype.precomputeExpressionRef=function(e){var t=this.module,r=this.currentType,n=r.toNativeType(),i=t.getFunctionTypeBySignature(n,null);i||(i=t.addFunctionType(r.toSignatureString(),n,null));var a=t.addFunction("__precompute",i,null,e);t.runPasses(["precompute"],a);var o=_BinaryenFunctionGetBody(a);return t.removeFunction("__precompute"),o},t.prototype.convertExpression=function(e,t,r,n,i){assert(0!=n);var a=this.module;return 13==t.kind?(assert(13!=r.kind),this.error(c.DiagnosticCode.Type_0_is_not_assignable_to_type_1,i.range,t.toString(),r.toString()),a.createUnreachable()):13==r.kind?a.createDrop(e):(1!=n||t.isAssignableTo(r)||this.error(c.DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast,i.range,t.toString(),r.toString()),t.is(8)?r.is(8)?11==t.kind?12==r.kind&&(e=a.createUnary(p.UnaryOp.PromoteF32,e)):11==r.kind&&(e=a.createUnary(p.UnaryOp.DemoteF64,e)):r.is(4)?11==t.kind?r.is(1)?r.is(64)?e=a.createUnary(p.UnaryOp.TruncF32ToI64,e):(e=a.createUnary(p.UnaryOp.TruncF32ToI32,e),r.is(32)&&(e=T(e,r,a))):r.is(64)?e=a.createUnary(p.UnaryOp.TruncF32ToU64,e):(e=a.createUnary(p.UnaryOp.TruncF32ToU32,e),r.is(32)&&(e=T(e,r,a))):r.is(1)?r.is(64)?e=a.createUnary(p.UnaryOp.TruncF64ToI64,e):(e=a.createUnary(p.UnaryOp.TruncF64ToI32,e),r.is(32)&&(e=T(e,r,a))):r.is(64)?e=a.createUnary(p.UnaryOp.TruncF64ToU64,e):(e=a.createUnary(p.UnaryOp.TruncF64ToU32,e),r.is(32)&&(e=T(e,r,a))):(assert(0==r.flags,"void type expected"),e=a.createDrop(e)):t.is(4)&&r.is(8)?e=11==r.kind?t.is(64)?a.createUnary(t.is(1)?p.UnaryOp.ConvertI64ToF32:p.UnaryOp.ConvertU64ToF32,e):a.createUnary(t.is(1)?p.UnaryOp.ConvertI32ToF32:p.UnaryOp.ConvertU32ToF32,e):t.is(64)?a.createUnary(t.is(1)?p.UnaryOp.ConvertI64ToF64:p.UnaryOp.ConvertU64ToF64,e):a.createUnary(t.is(1)?p.UnaryOp.ConvertI32ToF64:p.UnaryOp.ConvertU32ToF64,e):t.is(64)?r.is(64)||(e=a.createUnary(p.UnaryOp.WrapI64,e),r.is(32)&&(e=T(e,r,a))):r.is(64)?e=a.createUnary(r.is(1)?p.UnaryOp.ExtendI32:p.UnaryOp.ExtendU32,e):r.is(32)&&(t.size>r.size||t.size==r.size&&t.is(1)!=r.is(1))&&(e=T(e,r,a)),this.currentType=r,e)},t.prototype.compileAssertionExpression=function(e,t){var r=this.program.resolveType(e.toType,this.currentFunction.flow.contextualTypeArguments);return r?this.compileExpression(e.expression,r,2):this.module.createUnreachable()},t.prototype.compileBinaryExpression=function(e,t,r){void 0===r&&(r=!0);var n,i,a,o,s,h,d,y=this.module,m=e.left,g=e.right,E=!1,f=!1,I=null,A=e.operator;switch(A){case u.Token.LESSTHAN:if(n=this.compileExpressionRetainType(m,t),O=(i=this.currentType).classReference)if(b=O.lookupOverload(l.OperatorKind.LT)){d=this.compileBinaryOverload(b,m,g,e);break}if(a=this.compileExpressionRetainType(g,i),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!0)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"<",i.toString(),o.toString()),this.currentType=t,y.createUnreachable();switch(n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g),s.kind){case 0:case 1:case 2:d=y.createBinary(p.BinaryOp.LtI32,n,a);break;case 3:d=y.createBinary(p.BinaryOp.LtI64,n,a);break;case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.LtI64:p.BinaryOp.LtI32,n,a);break;case 5:case 6:case 7:case 10:d=y.createBinary(p.BinaryOp.LtU32,n,a);break;case 9:d=y.createBinary(this.options.isWasm64?p.BinaryOp.LtU64:p.BinaryOp.LtU32,n,a);break;case 8:d=y.createBinary(p.BinaryOp.LtU64,n,a);break;case 11:d=y.createBinary(p.BinaryOp.LtF32,n,a);break;case 12:d=y.createBinary(p.BinaryOp.LtF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}this.currentType=_.Type.bool;break;case u.Token.GREATERTHAN:if(n=this.compileExpressionRetainType(m,t),O=(i=this.currentType).classReference)if(b=O.lookupOverload(l.OperatorKind.GT)){d=this.compileBinaryOverload(b,m,g,e);break}if(a=this.compileExpressionRetainType(g,i),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!0)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,">",i.toString(),o.toString()),this.currentType=t,y.createUnreachable();switch(n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g),s.kind){case 0:case 1:case 2:d=y.createBinary(p.BinaryOp.GtI32,n,a);break;case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.GtI64:p.BinaryOp.GtI32,n,a);break;case 3:d=y.createBinary(p.BinaryOp.GtI64,n,a);break;case 5:case 6:case 7:case 10:d=y.createBinary(p.BinaryOp.GtU32,n,a);break;case 9:d=y.createBinary(this.options.isWasm64?p.BinaryOp.GtU64:p.BinaryOp.GtU32,n,a);break;case 8:d=y.createBinary(p.BinaryOp.GtU64,n,a);break;case 11:d=y.createBinary(p.BinaryOp.GtF32,n,a);break;case 12:d=y.createBinary(p.BinaryOp.GtF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}this.currentType=_.Type.bool;break;case u.Token.LESSTHAN_EQUALS:if(n=this.compileExpressionRetainType(m,t),O=(i=this.currentType).classReference)if(b=O.lookupOverload(l.OperatorKind.LE)){d=this.compileBinaryOverload(b,m,g,e);break}if(a=this.compileExpressionRetainType(g,i),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!0)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"<=",i.toString(),o.toString()),this.currentType=t,y.createUnreachable();switch(n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g),s.kind){case 0:case 1:case 2:d=y.createBinary(p.BinaryOp.LeI32,n,a);break;case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.LeI64:p.BinaryOp.LeI32,n,a);break;case 3:d=y.createBinary(p.BinaryOp.LeI64,n,a);break;case 5:case 6:case 7:case 10:d=y.createBinary(p.BinaryOp.LeU32,n,a);break;case 9:d=y.createBinary(this.options.isWasm64?p.BinaryOp.LeU64:p.BinaryOp.LeU32,n,a);break;case 8:d=y.createBinary(p.BinaryOp.LeU64,n,a);break;case 11:d=y.createBinary(p.BinaryOp.LeF32,n,a);break;case 12:d=y.createBinary(p.BinaryOp.LeF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}this.currentType=_.Type.bool;break;case u.Token.GREATERTHAN_EQUALS:if(n=this.compileExpressionRetainType(m,t),O=(i=this.currentType).classReference)if(b=O.lookupOverload(l.OperatorKind.GE)){d=this.compileBinaryOverload(b,m,g,e);break}if(a=this.compileExpressionRetainType(g,i),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!0)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,">=",i.toString(),o.toString()),this.currentType=t,y.createUnreachable();switch(n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g),s.kind){case 0:case 1:case 2:d=y.createBinary(p.BinaryOp.GeI32,n,a);break;case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.GeI64:p.BinaryOp.GeI32,n,a);break;case 3:d=y.createBinary(p.BinaryOp.GeI64,n,a);break;case 5:case 6:case 7:case 10:d=y.createBinary(p.BinaryOp.GeU32,n,a);break;case 9:d=y.createBinary(this.options.isWasm64?p.BinaryOp.GeU64:p.BinaryOp.GeU32,n,a);break;case 8:d=y.createBinary(p.BinaryOp.GeU64,n,a);break;case 11:d=y.createBinary(p.BinaryOp.GeF32,n,a);break;case 12:d=y.createBinary(p.BinaryOp.GeF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}this.currentType=_.Type.bool;break;case u.Token.EQUALS_EQUALS_EQUALS:case u.Token.EQUALS_EQUALS:if(n=this.compileExpressionRetainType(m,t),i=this.currentType,A==u.Token.EQUALS_EQUALS)if(O=i.classReference)if(b=O.lookupOverload(l.OperatorKind.EQ)){d=this.compileBinaryOverload(b,m,g,e);break}if(a=this.compileExpressionRetainType(g,i),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,u.operatorTokenToString(e.operator),i.toString(),o.toString()),this.currentType=t,y.createUnreachable();switch(n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:d=y.createBinary(p.BinaryOp.EqI32,n,a);break;case 9:case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.EqI64:p.BinaryOp.EqI32,n,a);break;case 3:case 8:d=y.createBinary(p.BinaryOp.EqI64,n,a);break;case 11:d=y.createBinary(p.BinaryOp.EqF32,n,a);break;case 12:d=y.createBinary(p.BinaryOp.EqF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}this.currentType=_.Type.bool;break;case u.Token.EXCLAMATION_EQUALS_EQUALS:case u.Token.EXCLAMATION_EQUALS:if(n=this.compileExpressionRetainType(m,t),i=this.currentType,A==u.Token.EXCLAMATION_EQUALS)if(O=i.classReference)if(b=O.lookupOverload(l.OperatorKind.NE)){d=this.compileBinaryOverload(b,m,g,e);break}if(a=this.compileExpressionRetainType(g,i),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,u.operatorTokenToString(e.operator),i.toString(),o.toString()),this.currentType=t,y.createUnreachable();switch(n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:d=y.createBinary(p.BinaryOp.NeI32,n,a);break;case 9:case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.NeI64:p.BinaryOp.NeI32,n,a);break;case 3:case 8:d=y.createBinary(p.BinaryOp.NeI64,n,a);break;case 11:d=y.createBinary(p.BinaryOp.NeF32,n,a);break;case 12:d=y.createBinary(p.BinaryOp.NeF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}this.currentType=_.Type.bool;break;case u.Token.EQUALS:return this.compileAssignment(m,g,t);case u.Token.PLUS_EQUALS:E=!0;case u.Token.PLUS:if(n=this.compileExpressionRetainType(m,t,!1),O=(i=this.currentType).classReference)if(b=O.lookupOverload(l.OperatorKind.ADD)){d=this.compileBinaryOverload(b,m,g,e);break}if(E)a=this.compileExpression(g,i,1,!1);else{if(a=this.compileExpressionRetainType(g,i,!1),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"+",i.toString(),o.toString()),this.currentType=t,y.createUnreachable();n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:f=!0;case 2:case 7:d=y.createBinary(p.BinaryOp.AddI32,n,a);break;case 9:case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,n,a);break;case 3:case 8:d=y.createBinary(p.BinaryOp.AddI64,n,a);break;case 11:d=y.createBinary(p.BinaryOp.AddF32,n,a);break;case 12:d=y.createBinary(p.BinaryOp.AddF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}break;case u.Token.MINUS_EQUALS:E=!0;case u.Token.MINUS:if(n=this.compileExpressionRetainType(m,t,!1),O=(i=this.currentType).classReference)if(b=O.lookupOverload(l.OperatorKind.SUB)){d=this.compileBinaryOverload(b,m,g,e);break}if(E)a=this.compileExpression(g,i,1,!1);else{if(a=this.compileExpressionRetainType(g,i,!1),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"-",i.toString(),o.toString()),this.currentType=t,y.createUnreachable();n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:f=!0;case 2:case 7:d=y.createBinary(p.BinaryOp.SubI32,n,a);break;case 9:case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,n,a);break;case 3:case 8:d=y.createBinary(p.BinaryOp.SubI64,n,a);break;case 11:d=y.createBinary(p.BinaryOp.SubF32,n,a);break;case 12:d=y.createBinary(p.BinaryOp.SubF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}break;case u.Token.ASTERISK_EQUALS:E=!0;case u.Token.ASTERISK:if(n=this.compileExpressionRetainType(m,t,!1),O=(i=this.currentType).classReference)if(b=O.lookupOverload(l.OperatorKind.MUL)){d=this.compileBinaryOverload(b,m,g,e);break}if(E)a=this.compileExpression(g,i,1,!1);else{if(a=this.compileExpressionRetainType(g,i,!1),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"*",i.toString(),o.toString()),this.currentType=t,y.createUnreachable();n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:f=!0;case 2:case 7:d=y.createBinary(p.BinaryOp.MulI32,n,a);break;case 9:case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.MulI64:p.BinaryOp.MulI32,n,a);break;case 3:case 8:d=y.createBinary(p.BinaryOp.MulI64,n,a);break;case 11:d=y.createBinary(p.BinaryOp.MulF32,n,a);break;case 12:d=y.createBinary(p.BinaryOp.MulF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}break;case u.Token.ASTERISK_ASTERISK_EQUALS:E=!0;case u.Token.ASTERISK_ASTERISK:if(n=this.compileExpressionRetainType(m,t,!0),O=(i=this.currentType).classReference)if(b=O.lookupOverload(l.OperatorKind.POW)){d=this.compileBinaryOverload(b,m,g,e);break}var N=void 0;if(this.currentType==_.Type.f32){if(a=this.compileExpression(g,this.currentType),!(N=this.f32PowInstance)){if(!(C=this.program.elementsLookup.get("Mathf"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),d=y.createUnreachable();break}if(!(S=C.members?C.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.pow"),d=y.createUnreachable();break}assert(S.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f32PowInstance=N=S.resolve()}}else if(n=this.convertExpression(n,this.currentType,_.Type.f64,1,m),a=this.compileExpression(g,_.Type.f64),!(N=this.f64PowInstance)){if(!(C=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),d=y.createUnreachable();break}if(!(S=C.members?C.members.get("pow"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.pow"),d=y.createUnreachable();break}assert(S.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f64PowInstance=N=S.resolve()}d=N&&this.compileFunction(N)?this.makeCallDirect(N,[n,a]):y.createUnreachable();break;case u.Token.SLASH_EQUALS:E=!0;case u.Token.SLASH:if(n=this.compileExpressionRetainType(m,t,!0),O=(i=this.currentType).classReference)if(b=O.lookupOverload(l.OperatorKind.DIV)){d=this.compileBinaryOverload(b,m,g,e);break}if(E)a=this.compileExpression(g,i,1,!1);else{if(a=this.compileExpressionRetainType(g,i,!1),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"/",i.toString(),o.toString()),this.currentType=t,y.createUnreachable();n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g)}switch(this.currentType.kind){case 0:case 1:f=!0;case 2:d=y.createBinary(p.BinaryOp.DivI32,n,a);break;case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.DivI64:p.BinaryOp.DivI32,n,a);break;case 3:d=y.createBinary(p.BinaryOp.DivI64,n,a);break;case 5:case 6:case 10:f=!0;case 7:d=y.createBinary(p.BinaryOp.DivU32,n,a);break;case 9:d=y.createBinary(this.options.isWasm64?p.BinaryOp.DivU64:p.BinaryOp.DivU32,n,a);break;case 8:d=y.createBinary(p.BinaryOp.DivU64,n,a);break;case 11:d=y.createBinary(p.BinaryOp.DivF32,n,a);break;case 12:d=y.createBinary(p.BinaryOp.DivF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}break;case u.Token.PERCENT_EQUALS:E=!0;case u.Token.PERCENT:if(n=this.compileExpressionRetainType(m,t,!0),O=(i=this.currentType).classReference)if(b=O.lookupOverload(l.OperatorKind.REM)){d=this.compileBinaryOverload(b,m,g,e);break}if(E)a=this.compileExpression(g,i,1,!1);else{if(a=this.compileExpressionRetainType(g,i,!1),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"%",i.toString(),o.toString()),this.currentType=t,y.createUnreachable();n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g)}switch(this.currentType.kind){case 0:case 1:case 2:d=y.createBinary(p.BinaryOp.RemI32,n,a);break;case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.RemI64:p.BinaryOp.RemI32,n,a);break;case 3:d=y.createBinary(p.BinaryOp.RemI64,n,a);break;case 5:case 6:case 7:case 10:d=y.createBinary(p.BinaryOp.RemU32,n,a);break;case 9:d=y.createBinary(this.options.isWasm64?p.BinaryOp.RemU64:p.BinaryOp.RemU32,n,a);break;case 8:d=y.createBinary(p.BinaryOp.RemU64,n,a);break;case 11:if(!(N=this.f32ModInstance)){if(!(C=this.program.elementsLookup.get("Mathf"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf"),d=y.createUnreachable();break}if(!(S=C.members?C.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Mathf.mod"),d=y.createUnreachable();break}assert(S.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f32ModInstance=N=S.resolve()}d=N&&this.compileFunction(N)?this.makeCallDirect(N,[n,a]):y.createUnreachable();break;case 12:if(!(N=this.f64ModInstance)){var C,S;if(!(C=this.program.elementsLookup.get("Math"))){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math"),d=y.createUnreachable();break}if(!(S=C.members?C.members.get("mod"):null)){this.error(c.DiagnosticCode.Cannot_find_name_0,e.range,"Math.mod"),d=y.createUnreachable();break}assert(S.kind==l.ElementKind.FUNCTION_PROTOTYPE),this.f64ModInstance=N=S.resolve()}d=N&&this.compileFunction(N)?this.makeCallDirect(N,[n,a]):y.createUnreachable();break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}break;case u.Token.LESSTHAN_LESSTHAN_EQUALS:E=!0;case u.Token.LESSTHAN_LESSTHAN:switch(n=this.compileExpressionRetainType(m,t,!1),a=this.compileExpression(g,this.currentType,1,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:f=!0;default:d=y.createBinary(p.BinaryOp.ShlI32,n,a);break;case 3:case 8:d=y.createBinary(p.BinaryOp.ShlI64,n,a);break;case 9:case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.ShlI64:p.BinaryOp.ShlI32,n,a);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()),y.createUnreachable();case 13:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}break;case u.Token.GREATERTHAN_GREATERTHAN_EQUALS:E=!0;case u.Token.GREATERTHAN_GREATERTHAN:switch(n=this.compileExpressionRetainType(m,t,!0),a=this.compileExpression(g,this.currentType,1,!0),this.currentType.kind){default:d=y.createBinary(p.BinaryOp.ShrI32,n,a);break;case 3:d=y.createBinary(p.BinaryOp.ShrI64,n,a);break;case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.ShrI64:p.BinaryOp.ShrI32,n,a);break;case 5:case 6:case 10:case 7:d=y.createBinary(p.BinaryOp.ShrU32,n,a);break;case 8:d=y.createBinary(p.BinaryOp.ShrU64,n,a);break;case 9:d=y.createBinary(this.options.isWasm64?p.BinaryOp.ShrU64:p.BinaryOp.ShrU32,n,a);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()),y.createUnreachable();case 13:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}break;case u.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:E=!0;case u.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:switch(n=this.compileExpressionRetainType(m,t,!0),a=this.compileExpression(g,this.currentType,1,!0),this.currentType.kind){case 0:case 1:f=!0;default:d=y.createBinary(p.BinaryOp.ShrU32,n,a);break;case 3:case 8:d=y.createBinary(p.BinaryOp.ShrU64,n,a);break;case 9:case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.ShrU64:p.BinaryOp.ShrU32,n,a);break;case 13:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}break;case u.Token.AMPERSAND_EQUALS:E=!0;case u.Token.AMPERSAND:if(n=this.compileExpressionRetainType(m,t,!1),O=(i=this.currentType).classReference)if(b=O.lookupOverload(l.OperatorKind.AND)){d=this.compileBinaryOverload(b,m,g,e);break}if(E)a=this.compileExpression(g,i,1,!1);else{if(a=this.compileExpressionRetainType(g,i,!1),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"&",i.toString(),o.toString()),this.currentType=t,y.createUnreachable();n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:f=!0;default:d=y.createBinary(p.BinaryOp.AndI32,n,a);break;case 3:case 8:d=y.createBinary(p.BinaryOp.AndI64,n,a);break;case 9:case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.AndI64:p.BinaryOp.AndI32,n,a);break;case 13:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}break;case u.Token.BAR_EQUALS:E=!0;case u.Token.BAR:if(n=this.compileExpressionRetainType(m,t,!1),O=(i=this.currentType).classReference)if(b=O.lookupOverload(l.OperatorKind.OR)){d=this.compileBinaryOverload(b,m,g,e);break}if(E)a=this.compileExpression(g,i,1,!1);else{if(a=this.compileExpressionRetainType(g,i,!1),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"|",i.toString(),o.toString()),this.currentType=t,y.createUnreachable();n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:f=!0;default:d=y.createBinary(p.BinaryOp.OrI32,n,a);break;case 3:case 8:d=y.createBinary(p.BinaryOp.OrI64,n,a);break;case 9:case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.OrI64:p.BinaryOp.OrI32,n,a);break;case 13:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}break;case u.Token.CARET_EQUALS:E=!0;case u.Token.CARET:var O,b;if(n=this.compileExpressionRetainType(m,t,!1),O=(i=this.currentType).classReference)if(b=O.lookupOverload(l.OperatorKind.XOR)){d=this.compileBinaryOverload(b,m,g,e);break}if(E)a=this.compileExpression(g,i,1,!1);else{if(a=this.compileExpressionRetainType(g,i,!1),o=this.currentType,!(s=_.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,"^",i.toString(),o.toString()),this.currentType=t,y.createUnreachable();n=this.convertExpression(n,i,s,1,m),a=this.convertExpression(a,o,s,1,g)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:f=!0;default:d=y.createBinary(p.BinaryOp.XorI32,n,a);break;case 3:case 8:d=y.createBinary(p.BinaryOp.XorI64,n,a);break;case 9:case 4:d=y.createBinary(this.options.isWasm64?p.BinaryOp.XorI64:p.BinaryOp.XorI32,n,a);break;case 13:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=y.createUnreachable()}break;case u.Token.AMPERSAND_AMPERSAND:n=this.compileExpressionRetainType(m,t),a=this.compileExpression(g,this.currentType,1,!1),(d=y.cloneExpression(n,!0,0))||(I=this.currentFunction.getAndFreeTempLocal(this.currentType),n=y.createTeeLocal(I.index,n)),f=this.currentType.is(36),h=v(n,this.currentType,y),d=d?y.createIf(h,a,d):y.createIf(h,a,y.createGetLocal(assert(I).index,this.currentType.toNativeType()));break;case u.Token.BAR_BAR:n=this.compileExpressionRetainType(m,t),a=this.compileExpression(g,this.currentType,1,!1),(d=this.module.cloneExpression(n,!0,0))||(I=this.currentFunction.getAndFreeTempLocal(this.currentType),n=y.createTeeLocal(I.index,n)),f=this.currentType.is(36),h=v(n,this.currentType,y),d=d?this.module.createIf(h,d,a):y.createIf(h,y.createGetLocal(assert(I).index,this.currentType.toNativeType()),a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),d=this.module.createUnreachable()}return f&&r&&(assert(this.currentType.is(36)),d=T(d,this.currentType,y)),E?this.compileAssignmentWithValue(m,d,t!=_.Type.void):d},t.prototype.compileUnaryOverload=function(e,t,r){var n,i=0;if(e.is(l.CommonFlags.INSTANCE)){var a=assert(e.parent);assert(a.kind==l.ElementKind.CLASS),i=this.compileExpression(t,a.type),n=[]}else n=[t];return this.compileCallDirect(e,n,r,i,e.hasDecorator(l.DecoratorFlags.INLINE))},t.prototype.compileBinaryOverload=function(e,t,r,n){var i,a=0;if(e.is(l.CommonFlags.INSTANCE)){var o=assert(e.parent);assert(o.kind==l.ElementKind.CLASS),a=this.compileExpression(t,o.type),i=[r]}else i=[t,r];return this.compileCallDirect(e,i,n,a,e.hasDecorator(l.DecoratorFlags.INLINE))},t.prototype.compileAssignment=function(e,t,r){var n,i=this.program,a=this.currentFunction,o=i.resolveExpression(e,a);if(!o)return this.module.createUnreachable();switch(o.kind){case l.ElementKind.GLOBAL:if(!this.compileGlobal(o))return this.module.createUnreachable();assert(o.type!=_.Type.void);case l.ElementKind.LOCAL:case l.ElementKind.FIELD:n=o.type;break;case l.ElementKind.PROPERTY:var s=o.setterPrototype;if(s){var p=s.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,o.internalName),this.module.createUnreachable();case l.ElementKind.CLASS:if(i.resolvedElementExpression){var u=o.lookupOverload(l.OperatorKind.INDEXED_GET);if(!u)return this.error(c.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,o.internalName),this.module.createUnreachable();n=u.signature.returnType;break}default:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}var h=this.compileExpression(t,n);return this.compileAssignmentWithValue(e,h,r!=_.Type.void)},t.prototype.compileAssignmentWithValue=function(e,t,r){void 0===r&&(r=!1);var n=this.module,i=this.program.resolveExpression(e,this.currentFunction);if(!i)return n.createUnreachable();switch(i.kind){case l.ElementKind.LOCAL:return this.currentType=r?i.type:_.Type.void,i.is(l.CommonFlags.CONST)?(this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable()):r?n.createTeeLocal(i.index,t):n.createSetLocal(i.index,t);case l.ElementKind.GLOBAL:if(!this.compileGlobal(i))return n.createUnreachable();var a=i.type;if(assert(a!=_.Type.void),this.currentType=r?a:_.Type.void,i.is(l.CommonFlags.CONST))return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),n.createUnreachable();if(r){var o=a.toNativeType(),s=i.internalName;return n.createBlock(null,[n.createSetGlobal(s,t),n.createGetGlobal(s,o)],o)}return n.createSetGlobal(i.internalName,t);case l.ElementKind.FIELD:var p=i.declaration;if(i.is(l.CommonFlags.READONLY)&&!this.currentFunction.is(l.CommonFlags.CONSTRUCTOR)&&null!=p&&null==p.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 u=assert(this.program.resolvedThisExpression),h=this.compileExpressionRetainType(u,this.options.usizeType);a=i.type;this.currentType=r?a:_.Type.void;o=a.toNativeType();if(r){var d=this.currentFunction.getAndFreeTempLocal(a).index;return n.createBlock(null,[n.createSetLocal(d,t),n.createStore(a.size>>3,h,n.createGetLocal(d,o),o,i.memoryOffset),n.createGetLocal(d,o)],o)}return n.createStore(a.size>>3,h,t,o,i.memoryOffset);case l.ElementKind.PROPERTY:var y=i.setterPrototype;if(y){var m=y.resolve();if(!m)return n.createUnreachable();if(!r){if(m.is(l.CommonFlags.INSTANCE)){u=assert(this.program.resolvedThisExpression),h=this.compileExpressionRetainType(u,this.options.usizeType);return this.makeCallDirect(m,[h,t])}return this.makeCallDirect(m,[t])}var g=i.getterPrototype;assert(null!=g);var E=g.resolve();if(!E)return n.createUnreachable();var T=(O=E.signature.returnType).toNativeType();if(m.is(l.CommonFlags.INSTANCE)){u=assert(this.program.resolvedThisExpression),h=this.compileExpressionRetainType(u,this.options.usizeType),d=this.currentFunction.getAndFreeTempLocal(O).index;return n.createBlock(null,[this.makeCallDirect(m,[n.createTeeLocal(d,h),t]),this.makeCallDirect(E,[n.createGetLocal(d,T)])],T)}return n.createBlock(null,[this.makeCallDirect(m,[t]),this.makeCallDirect(E)],T)}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 f=this.program.resolvedElementExpression;if(f){var v=i.lookupOverload(l.OperatorKind.INDEXED_GET);if(!v)return this.error(c.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,i.internalName),n.createUnreachable();var I=i.lookupOverload(l.OperatorKind.INDEXED_SET);if(!I)return this.error(c.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,i.internalName),this.currentType=r?v.signature.returnType:_.Type.void,n.createUnreachable();var A=i.type,N=(u=assert(this.program.resolvedThisExpression),h=this.compileExpressionRetainType(u,this.options.usizeType),this.compileExpression(f,_.Type.i32));if(r){var C=this.currentFunction.getTempLocal(A),S=this.currentFunction.getAndFreeTempLocal(this.currentType),O=v.signature.returnType;return this.currentFunction.freeTempLocal(C),n.createBlock(null,[this.makeCallDirect(I,[n.createTeeLocal(C.index,h),n.createTeeLocal(S.index,N),t]),this.makeCallDirect(v,[n.createGetLocal(C.index,C.type.toNativeType()),n.createGetLocal(S.index,S.type.toNativeType())])],O.toNativeType())}return this.makeCallDirect(I,[h,N,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,o=this.program.resolveExpression(e.expression,a);if(!o)return i.createUnreachable();switch(o.kind){case l.ElementKind.FUNCTION_PROTOTYPE:var s=o,u=e.typeArguments;if(s.is(l.CommonFlags.AMBIENT|l.CommonFlags.BUILTIN))return this.compileCallExpressionBuiltin(s,e,t);var d=null;if(u){if(!s.is(l.CommonFlags.GENERIC))return this.error(c.DiagnosticCode.Type_0_is_not_generic,e.expression.range,s.internalName),i.createUnreachable();d=s.resolveUsingTypeArguments(u,this.currentFunction.flow.contextualTypeArguments,e)}else{if(s.is(l.CommonFlags.GENERIC)){for(var y=new Map,m=assert(s.declaration.typeParameters),g=m.length,E=0;Eo&&!i)||(this.error(c.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,o.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,o=e.signature;if(!this.checkCallSignature(o,a,0!=n,r))return this.module.createUnreachable();if(i)return assert(!e.is(l.CommonFlags.TRAMPOLINE)),this.compileCallInlineUnchecked(e,t,r,n);var s=n?a+1:a,c=new Array(s),p=0;n&&(c[0]=n,p=1);for(var u=o.parameterTypes,h=0;h=i);var s=this.module;if(!this.compileFunction(e))return s.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(E.is(l.CommonFlags.AMBIENT|l.CommonFlags.BUILTIN))return s.compileGetConstant(this,E,e);if(!this.compileGlobal(E))return this.module.createUnreachable();var v=E.type;return assert(v!=_.Type.void),E.is(l.CommonFlags.INLINED)?this.compileInlineConstant(E,t,r):(this.currentType=v,this.module.createGetGlobal(E.internalName,v.toNativeType()));case l.ElementKind.ENUMVALUE:return E.is(l.CommonFlags.COMPILED)?(this.currentType=_.Type.i32,E.is(l.CommonFlags.INLINED)?this.module.createI32(E.constantValue):this.module.createGetGlobal(E.internalName,p.NativeType.I32)):(this.error(c.DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,e.range),this.currentType=_.Type.i32,this.module.createUnreachable());case l.ElementKind.FUNCTION_PROTOTYPE:var I=E.resolve(null,this.currentFunction.flow.contextualTypeArguments);if(!I||!this.compileFunction(I))return n.createUnreachable();var N=this.ensureFunctionTableEntry(I);return this.currentType=I.signature.type,this.module.createI32(N)}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.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.compileStaticArray(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==_.Type.f32?n.createF32(a):(this.currentType=_.Type.f64,n.createF64(a));case h.LiteralKind.INTEGER:var o=e.value;switch(r&&(o=i64_sub(i64_new(0),o)),t.kind){case 0:if(i64_is_i8(o))return n.createI32(i64_low(o));break;case 5:if(i64_is_u8(o))return n.createI32(i64_low(o));break;case 1:if(i64_is_i16(o))return n.createI32(i64_low(o));break;case 6:if(i64_is_u16(o))return n.createI32(i64_low(o));break;case 2:case 7:if(i64_is_i32(o)||i64_is_u32(o))return n.createI32(i64_low(o));break;case 10:if(i64_is_bool(o))return n.createI32(i64_low(o));break;case 4:case 9:if(!this.options.isWasm64){if(i64_is_i32(o)||i64_is_u32(o))return n.createI32(i64_low(o));break}return n.createI64(i64_low(o),i64_high(o));case 3:case 8:return n.createI64(i64_low(o),i64_high(o));case 11:if(i64_is_f32(o))return n.createF32(i64_to_f32(o));break;case 12:if(i64_is_f64(o))return n.createF64(i64_to_f64(o));break;case 13:break;default:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}return i64_is_i32(o)?(this.currentType=_.Type.i32,n.createI32(i64_low(o))):(this.currentType=_.Type.i64,n.createI64(i64_low(o),i64_high(o)));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,o=new Uint8Array(4+2*a);o[0]=255&a,o[1]=a>>>8&255,o[2]=a>>>16&255,o[3]=a>>>24&255;for(var s=0;s>>8&255;i=this.addMemorySegment(o,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.compileStaticArray=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 o=a.resolve([e]);if(!o)return i.createUnreachable();var s,u,h=t.length,_=e.toNativeType();switch(_){case p.NativeType.I32:s=changetype(new Int32Array(h)),u=4*h;break;case p.NativeType.I64:s=changetype(new Array(h)),u=8*h;break;case p.NativeType.F32:s=changetype(new Float32Array(h)),u=4*h;break;case p.NativeType.F64:s=changetype(new Float64Array(h)),u=8*h;break;default:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,r.range),i.createUnreachable()}for(var y,m=new Array(h),g=0;g=0);var d=this.compileExpressionRetainType(h,this.options.usizeType);return this.currentType=a.type,i.createLoad(a.type.byteSize,a.type.is(5),d,a.type.toNativeType(),a.memoryOffset);case l.ElementKind.PROPERTY:var y=a.getterPrototype;if(y){var m=y.resolve(null);if(!m)return i.createUnreachable();var g=m.signature;if(!this.checkCallSignature(g,0,m.is(l.CommonFlags.INSTANCE),e))return i.createUnreachable();if(m.is(l.CommonFlags.INSTANCE)){u=assert(m.parent);assert(u.kind==l.ElementKind.CLASS);h=assert(n.resolvedThisExpression),d=this.compileExpressionRetainType(h,this.options.usizeType);return this.currentType=g.returnType,this.compileCallDirect(m,[],e,d)}return this.currentType=g.returnType,this.compileCallDirect(m,[],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=e.ifThen,n=e.ifElse,i=v(this.compileExpression(e.condition,_.Type.u32,0),this.currentType,this.module);if(this.currentFunction.isAny(l.CommonFlags.GENERIC|l.CommonFlags.GENERIC_CONTEXT)&&_BinaryenExpressionGetId(i=this.precomputeExpressionRef(i))==p.ExpressionId.Const&&_BinaryenExpressionGetType(i)==p.NativeType.I32)return _BinaryenConstGetValueI32(i)?this.compileExpression(r,t):this.compileExpression(n,t);var a,o,s=this.currentFunction;if(s.is(l.CommonFlags.CONSTRUCTOR)){var c=s.flow;c=c.enterBranchOrScope(),s.flow=c,a=this.compileExpression(r,t);var u=c.is(16);c=c.leaveBranchOrScope(),s.flow=c,c=c.enterBranchOrScope(),s.flow=c,o=this.compileExpression(n,t);var h=c.is(16);c=c.leaveBranchOrScope(),s.flow=c,u&&h&&c.set(16)}else a=this.compileExpression(r,t),o=this.compileExpression(n,t);return this.module.createIf(i,a,o)},t.prototype.compileUnaryPostfixExpression=function(e,t){var r=this.module,n=this.currentFunction,i=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,!1);if(_BinaryenExpressionGetId(i)==p.ExpressionId.Unreachable)return i;var a,o,s,l,h=this.currentType,d=!1;switch(e.operator){case u.Token.PLUS_PLUS:if(h.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),r.createUnreachable();switch(h.kind){case 0:case 1:case 5:case 6:case 10:d=!0;default:a=p.BinaryOp.AddI32,o=p.NativeType.I32,s=r.createI32(1);break;case 9:case 4:a=(y=this.options).isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,o=y.nativeSizeType,s=h.toNativeOne(r);break;case 3:case 8:a=p.BinaryOp.AddI64,o=p.NativeType.I64,s=r.createI64(1);break;case 11:a=p.BinaryOp.AddF32,o=p.NativeType.F32,s=r.createF32(1);break;case 12:a=p.BinaryOp.AddF64,o=p.NativeType.F64,s=r.createF64(1);break;case 13:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),r.createUnreachable()}break;case u.Token.MINUS_MINUS:if(h.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),r.createUnreachable();switch(h.kind){case 0:case 1:case 5:case 6:case 10:d=!0;default:a=p.BinaryOp.SubI32,o=p.NativeType.I32,s=r.createI32(1);break;case 9:case 4:var y;a=(y=this.options).isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,o=y.nativeSizeType,s=h.toNativeOne(r);break;case 3:case 8:a=p.BinaryOp.SubI64,o=p.NativeType.I64,s=r.createI64(1);break;case 11:a=p.BinaryOp.SubF32,o=p.NativeType.F32,s=r.createF32(1);break;case 12:a=p.BinaryOp.SubF64,o=p.NativeType.F64,s=r.createF64(1);break;case 13:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),r.createUnreachable()}break;default:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),r.createUnreachable()}var m=null;if(t==_.Type.void?l=r.createBinary(a,i,s):(m=n.getTempLocal(h),l=r.createBinary(a,this.module.createGetLocal(m.index,o),s)),d&&(assert(h.is(36)),l=T(l,h,r)),l=this.compileAssignmentWithValue(e.operand,l,!1),t==_.Type.void)return assert(!m),l;this.currentType=assert(m).type,n.freeTempLocal(m);var g=m.index;return r.createBlock(null,[r.createSetLocal(g,i),l,r.createGetLocal(g,o)],o)},t.prototype.compileUnaryPrefixExpression=function(e,t,r){void 0===r&&(r=!0);var n,i=this.module,a=this.currentType,o=!1,s=!1;switch(e.operator){case u.Token.PLUS:if(a.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();n=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,!1),o=(a=this.currentType).is(36);break;case u.Token.MINUS:if(a.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();if(e.operand.kind!=h.NodeKind.LITERAL||e.operand.literalKind!=h.LiteralKind.INTEGER&&e.operand.literalKind!=h.LiteralKind.FLOAT)switch(n=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,!1),(a=this.currentType).kind){case 0:case 1:case 5:case 6:case 10:o=!0;default:n=i.createBinary(p.BinaryOp.SubI32,i.createI32(0),n);break;case 9:if(a.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();case 4:n=i.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,a.toNativeZero(i),n);break;case 3:case 8:n=i.createBinary(p.BinaryOp.SubI64,i.createI64(0),n);break;case 11:n=i.createUnary(p.UnaryOp.NegF32,n);break;case 12:n=i.createUnary(p.UnaryOp.NegF64,n)}else n=this.compileLiteralExpression(e.operand,t,!0),this.options.sourceMap&&E(n,e.range,i,this.currentFunction),a=this.currentType;break;case u.Token.PLUS_PLUS:if(a.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();switch(s=!0,n=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,!1),(a=this.currentType).kind){case 0:case 1:case 5:case 6:case 10:o=!0;default:n=i.createBinary(p.BinaryOp.AddI32,n,this.module.createI32(1));break;case 9:if(a.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();case 4:n=i.createBinary(this.options.isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,n,a.toNativeOne(i));break;case 3:case 8:n=i.createBinary(p.BinaryOp.AddI64,n,i.createI64(1));break;case 11:n=i.createBinary(p.BinaryOp.AddF32,n,i.createF32(1));break;case 12:n=i.createBinary(p.BinaryOp.AddF64,n,i.createF64(1))}break;case u.Token.MINUS_MINUS:if(a.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();switch(s=!0,n=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,!1),(a=this.currentType).kind){case 0:case 1:case 5:case 6:case 10:o=!0;default:n=i.createBinary(p.BinaryOp.SubI32,n,i.createI32(1));break;case 9:if(a.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();case 4:n=i.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,n,a.toNativeOne(i));break;case 3:case 8:n=i.createBinary(p.BinaryOp.SubI64,n,i.createI64(1));break;case 11:n=i.createBinary(p.BinaryOp.SubF32,n,i.createF32(1));break;case 12:n=i.createBinary(p.BinaryOp.SubF64,n,i.createF64(1))}break;case u.Token.EXCLAMATION:n=f(n=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,!0),this.currentType,i),this.currentType=_.Type.bool;break;case u.Token.TILDE:if(a.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();switch(n=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t.is(8)?_.Type.i64:t,t==_.Type.void?0:1,!1),(a=this.currentType).kind){case 0:case 1:case 5:case 6:case 10:o=!0;default:n=i.createBinary(p.BinaryOp.XorI32,n,i.createI32(-1));break;case 9:if(a.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();case 4:n=i.createBinary(this.options.isWasm64?p.BinaryOp.XorI64:p.BinaryOp.XorI32,n,a.toNativeNegOne(i));break;case 3:case 8:n=i.createBinary(p.BinaryOp.XorI64,n,i.createI64(-1,-1))}break;case u.Token.TYPEOF:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();default:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable()}return o&&r&&(assert(a.is(36)),n=T(n,a,i)),s?this.compileAssignmentWithValue(e.operand,n,t!=_.Type.void):n},t}(c.DiagnosticEmitter);function g(e,t){void 0===t&&(t=null);var r=null!=t?t:e.simpleName;switch(e.kind){case l.ElementKind.FUNCTION:return(n=e.parent||e.prototype.parent)?g(n)+(e.is(l.CommonFlags.INSTANCE)?l.INSTANCE_DELIMITER:l.STATIC_DELIMITER)+r:r;case l.ElementKind.FIELD:case l.ElementKind.ENUMVALUE:return g(n=assert(e.parent))+(e.is(l.CommonFlags.INSTANCE)?l.INSTANCE_DELIMITER:l.STATIC_DELIMITER)+r;case l.ElementKind.CLASS:return(n=e.prototype.parent)?g(n)+l.STATIC_DELIMITER+r:r;default:var n;return(n=e.parent)?g(n)+l.STATIC_DELIMITER+r:r}}function E(e,t,r,n){var i=t.source;i.debugInfoIndex<0&&(i.debugInfoIndex=r.addDebugInfoFile(i.normalizedPath)),t.debugInfoRef=e,n.debugLocations||(n.debugLocations=[]),n.debugLocations.push(t)}function T(e,t,r){switch(t.kind){case 0:return r.createBinary(p.BinaryOp.ShrI32,r.createBinary(p.BinaryOp.ShlI32,e,r.createI32(24)),r.createI32(24));case 1:return r.createBinary(p.BinaryOp.ShrI32,r.createBinary(p.BinaryOp.ShlI32,e,r.createI32(16)),r.createI32(16));case 5:return r.createBinary(p.BinaryOp.AndI32,e,r.createI32(255));case 6:return r.createBinary(p.BinaryOp.AndI32,e,r.createI32(65535));case 10:return r.createBinary(p.BinaryOp.AndI32,e,r.createI32(1));default:return assert(!1),e}}function f(e,t,r){switch(t.kind){default: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));case 13:return assert(!1),r.createI32(1)}}function v(e,t,r){switch(t.kind){default: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));case 13:return assert(!1),r.createI32(0)}}function I(e,t,r){var n,i,o=e.module,c=e.currentFunction,p=e.options.nativeSizeType,u=c.getTempLocal(t.type),h=new Array;if(h.push(o.createSetLocal(u.index,s.compileAllocate(e,t,r))),t.members)try{for(var _=a(t.members.values()),d=_.next();!d.done;d=_.next()){var y=d.value;if(y.kind==l.ElementKind.FIELD){var m=y,g=m.type,E=g.toNativeType(),T=m.prototype.declaration;if(assert(!m.isAny(l.CommonFlags.CONST)),T.initializer)h.push(o.createStore(g.byteSize,o.createGetLocal(u.index,p),e.compileExpression(T.initializer,g),E,m.memoryOffset));else{var f=m.prototype.declaration.parameterIndex;h.push(o.createStore(g.byteSize,o.createGetLocal(u.index,p),f>=0?o.createGetLocal(1+f,E):g.toNativeZero(o),E,m.memoryOffset))}}}}catch(e){n={error:e}}finally{try{d&&!d.done&&(i=_.return)&&i.call(_)}finally{if(n)throw n.error}}return h.push(o.createGetLocal(u.index,p)),c.freeTempLocal(u),e.currentType=t.type,o.createBlock(null,h,p)}function A(e,t,r){var n=e.module,i=e.options.nativeSizeType;return e.currentType=t.type,n.createIf(i==p.NativeType.I64?n.createBinary(p.BinaryOp.NeI64,n.createGetLocal(0,p.NativeType.I64),n.createI64(0)):n.createGetLocal(0,p.NativeType.I32),n.createGetLocal(0,i),n.createTeeLocal(0,I(e,t,r)))}t.Compiler=m,t.makeSmallIntegerWrap=T,t.makeIsFalseish=f,t.makeIsTrueish=v,t.makeAllocate=I,t.makeConditionalAllocate=A},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.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"}(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 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.";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)});Object.defineProperty(t,"__esModule",{value:!0});var a=r(0),o=r(6),s=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.onComment=null,t.tryParseSignatureIsSignature=!1,t.program=new a.Program(t.diagnostics),t}return i(t,e),t.prototype.parseFile=function(e,t,r){for(var n=this.program,i=c.normalizePath(t),s=p.mangleInternalPath(i),u=n.sources,h=0,_=u.length;h<_;++h)if(u[h].internalPath==s)return;this.seenlog.add(s);var d=new p.Source(i,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.push(d),d.normalizedPath==l&&d.set(a.CommonFlags.BUILTIN);var y=new o.Tokenizer(d,n.diagnostics);y.onComment=this.onComment,d.tokenizer=y;for(var m=d.statements;!y.skip(o.Token.ENDOFFILE);){var g=this.parseTopLevelStatement(y);g&&(g.parent=d,m.push(g))}y.finish()},t.prototype.parseTopLevelStatement=function(e,t){void 0===t&&(t=null);for(var r=a.CommonFlags.NONE,n=-1,i=null;e.skip(o.Token.AT);){n<0&&(n=e.tokenPos);var 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(o.Token.EXPORT)&&(n<0&&(n=e.tokenPos),r|=a.CommonFlags.EXPORT,p=e.tokenPos,l=e.pos);var u=null!=t&&t.is(a.CommonFlags.AMBIENT);e.skip(o.Token.DECLARE)?(n<0&&(n=e.tokenPos),u&&this.error(s.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,_=e.peek();switch(n<0&&(n=e.nextTokenPos),_){case o.Token.CONST:if(e.next(),r|=a.CommonFlags.CONST,e.skip(o.Token.ENUM)){h=this.parseEnum(e,r,i,n);break}h=this.parseVariable(e,r,i,n),i=null;break;case o.Token.LET:r|=a.CommonFlags.LET;case o.Token.VAR:e.next(),h=this.parseVariable(e,r,i,n),i=null;break;case o.Token.ENUM:e.next(),h=this.parseEnum(e,r,i,n),i=null;break;case o.Token.FUNCTION:e.next(),h=this.parseFunction(e,r,i,n),i=null;break;case o.Token.ABSTRACT:if(e.next(),r|=a.CommonFlags.ABSTRACT,!e.skip(o.Token.CLASS)){this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"class");break}case o.Token.CLASS:case o.Token.INTERFACE:e.next(),h=this.parseClassOrInterface(e,r,i,n),i=null;break;case o.Token.NAMESPACE:e.next(),h=this.parseNamespace(e,r,i,n),i=null;break;case o.Token.IMPORT:e.next(),h=(r|=a.CommonFlags.IMPORT)&a.CommonFlags.EXPORT?this.parseExportImport(e,n):this.parseImport(e);break;case o.Token.TYPE:e.next(),h=this.parseTypeDeclaration(e,r,i,n),i=null;break;default:r&a.CommonFlags.EXPORT?h=this.parseExport(e,r,n):(l&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(p,l),"export"),t||(h=this.parseStatement(e,!0)))}if(i)for(var d=0,y=i.length;d"),null}if(e.skip(o.Token.BAR)){if(!e.skip(o.Token.NULL))return r||this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"null"),null;d=!0}n=p.Node.createType(h,_,d,e.range(a,e.pos))}for(;e.skip(o.Token.OPENBRACKET);){var m=e.tokenPos;if(!e.skip(o.Token.CLOSEBRACKET))return r||this.error(s.DiagnosticCode._0_expected,e.range(),"]"),null;var g=e.range(m,e.pos);d=!1;if(e.skip(o.Token.BAR)){if(!e.skip(o.Token.NULL))return r||this.error(s.DiagnosticCode._0_expected,e.range(),"null"),null;d=!0}if(n=p.Node.createType(p.Node.createIdentifierExpression("Array",g),[n],d,e.range(a,e.pos)),d)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(o.Token.CLOSEPAREN))c=!0,e.discard(r),i=[];else{c=!1;do{var l=p.ParameterKind.DEFAULT;if(e.skip(o.Token.DOT_DOT_DOT)&&(c=!0,e.discard(r),l=p.ParameterKind.REST),e.skip(o.Token.THIS)){if(!e.skip(o.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(s.DiagnosticCode.Operation_not_supported,u.range),this.tryParseSignatureIsSignature=!0,null;a=u}else{if(!e.skip(o.Token.IDENTIFIER))return c?this.error(s.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(o.Token.QUESTION)&&(c=!0,e.discard(r),l==p.ParameterKind.REST?this.error(s.DiagnosticCode.A_rest_parameter_cannot_be_optional,e.range()):l=p.ParameterKind.OPTIONAL),e.skip(o.Token.COLON)){c=!0,e.discard(r);var _=this.parseType(e);if(!_)return this.tryParseSignatureIsSignature=c,null;var d=new p.ParameterNode;d.parameterKind=l,d.name=h,d.type=_,i?i.push(d):i=[d]}else c&&this.error(s.DiagnosticCode.Type_expected,e.range())}}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(),")"),this.tryParseSignatureIsSignature=c,null}return e.skip(o.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(s.DiagnosticCode._0_expected,e.range(),"=>"):e.reset(r),this.tryParseSignatureIsSignature=c,null)},t.prototype.parseDecorator=function(e){var t=e.tokenPos;if(e.skip(o.Token.IDENTIFIER)){for(var r=e.readIdentifier(),n=p.Node.createIdentifierExpression(r,e.range(t,e.pos));e.skip(o.Token.DOT);){if(!e.skip(o.Token.IDENTIFIER))return this.error(s.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(o.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(s.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseVariable=function(e,t,r,n){var i=new Array;do{var a=this.parseVariableDeclaration(e,t,r);if(!a)return null;i.push(a)}while(e.skip(o.Token.COMMA));var s=p.Node.createVariableStatement(i,r,t,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),s},t.prototype.parseVariableDeclaration=function(e,t,r){if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;var n=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),i=t,c=null;e.skip(o.Token.COLON)&&(c=this.parseType(e));var l=null;if(e.skip(o.Token.EQUALS)){if(i&a.CommonFlags.AMBIENT&&this.error(s.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(s.DiagnosticCode._const_declarations_must_be_initialized,n.range):c||this.error(s.DiagnosticCode.Type_expected,e.range(e.pos));return p.Node.createVariableDeclaration(n,c,l,r,i,o.Range.join(n.range,e.range()))},t.prototype.parseEnum=function(e,t,r,n){if(e.next()!=o.Token.IDENTIFIER)return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;var i=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.next()!=o.Token.OPENBRACE)return this.error(s.DiagnosticCode._0_expected,e.range(),"{"),null;var c=new Array;if(!e.skip(o.Token.CLOSEBRACE)){do{var l=this.parseEnumValue(e,a.CommonFlags.NONE);if(!l)return null;c.push(l)}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(),"}"),null}var u=p.Node.createEnumDeclaration(i,c,r,t,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),u},t.prototype.parseEnumValue=function(e,t){if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;var r=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),n=null;return e.skip(o.Token.EQUALS)&&!(n=this.parseExpression(e,1))?null:p.Node.createEnumValueDeclaration(r,n,t,o.Range.join(r.range,e.range()))},t.prototype.parseReturn=function(e){var t=null;if(e.peek(!0)!=o.Token.SEMICOLON&&e.nextToken!=o.Token.CLOSEBRACE&&!e.nextTokenOnNewLine&&!(t=this.parseExpression(e)))return null;var r=p.Node.createReturnStatement(t,e.range());return e.skip(o.Token.SEMICOLON),r},t.prototype.parseTypeParameters=function(e){var t=new Array;if(e.skip(o.Token.GREATERTHAN))this.error(s.DiagnosticCode.Type_parameter_list_cannot_be_empty,e.range());else{do{var r=this.parseTypeParameter(e);if(!r)return null;t.push(r)}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.GREATERTHAN))return this.error(s.DiagnosticCode._0_expected,e.range(),">"),null}return t},t.prototype.parseTypeParameter=function(e){if(e.next()==o.Token.IDENTIFIER){var t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(o.Token.EXTENDS)){var n=this.parseType(e);if(!n)return null;if(n.kind!=p.NodeKind.TYPE)return this.error(s.DiagnosticCode.Operation_not_supported,n.range),null;r=n}return p.Node.createTypeParameter(t,r,o.Range.join(t.range,e.range()))}return this.error(s.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;if(e.peek()!=o.Token.CLOSEPAREN)do{var c=this.parseParameter(e,t);if(!c)return null;switch(n&&!a&&(this.error(s.DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,n.name.range),a=!0),c.parameterKind){default:i&&this.error(s.DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,c.name.range);break;case p.ParameterKind.OPTIONAL:i=!0;break;case p.ParameterKind.REST:n=c}r.push(c)}while(e.skip(o.Token.COMMA));return e.skip(o.Token.CLOSEPAREN)?r:(this.error(s.DiagnosticCode._0_expected,e.range(),")"),null)},t.prototype.parseParameter=function(e,t){void 0===t&&(t=!1);var r=!1,n=!1,i=null,c=a.CommonFlags.NONE;if(e.skip(o.Token.PUBLIC)?(i=e.range(),t||this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,i,"public"),c|=a.CommonFlags.PUBLIC):e.skip(o.Token.PROTECTED)?(i=e.range(),t||this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,i,"protected"),c|=a.CommonFlags.PROTECTED):e.skip(o.Token.PRIVATE)&&(i=e.range(),t||this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,i,"private"),c|=a.CommonFlags.PRIVATE),e.skip(o.Token.READONLY)&&(i||(i=e.range()),t||this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,i,"readonly"),c|=a.CommonFlags.READONLY),e.skip(o.Token.DOT_DOT_DOT)&&(c?this.error(s.DiagnosticCode.A_parameter_property_cannot_be_declared_using_a_rest_parameter,e.range()):i=e.range(),r=!0),e.skip(o.Token.IDENTIFIER)){r||(i=e.range());var l=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),u=null;if((n=e.skip(o.Token.QUESTION))&&r&&this.error(s.DiagnosticCode.A_rest_parameter_cannot_be_optional,l.range),e.skip(o.Token.COLON)){if(!(u=this.parseType(e)))return null}else u=p.Node.createOmittedType(e.range(e.pos));var h=null;if(e.skip(o.Token.EQUALS)&&(r&&this.error(s.DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,l.range),n?this.error(s.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,l.range):n=!0,!(h=this.parseExpression(e,1))))return null;var _=p.Node.createParameter(l,u,h,r?p.ParameterKind.REST:n?p.ParameterKind.OPTIONAL:p.ParameterKind.DEFAULT,o.Range.join(i,e.range()));return _.flags|=c,_}return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseFunction=function(e,t,r,n){if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range(e.pos)),null;var i=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),c=-1,l=null;if(e.skip(o.Token.LESSTHAN)){if(c=e.tokenPos,!(l=this.parseTypeParameters(e)))return null;t|=a.CommonFlags.GENERIC}if(!e.skip(o.Token.OPENPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"("),null;c<0&&(c=e.tokenPos);var u=this.parseParameters(e);if(!u)return null;var h=0!=(t&a.CommonFlags.SET);h&&(1!=u.length&&this.error(s.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,i.range),u.length&&u[0].initializer&&this.error(s.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,i.range)),t&a.CommonFlags.GET&&u.length&&this.error(s.DiagnosticCode.A_get_accessor_cannot_have_parameters,i.range);var _=null;if(e.skip(o.Token.COLON)&&!(_=this.parseType(e,!0,h)))return null;_||(_=p.Node.createOmittedType(e.range(e.pos)),h||this.error(s.DiagnosticCode.Type_expected,_.range));var d=p.Node.createSignature(u,_,null,!1,e.range(c,e.pos)),y=null;if(e.skip(o.Token.OPENBRACE)){if(t&a.CommonFlags.AMBIENT&&this.error(s.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,e.range()),!(y=this.parseBlockStatement(e,!1)))return null}else t&a.CommonFlags.AMBIENT||this.error(s.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,e.range(e.pos));var m=p.Node.createFunctionDeclaration(i,l,d,y,r,t,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),m},t.prototype.parseFunctionExpression=function(e){var t,r=e.tokenPos,n=!1;if(e.token==o.Token.FUNCTION){if(t=e.skip(o.Token.IDENTIFIER)?p.Node.createIdentifierExpression(e.readIdentifier(),e.range()):p.Node.createEmptyIdentifierExpression(e.range(e.pos)),!e.skip(o.Token.OPENPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"("),null}else n=!0,assert(e.token==o.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(o.Token.COLON)){if(!(l=this.parseType(e)))return null}else l=p.Node.createOmittedType(e.range(e.pos)),this.error(s.DiagnosticCode.Type_expected,l.range);if(n&&!e.skip(o.Token.EQUALS_GREATERTHAN))return this.error(s.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(o.Token.OPENBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;u=this.parseBlockStatement(e,!1)}if(!u)return null;var _=p.Node.createFunctionDeclaration(t,null,h,u,null,n?a.CommonFlags.ARROW:a.CommonFlags.NONE,e.range(i,e.pos));return p.Node.createFunctionExpression(_)},t.prototype.parseClassOrInterface=function(e,t,r,n){var i=e.token==o.Token.INTERFACE;if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;var c,l=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(o.Token.LESSTHAN)){if(!(c=this.parseTypeParameters(e)))return null;t|=a.CommonFlags.GENERIC}else c=[];var u=null;if(e.skip(o.Token.EXTENDS)){var h=this.parseType(e);if(!h)return null;if(h.kind!=p.NodeKind.TYPE)return this.error(s.DiagnosticCode.Operation_not_supported,h.range),null;u=h}var _=null;if(e.skip(o.Token.IMPLEMENTS)){i&&this.error(s.DiagnosticCode.Interface_declaration_cannot_have_implements_clause,e.range());do{var d=this.parseType(e);if(!d)return null;i||(_||(_=[]),_.push(d))}while(e.skip(o.Token.COMMA))}if(!e.skip(o.Token.OPENBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(),"{"),null;var y,m=new Array;if(i?(assert(!_),y=p.Node.createInterfaceDeclaration(l,c,u,m,r,t,e.range(n,e.pos))):y=p.Node.createClassDeclaration(l,c,u,_,m,r,t,e.range(n,e.pos)),!e.skip(o.Token.CLOSEBRACE))do{var g=this.parseClassMember(e,y);if(!g)return null;g.parent=y,m.push(g)}while(!e.skip(o.Token.CLOSEBRACE));return y},t.prototype.parseClassMember=function(e,t){for(var r=e.pos,n=new Array;e.skip(o.Token.AT);){var i=this.parseDecorator(e);if(!i)break;n.push(i)}var c=t.flags&a.CommonFlags.AMBIENT;e.skip(o.Token.PUBLIC)?c|=a.CommonFlags.PUBLIC:e.skip(o.Token.PRIVATE)?c|=a.CommonFlags.PRIVATE:e.skip(o.Token.PROTECTED)&&(c|=a.CommonFlags.PROTECTED);var l=0,u=0,h=0,_=0;e.skip(o.Token.STATIC)?(c|=a.CommonFlags.STATIC,l=e.tokenPos,u=e.pos):(e.skip(o.Token.ABSTRACT)?(c|=a.CommonFlags.ABSTRACT|a.CommonFlags.INSTANCE,h=e.tokenPos,_=e.pos):c|=a.CommonFlags.INSTANCE,t.flags&a.CommonFlags.GENERIC&&(c|=a.CommonFlags.GENERIC_CONTEXT));var d=0,y=0;e.skip(o.Token.READONLY)&&(c|=a.CommonFlags.READONLY,d=e.tokenPos,y=e.pos);var m=e.mark(),g=!1,E=!1,T=!1,f=0,v=0;if(e.skip(o.Token.GET)?e.peek(!0,!0)!=o.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(m):(c|=a.CommonFlags.GET,E=!0,f=e.tokenPos,v=e.pos,c&a.CommonFlags.READONLY&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(d,y),"readonly")):e.skip(o.Token.SET)?e.peek(!0,!0)!=o.Token.IDENTIFIER||e.nextTokenOnNewLine?e.reset(m):(c|=a.CommonFlags.SET|a.CommonFlags.SET,T=!0,f=e.tokenPos,v=e.pos,c&a.CommonFlags.READONLY&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(d,y),"readonly")):e.skip(o.Token.CONSTRUCTOR)&&(g=!0,(c|=a.CommonFlags.CONSTRUCTOR)&a.CommonFlags.STATIC&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(l,u),"static"),c&a.CommonFlags.ABSTRACT&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(h,_),"abstract"),c&a.CommonFlags.READONLY&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(d,y),"readonly")),!g&&!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;var I=g?p.Node.createConstructorExpression(e.range()):p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),A=null;if(e.skip(o.Token.LESSTHAN)){var N=e.tokenPos;if(!(A=this.parseTypeParameters(e)))return null;g?this.error(s.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,e.range(N,e.pos)):E||T?this.error(s.DiagnosticCode.An_accessor_cannot_have_type_parameters,e.range(N,e.pos)):c|=a.CommonFlags.GENERIC}if(e.skip(o.Token.OPENPAREN)){var C=e.tokenPos,S=this.parseParameters(e,g);if(!S)return null;if(g)for(var O=0,b=S.length;O"),null):null;case o.Token.IDENTIFIER:return p.Node.createIdentifierExpression(e.readIdentifier(),e.range(r,e.pos));case o.Token.THIS:return p.Node.createThisExpression(e.range(r,e.pos));case o.Token.CONSTRUCTOR:return p.Node.createConstructorExpression(e.range(r,e.pos));case o.Token.SUPER:return p.Node.createSuperExpression(e.range(r,e.pos));case o.Token.STRINGLITERAL:return p.Node.createStringLiteralExpression(e.readString(),e.range(r,e.pos));case o.Token.INTEGERLITERAL:return p.Node.createIntegerLiteralExpression(e.readInteger(),e.range(r,e.pos));case o.Token.FLOATLITERAL:return p.Node.createFloatLiteralExpression(e.readFloat(),e.range(r,e.pos));case o.Token.SLASH:var _=e.readRegexpPattern();return e.skip(o.Token.SLASH)?p.Node.createRegexpLiteralExpression(_,e.readRegexpFlags(),e.range(r,e.pos)):(this.error(s.DiagnosticCode._0_expected,e.range(),"/"),null);case o.Token.FUNCTION:return this.parseFunctionExpression(e);default:return this.error(s.DiagnosticCode.Expression_expected,e.range()),null}},t.prototype.tryParseTypeArgumentsBeforeArguments=function(e){var t=e.mark();if(!e.skip(o.Token.LESSTHAN))return null;var r=new Array;do{var n=this.parseType(e,!0,!0);if(!n)return e.reset(t),null;r.push(n)}while(e.skip(o.Token.COMMA));return e.skip(o.Token.GREATERTHAN)&&e.skip(o.Token.OPENPAREN)?r:(e.reset(t),null)},t.prototype.parseArguments=function(e){var t=new Array;if(!e.skip(o.Token.CLOSEPAREN)){do{var r=this.parseExpression(e,1);if(!r)return null;t.push(r)}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEPAREN))return this.error(s.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(o.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 o.Token.AS:var d=this.parseType(e);if(!d)return null;r=p.Node.createAssertionExpression(p.AssertionKind.AS,r,d,e.range(a,e.pos));break;case o.Token.OPENBRACKET:if(!(u=this.parseExpression(e)))return null;if(!e.skip(o.Token.CLOSEBRACKET))return this.error(s.DiagnosticCode._0_expected,e.range(),"]"),null;r=p.Node.createElementAccessExpression(r,u,e.range(a,e.pos));break;case o.Token.PLUS_PLUS:case o.Token.MINUS_MINUS:r.kind!=p.NodeKind.IDENTIFIER&&r.kind!=p.NodeKind.ELEMENTACCESS&&r.kind!=p.NodeKind.PROPERTYACCESS&&this.error(s.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 o.Token.QUESTION:var y=this.parseExpression(e);if(!y)return null;if(!e.skip(o.Token.COLON))return this.error(s.DiagnosticCode._0_expected,e.range(),":"),null;var m=this.parseExpression(e);if(!m)return null;r=p.Node.createTernaryExpression(r,y,m,e.range(a,e.pos));break;case o.Token.COMMA:var g=[r];do{if(!(r=this.parseExpression(e,1)))return null;g.push(r)}while(e.skip(o.Token.COMMA));r=p.Node.createCommaExpression(g,e.range(a,e.pos));break;default:if(!(u=this.parseExpression(e,_(i)?l:l+1)))return null;if(i==o.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(s.DiagnosticCode.Identifier_expected,u.range),null;var E=u;if(E.expression.kind!=p.NodeKind.IDENTIFIER)return this.error(s.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==o.Token.ENDOFFILE||t==o.Token.CLOSEBRACE)break;if(t==o.Token.SEMICOLON){e.next();break}if(e.nextTokenOnNewLine)break;switch(e.next()){case o.Token.IDENTIFIER:e.readIdentifier();break;case o.Token.STRINGLITERAL:e.readString();break;case o.Token.INTEGERLITERAL:e.readInteger();break;case o.Token.FLOATLITERAL:e.readFloat()}}},t}(s.DiagnosticEmitter);function h(e){switch(e){case o.Token.COMMA:return 0;case o.Token.EQUALS:case o.Token.PLUS_EQUALS:case o.Token.MINUS_EQUALS:case o.Token.ASTERISK_ASTERISK_EQUALS:case o.Token.ASTERISK_EQUALS:case o.Token.SLASH_EQUALS:case o.Token.PERCENT_EQUALS:case o.Token.LESSTHAN_LESSTHAN_EQUALS:case o.Token.GREATERTHAN_GREATERTHAN_EQUALS:case o.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case o.Token.AMPERSAND_EQUALS:case o.Token.CARET_EQUALS:case o.Token.BAR_EQUALS:return 3;case o.Token.QUESTION:return 4;case o.Token.BAR_BAR:return 5;case o.Token.AMPERSAND_AMPERSAND:return 6;case o.Token.BAR:return 7;case o.Token.CARET:return 8;case o.Token.AMPERSAND:return 9;case o.Token.EQUALS_EQUALS:case o.Token.EXCLAMATION_EQUALS:case o.Token.EQUALS_EQUALS_EQUALS:case o.Token.EXCLAMATION_EQUALS_EQUALS:return 10;case o.Token.AS:case o.Token.IN:case o.Token.INSTANCEOF:case o.Token.LESSTHAN:case o.Token.GREATERTHAN:case o.Token.LESSTHAN_EQUALS:case o.Token.GREATERTHAN_EQUALS:return 11;case o.Token.LESSTHAN_LESSTHAN:case o.Token.GREATERTHAN_GREATERTHAN:case o.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:return 12;case o.Token.PLUS:case o.Token.MINUS:return 13;case o.Token.ASTERISK:case o.Token.SLASH:case o.Token.PERCENT:return 14;case o.Token.ASTERISK_ASTERISK:return 15;case o.Token.PLUS_PLUS:case o.Token.MINUS_MINUS:return 17;case o.Token.DOT:case o.Token.NEW:case o.Token.OPENBRACKET:return 19;default:return-1}}function _(e){switch(e){case o.Token.EQUALS:case o.Token.PLUS_EQUALS:case o.Token.MINUS_EQUALS:case o.Token.ASTERISK_ASTERISK_EQUALS:case o.Token.ASTERISK_EQUALS:case o.Token.SLASH_EQUALS:case o.Token.PERCENT_EQUALS:case o.Token.LESSTHAN_LESSTHAN_EQUALS:case o.Token.GREATERTHAN_GREATERTHAN_EQUALS:case o.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case o.Token.AMPERSAND_EQUALS:case o.Token.CARET_EQUALS:case o.Token.BAR_EQUALS:case o.Token.QUESTION:case o.Token.ASTERISK_ASTERISK:return!0;default:return!1}}t.Parser=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}}}},o=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),o=[];try{for(;(void 0===t||t-- >0)&&!(n=a.next()).done;)o.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 o};Object.defineProperty(t,"__esModule",{value:!0});var s=r(0),c=r(1),p=function(){function e(e){this.program=e}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}}var n,i},e.prototype.visitElement=function(e){switch(e.kind){case s.ElementKind.GLOBAL:e.is(s.CommonFlags.COMPILED)&&this.visitGlobal(e);break;case s.ElementKind.ENUM:e.is(s.CommonFlags.COMPILED)&&this.visitEnum(e);break;case s.ElementKind.FUNCTION_PROTOTYPE:this.visitCompiledFunctions(e);break;case s.ElementKind.CLASS_PROTOTYPE:this.visitCompiledClasses(e);break;case s.ElementKind.FIELD:e.is(s.CommonFlags.COMPILED)&&this.visitField(e);break;case s.ElementKind.PROPERTY:var t=e,r=t.getterPrototype;r&&this.visitCompiledFunctions(r);var n=t.setterPrototype;n&&this.visitCompiledFunctions(n);break;case s.ElementKind.NAMESPACE:(function e(t){var r=t.members;if(r)try{for(var n=a(r.values()),i=n.next();!i.done;i=n.next()){var o=i.value;switch(o.kind){case s.ElementKind.FUNCTION_PROTOTYPE:try{for(var c=a(o.instances.values()),p=c.next();!p.done;p=c.next()){var l=p.value;if(l.is(s.CommonFlags.COMPILED))return!0}}catch(e){y={error:e}}finally{try{p&&!p.done&&(m=c.return)&&m.call(c)}finally{if(y)throw y.error}}break;case s.ElementKind.CLASS_PROTOTYPE:try{for(var u=a(o.instances.values()),h=u.next();!h.done;h=u.next()){var l=h.value;if(l.is(s.CommonFlags.COMPILED))return!0}}catch(e){g={error:e}}finally{try{h&&!h.done&&(E=u.return)&&E.call(u)}finally{if(g)throw g.error}}break;default:if(o.is(s.CommonFlags.COMPILED)||e(o))return!0}}}catch(e){_={error:e}}finally{try{i&&!i.done&&(d=n.return)&&d.call(n)}finally{if(_)throw _.error}}return!1;var _,d,y,m,g,E})(e)&&this.visitNamespace(e);break;default:assert(!1)}},e.prototype.visitCompiledFunctions=function(e){try{for(var t=a(e.instances.values()),r=t.next();!r.done;r=t.next()){var n=r.value;n.is(s.CommonFlags.COMPILED)&&this.visitFunction(n)}}catch(e){i={error:e}}finally{try{r&&!r.done&&(o=t.return)&&o.call(t)}finally{if(i)throw i.error}}var i,o},e.prototype.visitCompiledClasses=function(e){try{for(var t=a(e.instances.values()),r=t.next();!r.done;r=t.next()){var n=r.value;n.is(s.CommonFlags.COMPILED)&&this.visitClass(n)}}catch(e){i={error:e}}finally{try{r&&!r.done&&(o=t.return)&&o.call(t)}finally{if(i)throw i.error}}var i,o},e}(),l=function(e){function t(t){var r=e.call(this,t)||this;return r.sb=[],r.seen=new Set,r.indentLevel=0,r}return i(t,e),t.build=function(e){return new t(e).build()},t.prototype.visitGlobal=function(e){if(!this.seen.has(e)){this.seen.add(e);var t=this.sb,r=e.is(s.CommonFlags.INLINED);if(c.indent(t,this.indentLevel),r&&t.push("const "),t.push(this.typeToString(e.type)),t.push(" "),t.push(e.simpleName),r)switch(e.constantValueKind){case 1:t.push(" = "),t.push(i64_to_string(e.constantIntegerValue));break;case 2:t.push(" = "),t.push(e.constantFloatValue.toString());break;default:assert(!1)}t.push(";\n")}},t.prototype.visitEnum=function(e){if(!this.seen.has(e)){this.seen.add(e);var t=this.sb;c.indent(t,this.indentLevel++),t.push("interface "),t.push(e.simpleName),t.push(" {\n");var r,n,i,p,l=e.members;if(l){try{for(var u=a(l),h=u.next();!h.done;h=u.next()){var _=o(h.value,2),d=_[0];if((E=_[1]).kind==s.ElementKind.ENUMVALUE){var y=E.is(s.CommonFlags.INLINED);c.indent(t,this.indentLevel),y?t.push("const "):t.push("readonly "),t.push("unsigned long "),t.push(d),y&&(t.push(" = "),t.push(E.constantValue.toString(10))),t.push(";\n")}}}catch(e){r={error:e}}finally{try{h&&!h.done&&(n=u.return)&&n.call(u)}finally{if(r)throw r.error}}try{for(var m=a(l.values()),g=m.next();!g.done;g=m.next()){var E;(E=g.value).kind!=s.ElementKind.ENUMVALUE&&this.visitElement(E)}}catch(e){i={error:e}}finally{try{g&&!g.done&&(p=m.return)&&p.call(m)}finally{if(i)throw i.error}}}c.indent(t,--this.indentLevel),t.push("}\n")}},t.prototype.visitFunction=function(e){if(!this.seen.has(e)){this.seen.add(e);var t=this.sb,r=e.signature;c.indent(t,this.indentLevel),t.push(this.typeToString(r.returnType)),t.push(" "),t.push(e.simpleName),t.push("(");for(var n=r.parameterTypes,i=n.length,o=0;o0&&this.push(", "),this.push("$"),this.push(i.toString(10)),this.push(": "),this.push(a(_BinaryenFunctionGetParam(e,i)));this.push("): "),this.push(a(_BinaryenFunctionGetResult(e))),this.push(" "),_BinaryenExpressionGetId(r)!=n.ExpressionId.Block&&this.push("{\n"),this.decompileExpression(r),_BinaryenExpressionGetId(r)!=n.ExpressionId.Block&&this.push("\n}\n"),++this.functionId},e.prototype.decompileExpression=function(e){var t,r,i,o,s=_BinaryenExpressionGetId(e),c=_BinaryenExpressionGetType(e);switch(s){case n.ExpressionId.Block:for(null!=(r=n.readString(_BinaryenBlockGetName(e)))&&(this.push(r),this.push(": ")),this.push("{\n"),o=_BinaryenBlockGetNumChildren(e),i=0;i("),this.push(_BinaryenLoadGetOffset(e).toString(10)),this.push(" + "),this.decompileExpression(_BinaryenLoadGetPtr(e)),void this.push(")");case n.ExpressionId.Store:return this.push("store<"),this.push(a(c)),this.push(">("),this.push(_BinaryenStoreGetOffset(e).toString(10)),this.push(" + "),this.decompileExpression(_BinaryenStoreGetPtr(e)),this.push(", "),this.decompileExpression(_BinaryenStoreGetValue(e)),void this.push(")");case n.ExpressionId.Const:switch(c){case n.NativeType.I32:return void this.push(_BinaryenConstGetValueI32(e).toString(10));case n.NativeType.I64:return void this.push(i64_to_string(i64_new(_BinaryenConstGetValueI64Low(e),_BinaryenConstGetValueI64High(e))));case n.NativeType.F32:return void this.push(_BinaryenConstGetValueF32(e).toString(10));case n.NativeType.F64:return void this.push(_BinaryenConstGetValueF64(e).toString(10))}break;case n.ExpressionId.Unary:switch(_BinaryenUnaryGetOp(e)){case n.UnaryOp.ClzI32:return this.push("clz("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.CtzI32:return this.push("ctz("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.PopcntI32:return this.push("popcnt("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.NegF32:case n.UnaryOp.NegF64:return this.push("-"),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.AbsF32:return this.push("abs("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.CeilF32:return this.push("ceil("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.FloorF32:return this.push("floor("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.TruncF32:return this.push("trunc("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.NearestF32:return this.push("nearest("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.SqrtF32:return this.push("sqrt("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.EqzI32:case n.UnaryOp.EqzI64:return this.push("!"),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ClzI64:return this.push("clz("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.CtzI64:return this.push("ctz("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.PopcntI64:return this.push("popcnt("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.AbsF64:return this.push("abs("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.CeilF64:return this.push("ceil("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.FloorF64:return this.push("floor("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.TruncF64:return this.push("trunc("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.NearestF64:return this.push("nearest("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.SqrtF64:return this.push("sqrt("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.ExtendI32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ExtendU32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.WrapI64:case n.UnaryOp.TruncF32ToI32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.TruncF32ToI64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.TruncF32ToU32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.TruncF32ToU64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.TruncF64ToI32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.TruncF64ToI64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.TruncF64ToU32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.TruncF64ToU64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ReinterpretF32:return this.push("reinterpret("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.ReinterpretF64:return this.push("reinterpret("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.ConvertI32ToF32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ConvertI32ToF64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ConvertU32ToF32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ConvertU32ToF64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ConvertI64ToF32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ConvertI64ToF64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ConvertU64ToF32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ConvertU64ToF64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.PromoteF32:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.DemoteF64:return this.push(""),void this.decompileExpression(_BinaryenUnaryGetValue(e));case n.UnaryOp.ReinterpretI32:return this.push("reinterpret("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")");case n.UnaryOp.ReinterpretI64:return this.push("reinterpret("),this.decompileExpression(_BinaryenUnaryGetValue(e)),void this.push(")")}break;case n.ExpressionId.Binary:switch(_BinaryenBinaryGetOp(e)){case n.BinaryOp.AddI32:case n.BinaryOp.AddI64:case n.BinaryOp.AddF32:case n.BinaryOp.AddF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" + "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.SubI32:case n.BinaryOp.SubI64:case n.BinaryOp.SubF32:case n.BinaryOp.SubF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" - "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.MulI32:case n.BinaryOp.MulI64:case n.BinaryOp.MulF32:case n.BinaryOp.MulF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" * "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.DivI32:case n.BinaryOp.DivI64:case n.BinaryOp.DivF32:case n.BinaryOp.DivF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" / "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.DivU32:return this.push("("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" / "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.RemI32:case n.BinaryOp.RemI64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" % "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.RemU32:return this.push("("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" / "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.AndI32:case n.BinaryOp.AndI64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" & "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.OrI32:case n.BinaryOp.OrI64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" | "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.XorI32:case n.BinaryOp.XorI64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" ^ "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.ShlI32:case n.BinaryOp.ShlI64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" << "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.ShrU32:case n.BinaryOp.ShrU64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" >>> "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.ShrI32:case n.BinaryOp.ShrI64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" >> "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.RotlI32:return this.push("rotl("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.RotrI32:return this.push("rotr("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.EqI32:case n.BinaryOp.EqI64:case n.BinaryOp.EqF32:case n.BinaryOp.EqF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" == "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.NeI32:case n.BinaryOp.NeI64:case n.BinaryOp.NeF32:case n.BinaryOp.NeF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" != "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.LtI32:case n.BinaryOp.LtI64:case n.BinaryOp.LtF32:case n.BinaryOp.LtF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" < "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.LtU32:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" < "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.LeI32:case n.BinaryOp.LeI64:case n.BinaryOp.LeF32:case n.BinaryOp.LeF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" <= "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.LeU32:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" <= "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.GtI32:case n.BinaryOp.GtI64:case n.BinaryOp.GtF32:case n.BinaryOp.GtF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" > "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.GtU32:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" > "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.GeI32:case n.BinaryOp.GeI64:case n.BinaryOp.GeF32:case n.BinaryOp.GeF64:return this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" >= "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.GeU32:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" >= "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.DivU64:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" / "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.RemU64:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" % "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.RotlI64:return this.push("rotl("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.RotrI64:return this.push("rotr("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.LtU64:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" < "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.LeU64:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" <= "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.GtU64:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" > "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.GeU64:return this.push(""),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(" >= "),void this.decompileExpression(_BinaryenBinaryGetRight(e));case n.BinaryOp.CopysignF32:return this.push("copysign("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.MinF32:return this.push("min("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.MaxF32:return this.push("max("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.CopysignF64:return this.push("copysign("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.MinF64:return this.push("min("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")");case n.BinaryOp.MaxF64:return this.push("max("),this.decompileExpression(_BinaryenBinaryGetLeft(e)),this.push(", "),this.decompileExpression(_BinaryenBinaryGetRight(e)),void this.push(")")}return;case n.ExpressionId.Select:return this.push("select<"),this.push(a(c)),this.push(">("),this.decompileExpression(_BinaryenSelectGetIfTrue(e)),this.push(", "),this.decompileExpression(_BinaryenSelectGetIfFalse(e)),this.push(", "),this.decompileExpression(_BinaryenSelectGetCondition(e)),void this.push(")");case n.ExpressionId.Drop:return this.decompileExpression(_BinaryenDropGetValue(e)),void this.push(";\n");case n.ExpressionId.Return:return void((t=_BinaryenReturnGetValue(e))?(this.push("return "),this.decompileExpression(t),this.push(";\n")):this.push("return;\n"));case n.ExpressionId.Host:switch(_BinaryenHostGetOp(e)){case n.HostOp.CurrentMemory:return void this.push("current_memory()");case n.HostOp.GrowMemory:return this.push("grow_memory("),this.decompileExpression(_BinaryenHostGetOperand(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(8),i=r(12),a=r(11),o=r(2);t.formatDiagnostic=o.formatDiagnosticMessage;var s=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 s.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=o[e])?n:(r=p(e,(0|e)<0?-1:0,!0),i&&(o[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?E:g;if(t){if(e<0)return E;if(e>=d)return A}else{if(e<=-y)return N;if(e+1>=y)return I}return e<0?c(-e,t).neg():p(e%_|0,e/_|0,t)}function p(e,t,r){return new n(e,t,r)}n.fromInt=s,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,o=0;o>>0:this.low},C.toNumber=function(){return this.unsigned?(this.high>>>0)*_+(this.low>>>0):this.high*_+(this.low>>>0)},C.toString=function(e){if((e=e||10)<2||36>>0).toString(e);if((a=s).isZero())return p+o;for(;p.length<6;)p="0"+p;o=""+p+o}},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(T)},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,o=e.high>>>16,s=65535&e.high,c=e.low>>>16,l=0,u=0,_=0,d=0;return _+=(d+=a+(65535&e.low))>>>16,u+=(_+=n+c)>>>16,l+=(u+=r+s)>>>16,l+=t+o,p((_&=65535)<<16|(d&=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,o=65535&this.low,s=e.high>>>16,l=65535&e.high,u=e.low>>>16,_=65535&e.low,d=0,y=0,E=0,T=0;return E+=(T+=o*_)>>>16,y+=(E+=a*_)>>>16,E&=65535,y+=(E+=o*u)>>>16,d+=(y+=n*_)>>>16,y&=65535,d+=(y+=a*u)>>>16,y&=65535,d+=(y+=o*l)>>>16,d+=t*_+n*u+a*l+o*s,p((E&=65535)<<16|(T&=65535),(d&=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?E:g;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return E;if(e.gt(this.shru(1)))return f;a=E}else{if(this.eq(N))return e.eq(T)||e.eq(v)?N:e.eq(N)?T:(t=this.shr(1).div(e).shl(1)).eq(g)?e.isNegative()?T:v:(n=this.sub(e.mul(t)),a=t.add(n.div(e)));else if(e.eq(N))return this.unsigned?E: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 o=Math.ceil(Math.log(t)/Math.LN2),s=o<=48?1:l(2,o-48),u=c(t),_=u.mul(e);_.isNegative()||_.gt(n);)_=(u=c(t-=s,this.unsigned)).mul(e);u.isZero()&&(u=T),a=a.add(u),n=n.sub(_)}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_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_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),o=t.fromNumber(f64.MAX_SAFE_INTEGER);e.i64_is_f64=function(e){return e.gte(a)&&e.lte(o)},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(e1&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range,"1",t.length.toString(10)),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,"1",r.length.toString(10)),null}function l(e,t){var r,n;return e.options.isWasm64?(r=e.precomputeExpression(t,o.Type.usize64),(_BinaryenExpressionGetId(r)!=s.ExpressionId.Const||_BinaryenExpressionGetType(r)!=s.NativeType.I64||0!=_BinaryenConstGetValueI64High(r)||(n=_BinaryenConstGetValueI64Low(r))<0)&&(e.error(i.DiagnosticCode.Operation_not_supported,t.range),n=-1)):(r=e.precomputeExpression(t,o.Type.usize32),(_BinaryenExpressionGetId(r)!=s.ExpressionId.Const||_BinaryenExpressionGetType(r)!=s.NativeType.I32||(n=_BinaryenConstGetValueI32(r))<0)&&(e.error(i.DiagnosticCode.Operation_not_supported,t.range),n=-1)),n}t.compileGetConstant=function(e,t,r){switch(t.internalName){case"NaN":return e.currentType==o.Type.f32?e.module.createF32(NaN):(e.currentType=o.Type.f64,e.module.createF64(NaN));case"Infinity":return e.currentType==o.Type.f32?e.module.createF32(1/0):(e.currentType=o.Type.f64,e.module.createF64(1/0));case"HEAP_BASE":return e.currentType=e.options.usizeType,e.module.createGetGlobal("HEAP_BASE",e.currentType.toNativeType())}return e.error(i.DiagnosticCode.Operation_not_supported,r.range),e.module.createUnreachable()},t.compileCall=function(e,t,r,u,h,d){var y,m,g,E,T=e.module;switch(t.internalName){case"isInteger":var f=p(e,r,u,d);return e.currentType=o.Type.bool,f?f.is(4)&&!f.is(256)?T.createI32(1):T.createI32(0):T.createUnreachable();case"isFloat":return f=p(e,r,u,d),e.currentType=o.Type.bool,f?f.is(8)?T.createI32(1):T.createI32(0):T.createUnreachable();case"isReference":return f=p(e,r,u,d),e.currentType=o.Type.bool,f?(e.currentType=o.Type.bool,f.is(256)?T.createI32(1):T.createI32(0)):T.createUnreachable();case"isString":if(f=p(e,r,u,d),e.currentType=o.Type.bool,!f)return T.createUnreachable();if(O=f.classReference){var v=e.program.stringInstance;if(v&&O.isAssignableTo(v))return T.createI32(1)}return T.createI32(0);case"isArray":return f=p(e,r,u,d),e.currentType=o.Type.bool,f?null!=(O=f.classReference)&&null!=O.lookupOverload(c.OperatorKind.INDEXED_GET)?T.createI32(1):T.createI32(0):T.createUnreachable();case"isNaN":if(e.currentType=o.Type.bool,1!=u.length)return r&&1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),T.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.f64,0);switch(e.currentType.kind){case 11:E=T.createBinary(s.BinaryOp.GtU32,T.createBinary(s.BinaryOp.AndI32,T.createUnary(s.UnaryOp.ReinterpretF32,y),T.createI32(2147483647)),T.createI32(2139095040));break;case 12:E=T.createBinary(s.BinaryOp.GtU64,T.createBinary(s.BinaryOp.AndI64,T.createUnary(s.UnaryOp.ReinterpretF64,y),T.createI64(4294967295,2147483647)),T.createI64(0,2146435072));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable();break;default:E=T.createI32(0)}return e.currentType=o.Type.bool,E;case"isFinite":if(e.currentType=o.Type.bool,1!=u.length)return r&&1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),T.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.f64,0);switch(e.currentType.kind){case 11:E=T.createBinary(s.BinaryOp.LtU32,T.createBinary(s.BinaryOp.AndI32,T.createUnary(s.UnaryOp.ReinterpretF32,y),T.createI32(2147483647)),T.createI32(2139095040));break;case 12:E=T.createBinary(s.BinaryOp.LtU64,T.createBinary(s.BinaryOp.AndI64,T.createUnary(s.UnaryOp.ReinterpretF64,y),T.createI64(4294967295,2147483647)),T.createI64(0,2146435072));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable();break;default:E=T.createI32(1)}return e.currentType=o.Type.bool,E;case"clz":if(1!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),T.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.i32,0);switch(e.currentType.kind){default:E=T.createUnary(s.UnaryOp.ClzI32,y);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable();break}case 4:E=T.createUnary(e.options.isWasm64?s.UnaryOp.ClzI64:s.UnaryOp.ClzI32,y);break;case 3:case 8:E=T.createUnary(s.UnaryOp.ClzI64,y);break;case 11:case 12:case 13:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable()}return E;case"ctz":if(1!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),T.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.i32,0);switch(e.currentType.kind){default:E=T.createUnary(s.UnaryOp.CtzI32,y);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable();break}case 4:E=T.createUnary(e.options.isWasm64?s.UnaryOp.CtzI64:s.UnaryOp.CtzI32,y);break;case 3:case 8:E=T.createUnary(s.UnaryOp.CtzI64,y);break;case 11:case 12:case 13:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable()}return E;case"popcnt":if(1!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),T.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.i32,0);switch(e.currentType.kind){default:E=T.createUnary(s.UnaryOp.PopcntI32,y);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable();break}case 4:E=T.createUnary(e.options.isWasm64?s.UnaryOp.PopcntI64:s.UnaryOp.PopcntI32,y);break;case 3:case 8:E=T.createUnary(s.UnaryOp.PopcntI64,y);break;case 11:case 12:case 13:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable()}return E;case"rotl":if(2!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",u.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),T.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.i32,0);switch(m=e.compileExpression(u[1],e.currentType),e.currentType.kind){case 0:case 1:case 5:case 6:case 10:E=n.makeSmallIntegerWrap(T.createBinary(s.BinaryOp.RotlI32,y,m),e.currentType,T);case 2:case 7:E=T.createBinary(s.BinaryOp.RotlI32,y,m);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable();break}case 4:E=T.createBinary(e.options.isWasm64?s.BinaryOp.RotlI64:s.BinaryOp.RotlI32,y,m);break;case 3:case 8:E=T.createBinary(s.BinaryOp.RotlI64,y,m);break;default:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable()}return E;case"rotr":if(2!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",u.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),T.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.i32,0);switch(m=e.compileExpression(u[1],e.currentType),e.currentType.kind){case 0:case 1:case 5:case 6:case 10:E=n.makeSmallIntegerWrap(T.createBinary(s.BinaryOp.RotrI32,y,m),e.currentType,T);break;case 2:case 7:E=T.createBinary(s.BinaryOp.RotrI32,y,m);break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable();break}case 4:E=T.createBinary(e.options.isWasm64?s.BinaryOp.RotrI64:s.BinaryOp.RotrI32,y,m);break;case 3:case 8:E=T.createBinary(s.BinaryOp.RotrI64,y,m);break;default:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable()}return E;case"abs":if(1!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),T.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.f64,0);switch(e.currentType.kind){case 0:case 1:case 2:var I=e.currentFunction.getAndFreeTempLocal(o.Type.i32);E=T.createSelect(T.createTeeLocal(I.index,y),T.createBinary(s.BinaryOp.SubI32,T.createI32(0),T.createGetLocal(I.index,s.NativeType.I32)),T.createBinary(s.BinaryOp.GtI32,T.createGetLocal(I.index,s.NativeType.I32),T.createI32(0)));break;case 4:I=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),E=T.createSelect(T.createTeeLocal(I.index,y),T.createBinary(e.options.isWasm64?s.BinaryOp.SubI64:s.BinaryOp.SubI32,e.options.usizeType.toNativeZero(T),T.createGetLocal(I.index,e.options.nativeSizeType)),T.createBinary(e.options.isWasm64?s.BinaryOp.GtI64:s.BinaryOp.GtI32,T.createGetLocal(I.index,e.options.nativeSizeType),e.options.usizeType.toNativeZero(T)));break;case 3:I=e.currentFunction.getAndFreeTempLocal(o.Type.i64),E=T.createSelect(T.createTeeLocal(I.index,y),T.createBinary(s.BinaryOp.SubI64,T.createI64(0,0),T.createGetLocal(I.index,s.NativeType.I64)),T.createBinary(s.BinaryOp.GtI64,T.createGetLocal(I.index,s.NativeType.I64),T.createI64(0,0)));break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable();break}case 5:case 6:case 7:case 8:case 10:E=y;break;case 11:E=T.createUnary(s.UnaryOp.AbsF32,y);break;case 12:E=T.createUnary(s.UnaryOp.AbsF64,y);break;case 13:E=T.createUnreachable();break;default:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable()}return E;case"max":if(2!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",u.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),T.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.f64,0);switch(m=e.compileExpression(u[1],e.currentType),e.currentType.kind){case 0:case 1:case 2:var A=e.currentFunction.getTempLocal(o.Type.i32),N=e.currentFunction.getAndFreeTempLocal(o.Type.i32);e.currentFunction.freeTempLocal(A),E=T.createSelect(T.createTeeLocal(A.index,y),T.createTeeLocal(N.index,m),T.createBinary(s.BinaryOp.GtI32,T.createGetLocal(A.index,s.NativeType.I32),T.createGetLocal(N.index,s.NativeType.I32)));break;case 5:case 6:case 7:case 10:A=e.currentFunction.getTempLocal(o.Type.i32),N=e.currentFunction.getAndFreeTempLocal(o.Type.i32),e.currentFunction.freeTempLocal(A),E=T.createSelect(T.createTeeLocal(A.index,y),T.createTeeLocal(N.index,m),T.createBinary(s.BinaryOp.GtU32,T.createGetLocal(A.index,s.NativeType.I32),T.createGetLocal(N.index,s.NativeType.I32)));break;case 3:A=e.currentFunction.getTempLocal(o.Type.i64),N=e.currentFunction.getAndFreeTempLocal(o.Type.i64),e.currentFunction.freeTempLocal(A),E=T.createSelect(T.createTeeLocal(A.index,y),T.createTeeLocal(N.index,m),T.createBinary(s.BinaryOp.GtI64,T.createGetLocal(A.index,s.NativeType.I64),T.createGetLocal(N.index,s.NativeType.I64)));break;case 8:A=e.currentFunction.getTempLocal(o.Type.i64),N=e.currentFunction.getAndFreeTempLocal(o.Type.i64),e.currentFunction.freeTempLocal(A),E=T.createSelect(T.createTeeLocal(A.index,y),T.createTeeLocal(N.index,m),T.createBinary(s.BinaryOp.GtU64,T.createGetLocal(A.index,s.NativeType.I64),T.createGetLocal(N.index,s.NativeType.I64)));break;case 4:A=e.currentFunction.getTempLocal(e.options.usizeType),N=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(A),E=T.createSelect(T.createTeeLocal(A.index,y),T.createTeeLocal(N.index,m),T.createBinary(e.options.isWasm64?s.BinaryOp.GtI64:s.BinaryOp.GtI32,T.createGetLocal(A.index,e.options.nativeSizeType),T.createGetLocal(N.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable();break}A=e.currentFunction.getTempLocal(e.options.usizeType),N=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(A),E=T.createSelect(T.createTeeLocal(A.index,y),T.createTeeLocal(N.index,m),T.createBinary(e.options.isWasm64?s.BinaryOp.GtU64:s.BinaryOp.GtU32,T.createGetLocal(A.index,e.options.nativeSizeType),T.createGetLocal(N.index,e.options.nativeSizeType)));break;case 11:E=T.createBinary(s.BinaryOp.MaxF32,y,m);break;case 12:E=T.createBinary(s.BinaryOp.MaxF64,y,m);break;default:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable()}return E;case"min":if(2!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",u.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),T.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.f64,0);switch(m=e.compileExpression(u[1],e.currentType),e.currentType.kind){case 0:case 1:case 2:A=e.currentFunction.getTempLocal(o.Type.i32),N=e.currentFunction.getAndFreeTempLocal(o.Type.i32),e.currentFunction.freeTempLocal(A),E=T.createSelect(T.createTeeLocal(A.index,y),T.createTeeLocal(N.index,m),T.createBinary(s.BinaryOp.LtI32,T.createGetLocal(A.index,s.NativeType.I32),T.createGetLocal(N.index,s.NativeType.I32)));break;case 5:case 6:case 7:case 10:A=e.currentFunction.getTempLocal(o.Type.i32),N=e.currentFunction.getAndFreeTempLocal(o.Type.i32),e.currentFunction.freeTempLocal(A),E=T.createSelect(T.createTeeLocal(A.index,y),T.createTeeLocal(N.index,m),T.createBinary(s.BinaryOp.LtU32,T.createGetLocal(A.index,s.NativeType.I32),T.createGetLocal(N.index,s.NativeType.I32)));break;case 3:A=e.currentFunction.getTempLocal(o.Type.i64),N=e.currentFunction.getAndFreeTempLocal(o.Type.i64),e.currentFunction.freeTempLocal(A),E=T.createSelect(T.createTeeLocal(A.index,y),T.createTeeLocal(N.index,m),T.createBinary(s.BinaryOp.LtI64,T.createGetLocal(A.index,s.NativeType.I64),T.createGetLocal(N.index,s.NativeType.I64)));break;case 8:A=e.currentFunction.getTempLocal(o.Type.i64),N=e.currentFunction.getAndFreeTempLocal(o.Type.i64),e.currentFunction.freeTempLocal(A),E=T.createSelect(T.createTeeLocal(A.index,y),T.createTeeLocal(N.index,m),T.createBinary(s.BinaryOp.LtU64,T.createGetLocal(A.index,s.NativeType.I64),T.createGetLocal(N.index,s.NativeType.I64)));break;case 4:A=e.currentFunction.getTempLocal(e.options.usizeType),N=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(A),E=T.createSelect(T.createTeeLocal(A.index,y),T.createTeeLocal(N.index,m),T.createBinary(e.options.isWasm64?s.BinaryOp.LtI64:s.BinaryOp.LtI32,T.createGetLocal(A.index,e.options.nativeSizeType),T.createGetLocal(N.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable();break}A=e.currentFunction.getTempLocal(e.options.usizeType),N=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(A),E=T.createSelect(T.createTeeLocal(A.index,y),T.createTeeLocal(N.index,m),T.createBinary(e.options.isWasm64?s.BinaryOp.LtU64:s.BinaryOp.LtU32,T.createGetLocal(A.index,e.options.nativeSizeType),T.createGetLocal(N.index,e.options.nativeSizeType)));break;case 11:E=T.createBinary(s.BinaryOp.MinF32,y,m);break;case 12:E=T.createBinary(s.BinaryOp.MinF64,y,m);break;default:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable()}return E;case"ceil":if(1!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),T.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.f64,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable();break}default:E=y;break;case 11:E=T.createUnary(s.UnaryOp.CeilF32,y);break;case 12:E=T.createUnary(s.UnaryOp.CeilF64,y);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable()}return E;case"floor":if(1!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),T.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.f64,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable();break}default:E=y;break;case 11:E=T.createUnary(s.UnaryOp.FloorF32,y);break;case 12:E=T.createUnary(s.UnaryOp.FloorF64,y);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable()}return E;case"copysign":if(2!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",u.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),T.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.f64,0);switch(m=e.compileExpression(u[1],e.currentType),e.currentType.kind){case 11:E=T.createBinary(s.BinaryOp.CopysignF32,y,m);break;case 12:E=T.createBinary(s.BinaryOp.CopysignF64,y,m);break;default:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable()}return E;case"nearest":if(1!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),T.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.f64,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable();break}default:E=y;break;case 11:E=T.createUnary(s.UnaryOp.NearestF32,y);break;case 12:E=T.createUnary(s.UnaryOp.NearestF64,y);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable()}return E;case"reinterpret":if(1!=u.length)return r&&1==r.length||(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0")),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),T.createUnreachable();if(!r||1!=r.length)return r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),T.createUnreachable();switch(r[0].kind){case 2:case 7:y=e.compileExpression(u[0],o.Type.f32),E=T.createUnary(s.UnaryOp.ReinterpretF32,y);break;case 3:case 8:y=e.compileExpression(u[0],o.Type.f64),E=T.createUnary(s.UnaryOp.ReinterpretF64,y);break;case 9:if(r[0].is(256))return e.error(i.DiagnosticCode.Operation_not_supported,d.range),e.currentType=r[0],T.createUnreachable();case 4:y=e.compileExpression(u[0],e.options.isWasm64?o.Type.f64:o.Type.f32),E=T.createUnary(e.options.isWasm64?s.UnaryOp.ReinterpretF64:s.UnaryOp.ReinterpretF32,y);break;case 11:y=e.compileExpression(u[0],o.Type.u32),E=T.createUnary(s.UnaryOp.ReinterpretI32,y);break;case 12:y=e.compileExpression(u[0],o.Type.u64),E=T.createUnary(s.UnaryOp.ReinterpretI64,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable()}return e.currentType=r[0],E;case"sqrt":if(1!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),T.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.f64,0);switch(e.currentType.kind){case 11:E=T.createUnary(s.UnaryOp.SqrtF32,y);break;case 12:E=T.createUnary(s.UnaryOp.SqrtF64,y);break;default:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable()}return E;case"trunc":if(1!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),T.createUnreachable();if(r&&r.length){if(e.currentType=r[0],1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),T.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.f64,0);switch(e.currentType.kind){case 9:if(e.currentType.is(256)){e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable();break}default:E=y;break;case 11:E=T.createUnary(s.UnaryOp.TruncF32,y);break;case 12:E=T.createUnary(s.UnaryOp.TruncF64,y);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable()}return E;case"load":return u.length<1||u.length>2?(r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),u.length<1?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"1",u.length.toString(10)):e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",u.length.toString(10)),T.createUnreachable()):r&&1==r.length?(y=e.compileExpression(u[0],e.options.usizeType),(b=2==u.length?l(e,u[1]):0)<0?T.createUnreachable():(e.currentType=r[0],T.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(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),T.createUnreachable());case"store":return e.currentType=o.Type.void,u.length<2||u.length>3?(r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),u.length<2?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"2",u.length.toString(10)):e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",u.length.toString(10)),T.createUnreachable()):r&&1==r.length?(y=e.compileExpression(u[0],e.options.usizeType),m=e.compileExpression(u[1],r[0],r[0].is(4)?0:1),f=void 0,e.currentType.is(4)&&r[0].is(4)&&r[0].size>e.currentType.size?(m=e.convertExpression(m,e.currentType,r[0],1,u[1]),f=r[0]):f=e.currentType,(b=3==u.length?l(e,u[2]):0)<0?T.createUnreachable():(e.currentType=o.Type.void,T.createStore(r[0].byteSize,y,m,f.toNativeType(),b))):(e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),T.createUnreachable());case"sizeof":if(e.currentType=e.options.usizeType,0!=u.length)return r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",u.length.toString(10)),T.createUnreachable();r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0");var C=r[0].byteSize;return e.options.isWasm64?h.is(4)&&h.size<=32?(e.currentType=o.Type.u32,E=T.createI32(C)):E=T.createI64(C,0):h.is(4)&&64==h.size?(e.currentType=o.Type.u64,E=T.createI64(C,0)):E=T.createI32(C),E;case"alignof":if(e.currentType=e.options.usizeType,0!=u.length)return r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",u.length.toString(10)),T.createUnreachable();if(!r||1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),T.createUnreachable();var S=void 0;switch(C=r[0].byteSize){case 1:S=0;break;case 2:S=1;break;case 4:S=2;break;case 8:S=3;break;default:return assert(!1),T.createUnreachable()}return e.options.isWasm64?h.is(4)&&h.size<=32?(e.currentType=o.Type.u32,E=T.createI32(S)):E=T.createI64(S,0):h.is(4)&&64==h.size?(e.currentType=o.Type.u64,E=T.createI64(S,0)):E=T.createI32(S),E;case"offsetof":if(e.currentType=e.options.usizeType,u.length>1)return r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),T.createUnreachable();if(!r||1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),T.createUnreachable();var O;if(!(O=r[0].classReference))return e.error(i.DiagnosticCode.Operation_not_supported,d.range),T.createUnreachable();var b=void 0;if(u.length){if(u[0].kind!=a.NodeKind.LITERAL||u[0].literalKind!=a.LiteralKind.STRING)return e.error(i.DiagnosticCode.String_literal_expected,u[0].range),T.createUnreachable();var L=u[0].value,k=O.members?O.members.get(L):null;if(!k||k.kind!=c.ElementKind.FIELD)return e.error(i.DiagnosticCode.Type_0_has_no_property_1,u[0].range,O.internalName,L),T.createUnreachable();b=k.memoryOffset}else b=O.currentMemoryOffset;return e.options.isWasm64?h.is(4)&&h.size<=32?(e.currentType=o.Type.u32,T.createI32(b)):T.createI64(b):h.is(4)&&64==h.size?(e.currentType=o.Type.u64,T.createI64(b)):T.createI32(b);case"select":if(3!=u.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",u.length.toString(10)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),T.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpression(u[0],o.Type.i32,0);switch(f=e.currentType,m=e.compileExpression(u[1],f),g=e.compileExpression(u[2],o.Type.i32),e.currentType=f,e.currentType.kind){default:E=T.createSelect(y,m,g);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=T.createUnreachable()}return E;case"unreachable":return 0!=u.length&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",u.length.toString(10)),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),T.createUnreachable();case"current_memory":return e.currentType=o.Type.i32,0!=u.length&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",u.length.toString(10)),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),T.createHost(s.HostOp.CurrentMemory);case"grow_memory":return e.currentType=o.Type.i32,1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"0",u.length.toString(10)),y=T.createUnreachable()):y=e.compileExpression(u[0],o.Type.i32),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),T.createHost(s.HostOp.GrowMemory,null,[y]);case"move_memory":if(r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),3!=u.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",u.length.toString(10)),e.currentType=o.Type.void,T.createUnreachable();throw y=e.compileExpression(u[0],e.options.usizeType),m=e.compileExpression(u[1],e.options.usizeType),g=e.compileExpression(u[2],e.options.usizeType),e.currentType=o.Type.void,new Error("not implemented");case"set_memory":if(r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),3!=u.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"3",u.length.toString(10)),e.currentType=o.Type.void,T.createUnreachable();throw y=e.compileExpression(u[0],e.options.usizeType),m=e.compileExpression(u[1],o.Type.u32),g=e.compileExpression(u[2],e.options.usizeType),e.currentType=o.Type.void,new Error("not implemented");case"changetype":return r&&1==r.length?9!=r[0].kind?(e.error(i.DiagnosticCode.Operation_not_supported,d.range),e.currentType=r[0],T.createUnreachable()):1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=r[0],T.createUnreachable()):(y=e.compileExpression(u[0],e.options.usizeType,0),e.currentType=r[0],9!=e.currentType.kind?(e.error(i.DiagnosticCode.Operation_not_supported,d.range),T.createUnreachable()):y):(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r?r.length.toString(10):"0"),T.createUnreachable());case"assert":if(u.length<1||u.length>2)return r&&(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10))),u.length<1?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,d.range,"1",u.length.toString(10)):u.length>2&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"2",u.length.toString(10)),T.createUnreachable();if(r){if(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,d.range,"1",r.length.toString(10)),T.createUnreachable();y=e.compileExpression(u[0],r[0])}else y=e.compileExpressionRetainType(u[0],o.Type.i32);if(f=e.currentType,e.currentType=f.nonNullableType,e.options.noAssert)return h==o.Type.void?(e.currentType=o.Type.void,T.createNop()):y;var x=_(e,2==u.length?u[1]:null,d);if(e.currentType=f.nonNullableType,h==o.Type.void){switch(e.currentType.kind){default:E=T.createIf(T.createUnary(s.UnaryOp.EqzI32,y),x);break;case 3:case 8:E=T.createIf(T.createUnary(s.UnaryOp.EqzI64,y),x);break;case 4:case 9:E=T.createIf(T.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,y),x);break;case 11:E=T.createIf(T.createBinary(s.BinaryOp.EqF32,y,T.createF32(0)),x);break;case 12:E=T.createIf(T.createBinary(s.BinaryOp.EqF64,y,T.createF64(0)),x);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=x}e.currentType=o.Type.void}else switch(e.currentType.kind){default:I=e.currentFunction.getAndFreeTempLocal(o.Type.i32),E=T.createIf(T.createUnary(s.UnaryOp.EqzI32,T.createTeeLocal(I.index,y)),x,T.createGetLocal(I.index,s.NativeType.I32));break;case 3:case 8:I=e.currentFunction.getAndFreeTempLocal(o.Type.i64),E=T.createIf(T.createUnary(s.UnaryOp.EqzI64,T.createTeeLocal(I.index,y)),x,T.createGetLocal(I.index,s.NativeType.I64));break;case 4:case 9:I=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),E=T.createIf(T.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,T.createTeeLocal(I.index,y)),x,T.createGetLocal(I.index,e.options.nativeSizeType));break;case 11:I=e.currentFunction.getAndFreeTempLocal(o.Type.f32),E=T.createIf(T.createBinary(s.BinaryOp.EqF32,T.createTeeLocal(I.index,y),T.createF32(0)),x,T.createGetLocal(I.index,s.NativeType.F32));break;case 12:I=e.currentFunction.getAndFreeTempLocal(o.Type.f64),E=T.createIf(T.createBinary(s.BinaryOp.EqF64,T.createTeeLocal(I.index,y),T.createF64(0)),x,T.createGetLocal(I.index,s.NativeType.F64));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,d.range),E=x}return E;case"i8":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=o.Type.i8,T.createUnreachable()):e.compileExpression(u[0],o.Type.i8,2);case"i16":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=o.Type.i16,T.createUnreachable()):e.compileExpression(u[0],o.Type.i16,2);case"i32":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=o.Type.i32,T.createUnreachable()):e.compileExpression(u[0],o.Type.i32,2);case"i64":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=o.Type.i64,T.createUnreachable()):e.compileExpression(u[0],o.Type.i64,2);case"isize":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=e.options.isWasm64?o.Type.isize64:o.Type.isize32,T.createUnreachable()):e.compileExpression(u[0],e.options.isWasm64?o.Type.isize64:o.Type.isize32,2);case"u8":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=o.Type.u8,T.createUnreachable()):e.compileExpression(u[0],o.Type.u8,2);case"u16":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=o.Type.u16,T.createUnreachable()):e.compileExpression(u[0],o.Type.u16,2);case"u32":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=o.Type.u32,T.createUnreachable()):e.compileExpression(u[0],o.Type.u32,2);case"u64":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=o.Type.u64,T.createUnreachable()):e.compileExpression(u[0],o.Type.u64,2);case"usize":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=e.options.usizeType,T.createUnreachable()):e.compileExpression(u[0],e.options.usizeType,2);case"bool":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=o.Type.bool,T.createUnreachable()):e.compileExpression(u[0],o.Type.bool,2);case"f32":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=o.Type.f32,T.createUnreachable()):e.compileExpression(u[0],o.Type.f32,2);case"f64":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,d.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,d.range,"1",u.length.toString(10)),e.currentType=o.Type.f64,T.createUnreachable()):e.compileExpression(u[0],o.Type.f64,2)}return e.error(i.DiagnosticCode.Operation_not_supported,d.range),T.createUnreachable()};var u="allocate_memory";t.compileAllocate=function(e,t,r){var n=e.program;assert(t.program==n);var a=e.module,o=e.options,s=n.elementsLookup.get(u);if(!s)return n.error(i.DiagnosticCode.Cannot_find_name_0,r.range,u),a.createUnreachable();if(s.kind!=c.ElementKind.FUNCTION_PROTOTYPE)return n.error(i.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,r.range,s.internalName),a.createUnreachable();var p=s.resolve();return p&&e.compileFunction(p)?(e.currentType=t.type,a.createCall(p.internalName,[o.isWasm64?a.createI64(t.currentMemoryOffset):a.createI32(t.currentMemoryOffset)],o.nativeSizeType)):a.createUnreachable()};var h="abort";function _(e,t,r){var n=e.program,i=e.module,a=n.typesLookup.get("string");if(!a)return i.createUnreachable();var p=n.elementsLookup.get(h);if(!p||p.kind!=c.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,a):a.toNativeZero(i),_=e.compileStaticString(r.range.source.normalizedPath);return e.currentType=o.Type.void,i.createBlock(null,[i.createCallImport(l.internalName,[u,_,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){"number"==typeof n&&(e+=n),t[e]=r},e.load=function(e){return"number"==typeof off&&(e+=off),t[e]}})},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.abs=Math.abs,t.max=Math.max,t.min=Math.min,t.ceil=Math.ceil,t.floor=Math.floor,t.select=function(e,t,r){return r?e:t},t.sqrt=Math.sqrt,t.trunc=Math.trunc,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.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 57d3b017..86bbf8d7 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/compiler.ts","webpack://assemblyscript/./src/diagnosticMessages.generated.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","operatorKindFromString","str","INDEXED_GET","INDEXED_SET","ADD","SUB","MUL","DIV","REM","POW","AND","OR","XOR","EQ","NE","GT","GE","LT","LE","INVALID","ElementKind","CommonFlags","DecoratorFlags","noTypesYet","Map","Program","_super","diagnostics","_this","diagnosticsOffset","elementsLookup","typesLookup","typeAliases","fileLevelExports","moduleLevelExports","arrayPrototype","arrayBufferViewPrototype","stringInstance","resolvedThisExpression","resolvedElementExpression","sources","__extends","getSource","normalizedPath","k","length","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","assert","extendsType","baseElement","resolveIdentifier","CLASS_PROTOTYPE","basePrototype","A_class_may_only_extend_another_class","globalAliases","globalAliases_1","globalAliases_1_1","_c","alias","INTERFACE_PROTOTYPE","stringPrototype","resolve","has","Duplicate_identifier_0","programLevelInternalName","type","filterDecorators","decorators","acceptedFlags","presentFlags","NONE","decorator","IDENTIFIER","flag","decoratorKindToFlag","stringToDecoratorKind","Duplicate_decorator","Decorator_0_is_not_valid_here","checkGlobalOptions","parentNode","hasDecorator","GLOBAL","isLibrary","is","SOURCE","simpleName","BUILTIN","namespace","fileLevelInternalName","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","Error","classPrototype","STATIC","staticField","Global","instanceMembers","instanceField","FieldPrototype","decoratorFlags","INLINE","CONSTRUCTOR","FunctionPrototype","constructorPrototype","Multiple_constructor_implementations_are_not_allowed","checkOperatorOverloads","decoratorKind","DecoratorKind","OPERATOR","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","toString","internalPropertyName","propertyElement","isGetter","isNew","PROPERTY","getterPrototype","setterPrototype","Property","baseName","staticName","staticPrototype","instanceName","instancePrototype","Enum","values","initializeEnumValue","enm","isModuleExport","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","parameterTypes","numParameters","parameterNames","requiredParameters","hasRest","parameterTypeNode","parameterKind","ParameterKind","DEFAULT","REST","parameterType","returnType","returnTypeNode","signature","Signature","SIGNATURE","asFunction","typeNode","globalName","localName","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","memberOf","_this_cannot_be_referenced_in_current_location","SUPER","_super_can_only_be_referenced_in_a_derived_class","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","ENUM","constantValue","enum","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","asThis","signatureParameters","signatureParameterCount","parameterDeclaration","Function","resolvePartial","partialKey","partialPrototype","reportNode","resolvedTypeArguments","GENERIC","resolveBuiltinTypeArguments","resolvedType","FUNCTION","locals","additionalLocals","breakContext","debugLocations","ref","functionTableIndex","trampoline","outerScope","nextBreakId","breakStack","nextInlineId","tempI32s","tempI64s","tempF32s","tempF64s","AMBIENT","DECLARE","localIndex","inheritedTypeArguments_2","inheritedTypeArguments_2_1","parameterName","getParameterName","Flow","create","addLocal","local","getTempLocal","temps","toNativeType","NativeType","I32","I64","F32","F64","ret","pop","freeTempLocal","getAndFreeTempLocal","enterBreakContext","id","leaveBreakContext","finalize","sourceMap","debugLocation","setDebugLocation","debugInfoRef","debugInfoIndex","line","column","FUNCTION_TARGET","toSignatureString","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","overload","Interface","INTERFACE","FlowFlags","scopedLocals","currentFunction","parentFlow","continueLabel","breakLabel","returnLabel","unset","enterBranchOrScope","branch","leaveBranchOrScope","_b","scopedLocal","addScopedLocal","existingLocal","__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","charCodeAt","sb","formatDiagnosticMessage","showContext","emitDiagnostic","info","warning","ExpressionId","compiler_1","_BinaryenTypeNone","_BinaryenTypeInt32","_BinaryenTypeInt64","_BinaryenTypeFloat32","_BinaryenTypeFloat64","_BinaryenTypeUnreachable","_BinaryenTypeAuto","_BinaryenInvalidId","_BinaryenBlockId","_BinaryenIfId","_BinaryenLoopId","_BinaryenBreakId","_BinaryenSwitchId","_BinaryenCallId","_BinaryenCallImportId","_BinaryenCallIndirectId","_BinaryenGetLocalId","_BinaryenSetLocalId","_BinaryenGetGlobalId","_BinaryenSetGlobalId","_BinaryenLoadId","_BinaryenStoreId","_BinaryenConstId","_BinaryenUnaryId","_BinaryenBinaryId","_BinaryenSelectId","_BinaryenDropId","_BinaryenReturnId","_BinaryenHostId","_BinaryenNopId","_BinaryenUnreachableId","_BinaryenAtomicCmpxchgId","_BinaryenAtomicRMWId","_BinaryenAtomicWaitId","_BinaryenAtomicWakeId","UnaryOp","_BinaryenClzInt32","_BinaryenCtzInt32","_BinaryenPopcntInt32","_BinaryenNegFloat32","_BinaryenAbsFloat32","_BinaryenCeilFloat32","_BinaryenFloorFloat32","_BinaryenTruncFloat32","_BinaryenNearestFloat32","_BinaryenSqrtFloat32","_BinaryenEqZInt32","_BinaryenClzInt64","_BinaryenCtzInt64","_BinaryenPopcntInt64","_BinaryenNegFloat64","_BinaryenAbsFloat64","_BinaryenCeilFloat64","_BinaryenFloorFloat64","_BinaryenTruncFloat64","_BinaryenNearestFloat64","_BinaryenSqrtFloat64","_BinaryenEqZInt64","_BinaryenExtendSInt32","_BinaryenExtendUInt32","_BinaryenWrapInt64","_BinaryenTruncSFloat32ToInt32","_BinaryenTruncSFloat32ToInt64","_BinaryenTruncUFloat32ToInt32","_BinaryenTruncUFloat32ToInt64","_BinaryenTruncSFloat64ToInt32","_BinaryenTruncSFloat64ToInt64","_BinaryenTruncUFloat64ToInt32","_BinaryenTruncUFloat64ToInt64","_BinaryenReinterpretFloat32","_BinaryenReinterpretFloat64","_BinaryenConvertSInt32ToFloat32","_BinaryenConvertSInt32ToFloat64","_BinaryenConvertUInt32ToFloat32","_BinaryenConvertUInt32ToFloat64","_BinaryenConvertSInt64ToFloat32","_BinaryenConvertSInt64ToFloat64","_BinaryenConvertUInt64ToFloat32","_BinaryenConvertUInt64ToFloat64","_BinaryenPromoteFloat32","_BinaryenDemoteFloat64","_BinaryenReinterpretInt32","_BinaryenReinterpretInt64","BinaryOp","_BinaryenAddInt32","_BinaryenSubInt32","_BinaryenMulInt32","_BinaryenDivSInt32","_BinaryenDivUInt32","_BinaryenRemSInt32","_BinaryenRemUInt32","_BinaryenAndInt32","_BinaryenOrInt32","_BinaryenXorInt32","_BinaryenShlInt32","_BinaryenShrUInt32","_BinaryenShrSInt32","_BinaryenRotLInt32","_BinaryenRotRInt32","_BinaryenEqInt32","_BinaryenNeInt32","_BinaryenLtSInt32","_BinaryenLtUInt32","_BinaryenLeSInt32","_BinaryenLeUInt32","_BinaryenGtSInt32","_BinaryenGtUInt32","_BinaryenGeSInt32","_BinaryenGeUInt32","_BinaryenAddInt64","_BinaryenSubInt64","_BinaryenMulInt64","_BinaryenDivSInt64","_BinaryenDivUInt64","_BinaryenRemSInt64","_BinaryenRemUInt64","_BinaryenAndInt64","_BinaryenOrInt64","_BinaryenXorInt64","_BinaryenShlInt64","_BinaryenShrUInt64","_BinaryenShrSInt64","_BinaryenRotLInt64","_BinaryenRotRInt64","_BinaryenEqInt64","_BinaryenNeInt64","_BinaryenLtSInt64","_BinaryenLtUInt64","_BinaryenLeSInt64","_BinaryenLeUInt64","_BinaryenGtSInt64","_BinaryenGtUInt64","_BinaryenGeSInt64","_BinaryenGeUInt64","_BinaryenAddFloat32","_BinaryenSubFloat32","_BinaryenMulFloat32","_BinaryenDivFloat32","_BinaryenCopySignFloat32","_BinaryenMinFloat32","_BinaryenMaxFloat32","_BinaryenEqFloat32","_BinaryenNeFloat32","_BinaryenLtFloat32","_BinaryenLeFloat32","_BinaryenGtFloat32","_BinaryenGeFloat32","_BinaryenAddFloat64","_BinaryenSubFloat64","_BinaryenMulFloat64","_BinaryenDivFloat64","_BinaryenCopySignFloat64","_BinaryenMinFloat64","_BinaryenMaxFloat64","_BinaryenEqFloat64","_BinaryenNeFloat64","_BinaryenLtFloat64","_BinaryenLeFloat64","_BinaryenGtFloat64","_BinaryenGeFloat64","HostOp","_BinaryenPageSize","_BinaryenCurrentMemory","_BinaryenGrowMemory","_BinaryenHasFeature","AtomicRMWOp","_BinaryenAtomicRMWAdd","_BinaryenAtomicRMWSub","_BinaryenAtomicRMWAnd","_BinaryenAtomicRMWOr","_BinaryenAtomicRMWXor","_BinaryenAtomicRMWXchg","MemorySegment","buffer","offset","segment","Module","_BinaryenModuleCreate","out","allocate_memory","createFrom","cArr","allocU8Array","_BinaryenModuleRead","free_memory","changetype","addFunctionType","result","cStr","allocString","allocI32Array","_BinaryenAddFunctionType","getFunctionTypeBySignature","_BinaryenGetFunctionTypeBySignature","createI32","_BinaryenLiteralInt32","_BinaryenConst","createI64","valueLow","valueHigh","_BinaryenLiteralInt64","createF32","_BinaryenLiteralFloat32","createF64","_BinaryenLiteralFloat64","createUnary","op","expr","_BinaryenUnary","createBinary","left","right","_BinaryenBinary","createHost","operands","_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","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","validate","_BinaryenModuleValidate","interpret","_BinaryenModuleInterpret","toBinary","sourceMapUrl","binaryPtr","sourceMapPtr","_BinaryenModuleAllocateAndWrite","readInt","binaryBytes","BinaryModule","output","Uint8Array","load","readBuffer","readString","toText","toAsmjs","dispose","_BinaryenModuleDispose","createRelooper","Relooper","cloneExpression","noSideEffects","maxDepth","MAX_VALUE","nested1","nested2","_BinaryenExpressionGetId","Const","_BinaryenExpressionGetType","_BinaryenConstGetValueI32","_BinaryenConstGetValueI64Low","_BinaryenConstGetValueI64High","_BinaryenConstGetValueF32","_BinaryenConstGetValueF64","GetLocal","_BinaryenGetLocalGetIndex","GetGlobal","_BinaryenGetGlobalGetName","Load","_BinaryenLoadGetPtr","_BinaryenLoadIsAtomic","_BinaryenLoadGetBytes","_BinaryenLoadGetOffset","_BinaryenLoadIsSigned","_BinaryenLoadGetAlign","Unary","_BinaryenUnaryGetValue","_BinaryenUnaryGetOp","Binary","_BinaryenBinaryGetLeft","_BinaryenBinaryGetRight","_BinaryenBinaryGetOp","addDebugInfoFile","_BinaryenModuleAddDebugInfoFileName","getDebugInfoFile","_BinaryenModuleGetDebugInfoFileName","fileIndex","lineNumber","columnNumber","_BinaryenFunctionSetDebugLocation","MAX_MEMORY_WASM32","MAX_MEMORY_WASM64","relooper","_RelooperCreate","createStub","addBlock","_RelooperAddBlock","addBranch","from","to","_RelooperAddBranch","addBlockWithSwitch","_RelooperAddBlockWithSwitch","addBranchForSwitch","indexes","_RelooperAddBranchForSwitch","renderAndDispose","entry","labelHelper","_RelooperRenderAndDispose","u8s","numValues","idx","store","i32s","val","u","stringLengthUTF8","cp","u1","u2","u3","u4","arr","String","fromCodePoints","program_1","tokenizer_1","Token","Node","createType","isNullable","TypeNode","setParent","createOmittedType","createIdentifierExpression","createTypeParameter","elem","TypeParameterNode","createParameter","ParameterNode","createSignature","parameters","sig","SignatureNode","createDecorator","args","stmt","DecoratorNode","CUSTOM","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","createIntegerLiteralExpression","IntegerLiteralExpression","createNewExpression","NewExpression","createNullExpression","NullExpression","createParenthesizedExpression","ParenthesizedExpression","createPropertyAccessExpression","PropertyAccessExpression","createRegexpLiteralExpression","pattern","RegexpLiteralExpression","patternFlags","createTernaryExpression","ifThen","ifElse","TernaryExpression","createStringLiteralExpression","StringLiteralExpression","createSuperExpression","SuperExpression","createThisExpression","ThisExpression","createTrueExpression","TrueExpression","createUnaryPostfixExpression","operand","UnaryPostfixExpression","createUnaryPrefixExpression","UnaryPrefixExpression","createBlockStatement","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","PRECOMPUTE","DECORATOR","CommentKind","COMMENT","Expression","LiteralExpression","ARRAY","AssertionKind","COMMA","FLOAT","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","getFirstDecorator","asGlobal","g","eval","e","window","tokenFromKeyword","ABSTRACT","AS","ASYNC","AWAIT","CASE","CATCH","DEBUGGER","DELETE","ELSE","EXTENDS","FINALLY","FROM","IMPLEMENTS","IN","INSTANCEOF","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","PLUS","MINUS","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","preferIdentifier","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","isWhiteSpace","Invalid_character","ENDOFFILE","peek","checkOnNewLine","maxCompoundLength","tokenBefore","tokenPosBefore","skip","mark","state","reusableState","State","discard","reset","readIdentifier","quote","Unterminated_string_literal","readEscapeSequence","Unexpected_end_of_text","readExtendedUnicodeEscape","readUnicodeEscape","fromCharCode","readRegexpPattern","escaped","Unterminated_regular_expression_literal","readRegexpFlags","Invalid_regular_expression_flags","readInteger","readHexInteger","readBinaryInteger","readOctalInteger","isOctalDigit","Octal_literals_are_not_allowed_in_strict_mode","readDecimalInteger","i64_16","i64_add","i64_mul","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","size","nullableType","ceil","nonNullableType","computeSmallIntegerShift","targetType","computeSmallIntegerMask","asNullable","signednessIsImportant","currentClass","targetClass","targetFunction","commonCompatible","kindOnly","toNativeZero","toNativeOne","toNativeNegOne","isize32","isize64","usize32","usize64","typesToNativeTypes","types","numTypes","getGenericParameterName","thisThisType","targetThisType","thisParameterTypes","targetParameterTypes","thisParameterType","targetParameterType","thisReturnType","targetReturnType","includeThis","optionalStart","restIndex","cachedGenericParameterNames","builtins_1","Options","WASM32","noTreeShaking","noAssert","noMemory","importMemory","importTable","memoryBase","ConversionKind","Compiler","outerFunction","currentEnum","currentType","startFunctionBody","memorySegments","stringSegments","functionTable","argumentCountRef","f32ModInstance","f64ModInstance","f32PowInstance","f64PowInstance","max","compile","startFunctionPrototype","startFunctionInstance","startFunction","compileSource","typeRef","ensureFunctionType","funcRef","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","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","compileInterfaceDeclaration","compileNamespace","ns","compileClassUsingTypeArguments","internalExportName","functionInstance","functionDeclaration","globalDeclaration","compileClass","addMemorySegment","alignment","ensureFunctionTableEntry","TRAMPOLINE","ensureTrampoline","compileBlockStatement","compileBreakStatement","compileContinueStatement","compileDoStatement","compileEmptyStatement","compileExpressionStatement","compileForStatement","compileIfStatement","compileReturnStatement","compileSwitchStatement","compileThrowStatement","compileTryStatement","compileVoidStatement","compileWhileStatement","addDebugLocation","compileStatements","numStatements","stmts","stmtReturns","stmtThrows","stmtAllocates","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","previousBreakLabel","previousContinueLabel","condExpr","makeIsTrueish","context","alwaysReturns","alwaysThrows","alwaysAllocates","GENERIC_CONTEXT","ifTrueExpr","ifTrueReturns","ifTrueThrows","ifTrueAllocates","ifFalseExpr","ifFalseReturns","ifFalseThrows","ifFalseAllocates","tempLocal","tempLocalIndex","numCases","breaks","breakIndex","defaultIndex","EqI32","currentBlock","fallsThrough","nextLabel","compileAbort","isKnownGlobal","numDeclarations","initializers","init","isInlined","_const_declarations_must_be_initialized","compileAssignmentWithValue","contextualType","retainType","shift","mask","conversionKind","wrapSmallIntegers","compileAssertionExpression","compileBinaryExpression","compileCallExpression","compileCommaExpression","compileElementAccessExpression","compileFunctionExpression","compileIdentifierExpression","compileLiteralExpression","compileNewExpression","compileParenthesizedExpression","compilePropertyAccessExpression","compileTernaryExpression","compileUnaryPostfixExpression","compileUnaryPrefixExpression","convertExpression","compileExpressionRetainType","precomputeExpression","_BinaryenFunctionGetBody","fromType","Conversion_from_type_0_to_1_requires_an_explicit_cast","PromoteF32","DemoteF64","TruncF32ToI64","TruncF32ToI32","makeSmallIntegerWrap","TruncF32ToU64","TruncF32ToU32","TruncF64ToI64","TruncF64ToI32","TruncF64ToU64","TruncF64ToU32","ConvertI64ToF32","ConvertU64ToF32","ConvertI32ToF32","ConvertU32ToF32","ConvertI64ToF64","ConvertU64ToF64","ConvertI32ToF64","ConvertU32ToF64","WrapI64","ExtendI32","ExtendU32","leftExpr","leftType","rightExpr","rightType","commonType","compound","possiblyOverflows","compileBinaryOverload","Operator_0_cannot_be_applied_to_types_1_and_2","LtI32","LtI64","LtU32","LtU64","LtF32","LtF64","GtI32","GtI64","GtU32","GtU64","GtF32","GtF64","LeI32","LeI64","LeU32","LeU64","LeF32","LeF64","GeI32","GeI64","GeU32","GeU64","GeF32","GeF64","EqI64","EqF32","EqF64","NeI32","NeI64","NeF32","NeF64","compileAssignment","AddI64","AddF32","AddF64","SubI32","SubI64","SubF32","SubF64","MulI32","MulI64","MulF32","MulF64","makeCallDirect","DivI32","DivI64","DivU32","DivU64","DivF32","DivF64","RemI32","RemI64","RemU32","RemU64","ShlI32","ShlI64","The_0_operator_cannot_be_applied_to_type_1","ShrI32","ShrI64","ShrU32","ShrU64","AndI32","AndI64","OrI32","OrI64","XorI32","XorI64","compileUnaryOverload","argumentExpressions","thisArg","classElement","compileCallDirect","valueExpression","elementType","Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property","valueExpr","valueWithCorrectType","tee","thisExpression","thisExpr","setterInstance","getterInstance","nativeReturnType","indexedSet","Index_signature_in_type_0_only_permits_reading","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","argumentLocal","bodyStatement","original","originalSignature","originalName","originalParameterTypes","originalParameterDeclarations","commonReturnType","commonThisType","minArguments","minOperands","maxArguments","maxOperands","numOptional","forwardedOperands","operandIndex","trampolineSignature","trampolineName","ofN","numOperands","isCallImport","ensureArgumentCount","makeCallIndirect","numExpressions","exprs","retainConstantType","scopedThis","superType","localType","compileGetConstant","A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums","implicitNegate","compileStaticArray","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","isStatic","arrayType","byteLength","elementCount","Int32Array","Float32Array","Float64Array","usizeTypeSize","arraySize","bufferTotalSize","clz","data","writeI64","writeI32","writeF32","writeF64","Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature","currentClassInstance","makeAllocate","ifThenExpr","ifElseExpr","ifThenAllocates","ifElseAllocates","getValue","Unreachable","nativeOne","setValue","NegF32","NegF64","makeIsFalseish","EqzI32","EqzI64","compiler","compileAllocate","field","nativeFieldType","builtinsFile","Parser","backlog","seenlog","tryParseSignatureIsSignature","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","parseClassOrInterface","parseNamespace","parseExportImport","parseImport","parseTypeDeclaration","parseExport","_0_modifier_cannot_be_used_here","parseStatement","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","Type_parameter_list_cannot_be_empty","typeParameter","parseTypeParameter","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","walk","visitElement","visitGlobal","visitEnum","visitFunction","_e","visitClass","visitNamespace","IDLBuilder","indentLevel","build","isConst","indent","typeToString","i64_to_string","members_1","members_1_1","visitInterface","TSDBuilder","numMembers","members_2","members_2_1","Decompiler","functionId","decompile","decompiler","decompileFunction","_BinaryenFunctionGetName","_BinaryenFunctionGetNumParams","nativeTypeToType","_BinaryenFunctionGetParam","_BinaryenFunctionGetResult","Block","decompileExpression","nested","string","_BinaryenBlockGetName","_BinaryenBlockGetNumChildren","_BinaryenBlockGetChild","If","_BinaryenIfGetCondition","_BinaryenIfGetIfTrue","_BinaryenIfGetIfFalse","Loop","_BinaryenLoopGetName","_BinaryenLoopGetBody","Break","_BinaryenBreakGetCondition","_BinaryenBreakGetName","Switch","Call","CallImport","CallIndirect","SetLocal","_BinaryenSetLocalGetIndex","_BinaryenSetLocalGetValue","SetGlobal","Store","_BinaryenStoreGetOffset","_BinaryenStoreGetPtr","_BinaryenStoreGetValue","ClzI32","CtzI32","PopcntI32","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","Select","_BinaryenSelectGetIfTrue","_BinaryenSelectGetIfFalse","_BinaryenSelectGetCondition","Drop","_BinaryenDropGetValue","Return","_BinaryenReturnGetValue","Host","_BinaryenHostGetOp","CurrentMemory","GrowMemory","_BinaryenHostGetOperand","Nop","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","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","MIN_VALUE","neg","TWO_PWR_32_DBL","lowBits","highBits","pow_dbl","Math","pow","fromString","radix","RangeError","radixToPower","min","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","other","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_and","i64_or","i64_xor","i64_shl","i64_shr","i64_not","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","map","mid","evaluateConstantType","evaluateConstantOffset","NaN","Infinity","tempLocal0","tempLocal1","alignLog2","fieldName","Type_0_has_no_property_1","abort","allocateInternalName","allocatePrototype","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","off","UnreachableError","captureStackTrace","stack","AssertionError","defineProperties","writable","MIN_POSITIVE_VALUE","EPSILON","clz32","abs","sqrt","trunc","isTrueish","undefined","fromCodePoint","Number","isInteger","arg","isArray","y"],"mappings":"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K,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IACpB,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,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,MA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","file":"assemblyscript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"binaryen\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"binaryen\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"assemblyscript\"] = factory(require(\"binaryen\"));\n\telse\n\t\troot[\"assemblyscript\"] = factory(root[\"binaryen\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE__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 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 // ParameterNode,\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 VariableLikeDeclarationStatement,\r\n VariableStatement,\r\n\r\n ParameterKind,\r\n SignatureNode,\r\n VariableDeclaration,\r\n stringToDecoratorKind\r\n} from \"./ast\";\r\n\r\nimport {\r\n Module,\r\n NativeType,\r\n FunctionRef,\r\n} from \"./module\";\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 INDEXED_GET,\r\n INDEXED_SET,\r\n ADD,\r\n SUB,\r\n MUL,\r\n DIV,\r\n REM,\r\n POW,\r\n AND,\r\n OR,\r\n XOR,\r\n EQ,\r\n NE,\r\n GT,\r\n GE,\r\n LT,\r\n LE\r\n}\r\n\r\nfunction operatorKindFromString(str: string): OperatorKind {\r\n switch (str) {\r\n case \"[]\" : return OperatorKind.INDEXED_GET;\r\n case \"[]=\": return OperatorKind.INDEXED_SET;\r\n case \"+\" : return OperatorKind.ADD;\r\n case \"-\" : return OperatorKind.SUB;\r\n case \"*\" : return OperatorKind.MUL;\r\n case \"/\" : return OperatorKind.DIV;\r\n case \"%\" : return OperatorKind.REM;\r\n case \"**\" : return OperatorKind.POW;\r\n case \"&\" : return OperatorKind.AND;\r\n case \"|\" : return OperatorKind.OR;\r\n case \"^\" : return OperatorKind.XOR;\r\n case \"==\" : return OperatorKind.EQ;\r\n case \"!=\" : return OperatorKind.NE;\r\n case \">\" : return OperatorKind.GT;\r\n case \">=\" : return OperatorKind.GE;\r\n case \"<\" : return OperatorKind.LT;\r\n case \"<=\" : return OperatorKind.LE;\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 /** 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 let element = this.elementsLookup.get(name); // TODO: error? has no source range\r\n if (element) this.elementsLookup.set(alias, element);\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 if (decorator.name.kind == NodeKind.IDENTIFIER) {\r\n let name = (decorator.name).text;\r\n let kind = stringToDecoratorKind(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, name\r\n );\r\n } else if (presentFlags & flag) {\r\n this.error(\r\n DiagnosticCode.Duplicate_decorator,\r\n decorator.range, name\r\n );\r\n } else {\r\n presentFlags |= flag;\r\n }\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 (\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 simpleName = declaration.name.text;\r\n if (this.elementsLookup.has(simpleName)) {\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(simpleName, element);\r\n if (element.is(CommonFlags.BUILTIN)) {\r\n element.internalName = simpleName;\r\n }\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.namespace = 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)) {\r\n if (prototype.is(CommonFlags.EXPORT)) {\r\n prototype.set(CommonFlags.MODULE_EXPORT);\r\n }\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\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 );\r\n classPrototype.members.set(name, staticField);\r\n this.elementsLookup.set(internalName, staticField);\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 classPrototype.instanceMembers.set(name, instanceField);\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.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 // handle operator annotations. operators are either instance methods taking\r\n // a second argument of the instance's type or static methods taking two\r\n // arguments of the instance's type. return values vary depending on the\r\n // operation.\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n if (decorator.decoratorKind == DecoratorKind.OPERATOR) {\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 = operatorKindFromString((firstArg).value);\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 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 }\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.namespace = 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)) {\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 var isModuleExport = enm.is(CommonFlags.MODULE_EXPORT);\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 (isModuleExport) {\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.namespace = 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.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) {\r\n let internalName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n statement.namespaceName.text\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 var 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.namespace = 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.namespace = 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 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 );\r\n global.namespace = 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.parameterTypes;\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 Type.u32.asFunction(signature);\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\r\n // check file-global / program-global element\r\n if ((element = this.elementsLookup.get(localName)) || (element = this.elementsLookup.get(globalName))) {\r\n switch (element.kind) {\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 return instance ? instance.type : null;\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.namespace) {\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.namespace);\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.memberOf;\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.memberOf;\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}\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 an unmanaged class. */\r\n UNMANAGED = 1 << 2,\r\n /** Is a sealed class. */\r\n SEALED = 1 << 3,\r\n /** Is always inlined. */\r\n INLINE = 1 << 4\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.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 namespace, if applicable. */\r\n namespace: 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 /** Parent enum. */\r\n enum: Enum;\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.enum = 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 ) {\r\n super(program, simpleName, internalName, type, declaration);\r\n this.flags = declaration ? declaration.flags : CommonFlags.NONE;\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.asThis();\r\n contextualTypeArguments.set(\"this\", thisType);\r\n }\r\n\r\n // resolve signature node\r\n var signatureParameters = signatureNode.parameterTypes;\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 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 /** If a member of another namespace-like element, the concrete element it is a member of. */\r\n memberOf: Element | null;\r\n /** Map of locals by name. */\r\n locals: Map = new Map();\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[] | null = null;\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 memberOf: 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.memberOf = memberOf;\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 (memberOf && memberOf.kind == ElementKind.CLASS) {\r\n assert(this.is(CommonFlags.INSTANCE));\r\n this.locals.set(\r\n \"this\",\r\n new Local(\r\n prototype.program,\r\n \"this\",\r\n localIndex++,\r\n assert(signature.thisType)\r\n )\r\n );\r\n let inheritedTypeArguments = (memberOf).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 this.locals.set(\r\n parameterName,\r\n new Local(\r\n prototype.program,\r\n parameterName,\r\n localIndex++,\r\n parameterType\r\n // FIXME: declaration?\r\n )\r\n );\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.locals.has(name)) throw new Error(\"duplicate local name\");\r\n this.locals.set(name, local);\r\n }\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): 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 if (temps && temps.length) {\r\n let ret = temps.pop();\r\n ret.type = type;\r\n return ret;\r\n }\r\n return this.addLocal(type);\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): 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 if (temps.length > 0) {\r\n return temps[temps.length - 1];\r\n }\r\n var local: Local = this.addLocal(type);\r\n temps.push(local);\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) {\r\n this.breakStack = [ id ];\r\n } else {\r\n this.breakStack.push(id);\r\n }\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 if (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 this.debugLocations = null;\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 ) {\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 }\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\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 );\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): Function | null {\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}\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 /** Scoped global variables. */\r\n // scopedGlobals: Map | null = 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 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 /** 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 return branch;\r\n }\r\n\r\n /** Leaves the current branch or scope and returns the parent flow. */\r\n leaveBranchOrScope(): 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 this.currentFunction.freeTempLocal(scopedLocal);\r\n }\r\n this.scopedLocals = null;\r\n }\r\n\r\n // Propagate flags to parent\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, declaration?: VariableDeclaration): Local {\r\n var scopedLocal = this.currentFunction.getTempLocal(type);\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 this.scopedLocals.set(name, scopedLocal);\r\n return scopedLocal;\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.locals.get(name);\r\n }\r\n\r\n /** Adds a scoped global for an outer scoped local. */\r\n // addScopedGlobal(scopedLocal: Local): Global {\r\n // var scopedGlobals = this.scopedGlobals;\r\n // var scopedGlobal: Global | null;\r\n // if (!scopedGlobals) {\r\n // this.scopedGlobals = scopedGlobals = new Map();\r\n // } else {\r\n // scopedGlobal = scopedGlobals.get(scopedLocal);\r\n // if (scopedGlobal) return scopedGlobal;\r\n // }\r\n // scopedGlobal = new Global(\r\n // scopedLocal.program,\r\n // scopedLocal.simpleName,\r\n // this.currentFunction.internalName + INNER_DELIMITER + scopedLocal.internalName,\r\n // scopedLocal.type,\r\n // assert(scopedLocal.declaration)\r\n // );\r\n // scopedGlobals.set(scopedLocal, scopedGlobal);\r\n // return scopedGlobal;\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 * 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/threads/blob/master/proposals/threads/Overview.md#new-sign-extending-operators\r\n // ExtendI8ToI32 =_BinaryenExtendS8Int32()\r\n // ExtendI16ToI32 = _BinaryenExtendS16Int32()\r\n // ExtendI8ToI64 = _BinaryenExtendS8Int64() // operand is I64\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 out: 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.out = 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.out = 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 // constants\r\n\r\n createI32(value: i32): ExpressionRef {\r\n var out = this.out;\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.out;\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.out;\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.out;\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 = allocI32Array(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 = allocI32Array(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 = allocI32Array(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 = allocI32Array(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 = allocI32Array(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 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 = allocI32Array(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 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.out;\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 if (!this.ref) return; // sic\r\n _BinaryenModuleDispose(this.ref);\r\n free_memory(this.out);\r\n }\r\n\r\n createRelooper(): Relooper {\r\n return Relooper.create(this);\r\n }\r\n\r\n cloneExpression(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 _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 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\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 static createStub(module: Module): Relooper {\r\n var relooper = new Relooper();\r\n relooper.module = module;\r\n relooper.ref = 0;\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)) {\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 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 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 // 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} 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 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.parameterTypes = 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 expression: 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 = expression; expression.parent = stmt;\r\n stmt.arguments = args; if (args) setParent(args, stmt);\r\n stmt.decoratorKind = expression.kind == NodeKind.IDENTIFIER\r\n ? stringToDecoratorKind((expression).text)\r\n : DecoratorKind.CUSTOM;\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 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 parameterTypes: 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 UNMANAGED,\r\n SEALED,\r\n INLINE,\r\n PRECOMPUTE\r\n}\r\n\r\n/** Returns the decorator kind represented by the specified string. */\r\nexport function stringToDecoratorKind(str: string): DecoratorKind {\r\n switch (str) {\r\n case \"global\": return DecoratorKind.GLOBAL;\r\n case \"operator\": return DecoratorKind.OPERATOR;\r\n case \"unmanaged\": return DecoratorKind.UNMANAGED;\r\n case \"sealed\": return DecoratorKind.SEALED;\r\n case \"inline\": return DecoratorKind.INLINE;\r\n case \"precompute\": return DecoratorKind.PRECOMPUTE;\r\n default: return DecoratorKind.CUSTOM;\r\n }\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 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/** Gets the first decorator by name within at set of decorators, if present. */\r\nexport function getFirstDecorator(name: string, decorators: DecoratorNode[] | null): DecoratorNode | null {\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n let expression = decorator.name;\r\n if (expression.kind == NodeKind.IDENTIFIER && (expression).text == name) {\r\n return decorator;\r\n }\r\n }\r\n }\r\n return null;\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 return getFirstDecorator(name, decorators) != null;\r\n}\r\n\r\n/** Mangles a declaration's name to an internal name. */\r\nexport function mangleInternalName(declaration: DeclarationStatement, asGlobal: bool = false): string {\r\n var name = declaration.name.text;\r\n var parent = declaration.parent;\r\n if (!parent) return name;\r\n if (\r\n declaration.kind == NodeKind.VARIABLEDECLARATION &&\r\n parent.kind == NodeKind.VARIABLE\r\n ) { // skip over\r\n if (!(parent = parent.parent)) return name;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return mangleInternalName(parent, asGlobal) + (\r\n declaration.is(CommonFlags.STATIC)\r\n ? STATIC_DELIMITER\r\n : INSTANCE_DELIMITER\r\n ) + name;\r\n }\r\n if (\r\n parent.kind == NodeKind.NAMESPACEDECLARATION ||\r\n parent.kind == NodeKind.ENUMDECLARATION\r\n ) {\r\n return mangleInternalName(parent, asGlobal) +\r\n STATIC_DELIMITER + name;\r\n }\r\n return asGlobal\r\n ? name\r\n : declaration.range.source.internalPath + PATH_DELIMITER + name;\r\n}\r\n\r\n/** Mangles an external to an internal path. */\r\nexport function mangleInternalPath(path: string): string {\r\n if (path.endsWith(\".ts\")) path = path.substring(0, path.length - 3);\r\n return path;\r\n}\r\n\r\n// Helpers\r\n\r\n/** Sets the parent node on an array of nodes. */\r\nfunction setParent(nodes: Node[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n nodes[i].parent = parent;\r\n }\r\n}\r\n\r\n/** Sets the parent node on an array of nullable nodes. */\r\nfunction setParentIfNotNull(nodes: (Node | null)[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n let node = nodes[i];\r\n if (node) node.parent = parent;\r\n }\r\n}\r\n","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 function tokenFromKeyword(text: string): Token {\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 case \"break\": return Token.BREAK;\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 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 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 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 case \"get\": return Token.GET;\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 case \"keyof\": return Token.KEYOF;\r\n case \"let\": return Token.LET;\r\n case \"module\": return Token.MODULE;\r\n case \"namespace\": return Token.NAMESPACE;\r\n case \"new\": return Token.NEW;\r\n case \"null\": return Token.NULL;\r\n case \"of\": return Token.OF;\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 case \"readonly\": return Token.READONLY;\r\n case \"return\": return Token.RETURN;\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 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 case \"var\": return Token.VAR;\r\n case \"void\": return Token.VOID;\r\n case \"while\": return Token.WHILE;\r\n case \"with\": return Token.WITH;\r\n case \"yield\": return Token.YIELD;\r\n default: return Token.INVALID;\r\n }\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(preferIdentifier: bool = false): Token {\r\n this.nextToken = -1;\r\n return this.token = this.unsafeNext(preferIdentifier);\r\n }\r\n\r\n private unsafeNext(preferIdentifier: bool = false, maxTokenLength: i32 = i32.MAX_VALUE): 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 !(preferIdentifier && tokenIsAlsoIdentifier(keywordToken))\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 preferIdentifier: bool = false,\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(preferIdentifier, 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 skip(token: Token): 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(token == Token.IDENTIFIER, 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 reusableState = state;\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) break;\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 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 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 {\r\n break;\r\n }\r\n ++this.pos;\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 }\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 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 * 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 {\r\n break;\r\n }\r\n ++this.pos;\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 }\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 while (this.pos < this.end) {\r\n let c = text.charCodeAt(this.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 {\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 }\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 while (this.pos < this.end) {\r\n let c = text.charCodeAt(this.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 {\r\n break;\r\n }\r\n ++this.pos;\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 }\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 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 sized integer type with a target specific bit size. */\r\n SIZE = 1 << 4,\r\n /** Is a small type that is emulated in a larger type. */\r\n SMALL = 1 << 5,\r\n /** Is a long type 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 /** Is the special 'this' type. */\r\n THIS = 1 << 10\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. Ceiled to 8-bits. */\r\n byteSize: i32;\r\n /** Underlying class reference, if a class type. */\r\n classReference: Class | null;\r\n /** Underlying function reference, if a function type. */\r\n signatureReference: Signature | null;\r\n /** Respective nullable type, if non-nullable. */\r\n nullableType: Type | null = null;\r\n /** Respective non-nullable type, if nullable. */\r\n nonNullableType: Type;\r\n /** Respective special 'this' type. */\r\n thisType: Type | null = null;\r\n\r\n /** Constructs a new resolved type. */\r\n constructor(kind: TypeKind, flags: TypeFlags, size: i32) {\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 /** 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 return ~0 >>> (targetType.size - this.size);\r\n }\r\n\r\n /** Tests if this type has 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.nullableType) {\r\n assert(!this.is(TypeFlags.NULLABLE));\r\n this.nullableType = new Type(this.kind, this.flags | TypeFlags.NULLABLE, this.size);\r\n this.nullableType.classReference = this.classReference; // either a class reference\r\n this.nullableType.signatureReference = this.signatureReference; // or a function reference\r\n }\r\n return this.nullableType;\r\n }\r\n\r\n /** Composes the respective 'this' type of this type. */\r\n asThis(): Type {\r\n var thisType = this.thisType;\r\n if (thisType) return thisType;\r\n thisType = new Type(this.kind, this.flags | TypeFlags.THIS, this.size);\r\n thisType.classReference = this.classReference;\r\n thisType.nullableType = this.nullableType;\r\n thisType.nonNullableType = this.nonNullableType;\r\n this.thisType = thisType;\r\n return thisType;\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, signednessIsImportant: 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 (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 } else if (!target.is(TypeFlags.REFERENCE)) {\r\n if (this.is(TypeFlags.INTEGER)) {\r\n if (target.is(TypeFlags.INTEGER)) {\r\n if (!signednessIsImportant || 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)) {\r\n return left;\r\n } else if (left.isAssignableTo(right, signednessIsImportant)) {\r\n return right;\r\n }\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 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: {\r\n let functionType = this.signatureReference;\r\n return kindOnly || !functionType\r\n ? \"u32\"\r\n : functionType.toString(true);\r\n }\r\n case TypeKind.U64: return \"u64\";\r\n case TypeKind.USIZE: {\r\n let classType = this.classReference;\r\n return kindOnly || !classType\r\n ? \"usize\"\r\n : classType.toString();\r\n }\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 // 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.SMALL |\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.SMALL |\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.SIZE |\r\n TypeFlags.INTEGER |\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.SIZE |\r\n TypeFlags.INTEGER |\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.SMALL |\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.SMALL |\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.SIZE |\r\n TypeFlags.INTEGER |\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.SIZE |\r\n TypeFlags.INTEGER |\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.SMALL |\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) {\r\n ret[i] = types[i].toNativeType();\r\n }\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) {\r\n sb[i] = types[i].toString();\r\n }\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 : getGenericParameterName(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))) {\r\n return false;\r\n }\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) {\r\n return false; // TODO\r\n }\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) {\r\n return false;\r\n }\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)) {\r\n return false;\r\n }\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 this signature to a function type string. */\r\n toSignatureString(): string {\r\n var sb = [];\r\n var thisType = this.thisType;\r\n if (thisType) {\r\n sb.push(thisType.toSignatureString());\r\n }\r\n var parameterTypes = this.parameterTypes;\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) {\r\n sb.push(parameterTypes[i].toSignatureString());\r\n }\r\n sb.push(this.returnType.toSignatureString());\r\n return sb.join(\"\");\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) {\r\n sb.push((names)[i]);\r\n } else {\r\n sb.push(getGenericParameterName(i));\r\n }\r\n if (i >= optionalStart && i != restIndex) {\r\n sb.push(\"?: \");\r\n } else {\r\n sb.push(\": \");\r\n }\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 generic parameter names used where names are unknown.\r\nvar cachedGenericParameterNames: string[] | null = null;\r\n\r\n/** Gets the cached generic parameter name for the specified index. */\r\nexport function getGenericParameterName(index: i32): string {\r\n if (!cachedGenericParameterNames) cachedGenericParameterNames = [];\r\n for (let i = cachedGenericParameterNames.length; i <= index; ++i) {\r\n cachedGenericParameterNames.push(\"arg$\" + i.toString(10));\r\n }\r\n return cachedGenericParameterNames[index - 1];\r\n}\r\n","/**\r\n * The AssemblyScript compiler.\r\n * @module compiler\r\n *//***/\r\n\r\nimport {\r\n compileCall as compileBuiltinCall,\r\n compileGetConstant as compileBuiltinGetConstant,\r\n compileAllocate as compileBuiltinAllocate,\r\n compileAbort\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} from \"./module\";\r\n\r\nimport {\r\n Program,\r\n ClassPrototype,\r\n Class,\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} 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 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\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\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/** 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[] = new Array();\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[] = new Array();\r\n /** Argument count helper global. */\r\n argumentCountRef: GlobalRef = 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 max(options.memoryBase, options.usizeType.byteSize) // leave space for `null`\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 to 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) {\r\n this.compileSource(sources[i]);\r\n }\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 typeRef = this.ensureFunctionType(startFunctionInstance.signature);\r\n let funcRef = module.addFunction(\r\n startFunctionInstance.internalName,\r\n typeRef,\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\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\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 compileSourceByPath(normalizedPathWithoutExtension: string, reportNode: Node): void {\r\n var source = this.program.lookupSourceByPath(normalizedPathWithoutExtension);\r\n if (!source) {\r\n this.error(\r\n DiagnosticCode.File_0_not_found,\r\n reportNode.range, normalizedPathWithoutExtension\r\n );\r\n return;\r\n }\r\n this.compileSource(source);\r\n }\r\n\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) || global.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) return true;\r\n global.set(CommonFlags.COMPILED); // ^ built-ins are compiled on use\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 );\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 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) {\r\n global.set(CommonFlags.MODULE_IMPORT);\r\n module.addGlobalImport(\r\n global.internalName,\r\n global.namespace\r\n ? global.namespace.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(declaration.initializer, global.type);\r\n }\r\n\r\n // check if the initializer is constant\r\n if (_BinaryenExpressionGetId(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 (_BinaryenExpressionGetId(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 = _BinaryenExpressionGetType(initExpr);\r\n switch (exprType) {\r\n case NativeType.I32: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(_BinaryenConstGetValueI32(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 _BinaryenConstGetValueI64Low(initExpr),\r\n _BinaryenConstGetValueI64High(initExpr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = _BinaryenConstGetValueF32(initExpr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = _BinaryenConstGetValueF64(initExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n assert(global.declaration).range\r\n );\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(0);\r\n break;\r\n }\r\n }\r\n global.set(CommonFlags.INLINED); // inline the value from now on\r\n if (declaration) {\r\n if (declaration.isTopLevel) { // but keep the element as it might be re-exported\r\n module.addGlobal(internalName, nativeType, false, initExpr);\r\n }\r\n if (declaration.range.source.isEntry && declaration.isTopLevelExport) {\r\n module.addGlobalExport(global.internalName, declaration.programLevelInternalName);\r\n }\r\n } else {\r\n assert(false); // must have a declaration if constant\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(valueDeclaration.value, Type.i32);\r\n if (_BinaryenExpressionGetId(initExpr) != ExpressionId.Const) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (_BinaryenExpressionGetId(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 (_BinaryenExpressionGetType(initExpr) == NativeType.I32) {\r\n val.constantValue = _BinaryenConstGetValueI32(initExpr);\r\n val.set(CommonFlags.INLINED);\r\n } else {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n valueDeclaration.range\r\n );\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.declaration.range.source.isEntry && element.declaration.isTopLevelExport) {\r\n if (member.is(CommonFlags.INLINED)) {\r\n module.addGlobalExport(member.internalName, member.internalName);\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;\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(signature: Signature): FunctionTypeRef {\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n var thisType = signature.thisType;\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 for (let i = 0; i < numParameters; ++i, ++index) {\r\n paramTypes[index] = signature.parameterTypes[i].toNativeType();\r\n }\r\n var resultType = signature.returnType.toNativeType();\r\n var module = this.module;\r\n var typeRef = module.getFunctionTypeBySignature(resultType, paramTypes);\r\n if (!typeRef) {\r\n typeRef = module.addFunctionType(signature.toSignatureString(), 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) || instance.internalName == \"abort\");\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n // check that modifiers are matching but still compile as-is\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 typeRef = this.ensureFunctionType(instance.signature);\r\n var module = this.module;\r\n if (body) {\r\n let isConstructor = instance.is(CommonFlags.CONSTRUCTOR);\r\n let returnType: Type = 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((body).expression, returnType);\r\n flow.set(FlowFlags.RETURNS);\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.memberOf);\r\n assert(parent.kind == ElementKind.CLASS);\r\n stmt = module.createBlock(null, [\r\n stmt,\r\n module.createTeeLocal(0,\r\n makeConditionalAllocate(this, 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 namespace = instance.prototype.namespace;\r\n ref = module.addFunctionImport(\r\n instance.internalName,\r\n namespace\r\n ? namespace.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 (declaration.range.source.isEntry && declaration.isTopLevelExport) {\r\n module.addFunctionExport(instance.internalName, declaration.name.text);\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: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n member.range\r\n );\r\n break;\r\n }\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 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 expr: ExpressionRef;\r\n switch (statement.kind) {\r\n case NodeKind.BLOCK: {\r\n expr = this.compileBlockStatement(statement);\r\n break;\r\n }\r\n case NodeKind.BREAK: {\r\n expr = this.compileBreakStatement(statement);\r\n break;\r\n }\r\n case NodeKind.CONTINUE: {\r\n expr = this.compileContinueStatement(statement);\r\n break;\r\n }\r\n case NodeKind.DO: {\r\n expr = this.compileDoStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EMPTY: {\r\n expr = this.compileEmptyStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EXPRESSION: {\r\n expr = this.compileExpressionStatement(statement);\r\n break;\r\n }\r\n case NodeKind.FOR: {\r\n expr = this.compileForStatement(statement);\r\n break;\r\n }\r\n case NodeKind.IF: {\r\n expr = this.compileIfStatement(statement);\r\n break;\r\n }\r\n case NodeKind.RETURN: {\r\n expr = this.compileReturnStatement(statement);\r\n break;\r\n }\r\n case NodeKind.SWITCH: {\r\n expr = this.compileSwitchStatement(statement);\r\n break;\r\n }\r\n case NodeKind.THROW: {\r\n expr = this.compileThrowStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TRY: {\r\n expr = this.compileTryStatement(statement);\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n expr = this.compileVariableStatement(statement);\r\n if (!expr) expr = module.createNop();\r\n break;\r\n }\r\n case NodeKind.VOID: {\r\n expr = this.compileVoidStatement(statement);\r\n break;\r\n }\r\n case NodeKind.WHILE: {\r\n expr = 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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n assert(false);\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n if (this.options.sourceMap) {\r\n addDebugLocation(expr, statement.range, module, this.currentFunction);\r\n }\r\n return expr;\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 for (let i = 0; i < numStatements; ++i) {\r\n stmts[i] = this.compileStatement(statements[i]);\r\n }\r\n return stmts; // array of 0-es in noEmit-mode\r\n }\r\n\r\n compileBlockStatement(statement: BlockStatement): ExpressionRef {\r\n var statements = statement.statements;\r\n\r\n // NOTE that we could optimize this to a NOP if empty or unwrap a single\r\n // statement, but that's not what the source told us to do and left to the\r\n // optimizer.\r\n\r\n // Not actually a branch, but can contain its own scoped variables.\r\n var flow = this.currentFunction.flow.enterBranchOrScope();\r\n this.currentFunction.flow = flow;\r\n\r\n var stmt = this.module.createBlock(null, this.compileStatements(statements), NativeType.None);\r\n var stmtReturns = flow.is(FlowFlags.RETURNS);\r\n var stmtThrows = flow.is(FlowFlags.THROWS);\r\n var stmtAllocates = flow.is(FlowFlags.ALLOCATES);\r\n\r\n // Switch back to the parent flow\r\n flow = flow.leaveBranchOrScope();\r\n this.currentFunction.flow = flow;\r\n if (stmtReturns) flow.set(FlowFlags.RETURNS);\r\n if (stmtThrows) flow.set(FlowFlags.THROWS);\r\n if (stmtAllocates) flow.set(FlowFlags.ALLOCATES);\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\r\n // A do statement does not initiate a new branch because it is executed at\r\n // least once, but has its own break and continue labels.\r\n var currentFunction = this.currentFunction;\r\n var label = currentFunction.enterBreakContext();\r\n var flow = currentFunction.flow;\r\n var previousBreakLabel = flow.breakLabel;\r\n var previousContinueLabel = flow.continueLabel;\r\n\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\r\n // Reset to the previous break and continue labels, if any.\r\n flow.breakLabel = previousBreakLabel;\r\n flow.continueLabel = previousContinueLabel;\r\n\r\n var module = this.module;\r\n var condExpr = makeIsTrueish(\r\n this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE),\r\n this.currentType,\r\n module\r\n );\r\n\r\n // No need to eliminate the condition in generic contexts as the statement is executed anyway.\r\n\r\n this.currentFunction.leaveBreakContext();\r\n\r\n return module.createBlock(breakLabel, [\r\n module.createLoop(continueLabel,\r\n module.createBlock(null, [\r\n body,\r\n module.createBreak(continueLabel, condExpr)\r\n ], NativeType.None))\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);\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\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 context = currentFunction.enterBreakContext();\r\n var flow = currentFunction.flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n var breakLabel = flow.breakLabel = \"break|\" + context;\r\n flow.breakLabel = breakLabel;\r\n var continueLabel = \"continue|\" + context;\r\n flow.continueLabel = continueLabel;\r\n\r\n // Compile in correct order\r\n var module = this.module;\r\n var initializer = statement.initializer\r\n ? this.compileStatement(statement.initializer)\r\n : module.createNop();\r\n var condition = statement.condition\r\n ? this.compileExpression(statement.condition, Type.i32)\r\n : module.createI32(1);\r\n var incrementor = statement.incrementor\r\n ? this.compileExpression(statement.incrementor, Type.void)\r\n : module.createNop();\r\n var body = this.compileStatement(statement.statement);\r\n\r\n var alwaysReturns = !statement.condition && flow.is(FlowFlags.RETURNS);\r\n var alwaysThrows = !statement.condition && flow.is(FlowFlags.THROWS);\r\n var alwaysAllocates = !statement.condition && flow.is(FlowFlags.ALLOCATES);\r\n // TODO: check other always-true conditions as well, not just omitted\r\n\r\n if (alwaysReturns) flow.set(FlowFlags.RETURNS);\r\n if (alwaysThrows) flow.set(FlowFlags.THROWS);\r\n if (alwaysAllocates) flow.set(FlowFlags.ALLOCATES);\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 initializer,\r\n module.createLoop(continueLabel, module.createBlock(null, [\r\n module.createIf(condition, module.createBlock(null, [\r\n body,\r\n incrementor,\r\n module.createBreak(continueLabel)\r\n ], NativeType.None))\r\n ], NativeType.None))\r\n ], NativeType.None);\r\n\r\n // If the loop is guaranteed to run and return, append a hint\r\n if (alwaysReturns || alwaysThrows) {\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 = makeIsTrueish(\r\n this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE),\r\n this.currentType,\r\n module\r\n );\r\n\r\n // Eliminate unnecesssary branches in generic contexts if the condition is constant\r\n if (\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT) &&\r\n _BinaryenExpressionGetId(condExpr = this.precomputeExpressionRef(condExpr)) == ExpressionId.Const &&\r\n _BinaryenExpressionGetType(condExpr) == NativeType.I32\r\n ) {\r\n let ret: ExpressionRef;\r\n if (_BinaryenConstGetValueI32(condExpr)) {\r\n ret = this.compileStatement(ifTrue);\r\n } else if (ifFalse) {\r\n ret = this.compileStatement(ifFalse);\r\n } else {\r\n ret = module.createNop();\r\n }\r\n return ret;\r\n }\r\n\r\n // Each arm initiates a branch\r\n var flow = currentFunction.flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n var ifTrueExpr = this.compileStatement(ifTrue);\r\n var ifTrueReturns = flow.is(FlowFlags.RETURNS);\r\n var ifTrueThrows = flow.is(FlowFlags.THROWS);\r\n var ifTrueAllocates = flow.is(FlowFlags.ALLOCATES);\r\n flow = flow.leaveBranchOrScope();\r\n currentFunction.flow = flow;\r\n\r\n var ifFalseExpr: ExpressionRef = 0;\r\n var ifFalseReturns = false;\r\n var ifFalseThrows = false;\r\n var ifFalseAllocates = false;\r\n if (ifFalse) {\r\n flow = flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n ifFalseExpr = this.compileStatement(ifFalse);\r\n ifFalseReturns = flow.is(FlowFlags.RETURNS);\r\n ifFalseThrows = flow.is(FlowFlags.THROWS);\r\n ifFalseAllocates = flow.is(FlowFlags.ALLOCATES);\r\n flow = flow.leaveBranchOrScope();\r\n currentFunction.flow = flow;\r\n }\r\n\r\n if (ifTrueReturns && ifFalseReturns) flow.set(FlowFlags.RETURNS);\r\n if (ifTrueThrows && ifFalseThrows) flow.set(FlowFlags.THROWS);\r\n if (ifTrueAllocates && ifFalseAllocates) flow.set(FlowFlags.ALLOCATES);\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 expression: 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 // When inlining, break to the end of the inlined function's block\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n if (statement.value) {\r\n expression = this.compileExpression(\r\n statement.value,\r\n assert(flow.returnType)\r\n );\r\n }\r\n return module.createBreak(assert(flow.returnLabel), 0, expression);\r\n }\r\n\r\n // Otherwise return as usual\r\n if (statement.value) {\r\n expression = this.compileExpression(\r\n statement.value,\r\n flow.returnType\r\n );\r\n }\r\n return module.createReturn(expression);\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 // 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);\r\n var tempLocalIndex = tempLocal.index;\r\n var cases = statement.cases;\r\n var numCases = cases.length;\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)\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.i32)\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 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 let body = new Array(1 + numStatements);\r\n body[0] = currentBlock;\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 fallsThrough = i != numCases - 1;\r\n let nextLabel = !fallsThrough ? breakLabel : \"case\" + (i + 1).toString(10) + \"|\" + context;\r\n for (let j = 0; j < numStatements; ++j) {\r\n body[j + 1] = this.compileStatement(statements[j]);\r\n }\r\n if (!(fallsThrough || flow.is(FlowFlags.RETURNS))) {\r\n alwaysReturns = false; // ignore fall-throughs\r\n }\r\n if (!(fallsThrough || flow.is(FlowFlags.THROWS))) {\r\n alwaysThrows = false;\r\n }\r\n if (!(fallsThrough || flow.is(FlowFlags.ALLOCATES))) {\r\n alwaysAllocates = false;\r\n }\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.leaveBranchOrScope();\r\n\r\n currentBlock = module.createBlock(nextLabel, body, NativeType.None);\r\n }\r\n currentFunction.leaveBreakContext();\r\n\r\n // If the switch has a default and always returns, propagate that\r\n if (defaultIndex >= 0) {\r\n let flow = currentFunction.flow;\r\n if (alwaysReturns) flow.set(FlowFlags.RETURNS);\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 compileAbort(this, null, statement);\r\n }\r\n\r\n compileTryStatement(statement: TryStatement): ExpressionRef {\r\n // TODO\r\n // can't yet support something like: try { return ... } finally { ... }\r\n // worthwhile to investigate lowering returns to block results (here)?\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n /**\r\n * Compiles a variable statement. Returns `0` if an initializer is not\r\n * necessary.\r\n */\r\n compileVariableStatement(statement: VariableStatement, isKnownGlobal: bool = false): ExpressionRef {\r\n var program = this.program;\r\n var currentFunction = this.currentFunction;\r\n var declarations = statement.declarations;\r\n var numDeclarations = declarations.length;\r\n\r\n // top-level variables and constants become globals\r\n if (isKnownGlobal || (\r\n currentFunction == this.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 init: 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 init = this.compileExpression(declaration.initializer, type); // reports\r\n }\r\n } else if (declaration.initializer) { // infer type using void/NONE for proper literal inference\r\n init = this.compileExpression( // reports\r\n declaration.initializer,\r\n Type.void,\r\n ConversionKind.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 (init) {\r\n init = this.precomputeExpressionRef(init);\r\n if (_BinaryenExpressionGetId(init) == ExpressionId.Const) {\r\n let local = new Local(program, name, -1, type);\r\n switch (_BinaryenExpressionGetType(init)) {\r\n case NativeType.I32: {\r\n local = local.withConstantIntegerValue(_BinaryenConstGetValueI32(init), 0);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n local = local.withConstantIntegerValue(\r\n _BinaryenConstGetValueI64Low(init),\r\n _BinaryenConstGetValueI64High(init)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n local = local.withConstantFloatValue(_BinaryenConstGetValueF32(init));\r\n break;\r\n }\r\n case NativeType.F64: {\r\n local = local.withConstantFloatValue(_BinaryenConstGetValueF64(init));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n declaration.range\r\n );\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 if (\r\n declaration.isAny(CommonFlags.LET | CommonFlags.CONST) ||\r\n flow.is(FlowFlags.INLINE_CONTEXT)\r\n ) { // here: not top-level\r\n flow.addScopedLocal(type, name, declaration); // reports\r\n } else {\r\n currentFunction.addLocal(type, name, declaration); // reports\r\n }\r\n if (init) {\r\n initializers.push(this.compileAssignmentWithValue(declaration.name, init));\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, false);\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 = makeIsTrueish(\r\n this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE),\r\n this.currentType,\r\n module\r\n );\r\n\r\n // Eliminate unnecesssary loops in generic contexts if the condition is constant\r\n if (\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT) &&\r\n _BinaryenExpressionGetId(condExpr = this.precomputeExpressionRef(condExpr)) == ExpressionId.Const &&\r\n _BinaryenExpressionGetType(condExpr) == NativeType.I32\r\n ) {\r\n if (!_BinaryenConstGetValueI32(condExpr)) {\r\n return module.createNop();\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, module.createBlock(null, [\r\n body,\r\n module.createBreak(continueLabel)\r\n ], NativeType.None))\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 );\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 );\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.F32: {\r\n return this.module.createF32((element).constantFloatValue);\r\n }\r\n case TypeKind.F64: {\r\n return this.module.createF64((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 = ConversionKind.IMPLICIT,\r\n wrapSmallIntegers: bool = true\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, wrapSmallIntegers);\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.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(\r\n expression,\r\n contextualType,\r\n wrapSmallIntegers\r\n );\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, wrapSmallIntegers);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = this.module.createUnreachable();\r\n break;\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, expression);\r\n this.currentType = contextualType;\r\n }\r\n\r\n if (this.options.sourceMap) {\r\n addDebugLocation(expr, expression.range, this.module, this.currentFunction);\r\n }\r\n return expr;\r\n }\r\n\r\n compileExpressionRetainType(\r\n expression: Expression,\r\n contextualType: Type,\r\n wrapSmallIntegers: bool = true\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 wrapSmallIntegers\r\n );\r\n }\r\n\r\n precomputeExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind = ConversionKind.IMPLICIT\r\n ): ExpressionRef {\r\n return this.precomputeExpressionRef(this.compileExpression(expression, contextualType, conversionKind));\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 typeRef = module.getFunctionTypeBySignature(nativeType, null);\r\n var typeRefAdded = false;\r\n if (!typeRef) {\r\n typeRef = module.addFunctionType(type.toSignatureString(), nativeType, null);\r\n typeRefAdded = true;\r\n }\r\n var funcRef = module.addFunction(\"__precompute\", typeRef, null, expr);\r\n module.runPasses([ \"precompute\" ], funcRef);\r\n var ret = _BinaryenFunctionGetBody(funcRef);\r\n module.removeFunction(\"__precompute\");\r\n if (typeRefAdded) {\r\n // TODO: also remove the function type somehow if no longer used or make the C-API accept\r\n // a `null` typeRef, using an implicit type.\r\n }\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 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) {\r\n return module.createDrop(expr);\r\n }\r\n\r\n if (conversionKind == ConversionKind.IMPLICIT && !fromType.isAssignableTo(toType)) {\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 // TODO: make this a proper switch?\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 if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, module);\r\n }\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 if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, module);\r\n }\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 if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, module);\r\n }\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 if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, module);\r\n }\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 if (fromType.is(TypeFlags.LONG)) {\r\n\r\n // i64 to i32\r\n if (!toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.WrapI64, expr); // discards upper bits\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, module);\r\n }\r\n }\r\n\r\n // i32 to i64\r\n } else if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(toType.is(TypeFlags.SIGNED) ? UnaryOp.ExtendI32 : UnaryOp.ExtendU32, expr);\r\n\r\n // i32 or smaller to even smaller or same size int with change of sign\r\n } else if (\r\n toType.is(TypeFlags.SMALL) &&\r\n (\r\n fromType.size > toType.size ||\r\n (\r\n fromType.size == toType.size &&\r\n fromType.is(TypeFlags.SIGNED) != toType.is(TypeFlags.SIGNED)\r\n )\r\n )\r\n ) {\r\n expr = makeSmallIntegerWrap(expr, toType, module);\r\n }\r\n\r\n // otherwise (smaller) i32/u32 to (same size) i32/u32\r\n }\r\n\r\n this.currentType = toType;\r\n return 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);\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 wrapSmallIntegers: bool = true\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 condExpr: ExpressionRef;\r\n var expr: ExpressionRef;\r\n var compound = false;\r\n var possiblyOverflows = false;\r\n var tempLocal: Local | null = null;\r\n\r\n var operator = expression.operator;\r\n switch (operator) {\r\n case Token.LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\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, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\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, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\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, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\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, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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);\r\n leftType = this.currentType;\r\n\r\n if (operator == Token.EQUALS_EQUALS) { // check operator overload\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, right, expression);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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);\r\n leftType = this.currentType;\r\n\r\n if (operator == Token.EXCLAMATION_EQUALS) { // check operator overload\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, right, expression);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\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(\r\n left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n leftType = this.currentType;\r\n\r\n // check operator overload\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, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n leftType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(\r\n right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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: possiblyOverflows = true;\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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(\r\n left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n leftType = this.currentType;\r\n\r\n // check operator overload\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, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n leftType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(\r\n right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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: possiblyOverflows = true;\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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(\r\n left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n leftType = this.currentType;\r\n\r\n // check operator overload\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, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n leftType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(\r\n right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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: possiblyOverflows = true;\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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(\r\n left,\r\n contextualType,\r\n true // must be wrapped\r\n );\r\n leftType = this.currentType;\r\n\r\n // check operator overload\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, right, expression);\r\n break;\r\n }\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 == Type.f32) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType\r\n );\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 left\r\n );\r\n rightExpr = this.compileExpression(\r\n right,\r\n Type.f64\r\n );\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(\r\n left,\r\n contextualType,\r\n true // TODO: when can division remain unwrapped? does it overflow?\r\n );\r\n leftType = this.currentType;\r\n\r\n // check operator overload\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, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n leftType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(\r\n right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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: possiblyOverflows = true;\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: possiblyOverflows = true;\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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(\r\n left,\r\n contextualType,\r\n true // TODO: when can remainder remain unwrapped? does it overflow?\r\n );\r\n leftType = this.currentType;\r\n\r\n // check operator overload\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, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n leftType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(\r\n right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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 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.U32:\r\n case TypeKind.BOOL: {\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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(\r\n left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\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: possiblyOverflows = true;\r\n default: {\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: // TODO: check operator overload\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 case TypeKind.VOID: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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(\r\n left,\r\n contextualType,\r\n true // must wrap small integers\r\n );\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n true // ^\r\n );\r\n switch (this.currentType.kind) {\r\n default: {\r\n // assumes signed shr on signed small integers does not overflow\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: // assumes unsigned shr on unsigned small integers does not overflow\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: { // TODO: check operator overload\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 case TypeKind.VOID: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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(\r\n left,\r\n contextualType,\r\n true // modifies low bits of small integers if unsigned\r\n );\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n true // ^\r\n );\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: possiblyOverflows = true;\r\n default: {\r\n // assumes that unsigned shr on unsigned small integers does not overflow\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: // TODO: check operator overload\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.VOID: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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(\r\n left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n leftType = this.currentType;\r\n\r\n // check operator overloadd\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.AND);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n leftType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(\r\n right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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: possiblyOverflows = true; // if left or right already did\r\n default: {\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.VOID: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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(\r\n left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.OR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n leftType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(\r\n right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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: possiblyOverflows = true; // if left or right already did\r\n default: {\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.VOID: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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(\r\n left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.XOR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n leftType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(\r\n right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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: possiblyOverflows = true; // if left or right already did\r\n default: {\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.VOID: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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(\r\n left,\r\n contextualType\r\n );\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false\r\n );\r\n\r\n // clone left if free of side effects\r\n expr = module.cloneExpression(leftExpr, true, 0);\r\n\r\n // if not possible, tee left to a temp. local\r\n if (!expr) {\r\n tempLocal = this.currentFunction.getAndFreeTempLocal(this.currentType);\r\n leftExpr = module.createTeeLocal(tempLocal.index, leftExpr);\r\n }\r\n\r\n possiblyOverflows = this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER);\r\n condExpr = makeIsTrueish(leftExpr, this.currentType, module);\r\n\r\n // simplify when cloning left without side effects was successful\r\n if (expr) {\r\n expr = module.createIf(\r\n condExpr, // left\r\n rightExpr, // ? right\r\n expr // : cloned left\r\n );\r\n }\r\n\r\n // otherwise make use of the temp. local\r\n else {\r\n expr = module.createIf(\r\n condExpr,\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(\r\n left,\r\n contextualType\r\n );\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false\r\n );\r\n\r\n // clone left if free of side effects\r\n expr = this.module.cloneExpression(leftExpr, true, 0);\r\n\r\n // if not possible, tee left to a temp. local\r\n if (!expr) {\r\n tempLocal = this.currentFunction.getAndFreeTempLocal(this.currentType);\r\n leftExpr = module.createTeeLocal(tempLocal.index, leftExpr);\r\n }\r\n\r\n possiblyOverflows = this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER); // if right did\r\n condExpr = makeIsTrueish(leftExpr, this.currentType, module);\r\n\r\n // simplify when cloning left without side effects was successful\r\n if (expr) {\r\n expr = this.module.createIf(\r\n condExpr, // left\r\n expr, // ? cloned left\r\n rightExpr // : right\r\n );\r\n }\r\n\r\n // otherwise make use of the temp. local\r\n else {\r\n expr = module.createIf(\r\n condExpr,\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = this.module.createUnreachable();\r\n break;\r\n }\r\n }\r\n if (possiblyOverflows && wrapSmallIntegers) {\r\n assert(this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER)); // must be a small int\r\n expr = makeSmallIntegerWrap(expr, this.currentType, module);\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 reportNode: Node\r\n ): ExpressionRef {\r\n // checks and recompiles the argument according to its actual annotated type\r\n var argumentExpressions: Expression[];\r\n var thisArg: ExpressionRef = 0;\r\n if (operatorInstance.is(CommonFlags.INSTANCE)) {\r\n let classElement = assert(operatorInstance.memberOf);\r\n assert(classElement.kind == ElementKind.CLASS);\r\n thisArg = this.compileExpression(value, (classElement).type);\r\n argumentExpressions = [];\r\n } else {\r\n argumentExpressions = [ value ];\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 right: Expression,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n // checks and recompiles the arguments according to their actual annotated types\r\n var argumentExpressions: Expression[];\r\n var thisArg: ExpressionRef = 0;\r\n if (operatorInstance.is(CommonFlags.INSTANCE)) {\r\n let classElement = assert(operatorInstance.memberOf);\r\n assert(classElement.kind == ElementKind.CLASS);\r\n thisArg = this.compileExpression(left, (classElement).type);\r\n argumentExpressions = [ right ];\r\n } else {\r\n argumentExpressions = [ left, right ];\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 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 elementType: 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 elementType = (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 elementType = 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 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 expression.range, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n elementType = indexedGet.signature.returnType;\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, elementType);\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 this.currentType = tee ? (target).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 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 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 );\r\n let type = (target).type;\r\n this.currentType = tee ? type : Type.void;\r\n let nativeType = type.toNativeType();\r\n if (tee) {\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(type);\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.size >> 3,\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.size >> 3,\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 );\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 );\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(returnType);\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 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 expression.range, target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET);\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 );\r\n let elementExpr = this.compileExpression(\r\n elementExpression,\r\n Type.i32\r\n );\r\n if (tee) {\r\n let tempLocalTarget = this.currentFunction.getTempLocal(targetType);\r\n let tempLocalElement = this.currentFunction.getAndFreeTempLocal(this.currentType);\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.parameterTypes;\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.parameterTypes[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);\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);\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(argumentExpression, concreteType);\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 );\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 );\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(expression.expression, (target).type);\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 );\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 classElement = assert(instance.memberOf);\r\n assert(classElement.kind == ElementKind.CLASS);\r\n let thisLocal = flow.addScopedLocal((classElement).type, \"this\");\r\n body.push(\r\n module.createSetLocal(thisLocal.index, thisArg)\r\n );\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i) {\r\n let argumentLocal = flow.addScopedLocal(parameterTypes[i], signature.getParameterName(i));\r\n body.push(\r\n module.createSetLocal(argumentLocal.index,\r\n this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i]\r\n )\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 argumentLocal = flow.addScopedLocal(parameterTypes[i], signature.getParameterName(i));\r\n body.push(\r\n module.createSetLocal(argumentLocal.index,\r\n this.compileExpression(\r\n assert(declaration.signature.parameterTypes[i].initializer),\r\n parameterTypes[i]\r\n )\r\n )\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) { // it's ok to unwrap the block here\r\n let statements = (bodyStatement).statements;\r\n for (let i = 0, k = statements.length; i < k; ++i) {\r\n body.push(this.compileStatement(statements[i]));\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 currentFunction.freeTempLocal(scopedLocal);\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 return\r\n 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 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.parameterTypes;\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.memberOf,\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(\"argumentCount\", NativeType.I32),\r\n module.createI32(minArguments)\r\n )\r\n : module.createGetGlobal(\"argumentCount\", 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 body = module.createBlock(names[i + 1], [\r\n body,\r\n module.createSetLocal(operandIndex,\r\n this.compileExpression(\r\n assert(originalParameterDeclarations[minArguments + i].initializer),\r\n type\r\n )\r\n )\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 typeRef = this.ensureFunctionType(trampolineSignature);\r\n var funcRef = module.addFunction(trampolineName, typeRef, 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 /** 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 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 for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(parameterTypes[i].toNativeZero(module));\r\n }\r\n if (!isCallImport) { // call the trampoline\r\n instance = this.ensureTrampoline(instance);\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n let nativeReturnType = returnType.toNativeType();\r\n this.currentType = returnType;\r\n return module.createBlock(null, [\r\n this.ensureArgumentCount(numArguments),\r\n module.createCall(instance.internalName, operands, nativeReturnType)\r\n ], nativeReturnType);\r\n }\r\n }\r\n\r\n // otherwise just call through\r\n this.currentType = returnType;\r\n return isCallImport\r\n ? module.createCallImport(instance.internalName, operands, returnType.toNativeType())\r\n : module.createCall(instance.internalName, operands, returnType.toNativeType());\r\n }\r\n\r\n /** Compiles an indirect call using an index argument and a signature. */\r\n compileCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n numArguments,\r\n thisArg != 0,\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i]\r\n );\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);\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 this.ensureArgumentCount(numArguments), // might still be calling a trampoline\r\n module.createCallIndirect(indexArg, operands, signature.toSignatureString())\r\n ], returnType.toNativeType());\r\n }\r\n\r\n /** Makes sure that the `argumentCount` helper global is present and returns an expression that sets it. */\r\n private ensureArgumentCount(argumentCount: i32): ExpressionRef {\r\n var module = this.module;\r\n if (!this.argumentCountRef) {\r\n this.argumentCountRef = module.addGlobal(\r\n \"argumentCount\",\r\n NativeType.I32,\r\n true,\r\n module.createI32(0)\r\n );\r\n }\r\n return module.createSetGlobal(\"argumentCount\", module.createI32(argumentCount));\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(expressions[i], Type.void); // drop all\r\n }\r\n exprs[numExpressions] = this.compileExpression(expressions[numExpressions], contextualType); // except last\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 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 expression.expression.range, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n let thisArg = this.compileExpression(expression.expression, (target).type);\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 // 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 currentFunction = this.currentFunction;\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.memberOf);\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 makeConditionalAllocate(this, 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 currentFunction = this.currentFunction;\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.memberOf);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let base = (parent).base;\r\n if (base) {\r\n let superType = base.type;\r\n this.currentType = superType;\r\n return module.createGetLocal(0, superType.toNativeType());\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise resolve\r\n var target = this.program.resolveIdentifier( // reports\r\n expression,\r\n this.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 (target.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) {\r\n return compileBuiltinGetConstant(this, target, expression);\r\n }\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 this.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 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.compileStaticArray(\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 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\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 compileStaticArray(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 arrayType = (arrayPrototype).resolve([ elementType ]);\r\n if (!arrayType) return module.createUnreachable();\r\n\r\n var elementCount = expressions.length;\r\n var nativeType = elementType.toNativeType();\r\n var values: usize;\r\n var byteLength: usize;\r\n switch (nativeType) {\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // precompute value expressions\r\n var exprs = new Array(elementCount);\r\n var expr: BinaryenExpressionRef;\r\n for (let i = 0; i < elementCount; ++i) {\r\n exprs[i] = expressions[i]\r\n ? this.compileExpression(expressions[i], elementType)\r\n : elementType.toNativeZero(module);\r\n if (isStatic) {\r\n expr = this.precomputeExpressionRef(exprs[i]);\r\n if (_BinaryenExpressionGetId(expr) == ExpressionId.Const) {\r\n assert(_BinaryenExpressionGetType(expr) == nativeType);\r\n switch (nativeType) {\r\n case NativeType.I32: {\r\n changetype(values)[i] = _BinaryenConstGetValueI32(expr);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n changetype(values)[i] = i64_new(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n changetype(values)[i] = _BinaryenConstGetValueF32(expr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n changetype(values)[i] = _BinaryenConstGetValueF64(expr);\r\n break;\r\n }\r\n default: {\r\n assert(false); // checked above\r\n }\r\n }\r\n } else {\r\n // TODO: emit a warning if declared 'const'\r\n isStatic = false;\r\n }\r\n }\r\n }\r\n\r\n var usizeTypeSize = this.options.usizeType.byteSize;\r\n\r\n if (isStatic) {\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 (nativeType) {\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n assert(offset <= arraySize + bufferTotalSize);\r\n\r\n this.currentType = arrayType.type;\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 } else {\r\n // TODO: static elements *could* go into data segments while dynamic ones are initialized\r\n // on top? any benefits?\r\n throw new Error(\"not implemented\");\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 null,\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 = makeAllocate(this, 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 wrapSmallIntegers: bool = true\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 wrapSmallIntegers\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 (target.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) {\r\n return compileBuiltinGetConstant(this, target, propertyAccess);\r\n }\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 if (!this.compileEnum((target).enum)) {\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 );\r\n this.currentType = (target).type;\r\n return module.createLoad(\r\n (target).type.size >> 3,\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.memberOf);\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 );\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\r\n var condExpr = makeIsTrueish(\r\n this.compileExpression(expression.condition, Type.u32, ConversionKind.NONE),\r\n this.currentType,\r\n this.module\r\n );\r\n\r\n // Eliminate unnecesssary branches in generic contexts if the condition is constant\r\n if (\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT) &&\r\n _BinaryenExpressionGetId(condExpr = this.precomputeExpressionRef(condExpr)) == ExpressionId.Const &&\r\n _BinaryenExpressionGetType(condExpr) == NativeType.I32\r\n ) {\r\n return _BinaryenConstGetValueI32(condExpr)\r\n ? this.compileExpression(ifThen, contextualType)\r\n : this.compileExpression(ifElse, contextualType);\r\n }\r\n\r\n var currentFunction = this.currentFunction;\r\n var ifThenExpr: ExpressionRef;\r\n var ifElseExpr: ExpressionRef;\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.compileExpression(ifThen, contextualType);\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.compileExpression(ifElse, contextualType);\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.compileExpression(ifThen, contextualType);\r\n ifElseExpr = this.compileExpression(ifElse, contextualType);\r\n }\r\n\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 false // wrapped below\r\n );\r\n if (_BinaryenExpressionGetId(getValue) == ExpressionId.Unreachable) {\r\n // shortcut if compiling the getter already failed\r\n return getValue;\r\n }\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 var possiblyOverflows = false;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS_PLUS: {\r\n if (currentType.is(TypeFlags.REFERENCE)) {\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 switch (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: possiblyOverflows = true;\r\n default: {\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 case TypeKind.VOID: {\r\n assert(false);\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 break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n if (currentType.is(TypeFlags.REFERENCE)) {\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 switch (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: possiblyOverflows = true;\r\n default: {\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 case TypeKind.VOID: {\r\n assert(false);\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 break;\r\n }\r\n default: {\r\n assert(false);\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\r\n var setValue: ExpressionRef;\r\n var tempLocal: Local | null = null;\r\n\r\n // simplify if dropped anyway\r\n if (contextualType == Type.void) {\r\n setValue = module.createBinary(op,\r\n getValue,\r\n nativeOne\r\n );\r\n\r\n // otherwise use a temp local for the intermediate value\r\n } else {\r\n tempLocal = currentFunction.getTempLocal(currentType);\r\n setValue = module.createBinary(op,\r\n this.module.createGetLocal(tempLocal.index, nativeType),\r\n nativeOne\r\n );\r\n }\r\n\r\n if (possiblyOverflows) {\r\n assert(currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER));\r\n setValue = makeSmallIntegerWrap(setValue, currentType, module);\r\n }\r\n\r\n setValue = this.compileAssignmentWithValue(expression.operand, setValue, false);\r\n // ^ sets currentType = void\r\n if (contextualType == Type.void) {\r\n assert(!tempLocal);\r\n return setValue;\r\n }\r\n\r\n this.currentType = assert(tempLocal).type;\r\n currentFunction.freeTempLocal(tempLocal);\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);\r\n }\r\n\r\n compileUnaryPrefixExpression(\r\n expression: UnaryPrefixExpression,\r\n contextualType: Type,\r\n wrapSmallIntegers: bool = true\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var currentType = this.currentType;\r\n\r\n var possiblyOverflows = false;\r\n var compound = false;\r\n var expr: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS: {\r\n if (currentType.is(TypeFlags.REFERENCE)) {\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 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 false // wrapped below\r\n );\r\n currentType = this.currentType;\r\n possiblyOverflows = currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER); // if operand already did\r\n break;\r\n }\r\n case Token.MINUS: {\r\n if (currentType.is(TypeFlags.REFERENCE)) {\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 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 if (this.options.sourceMap) {\r\n // compileExpression normally does this\r\n addDebugLocation(expr, expression.range, module, this.currentFunction);\r\n }\r\n currentType = this.currentType;\r\n } else {\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 false // wrapped below\r\n );\r\n currentType = this.currentType;\r\n switch (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: possiblyOverflows = true; // or if operand already did\r\n default: {\r\n expr = module.createBinary(BinaryOp.SubI32, module.createI32(0), expr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (currentType.is(TypeFlags.REFERENCE)) {\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 // fall-through\r\n }\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 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 }\r\n }\r\n break;\r\n }\r\n case Token.PLUS_PLUS: {\r\n if (currentType.is(TypeFlags.REFERENCE)) {\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 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 false // wrapped below\r\n );\r\n currentType = this.currentType;\r\n switch (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: possiblyOverflows = true; // or if operand already did\r\n default: {\r\n expr = module.createBinary(BinaryOp.AddI32, expr, this.module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (currentType.is(TypeFlags.REFERENCE)) {\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 // fall-through\r\n }\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 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 }\r\n break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n if (currentType.is(TypeFlags.REFERENCE)) {\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 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 false // wrapped below\r\n );\r\n currentType = this.currentType;\r\n switch (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: possiblyOverflows = true; // or if operand already did\r\n default: {\r\n expr = module.createBinary(BinaryOp.SubI32, expr, module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (currentType.is(TypeFlags.REFERENCE)) {\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 // fall-through\r\n }\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 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 }\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 true // must wrap small integers\r\n );\r\n expr = makeIsFalseish(expr, this.currentType, module);\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.TILDE: {\r\n if (currentType.is(TypeFlags.REFERENCE)) {\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 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 false // retains low bits of small integers\r\n );\r\n currentType = this.currentType;\r\n switch (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: possiblyOverflows = true; // or if operand already did\r\n default: {\r\n expr = module.createBinary(BinaryOp.XorI32, expr, module.createI32(-1));\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (currentType.is(TypeFlags.REFERENCE)) {\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 // fall-through\r\n }\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 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 }\r\n break;\r\n }\r\n case Token.TYPEOF: {\r\n // it might make sense to implement typeof in a way that a generic function can detect\r\n // whether its type argument is a class type or string. that could then be used, for\r\n // example, to generate hash codes for sets and maps, depending on the kind of type\r\n // parameter we have. ideally the comparison would not involve actual string comparison and\r\n // limit available operations to hard-coded string literals.\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 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 if (possiblyOverflows && wrapSmallIntegers) {\r\n assert(currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER));\r\n expr = makeSmallIntegerWrap(expr, currentType, module);\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\r\n// helpers\r\n\r\n/** Adds the debug location of the specified expression at the specified range to the source map. */\r\nfunction addDebugLocation(expr: ExpressionRef, range: Range, module: Module, currentFunction: Function): void {\r\n var source = range.source;\r\n if (source.debugInfoIndex < 0) {\r\n source.debugInfoIndex = module.addDebugInfoFile(source.normalizedPath);\r\n }\r\n range.debugInfoRef = expr;\r\n if (!currentFunction.debugLocations) currentFunction.debugLocations = [];\r\n currentFunction.debugLocations.push(range);\r\n}\r\n\r\n/** Wraps a 32-bit integer expression so it evaluates to a valid value of the specified type. */\r\nexport function makeSmallIntegerWrap(expr: ExpressionRef, type: Type, module: Module): ExpressionRef {\r\n switch (type.kind) {\r\n case TypeKind.I8: {\r\n return 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 case TypeKind.I16: {\r\n return 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 case TypeKind.U8: {\r\n return module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xff)\r\n );\r\n }\r\n case TypeKind.U16: {\r\n return module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xffff)\r\n );\r\n }\r\n case TypeKind.BOOL: {\r\n return module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0x1)\r\n );\r\n }\r\n default: {\r\n assert(false);\r\n return expr;\r\n }\r\n }\r\n}\r\n\r\n/** Creates a comparison whether an expression is not 'true' in a broader sense. */\r\nexport function makeIsFalseish(expr: ExpressionRef, type: Type, module: Module): ExpressionRef {\r\n switch (type.kind) {\r\n default: { // any native i32\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 case TypeKind.VOID: {\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\nexport function makeIsTrueish(expr: ExpressionRef, type: Type, module: Module): ExpressionRef {\r\n switch (type.kind) {\r\n default: { // any native i32\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 case TypeKind.VOID: {\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\nexport function makeAllocate(compiler: Compiler, classInstance: Class, reportNode: Node): ExpressionRef {\r\n var module = compiler.module;\r\n var currentFunction = compiler.currentFunction;\r\n var nativeSizeType = compiler.options.nativeSizeType;\r\n\r\n var tempLocal = currentFunction.getTempLocal(classInstance.type);\r\n\r\n // allocate the necessary memory\r\n var initializers = new Array();\r\n initializers.push(\r\n module.createSetLocal(tempLocal.index,\r\n compileBuiltinAllocate(compiler, 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 compiler.compileExpression(fieldDeclaration.initializer, fieldType), // reports\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 compiler.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\nexport function makeConditionalAllocate(compiler: Compiler, classInstance: Class, reportNode: Node): ExpressionRef {\r\n // requires that `this` is the first local\r\n var module = compiler.module;\r\n var nativeSizeType = compiler.options.nativeSizeType;\r\n compiler.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 makeAllocate(compiler, classInstance, reportNode)\r\n )\r\n );\r\n}\r\n","/**\r\n * Generated from diagnosticsMessages.json. Do not edit.\r\n * @module diagnostics\r\n *//***/\r\n\r\n/* tslint:disable:max-line-length */\r\n\r\n/** Enum of available diagnostic codes. */\r\nexport enum DiagnosticCode {\r\n Operation_not_supported = 100,\r\n Operation_is_unsafe = 101,\r\n Conversion_from_type_0_to_1_requires_an_explicit_cast = 200,\r\n Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit = 201,\r\n Type_0_cannot_be_changed_to_type_1 = 202,\r\n Type_0_cannot_be_reinterpreted_as_type_1 = 203,\r\n Basic_type_0_cannot_be_nullable = 204,\r\n Cannot_export_a_mutable_global = 205,\r\n Compiling_constant_with_non_constant_initializer_as_mutable = 206,\r\n Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa = 207,\r\n Unmanaged_classes_cannot_implement_interfaces = 208,\r\n Invalid_regular_expression_flags = 209,\r\n Implementation_0_must_match_the_signature_1 = 210,\r\n Class_0_is_sealed_and_cannot_be_extended = 211,\r\n Decorator_0_is_not_valid_here = 212,\r\n Duplicate_decorator = 213,\r\n Unterminated_string_literal = 1002,\r\n Identifier_expected = 1003,\r\n _0_expected = 1005,\r\n A_file_cannot_have_a_reference_to_itself = 1006,\r\n Trailing_comma_not_allowed = 1009,\r\n Unexpected_token = 1012,\r\n A_rest_parameter_must_be_last_in_a_parameter_list = 1014,\r\n Parameter_cannot_have_question_mark_and_initializer = 1015,\r\n A_required_parameter_cannot_follow_an_optional_parameter = 1016,\r\n Enum_member_must_have_initializer = 1061,\r\n Statements_are_not_allowed_in_ambient_contexts = 1036,\r\n Initializers_are_not_allowed_in_ambient_contexts = 1039,\r\n _0_modifier_cannot_be_used_here = 1042,\r\n A_rest_parameter_cannot_be_optional = 1047,\r\n A_rest_parameter_cannot_have_an_initializer = 1048,\r\n A_set_accessor_must_have_exactly_one_parameter = 1049,\r\n A_set_accessor_parameter_cannot_have_an_initializer = 1052,\r\n A_get_accessor_cannot_have_parameters = 1054,\r\n Type_parameters_cannot_appear_on_a_constructor_declaration = 1092,\r\n Type_annotation_cannot_appear_on_a_constructor_declaration = 1093,\r\n An_accessor_cannot_have_type_parameters = 1094,\r\n A_set_accessor_cannot_have_a_return_type_annotation = 1095,\r\n Type_parameter_list_cannot_be_empty = 1098,\r\n A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement = 1104,\r\n A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement = 1105,\r\n A_return_statement_can_only_be_used_within_a_function_body = 1108,\r\n Expression_expected = 1109,\r\n Type_expected = 1110,\r\n A_default_clause_cannot_appear_more_than_once_in_a_switch_statement = 1113,\r\n Duplicate_label_0 = 1114,\r\n Octal_literals_are_not_allowed_in_strict_mode = 1121,\r\n Digit_expected = 1124,\r\n Hexadecimal_digit_expected = 1125,\r\n Unexpected_end_of_text = 1126,\r\n Invalid_character = 1127,\r\n _case_or_default_expected = 1130,\r\n A_declare_modifier_cannot_be_used_in_an_already_ambient_context = 1038,\r\n Type_argument_expected = 1140,\r\n String_literal_expected = 1141,\r\n Line_break_not_permitted_here = 1142,\r\n Declaration_expected = 1146,\r\n _const_declarations_must_be_initialized = 1155,\r\n Unterminated_regular_expression_literal = 1161,\r\n Interface_declaration_cannot_have_implements_clause = 1176,\r\n Binary_digit_expected = 1177,\r\n Octal_digit_expected = 1178,\r\n An_implementation_cannot_be_declared_in_ambient_contexts = 1183,\r\n An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive = 1198,\r\n Unterminated_Unicode_escape_sequence = 1199,\r\n Decorators_are_not_valid_here = 1206,\r\n _abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration = 1242,\r\n A_class_may_only_extend_another_class = 1311,\r\n A_parameter_property_cannot_be_declared_using_a_rest_parameter = 1317,\r\n Duplicate_identifier_0 = 2300,\r\n Cannot_find_name_0 = 2304,\r\n Module_0_has_no_exported_member_1 = 2305,\r\n Generic_type_0_requires_1_type_argument_s = 2314,\r\n Type_0_is_not_generic = 2315,\r\n Type_0_is_not_assignable_to_type_1 = 2322,\r\n Index_signature_is_missing_in_type_0 = 2329,\r\n _this_cannot_be_referenced_in_current_location = 2332,\r\n _super_can_only_be_referenced_in_a_derived_class = 2335,\r\n Property_0_does_not_exist_on_type_1 = 2339,\r\n Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures = 2349,\r\n Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature = 2351,\r\n A_function_whose_declared_type_is_not_void_must_return_a_value = 2355,\r\n The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access = 2357,\r\n The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access = 2364,\r\n Operator_0_cannot_be_applied_to_types_1_and_2 = 2365,\r\n _get_and_set_accessor_must_have_the_same_type = 2380,\r\n Constructor_implementation_is_missing = 2390,\r\n Function_implementation_is_missing_or_not_immediately_following_the_declaration = 2391,\r\n Multiple_constructor_implementations_are_not_allowed = 2392,\r\n Duplicate_function_implementation = 2393,\r\n Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local = 2395,\r\n Type_0_has_no_property_1 = 2460,\r\n The_0_operator_cannot_be_applied_to_type_1 = 2469,\r\n Export_declaration_conflicts_with_exported_declaration_of_0 = 2484,\r\n Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property = 2540,\r\n The_target_of_an_assignment_must_be_a_variable_or_a_property_access = 2541,\r\n Index_signature_in_type_0_only_permits_reading = 2542,\r\n Expected_0_arguments_but_got_1 = 2554,\r\n Expected_at_least_0_arguments_but_got_1 = 2555,\r\n Expected_0_type_arguments_but_got_1 = 2558,\r\n A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums = 2651,\r\n Namespace_0_has_no_exported_member_1 = 2694,\r\n File_0_not_found = 6054\r\n}\r\n\r\n/** Translates a diagnostic code to its respective string. */\r\nexport function diagnosticCodeToString(code: DiagnosticCode): string {\r\n switch (code) {\r\n case 100: return \"Operation not supported.\";\r\n case 101: return \"Operation is unsafe.\";\r\n case 200: return \"Conversion from type '{0}' to '{1}' requires an explicit cast.\";\r\n case 201: return \"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.\";\r\n case 202: return \"Type '{0}' cannot be changed to type '{1}'.\";\r\n case 203: return \"Type '{0}' cannot be reinterpreted as type '{1}'.\";\r\n case 204: return \"Basic type '{0}' cannot be nullable.\";\r\n case 205: return \"Cannot export a mutable global.\";\r\n case 206: return \"Compiling constant with non-constant initializer as mutable.\";\r\n case 207: return \"Unmanaged classes cannot extend managed classes and vice-versa.\";\r\n case 208: return \"Unmanaged classes cannot implement interfaces.\";\r\n case 209: return \"Invalid regular expression flags.\";\r\n case 210: return \"Implementation '{0}' must match the signature '{1}'.\";\r\n case 211: return \"Class '{0}' is sealed and cannot be extended.\";\r\n case 212: return \"Decorator '{0}' is not valid here.\";\r\n case 213: return \"Duplicate decorator.\";\r\n case 1002: return \"Unterminated string literal.\";\r\n case 1003: return \"Identifier expected.\";\r\n case 1005: return \"'{0}' expected.\";\r\n case 1006: return \"A file cannot have a reference to itself.\";\r\n case 1009: return \"Trailing comma not allowed.\";\r\n case 1012: return \"Unexpected token.\";\r\n case 1014: return \"A rest parameter must be last in a parameter list.\";\r\n case 1015: return \"Parameter cannot have question mark and initializer.\";\r\n case 1016: return \"A required parameter cannot follow an optional parameter.\";\r\n case 1061: return \"Enum member must have initializer.\";\r\n case 1036: return \"Statements are not allowed in ambient contexts.\";\r\n case 1039: return \"Initializers are not allowed in ambient contexts.\";\r\n case 1042: return \"'{0}' modifier cannot be used here.\";\r\n case 1047: return \"A rest parameter cannot be optional.\";\r\n case 1048: return \"A rest parameter cannot have an initializer.\";\r\n case 1049: return \"A 'set' accessor must have exactly one parameter.\";\r\n case 1052: return \"A 'set' accessor parameter cannot have an initializer.\";\r\n case 1054: return \"A 'get' accessor cannot have parameters.\";\r\n case 1092: return \"Type parameters cannot appear on a constructor declaration.\";\r\n case 1093: return \"Type annotation cannot appear on a constructor declaration.\";\r\n case 1094: return \"An accessor cannot have type parameters.\";\r\n case 1095: return \"A 'set' accessor cannot have a return type annotation.\";\r\n case 1098: return \"Type parameter list cannot be empty.\";\r\n case 1104: return \"A 'continue' statement can only be used within an enclosing iteration statement.\";\r\n case 1105: return \"A 'break' statement can only be used within an enclosing iteration or switch statement.\";\r\n case 1108: return \"A 'return' statement can only be used within a function body.\";\r\n case 1109: return \"Expression expected.\";\r\n case 1110: return \"Type expected.\";\r\n case 1113: return \"A 'default' clause cannot appear more than once in a 'switch' statement.\";\r\n case 1114: return \"Duplicate label '{0}'.\";\r\n case 1121: return \"Octal literals are not allowed in strict mode.\";\r\n case 1124: return \"Digit expected.\";\r\n case 1125: return \"Hexadecimal digit expected.\";\r\n case 1126: return \"Unexpected end of text.\";\r\n case 1127: return \"Invalid character.\";\r\n case 1130: return \"'case' or 'default' expected.\";\r\n case 1038: return \"A 'declare' modifier cannot be used in an already ambient context.\";\r\n case 1140: return \"Type argument expected.\";\r\n case 1141: return \"String literal expected.\";\r\n case 1142: return \"Line break not permitted here.\";\r\n case 1146: return \"Declaration expected.\";\r\n case 1155: return \"'const' declarations must be initialized.\";\r\n case 1161: return \"Unterminated regular expression literal.\";\r\n case 1176: return \"Interface declaration cannot have 'implements' clause.\";\r\n case 1177: return \"Binary digit expected.\";\r\n case 1178: return \"Octal digit expected.\";\r\n case 1183: return \"An implementation cannot be declared in ambient contexts.\";\r\n case 1198: return \"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.\";\r\n case 1199: return \"Unterminated Unicode escape sequence.\";\r\n case 1206: return \"Decorators are not valid here.\";\r\n case 1242: return \"'abstract' modifier can only appear on a class, method, or property declaration.\";\r\n case 1311: return \"A class may only extend another class.\";\r\n case 1317: return \"A parameter property cannot be declared using a rest parameter.\";\r\n case 2300: return \"Duplicate identifier '{0}'.\";\r\n case 2304: return \"Cannot find name '{0}'.\";\r\n case 2305: return \"Module '{0}' has no exported member '{1}'.\";\r\n case 2314: return \"Generic type '{0}' requires {1} type argument(s).\";\r\n case 2315: return \"Type '{0}' is not generic.\";\r\n case 2322: return \"Type '{0}' is not assignable to type '{1}'.\";\r\n case 2329: return \"Index signature is missing in type '{0}'.\";\r\n case 2332: return \"'this' cannot be referenced in current location.\";\r\n case 2335: return \"'super' can only be referenced in a derived class.\";\r\n case 2339: return \"Property '{0}' does not exist on type '{1}'.\";\r\n case 2349: return \"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.\";\r\n case 2351: return \"Cannot use 'new' with an expression whose type lacks a construct signature.\";\r\n case 2355: return \"A function whose declared type is not 'void' must return a value.\";\r\n case 2357: return \"The operand of an increment or decrement operator must be a variable or a property access.\";\r\n case 2364: return \"The left-hand side of an assignment expression must be a variable or a property access.\";\r\n case 2365: return \"Operator '{0}' cannot be applied to types '{1}' and '{2}'.\";\r\n case 2380: return \"'get' and 'set' accessor must have the same type.\";\r\n case 2390: return \"Constructor implementation is missing.\";\r\n case 2391: return \"Function implementation is missing or not immediately following the declaration.\";\r\n case 2392: return \"Multiple constructor implementations are not allowed.\";\r\n case 2393: return \"Duplicate function implementation.\";\r\n case 2395: return \"Individual declarations in merged declaration '{0}' must be all exported or all local.\";\r\n case 2460: return \"Type '{0}' has no property '{1}'.\";\r\n case 2469: return \"The '{0}' operator cannot be applied to type '{1}'.\";\r\n case 2484: return \"Export declaration conflicts with exported declaration of '{0}'.\";\r\n case 2540: return \"Cannot assign to '{0}' because it is a constant or a read-only property.\";\r\n case 2541: return \"The target of an assignment must be a variable or a property access.\";\r\n case 2542: return \"Index signature in type '{0}' only permits reading.\";\r\n case 2554: return \"Expected {0} arguments, but got {1}.\";\r\n case 2555: return \"Expected at least {0} arguments, but got {1}.\";\r\n case 2558: return \"Expected {0} type arguments, but got {1}.\";\r\n case 2651: return \"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.\";\r\n case 2694: return \"Namespace '{0}' has no exported member '{1}'.\";\r\n case 6054: return \"File '{0}' not found.\";\r\n default: return \"\";\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} 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 /** Log of source file names to be requested. */\r\n backlog: string[] = new Array();\r\n /** Log of source file names already processed. */\r\n seenlog: 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 program = this.program;\r\n\r\n // check if already parsed\r\n var normalizedPath = normalizePath(path);\r\n var internalPath = mangleInternalPath(normalizedPath);\r\n var sources = program.sources;\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n if (sources[i].internalPath == internalPath) return;\r\n }\r\n this.seenlog.add(internalPath);\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 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 (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 tn.next();\r\n flags |= CommonFlags.ABSTRACT;\r\n if (!tn.skip(Token.CLASS)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"class\"\r\n );\r\n break;\r\n }\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 tn.next();\r\n statement = this.parseNamespace(tn, flags, decorators, startPos);\r\n decorators = null;\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: {\r\n tn.next();\r\n statement = this.parseTypeDeclaration(tn, flags, decorators, startPos);\r\n decorators = null;\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 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 // 'void'\r\n if (token == Token.VOID) {\r\n return Node.createType(\r\n Node.createIdentifierExpression(\"void\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n }\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 // '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.skip(Token.IDENTIFIER)) {\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.skip(Token.IDENTIFIER)) {\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.skip(Token.IDENTIFIER)) {\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.skip(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 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 if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseEnumValue(tn, CommonFlags.NONE);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEBRACE)) {\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 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.skip(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 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 if (!tn.skip(Token.GREATERTHAN)) {\r\n do {\r\n let typeParameter = this.parseTypeParameter(tn);\r\n if (!typeParameter) return null;\r\n typeParameters.push(typeParameter);\r\n } while (tn.skip(Token.COMMA));\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 } else {\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 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\r\n if (tn.peek() != Token.CLOSEPAREN) {\r\n do {\r\n let param = this.parseParameter(tn, isConstructor);\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 } while (tn.skip(Token.COMMA));\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 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 (tn.skip(Token.PUBLIC)) {\r\n startRange = tn.range();\r\n if (!isConstructor) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n startRange, \"public\"\r\n );\r\n }\r\n accessFlags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n startRange = tn.range();\r\n if (!isConstructor) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n startRange, \"protected\"\r\n );\r\n }\r\n accessFlags |= CommonFlags.PROTECTED;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n startRange = tn.range();\r\n if (!isConstructor) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n startRange, \"private\"\r\n );\r\n }\r\n accessFlags |= CommonFlags.PRIVATE;\r\n }\r\n if (tn.skip(Token.READONLY)) {\r\n if (!startRange) startRange = tn.range();\r\n if (!isConstructor) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n startRange, \"readonly\"\r\n );\r\n }\r\n accessFlags |= CommonFlags.READONLY;\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.skip(Token.IDENTIFIER)) {\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.skip(Token.IDENTIFIER)) {\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\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 null,\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.skip(Token.IDENTIFIER)) {\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,\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.skip(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\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, true) == 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, true) == 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.skip(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\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 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 null,\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.skip(Token.IDENTIFIER)) {\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 if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseExportMember(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEBRACE)) {\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 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.skip(Token.IDENTIFIER)) {\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.skip(Token.IDENTIFIER)) {\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 if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseImportDeclaration(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEBRACE)) {\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 } else if (tn.skip(Token.ASTERISK)) {\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\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.skip(Token.IDENTIFIER)) {\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.skip(Token.IDENTIFIER)) {\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.skip(Token.IDENTIFIER)) {\r\n let asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\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.TYPE: {\r\n statement = this.parseTypeDeclaration(tn, CommonFlags.NONE, null, tn.tokenPos);\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 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(true);\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(true);\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.skip(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 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.skip(Token.IDENTIFIER)) {\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(true);\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(true)) {\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 if (!tn.skip(Token.CLOSEBRACKET)) {\r\n do {\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.peek() == Token.CLOSEBRACKET) break;\r\n } while (tn.skip(Token.COMMA));\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 }\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 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 if (!tn.skip(Token.CLOSEPAREN)) {\r\n do {\r\n let expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n args.push(expr);\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 return null;\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);\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 // ElementAccessExpression\r\n case Token.OPENBRACKET: {\r\n next = this.parseExpression(tn);\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);\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.CLOSEBRACE // current step should handle this\r\n ) {\r\n break;\r\n }\r\n if (nextToken == Token.SEMICOLON) { // end of the statement for sure\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 Function,\r\n Class,\r\n Namespace,\r\n FunctionPrototype,\r\n ClassPrototype,\r\n ConstantValueKind,\r\n Interface\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\r\n /** Constructs a new Element walker. */\r\n constructor(program: Program) {\r\n this.program = program;\r\n }\r\n\r\n walk(): void {\r\n for (let element of this.program.moduleLevelExports.values()) {\r\n this.visitElement(element);\r\n }\r\n }\r\n\r\n visitElement(element: Element): void {\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (element.is(CommonFlags.COMPILED)) {\r\n this.visitGlobal(element);\r\n }\r\n break;\r\n }\r\n case ElementKind.ENUM: {\r\n if (element.is(CommonFlags.COMPILED)) {\r\n this.visitEnum(element);\r\n }\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n for (let instance of (element).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) {\r\n this.visitFunction(instance);\r\n }\r\n }\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n for (let instance of (element).instances.values()) {\r\n if (instance.is(CommonFlags.COMPILED)) {\r\n this.visitClass(instance);\r\n }\r\n }\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n if ((element).is(CommonFlags.COMPILED)) {\r\n this.visitNamespace(element);\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n break;\r\n }\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 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 seen: Set = new Set();\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program) {\r\n super(program);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n if (this.seen.has(element)) return;\r\n this.seen.add(element);\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) {\r\n sb.push(\"const \");\r\n }\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 if (this.seen.has(element)) return;\r\n this.seen.add(element);\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) {\r\n sb.push(\"const \");\r\n } else {\r\n sb.push(\"readonly \");\r\n }\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) {\r\n this.visitElement(member);\r\n }\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 if (this.seen.has(element)) return;\r\n this.seen.add(element);\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()) {\r\n this.visitElement(member);\r\n }\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 if (this.seen.has(element)) return;\r\n this.seen.add(element);\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 visitNamespace(element: Namespace): void {\r\n if (this.seen.has(element)) return;\r\n this.seen.add(element);\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()) {\r\n this.visitElement(member);\r\n }\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 seen: Set = new Set();\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program) {\r\n super(program);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n if (this.seen.has(element)) return;\r\n this.seen.add(element);\r\n var sb = this.sb;\r\n var isConst = element.is(CommonFlags.INLINED);\r\n indent(sb, this.indentLevel);\r\n if (isConst) {\r\n sb.push(\"const \");\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 if (this.seen.has(element)) return;\r\n this.seen.add(element);\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 this.seen.add(member);\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) {\r\n this.visitNamespace(element);\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 if (this.seen.has(element)) return;\r\n this.seen.add(element);\r\n var sb = this.sb;\r\n var signature = element.signature;\r\n indent(sb, this.indentLevel);\r\n sb.push(\"function \");\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(signature.getParameterName(i));\r\n sb.push(\": \");\r\n sb.push(this.typeToString(parameters[i]));\r\n }\r\n sb.push(\"): \");\r\n sb.push(this.typeToString(signature.returnType));\r\n sb.push(\";\\n\");\r\n this.visitNamespace(element);\r\n }\r\n\r\n visitClass(element: Class): void {\r\n if (this.seen.has(element)) return;\r\n this.seen.add(element);\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)) {\r\n sb.push(\"abstract \");\r\n }\r\n sb.push(\"class \");\r\n }\r\n sb.push(element.simpleName);\r\n var base = element.base;\r\n if (base) {\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 // TODO\r\n }\r\n members = element.members; // instance\r\n if (members) {\r\n // TODO\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 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()) {\r\n this.visitElement(member);\r\n }\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 return this.sb.join(\"\");\r\n }\r\n}\r\n\r\n// TODO: C bindings? or is this sufficiently covered by WebIDL and using a 3rd-party tool?\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 readString\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 = readString(_BinaryenFunctionGetName(func)) || \"$\" + this.functionId.toString(10);\r\n var body = _BinaryenFunctionGetBody(func);\r\n this.push(\"function \");\r\n this.push(name);\r\n this.push(\"(\");\r\n for (let i: Index = 0, k: Index = _BinaryenFunctionGetNumParams(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(_BinaryenFunctionGetParam(func, i)));\r\n }\r\n this.push(\"): \");\r\n this.push(nativeTypeToType(_BinaryenFunctionGetResult(func)));\r\n this.push(\" \");\r\n if (_BinaryenExpressionGetId(body) != ExpressionId.Block) {\r\n this.push(\"{\\n\");\r\n }\r\n this.decompileExpression(body);\r\n if (_BinaryenExpressionGetId(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 = _BinaryenExpressionGetId(expr);\r\n var type = _BinaryenExpressionGetType(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 = readString(_BinaryenBlockGetName(expr))) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"{\\n\");\r\n k = _BinaryenBlockGetNumChildren(expr);\r\n for (i = 0; i < k; ++i) {\r\n this.decompileExpression(_BinaryenBlockGetChild(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(_BinaryenIfGetCondition(expr));\r\n this.push(\") \");\r\n this.decompileExpression(_BinaryenIfGetIfTrue(expr));\r\n if (nested = _BinaryenIfGetIfFalse(expr)) {\r\n this.push(\" else \");\r\n this.decompileExpression(nested);\r\n }\r\n } else {\r\n this.decompileExpression(_BinaryenIfGetCondition(expr));\r\n this.push(\" ? \");\r\n this.decompileExpression(_BinaryenIfGetIfTrue(expr));\r\n this.push(\" : \");\r\n this.decompileExpression(_BinaryenIfGetIfFalse(expr));\r\n }\r\n return;\r\n }\r\n case ExpressionId.Loop: {\r\n if ((string = readString(_BinaryenLoopGetName(expr))) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"do \");\r\n this.decompileExpression(_BinaryenLoopGetBody(expr));\r\n this.push(\"while (0);\\n\");\r\n }\r\n case ExpressionId.Break: {\r\n if (nested = _BinaryenBreakGetCondition(expr)) {\r\n this.push(\"if (\");\r\n this.decompileExpression(nested);\r\n this.push(\") \");\r\n }\r\n if ((string = readString(_BinaryenBreakGetName(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(_BinaryenGetLocalGetIndex(expr).toString(10));\r\n return;\r\n }\r\n case ExpressionId.SetLocal: {\r\n this.push(\"$\");\r\n this.push(_BinaryenSetLocalGetIndex(expr).toString(10));\r\n this.push(\" = \");\r\n this.decompileExpression(_BinaryenSetLocalGetValue(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(_BinaryenLoadGetOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(_BinaryenLoadGetPtr(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(_BinaryenStoreGetOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(_BinaryenStoreGetPtr(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenStoreGetValue(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(_BinaryenConstGetValueI32(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 _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n )\r\n )\r\n );\r\n return;\r\n }\r\n case NativeType.F32: {\r\n this.push(_BinaryenConstGetValueF32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.F64: {\r\n this.push(_BinaryenConstGetValueF64(expr).toString(10));\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Unary: {\r\n switch (_BinaryenUnaryGetOp(expr)) {\r\n case UnaryOp.ClzI32: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI32: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI32: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(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(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.AbsF32: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF32: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF32: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF32: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF32: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF32: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(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(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ClzI64: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI64: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI64: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.AbsF64: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF64: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF64: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF64: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF64: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF64: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ExtendI32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ExtendU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.WrapI64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.PromoteF32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.DemoteF64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(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 (_BinaryenBinaryGetOp(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(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" + \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(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(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" - \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(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(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" * \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(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(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemI64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.AndI32:\r\n case BinaryOp.AndI64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" & \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.OrI32:\r\n case BinaryOp.OrI64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" | \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.XorI32:\r\n case BinaryOp.XorI64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" ^ \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShlI32:\r\n case BinaryOp.ShlI64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" << \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrU32:\r\n case BinaryOp.ShrU64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >>> \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrI32:\r\n case BinaryOp.ShrI64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >> \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI32: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI32: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(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(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" == \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(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(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" != \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(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(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(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(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(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(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(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(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI64: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI64: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.LtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.CopysignF32: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF32: {\r\n this.push(\"min(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF32: {\r\n this.push(\"max(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.CopysignF64: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF64: {\r\n this.push(\"min(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF64: {\r\n this.push(\"max(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(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(_BinaryenSelectGetIfTrue(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenSelectGetIfFalse(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenSelectGetCondition(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Drop: {\r\n this.decompileExpression(_BinaryenDropGetValue(expr));\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Return: {\r\n if (nested = _BinaryenReturnGetValue(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 (_BinaryenHostGetOp(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(_BinaryenHostGetOperand(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} 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/** 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_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_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\nimport {\r\n Compiler,\r\n ConversionKind,\r\n\r\n makeSmallIntegerWrap\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} from \"./module\";\r\n\r\nimport {\r\n ElementKind,\r\n Global,\r\n FunctionPrototype,\r\n Class,\r\n Field,\r\n OperatorKind\r\n} from \"./program\";\r\n\r\n/** Compiles a get of a built-in global. */\r\nexport function compileGetConstant(\r\n compiler: Compiler,\r\n global: Global,\r\n reportNode: Node\r\n): ExpressionRef {\r\n switch (global.internalName) {\r\n case \"NaN\": { // context-sensitive\r\n if (compiler.currentType == Type.f32) {\r\n return compiler.module.createF32(NaN);\r\n } else {\r\n compiler.currentType = Type.f64;\r\n return compiler.module.createF64(NaN);\r\n }\r\n }\r\n case \"Infinity\": { // context-sensitive\r\n if (compiler.currentType == Type.f32) {\r\n return compiler.module.createF32(Infinity);\r\n } else {\r\n compiler.currentType = Type.f64;\r\n return compiler.module.createF64(Infinity);\r\n }\r\n }\r\n case \"HEAP_BASE\": { // never inlined for linking purposes\r\n compiler.currentType = compiler.options.usizeType;\r\n return compiler.module.createGetGlobal(\"HEAP_BASE\", compiler.currentType.toNativeType());\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return compiler.module.createUnreachable();\r\n}\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 \"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 \"isNaN\": { // isNaN(value: T) -> bool\r\n compiler.currentType = Type.bool;\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.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 module.createUnreachable();\r\n }\r\n if (typeArguments) {\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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.F32: {\r\n ret = module.createBinary(\r\n BinaryOp.GtU32,\r\n module.createBinary(\r\n BinaryOp.AndI32,\r\n module.createUnary(UnaryOp.ReinterpretF32, arg0),\r\n module.createI32(0x7FFFFFFF)\r\n ),\r\n module.createI32(0x7F800000)\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(\r\n BinaryOp.GtU64,\r\n module.createBinary(\r\n BinaryOp.AndI64,\r\n module.createUnary(UnaryOp.ReinterpretF64, arg0),\r\n module.createI64(0xFFFFFFFF, 0x7FFFFFFF)\r\n ),\r\n module.createI64(0, 0x7FF00000)\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 = module.createUnreachable();\r\n break;\r\n }\r\n default: { // every other type is never NaN\r\n ret = module.createI32(0);\r\n break;\r\n }\r\n }\r\n compiler.currentType = Type.bool;\r\n return ret;\r\n }\r\n case \"isFinite\": { // isFinite(value: T) -> bool\r\n compiler.currentType = Type.bool;\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.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 module.createUnreachable();\r\n }\r\n if (typeArguments) {\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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.F32: {\r\n ret = module.createBinary(\r\n BinaryOp.LtU32,\r\n module.createBinary(\r\n BinaryOp.AndI32,\r\n module.createUnary(UnaryOp.ReinterpretF32, arg0),\r\n module.createI32(0x7FFFFFFF)\r\n ),\r\n module.createI32(0x7F800000)\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(\r\n BinaryOp.LtU64,\r\n module.createBinary(\r\n BinaryOp.AndI64,\r\n module.createUnary(UnaryOp.ReinterpretF64, arg0),\r\n module.createI64(0xFFFFFFFF, 0x7FFFFFFF)\r\n ),\r\n module.createI64(0, 0x7FF00000)\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 = module.createUnreachable();\r\n break;\r\n }\r\n default: { // every other type is always finite\r\n ret = module.createI32(1);\r\n break;\r\n }\r\n }\r\n compiler.currentType = Type.bool;\r\n return ret;\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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\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 case TypeKind.F32:\r\n case TypeKind.F64:\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 \"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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\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 case TypeKind.F32:\r\n case TypeKind.F64:\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 \"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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\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 case TypeKind.F32:\r\n case TypeKind.F64:\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 \"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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\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 = makeSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotlI32, arg0, arg1),\r\n compiler.currentType,\r\n module\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;\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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\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 = makeSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotrI32, arg0, arg1),\r\n compiler.currentType,\r\n module\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;\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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n // doesn't need sign-extension here because ifFalse below is either positive\r\n // or MIN_VALUE (-MIN_VALUE == MIN_VALUE) if selected\r\n case TypeKind.I32: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\r\n ret = module.createSelect(\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);\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);\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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i32);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\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 tempLocal0 = compiler.currentFunction.getTempLocal(Type.i32);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\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);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64);\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);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64);\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);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\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);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i32);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\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 tempLocal0 = compiler.currentFunction.getTempLocal(Type.i32);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\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);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64);\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);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64);\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);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\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);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.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);\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);\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 );\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.u32);\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.u64);\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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.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(operands[0], compiler.options.usizeType);\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(operands[0], compiler.options.usizeType);\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n typeArguments[0],\r\n typeArguments[0].is(TypeFlags.INTEGER)\r\n ? ConversionKind.NONE // wraps a larger integer type to a smaller one, i.e. i32.store8\r\n : ConversionKind.IMPLICIT\r\n );\r\n let type: Type;\r\n if (\r\n compiler.currentType.is(TypeFlags.INTEGER) &&\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n typeArguments[0].size > compiler.currentType.size\r\n ) {\r\n arg1 = compiler.convertExpression(\r\n arg1,\r\n compiler.currentType, typeArguments[0],\r\n ConversionKind.IMPLICIT,\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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n let type = compiler.currentType;\r\n arg1 = compiler.compileExpression(operands[1], type);\r\n arg2 = compiler.compileExpression(operands[2], Type.i32);\r\n compiler.currentType = type;\r\n switch (compiler.currentType.kind) {\r\n default: { // any 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);\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(operands[0], compiler.options.usizeType);\r\n arg1 = compiler.compileExpression(operands[1], compiler.options.usizeType);\r\n arg2 = compiler.compileExpression(operands[2], compiler.options.usizeType);\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: u32, 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(operands[0], compiler.options.usizeType);\r\n arg1 = compiler.compileExpression(operands[1], Type.u32);\r\n arg2 = compiler.compileExpression(operands[2], compiler.options.usizeType);\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 } else if (typeArguments[0].kind != TypeKind.USIZE) { // any usize\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 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.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.NONE\r\n );\r\n compiler.currentType = typeArguments[0];\r\n if (compiler.currentType.kind != TypeKind.USIZE) {\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]);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.i32);\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 default: { // any integer up to 32-bits incl. bool\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI32,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.I32)\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);\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);\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);\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);\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\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(operands[0], Type.i8, ConversionKind.EXPLICIT);\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(operands[0], Type.i16, ConversionKind.EXPLICIT);\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(operands[0], Type.i32, ConversionKind.EXPLICIT);\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(operands[0], Type.i64, ConversionKind.EXPLICIT);\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 );\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(operands[0], Type.u8, ConversionKind.EXPLICIT);\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(operands[0], Type.u16, ConversionKind.EXPLICIT);\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(operands[0], Type.u32, ConversionKind.EXPLICIT);\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(operands[0], Type.u64, ConversionKind.EXPLICIT);\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 );\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(operands[0], Type.bool, ConversionKind.EXPLICIT);\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(operands[0], Type.f32, ConversionKind.EXPLICIT);\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(operands[0], Type.f64, ConversionKind.EXPLICIT);\r\n }\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\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, false);\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, false);\r\n }\r\n } else {\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, false);\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\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);\r\n if (\r\n _BinaryenExpressionGetId(expr) != ExpressionId.Const ||\r\n _BinaryenExpressionGetType(expr) != NativeType.I64 ||\r\n _BinaryenConstGetValueI64High(expr) != 0 ||\r\n (value = _BinaryenConstGetValueI64Low(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);\r\n if (\r\n _BinaryenExpressionGetId(expr) != ExpressionId.Const ||\r\n _BinaryenExpressionGetType(expr) != NativeType.I32 ||\r\n (value = _BinaryenConstGetValueI32(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 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)\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))\r\n return 0;\r\n if (HEAP_OFFSET + size > HEAP.length) {\r\n var oldHeap = HEAP;\r\n HEAP = new Uint8Array(Math.max(65536, HEAP.length + size, HEAP.length * 2));\r\n HEAP.set(oldHeap);\r\n }\r\n var ptr = HEAP_OFFSET;\r\n if ((HEAP_OFFSET += size) & 7)\r\n HEAP_OFFSET = (HEAP_OFFSET | 7) + 1;\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, n) {\r\n HEAP.copyWithin(dest, src, src + n);\r\n };\r\n\r\n globalScope[\"store\"] = function store(ptr, val, off) {\r\n if (typeof off === \"number\")\r\n ptr += off;\r\n HEAP[ptr] = val;\r\n };\r\n\r\n globalScope[\"load\"] = function load(ptr) {\r\n if (typeof off === \"number\")\r\n ptr += off;\r\n return HEAP[ptr];\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[\"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\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[\"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[\"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/compiler.ts","webpack://assemblyscript/./src/diagnosticMessages.generated.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","operatorKindFromString","str","INDEXED_GET","INDEXED_SET","ADD","SUB","MUL","DIV","REM","POW","AND","OR","XOR","EQ","NE","GT","GE","LT","LE","INVALID","ElementKind","CommonFlags","DecoratorFlags","noTypesYet","Map","Program","_super","diagnostics","_this","diagnosticsOffset","elementsLookup","typesLookup","typeAliases","fileLevelExports","moduleLevelExports","arrayPrototype","arrayBufferViewPrototype","stringInstance","resolvedThisExpression","resolvedElementExpression","sources","__extends","getSource","normalizedPath","k","length","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","assert","extendsType","baseElement","resolveIdentifier","CLASS_PROTOTYPE","basePrototype","A_class_may_only_extend_another_class","globalAliases","globalAliases_1","globalAliases_1_1","_c","alias","INTERFACE_PROTOTYPE","stringPrototype","resolve","has","Duplicate_identifier_0","programLevelInternalName","type","filterDecorators","decorators","acceptedFlags","presentFlags","NONE","decorator","IDENTIFIER","flag","decoratorKindToFlag","stringToDecoratorKind","Duplicate_decorator","Decorator_0_is_not_valid_here","checkGlobalOptions","parentNode","hasDecorator","GLOBAL","isLibrary","is","SOURCE","simpleName","BUILTIN","namespace","fileLevelInternalName","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","Error","classPrototype","STATIC","staticField","Global","instanceMembers","instanceField","FieldPrototype","decoratorFlags","INLINE","CONSTRUCTOR","FunctionPrototype","constructorPrototype","Multiple_constructor_implementations_are_not_allowed","checkOperatorOverloads","decoratorKind","DecoratorKind","OPERATOR","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","toString","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","parameterTypes","numParameters","parameterNames","requiredParameters","hasRest","parameterTypeNode","parameterKind","ParameterKind","DEFAULT","REST","parameterType","returnType","returnTypeNode","signature","Signature","SIGNATURE","asFunction","typeNode","globalName","localName","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","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","ENUM","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","asThis","signatureParameters","signatureParameterCount","parameterDeclaration","Function","resolvePartial","partialKey","partialPrototype","reportNode","resolvedTypeArguments","GENERIC","resolveBuiltinTypeArguments","resolvedType","FUNCTION","locals","additionalLocals","breakContext","debugLocations","ref","functionTableIndex","trampoline","outerScope","nextBreakId","breakStack","nextInlineId","tempI32s","tempI64s","tempF32s","tempF64s","AMBIENT","DECLARE","localIndex","inheritedTypeArguments_2","inheritedTypeArguments_2_1","parameterName","getParameterName","Flow","create","addLocal","local","getTempLocal","temps","toNativeType","NativeType","I32","I64","F32","F64","ret","pop","freeTempLocal","getAndFreeTempLocal","enterBreakContext","id","leaveBreakContext","finalize","sourceMap","debugLocation","setDebugLocation","debugInfoRef","debugInfoIndex","line","column","FUNCTION_TARGET","toSignatureString","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","overload","Interface","INTERFACE","FlowFlags","scopedLocals","currentFunction","parentFlow","continueLabel","breakLabel","returnLabel","unset","enterBranchOrScope","branch","leaveBranchOrScope","_b","scopedLocal","addScopedLocal","existingLocal","__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","charCodeAt","sb","formatDiagnosticMessage","showContext","emitDiagnostic","info","warning","ExpressionId","compiler_1","_BinaryenTypeNone","_BinaryenTypeInt32","_BinaryenTypeInt64","_BinaryenTypeFloat32","_BinaryenTypeFloat64","_BinaryenTypeUnreachable","_BinaryenTypeAuto","_BinaryenInvalidId","_BinaryenBlockId","_BinaryenIfId","_BinaryenLoopId","_BinaryenBreakId","_BinaryenSwitchId","_BinaryenCallId","_BinaryenCallImportId","_BinaryenCallIndirectId","_BinaryenGetLocalId","_BinaryenSetLocalId","_BinaryenGetGlobalId","_BinaryenSetGlobalId","_BinaryenLoadId","_BinaryenStoreId","_BinaryenConstId","_BinaryenUnaryId","_BinaryenBinaryId","_BinaryenSelectId","_BinaryenDropId","_BinaryenReturnId","_BinaryenHostId","_BinaryenNopId","_BinaryenUnreachableId","_BinaryenAtomicCmpxchgId","_BinaryenAtomicRMWId","_BinaryenAtomicWaitId","_BinaryenAtomicWakeId","UnaryOp","_BinaryenClzInt32","_BinaryenCtzInt32","_BinaryenPopcntInt32","_BinaryenNegFloat32","_BinaryenAbsFloat32","_BinaryenCeilFloat32","_BinaryenFloorFloat32","_BinaryenTruncFloat32","_BinaryenNearestFloat32","_BinaryenSqrtFloat32","_BinaryenEqZInt32","_BinaryenClzInt64","_BinaryenCtzInt64","_BinaryenPopcntInt64","_BinaryenNegFloat64","_BinaryenAbsFloat64","_BinaryenCeilFloat64","_BinaryenFloorFloat64","_BinaryenTruncFloat64","_BinaryenNearestFloat64","_BinaryenSqrtFloat64","_BinaryenEqZInt64","_BinaryenExtendSInt32","_BinaryenExtendUInt32","_BinaryenWrapInt64","_BinaryenTruncSFloat32ToInt32","_BinaryenTruncSFloat32ToInt64","_BinaryenTruncUFloat32ToInt32","_BinaryenTruncUFloat32ToInt64","_BinaryenTruncSFloat64ToInt32","_BinaryenTruncSFloat64ToInt64","_BinaryenTruncUFloat64ToInt32","_BinaryenTruncUFloat64ToInt64","_BinaryenReinterpretFloat32","_BinaryenReinterpretFloat64","_BinaryenConvertSInt32ToFloat32","_BinaryenConvertSInt32ToFloat64","_BinaryenConvertUInt32ToFloat32","_BinaryenConvertUInt32ToFloat64","_BinaryenConvertSInt64ToFloat32","_BinaryenConvertSInt64ToFloat64","_BinaryenConvertUInt64ToFloat32","_BinaryenConvertUInt64ToFloat64","_BinaryenPromoteFloat32","_BinaryenDemoteFloat64","_BinaryenReinterpretInt32","_BinaryenReinterpretInt64","BinaryOp","_BinaryenAddInt32","_BinaryenSubInt32","_BinaryenMulInt32","_BinaryenDivSInt32","_BinaryenDivUInt32","_BinaryenRemSInt32","_BinaryenRemUInt32","_BinaryenAndInt32","_BinaryenOrInt32","_BinaryenXorInt32","_BinaryenShlInt32","_BinaryenShrUInt32","_BinaryenShrSInt32","_BinaryenRotLInt32","_BinaryenRotRInt32","_BinaryenEqInt32","_BinaryenNeInt32","_BinaryenLtSInt32","_BinaryenLtUInt32","_BinaryenLeSInt32","_BinaryenLeUInt32","_BinaryenGtSInt32","_BinaryenGtUInt32","_BinaryenGeSInt32","_BinaryenGeUInt32","_BinaryenAddInt64","_BinaryenSubInt64","_BinaryenMulInt64","_BinaryenDivSInt64","_BinaryenDivUInt64","_BinaryenRemSInt64","_BinaryenRemUInt64","_BinaryenAndInt64","_BinaryenOrInt64","_BinaryenXorInt64","_BinaryenShlInt64","_BinaryenShrUInt64","_BinaryenShrSInt64","_BinaryenRotLInt64","_BinaryenRotRInt64","_BinaryenEqInt64","_BinaryenNeInt64","_BinaryenLtSInt64","_BinaryenLtUInt64","_BinaryenLeSInt64","_BinaryenLeUInt64","_BinaryenGtSInt64","_BinaryenGtUInt64","_BinaryenGeSInt64","_BinaryenGeUInt64","_BinaryenAddFloat32","_BinaryenSubFloat32","_BinaryenMulFloat32","_BinaryenDivFloat32","_BinaryenCopySignFloat32","_BinaryenMinFloat32","_BinaryenMaxFloat32","_BinaryenEqFloat32","_BinaryenNeFloat32","_BinaryenLtFloat32","_BinaryenLeFloat32","_BinaryenGtFloat32","_BinaryenGeFloat32","_BinaryenAddFloat64","_BinaryenSubFloat64","_BinaryenMulFloat64","_BinaryenDivFloat64","_BinaryenCopySignFloat64","_BinaryenMinFloat64","_BinaryenMaxFloat64","_BinaryenEqFloat64","_BinaryenNeFloat64","_BinaryenLtFloat64","_BinaryenLeFloat64","_BinaryenGtFloat64","_BinaryenGeFloat64","HostOp","_BinaryenPageSize","_BinaryenCurrentMemory","_BinaryenGrowMemory","_BinaryenHasFeature","AtomicRMWOp","_BinaryenAtomicRMWAdd","_BinaryenAtomicRMWSub","_BinaryenAtomicRMWAnd","_BinaryenAtomicRMWOr","_BinaryenAtomicRMWXor","_BinaryenAtomicRMWXchg","MemorySegment","buffer","offset","segment","Module","_BinaryenModuleCreate","out","allocate_memory","createFrom","cArr","allocU8Array","_BinaryenModuleRead","free_memory","changetype","addFunctionType","result","cStr","allocString","allocI32Array","_BinaryenAddFunctionType","getFunctionTypeBySignature","_BinaryenGetFunctionTypeBySignature","createI32","_BinaryenLiteralInt32","_BinaryenConst","createI64","valueLow","valueHigh","_BinaryenLiteralInt64","createF32","_BinaryenLiteralFloat32","createF64","_BinaryenLiteralFloat64","createUnary","op","expr","_BinaryenUnary","createBinary","left","right","_BinaryenBinary","createHost","operands","_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","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","validate","_BinaryenModuleValidate","interpret","_BinaryenModuleInterpret","toBinary","sourceMapUrl","binaryPtr","sourceMapPtr","_BinaryenModuleAllocateAndWrite","readInt","binaryBytes","BinaryModule","output","Uint8Array","load","readBuffer","readString","toText","toAsmjs","dispose","_BinaryenModuleDispose","createRelooper","Relooper","cloneExpression","noSideEffects","maxDepth","MAX_VALUE","nested1","nested2","_BinaryenExpressionGetId","Const","_BinaryenExpressionGetType","_BinaryenConstGetValueI32","_BinaryenConstGetValueI64Low","_BinaryenConstGetValueI64High","_BinaryenConstGetValueF32","_BinaryenConstGetValueF64","GetLocal","_BinaryenGetLocalGetIndex","GetGlobal","_BinaryenGetGlobalGetName","Load","_BinaryenLoadGetPtr","_BinaryenLoadIsAtomic","_BinaryenLoadGetBytes","_BinaryenLoadGetOffset","_BinaryenLoadIsSigned","_BinaryenLoadGetAlign","Unary","_BinaryenUnaryGetValue","_BinaryenUnaryGetOp","Binary","_BinaryenBinaryGetLeft","_BinaryenBinaryGetRight","_BinaryenBinaryGetOp","addDebugInfoFile","_BinaryenModuleAddDebugInfoFileName","getDebugInfoFile","_BinaryenModuleGetDebugInfoFileName","fileIndex","lineNumber","columnNumber","_BinaryenFunctionSetDebugLocation","MAX_MEMORY_WASM32","MAX_MEMORY_WASM64","relooper","_RelooperCreate","createStub","addBlock","_RelooperAddBlock","addBranch","from","to","_RelooperAddBranch","addBlockWithSwitch","_RelooperAddBlockWithSwitch","addBranchForSwitch","indexes","_RelooperAddBranchForSwitch","renderAndDispose","entry","labelHelper","_RelooperRenderAndDispose","u8s","numValues","idx","store","i32s","val","u","stringLengthUTF8","cp","u1","u2","u3","u4","arr","String","fromCodePoints","program_1","tokenizer_1","Token","Node","createType","isNullable","TypeNode","setParent","createOmittedType","createIdentifierExpression","createTypeParameter","elem","TypeParameterNode","createParameter","ParameterNode","createSignature","parameters","sig","SignatureNode","createDecorator","args","stmt","DecoratorNode","CUSTOM","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","createIntegerLiteralExpression","IntegerLiteralExpression","createNewExpression","NewExpression","createNullExpression","NullExpression","createParenthesizedExpression","ParenthesizedExpression","createPropertyAccessExpression","PropertyAccessExpression","createRegexpLiteralExpression","pattern","RegexpLiteralExpression","patternFlags","createTernaryExpression","ifThen","ifElse","TernaryExpression","createStringLiteralExpression","StringLiteralExpression","createSuperExpression","SuperExpression","createThisExpression","ThisExpression","createTrueExpression","TrueExpression","createUnaryPostfixExpression","operand","UnaryPostfixExpression","createUnaryPrefixExpression","UnaryPrefixExpression","createBlockStatement","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","PRECOMPUTE","DECORATOR","CommentKind","COMMENT","Expression","LiteralExpression","ARRAY","AssertionKind","COMMA","FLOAT","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","getFirstDecorator","asGlobal","g","eval","e","window","tokenFromKeyword","ABSTRACT","AS","ASYNC","AWAIT","CASE","CATCH","DEBUGGER","DELETE","ELSE","EXTENDS","FINALLY","FROM","IMPLEMENTS","IN","INSTANCEOF","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","PLUS","MINUS","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","preferIdentifier","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","isWhiteSpace","Invalid_character","ENDOFFILE","peek","checkOnNewLine","maxCompoundLength","tokenBefore","tokenPosBefore","skip","mark","state","reusableState","State","discard","reset","readIdentifier","quote","Unterminated_string_literal","readEscapeSequence","Unexpected_end_of_text","readExtendedUnicodeEscape","readUnicodeEscape","fromCharCode","readRegexpPattern","escaped","Unterminated_regular_expression_literal","readRegexpFlags","Invalid_regular_expression_flags","readInteger","readHexInteger","readBinaryInteger","readOctalInteger","isOctalDigit","Octal_literals_are_not_allowed_in_strict_mode","readDecimalInteger","i64_16","i64_add","i64_mul","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","size","nullableType","ceil","nonNullableType","computeSmallIntegerShift","targetType","computeSmallIntegerMask","asNullable","signednessIsImportant","currentClass","targetClass","targetFunction","commonCompatible","kindOnly","toNativeZero","toNativeOne","toNativeNegOne","isize32","isize64","usize32","usize64","typesToNativeTypes","types","numTypes","getGenericParameterName","thisThisType","targetThisType","thisParameterTypes","targetParameterTypes","thisParameterType","targetParameterType","thisReturnType","targetReturnType","makeSignatureString","includeThis","optionalStart","restIndex","cachedGenericParameterNames","builtins_1","Options","WASM32","noTreeShaking","noAssert","noMemory","importMemory","importTable","memoryBase","ConversionKind","Compiler","outerFunction","currentEnum","currentType","startFunctionBody","memorySegments","stringSegments","functionTable","argumentCountRef","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","typeRef","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","compileInterfaceDeclaration","compileNamespace","ns","compileClassUsingTypeArguments","internalExportName","functionInstance","functionDeclaration","globalDeclaration","compileClass","staticMembers","setter","_e","getterName","setterName","addMemorySegment","alignment","ensureFunctionTableEntry","TRAMPOLINE","ensureTrampoline","compileBlockStatement","compileBreakStatement","compileContinueStatement","compileDoStatement","compileEmptyStatement","compileExpressionStatement","compileForStatement","compileIfStatement","compileReturnStatement","compileSwitchStatement","compileThrowStatement","compileTryStatement","compileVoidStatement","compileWhileStatement","addDebugLocation","compileStatements","numStatements","stmts","stmtReturns","stmtThrows","stmtAllocates","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","previousBreakLabel","previousContinueLabel","condExpr","makeIsTrueish","context","alwaysReturns","alwaysThrows","alwaysAllocates","GENERIC_CONTEXT","ifTrueExpr","ifTrueReturns","ifTrueThrows","ifTrueAllocates","ifFalseExpr","ifFalseReturns","ifFalseThrows","ifFalseAllocates","tempLocal","tempLocalIndex","numCases","breaks","breakIndex","defaultIndex","EqI32","currentBlock","fallsThrough","nextLabel","compileAbort","isKnownGlobal","numDeclarations","initializers","init","isInlined","_const_declarations_must_be_initialized","compileAssignmentWithValue","contextualType","retainType","shift","mask","conversionKind","wrapSmallIntegers","compileAssertionExpression","compileBinaryExpression","compileCallExpression","compileCommaExpression","compileElementAccessExpression","compileFunctionExpression","compileIdentifierExpression","compileLiteralExpression","compileNewExpression","compileParenthesizedExpression","compilePropertyAccessExpression","compileTernaryExpression","compileUnaryPostfixExpression","compileUnaryPrefixExpression","convertExpression","compileExpressionRetainType","precomputeExpression","_BinaryenFunctionGetBody","fromType","Conversion_from_type_0_to_1_requires_an_explicit_cast","PromoteF32","DemoteF64","TruncF32ToI64","TruncF32ToI32","makeSmallIntegerWrap","TruncF32ToU64","TruncF32ToU32","TruncF64ToI64","TruncF64ToI32","TruncF64ToU64","TruncF64ToU32","ConvertI64ToF32","ConvertU64ToF32","ConvertI32ToF32","ConvertU32ToF32","ConvertI64ToF64","ConvertU64ToF64","ConvertI32ToF64","ConvertU32ToF64","WrapI64","ExtendI32","ExtendU32","leftExpr","leftType","rightExpr","rightType","commonType","compound","possiblyOverflows","compileBinaryOverload","Operator_0_cannot_be_applied_to_types_1_and_2","LtI32","LtI64","LtU32","LtU64","LtF32","LtF64","GtI32","GtI64","GtU32","GtU64","GtF32","GtF64","LeI32","LeI64","LeU32","LeU64","LeF32","LeF64","GeI32","GeI64","GeU32","GeU64","GeF32","GeF64","EqI64","EqF32","EqF64","NeI32","NeI64","NeF32","NeF64","compileAssignment","AddI64","AddF32","AddF64","SubI32","SubI64","SubF32","SubF64","MulI32","MulI64","MulF32","MulF64","makeCallDirect","DivI32","DivI64","DivU32","DivU64","DivF32","DivF64","RemI32","RemI64","RemU32","RemU64","ShlI32","ShlI64","The_0_operator_cannot_be_applied_to_type_1","ShrI32","ShrI64","ShrU32","ShrU64","AndI32","AndI64","OrI32","OrI64","XorI32","XorI64","compileUnaryOverload","argumentExpressions","thisArg","compileCallDirect","valueExpression","elementType","Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property","valueExpr","valueWithCorrectType","tee","thisExpression","thisExpr","setterInstance","getterInstance","nativeReturnType","indexedSet","Index_signature_in_type_0_only_permits_reading","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","argumentLocal","bodyStatement","original","originalSignature","originalName","originalParameterTypes","originalParameterDeclarations","commonReturnType","commonThisType","minArguments","minOperands","maxArguments","maxOperands","numOptional","forwardedOperands","operandIndex","trampolineSignature","trampolineName","ofN","numOperands","isCallImport","ensureArgumentCount","makeCallIndirect","numExpressions","exprs","retainConstantType","scopedThis","superType","localType","compileGetConstant","A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums","implicitNegate","compileStaticArray","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","isStatic","arrayType","byteLength","elementCount","Int32Array","Float32Array","Float64Array","usizeTypeSize","arraySize","bufferTotalSize","clz","data","writeI64","writeI32","writeF32","writeF64","Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature","currentClassInstance","makeAllocate","ifThenExpr","ifElseExpr","ifThenAllocates","ifElseAllocates","getValue","Unreachable","nativeOne","setValue","NegF32","NegF64","makeIsFalseish","explicitSimpleName","EqzI32","EqzI64","compiler","compileAllocate","field","nativeFieldType","builtinsFile","Parser","backlog","seenlog","tryParseSignatureIsSignature","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","parseClassOrInterface","parseNamespace","parseExportImport","parseImport","parseTypeDeclaration","parseExport","_0_modifier_cannot_be_used_here","parseStatement","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","Type_parameter_list_cannot_be_empty","typeParameter","parseTypeParameter","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","walk","visitElement","visitGlobal","visitEnum","visitCompiledFunctions","visitCompiledClasses","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","_BinaryenFunctionGetName","_BinaryenFunctionGetNumParams","nativeTypeToType","_BinaryenFunctionGetParam","_BinaryenFunctionGetResult","Block","decompileExpression","nested","string","_BinaryenBlockGetName","_BinaryenBlockGetNumChildren","_BinaryenBlockGetChild","If","_BinaryenIfGetCondition","_BinaryenIfGetIfTrue","_BinaryenIfGetIfFalse","Loop","_BinaryenLoopGetName","_BinaryenLoopGetBody","Break","_BinaryenBreakGetCondition","_BinaryenBreakGetName","Switch","Call","CallImport","CallIndirect","SetLocal","_BinaryenSetLocalGetIndex","_BinaryenSetLocalGetValue","SetGlobal","Store","_BinaryenStoreGetOffset","_BinaryenStoreGetPtr","_BinaryenStoreGetValue","ClzI32","CtzI32","PopcntI32","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","Select","_BinaryenSelectGetIfTrue","_BinaryenSelectGetIfFalse","_BinaryenSelectGetCondition","Drop","_BinaryenDropGetValue","Return","_BinaryenReturnGetValue","Host","_BinaryenHostGetOp","CurrentMemory","GrowMemory","_BinaryenHostGetOperand","Nop","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","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","MIN_VALUE","neg","TWO_PWR_32_DBL","lowBits","highBits","pow_dbl","Math","pow","fromString","radix","RangeError","radixToPower","min","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","other","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_and","i64_or","i64_xor","i64_shl","i64_shr","i64_not","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","map","mid","evaluateConstantType","evaluateConstantOffset","NaN","Infinity","tempLocal0","tempLocal1","alignLog2","fieldName","Type_0_has_no_property_1","abort","allocateInternalName","allocatePrototype","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","off","UnreachableError","captureStackTrace","stack","AssertionError","defineProperties","writable","MIN_POSITIVE_VALUE","EPSILON","clz32","abs","sqrt","trunc","isTrueish","undefined","fromCodePoint","Number","isInteger","arg","isArray","y"],"mappings":"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AK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IACpB,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,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,MA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","file":"assemblyscript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"binaryen\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"binaryen\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"assemblyscript\"] = factory(require(\"binaryen\"));\n\telse\n\t\troot[\"assemblyscript\"] = factory(root[\"binaryen\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE__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 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 stringToDecoratorKind\r\n} from \"./ast\";\r\n\r\nimport {\r\n Module,\r\n NativeType,\r\n FunctionRef,\r\n} from \"./module\";\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 INDEXED_GET,\r\n INDEXED_SET,\r\n ADD,\r\n SUB,\r\n MUL,\r\n DIV,\r\n REM,\r\n POW,\r\n AND,\r\n OR,\r\n XOR,\r\n EQ,\r\n NE,\r\n GT,\r\n GE,\r\n LT,\r\n LE\r\n}\r\n\r\nfunction operatorKindFromString(str: string): OperatorKind {\r\n switch (str) {\r\n case \"[]\" : return OperatorKind.INDEXED_GET;\r\n case \"[]=\": return OperatorKind.INDEXED_SET;\r\n case \"+\" : return OperatorKind.ADD;\r\n case \"-\" : return OperatorKind.SUB;\r\n case \"*\" : return OperatorKind.MUL;\r\n case \"/\" : return OperatorKind.DIV;\r\n case \"%\" : return OperatorKind.REM;\r\n case \"**\" : return OperatorKind.POW;\r\n case \"&\" : return OperatorKind.AND;\r\n case \"|\" : return OperatorKind.OR;\r\n case \"^\" : return OperatorKind.XOR;\r\n case \"==\" : return OperatorKind.EQ;\r\n case \"!=\" : return OperatorKind.NE;\r\n case \">\" : return OperatorKind.GT;\r\n case \">=\" : return OperatorKind.GE;\r\n case \"<\" : return OperatorKind.LT;\r\n case \"<=\" : return OperatorKind.LE;\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 /** 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 let element = this.elementsLookup.get(name); // TODO: error? has no source range\r\n if (element) this.elementsLookup.set(alias, element);\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 if (decorator.name.kind == NodeKind.IDENTIFIER) {\r\n let name = (decorator.name).text;\r\n let kind = stringToDecoratorKind(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, name\r\n );\r\n } else if (presentFlags & flag) {\r\n this.error(\r\n DiagnosticCode.Duplicate_decorator,\r\n decorator.range, name\r\n );\r\n } else {\r\n presentFlags |= flag;\r\n }\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 (\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 simpleName = declaration.name.text;\r\n if (this.elementsLookup.has(simpleName)) {\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(simpleName, element);\r\n if (element.is(CommonFlags.BUILTIN)) {\r\n element.internalName = simpleName;\r\n }\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\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 );\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 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.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 // handle operator annotations. operators are either instance methods taking\r\n // a second argument of the instance's type or static methods taking two\r\n // arguments of the instance's type. return values vary depending on the\r\n // operation.\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n if (decorator.decoratorKind == DecoratorKind.OPERATOR) {\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 = operatorKindFromString((firstArg).value);\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 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) {\r\n let internalName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n statement.namespaceName.text\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 var 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 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 );\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.parameterTypes;\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 Type.u32.asFunction(signature);\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\r\n // check file-global / program-global element\r\n if ((element = this.elementsLookup.get(localName)) || (element = this.elementsLookup.get(globalName))) {\r\n switch (element.kind) {\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 return instance ? instance.type : null;\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}\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 an unmanaged class. */\r\n UNMANAGED = 1 << 2,\r\n /** Is a sealed class. */\r\n SEALED = 1 << 3,\r\n /** Is always inlined. */\r\n INLINE = 1 << 4\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.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 ) {\r\n super(program, simpleName, internalName, type, declaration);\r\n this.flags = declaration ? declaration.flags : CommonFlags.NONE;\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.asThis();\r\n contextualTypeArguments.set(\"this\", thisType);\r\n }\r\n\r\n // resolve signature node\r\n var signatureParameters = signatureNode.parameterTypes;\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 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 locals: Map = new Map();\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[] | null = null;\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 this.locals.set(\r\n \"this\",\r\n new Local(\r\n prototype.program,\r\n \"this\",\r\n localIndex++,\r\n assert(signature.thisType)\r\n )\r\n );\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 this.locals.set(\r\n parameterName,\r\n new Local(\r\n prototype.program,\r\n parameterName,\r\n localIndex++,\r\n parameterType\r\n // FIXME: declaration?\r\n )\r\n );\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.locals.has(name)) throw new Error(\"duplicate local name\");\r\n this.locals.set(name, local);\r\n }\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): 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 if (temps && temps.length) {\r\n let ret = temps.pop();\r\n ret.type = type;\r\n return ret;\r\n }\r\n return this.addLocal(type);\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): 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 if (temps.length > 0) {\r\n return temps[temps.length - 1];\r\n }\r\n var local: Local = this.addLocal(type);\r\n temps.push(local);\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) {\r\n this.breakStack = [ id ];\r\n } else {\r\n this.breakStack.push(id);\r\n }\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 if (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 this.debugLocations = null;\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\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): Function | null {\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}\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 /** Scoped global variables. */\r\n // scopedGlobals: Map | null = 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 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 /** 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 return branch;\r\n }\r\n\r\n /** Leaves the current branch or scope and returns the parent flow. */\r\n leaveBranchOrScope(): 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 this.currentFunction.freeTempLocal(scopedLocal);\r\n }\r\n this.scopedLocals = null;\r\n }\r\n\r\n // Propagate flags to parent\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, declaration?: VariableDeclaration): Local {\r\n var scopedLocal = this.currentFunction.getTempLocal(type);\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 this.scopedLocals.set(name, scopedLocal);\r\n return scopedLocal;\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.locals.get(name);\r\n }\r\n\r\n /** Adds a scoped global for an outer scoped local. */\r\n // addScopedGlobal(scopedLocal: Local): Global {\r\n // var scopedGlobals = this.scopedGlobals;\r\n // var scopedGlobal: Global | null;\r\n // if (!scopedGlobals) {\r\n // this.scopedGlobals = scopedGlobals = new Map();\r\n // } else {\r\n // scopedGlobal = scopedGlobals.get(scopedLocal);\r\n // if (scopedGlobal) return scopedGlobal;\r\n // }\r\n // scopedGlobal = new Global(\r\n // scopedLocal.program,\r\n // scopedLocal.simpleName,\r\n // this.currentFunction.internalName + INNER_DELIMITER + scopedLocal.internalName,\r\n // scopedLocal.type,\r\n // assert(scopedLocal.declaration)\r\n // );\r\n // scopedGlobals.set(scopedLocal, scopedGlobal);\r\n // return scopedGlobal;\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 * 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/threads/blob/master/proposals/threads/Overview.md#new-sign-extending-operators\r\n // ExtendI8ToI32 =_BinaryenExtendS8Int32()\r\n // ExtendI16ToI32 = _BinaryenExtendS16Int32()\r\n // ExtendI8ToI64 = _BinaryenExtendS8Int64() // operand is I64\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 out: 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.out = 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.out = 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 // constants\r\n\r\n createI32(value: i32): ExpressionRef {\r\n var out = this.out;\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.out;\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.out;\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.out;\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 = allocI32Array(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 = allocI32Array(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 = allocI32Array(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 = allocI32Array(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 = allocI32Array(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 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 = allocI32Array(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 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.out;\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 if (!this.ref) return; // sic\r\n _BinaryenModuleDispose(this.ref);\r\n free_memory(this.out);\r\n }\r\n\r\n createRelooper(): Relooper {\r\n return Relooper.create(this);\r\n }\r\n\r\n cloneExpression(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 _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 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\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 static createStub(module: Module): Relooper {\r\n var relooper = new Relooper();\r\n relooper.module = module;\r\n relooper.ref = 0;\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)) {\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 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 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 // 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} 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 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.parameterTypes = 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 expression: 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 = expression; expression.parent = stmt;\r\n stmt.arguments = args; if (args) setParent(args, stmt);\r\n stmt.decoratorKind = expression.kind == NodeKind.IDENTIFIER\r\n ? stringToDecoratorKind((expression).text)\r\n : DecoratorKind.CUSTOM;\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 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 parameterTypes: 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 UNMANAGED,\r\n SEALED,\r\n INLINE,\r\n PRECOMPUTE\r\n}\r\n\r\n/** Returns the decorator kind represented by the specified string. */\r\nexport function stringToDecoratorKind(str: string): DecoratorKind {\r\n switch (str) {\r\n case \"global\": return DecoratorKind.GLOBAL;\r\n case \"operator\": return DecoratorKind.OPERATOR;\r\n case \"unmanaged\": return DecoratorKind.UNMANAGED;\r\n case \"sealed\": return DecoratorKind.SEALED;\r\n case \"inline\": return DecoratorKind.INLINE;\r\n case \"precompute\": return DecoratorKind.PRECOMPUTE;\r\n default: return DecoratorKind.CUSTOM;\r\n }\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 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/** Gets the first decorator by name within at set of decorators, if present. */\r\nexport function getFirstDecorator(name: string, decorators: DecoratorNode[] | null): DecoratorNode | null {\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n let expression = decorator.name;\r\n if (expression.kind == NodeKind.IDENTIFIER && (expression).text == name) {\r\n return decorator;\r\n }\r\n }\r\n }\r\n return null;\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 return getFirstDecorator(name, decorators) != null;\r\n}\r\n\r\n/** Mangles a declaration's name to an internal name. */\r\nexport function mangleInternalName(declaration: DeclarationStatement, asGlobal: bool = false): string {\r\n var name = declaration.name.text;\r\n var parent = declaration.parent;\r\n if (!parent) return name;\r\n if (\r\n declaration.kind == NodeKind.VARIABLEDECLARATION &&\r\n parent.kind == NodeKind.VARIABLE\r\n ) { // skip over\r\n if (!(parent = parent.parent)) return name;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return mangleInternalName(parent, asGlobal) + (\r\n declaration.is(CommonFlags.STATIC)\r\n ? STATIC_DELIMITER\r\n : INSTANCE_DELIMITER\r\n ) + name;\r\n }\r\n if (\r\n parent.kind == NodeKind.NAMESPACEDECLARATION ||\r\n parent.kind == NodeKind.ENUMDECLARATION\r\n ) {\r\n return mangleInternalName(parent, asGlobal) +\r\n STATIC_DELIMITER + name;\r\n }\r\n return asGlobal\r\n ? name\r\n : declaration.range.source.internalPath + PATH_DELIMITER + name;\r\n}\r\n\r\n/** Mangles an external to an internal path. */\r\nexport function mangleInternalPath(path: string): string {\r\n if (path.endsWith(\".ts\")) path = path.substring(0, path.length - 3);\r\n return path;\r\n}\r\n\r\n// Helpers\r\n\r\n/** Sets the parent node on an array of nodes. */\r\nfunction setParent(nodes: Node[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n nodes[i].parent = parent;\r\n }\r\n}\r\n\r\n/** Sets the parent node on an array of nullable nodes. */\r\nfunction setParentIfNotNull(nodes: (Node | null)[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n let node = nodes[i];\r\n if (node) node.parent = parent;\r\n }\r\n}\r\n","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 function tokenFromKeyword(text: string): Token {\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 case \"break\": return Token.BREAK;\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 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 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 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 case \"get\": return Token.GET;\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 case \"keyof\": return Token.KEYOF;\r\n case \"let\": return Token.LET;\r\n case \"module\": return Token.MODULE;\r\n case \"namespace\": return Token.NAMESPACE;\r\n case \"new\": return Token.NEW;\r\n case \"null\": return Token.NULL;\r\n case \"of\": return Token.OF;\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 case \"readonly\": return Token.READONLY;\r\n case \"return\": return Token.RETURN;\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 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 case \"var\": return Token.VAR;\r\n case \"void\": return Token.VOID;\r\n case \"while\": return Token.WHILE;\r\n case \"with\": return Token.WITH;\r\n case \"yield\": return Token.YIELD;\r\n default: return Token.INVALID;\r\n }\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(preferIdentifier: bool = false): Token {\r\n this.nextToken = -1;\r\n return this.token = this.unsafeNext(preferIdentifier);\r\n }\r\n\r\n private unsafeNext(preferIdentifier: bool = false, maxTokenLength: i32 = i32.MAX_VALUE): 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 !(preferIdentifier && tokenIsAlsoIdentifier(keywordToken))\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 preferIdentifier: bool = false,\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(preferIdentifier, 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 skip(token: Token): 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(token == Token.IDENTIFIER, 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 reusableState = state;\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) break;\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 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 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 {\r\n break;\r\n }\r\n ++this.pos;\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 }\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 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 * 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 {\r\n break;\r\n }\r\n ++this.pos;\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 }\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 while (this.pos < this.end) {\r\n let c = text.charCodeAt(this.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 {\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 }\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 while (this.pos < this.end) {\r\n let c = text.charCodeAt(this.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 {\r\n break;\r\n }\r\n ++this.pos;\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 }\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 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 sized integer type with a target specific bit size. */\r\n SIZE = 1 << 4,\r\n /** Is a small type that is emulated in a larger type. */\r\n SMALL = 1 << 5,\r\n /** Is a long type 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 /** Is the special 'this' type. */\r\n THIS = 1 << 10\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. Ceiled to 8-bits. */\r\n byteSize: i32;\r\n /** Underlying class reference, if a class type. */\r\n classReference: Class | null;\r\n /** Underlying function reference, if a function type. */\r\n signatureReference: Signature | null;\r\n /** Respective nullable type, if non-nullable. */\r\n nullableType: Type | null = null;\r\n /** Respective non-nullable type, if nullable. */\r\n nonNullableType: Type;\r\n /** Respective special 'this' type. */\r\n thisType: Type | null = null;\r\n\r\n /** Constructs a new resolved type. */\r\n constructor(kind: TypeKind, flags: TypeFlags, size: i32) {\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 /** 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 return ~0 >>> (targetType.size - this.size);\r\n }\r\n\r\n /** Tests if this type has 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.nullableType) {\r\n assert(!this.is(TypeFlags.NULLABLE));\r\n this.nullableType = new Type(this.kind, this.flags | TypeFlags.NULLABLE, this.size);\r\n this.nullableType.classReference = this.classReference; // either a class reference\r\n this.nullableType.signatureReference = this.signatureReference; // or a function reference\r\n }\r\n return this.nullableType;\r\n }\r\n\r\n /** Composes the respective 'this' type of this type. */\r\n asThis(): Type {\r\n var thisType = this.thisType;\r\n if (thisType) return thisType;\r\n thisType = new Type(this.kind, this.flags | TypeFlags.THIS, this.size);\r\n thisType.classReference = this.classReference;\r\n thisType.nullableType = this.nullableType;\r\n thisType.nonNullableType = this.nonNullableType;\r\n this.thisType = thisType;\r\n return thisType;\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, signednessIsImportant: 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 (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 } else if (!target.is(TypeFlags.REFERENCE)) {\r\n if (this.is(TypeFlags.INTEGER)) {\r\n if (target.is(TypeFlags.INTEGER)) {\r\n if (!signednessIsImportant || 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)) {\r\n return left;\r\n } else if (left.isAssignableTo(right, signednessIsImportant)) {\r\n return right;\r\n }\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 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: {\r\n let functionType = this.signatureReference;\r\n return kindOnly || !functionType\r\n ? \"u32\"\r\n : functionType.toString(true);\r\n }\r\n case TypeKind.U64: return \"u64\";\r\n case TypeKind.USIZE: {\r\n let classType = this.classReference;\r\n return kindOnly || !classType\r\n ? \"usize\"\r\n : classType.toString();\r\n }\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 // 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.SMALL |\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.SMALL |\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.SIZE |\r\n TypeFlags.INTEGER |\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.SIZE |\r\n TypeFlags.INTEGER |\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.SMALL |\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.SMALL |\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.SIZE |\r\n TypeFlags.INTEGER |\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.SIZE |\r\n TypeFlags.INTEGER |\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.SMALL |\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) {\r\n ret[i] = types[i].toNativeType();\r\n }\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) {\r\n sb[i] = types[i].toString();\r\n }\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 : getGenericParameterName(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))) {\r\n return false;\r\n }\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) {\r\n return false; // TODO\r\n }\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) {\r\n return false;\r\n }\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)) {\r\n return false;\r\n }\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) {\r\n sb.push(parameterTypes[i].toSignatureString());\r\n }\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) {\r\n sb.push((names)[i]);\r\n } else {\r\n sb.push(getGenericParameterName(i));\r\n }\r\n if (i >= optionalStart && i != restIndex) {\r\n sb.push(\"?: \");\r\n } else {\r\n sb.push(\": \");\r\n }\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 generic parameter names used where names are unknown.\r\nvar cachedGenericParameterNames: string[] | null = null;\r\n\r\n/** Gets the cached generic parameter name for the specified index. */\r\nexport function getGenericParameterName(index: i32): string {\r\n if (!cachedGenericParameterNames) cachedGenericParameterNames = [];\r\n for (let i = cachedGenericParameterNames.length; i <= index; ++i) {\r\n cachedGenericParameterNames.push(\"arg$\" + i.toString(10));\r\n }\r\n return cachedGenericParameterNames[index - 1];\r\n}\r\n","/**\r\n * The AssemblyScript compiler.\r\n * @module compiler\r\n *//***/\r\n\r\nimport {\r\n compileCall as compileBuiltinCall,\r\n compileGetConstant as compileBuiltinGetConstant,\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} 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 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\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\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/** 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[] = new Array();\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[] = new Array();\r\n /** Argument count helper global. */\r\n argumentCountRef: GlobalRef = 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 max(options.memoryBase, options.usizeType.byteSize) // leave space for `null`\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 to 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) {\r\n this.compileSource(sources[i]);\r\n }\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\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\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 compileSourceByPath(normalizedPathWithoutExtension: string, reportNode: Node): void {\r\n var source = this.program.lookupSourceByPath(normalizedPathWithoutExtension);\r\n if (!source) {\r\n this.error(\r\n DiagnosticCode.File_0_not_found,\r\n reportNode.range, normalizedPathWithoutExtension\r\n );\r\n return;\r\n }\r\n this.compileSource(source);\r\n }\r\n\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) || global.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) return true;\r\n global.set(CommonFlags.COMPILED); // ^ built-ins are compiled on use\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 );\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 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) {\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(declaration.initializer, global.type);\r\n }\r\n\r\n // check if the initializer is constant\r\n if (_BinaryenExpressionGetId(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 (_BinaryenExpressionGetId(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 = _BinaryenExpressionGetType(initExpr);\r\n switch (exprType) {\r\n case NativeType.I32: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(_BinaryenConstGetValueI32(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 _BinaryenConstGetValueI64Low(initExpr),\r\n _BinaryenConstGetValueI64High(initExpr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = _BinaryenConstGetValueF32(initExpr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = _BinaryenConstGetValueF64(initExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n assert(global.declaration).range\r\n );\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(valueDeclaration.value, Type.i32);\r\n if (_BinaryenExpressionGetId(initExpr) != ExpressionId.Const) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (_BinaryenExpressionGetId(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 (_BinaryenExpressionGetType(initExpr) == NativeType.I32) {\r\n val.constantValue = _BinaryenConstGetValueI32(initExpr);\r\n val.set(CommonFlags.INLINED);\r\n } else {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n valueDeclaration.range\r\n );\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)) {\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;\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) || instance.internalName == \"abort\");\r\n instance.set(CommonFlags.COMPILED);\r\n\r\n // check that modifiers are matching but still compile as-is\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: Type = 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((body).expression, returnType);\r\n flow.set(FlowFlags.RETURNS);\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 makeConditionalAllocate(this, 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 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: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n member.range\r\n );\r\n break;\r\n }\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 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 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 expr: ExpressionRef;\r\n switch (statement.kind) {\r\n case NodeKind.BLOCK: {\r\n expr = this.compileBlockStatement(statement);\r\n break;\r\n }\r\n case NodeKind.BREAK: {\r\n expr = this.compileBreakStatement(statement);\r\n break;\r\n }\r\n case NodeKind.CONTINUE: {\r\n expr = this.compileContinueStatement(statement);\r\n break;\r\n }\r\n case NodeKind.DO: {\r\n expr = this.compileDoStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EMPTY: {\r\n expr = this.compileEmptyStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EXPRESSION: {\r\n expr = this.compileExpressionStatement(statement);\r\n break;\r\n }\r\n case NodeKind.FOR: {\r\n expr = this.compileForStatement(statement);\r\n break;\r\n }\r\n case NodeKind.IF: {\r\n expr = this.compileIfStatement(statement);\r\n break;\r\n }\r\n case NodeKind.RETURN: {\r\n expr = this.compileReturnStatement(statement);\r\n break;\r\n }\r\n case NodeKind.SWITCH: {\r\n expr = this.compileSwitchStatement(statement);\r\n break;\r\n }\r\n case NodeKind.THROW: {\r\n expr = this.compileThrowStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TRY: {\r\n expr = this.compileTryStatement(statement);\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n expr = this.compileVariableStatement(statement);\r\n if (!expr) expr = module.createNop();\r\n break;\r\n }\r\n case NodeKind.VOID: {\r\n expr = this.compileVoidStatement(statement);\r\n break;\r\n }\r\n case NodeKind.WHILE: {\r\n expr = 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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n assert(false);\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n if (this.options.sourceMap) {\r\n addDebugLocation(expr, statement.range, module, this.currentFunction);\r\n }\r\n return expr;\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 for (let i = 0; i < numStatements; ++i) {\r\n stmts[i] = this.compileStatement(statements[i]);\r\n }\r\n return stmts; // array of 0-es in noEmit-mode\r\n }\r\n\r\n compileBlockStatement(statement: BlockStatement): ExpressionRef {\r\n var statements = statement.statements;\r\n\r\n // NOTE that we could optimize this to a NOP if empty or unwrap a single\r\n // statement, but that's not what the source told us to do and left to the\r\n // optimizer.\r\n\r\n // Not actually a branch, but can contain its own scoped variables.\r\n var flow = this.currentFunction.flow.enterBranchOrScope();\r\n this.currentFunction.flow = flow;\r\n\r\n var stmt = this.module.createBlock(null, this.compileStatements(statements), NativeType.None);\r\n var stmtReturns = flow.is(FlowFlags.RETURNS);\r\n var stmtThrows = flow.is(FlowFlags.THROWS);\r\n var stmtAllocates = flow.is(FlowFlags.ALLOCATES);\r\n\r\n // Switch back to the parent flow\r\n flow = flow.leaveBranchOrScope();\r\n this.currentFunction.flow = flow;\r\n if (stmtReturns) flow.set(FlowFlags.RETURNS);\r\n if (stmtThrows) flow.set(FlowFlags.THROWS);\r\n if (stmtAllocates) flow.set(FlowFlags.ALLOCATES);\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\r\n // A do statement does not initiate a new branch because it is executed at\r\n // least once, but has its own break and continue labels.\r\n var currentFunction = this.currentFunction;\r\n var label = currentFunction.enterBreakContext();\r\n var flow = currentFunction.flow;\r\n var previousBreakLabel = flow.breakLabel;\r\n var previousContinueLabel = flow.continueLabel;\r\n\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\r\n // Reset to the previous break and continue labels, if any.\r\n flow.breakLabel = previousBreakLabel;\r\n flow.continueLabel = previousContinueLabel;\r\n\r\n var module = this.module;\r\n var condExpr = makeIsTrueish(\r\n this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE),\r\n this.currentType,\r\n module\r\n );\r\n\r\n // No need to eliminate the condition in generic contexts as the statement is executed anyway.\r\n\r\n this.currentFunction.leaveBreakContext();\r\n\r\n return module.createBlock(breakLabel, [\r\n module.createLoop(continueLabel,\r\n module.createBlock(null, [\r\n body,\r\n module.createBreak(continueLabel, condExpr)\r\n ], NativeType.None))\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);\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\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 context = currentFunction.enterBreakContext();\r\n var flow = currentFunction.flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n var breakLabel = flow.breakLabel = \"break|\" + context;\r\n flow.breakLabel = breakLabel;\r\n var continueLabel = \"continue|\" + context;\r\n flow.continueLabel = continueLabel;\r\n\r\n // Compile in correct order\r\n var module = this.module;\r\n var initializer = statement.initializer\r\n ? this.compileStatement(statement.initializer)\r\n : module.createNop();\r\n var condition = statement.condition\r\n ? this.compileExpression(statement.condition, Type.i32)\r\n : module.createI32(1);\r\n var incrementor = statement.incrementor\r\n ? this.compileExpression(statement.incrementor, Type.void)\r\n : module.createNop();\r\n var body = this.compileStatement(statement.statement);\r\n\r\n var alwaysReturns = !statement.condition && flow.is(FlowFlags.RETURNS);\r\n var alwaysThrows = !statement.condition && flow.is(FlowFlags.THROWS);\r\n var alwaysAllocates = !statement.condition && flow.is(FlowFlags.ALLOCATES);\r\n // TODO: check other always-true conditions as well, not just omitted\r\n\r\n if (alwaysReturns) flow.set(FlowFlags.RETURNS);\r\n if (alwaysThrows) flow.set(FlowFlags.THROWS);\r\n if (alwaysAllocates) flow.set(FlowFlags.ALLOCATES);\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 initializer,\r\n module.createLoop(continueLabel, module.createBlock(null, [\r\n module.createIf(condition, module.createBlock(null, [\r\n body,\r\n incrementor,\r\n module.createBreak(continueLabel)\r\n ], NativeType.None))\r\n ], NativeType.None))\r\n ], NativeType.None);\r\n\r\n // If the loop is guaranteed to run and return, append a hint\r\n if (alwaysReturns || alwaysThrows) {\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 = makeIsTrueish(\r\n this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE),\r\n this.currentType,\r\n module\r\n );\r\n\r\n // Eliminate unnecesssary branches in generic contexts if the condition is constant\r\n if (\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT) &&\r\n _BinaryenExpressionGetId(condExpr = this.precomputeExpressionRef(condExpr)) == ExpressionId.Const &&\r\n _BinaryenExpressionGetType(condExpr) == NativeType.I32\r\n ) {\r\n let ret: ExpressionRef;\r\n if (_BinaryenConstGetValueI32(condExpr)) {\r\n ret = this.compileStatement(ifTrue);\r\n } else if (ifFalse) {\r\n ret = this.compileStatement(ifFalse);\r\n } else {\r\n ret = module.createNop();\r\n }\r\n return ret;\r\n }\r\n\r\n // Each arm initiates a branch\r\n var flow = currentFunction.flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n var ifTrueExpr = this.compileStatement(ifTrue);\r\n var ifTrueReturns = flow.is(FlowFlags.RETURNS);\r\n var ifTrueThrows = flow.is(FlowFlags.THROWS);\r\n var ifTrueAllocates = flow.is(FlowFlags.ALLOCATES);\r\n flow = flow.leaveBranchOrScope();\r\n currentFunction.flow = flow;\r\n\r\n var ifFalseExpr: ExpressionRef = 0;\r\n var ifFalseReturns = false;\r\n var ifFalseThrows = false;\r\n var ifFalseAllocates = false;\r\n if (ifFalse) {\r\n flow = flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n ifFalseExpr = this.compileStatement(ifFalse);\r\n ifFalseReturns = flow.is(FlowFlags.RETURNS);\r\n ifFalseThrows = flow.is(FlowFlags.THROWS);\r\n ifFalseAllocates = flow.is(FlowFlags.ALLOCATES);\r\n flow = flow.leaveBranchOrScope();\r\n currentFunction.flow = flow;\r\n }\r\n\r\n if (ifTrueReturns && ifFalseReturns) flow.set(FlowFlags.RETURNS);\r\n if (ifTrueThrows && ifFalseThrows) flow.set(FlowFlags.THROWS);\r\n if (ifTrueAllocates && ifFalseAllocates) flow.set(FlowFlags.ALLOCATES);\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 expression: 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 // When inlining, break to the end of the inlined function's block\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n if (statement.value) {\r\n expression = this.compileExpression(\r\n statement.value,\r\n assert(flow.returnType)\r\n );\r\n }\r\n return module.createBreak(assert(flow.returnLabel), 0, expression);\r\n }\r\n\r\n // Otherwise return as usual\r\n if (statement.value) {\r\n expression = this.compileExpression(\r\n statement.value,\r\n flow.returnType\r\n );\r\n }\r\n return module.createReturn(expression);\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 // 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);\r\n var tempLocalIndex = tempLocal.index;\r\n var cases = statement.cases;\r\n var numCases = cases.length;\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)\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.i32)\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 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 let body = new Array(1 + numStatements);\r\n body[0] = currentBlock;\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 fallsThrough = i != numCases - 1;\r\n let nextLabel = !fallsThrough ? breakLabel : \"case\" + (i + 1).toString(10) + \"|\" + context;\r\n for (let j = 0; j < numStatements; ++j) {\r\n body[j + 1] = this.compileStatement(statements[j]);\r\n }\r\n if (!(fallsThrough || flow.is(FlowFlags.RETURNS))) {\r\n alwaysReturns = false; // ignore fall-throughs\r\n }\r\n if (!(fallsThrough || flow.is(FlowFlags.THROWS))) {\r\n alwaysThrows = false;\r\n }\r\n if (!(fallsThrough || flow.is(FlowFlags.ALLOCATES))) {\r\n alwaysAllocates = false;\r\n }\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.leaveBranchOrScope();\r\n\r\n currentBlock = module.createBlock(nextLabel, body, NativeType.None);\r\n }\r\n currentFunction.leaveBreakContext();\r\n\r\n // If the switch has a default and always returns, propagate that\r\n if (defaultIndex >= 0) {\r\n let flow = currentFunction.flow;\r\n if (alwaysReturns) flow.set(FlowFlags.RETURNS);\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 init: 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 init = this.compileExpression(declaration.initializer, type); // reports\r\n }\r\n } else if (declaration.initializer) { // infer type using void/NONE for proper literal inference\r\n init = this.compileExpression( // reports\r\n declaration.initializer,\r\n Type.void,\r\n ConversionKind.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 (init) {\r\n init = this.precomputeExpressionRef(init);\r\n if (_BinaryenExpressionGetId(init) == ExpressionId.Const) {\r\n let local = new Local(program, name, -1, type);\r\n switch (_BinaryenExpressionGetType(init)) {\r\n case NativeType.I32: {\r\n local = local.withConstantIntegerValue(_BinaryenConstGetValueI32(init), 0);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n local = local.withConstantIntegerValue(\r\n _BinaryenConstGetValueI64Low(init),\r\n _BinaryenConstGetValueI64High(init)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n local = local.withConstantFloatValue(_BinaryenConstGetValueF32(init));\r\n break;\r\n }\r\n case NativeType.F64: {\r\n local = local.withConstantFloatValue(_BinaryenConstGetValueF64(init));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n declaration.range\r\n );\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 if (\r\n declaration.isAny(CommonFlags.LET | CommonFlags.CONST) ||\r\n flow.is(FlowFlags.INLINE_CONTEXT)\r\n ) { // here: not top-level\r\n flow.addScopedLocal(type, name, declaration); // reports\r\n } else {\r\n currentFunction.addLocal(type, name, declaration); // reports\r\n }\r\n if (init) {\r\n initializers.push(this.compileAssignmentWithValue(declaration.name, init));\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, false);\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 = makeIsTrueish(\r\n this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE),\r\n this.currentType,\r\n module\r\n );\r\n\r\n // Eliminate unnecesssary loops in generic contexts if the condition is constant\r\n if (\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT) &&\r\n _BinaryenExpressionGetId(condExpr = this.precomputeExpressionRef(condExpr)) == ExpressionId.Const &&\r\n _BinaryenExpressionGetType(condExpr) == NativeType.I32\r\n ) {\r\n if (!_BinaryenConstGetValueI32(condExpr)) {\r\n return module.createNop();\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, module.createBlock(null, [\r\n body,\r\n module.createBreak(continueLabel)\r\n ], NativeType.None))\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 );\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 );\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.F32: {\r\n return this.module.createF32((element).constantFloatValue);\r\n }\r\n case TypeKind.F64: {\r\n return this.module.createF64((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 = ConversionKind.IMPLICIT,\r\n wrapSmallIntegers: bool = true\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, wrapSmallIntegers);\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.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(\r\n expression,\r\n contextualType,\r\n wrapSmallIntegers\r\n );\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, wrapSmallIntegers);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = this.module.createUnreachable();\r\n break;\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, expression);\r\n this.currentType = contextualType;\r\n }\r\n\r\n if (this.options.sourceMap) {\r\n addDebugLocation(expr, expression.range, this.module, this.currentFunction);\r\n }\r\n return expr;\r\n }\r\n\r\n compileExpressionRetainType(\r\n expression: Expression,\r\n contextualType: Type,\r\n wrapSmallIntegers: bool = true\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 wrapSmallIntegers\r\n );\r\n }\r\n\r\n precomputeExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind = ConversionKind.IMPLICIT\r\n ): ExpressionRef {\r\n return this.precomputeExpressionRef(this.compileExpression(expression, contextualType, conversionKind));\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 typeRef = module.getFunctionTypeBySignature(nativeType, null);\r\n var typeRefAdded = false;\r\n if (!typeRef) {\r\n typeRef = module.addFunctionType(type.toSignatureString(), nativeType, null);\r\n typeRefAdded = true;\r\n }\r\n var funcRef = module.addFunction(\"__precompute\", typeRef, null, expr);\r\n module.runPasses([ \"precompute\" ], funcRef);\r\n var ret = _BinaryenFunctionGetBody(funcRef);\r\n module.removeFunction(\"__precompute\");\r\n if (typeRefAdded) {\r\n // TODO: also remove the function type somehow if no longer used or make the C-API accept\r\n // a `null` typeRef, using an implicit type.\r\n }\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 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) {\r\n return module.createDrop(expr);\r\n }\r\n\r\n if (conversionKind == ConversionKind.IMPLICIT && !fromType.isAssignableTo(toType)) {\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 // TODO: make this a proper switch?\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 if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, module);\r\n }\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 if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, module);\r\n }\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 if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, module);\r\n }\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 if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, module);\r\n }\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 if (fromType.is(TypeFlags.LONG)) {\r\n\r\n // i64 to i32\r\n if (!toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.WrapI64, expr); // discards upper bits\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, module);\r\n }\r\n }\r\n\r\n // i32 to i64\r\n } else if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(toType.is(TypeFlags.SIGNED) ? UnaryOp.ExtendI32 : UnaryOp.ExtendU32, expr);\r\n\r\n // i32 or smaller to even smaller or same size int with change of sign\r\n } else if (\r\n toType.is(TypeFlags.SMALL) &&\r\n (\r\n fromType.size > toType.size ||\r\n (\r\n fromType.size == toType.size &&\r\n fromType.is(TypeFlags.SIGNED) != toType.is(TypeFlags.SIGNED)\r\n )\r\n )\r\n ) {\r\n expr = makeSmallIntegerWrap(expr, toType, module);\r\n }\r\n\r\n // otherwise (smaller) i32/u32 to (same size) i32/u32\r\n }\r\n\r\n this.currentType = toType;\r\n return 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);\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 wrapSmallIntegers: bool = true\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 condExpr: ExpressionRef;\r\n var expr: ExpressionRef;\r\n var compound = false;\r\n var possiblyOverflows = false;\r\n var tempLocal: Local | null = null;\r\n\r\n var operator = expression.operator;\r\n switch (operator) {\r\n case Token.LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\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, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\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, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\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, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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);\r\n leftType = this.currentType;\r\n\r\n // check operator overload\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, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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);\r\n leftType = this.currentType;\r\n\r\n if (operator == Token.EQUALS_EQUALS) { // check operator overload\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, right, expression);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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);\r\n leftType = this.currentType;\r\n\r\n if (operator == Token.EXCLAMATION_EQUALS) { // check operator overload\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, right, expression);\r\n break;\r\n }\r\n }\r\n }\r\n\r\n rightExpr = this.compileExpressionRetainType(right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\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(\r\n left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n leftType = this.currentType;\r\n\r\n // check operator overload\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, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n leftType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(\r\n right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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: possiblyOverflows = true;\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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(\r\n left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n leftType = this.currentType;\r\n\r\n // check operator overload\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, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n leftType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(\r\n right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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: possiblyOverflows = true;\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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(\r\n left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n leftType = this.currentType;\r\n\r\n // check operator overload\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, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n leftType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(\r\n right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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: possiblyOverflows = true;\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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(\r\n left,\r\n contextualType,\r\n true // must be wrapped\r\n );\r\n leftType = this.currentType;\r\n\r\n // check operator overload\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, right, expression);\r\n break;\r\n }\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 == Type.f32) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType\r\n );\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 left\r\n );\r\n rightExpr = this.compileExpression(\r\n right,\r\n Type.f64\r\n );\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(\r\n left,\r\n contextualType,\r\n true // TODO: when can division remain unwrapped? does it overflow?\r\n );\r\n leftType = this.currentType;\r\n\r\n // check operator overload\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, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n leftType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(\r\n right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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: possiblyOverflows = true;\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: possiblyOverflows = true;\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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(\r\n left,\r\n contextualType,\r\n true // TODO: when can remainder remain unwrapped? does it overflow?\r\n );\r\n leftType = this.currentType;\r\n\r\n // check operator overload\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, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n leftType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(\r\n right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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 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.U32:\r\n case TypeKind.BOOL: {\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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(\r\n left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\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: possiblyOverflows = true;\r\n default: {\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: // TODO: check operator overload\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 case TypeKind.VOID: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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(\r\n left,\r\n contextualType,\r\n true // must wrap small integers\r\n );\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n true // ^\r\n );\r\n switch (this.currentType.kind) {\r\n default: {\r\n // assumes signed shr on signed small integers does not overflow\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: // assumes unsigned shr on unsigned small integers does not overflow\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: { // TODO: check operator overload\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 case TypeKind.VOID: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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(\r\n left,\r\n contextualType,\r\n true // modifies low bits of small integers if unsigned\r\n );\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n true // ^\r\n );\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: possiblyOverflows = true;\r\n default: {\r\n // assumes that unsigned shr on unsigned small integers does not overflow\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: // TODO: check operator overload\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.VOID: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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(\r\n left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n leftType = this.currentType;\r\n\r\n // check operator overloadd\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.AND);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n leftType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(\r\n right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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: possiblyOverflows = true; // if left or right already did\r\n default: {\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.VOID: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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(\r\n left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.OR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n leftType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(\r\n right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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: possiblyOverflows = true; // if left or right already did\r\n default: {\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.VOID: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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(\r\n left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n leftType = this.currentType;\r\n\r\n // check operator overload\r\n let classReference = leftType.classReference;\r\n if (classReference) {\r\n let overload = classReference.lookupOverload(OperatorKind.XOR);\r\n if (overload) {\r\n expr = this.compileBinaryOverload(overload, left, right, expression);\r\n break;\r\n }\r\n }\r\n\r\n if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n leftType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n rightExpr = this.compileExpressionRetainType(\r\n right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\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: possiblyOverflows = true; // if left or right already did\r\n default: {\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.VOID: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\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(\r\n left,\r\n contextualType\r\n );\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false\r\n );\r\n\r\n // clone left if free of side effects\r\n expr = module.cloneExpression(leftExpr, true, 0);\r\n\r\n // if not possible, tee left to a temp. local\r\n if (!expr) {\r\n tempLocal = this.currentFunction.getAndFreeTempLocal(this.currentType);\r\n leftExpr = module.createTeeLocal(tempLocal.index, leftExpr);\r\n }\r\n\r\n possiblyOverflows = this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER);\r\n condExpr = makeIsTrueish(leftExpr, this.currentType, module);\r\n\r\n // simplify when cloning left without side effects was successful\r\n if (expr) {\r\n expr = module.createIf(\r\n condExpr, // left\r\n rightExpr, // ? right\r\n expr // : cloned left\r\n );\r\n }\r\n\r\n // otherwise make use of the temp. local\r\n else {\r\n expr = module.createIf(\r\n condExpr,\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(\r\n left,\r\n contextualType\r\n );\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false\r\n );\r\n\r\n // clone left if free of side effects\r\n expr = this.module.cloneExpression(leftExpr, true, 0);\r\n\r\n // if not possible, tee left to a temp. local\r\n if (!expr) {\r\n tempLocal = this.currentFunction.getAndFreeTempLocal(this.currentType);\r\n leftExpr = module.createTeeLocal(tempLocal.index, leftExpr);\r\n }\r\n\r\n possiblyOverflows = this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER); // if right did\r\n condExpr = makeIsTrueish(leftExpr, this.currentType, module);\r\n\r\n // simplify when cloning left without side effects was successful\r\n if (expr) {\r\n expr = this.module.createIf(\r\n condExpr, // left\r\n expr, // ? cloned left\r\n rightExpr // : right\r\n );\r\n }\r\n\r\n // otherwise make use of the temp. local\r\n else {\r\n expr = module.createIf(\r\n condExpr,\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = this.module.createUnreachable();\r\n break;\r\n }\r\n }\r\n if (possiblyOverflows && wrapSmallIntegers) {\r\n assert(this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER)); // must be a small int\r\n expr = makeSmallIntegerWrap(expr, this.currentType, module);\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 reportNode: Node\r\n ): ExpressionRef {\r\n // checks and recompiles the argument according to its actual annotated type\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 = this.compileExpression(value, (parent).type);\r\n argumentExpressions = [];\r\n } else {\r\n argumentExpressions = [ value ];\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 right: Expression,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n // checks and recompiles the arguments according to their actual annotated types\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 = this.compileExpression(left, (parent).type);\r\n argumentExpressions = [ right ];\r\n } else {\r\n argumentExpressions = [ left, right ];\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 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 elementType: 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 elementType = (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 elementType = 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 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 expression.range, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n elementType = indexedGet.signature.returnType;\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, elementType);\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 this.currentType = tee ? (target).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 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 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 );\r\n let type = (target).type;\r\n this.currentType = tee ? type : Type.void;\r\n let nativeType = type.toNativeType();\r\n if (tee) {\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(type);\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.size >> 3,\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.size >> 3,\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 );\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 );\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(returnType);\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 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 expression.range, target.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n let indexedSet = (target).lookupOverload(OperatorKind.INDEXED_SET);\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 );\r\n let elementExpr = this.compileExpression(\r\n elementExpression,\r\n Type.i32\r\n );\r\n if (tee) {\r\n let tempLocalTarget = this.currentFunction.getTempLocal(targetType);\r\n let tempLocalElement = this.currentFunction.getAndFreeTempLocal(this.currentType);\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.parameterTypes;\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.parameterTypes[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);\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);\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(argumentExpression, concreteType);\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 );\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 );\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(expression.expression, (target).type);\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 );\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 let thisLocal = flow.addScopedLocal((parent).type, \"this\");\r\n body.push(\r\n module.createSetLocal(thisLocal.index, thisArg)\r\n );\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i) {\r\n let argumentLocal = flow.addScopedLocal(parameterTypes[i], signature.getParameterName(i));\r\n body.push(\r\n module.createSetLocal(argumentLocal.index,\r\n this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i]\r\n )\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 argumentLocal = flow.addScopedLocal(parameterTypes[i], signature.getParameterName(i));\r\n body.push(\r\n module.createSetLocal(argumentLocal.index,\r\n this.compileExpression(\r\n assert(declaration.signature.parameterTypes[i].initializer),\r\n parameterTypes[i]\r\n )\r\n )\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) { // it's ok to unwrap the block here\r\n let statements = (bodyStatement).statements;\r\n for (let i = 0, k = statements.length; i < k; ++i) {\r\n body.push(this.compileStatement(statements[i]));\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 currentFunction.freeTempLocal(scopedLocal);\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 return\r\n 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 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.parameterTypes;\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(\"argumentCount\", NativeType.I32),\r\n module.createI32(minArguments)\r\n )\r\n : module.createGetGlobal(\"argumentCount\", 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 body = module.createBlock(names[i + 1], [\r\n body,\r\n module.createSetLocal(operandIndex,\r\n this.compileExpression(\r\n assert(originalParameterDeclarations[minArguments + i].initializer),\r\n type\r\n )\r\n )\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 /** 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 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 for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(parameterTypes[i].toNativeZero(module));\r\n }\r\n if (!isCallImport) { // call the trampoline\r\n instance = this.ensureTrampoline(instance);\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n let nativeReturnType = returnType.toNativeType();\r\n this.currentType = returnType;\r\n return module.createBlock(null, [\r\n this.ensureArgumentCount(numArguments),\r\n module.createCall(instance.internalName, operands, nativeReturnType)\r\n ], nativeReturnType);\r\n }\r\n }\r\n\r\n // otherwise just call through\r\n this.currentType = returnType;\r\n return isCallImport\r\n ? module.createCallImport(instance.internalName, operands, returnType.toNativeType())\r\n : module.createCall(instance.internalName, operands, returnType.toNativeType());\r\n }\r\n\r\n /** Compiles an indirect call using an index argument and a signature. */\r\n compileCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n numArguments,\r\n thisArg != 0,\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i]\r\n );\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 this.ensureArgumentCount(numArguments), // might still be calling a trampoline\r\n module.createCallIndirect(indexArg, operands, signature.toSignatureString())\r\n ], returnType.toNativeType());\r\n }\r\n\r\n /** Makes sure that the `argumentCount` helper global is present and returns an expression that sets it. */\r\n private ensureArgumentCount(argumentCount: i32): ExpressionRef {\r\n var module = this.module;\r\n if (!this.argumentCountRef) {\r\n this.argumentCountRef = module.addGlobal(\r\n \"argumentCount\",\r\n NativeType.I32,\r\n true,\r\n module.createI32(0)\r\n );\r\n }\r\n return module.createSetGlobal(\"argumentCount\", module.createI32(argumentCount));\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(expressions[i], Type.void); // drop all\r\n }\r\n exprs[numExpressions] = this.compileExpression(expressions[numExpressions], contextualType); // except last\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 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 expression.expression.range, (target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n let thisArg = this.compileExpression(expression.expression, (target).type);\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 // 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 currentFunction = this.currentFunction;\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 makeConditionalAllocate(this, 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 currentFunction = this.currentFunction;\r\n let flow = currentFunction.flow;\r\n if (flow.is(FlowFlags.INLINE_CONTEXT)) {\r\n let scopedThis = flow.getScopedLocal(\"this\");\r\n if (scopedThis) {\r\n let scopedThisClass = assert(scopedThis.type.classReference);\r\n let base = scopedThisClass.base;\r\n if (base) {\r\n this.currentType = base.type;\r\n return module.createGetLocal(scopedThis.index, base.type.toNativeType());\r\n }\r\n }\r\n }\r\n if (currentFunction.is(CommonFlags.INSTANCE)) {\r\n let parent = assert(currentFunction.parent);\r\n assert(parent.kind == ElementKind.CLASS);\r\n let base = (parent).base;\r\n if (base) {\r\n let superType = base.type;\r\n this.currentType = superType;\r\n return module.createGetLocal(0, superType.toNativeType());\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise resolve\r\n var target = this.program.resolveIdentifier( // reports\r\n expression,\r\n this.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 (target.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) {\r\n return compileBuiltinGetConstant(this, target, expression);\r\n }\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 this.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 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.compileStaticArray(\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 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\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 compileStaticArray(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 arrayType = (arrayPrototype).resolve([ elementType ]);\r\n if (!arrayType) return module.createUnreachable();\r\n\r\n var elementCount = expressions.length;\r\n var nativeType = elementType.toNativeType();\r\n var values: usize;\r\n var byteLength: usize;\r\n switch (nativeType) {\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // precompute value expressions\r\n var exprs = new Array(elementCount);\r\n var expr: BinaryenExpressionRef;\r\n for (let i = 0; i < elementCount; ++i) {\r\n exprs[i] = expressions[i]\r\n ? this.compileExpression(expressions[i], elementType)\r\n : elementType.toNativeZero(module);\r\n if (isStatic) {\r\n expr = this.precomputeExpressionRef(exprs[i]);\r\n if (_BinaryenExpressionGetId(expr) == ExpressionId.Const) {\r\n assert(_BinaryenExpressionGetType(expr) == nativeType);\r\n switch (nativeType) {\r\n case NativeType.I32: {\r\n changetype(values)[i] = _BinaryenConstGetValueI32(expr);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n changetype(values)[i] = i64_new(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n changetype(values)[i] = _BinaryenConstGetValueF32(expr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n changetype(values)[i] = _BinaryenConstGetValueF64(expr);\r\n break;\r\n }\r\n default: {\r\n assert(false); // checked above\r\n }\r\n }\r\n } else {\r\n // TODO: emit a warning if declared 'const'\r\n isStatic = false;\r\n }\r\n }\r\n }\r\n\r\n var usizeTypeSize = this.options.usizeType.byteSize;\r\n\r\n if (isStatic) {\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 (nativeType) {\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n assert(offset <= arraySize + bufferTotalSize);\r\n\r\n this.currentType = arrayType.type;\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 } else {\r\n // TODO: static elements *could* go into data segments while dynamic ones are initialized\r\n // on top? any benefits?\r\n throw new Error(\"not implemented\");\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 null,\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 = makeAllocate(this, 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 wrapSmallIntegers: bool = true\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 wrapSmallIntegers\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 (target.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) {\r\n return compileBuiltinGetConstant(this, target, propertyAccess);\r\n }\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 );\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 );\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\r\n var condExpr = makeIsTrueish(\r\n this.compileExpression(expression.condition, Type.u32, ConversionKind.NONE),\r\n this.currentType,\r\n this.module\r\n );\r\n\r\n // Eliminate unnecesssary branches in generic contexts if the condition is constant\r\n if (\r\n this.currentFunction.isAny(CommonFlags.GENERIC | CommonFlags.GENERIC_CONTEXT) &&\r\n _BinaryenExpressionGetId(condExpr = this.precomputeExpressionRef(condExpr)) == ExpressionId.Const &&\r\n _BinaryenExpressionGetType(condExpr) == NativeType.I32\r\n ) {\r\n return _BinaryenConstGetValueI32(condExpr)\r\n ? this.compileExpression(ifThen, contextualType)\r\n : this.compileExpression(ifElse, contextualType);\r\n }\r\n\r\n var currentFunction = this.currentFunction;\r\n var ifThenExpr: ExpressionRef;\r\n var ifElseExpr: ExpressionRef;\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.compileExpression(ifThen, contextualType);\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.compileExpression(ifElse, contextualType);\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.compileExpression(ifThen, contextualType);\r\n ifElseExpr = this.compileExpression(ifElse, contextualType);\r\n }\r\n\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 false // wrapped below\r\n );\r\n if (_BinaryenExpressionGetId(getValue) == ExpressionId.Unreachable) {\r\n // shortcut if compiling the getter already failed\r\n return getValue;\r\n }\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 var possiblyOverflows = false;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS_PLUS: {\r\n if (currentType.is(TypeFlags.REFERENCE)) {\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 switch (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: possiblyOverflows = true;\r\n default: {\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 case TypeKind.VOID: {\r\n assert(false);\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 break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n if (currentType.is(TypeFlags.REFERENCE)) {\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 switch (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: possiblyOverflows = true;\r\n default: {\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 case TypeKind.VOID: {\r\n assert(false);\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 break;\r\n }\r\n default: {\r\n assert(false);\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\r\n var setValue: ExpressionRef;\r\n var tempLocal: Local | null = null;\r\n\r\n // simplify if dropped anyway\r\n if (contextualType == Type.void) {\r\n setValue = module.createBinary(op,\r\n getValue,\r\n nativeOne\r\n );\r\n\r\n // otherwise use a temp local for the intermediate value\r\n } else {\r\n tempLocal = currentFunction.getTempLocal(currentType);\r\n setValue = module.createBinary(op,\r\n this.module.createGetLocal(tempLocal.index, nativeType),\r\n nativeOne\r\n );\r\n }\r\n\r\n if (possiblyOverflows) {\r\n assert(currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER));\r\n setValue = makeSmallIntegerWrap(setValue, currentType, module);\r\n }\r\n\r\n setValue = this.compileAssignmentWithValue(expression.operand, setValue, false);\r\n // ^ sets currentType = void\r\n if (contextualType == Type.void) {\r\n assert(!tempLocal);\r\n return setValue;\r\n }\r\n\r\n this.currentType = assert(tempLocal).type;\r\n currentFunction.freeTempLocal(tempLocal);\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);\r\n }\r\n\r\n compileUnaryPrefixExpression(\r\n expression: UnaryPrefixExpression,\r\n contextualType: Type,\r\n wrapSmallIntegers: bool = true\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var currentType = this.currentType;\r\n\r\n var possiblyOverflows = false;\r\n var compound = false;\r\n var expr: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS: {\r\n if (currentType.is(TypeFlags.REFERENCE)) {\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 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 false // wrapped below\r\n );\r\n currentType = this.currentType;\r\n possiblyOverflows = currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER); // if operand already did\r\n break;\r\n }\r\n case Token.MINUS: {\r\n if (currentType.is(TypeFlags.REFERENCE)) {\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 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 if (this.options.sourceMap) {\r\n // compileExpression normally does this\r\n addDebugLocation(expr, expression.range, module, this.currentFunction);\r\n }\r\n currentType = this.currentType;\r\n } else {\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 false // wrapped below\r\n );\r\n currentType = this.currentType;\r\n switch (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: possiblyOverflows = true; // or if operand already did\r\n default: {\r\n expr = module.createBinary(BinaryOp.SubI32, module.createI32(0), expr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (currentType.is(TypeFlags.REFERENCE)) {\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 // fall-through\r\n }\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 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 }\r\n }\r\n break;\r\n }\r\n case Token.PLUS_PLUS: {\r\n if (currentType.is(TypeFlags.REFERENCE)) {\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 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 false // wrapped below\r\n );\r\n currentType = this.currentType;\r\n switch (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: possiblyOverflows = true; // or if operand already did\r\n default: {\r\n expr = module.createBinary(BinaryOp.AddI32, expr, this.module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (currentType.is(TypeFlags.REFERENCE)) {\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 // fall-through\r\n }\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 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 }\r\n break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n if (currentType.is(TypeFlags.REFERENCE)) {\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 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 false // wrapped below\r\n );\r\n currentType = this.currentType;\r\n switch (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: possiblyOverflows = true; // or if operand already did\r\n default: {\r\n expr = module.createBinary(BinaryOp.SubI32, expr, module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (currentType.is(TypeFlags.REFERENCE)) {\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 // fall-through\r\n }\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 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 }\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 true // must wrap small integers\r\n );\r\n expr = makeIsFalseish(expr, this.currentType, module);\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.TILDE: {\r\n if (currentType.is(TypeFlags.REFERENCE)) {\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 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 false // retains low bits of small integers\r\n );\r\n currentType = this.currentType;\r\n switch (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: possiblyOverflows = true; // or if operand already did\r\n default: {\r\n expr = module.createBinary(BinaryOp.XorI32, expr, module.createI32(-1));\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (currentType.is(TypeFlags.REFERENCE)) {\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 // fall-through\r\n }\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 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 }\r\n break;\r\n }\r\n case Token.TYPEOF: {\r\n // it might make sense to implement typeof in a way that a generic function can detect\r\n // whether its type argument is a class type or string. that could then be used, for\r\n // example, to generate hash codes for sets and maps, depending on the kind of type\r\n // parameter we have. ideally the comparison would not involve actual string comparison and\r\n // limit available operations to hard-coded string literals.\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 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 if (possiblyOverflows && wrapSmallIntegers) {\r\n assert(currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER));\r\n expr = makeSmallIntegerWrap(expr, currentType, module);\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\r\n// helpers\r\n\r\nfunction mangleExportName(element: Element, explicitSimpleName: string | null = null): string {\r\n var simpleName = explicitSimpleName != null\r\n ? explicitSimpleName\r\n : element.simpleName;\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/** Adds the debug location of the specified expression at the specified range to the source map. */\r\nfunction addDebugLocation(expr: ExpressionRef, range: Range, module: Module, currentFunction: Function): void {\r\n var source = range.source;\r\n if (source.debugInfoIndex < 0) {\r\n source.debugInfoIndex = module.addDebugInfoFile(source.normalizedPath);\r\n }\r\n range.debugInfoRef = expr;\r\n if (!currentFunction.debugLocations) currentFunction.debugLocations = [];\r\n currentFunction.debugLocations.push(range);\r\n}\r\n\r\n/** Wraps a 32-bit integer expression so it evaluates to a valid value of the specified type. */\r\nexport function makeSmallIntegerWrap(expr: ExpressionRef, type: Type, module: Module): ExpressionRef {\r\n switch (type.kind) {\r\n case TypeKind.I8: {\r\n return 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 case TypeKind.I16: {\r\n return 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 case TypeKind.U8: {\r\n return module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xff)\r\n );\r\n }\r\n case TypeKind.U16: {\r\n return module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xffff)\r\n );\r\n }\r\n case TypeKind.BOOL: {\r\n return module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0x1)\r\n );\r\n }\r\n default: {\r\n assert(false);\r\n return expr;\r\n }\r\n }\r\n}\r\n\r\n/** Creates a comparison whether an expression is not 'true' in a broader sense. */\r\nexport function makeIsFalseish(expr: ExpressionRef, type: Type, module: Module): ExpressionRef {\r\n switch (type.kind) {\r\n default: { // any native i32\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 case TypeKind.VOID: {\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\nexport function makeIsTrueish(expr: ExpressionRef, type: Type, module: Module): ExpressionRef {\r\n switch (type.kind) {\r\n default: { // any native i32\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 case TypeKind.VOID: {\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\nexport function makeAllocate(compiler: Compiler, classInstance: Class, reportNode: Node): ExpressionRef {\r\n var module = compiler.module;\r\n var currentFunction = compiler.currentFunction;\r\n var nativeSizeType = compiler.options.nativeSizeType;\r\n\r\n var tempLocal = currentFunction.getTempLocal(classInstance.type);\r\n\r\n // allocate the necessary memory\r\n var initializers = new Array();\r\n initializers.push(\r\n module.createSetLocal(tempLocal.index,\r\n compileBuiltinAllocate(compiler, 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 compiler.compileExpression(fieldDeclaration.initializer, fieldType), // reports\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 compiler.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\nexport function makeConditionalAllocate(compiler: Compiler, classInstance: Class, reportNode: Node): ExpressionRef {\r\n // requires that `this` is the first local\r\n var module = compiler.module;\r\n var nativeSizeType = compiler.options.nativeSizeType;\r\n compiler.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 makeAllocate(compiler, classInstance, reportNode)\r\n )\r\n );\r\n}\r\n","/**\r\n * Generated from diagnosticsMessages.json. Do not edit.\r\n * @module diagnostics\r\n *//***/\r\n\r\n/* tslint:disable:max-line-length */\r\n\r\n/** Enum of available diagnostic codes. */\r\nexport enum DiagnosticCode {\r\n Operation_not_supported = 100,\r\n Operation_is_unsafe = 101,\r\n Conversion_from_type_0_to_1_requires_an_explicit_cast = 200,\r\n Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit = 201,\r\n Type_0_cannot_be_changed_to_type_1 = 202,\r\n Type_0_cannot_be_reinterpreted_as_type_1 = 203,\r\n Basic_type_0_cannot_be_nullable = 204,\r\n Cannot_export_a_mutable_global = 205,\r\n Compiling_constant_with_non_constant_initializer_as_mutable = 206,\r\n Unmanaged_classes_cannot_extend_managed_classes_and_vice_versa = 207,\r\n Unmanaged_classes_cannot_implement_interfaces = 208,\r\n Invalid_regular_expression_flags = 209,\r\n Implementation_0_must_match_the_signature_1 = 210,\r\n Class_0_is_sealed_and_cannot_be_extended = 211,\r\n Decorator_0_is_not_valid_here = 212,\r\n Duplicate_decorator = 213,\r\n Unterminated_string_literal = 1002,\r\n Identifier_expected = 1003,\r\n _0_expected = 1005,\r\n A_file_cannot_have_a_reference_to_itself = 1006,\r\n Trailing_comma_not_allowed = 1009,\r\n Unexpected_token = 1012,\r\n A_rest_parameter_must_be_last_in_a_parameter_list = 1014,\r\n Parameter_cannot_have_question_mark_and_initializer = 1015,\r\n A_required_parameter_cannot_follow_an_optional_parameter = 1016,\r\n Enum_member_must_have_initializer = 1061,\r\n Statements_are_not_allowed_in_ambient_contexts = 1036,\r\n Initializers_are_not_allowed_in_ambient_contexts = 1039,\r\n _0_modifier_cannot_be_used_here = 1042,\r\n A_rest_parameter_cannot_be_optional = 1047,\r\n A_rest_parameter_cannot_have_an_initializer = 1048,\r\n A_set_accessor_must_have_exactly_one_parameter = 1049,\r\n A_set_accessor_parameter_cannot_have_an_initializer = 1052,\r\n A_get_accessor_cannot_have_parameters = 1054,\r\n Type_parameters_cannot_appear_on_a_constructor_declaration = 1092,\r\n Type_annotation_cannot_appear_on_a_constructor_declaration = 1093,\r\n An_accessor_cannot_have_type_parameters = 1094,\r\n A_set_accessor_cannot_have_a_return_type_annotation = 1095,\r\n Type_parameter_list_cannot_be_empty = 1098,\r\n A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement = 1104,\r\n A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement = 1105,\r\n A_return_statement_can_only_be_used_within_a_function_body = 1108,\r\n Expression_expected = 1109,\r\n Type_expected = 1110,\r\n A_default_clause_cannot_appear_more_than_once_in_a_switch_statement = 1113,\r\n Duplicate_label_0 = 1114,\r\n Octal_literals_are_not_allowed_in_strict_mode = 1121,\r\n Digit_expected = 1124,\r\n Hexadecimal_digit_expected = 1125,\r\n Unexpected_end_of_text = 1126,\r\n Invalid_character = 1127,\r\n _case_or_default_expected = 1130,\r\n A_declare_modifier_cannot_be_used_in_an_already_ambient_context = 1038,\r\n Type_argument_expected = 1140,\r\n String_literal_expected = 1141,\r\n Line_break_not_permitted_here = 1142,\r\n Declaration_expected = 1146,\r\n _const_declarations_must_be_initialized = 1155,\r\n Unterminated_regular_expression_literal = 1161,\r\n Interface_declaration_cannot_have_implements_clause = 1176,\r\n Binary_digit_expected = 1177,\r\n Octal_digit_expected = 1178,\r\n An_implementation_cannot_be_declared_in_ambient_contexts = 1183,\r\n An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive = 1198,\r\n Unterminated_Unicode_escape_sequence = 1199,\r\n Decorators_are_not_valid_here = 1206,\r\n _abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration = 1242,\r\n A_class_may_only_extend_another_class = 1311,\r\n A_parameter_property_cannot_be_declared_using_a_rest_parameter = 1317,\r\n Duplicate_identifier_0 = 2300,\r\n Cannot_find_name_0 = 2304,\r\n Module_0_has_no_exported_member_1 = 2305,\r\n Generic_type_0_requires_1_type_argument_s = 2314,\r\n Type_0_is_not_generic = 2315,\r\n Type_0_is_not_assignable_to_type_1 = 2322,\r\n Index_signature_is_missing_in_type_0 = 2329,\r\n _this_cannot_be_referenced_in_current_location = 2332,\r\n _super_can_only_be_referenced_in_a_derived_class = 2335,\r\n Property_0_does_not_exist_on_type_1 = 2339,\r\n Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures = 2349,\r\n Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature = 2351,\r\n A_function_whose_declared_type_is_not_void_must_return_a_value = 2355,\r\n The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access = 2357,\r\n The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access = 2364,\r\n Operator_0_cannot_be_applied_to_types_1_and_2 = 2365,\r\n _get_and_set_accessor_must_have_the_same_type = 2380,\r\n Constructor_implementation_is_missing = 2390,\r\n Function_implementation_is_missing_or_not_immediately_following_the_declaration = 2391,\r\n Multiple_constructor_implementations_are_not_allowed = 2392,\r\n Duplicate_function_implementation = 2393,\r\n Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local = 2395,\r\n Type_0_has_no_property_1 = 2460,\r\n The_0_operator_cannot_be_applied_to_type_1 = 2469,\r\n Export_declaration_conflicts_with_exported_declaration_of_0 = 2484,\r\n Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property = 2540,\r\n The_target_of_an_assignment_must_be_a_variable_or_a_property_access = 2541,\r\n Index_signature_in_type_0_only_permits_reading = 2542,\r\n Expected_0_arguments_but_got_1 = 2554,\r\n Expected_at_least_0_arguments_but_got_1 = 2555,\r\n Expected_0_type_arguments_but_got_1 = 2558,\r\n A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums = 2651,\r\n Namespace_0_has_no_exported_member_1 = 2694,\r\n File_0_not_found = 6054\r\n}\r\n\r\n/** Translates a diagnostic code to its respective string. */\r\nexport function diagnosticCodeToString(code: DiagnosticCode): string {\r\n switch (code) {\r\n case 100: return \"Operation not supported.\";\r\n case 101: return \"Operation is unsafe.\";\r\n case 200: return \"Conversion from type '{0}' to '{1}' requires an explicit cast.\";\r\n case 201: return \"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.\";\r\n case 202: return \"Type '{0}' cannot be changed to type '{1}'.\";\r\n case 203: return \"Type '{0}' cannot be reinterpreted as type '{1}'.\";\r\n case 204: return \"Basic type '{0}' cannot be nullable.\";\r\n case 205: return \"Cannot export a mutable global.\";\r\n case 206: return \"Compiling constant with non-constant initializer as mutable.\";\r\n case 207: return \"Unmanaged classes cannot extend managed classes and vice-versa.\";\r\n case 208: return \"Unmanaged classes cannot implement interfaces.\";\r\n case 209: return \"Invalid regular expression flags.\";\r\n case 210: return \"Implementation '{0}' must match the signature '{1}'.\";\r\n case 211: return \"Class '{0}' is sealed and cannot be extended.\";\r\n case 212: return \"Decorator '{0}' is not valid here.\";\r\n case 213: return \"Duplicate decorator.\";\r\n case 1002: return \"Unterminated string literal.\";\r\n case 1003: return \"Identifier expected.\";\r\n case 1005: return \"'{0}' expected.\";\r\n case 1006: return \"A file cannot have a reference to itself.\";\r\n case 1009: return \"Trailing comma not allowed.\";\r\n case 1012: return \"Unexpected token.\";\r\n case 1014: return \"A rest parameter must be last in a parameter list.\";\r\n case 1015: return \"Parameter cannot have question mark and initializer.\";\r\n case 1016: return \"A required parameter cannot follow an optional parameter.\";\r\n case 1061: return \"Enum member must have initializer.\";\r\n case 1036: return \"Statements are not allowed in ambient contexts.\";\r\n case 1039: return \"Initializers are not allowed in ambient contexts.\";\r\n case 1042: return \"'{0}' modifier cannot be used here.\";\r\n case 1047: return \"A rest parameter cannot be optional.\";\r\n case 1048: return \"A rest parameter cannot have an initializer.\";\r\n case 1049: return \"A 'set' accessor must have exactly one parameter.\";\r\n case 1052: return \"A 'set' accessor parameter cannot have an initializer.\";\r\n case 1054: return \"A 'get' accessor cannot have parameters.\";\r\n case 1092: return \"Type parameters cannot appear on a constructor declaration.\";\r\n case 1093: return \"Type annotation cannot appear on a constructor declaration.\";\r\n case 1094: return \"An accessor cannot have type parameters.\";\r\n case 1095: return \"A 'set' accessor cannot have a return type annotation.\";\r\n case 1098: return \"Type parameter list cannot be empty.\";\r\n case 1104: return \"A 'continue' statement can only be used within an enclosing iteration statement.\";\r\n case 1105: return \"A 'break' statement can only be used within an enclosing iteration or switch statement.\";\r\n case 1108: return \"A 'return' statement can only be used within a function body.\";\r\n case 1109: return \"Expression expected.\";\r\n case 1110: return \"Type expected.\";\r\n case 1113: return \"A 'default' clause cannot appear more than once in a 'switch' statement.\";\r\n case 1114: return \"Duplicate label '{0}'.\";\r\n case 1121: return \"Octal literals are not allowed in strict mode.\";\r\n case 1124: return \"Digit expected.\";\r\n case 1125: return \"Hexadecimal digit expected.\";\r\n case 1126: return \"Unexpected end of text.\";\r\n case 1127: return \"Invalid character.\";\r\n case 1130: return \"'case' or 'default' expected.\";\r\n case 1038: return \"A 'declare' modifier cannot be used in an already ambient context.\";\r\n case 1140: return \"Type argument expected.\";\r\n case 1141: return \"String literal expected.\";\r\n case 1142: return \"Line break not permitted here.\";\r\n case 1146: return \"Declaration expected.\";\r\n case 1155: return \"'const' declarations must be initialized.\";\r\n case 1161: return \"Unterminated regular expression literal.\";\r\n case 1176: return \"Interface declaration cannot have 'implements' clause.\";\r\n case 1177: return \"Binary digit expected.\";\r\n case 1178: return \"Octal digit expected.\";\r\n case 1183: return \"An implementation cannot be declared in ambient contexts.\";\r\n case 1198: return \"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.\";\r\n case 1199: return \"Unterminated Unicode escape sequence.\";\r\n case 1206: return \"Decorators are not valid here.\";\r\n case 1242: return \"'abstract' modifier can only appear on a class, method, or property declaration.\";\r\n case 1311: return \"A class may only extend another class.\";\r\n case 1317: return \"A parameter property cannot be declared using a rest parameter.\";\r\n case 2300: return \"Duplicate identifier '{0}'.\";\r\n case 2304: return \"Cannot find name '{0}'.\";\r\n case 2305: return \"Module '{0}' has no exported member '{1}'.\";\r\n case 2314: return \"Generic type '{0}' requires {1} type argument(s).\";\r\n case 2315: return \"Type '{0}' is not generic.\";\r\n case 2322: return \"Type '{0}' is not assignable to type '{1}'.\";\r\n case 2329: return \"Index signature is missing in type '{0}'.\";\r\n case 2332: return \"'this' cannot be referenced in current location.\";\r\n case 2335: return \"'super' can only be referenced in a derived class.\";\r\n case 2339: return \"Property '{0}' does not exist on type '{1}'.\";\r\n case 2349: return \"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.\";\r\n case 2351: return \"Cannot use 'new' with an expression whose type lacks a construct signature.\";\r\n case 2355: return \"A function whose declared type is not 'void' must return a value.\";\r\n case 2357: return \"The operand of an increment or decrement operator must be a variable or a property access.\";\r\n case 2364: return \"The left-hand side of an assignment expression must be a variable or a property access.\";\r\n case 2365: return \"Operator '{0}' cannot be applied to types '{1}' and '{2}'.\";\r\n case 2380: return \"'get' and 'set' accessor must have the same type.\";\r\n case 2390: return \"Constructor implementation is missing.\";\r\n case 2391: return \"Function implementation is missing or not immediately following the declaration.\";\r\n case 2392: return \"Multiple constructor implementations are not allowed.\";\r\n case 2393: return \"Duplicate function implementation.\";\r\n case 2395: return \"Individual declarations in merged declaration '{0}' must be all exported or all local.\";\r\n case 2460: return \"Type '{0}' has no property '{1}'.\";\r\n case 2469: return \"The '{0}' operator cannot be applied to type '{1}'.\";\r\n case 2484: return \"Export declaration conflicts with exported declaration of '{0}'.\";\r\n case 2540: return \"Cannot assign to '{0}' because it is a constant or a read-only property.\";\r\n case 2541: return \"The target of an assignment must be a variable or a property access.\";\r\n case 2542: return \"Index signature in type '{0}' only permits reading.\";\r\n case 2554: return \"Expected {0} arguments, but got {1}.\";\r\n case 2555: return \"Expected at least {0} arguments, but got {1}.\";\r\n case 2558: return \"Expected {0} type arguments, but got {1}.\";\r\n case 2651: return \"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.\";\r\n case 2694: return \"Namespace '{0}' has no exported member '{1}'.\";\r\n case 6054: return \"File '{0}' not found.\";\r\n default: return \"\";\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} 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 /** Log of source file names to be requested. */\r\n backlog: string[] = new Array();\r\n /** Log of source file names already processed. */\r\n seenlog: 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 program = this.program;\r\n\r\n // check if already parsed\r\n var normalizedPath = normalizePath(path);\r\n var internalPath = mangleInternalPath(normalizedPath);\r\n var sources = program.sources;\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n if (sources[i].internalPath == internalPath) return;\r\n }\r\n this.seenlog.add(internalPath);\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 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 (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 tn.next();\r\n flags |= CommonFlags.ABSTRACT;\r\n if (!tn.skip(Token.CLASS)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"class\"\r\n );\r\n break;\r\n }\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 tn.next();\r\n statement = this.parseNamespace(tn, flags, decorators, startPos);\r\n decorators = null;\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: {\r\n tn.next();\r\n statement = this.parseTypeDeclaration(tn, flags, decorators, startPos);\r\n decorators = null;\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 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 // 'void'\r\n if (token == Token.VOID) {\r\n return Node.createType(\r\n Node.createIdentifierExpression(\"void\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n }\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 // '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.skip(Token.IDENTIFIER)) {\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.skip(Token.IDENTIFIER)) {\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.skip(Token.IDENTIFIER)) {\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.skip(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 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 if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseEnumValue(tn, CommonFlags.NONE);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEBRACE)) {\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 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.skip(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 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 if (!tn.skip(Token.GREATERTHAN)) {\r\n do {\r\n let typeParameter = this.parseTypeParameter(tn);\r\n if (!typeParameter) return null;\r\n typeParameters.push(typeParameter);\r\n } while (tn.skip(Token.COMMA));\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 } else {\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 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\r\n if (tn.peek() != Token.CLOSEPAREN) {\r\n do {\r\n let param = this.parseParameter(tn, isConstructor);\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 } while (tn.skip(Token.COMMA));\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 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 (tn.skip(Token.PUBLIC)) {\r\n startRange = tn.range();\r\n if (!isConstructor) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n startRange, \"public\"\r\n );\r\n }\r\n accessFlags |= CommonFlags.PUBLIC;\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n startRange = tn.range();\r\n if (!isConstructor) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n startRange, \"protected\"\r\n );\r\n }\r\n accessFlags |= CommonFlags.PROTECTED;\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n startRange = tn.range();\r\n if (!isConstructor) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n startRange, \"private\"\r\n );\r\n }\r\n accessFlags |= CommonFlags.PRIVATE;\r\n }\r\n if (tn.skip(Token.READONLY)) {\r\n if (!startRange) startRange = tn.range();\r\n if (!isConstructor) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n startRange, \"readonly\"\r\n );\r\n }\r\n accessFlags |= CommonFlags.READONLY;\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.skip(Token.IDENTIFIER)) {\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.skip(Token.IDENTIFIER)) {\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\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 null,\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.skip(Token.IDENTIFIER)) {\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,\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.skip(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\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, true) == 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, true) == 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.skip(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\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 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 null,\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.skip(Token.IDENTIFIER)) {\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 if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseExportMember(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEBRACE)) {\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 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.skip(Token.IDENTIFIER)) {\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.skip(Token.IDENTIFIER)) {\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 if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseImportDeclaration(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEBRACE)) {\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 } else if (tn.skip(Token.ASTERISK)) {\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\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.skip(Token.IDENTIFIER)) {\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.skip(Token.IDENTIFIER)) {\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.skip(Token.IDENTIFIER)) {\r\n let asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\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.TYPE: {\r\n statement = this.parseTypeDeclaration(tn, CommonFlags.NONE, null, tn.tokenPos);\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 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(true);\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(true);\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.skip(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 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.skip(Token.IDENTIFIER)) {\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(true);\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(true)) {\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 if (!tn.skip(Token.CLOSEBRACKET)) {\r\n do {\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.peek() == Token.CLOSEBRACKET) break;\r\n } while (tn.skip(Token.COMMA));\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 }\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 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 if (!tn.skip(Token.CLOSEPAREN)) {\r\n do {\r\n let expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n args.push(expr);\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 return null;\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);\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 // ElementAccessExpression\r\n case Token.OPENBRACKET: {\r\n next = this.parseExpression(tn);\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);\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.CLOSEBRACE // current step should handle this\r\n ) {\r\n break;\r\n }\r\n if (nextToken == Token.SEMICOLON) { // end of the statement for sure\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\r\n /** Constructs a new Element walker. */\r\n constructor(program: Program) {\r\n this.program = program;\r\n }\r\n\r\n walk(): void {\r\n for (let element of this.program.moduleLevelExports.values()) this.visitElement(element);\r\n }\r\n\r\n visitElement(element: Element): void {\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.visitCompiledFunctions(element);\r\n break;\r\n }\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n this.visitCompiledClasses(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.visitCompiledFunctions(getter);\r\n let setter = prop.setterPrototype;\r\n if (setter) this.visitCompiledFunctions(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 visitCompiledFunctions(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 visitCompiledClasses(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 seen: Set = new Set();\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program) {\r\n super(program);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n if (this.seen.has(element)) return;\r\n this.seen.add(element);\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 if (this.seen.has(element)) return;\r\n this.seen.add(element);\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 if (this.seen.has(element)) return;\r\n this.seen.add(element);\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 if (this.seen.has(element)) return;\r\n this.seen.add(element);\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 if (this.seen.has(element)) return;\r\n this.seen.add(element);\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 seen: Set = new Set();\r\n private indentLevel: i32 = 0;\r\n\r\n /** Constructs a new WebIDL builder. */\r\n constructor(program: Program) {\r\n super(program);\r\n }\r\n\r\n visitGlobal(element: Global): void {\r\n if (this.seen.has(element)) return;\r\n this.seen.add(element);\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 assert(false);\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 if (this.seen.has(element)) return;\r\n this.seen.add(element);\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 this.seen.add(member);\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 (this.seen.has(element)) return;\r\n this.seen.add(element);\r\n if (element.is(CommonFlags.PRIVATE)) 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(\"get \");\r\n sb.push(element.prototype.declaration.name.text); // 'get:funcName' internally\r\n } else if (element.is(CommonFlags.SET)) {\r\n sb.push(\"set \");\r\n sb.push(element.prototype.declaration.name.text);\r\n } else {\r\n if (!element.is(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 if (this.seen.has(element)) return;\r\n this.seen.add(element);\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)) {\r\n sb.push(\"abstract \");\r\n }\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 /* TBD: the compiler implicitly generates setters if the class is exported\r\n indent(sb, this.indentLevel);\r\n sb.push(\"get \");\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 if (!element.is(CommonFlags.READONLY)) {\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(\"set \");\r\n sb.push(element.simpleName);\r\n sb.push(\"(\");\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 }\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 return this.sb.join(\"\");\r\n }\r\n}\r\n\r\n// TODO: C bindings? or is this sufficiently covered by WebIDL and using a 3rd-party tool?\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 readString\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 = readString(_BinaryenFunctionGetName(func)) || \"$\" + this.functionId.toString(10);\r\n var body = _BinaryenFunctionGetBody(func);\r\n this.push(\"function \");\r\n this.push(name);\r\n this.push(\"(\");\r\n for (let i: Index = 0, k: Index = _BinaryenFunctionGetNumParams(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(_BinaryenFunctionGetParam(func, i)));\r\n }\r\n this.push(\"): \");\r\n this.push(nativeTypeToType(_BinaryenFunctionGetResult(func)));\r\n this.push(\" \");\r\n if (_BinaryenExpressionGetId(body) != ExpressionId.Block) {\r\n this.push(\"{\\n\");\r\n }\r\n this.decompileExpression(body);\r\n if (_BinaryenExpressionGetId(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 = _BinaryenExpressionGetId(expr);\r\n var type = _BinaryenExpressionGetType(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 = readString(_BinaryenBlockGetName(expr))) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"{\\n\");\r\n k = _BinaryenBlockGetNumChildren(expr);\r\n for (i = 0; i < k; ++i) {\r\n this.decompileExpression(_BinaryenBlockGetChild(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(_BinaryenIfGetCondition(expr));\r\n this.push(\") \");\r\n this.decompileExpression(_BinaryenIfGetIfTrue(expr));\r\n if (nested = _BinaryenIfGetIfFalse(expr)) {\r\n this.push(\" else \");\r\n this.decompileExpression(nested);\r\n }\r\n } else {\r\n this.decompileExpression(_BinaryenIfGetCondition(expr));\r\n this.push(\" ? \");\r\n this.decompileExpression(_BinaryenIfGetIfTrue(expr));\r\n this.push(\" : \");\r\n this.decompileExpression(_BinaryenIfGetIfFalse(expr));\r\n }\r\n return;\r\n }\r\n case ExpressionId.Loop: {\r\n if ((string = readString(_BinaryenLoopGetName(expr))) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"do \");\r\n this.decompileExpression(_BinaryenLoopGetBody(expr));\r\n this.push(\"while (0);\\n\");\r\n }\r\n case ExpressionId.Break: {\r\n if (nested = _BinaryenBreakGetCondition(expr)) {\r\n this.push(\"if (\");\r\n this.decompileExpression(nested);\r\n this.push(\") \");\r\n }\r\n if ((string = readString(_BinaryenBreakGetName(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(_BinaryenGetLocalGetIndex(expr).toString(10));\r\n return;\r\n }\r\n case ExpressionId.SetLocal: {\r\n this.push(\"$\");\r\n this.push(_BinaryenSetLocalGetIndex(expr).toString(10));\r\n this.push(\" = \");\r\n this.decompileExpression(_BinaryenSetLocalGetValue(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(_BinaryenLoadGetOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(_BinaryenLoadGetPtr(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(_BinaryenStoreGetOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(_BinaryenStoreGetPtr(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenStoreGetValue(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(_BinaryenConstGetValueI32(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 _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n )\r\n )\r\n );\r\n return;\r\n }\r\n case NativeType.F32: {\r\n this.push(_BinaryenConstGetValueF32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.F64: {\r\n this.push(_BinaryenConstGetValueF64(expr).toString(10));\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Unary: {\r\n switch (_BinaryenUnaryGetOp(expr)) {\r\n case UnaryOp.ClzI32: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI32: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI32: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(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(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.AbsF32: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF32: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF32: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF32: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF32: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF32: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(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(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ClzI64: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI64: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI64: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.AbsF64: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF64: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF64: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF64: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF64: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF64: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ExtendI32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ExtendU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.WrapI64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.PromoteF32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.DemoteF64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(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 (_BinaryenBinaryGetOp(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(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" + \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(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(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" - \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(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(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" * \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(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(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemI64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.AndI32:\r\n case BinaryOp.AndI64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" & \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.OrI32:\r\n case BinaryOp.OrI64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" | \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.XorI32:\r\n case BinaryOp.XorI64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" ^ \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShlI32:\r\n case BinaryOp.ShlI64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" << \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrU32:\r\n case BinaryOp.ShrU64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >>> \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrI32:\r\n case BinaryOp.ShrI64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >> \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI32: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI32: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(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(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" == \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(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(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" != \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(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(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(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(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(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(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(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(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI64: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI64: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.LtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.CopysignF32: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF32: {\r\n this.push(\"min(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF32: {\r\n this.push(\"max(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.CopysignF64: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF64: {\r\n this.push(\"min(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF64: {\r\n this.push(\"max(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(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(_BinaryenSelectGetIfTrue(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenSelectGetIfFalse(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenSelectGetCondition(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Drop: {\r\n this.decompileExpression(_BinaryenDropGetValue(expr));\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Return: {\r\n if (nested = _BinaryenReturnGetValue(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 (_BinaryenHostGetOp(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(_BinaryenHostGetOperand(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} 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/** 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_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_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\nimport {\r\n Compiler,\r\n ConversionKind,\r\n\r\n makeSmallIntegerWrap\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} from \"./module\";\r\n\r\nimport {\r\n ElementKind,\r\n Global,\r\n FunctionPrototype,\r\n Class,\r\n Field,\r\n OperatorKind\r\n} from \"./program\";\r\n\r\n/** Compiles a get of a built-in global. */\r\nexport function compileGetConstant(\r\n compiler: Compiler,\r\n global: Global,\r\n reportNode: Node\r\n): ExpressionRef {\r\n switch (global.internalName) {\r\n case \"NaN\": { // context-sensitive\r\n if (compiler.currentType == Type.f32) {\r\n return compiler.module.createF32(NaN);\r\n } else {\r\n compiler.currentType = Type.f64;\r\n return compiler.module.createF64(NaN);\r\n }\r\n }\r\n case \"Infinity\": { // context-sensitive\r\n if (compiler.currentType == Type.f32) {\r\n return compiler.module.createF32(Infinity);\r\n } else {\r\n compiler.currentType = Type.f64;\r\n return compiler.module.createF64(Infinity);\r\n }\r\n }\r\n case \"HEAP_BASE\": { // never inlined for linking purposes\r\n compiler.currentType = compiler.options.usizeType;\r\n return compiler.module.createGetGlobal(\"HEAP_BASE\", compiler.currentType.toNativeType());\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return compiler.module.createUnreachable();\r\n}\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 \"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 \"isNaN\": { // isNaN(value: T) -> bool\r\n compiler.currentType = Type.bool;\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.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 module.createUnreachable();\r\n }\r\n if (typeArguments) {\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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.F32: {\r\n ret = module.createBinary(\r\n BinaryOp.GtU32,\r\n module.createBinary(\r\n BinaryOp.AndI32,\r\n module.createUnary(UnaryOp.ReinterpretF32, arg0),\r\n module.createI32(0x7FFFFFFF)\r\n ),\r\n module.createI32(0x7F800000)\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(\r\n BinaryOp.GtU64,\r\n module.createBinary(\r\n BinaryOp.AndI64,\r\n module.createUnary(UnaryOp.ReinterpretF64, arg0),\r\n module.createI64(0xFFFFFFFF, 0x7FFFFFFF)\r\n ),\r\n module.createI64(0, 0x7FF00000)\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 = module.createUnreachable();\r\n break;\r\n }\r\n default: { // every other type is never NaN\r\n ret = module.createI32(0);\r\n break;\r\n }\r\n }\r\n compiler.currentType = Type.bool;\r\n return ret;\r\n }\r\n case \"isFinite\": { // isFinite(value: T) -> bool\r\n compiler.currentType = Type.bool;\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.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 module.createUnreachable();\r\n }\r\n if (typeArguments) {\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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.F32: {\r\n ret = module.createBinary(\r\n BinaryOp.LtU32,\r\n module.createBinary(\r\n BinaryOp.AndI32,\r\n module.createUnary(UnaryOp.ReinterpretF32, arg0),\r\n module.createI32(0x7FFFFFFF)\r\n ),\r\n module.createI32(0x7F800000)\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(\r\n BinaryOp.LtU64,\r\n module.createBinary(\r\n BinaryOp.AndI64,\r\n module.createUnary(UnaryOp.ReinterpretF64, arg0),\r\n module.createI64(0xFFFFFFFF, 0x7FFFFFFF)\r\n ),\r\n module.createI64(0, 0x7FF00000)\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 = module.createUnreachable();\r\n break;\r\n }\r\n default: { // every other type is always finite\r\n ret = module.createI32(1);\r\n break;\r\n }\r\n }\r\n compiler.currentType = Type.bool;\r\n return ret;\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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\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 case TypeKind.F32:\r\n case TypeKind.F64:\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 \"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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\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 case TypeKind.F32:\r\n case TypeKind.F64:\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 \"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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\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 case TypeKind.F32:\r\n case TypeKind.F64:\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 \"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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\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 = makeSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotlI32, arg0, arg1),\r\n compiler.currentType,\r\n module\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;\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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\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 = makeSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotrI32, arg0, arg1),\r\n compiler.currentType,\r\n module\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;\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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n // doesn't need sign-extension here because ifFalse below is either positive\r\n // or MIN_VALUE (-MIN_VALUE == MIN_VALUE) if selected\r\n case TypeKind.I32: {\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\r\n ret = module.createSelect(\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);\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);\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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i32);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\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 tempLocal0 = compiler.currentFunction.getTempLocal(Type.i32);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\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);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64);\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);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64);\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);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\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);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n let tempLocal0 = compiler.currentFunction.getTempLocal(Type.i32);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\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 tempLocal0 = compiler.currentFunction.getTempLocal(Type.i32);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\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);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64);\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);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(Type.i64);\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);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\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);\r\n let tempLocal1 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.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);\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);\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 );\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.u32);\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.u64);\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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.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(operands[0], compiler.options.usizeType);\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(operands[0], compiler.options.usizeType);\r\n arg1 = compiler.compileExpression(\r\n operands[1],\r\n typeArguments[0],\r\n typeArguments[0].is(TypeFlags.INTEGER)\r\n ? ConversionKind.NONE // wraps a larger integer type to a smaller one, i.e. i32.store8\r\n : ConversionKind.IMPLICIT\r\n );\r\n let type: Type;\r\n if (\r\n compiler.currentType.is(TypeFlags.INTEGER) &&\r\n typeArguments[0].is(TypeFlags.INTEGER) &&\r\n typeArguments[0].size > compiler.currentType.size\r\n ) {\r\n arg1 = compiler.convertExpression(\r\n arg1,\r\n compiler.currentType, typeArguments[0],\r\n ConversionKind.IMPLICIT,\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]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n let type = compiler.currentType;\r\n arg1 = compiler.compileExpression(operands[1], type);\r\n arg2 = compiler.compileExpression(operands[2], Type.i32);\r\n compiler.currentType = type;\r\n switch (compiler.currentType.kind) {\r\n default: { // any 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);\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(operands[0], compiler.options.usizeType);\r\n arg1 = compiler.compileExpression(operands[1], compiler.options.usizeType);\r\n arg2 = compiler.compileExpression(operands[2], compiler.options.usizeType);\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: u32, 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(operands[0], compiler.options.usizeType);\r\n arg1 = compiler.compileExpression(operands[1], Type.u32);\r\n arg2 = compiler.compileExpression(operands[2], compiler.options.usizeType);\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 } else if (typeArguments[0].kind != TypeKind.USIZE) { // any usize\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 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.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.NONE\r\n );\r\n compiler.currentType = typeArguments[0];\r\n if (compiler.currentType.kind != TypeKind.USIZE) {\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]);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.i32);\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 default: { // any integer up to 32-bits incl. bool\r\n let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI32,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal.index, NativeType.I32)\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);\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);\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);\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);\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\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(operands[0], Type.i8, ConversionKind.EXPLICIT);\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(operands[0], Type.i16, ConversionKind.EXPLICIT);\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(operands[0], Type.i32, ConversionKind.EXPLICIT);\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(operands[0], Type.i64, ConversionKind.EXPLICIT);\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 );\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(operands[0], Type.u8, ConversionKind.EXPLICIT);\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(operands[0], Type.u16, ConversionKind.EXPLICIT);\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(operands[0], Type.u32, ConversionKind.EXPLICIT);\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(operands[0], Type.u64, ConversionKind.EXPLICIT);\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 );\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(operands[0], Type.bool, ConversionKind.EXPLICIT);\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(operands[0], Type.f32, ConversionKind.EXPLICIT);\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(operands[0], Type.f64, ConversionKind.EXPLICIT);\r\n }\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\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, false);\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, false);\r\n }\r\n } else {\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, false);\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\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);\r\n if (\r\n _BinaryenExpressionGetId(expr) != ExpressionId.Const ||\r\n _BinaryenExpressionGetType(expr) != NativeType.I64 ||\r\n _BinaryenConstGetValueI64High(expr) != 0 ||\r\n (value = _BinaryenConstGetValueI64Low(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);\r\n if (\r\n _BinaryenExpressionGetId(expr) != ExpressionId.Const ||\r\n _BinaryenExpressionGetType(expr) != NativeType.I32 ||\r\n (value = _BinaryenConstGetValueI32(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 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)\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))\r\n return 0;\r\n if (HEAP_OFFSET + size > HEAP.length) {\r\n var oldHeap = HEAP;\r\n HEAP = new Uint8Array(Math.max(65536, HEAP.length + size, HEAP.length * 2));\r\n HEAP.set(oldHeap);\r\n }\r\n var ptr = HEAP_OFFSET;\r\n if ((HEAP_OFFSET += size) & 7)\r\n HEAP_OFFSET = (HEAP_OFFSET | 7) + 1;\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, n) {\r\n HEAP.copyWithin(dest, src, src + n);\r\n };\r\n\r\n globalScope[\"store\"] = function store(ptr, val, off) {\r\n if (typeof off === \"number\")\r\n ptr += off;\r\n HEAP[ptr] = val;\r\n };\r\n\r\n globalScope[\"load\"] = function load(ptr) {\r\n if (typeof off === \"number\")\r\n ptr += off;\r\n return HEAP[ptr];\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[\"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\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[\"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[\"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/compiler.ts b/src/compiler.ts index 60d8126f..66da0ca6 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -7,7 +7,7 @@ import { compileCall as compileBuiltinCall, compileGetConstant as compileBuiltinGetConstant, compileAllocate as compileBuiltinAllocate, - compileAbort + compileAbort as compileBuiltinAbort } from "./builtins"; import { @@ -32,6 +32,7 @@ import { Program, ClassPrototype, Class, + Element, ElementKind, Enum, Field, @@ -52,7 +53,11 @@ import { DecoratorFlags, PATH_DELIMITER, - INNER_DELIMITER + INNER_DELIMITER, + INSTANCE_DELIMITER, + STATIC_DELIMITER, + GETTER_PREFIX, + SETTER_PREFIX } from "./program"; import { @@ -272,10 +277,14 @@ export class Compiler extends DiagnosticEmitter { // compile the start function if not empty var startFunctionBody = this.startFunctionBody; if (startFunctionBody.length) { - let typeRef = this.ensureFunctionType(startFunctionInstance.signature); + let signature = startFunctionInstance.signature; let funcRef = module.addFunction( startFunctionInstance.internalName, - typeRef, + this.ensureFunctionType( + signature.parameterTypes, + signature.returnType, + signature.thisType + ), typesToNativeTypes(startFunctionInstance.additionalLocals), module.createBlock(null, startFunctionBody) ); @@ -510,8 +519,8 @@ export class Compiler extends DiagnosticEmitter { global.set(CommonFlags.MODULE_IMPORT); module.addGlobalImport( global.internalName, - global.namespace - ? global.namespace.simpleName + global.parent + ? global.parent.simpleName : "env", global.simpleName, nativeType @@ -609,21 +618,15 @@ export class Compiler extends DiagnosticEmitter { DiagnosticCode.Operation_not_supported, assert(global.declaration).range ); - global.constantValueKind = ConstantValueKind.INTEGER; - global.constantIntegerValue = i64_new(0); - break; + return false; } } global.set(CommonFlags.INLINED); // inline the value from now on - if (declaration) { - if (declaration.isTopLevel) { // but keep the element as it might be re-exported - module.addGlobal(internalName, nativeType, false, initExpr); - } - if (declaration.range.source.isEntry && declaration.isTopLevelExport) { - module.addGlobalExport(global.internalName, declaration.programLevelInternalName); - } - } else { - assert(false); // must have a declaration if constant + if (global.is(CommonFlags.MODULE_EXPORT)) { + module.addGlobal(internalName, nativeType, false, initExpr); + module.addGlobalExport(internalName, mangleExportName(global)); + } else if (declaration && declaration.isTopLevel) { // might become re-exported + module.addGlobal(internalName, nativeType, false, initExpr); } } else /* mutable */ { @@ -726,9 +729,9 @@ export class Compiler extends DiagnosticEmitter { previousValue = val; // export values if the enum is exported - if (element.declaration.range.source.isEntry && element.declaration.isTopLevelExport) { + if (element.is(CommonFlags.MODULE_EXPORT)) { if (member.is(CommonFlags.INLINED)) { - module.addGlobalExport(member.internalName, member.internalName); + module.addGlobalExport(member.internalName, mangleExportName(member)); } else if (valueDeclaration) { this.warning( DiagnosticCode.Cannot_export_a_mutable_global, @@ -781,10 +784,12 @@ export class Compiler extends DiagnosticEmitter { } /** Either reuses or creates the function type matching the specified signature. */ - private ensureFunctionType(signature: Signature): FunctionTypeRef { - var parameters = signature.parameterTypes; - var numParameters = parameters.length; - var thisType = signature.thisType; + private ensureFunctionType( + parameterTypes: Type[] | null, + returnType: Type, + thisType: Type | null = null + ): FunctionTypeRef { + var numParameters = parameterTypes ? parameterTypes.length : 0; var paramTypes: NativeType[]; var index = 0; if (thisType) { @@ -794,14 +799,17 @@ export class Compiler extends DiagnosticEmitter { } else { paramTypes = new Array(numParameters); } - for (let i = 0; i < numParameters; ++i, ++index) { - paramTypes[index] = signature.parameterTypes[i].toNativeType(); + if (parameterTypes) { + for (let i = 0; i < numParameters; ++i, ++index) { + paramTypes[index] = parameterTypes[i].toNativeType(); + } } - var resultType = signature.returnType.toNativeType(); + var resultType = returnType.toNativeType(); var module = this.module; var typeRef = module.getFunctionTypeBySignature(resultType, paramTypes); if (!typeRef) { - typeRef = module.addFunctionType(signature.toSignatureString(), resultType, paramTypes); + let name = Signature.makeSignatureString(parameterTypes, returnType, thisType); + typeRef = module.addFunctionType(name, resultType, paramTypes); } return typeRef; } @@ -832,7 +840,8 @@ export class Compiler extends DiagnosticEmitter { } var ref: FunctionRef; - var typeRef = this.ensureFunctionType(instance.signature); + var signature = instance.signature; + var typeRef = this.ensureFunctionType(signature.parameterTypes, signature.returnType, signature.thisType); var module = this.module; if (body) { let isConstructor = instance.is(CommonFlags.CONSTRUCTOR); @@ -868,7 +877,7 @@ export class Compiler extends DiagnosticEmitter { // if not all branches are guaranteed to allocate, also append a conditional allocation } else { - let parent = assert(instance.memberOf); + let parent = assert(instance.parent); assert(parent.kind == ElementKind.CLASS); stmt = module.createBlock(null, [ stmt, @@ -901,11 +910,11 @@ export class Compiler extends DiagnosticEmitter { instance.set(CommonFlags.MODULE_IMPORT); // create the function import - let namespace = instance.prototype.namespace; + let parent = instance.prototype.parent; ref = module.addFunctionImport( instance.internalName, - namespace - ? namespace.simpleName + parent + ? parent.simpleName : "env", instance.simpleName, typeRef @@ -913,8 +922,8 @@ export class Compiler extends DiagnosticEmitter { } // check module-level export - if (declaration.range.source.isEntry && declaration.isTopLevelExport) { - module.addFunctionExport(instance.internalName, declaration.name.text); + if (instance.is(CommonFlags.MODULE_EXPORT)) { + module.addFunctionExport(instance.internalName, mangleExportName(instance)); } instance.finalize(module, ref); @@ -1143,6 +1152,133 @@ export class Compiler extends DiagnosticEmitter { compileClass(instance: Class): bool { if (instance.is(CommonFlags.COMPILED)) return true; instance.set(CommonFlags.COMPILED); + var staticMembers = instance.prototype.members; + if (staticMembers) { + for (let element of staticMembers.values()) { + switch (element.kind) { + case ElementKind.GLOBAL: { + this.compileGlobal(element); + break; + } + case ElementKind.FUNCTION_PROTOTYPE: { + if ( + !(element).is(CommonFlags.GENERIC) + ) { + this.compileFunctionUsingTypeArguments( + element, + [], null, null, + (element).declaration.name + ); + } + break; + } + case ElementKind.PROPERTY: { + let getter = (element).getterPrototype; + if (getter) { + this.compileFunctionUsingTypeArguments( + getter, + [], null, null, + getter.declaration.name + ); + } + let setter = (element).setterPrototype; + if (setter) { + this.compileFunctionUsingTypeArguments( + setter, + [], null, null, + setter.declaration.name + ); + } + break; + } + } + } + } + var instanceMembers = instance.members; + if (instanceMembers) { + for (let element of instanceMembers.values()) { + switch (element.kind) { + case ElementKind.FUNCTION_PROTOTYPE: { + if ( + !(element).is(CommonFlags.GENERIC) + ) { + this.compileFunctionUsingTypeArguments( + element, + [], + instance.contextualTypeArguments, + null, // no outer scope + (element).declaration.name + ); + } + break; + } + case ElementKind.FIELD: { + element.set(CommonFlags.COMPILED); + if (!instance.is(CommonFlags.MODULE_EXPORT) || element.is(CommonFlags.PRIVATE)) break; + let module = this.module; + let name = (element).simpleName; + let type = (element).type; + let nativeType = type.toNativeType(); + let offset = (element).memoryOffset; + let usizeType = this.options.usizeType; + let nativeSizeType = this.options.nativeSizeType; + + // export an implicit getter: get:fieldName(this: usize) -> fieldType + let getterName = mangleExportName(element, GETTER_PREFIX + name); + module.addFunction( + getterName, + this.ensureFunctionType(null, type, usizeType), + null, + module.createLoad( + type.byteSize, + type.is(TypeFlags.SIGNED), + module.createGetLocal(0, nativeSizeType), + nativeType, + offset + ) + ); + module.addFunctionExport(getterName, getterName); + + // export an implicit setter: set:fieldName(this: usize, value: fieldType) -> void + if (element.is(CommonFlags.READONLY)) break; + let setterName = mangleExportName(element, SETTER_PREFIX + name); + module.addFunction( + setterName, + this.ensureFunctionType([ type ], Type.void, usizeType), + null, + module.createStore( + type.byteSize, + module.createGetLocal(0, nativeSizeType), + module.createGetLocal(1, nativeType), + nativeType, + offset + ) + ); + module.addFunctionExport(setterName, setterName); + break; + } + case ElementKind.PROPERTY: { + let getter = (element).getterPrototype; + if (getter) { + this.compileFunctionUsingTypeArguments( + getter, + [], instance.contextualTypeArguments, null, + getter.declaration.name + ); + } + let setter = (element).setterPrototype; + if (setter) { + this.compileFunctionUsingTypeArguments( + setter, + [], instance.contextualTypeArguments, null, + setter.declaration.name + ); + } + break; + } + } + } + } return true; } @@ -1672,7 +1808,7 @@ export class Compiler extends DiagnosticEmitter { flow.set(FlowFlags.RETURNS); // TODO: requires exception-handling spec. - return compileAbort(this, null, statement); + return compileBuiltinAbort(this, null, statement); } compileTryStatement(statement: TryStatement): ExpressionRef { @@ -4060,9 +4196,9 @@ export class Compiler extends DiagnosticEmitter { var argumentExpressions: Expression[]; var thisArg: ExpressionRef = 0; if (operatorInstance.is(CommonFlags.INSTANCE)) { - let classElement = assert(operatorInstance.memberOf); - assert(classElement.kind == ElementKind.CLASS); - thisArg = this.compileExpression(value, (classElement).type); + let parent = assert(operatorInstance.parent); + assert(parent.kind == ElementKind.CLASS); + thisArg = this.compileExpression(value, (parent).type); argumentExpressions = []; } else { argumentExpressions = [ value ]; @@ -4086,9 +4222,9 @@ export class Compiler extends DiagnosticEmitter { var argumentExpressions: Expression[]; var thisArg: ExpressionRef = 0; if (operatorInstance.is(CommonFlags.INSTANCE)) { - let classElement = assert(operatorInstance.memberOf); - assert(classElement.kind == ElementKind.CLASS); - thisArg = this.compileExpression(left, (classElement).type); + let parent = assert(operatorInstance.parent); + assert(parent.kind == ElementKind.CLASS); + thisArg = this.compileExpression(left, (parent).type); argumentExpressions = [ right ]; } else { argumentExpressions = [ left, right ]; @@ -4755,9 +4891,9 @@ export class Compiler extends DiagnosticEmitter { // here, with their respective locals being blocked. There is no 'makeCallInline'. var body = []; if (thisArg) { - let classElement = assert(instance.memberOf); - assert(classElement.kind == ElementKind.CLASS); - let thisLocal = flow.addScopedLocal((classElement).type, "this"); + let parent = assert(instance.parent); + assert(parent.kind == ElementKind.CLASS); + let thisLocal = flow.addScopedLocal((parent).type, "this"); body.push( module.createSetLocal(thisLocal.index, thisArg) ); @@ -4879,7 +5015,7 @@ export class Compiler extends DiagnosticEmitter { original.prototype, trampolineName, trampolineSignature, - original.memberOf, + original.parent, original.contextualTypeArguments ); trampoline.set(original.flags | CommonFlags.TRAMPOLINE | CommonFlags.COMPILED); @@ -4929,8 +5065,14 @@ export class Compiler extends DiagnosticEmitter { this.currentFunction = previousFunction; assert(operandIndex == maxOperands); - var typeRef = this.ensureFunctionType(trampolineSignature); - var funcRef = module.addFunction(trampolineName, typeRef, typesToNativeTypes(trampoline.additionalLocals), + var funcRef = module.addFunction( + trampolineName, + this.ensureFunctionType( + trampolineSignature.parameterTypes, + trampolineSignature.returnType, + trampolineSignature.thisType + ), + typesToNativeTypes(trampoline.additionalLocals), module.createBlock(null, [ body, module.createCall( @@ -5052,7 +5194,7 @@ export class Compiler extends DiagnosticEmitter { } assert(numOperands >= minOperands); - this.ensureFunctionType(signature); + this.ensureFunctionType(signature.parameterTypes, signature.returnType, signature.thisType); var module = this.module; // fill up omitted arguments with zeroes @@ -5200,7 +5342,7 @@ export class Compiler extends DiagnosticEmitter { } } if (currentFunction.is(CommonFlags.INSTANCE)) { - let parent = assert(currentFunction.memberOf); + let parent = assert(currentFunction.parent); assert(parent.kind == ElementKind.CLASS); let thisType = (parent).type; if (currentFunction.is(CommonFlags.CONSTRUCTOR)) { @@ -5238,7 +5380,7 @@ export class Compiler extends DiagnosticEmitter { } } if (currentFunction.is(CommonFlags.INSTANCE)) { - let parent = assert(currentFunction.memberOf); + let parent = assert(currentFunction.parent); assert(parent.kind == ElementKind.CLASS); let base = (parent).base; if (base) { @@ -5759,7 +5901,9 @@ export class Compiler extends DiagnosticEmitter { return module.createGetGlobal((target).internalName, globalType.toNativeType()); } case ElementKind.ENUMVALUE: { // enum value - if (!this.compileEnum((target).enum)) { + let parent = (target).parent; + assert(parent !== null && parent.kind == ElementKind.ENUM); + if (!this.compileEnum(parent)) { return this.module.createUnreachable(); } this.currentType = Type.i32; @@ -5777,7 +5921,7 @@ export class Compiler extends DiagnosticEmitter { ); this.currentType = (target).type; return module.createLoad( - (target).type.size >> 3, + (target).type.byteSize, (target).type.is(TypeFlags.SIGNED | TypeFlags.INTEGER), thisExpr, (target).type.toNativeType(), @@ -5799,7 +5943,7 @@ export class Compiler extends DiagnosticEmitter { return module.createUnreachable(); } if (instance.is(CommonFlags.INSTANCE)) { - let parent = assert(instance.memberOf); + let parent = assert(instance.parent); assert(parent.kind == ElementKind.CLASS); let thisExpression = assert(program.resolvedThisExpression); let thisExpr = this.compileExpressionRetainType( @@ -6420,6 +6564,50 @@ export class Compiler extends DiagnosticEmitter { // helpers +function mangleExportName(element: Element, explicitSimpleName: string | null = null): string { + var simpleName = explicitSimpleName != null + ? explicitSimpleName + : element.simpleName; + switch (element.kind) { + case ElementKind.FUNCTION: { + let parent = (element).parent || (element).prototype.parent; + return parent + ? mangleExportName(parent) + + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER) + + simpleName + : simpleName; + } + case ElementKind.FIELD: { + let parent = assert((element).parent); + return mangleExportName(parent) + + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER) + + simpleName; + } + case ElementKind.ENUMVALUE: { + let parent = assert((element).parent); + return mangleExportName(parent) + + (element.is(CommonFlags.INSTANCE) ? INSTANCE_DELIMITER : STATIC_DELIMITER) + + simpleName; + } + case ElementKind.CLASS: { + let parent = (element).prototype.parent; + return parent + ? mangleExportName(parent) + + STATIC_DELIMITER + + simpleName + : simpleName; + } + default: { + let parent = element.parent; + return parent + ? mangleExportName(parent) + + STATIC_DELIMITER + + simpleName + : simpleName; + } + } +} + /** Adds the debug location of the specified expression at the specified range to the source map. */ function addDebugLocation(expr: ExpressionRef, range: Range, module: Module, currentFunction: Function): void { var source = range.source; diff --git a/src/definitions.ts b/src/definitions.ts index 97974041..20d7e61b 100644 --- a/src/definitions.ts +++ b/src/definitions.ts @@ -11,13 +11,15 @@ import { Global, Enum, EnumValue, + Field, Function, - Class, - Namespace, FunctionPrototype, + Class, ClassPrototype, + Namespace, ConstantValueKind, - Interface + Interface, + Property } from "./program"; import { @@ -41,51 +43,56 @@ abstract class ExportsWalker { } walk(): void { - for (let element of this.program.moduleLevelExports.values()) { - this.visitElement(element); - } + for (let element of this.program.moduleLevelExports.values()) this.visitElement(element); } visitElement(element: Element): void { switch (element.kind) { case ElementKind.GLOBAL: { - if (element.is(CommonFlags.COMPILED)) { - this.visitGlobal(element); - } + if (element.is(CommonFlags.COMPILED)) this.visitGlobal(element); break; } case ElementKind.ENUM: { - if (element.is(CommonFlags.COMPILED)) { - this.visitEnum(element); - } + if (element.is(CommonFlags.COMPILED)) this.visitEnum(element); break; } case ElementKind.FUNCTION_PROTOTYPE: { - for (let instance of (element).instances.values()) { - if (instance.is(CommonFlags.COMPILED)) { - this.visitFunction(instance); - } - } + this.visitCompiledFunctions(element); break; } case ElementKind.CLASS_PROTOTYPE: { - for (let instance of (element).instances.values()) { - if (instance.is(CommonFlags.COMPILED)) { - this.visitClass(instance); - } - } + this.visitCompiledClasses(element); + break; + } + case ElementKind.FIELD: { + if ((element).is(CommonFlags.COMPILED)) this.visitField(element); + break; + } + case ElementKind.PROPERTY: { + let prop = element; + let getter = prop.getterPrototype; + if (getter) this.visitCompiledFunctions(getter); + let setter = prop.setterPrototype; + if (setter) this.visitCompiledFunctions(setter); break; } case ElementKind.NAMESPACE: { - if ((element).is(CommonFlags.COMPILED)) { - this.visitNamespace(element); - } - break; - } - default: { - assert(false); + if (hasCompiledMember(element)) this.visitNamespace(element); break; } + default: assert(false); + } + } + + visitCompiledFunctions(element: FunctionPrototype): void { + for (let instance of element.instances.values()) { + if (instance.is(CommonFlags.COMPILED)) this.visitFunction(instance); + } + } + + visitCompiledClasses(element: ClassPrototype): void { + for (let instance of element.instances.values()) { + if (instance.is(CommonFlags.COMPILED)) this.visitClass(instance); } } @@ -94,6 +101,7 @@ abstract class ExportsWalker { abstract visitFunction(element: Function): void; abstract visitClass(element: Class): void; abstract visitInterface(element: Interface): void; + abstract visitField(element: Field): void; abstract visitNamespace(element: Element): void; } @@ -120,9 +128,7 @@ export class IDLBuilder extends ExportsWalker { var sb = this.sb; var isConst = element.is(CommonFlags.INLINED); indent(sb, this.indentLevel); - if (isConst) { - sb.push("const "); - } + if (isConst) sb.push("const "); sb.push(this.typeToString(element.type)); sb.push(" "); sb.push(element.simpleName); @@ -158,11 +164,8 @@ export class IDLBuilder extends ExportsWalker { if (member.kind == ElementKind.ENUMVALUE) { let isConst = (member).is(CommonFlags.INLINED); indent(sb, this.indentLevel); - if (isConst) { - sb.push("const "); - } else { - sb.push("readonly "); - } + if (isConst) sb.push("const "); + else sb.push("readonly "); sb.push("unsigned long "); sb.push(name); if (isConst) { @@ -173,9 +176,7 @@ export class IDLBuilder extends ExportsWalker { } } for (let member of members.values()) { - if (member.kind != ElementKind.ENUMVALUE) { - this.visitElement(member); - } + if (member.kind != ElementKind.ENUMVALUE) this.visitElement(member); } } indent(sb, --this.indentLevel); @@ -209,9 +210,7 @@ export class IDLBuilder extends ExportsWalker { sb.push("interface "); sb.push(element.simpleName); sb.push(" {\n"); - for (let member of members.values()) { - this.visitElement(member); - } + for (let member of members.values()) this.visitElement(member); indent(sb, --this.indentLevel); sb.push("}\n"); } @@ -234,6 +233,10 @@ export class IDLBuilder extends ExportsWalker { this.visitClass(element); } + visitField(element: Field): void { + // TODO + } + visitNamespace(element: Namespace): void { if (this.seen.has(element)) return; this.seen.add(element); @@ -244,9 +247,7 @@ export class IDLBuilder extends ExportsWalker { sb.push(" {\n"); var members = element.members; if (members) { - for (let member of members.values()) { - this.visitElement(member); - } + for (let member of members.values()) this.visitElement(member); } indent(sb, --this.indentLevel); sb.push("}\n"); @@ -311,8 +312,12 @@ export class TSDBuilder extends ExportsWalker { var sb = this.sb; var isConst = element.is(CommonFlags.INLINED); indent(sb, this.indentLevel); - if (isConst) { - sb.push("const "); + if (element.is(CommonFlags.STATIC)) { + if (isConst) sb.push("static readonly "); + else assert(false); + } else { + if (isConst) sb.push("const "); + else sb.push("var "); } sb.push(element.simpleName); sb.push(": "); @@ -345,9 +350,7 @@ export class TSDBuilder extends ExportsWalker { --numMembers; } } - if (numMembers) { - this.visitNamespace(element); - } + if (numMembers) this.visitNamespace(element); } indent(sb, --this.indentLevel); sb.push("}\n"); @@ -356,11 +359,22 @@ export class TSDBuilder extends ExportsWalker { visitFunction(element: Function): void { if (this.seen.has(element)) return; this.seen.add(element); + if (element.is(CommonFlags.PRIVATE)) return; var sb = this.sb; var signature = element.signature; indent(sb, this.indentLevel); - sb.push("function "); - sb.push(element.simpleName); + if (element.is(CommonFlags.PROTECTED)) sb.push("protected "); + if (element.is(CommonFlags.STATIC)) sb.push("static "); + if (element.is(CommonFlags.GET)) { + sb.push("get "); + sb.push(element.prototype.declaration.name.text); // 'get:funcName' internally + } else if (element.is(CommonFlags.SET)) { + sb.push("set "); + sb.push(element.prototype.declaration.name.text); + } else { + if (!element.is(CommonFlags.INSTANCE)) sb.push("function "); + sb.push(element.simpleName); + } sb.push("("); var parameters = signature.parameterTypes; var numParameters = parameters.length; @@ -372,8 +386,12 @@ export class TSDBuilder extends ExportsWalker { sb.push(": "); sb.push(this.typeToString(parameters[i])); } - sb.push("): "); - sb.push(this.typeToString(signature.returnType)); + if (element.isAny(CommonFlags.CONSTRUCTOR | CommonFlags.SET)) { + sb.push(")"); + } else { + sb.push("): "); + sb.push(this.typeToString(signature.returnType)); + } sb.push(";\n"); this.visitNamespace(element); } @@ -394,18 +412,22 @@ export class TSDBuilder extends ExportsWalker { } sb.push(element.simpleName); var base = element.base; - if (base) { + if (base && base.is(CommonFlags.COMPILED | CommonFlags.MODULE_EXPORT)) { sb.push(" extends "); sb.push(base.simpleName); // TODO: fqn } sb.push(" {\n"); var members = element.prototype.members; // static if (members) { - // TODO + for (let member of members.values()) { + this.visitElement(member); + } } + var ctor = element.constructorInstance; + if (ctor) this.visitFunction(ctor); members = element.members; // instance if (members) { - // TODO + for (let member of members.values()) this.visitElement(member); } indent(sb, --this.indentLevel); sb.push("}\n"); @@ -415,6 +437,40 @@ export class TSDBuilder extends ExportsWalker { this.visitClass(element); } + visitField(element: Field): void { + if (element.is(CommonFlags.PRIVATE)) return; + var sb = this.sb; + indent(sb, this.indentLevel); + if (element.is(CommonFlags.PROTECTED)) sb.push("protected "); + if (element.is(CommonFlags.STATIC)) sb.push("static "); + if (element.is(CommonFlags.READONLY)) sb.push("readonly "); + sb.push(element.simpleName); + sb.push(": "); + sb.push(this.typeToString(element.type)); + sb.push(";\n"); + /* TBD: the compiler implicitly generates setters if the class is exported + indent(sb, this.indentLevel); + sb.push("get "); + sb.push(element.simpleName); + sb.push("(): "); + sb.push(this.typeToString(element.type)); + sb.push(";\n"); + if (!element.is(CommonFlags.READONLY)) { + indent(sb, this.indentLevel); + if (element.is(CommonFlags.PROTECTED)) sb.push("protected "); + if (element.is(CommonFlags.STATIC)) sb.push("static "); + if (element.is(CommonFlags.READONLY)) sb.push("readonly "); + sb.push("set "); + sb.push(element.simpleName); + sb.push("("); + sb.push(element.simpleName); + sb.push(": "); + sb.push(this.typeToString(element.type)); + sb.push(");\n"); + } + */ + } + visitNamespace(element: Element): void { var members = element.members; if (members && members.size) { @@ -423,9 +479,7 @@ export class TSDBuilder extends ExportsWalker { sb.push("namespace "); sb.push(element.simpleName); sb.push(" {\n"); - for (let member of members.values()) { - this.visitElement(member); - } + for (let member of members.values()) this.visitElement(member); indent(sb, --this.indentLevel); sb.push("}\n"); } @@ -477,3 +531,33 @@ export class TSDBuilder extends ExportsWalker { } // TODO: C bindings? or is this sufficiently covered by WebIDL and using a 3rd-party tool? + +// helpers + +/** Tests if a namespace-like element has at least one compiled member. */ +function hasCompiledMember(element: Element): bool { + var members = element.members; + if (members) { + for (let member of members.values()) { + switch (member.kind) { + case ElementKind.FUNCTION_PROTOTYPE: { + for (let instance of (member).instances.values()) { + if (instance.is(CommonFlags.COMPILED)) return true; + } + break; + } + case ElementKind.CLASS_PROTOTYPE: { + for (let instance of (member).instances.values()) { + if (instance.is(CommonFlags.COMPILED)) return true; + } + break; + } + default: { + if (member.is(CommonFlags.COMPILED) || hasCompiledMember(member)) return true; + break; + } + } + } + } + return false; +} diff --git a/src/program.ts b/src/program.ts index a0121c9d..db2b5dac 100644 --- a/src/program.ts +++ b/src/program.ts @@ -28,9 +28,8 @@ import { CommonTypeNode, TypeNode, TypeParameterNode, - // ParameterNode, - // ParameterKind, - // SignatureNode, + ParameterKind, + SignatureNode, DecoratorNode, DecoratorKind, @@ -59,12 +58,10 @@ import { MethodDeclaration, NamespaceDeclaration, TypeDeclaration, + VariableDeclaration, VariableLikeDeclarationStatement, VariableStatement, - ParameterKind, - SignatureNode, - VariableDeclaration, stringToDecoratorKind } from "./ast"; @@ -533,7 +530,7 @@ export class Program extends DiagnosticEmitter { ) : DecoratorFlags.NONE ); - prototype.namespace = namespace; + prototype.parent = namespace; this.elementsLookup.set(internalName, prototype); var implementsTypes = declaration.implementsTypes; @@ -573,10 +570,8 @@ export class Program extends DiagnosticEmitter { namespace.members = new Map(); } namespace.members.set(simpleName, prototype); - if (namespace.is(CommonFlags.MODULE_EXPORT)) { - if (prototype.is(CommonFlags.EXPORT)) { - prototype.set(CommonFlags.MODULE_EXPORT); - } + if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) { + prototype.set(CommonFlags.MODULE_EXPORT); } // otherwise add to file-level exports if exported @@ -662,8 +657,12 @@ export class Program extends DiagnosticEmitter { Type.void, // resolved later on declaration ); + staticField.parent = classPrototype; classPrototype.members.set(name, staticField); this.elementsLookup.set(internalName, staticField); + if (classPrototype.is(CommonFlags.MODULE_EXPORT)) { + staticField.set(CommonFlags.MODULE_EXPORT); + } // instance fields are remembered until resolved } else { @@ -685,6 +684,7 @@ export class Program extends DiagnosticEmitter { declaration ); classPrototype.instanceMembers.set(name, instanceField); + // TBD: no need to mark as MODULE_EXPORT } } @@ -958,6 +958,7 @@ export class Program extends DiagnosticEmitter { this.elementsLookup.set(internalPropertyName, propertyElement); if (classPrototype.is(CommonFlags.MODULE_EXPORT)) { propertyElement.set(CommonFlags.MODULE_EXPORT); + instancePrototype.set(CommonFlags.MODULE_EXPORT); } } } @@ -976,7 +977,7 @@ export class Program extends DiagnosticEmitter { } var simpleName = declaration.name.text; var element = new Enum(this, simpleName, internalName, declaration); - element.namespace = namespace; + element.parent = namespace; this.elementsLookup.set(internalName, element); if (namespace) { @@ -992,7 +993,7 @@ export class Program extends DiagnosticEmitter { namespace.members = new Map(); } namespace.members.set(simpleName, element); - if (namespace.is(CommonFlags.MODULE_EXPORT)) { + if (namespace.is(CommonFlags.MODULE_EXPORT) && element.is(CommonFlags.EXPORT)) { element.set(CommonFlags.MODULE_EXPORT); } } else if (element.is(CommonFlags.EXPORT)) { // no namespace @@ -1031,7 +1032,6 @@ export class Program extends DiagnosticEmitter { ): void { var name = declaration.name.text; var internalName = declaration.fileLevelInternalName; - var isModuleExport = enm.is(CommonFlags.MODULE_EXPORT); if (enm.members) { if (enm.members.has(name)) { this.error( @@ -1045,7 +1045,7 @@ export class Program extends DiagnosticEmitter { } var value = new EnumValue(enm, this, name, internalName, declaration); enm.members.set(name, value); - if (isModuleExport) { + if (enm.is(CommonFlags.MODULE_EXPORT)) { value.set(CommonFlags.MODULE_EXPORT); } } @@ -1212,7 +1212,7 @@ export class Program extends DiagnosticEmitter { ) : DecoratorFlags.NONE ); - prototype.namespace = namespace; + prototype.parent = namespace; this.elementsLookup.set(internalName, prototype); if (namespace) { @@ -1229,6 +1229,7 @@ export class Program extends DiagnosticEmitter { } namespace.members.set(simpleName, prototype); if (namespace.is(CommonFlags.MODULE_EXPORT) && prototype.is(CommonFlags.EXPORT)) { + prototype.parent = namespace; prototype.set(CommonFlags.MODULE_EXPORT); } } else if (prototype.is(CommonFlags.EXPORT)) { // no namespace @@ -1358,7 +1359,7 @@ export class Program extends DiagnosticEmitter { ? this.filterDecorators(decorators, DecoratorFlags.GLOBAL) : DecoratorFlags.NONE ); - prototype.namespace = namespace; + prototype.parent = namespace; this.elementsLookup.set(internalName, prototype); if (namespace) { @@ -1436,7 +1437,7 @@ export class Program extends DiagnosticEmitter { var namespace = this.elementsLookup.get(internalName); if (!namespace) { namespace = new Namespace(this, simpleName, internalName, declaration); - namespace.namespace = parentNamespace; + namespace.parent = parentNamespace; this.elementsLookup.set(internalName, namespace); this.checkGlobalOptions(namespace, declaration); } @@ -1563,7 +1564,7 @@ export class Program extends DiagnosticEmitter { Type.void, // resolved later on declaration ); - global.namespace = namespace; + global.parent = namespace; this.elementsLookup.set(internalName, global); if (namespace) { @@ -1836,14 +1837,14 @@ export class Program extends DiagnosticEmitter { // } // search contextual parent namespaces if applicable - if (namespace = contextualFunction.prototype.namespace) { + if (namespace = contextualFunction.prototype.parent) { do { if (element = this.elementsLookup.get(namespace.internalName + STATIC_DELIMITER + name)) { this.resolvedThisExpression = null; this.resolvedElementExpression = null; return element; // LOCAL } - } while (namespace = namespace.namespace); + } while (namespace = namespace.parent); } } @@ -2061,7 +2062,7 @@ export class Program extends DiagnosticEmitter { return explicitLocal; } } - let parent = contextualFunction.memberOf; + let parent = contextualFunction.parent; if (parent) { this.resolvedThisExpression = null; this.resolvedElementExpression = null; @@ -2082,7 +2083,7 @@ export class Program extends DiagnosticEmitter { return explicitLocal; } } - let parent = contextualFunction.memberOf; + let parent = contextualFunction.parent; if (parent && parent.kind == ElementKind.CLASS && (parent = (parent).base)) { this.resolvedThisExpression = null; this.resolvedElementExpression = null; @@ -2308,8 +2309,8 @@ export abstract class Element { decoratorFlags: DecoratorFlags = DecoratorFlags.NONE; /** Namespaced member elements. */ members: Map | null = null; - /** Parent namespace, if applicable. */ - namespace: Element | null = null; + /** Parent element, if applicable. */ + parent: Element | null = null; /** Constructs a new element, linking it to its containing {@link Program}. */ protected constructor(program: Program, simpleName: string, internalName: string) { @@ -2378,8 +2379,6 @@ export class EnumValue extends Element { /** Declaration reference. */ declaration: EnumValueDeclaration; - /** Parent enum. */ - enum: Enum; /** Constant value, if applicable. */ constantValue: i32 = 0; @@ -2391,7 +2390,7 @@ export class EnumValue extends Element { declaration: EnumValueDeclaration ) { super(program, simpleName, internalName); - this.enum = enm; + this.parent = enm; this.declaration = declaration; } } @@ -2732,8 +2731,6 @@ export class Function extends Element { prototype: FunctionPrototype; /** Function signature. */ signature: Signature; - /** If a member of another namespace-like element, the concrete element it is a member of. */ - memberOf: Element | null; /** Map of locals by name. */ locals: Map = new Map(); /** List of additional non-parameter locals. */ @@ -2764,19 +2761,19 @@ export class Function extends Element { prototype: FunctionPrototype, internalName: string, signature: Signature, - memberOf: Element | null = null, + parent: Element | null = null, contextualTypeArguments: Map | null = null ) { super(prototype.program, prototype.simpleName, internalName); this.prototype = prototype; this.signature = signature; - this.memberOf = memberOf; + this.parent = parent; this.flags = prototype.flags; this.decoratorFlags = prototype.decoratorFlags; this.contextualTypeArguments = contextualTypeArguments; if (!(prototype.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN) || prototype.is(CommonFlags.DECLARE))) { let localIndex = 0; - if (memberOf && memberOf.kind == ElementKind.CLASS) { + if (parent && parent.kind == ElementKind.CLASS) { assert(this.is(CommonFlags.INSTANCE)); this.locals.set( "this", @@ -2787,7 +2784,7 @@ export class Function extends Element { assert(signature.thisType) ) ); - let inheritedTypeArguments = (memberOf).contextualTypeArguments; + let inheritedTypeArguments = (parent).contextualTypeArguments; if (inheritedTypeArguments) { if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map(); for (let [inheritedName, inheritedType] of inheritedTypeArguments) { @@ -3048,12 +3045,14 @@ export class Field extends VariableLikeElement { prototype: FieldPrototype, internalName: string, type: Type, - declaration: FieldDeclaration + declaration: FieldDeclaration, + parent: Class ) { super(prototype.program, prototype.simpleName, internalName, type, declaration); this.prototype = prototype; this.flags = prototype.flags; this.type = type; + this.parent = parent; } } @@ -3219,7 +3218,8 @@ export class ClassPrototype extends Element { member, internalName + INSTANCE_DELIMITER + (member).simpleName, fieldType, - fieldDeclaration + fieldDeclaration, + instance ); switch (fieldType.byteSize) { // align case 1: break; diff --git a/src/types.ts b/src/types.ts index b7f64a95..12bfca67 100644 --- a/src/types.ts +++ b/src/types.ts @@ -557,19 +557,22 @@ export class Signature { return thisReturnType == targetReturnType || thisReturnType.isAssignableTo(targetReturnType); } + /** Converts a signature to a function type string. */ + static makeSignatureString(parameterTypes: Type[] | null, returnType: Type, thisType: Type | null = null): string { + var sb = []; + if (thisType) sb.push(thisType.toSignatureString()); + if (parameterTypes) { + for (let i = 0, k = parameterTypes.length; i < k; ++i) { + sb.push(parameterTypes[i].toSignatureString()); + } + } + sb.push(returnType.toSignatureString()); + return sb.join(""); + } + /** Converts this signature to a function type string. */ toSignatureString(): string { - var sb = []; - var thisType = this.thisType; - if (thisType) { - sb.push(thisType.toSignatureString()); - } - var parameterTypes = this.parameterTypes; - for (let i = 0, k = parameterTypes.length; i < k; ++i) { - sb.push(parameterTypes[i].toSignatureString()); - } - sb.push(this.returnType.toSignatureString()); - return sb.join(""); + return Signature.makeSignatureString(this.parameterTypes, this.returnType, this.thisType); } /** Converts this signature to a string. */ diff --git a/tests/compiler/enum.optimized.wat b/tests/compiler/enum.optimized.wat index 70edcc98..4a492a63 100644 --- a/tests/compiler/enum.optimized.wat +++ b/tests/compiler/enum.optimized.wat @@ -18,20 +18,20 @@ (global $enum/SelfReference.ZERO i32 (i32.const 0)) (global $enum/SelfReference.ONE i32 (i32.const 1)) (memory $0 1) - (export "enum/Implicit.ZERO" (global $enum/Implicit.ZERO)) - (export "enum/Implicit.ONE" (global $enum/Implicit.ONE)) - (export "enum/Implicit.TWO" (global $enum/Implicit.TWO)) - (export "enum/Implicit.THREE" (global $enum/Implicit.THREE)) - (export "enum/Explicit.ZERO" (global $enum/Explicit.ZERO)) - (export "enum/Explicit.ONE" (global $enum/Explicit.ONE)) - (export "enum/Explicit.TWO" (global $enum/Explicit.TWO)) - (export "enum/Explicit.THREE" (global $enum/Explicit.THREE)) - (export "enum/Mixed.ZERO" (global $enum/Mixed.ZERO)) - (export "enum/Mixed.ONE" (global $enum/Mixed.ONE)) - (export "enum/Mixed.THREE" (global $enum/Mixed.THREE)) - (export "enum/Mixed.FOUR" (global $enum/Mixed.FOUR)) - (export "enum/SelfReference.ZERO" (global $enum/SelfReference.ZERO)) - (export "enum/SelfReference.ONE" (global $enum/SelfReference.ONE)) + (export "Implicit.ZERO" (global $enum/Implicit.ZERO)) + (export "Implicit.ONE" (global $enum/Implicit.ONE)) + (export "Implicit.TWO" (global $enum/Implicit.TWO)) + (export "Implicit.THREE" (global $enum/Implicit.THREE)) + (export "Explicit.ZERO" (global $enum/Explicit.ZERO)) + (export "Explicit.ONE" (global $enum/Explicit.ONE)) + (export "Explicit.TWO" (global $enum/Explicit.TWO)) + (export "Explicit.THREE" (global $enum/Explicit.THREE)) + (export "Mixed.ZERO" (global $enum/Mixed.ZERO)) + (export "Mixed.ONE" (global $enum/Mixed.ONE)) + (export "Mixed.THREE" (global $enum/Mixed.THREE)) + (export "Mixed.FOUR" (global $enum/Mixed.FOUR)) + (export "SelfReference.ZERO" (global $enum/SelfReference.ZERO)) + (export "SelfReference.ONE" (global $enum/SelfReference.ONE)) (export "memory" (memory $0)) (start $start) (func $enum/getZero (; 0 ;) (type $i) (result i32) diff --git a/tests/compiler/enum.untouched.wat b/tests/compiler/enum.untouched.wat index c45df8e3..e4a362b9 100644 --- a/tests/compiler/enum.untouched.wat +++ b/tests/compiler/enum.untouched.wat @@ -19,20 +19,20 @@ (global $enum/SelfReference.ONE i32 (i32.const 1)) (global $HEAP_BASE i32 (i32.const 4)) (memory $0 1) - (export "enum/Implicit.ZERO" (global $enum/Implicit.ZERO)) - (export "enum/Implicit.ONE" (global $enum/Implicit.ONE)) - (export "enum/Implicit.TWO" (global $enum/Implicit.TWO)) - (export "enum/Implicit.THREE" (global $enum/Implicit.THREE)) - (export "enum/Explicit.ZERO" (global $enum/Explicit.ZERO)) - (export "enum/Explicit.ONE" (global $enum/Explicit.ONE)) - (export "enum/Explicit.TWO" (global $enum/Explicit.TWO)) - (export "enum/Explicit.THREE" (global $enum/Explicit.THREE)) - (export "enum/Mixed.ZERO" (global $enum/Mixed.ZERO)) - (export "enum/Mixed.ONE" (global $enum/Mixed.ONE)) - (export "enum/Mixed.THREE" (global $enum/Mixed.THREE)) - (export "enum/Mixed.FOUR" (global $enum/Mixed.FOUR)) - (export "enum/SelfReference.ZERO" (global $enum/SelfReference.ZERO)) - (export "enum/SelfReference.ONE" (global $enum/SelfReference.ONE)) + (export "Implicit.ZERO" (global $enum/Implicit.ZERO)) + (export "Implicit.ONE" (global $enum/Implicit.ONE)) + (export "Implicit.TWO" (global $enum/Implicit.TWO)) + (export "Implicit.THREE" (global $enum/Implicit.THREE)) + (export "Explicit.ZERO" (global $enum/Explicit.ZERO)) + (export "Explicit.ONE" (global $enum/Explicit.ONE)) + (export "Explicit.TWO" (global $enum/Explicit.TWO)) + (export "Explicit.THREE" (global $enum/Explicit.THREE)) + (export "Mixed.ZERO" (global $enum/Mixed.ZERO)) + (export "Mixed.ONE" (global $enum/Mixed.ONE)) + (export "Mixed.THREE" (global $enum/Mixed.THREE)) + (export "Mixed.FOUR" (global $enum/Mixed.FOUR)) + (export "SelfReference.ZERO" (global $enum/SelfReference.ZERO)) + (export "SelfReference.ONE" (global $enum/SelfReference.ONE)) (export "memory" (memory $0)) (start $start) (func $enum/getZero (; 0 ;) (type $i) (result i32) diff --git a/tests/compiler/export.optimized.wat b/tests/compiler/export.optimized.wat index 2ca90ee7..036e31db 100644 --- a/tests/compiler/export.optimized.wat +++ b/tests/compiler/export.optimized.wat @@ -11,7 +11,7 @@ (export "a" (global $export/a)) (export "b" (global $export/b)) (export "renamed_c" (global $export/c)) - (export "two" (func $export/ns.two)) + (export "ns.two" (func $export/ns.two)) (export "memory" (memory $0)) (func $export/add (; 0 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (i32.add diff --git a/tests/compiler/export.untouched.wat b/tests/compiler/export.untouched.wat index 8297ef70..2082380c 100644 --- a/tests/compiler/export.untouched.wat +++ b/tests/compiler/export.untouched.wat @@ -12,7 +12,7 @@ (export "a" (global $export/a)) (export "b" (global $export/b)) (export "renamed_c" (global $export/c)) - (export "two" (func $export/ns.two)) + (export "ns.two" (func $export/ns.two)) (export "memory" (memory $0)) (func $export/add (; 0 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (return diff --git a/tests/compiler/exports.optimized.wat b/tests/compiler/exports.optimized.wat new file mode 100644 index 00000000..1d5117ad --- /dev/null +++ b/tests/compiler/exports.optimized.wat @@ -0,0 +1,66 @@ +(module + (type $iii (func (param i32 i32) (result i32))) + (type $i (func (result i32))) + (type $ii (func (param i32) (result i32))) + (type $iiv (func (param i32 i32))) + (type $iv (func (param i32))) + (global $exports/Animal.CAT i32 (i32.const 0)) + (global $exports/Animal.DOG i32 (i32.const 1)) + (global $exports/animals.Animal.CAT i32 (i32.const 0)) + (global $exports/animals.Animal.DOG i32 (i32.const 1)) + (global $exports/Car.TIRES i32 (i32.const 4)) + (global $exports/vehicles.Car.TIRES i32 (i32.const 4)) + (global $exports/outer.inner.a i32 (i32.const 42)) + (memory $0 1) + (export "add" (func $exports/add)) + (export "math.sub" (func $exports/math.sub)) + (export "Animal.CAT" (global $exports/Animal.CAT)) + (export "Animal.DOG" (global $exports/Animal.DOG)) + (export "animals.Animal.CAT" (global $exports/animals.Animal.CAT)) + (export "animals.Animal.DOG" (global $exports/animals.Animal.DOG)) + (export "Car.TIRES" (global $exports/Car.TIRES)) + (export "Car.getNumTires" (func $exports/Car.getNumTires)) + (export "Car#get:doors" (func $Car#get:doors)) + (export "Car#set:doors" (func $Car#set:doors)) + (export "Car#get:numDoors" (func $Car#get:doors)) + (export "Car#set:numDoors" (func $Car#set:doors)) + (export "Car#openDoors" (func $exports/Car#openDoors)) + (export "vehicles.Car.TIRES" (global $exports/vehicles.Car.TIRES)) + (export "vehicles.Car.getNumTires" (func $exports/Car.getNumTires)) + (export "vehicles.Car#get:doors" (func $Car#get:doors)) + (export "vehicles.Car#set:doors" (func $Car#set:doors)) + (export "vehicles.Car#get:numDoors" (func $Car#get:doors)) + (export "vehicles.Car#set:numDoors" (func $Car#set:doors)) + (export "vehicles.Car#openDoors" (func $exports/Car#openDoors)) + (export "outer.inner.a" (global $exports/outer.inner.a)) + (export "memory" (memory $0)) + (func $exports/add (; 0 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (i32.add + (get_local $0) + (get_local $1) + ) + ) + (func $exports/math.sub (; 1 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (i32.sub + (get_local $0) + (get_local $1) + ) + ) + (func $exports/Car.getNumTires (; 2 ;) (type $i) (result i32) + (i32.const 4) + ) + (func $Car#get:doors (; 3 ;) (type $ii) (param $0 i32) (result i32) + (i32.load + (get_local $0) + ) + ) + (func $Car#set:doors (; 4 ;) (type $iiv) (param $0 i32) (param $1 i32) + (i32.store + (get_local $0) + (get_local $1) + ) + ) + (func $exports/Car#openDoors (; 5 ;) (type $iv) (param $0 i32) + (nop) + ) +) diff --git a/tests/compiler/exports.ts b/tests/compiler/exports.ts new file mode 100644 index 00000000..71c70c41 --- /dev/null +++ b/tests/compiler/exports.ts @@ -0,0 +1,54 @@ +// top-level function +export function add(a: i32, b: i32): i32 { + return a + b; +} + +// namespaced function +export namespace math { + export function sub(a: i32, b: i32): i32 { + return a - b; + } +} + +// top-level enum +export enum Animal { + CAT, + DOG +} + +// namespaced enum +export namespace animals { + export enum Animal { + CAT, + DOG + } +} + +// top-level class +export class Car { + static readonly TIRES: i32 = 4; + static getNumTires(): i32 { return this.TIRES; } + constructor(public doors: i32 = 2) { this.doors = doors; } + get numDoors(): i32 { return this.doors; } + set numDoors(doors: i32) { this.doors = doors; } + openDoors(): void {} +} + +// namespaced class +export namespace vehicles { + export class Car { + static readonly TIRES: i32 = 4; + static getNumTires(): i32 { return this.TIRES; } + constructor(public doors: i32 = 2) { this.doors = doors; } + get numDoors(): i32 { return this.doors; } + set numDoors(doors: i32) { this.doors = doors; } + openDoors(): void {} + } +} + +// namespaced namespace +export namespace outer { + export namespace inner { + export const a = 42; + } +} diff --git a/tests/compiler/exports.untouched.wat b/tests/compiler/exports.untouched.wat new file mode 100644 index 00000000..b3a59483 --- /dev/null +++ b/tests/compiler/exports.untouched.wat @@ -0,0 +1,116 @@ +(module + (type $iii (func (param i32 i32) (result i32))) + (type $i (func (result i32))) + (type $ii (func (param i32) (result i32))) + (type $iiv (func (param i32 i32))) + (type $iv (func (param i32))) + (global $exports/Animal.CAT i32 (i32.const 0)) + (global $exports/Animal.DOG i32 (i32.const 1)) + (global $exports/animals.Animal.CAT i32 (i32.const 0)) + (global $exports/animals.Animal.DOG i32 (i32.const 1)) + (global $exports/Car.TIRES i32 (i32.const 4)) + (global $exports/vehicles.Car.TIRES i32 (i32.const 4)) + (global $exports/outer.inner.a i32 (i32.const 42)) + (global $HEAP_BASE i32 (i32.const 4)) + (memory $0 1) + (export "add" (func $exports/add)) + (export "math.sub" (func $exports/math.sub)) + (export "Animal.CAT" (global $exports/Animal.CAT)) + (export "Animal.DOG" (global $exports/Animal.DOG)) + (export "animals.Animal.CAT" (global $exports/animals.Animal.CAT)) + (export "animals.Animal.DOG" (global $exports/animals.Animal.DOG)) + (export "Car.TIRES" (global $exports/Car.TIRES)) + (export "Car.getNumTires" (func $exports/Car.getNumTires)) + (export "Car#get:doors" (func $Car#get:doors)) + (export "Car#set:doors" (func $Car#set:doors)) + (export "Car#get:numDoors" (func $exports/Car#get:numDoors)) + (export "Car#set:numDoors" (func $exports/Car#set:numDoors)) + (export "Car#openDoors" (func $exports/Car#openDoors)) + (export "vehicles.Car.TIRES" (global $exports/vehicles.Car.TIRES)) + (export "vehicles.Car.getNumTires" (func $exports/vehicles.Car.getNumTires)) + (export "vehicles.Car#get:doors" (func $vehicles.Car#get:doors)) + (export "vehicles.Car#set:doors" (func $vehicles.Car#set:doors)) + (export "vehicles.Car#get:numDoors" (func $exports/vehicles.Car#get:numDoors)) + (export "vehicles.Car#set:numDoors" (func $exports/vehicles.Car#set:numDoors)) + (export "vehicles.Car#openDoors" (func $exports/vehicles.Car#openDoors)) + (export "outer.inner.a" (global $exports/outer.inner.a)) + (export "memory" (memory $0)) + (func $exports/add (; 0 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.add + (get_local $0) + (get_local $1) + ) + ) + ) + (func $exports/math.sub (; 1 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (return + (i32.sub + (get_local $0) + (get_local $1) + ) + ) + ) + (func $exports/Car.getNumTires (; 2 ;) (type $i) (result i32) + (return + (i32.const 4) + ) + ) + (func $Car#get:doors (; 3 ;) (type $ii) (param $0 i32) (result i32) + (i32.load + (get_local $0) + ) + ) + (func $Car#set:doors (; 4 ;) (type $iiv) (param $0 i32) (param $1 i32) + (i32.store + (get_local $0) + (get_local $1) + ) + ) + (func $exports/Car#get:numDoors (; 5 ;) (type $ii) (param $0 i32) (result i32) + (return + (i32.load + (get_local $0) + ) + ) + ) + (func $exports/Car#set:numDoors (; 6 ;) (type $iiv) (param $0 i32) (param $1 i32) + (i32.store + (get_local $0) + (get_local $1) + ) + ) + (func $exports/Car#openDoors (; 7 ;) (type $iv) (param $0 i32) + ) + (func $exports/vehicles.Car.getNumTires (; 8 ;) (type $i) (result i32) + (return + (i32.const 4) + ) + ) + (func $vehicles.Car#get:doors (; 9 ;) (type $ii) (param $0 i32) (result i32) + (i32.load + (get_local $0) + ) + ) + (func $vehicles.Car#set:doors (; 10 ;) (type $iiv) (param $0 i32) (param $1 i32) + (i32.store + (get_local $0) + (get_local $1) + ) + ) + (func $exports/vehicles.Car#get:numDoors (; 11 ;) (type $ii) (param $0 i32) (result i32) + (return + (i32.load + (get_local $0) + ) + ) + ) + (func $exports/vehicles.Car#set:numDoors (; 12 ;) (type $iiv) (param $0 i32) (param $1 i32) + (i32.store + (get_local $0) + (get_local $1) + ) + ) + (func $exports/vehicles.Car#openDoors (; 13 ;) (type $iv) (param $0 i32) + ) +) diff --git a/tests/compiler/showcase.optimized.wat b/tests/compiler/showcase.optimized.wat index 2f516f81..b57ca2ae 100644 --- a/tests/compiler/showcase.optimized.wat +++ b/tests/compiler/showcase.optimized.wat @@ -54,10 +54,10 @@ (export "anExportedConstantGlobal" (global $showcase/anExportedConstantGlobal)) (export "aConstantGlobal" (global $showcase/aConstantGlobal)) (export "anAliasedConstantGlobal" (global $showcase/anExportedConstantGlobal)) - (export "showcase/AnEnum.ONE" (global $showcase/AnEnum.ONE)) - (export "showcase/AnEnum.TWO" (global $showcase/AnEnum.TWO)) - (export "showcase/AnEnum.FOUR" (global $showcase/AnEnum.FOUR)) - (export "showcase/AnEnum.FIVE" (global $showcase/AnEnum.FIVE)) + (export "AnEnum.ONE" (global $showcase/AnEnum.ONE)) + (export "AnEnum.TWO" (global $showcase/AnEnum.TWO)) + (export "AnEnum.FOUR" (global $showcase/AnEnum.FOUR)) + (export "AnEnum.FIVE" (global $showcase/AnEnum.FIVE)) (export "anExportedFunction" (func $showcase/anExportedFunction)) (export "memory" (memory $0)) (start $start) diff --git a/tests/compiler/showcase.untouched.wat b/tests/compiler/showcase.untouched.wat index 844f3528..e2ad5c53 100644 --- a/tests/compiler/showcase.untouched.wat +++ b/tests/compiler/showcase.untouched.wat @@ -64,10 +64,10 @@ (export "anExportedConstantGlobal" (global $showcase/anExportedConstantGlobal)) (export "aConstantGlobal" (global $showcase/aConstantGlobal)) (export "anAliasedConstantGlobal" (global $showcase/anExportedConstantGlobal)) - (export "showcase/AnEnum.ONE" (global $showcase/AnEnum.ONE)) - (export "showcase/AnEnum.TWO" (global $showcase/AnEnum.TWO)) - (export "showcase/AnEnum.FOUR" (global $showcase/AnEnum.FOUR)) - (export "showcase/AnEnum.FIVE" (global $showcase/AnEnum.FIVE)) + (export "AnEnum.ONE" (global $showcase/AnEnum.ONE)) + (export "AnEnum.TWO" (global $showcase/AnEnum.TWO)) + (export "AnEnum.FOUR" (global $showcase/AnEnum.FOUR)) + (export "AnEnum.FIVE" (global $showcase/AnEnum.FIVE)) (export "anExportedFunction" (func $showcase/anExportedFunction)) (export "memory" (memory $0)) (start $start)