diff --git a/dist/assemblyscript.js b/dist/assemblyscript.js index f977a1ae..ef08fe05 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=27)}([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),u=r(3);t.PATH_DELIMITER="/",t.PARENT_SUBST="..",t.GETTER_PREFIX="get:",t.SETTER_PREFIX="set:",t.INSTANCE_DELIMITER="#",t.STATIC_DELIMITER=".",t.LIBRARY_SUBST="(lib)",t.LIBRARY_PREFIX=t.LIBRARY_SUBST+t.PATH_DELIMITER;var l=function(){return function(){}}(),h=function(){return function(){}}(),_=function(){return function(){}}(),d=new Map,y=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=d,r.typeAliases=new Map,r.fileLevelExports=new Map,r.moduleLevelExports=new Map,r.sources=[],r}return i(r,e),r.prototype.initialize=function(e){this.options=e,this.typesLookup=new Map([["i8",c.Type.i8],["i16",c.Type.i16],["i32",c.Type.i32],["i64",c.Type.i64],["isize",e.isizeType],["u8",c.Type.u8],["u16",c.Type.u16],["u32",c.Type.u32],["u64",c.Type.u64],["usize",e.usizeType],["bool",c.Type.bool],["f32",c.Type.f32],["f64",c.Type.f64],["void",c.Type.void],["number",c.Type.f64],["boolean",c.Type.bool]]);for(var t,r,n=new Map,i=new Array,u=new Array,l=0,h=this.sources.length;l",l+="<"+I+">")}else if(r){var A=r.get(l);if(A)return A}}return(d=this.typesLookup.get(h))||(d=this.typesLookup.get(l))?d:(n&&this.error(s.DiagnosticCode.Cannot_find_name_0,o.name.range,l),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 L(this,K,w,C||u)).contextualTypeArguments=t,this.instances.set(r,n),n},t.prototype.resolvePartial=function(e){if(assert(this.is(E.INSTANCE)),assert(this.classPrototype),e&&e.length){var r=new t(this.program,this.simpleName,this.internalName,this.declaration,this.classPrototype);return r.flags=this.flags,r.classTypeArguments=e,r}return this},t.prototype.resolveUsingTypeArguments=function(e,t,r){var n=null;return!this.is(E.GENERIC)||(assert(null!=e&&0!=e.length),n=this.program.resolveTypeArguments(assert(this.declaration.typeParameters),e,t,r))?this.resolve(n,t):null},t.prototype.resolveBuiltinTypeArguments=function(e,t){assert(this.is(E.BUILTIN));var r=null;if(e){var n=e.length;r=new Array(n);for(var i=0;i0)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"),(i=new F(this,v,e,I)).contextualTypeArguments=r,this.instances.set(n,i);var N,C,S,O,b,L,k=0;if(I&&(k=I.currentMemoryOffset,I.members)){i.members||(i.members=new Map);try{for(var x=a(I.members.values()),U=x.next();!U.done;U=x.next()){var D=U.value;i.members.set(D.simpleName,D)}}catch(e){S={error:e}}finally{try{U&&!U.done&&(O=x.return)&&O.call(x)}finally{if(S)throw S.error}}}if(this.constructorPrototype){var P=this.constructorPrototype.resolvePartial(e);P&&(i.constructorInstance=P.resolve())}if(this.instanceMembers)try{for(var w=a(this.instanceMembers.values()),M=w.next();!M.done;M=w.next()){var G=M.value;switch(G.kind){case g.FIELD_PROTOTYPE:i.members||(i.members=new Map);var K=G.declaration;if(!K.type)throw new Error("type expected");var z=this.program.resolveType(K.type,i.contextualTypeArguments);if(z){var H=new R(G,v+t.INSTANCE_DELIMITER+G.simpleName,z);switch(z.byteSize){case 1:break;case 2:1&k&&++k;break;case 4:3&k&&(k=1+(3|k));break;case 8:7&k&&(k=1+(7|k));break;default:assert(!1)}H.memoryOffset=k,k+=z.byteSize,i.members.set(G.simpleName,H)}break;case g.FUNCTION_PROTOTYPE:i.members||(i.members=new Map);var V=G.resolvePartial(e);V&&(V.internalName=v+t.INSTANCE_DELIMITER+V.simpleName,i.members.set(G.simpleName,V));break;case g.PROPERTY:i.members||(i.members=new Map);var W=assert(G.getterPrototype),X=G.setterPrototype,Y=new B(this.program,G.simpleName,v+t.INSTANCE_DELIMITER+G.simpleName,this),Q=W.resolvePartial(e);if(!Q)return null;if(Q.internalName=v+t.INSTANCE_DELIMITER+Q.simpleName,Y.getterPrototype=Q,X){var q=X.resolvePartial(e);if(!q)return null;q.internalName=v+t.INSTANCE_DELIMITER+q.simpleName,Y.setterPrototype=q}i.members.set(G.simpleName,Y);break;default:assert(!1)}}}catch(e){b={error:e}}finally{try{M&&!M.done&&(L=w.return)&&L.call(w)}finally{if(b)throw b.error}}return i.currentMemoryOffset=k,i},r.prototype.resolveUsingTypeArguments=function(e,t,r){var n=null;if(this.is(E.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}(f);t.ClassPrototype=U;var F=function(e){function t(t,r,n,i){void 0===n&&(n=null),void 0===i&&(i=null);var s=e.call(this,t.program,t.simpleName,r)||this;if(s.kind=g.CLASS,s.contextualTypeArguments=null,s.currentMemoryOffset=0,s.constructorInstance=null,s.prototype=t,s.flags=t.flags,s.typeArguments=n,s.type=t.program.options.usizeType.asClass(s),s.base=i,i&&i.contextualTypeArguments){s.contextualTypeArguments||(s.contextualTypeArguments=new Map);try{for(var c=a(i.contextualTypeArguments),p=c.next();!p.done;p=c.next()){var u=o(p.value,2),l=u[0],h=u[1];s.contextualTypeArguments.set(l,h)}}catch(e){y={error:e}}finally{try{p&&!p.done&&(m=c.return)&&m.call(c)}finally{if(y)throw y.error}}}var _,d,y,m,E=s.prototype.declaration;if(E){var T=E.typeParameters;if(n){if((d=n.length)!=T.length)throw new Error("type argument count mismatch");if(d)for(s.contextualTypeArguments||(s.contextualTypeArguments=new Map),_=0;_0&&!a.isLineBreak(n.charCodeAt(o-1));)o--;for(;s=0;--o)free_memory(a[o])}},e.prototype.createCall=function(e,t,r){var n=l(e),i=u(t);try{return _BinaryenCall(this.ref,n,i,t&&t.length||0,r)}finally{free_memory(i),free_memory(n)}},e.prototype.createCallImport=function(e,t,r){var n=l(e),i=u(t);try{return _BinaryenCallImport(this.ref,n,i,t&&t.length||0,r)}finally{free_memory(i),free_memory(n)}},e.prototype.createCallIndirect=function(e,t,r){var n=u(t),i=l(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=l(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=l(e),a=u(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=l(e);try{_BinaryenRemoveFunction(this.ref,t)}finally{free_memory(t)}},e.prototype.addFunctionExport=function(e,t){var r=l(e),n=l(t);try{return _BinaryenAddFunctionExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addTableExport=function(e,t){var r=l(e),n=l(t);try{return _BinaryenAddTableExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addMemoryExport=function(e,t){var r=l(e),n=l(t);try{return _BinaryenAddMemoryExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addGlobalExport=function(e,t){var r=l(e),n=l(t);try{return _BinaryenAddGlobalExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.removeExport=function(e){var t=l(e);try{_BinaryenRemoveExport(this.ref,t)}finally{free_memory(t)}},e.prototype.addFunctionImport=function(e,t,r,n){var i=l(e),a=l(t),o=l(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=l(e),i=l(t),a=l(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=l(e),i=l(t),a=l(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=l(e),a=l(t),o=l(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=l(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=l(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=u(e);try{_BinaryenSetFunctionTable(this.ref,t,e.length)}finally{free_memory(t)}},e.prototype.setStart=function(e){_BinaryenSetStart(this.ref,e)},e.prototype.setOptimizeLevel=function(e){void 0===e&&(e=2),_BinaryenSetOptimizeLevel(e)},e.prototype.setShrinkLevel=function(e){void 0===e&&(e=1),_BinaryenSetShrinkLevel(e)},e.prototype.setDebugInfo=function(e){void 0===e&&(e=!1),_BinaryenSetDebugInfo(e)},e.prototype.optimize=function(e){void 0===e&&(e=0),e?_BinaryenFunctionOptimize(e,this.ref):_BinaryenModuleOptimize(this.ref)},e.prototype.runPasses=function(e,t){void 0===t&&(t=0);for(var r=e.length,n=new Array(r),i=0;i=0;--i)free_memory(n[i])}},e.prototype.validate=function(){return 1==_BinaryenModuleValidate(this.ref)},e.prototype.interpret=function(){_BinaryenModuleInterpret(this.ref)},e.prototype.toBinary=function(e){var t=this.out,r=l(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 l(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 l;return i.range=n,i.name=e,e.parent=i,i.typeArguments=t,t&&xe(t,i),i.isNullable=r,i},e.createOmittedType=function(t){return e.createType(e.createIdentifierExpression("",t),null,!1,t)},e.createTypeParameter=function(e,t,r){var n=new h;return n.range=r,n.name=e,e.parent=n,n.extendsType=t,t&&(t.parent=n),n},e.createParameter=function(e,t,r,n,i){var a=new _;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,xe(e,a),a.returnType=t,t.parent=a,a.explicitThisType=r,r&&(r.parent=a),a.isNullable=n,a},e.createDecorator=function(e,t,r){var n=new m;if(n.range=r,n.name=e,e.parent=n,n.arguments=t,t&&xe(t,n),e.kind==s.IDENTIFIER)switch(e.text){case"global":n.decoratorKind=d.GLOBAL;break;case"operator":n.decoratorKind=d.OPERATOR;break;case"unmanaged":n.decoratorKind=d.UNMANAGED;break;case"offset":n.decoratorKind=d.OFFSET;break;default:n.decoratorKind=d.CUSTOM}else n.decoratorKind=d.CUSTOM;return n},e.createComment=function(e,t,r){var n=new g;return n.range=r,n.commentKind=t,n.text=e,n},e.createIdentifierExpression=function(e,t){var r=new f;return r.range=t,r.text=e,r},e.createEmptyIdentifierExpression=function(e){var t=new f;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}(q);t.ClassDeclaration=J;var ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.CONTINUE,t}return i(t,e),t}(Y);t.ContinueStatement=ee;var te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.DO,t}return i(t,e),t}(Y);t.DoStatement=te;var re=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EMPTY,t}return i(t,e),t}(Y);t.EmptyStatement=re;var ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMDECLARATION,t}return i(t,e),t}(q);t.EnumDeclaration=ne;var ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMVALUEDECLARATION,t}return i(t,e),t}(q);t.EnumValueDeclaration=ie;var ae=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=ae;var oe=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=oe;var se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORT,t}return i(t,e),t}(Y);t.ExportStatement=se;var ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPRESSION,t}return i(t,e),t}(Y);t.ExpressionStatement=ce;var pe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FIELDDECLARATION,t}return i(t,e),t}(j);t.FieldDeclaration=pe;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}(Y);t.ForStatement=ue;var le=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}(q);t.FunctionDeclaration=le;var he=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IF,t}return i(t,e),t}(Y);t.IfStatement=he;var _e=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORTDECLARATION,t}return i(t,e),t}(q);t.ImportDeclaration=_e;var de=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORT,t}return i(t,e),t}(Y);t.ImportStatement=de;var ye=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.INTERFACEDECLARATION,t}return i(t,e),t}(J);t.InterfaceDeclaration=ye;var me=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.METHODDECLARATION,t}return i(t,e),t}(le);t.MethodDeclaration=me;var ge=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.NAMESPACEDECLARATION,t}return i(t,e),t}(q);t.NamespaceDeclaration=ge;var Ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.RETURN,t}return i(t,e),t}(Y);t.ReturnStatement=Ee;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 fe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCH,t}return i(t,e),t}(Y);t.SwitchStatement=fe;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}(Y);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}(Y);t.TryStatement=Ae;var ve=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TYPEDECLARATION,t}return i(t,e),t}(q);t.TypeDeclaration=ve;var Ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLEDECLARATION,t}return i(t,e),t}(j);t.VariableDeclaration=Ne;var Ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLE,t}return i(t,e),t}(Y);t.VariableStatement=Ce;var Se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VOID,t}return i(t,e),t}(Y);t.VoidStatement=Se;var Oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.WHILE,t}return i(t,e),t}(Y);function be(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 l=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=l;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 l(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"}(t.TypeFlags||(t.TypeFlags={}));var i=function(){function e(e,t,r){this.nullableType=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.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&&l!=u?t.push("?: "):t.push(": "),t.push(i[l].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),u=r(0),l=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}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.startFunctionBody=[],n.currentEnum=null,n.currentType=_.Type.void,n.memorySegments=new Array,n.stringSegments=new Map,n.functionTable=new Array,n.files=new Set,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==u.ElementKind.FUNCTION_PROTOTYPE);var i=new u.Function(n,n.internalName,new _.Signature([],_.Type.void));this.startFunction=i,this.currentFunction=i;for(var a=r.sources,o=0,s=a.length;o"),!1;e.type=this.currentType}var a=e.type.toNativeType(),o=e.isAny(u.CommonFlags.CONST)||e.is(u.CommonFlags.STATIC|u.CommonFlags.READONLY);if(e.is(u.CommonFlags.AMBIENT))return o?(e.set(u.CommonFlags.MODULE_IMPORT),t.addGlobalImport(e.internalName,e.namespace?e.namespace.simpleName:"env",e.simpleName,a),e.set(u.CommonFlags.COMPILED),!0):(this.error(c.DiagnosticCode.Operation_not_supported,r.range),!1);var s=!1;e.is(u.CommonFlags.INLINED)?n=this.compileInlineConstant(e,e.type,!0):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 l=e.internalName;if(s)t.addGlobal(l,a,!0,e.type.toNativeZero(t)),this.startFunctionBody.push(t.createSetGlobal(l,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,e.declaration.range),e.constantValueKind=1,e.constantIntegerValue=i64_new(0)}e.set(u.CommonFlags.INLINED),r.isTopLevel&&t.addGlobal(l,a,!1,n),r.range.source.isEntry&&r.isTopLevelExport&&t.addGlobalExport(e.internalName,r.programLevelInternalName)}else t.addGlobal(l,a,!o,n);return!0},t.prototype.compileEnumDeclaration=function(e){var t=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(t.kind==u.ElementKind.ENUM),this.compileEnum(t)?t:null},t.prototype.compileEnum=function(e){if(e.is(u.CommonFlags.COMPILED))return!0;e.set(u.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 l=s.value;if(l.kind==u.ElementKind.ENUMVALUE){var h=!1,d=l,y=d.declaration;if(d.set(u.CommonFlags.COMPILED),d.is(u.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(u.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(u.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(u.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(u.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&&(l.is(u.CommonFlags.INLINED)?t.addGlobalExport(l.internalName,l.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==u.ElementKind.FUNCTION_PROTOTYPE),this.compileFunctionUsingTypeArguments(n,t,r,n.declaration.name)},t.prototype.compileFunctionUsingTypeArguments=function(e,t,r,n){var i=e.resolveUsingTypeArguments(t,r,n);return i&&this.compileFunction(i)?i: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.signature.requiredParameters=0?"case"+l.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){A=r.flow;m&&A.set(1),g&&A.set(2),E&&A.set(16)}return y},t.prototype.compileThrowStatement=function(e){var t=this.currentFunction.flow;return t.set(2),t.set(1),this.module.createUnreachable()},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}y=this.currentType}if(l.is(u.CommonFlags.CONST))if(m){if(m=this.precomputeExpressionRef(m),_BinaryenExpressionGetId(m)==p.ExpressionId.Const){var g=new u.Local(r,d,-1,y);switch(_BinaryenExpressionGetType(m)){case p.NativeType.I32:g=g.withConstantIntegerValue(_BinaryenConstGetValueI32(m),0);break;case p.NativeType.I64:g=g.withConstantIntegerValue(_BinaryenConstGetValueI64Low(m),_BinaryenConstGetValueI64High(m));break;case p.NativeType.F32:g=g.withConstantFloatValue(_BinaryenConstGetValueF32(m));break;case p.NativeType.F64:g=g.withConstantFloatValue(_BinaryenConstGetValueF64(m));break;default:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,l.range),this.module.createUnreachable()}var E=n.flow.scopedLocals;if(E){if(E.has(d))return this.error(c.DiagnosticCode.Duplicate_identifier_0,l.name.range,d),0}else n.flow.scopedLocals=E=new Map;return E.set(d,g),0}this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,l.range)}else this.error(c.DiagnosticCode._const_declarations_must_be_initialized,l.range);l.is(u.CommonFlags.LET)?n.flow.addScopedLocal(d,y,l.name):n.addLocal(y,d),m&&s.push(this.compileAssignmentWithValue(l.name,m))}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=f(this.compileExpression(e.condition,_.Type.i32,0),this.currentType,t);if(this.currentFunction.isAny(u.CommonFlags.GENERIC|u.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 l=t.createBlock(o,[t.createLoop(s,t.createIf(r,t.createBlock(null,[c,t.createBreak(s)],p.NativeType.None)))],p.NativeType.None);return l},t.prototype.compileInlineConstant=function(e,t,r){assert(e.is(u.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.error(c.DiagnosticCode.Operation_not_supported,e.declaration.range),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.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.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,u,h,d=this.module,y=e.left,m=e.right,g=!1,T=!1,I=null;switch(e.operator){case l.Token.LESSTHAN:if(n=this.compileExpressionRetainType(y,t),i=this.currentType,a=this.compileExpressionRetainType(m,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,d.createUnreachable();switch(n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m),s.kind){case 0:case 1:case 2:h=d.createBinary(p.BinaryOp.LtI32,n,a);break;case 3:h=d.createBinary(p.BinaryOp.LtI64,n,a);break;case 4:h=d.createBinary(this.options.isWasm64?p.BinaryOp.LtI64:p.BinaryOp.LtI32,n,a);break;case 5:case 6:case 7:case 10:h=d.createBinary(p.BinaryOp.LtU32,n,a);break;case 9:h=d.createBinary(this.options.isWasm64?p.BinaryOp.LtU64:p.BinaryOp.LtU32,n,a);break;case 8:h=d.createBinary(p.BinaryOp.LtU64,n,a);break;case 11:h=d.createBinary(p.BinaryOp.LtF32,n,a);break;case 12:h=d.createBinary(p.BinaryOp.LtF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable()}this.currentType=_.Type.bool;break;case l.Token.GREATERTHAN:if(n=this.compileExpressionRetainType(y,t),i=this.currentType,a=this.compileExpressionRetainType(m,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,d.createUnreachable();switch(n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m),s.kind){case 0:case 1:case 2:h=d.createBinary(p.BinaryOp.GtI32,n,a);break;case 4:h=d.createBinary(this.options.isWasm64?p.BinaryOp.GtI64:p.BinaryOp.GtI32,n,a);break;case 3:h=d.createBinary(p.BinaryOp.GtI64,n,a);break;case 5:case 6:case 7:case 10:h=d.createBinary(p.BinaryOp.GtU32,n,a);break;case 9:h=d.createBinary(this.options.isWasm64?p.BinaryOp.GtU64:p.BinaryOp.GtU32,n,a);break;case 8:h=d.createBinary(p.BinaryOp.GtU64,n,a);break;case 11:h=d.createBinary(p.BinaryOp.GtF32,n,a);break;case 12:h=d.createBinary(p.BinaryOp.GtF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable()}this.currentType=_.Type.bool;break;case l.Token.LESSTHAN_EQUALS:if(n=this.compileExpressionRetainType(y,t),i=this.currentType,a=this.compileExpressionRetainType(m,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,d.createUnreachable();switch(n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m),s.kind){case 0:case 1:case 2:h=d.createBinary(p.BinaryOp.LeI32,n,a);break;case 4:h=d.createBinary(this.options.isWasm64?p.BinaryOp.LeI64:p.BinaryOp.LeI32,n,a);break;case 3:h=d.createBinary(p.BinaryOp.LeI64,n,a);break;case 5:case 6:case 7:case 10:h=d.createBinary(p.BinaryOp.LeU32,n,a);break;case 9:h=d.createBinary(this.options.isWasm64?p.BinaryOp.LeU64:p.BinaryOp.LeU32,n,a);break;case 8:h=d.createBinary(p.BinaryOp.LeU64,n,a);break;case 11:h=d.createBinary(p.BinaryOp.LeF32,n,a);break;case 12:h=d.createBinary(p.BinaryOp.LeF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable()}this.currentType=_.Type.bool;break;case l.Token.GREATERTHAN_EQUALS:if(n=this.compileExpressionRetainType(y,t),i=this.currentType,a=this.compileExpressionRetainType(m,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,d.createUnreachable();switch(n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m),s.kind){case 0:case 1:case 2:h=d.createBinary(p.BinaryOp.GeI32,n,a);break;case 4:h=d.createBinary(this.options.isWasm64?p.BinaryOp.GeI64:p.BinaryOp.GeI32,n,a);break;case 3:h=d.createBinary(p.BinaryOp.GeI64,n,a);break;case 5:case 6:case 7:case 10:h=d.createBinary(p.BinaryOp.GeU32,n,a);break;case 9:h=d.createBinary(this.options.isWasm64?p.BinaryOp.GeU64:p.BinaryOp.GeU32,n,a);break;case 8:h=d.createBinary(p.BinaryOp.GeU64,n,a);break;case 11:h=d.createBinary(p.BinaryOp.GeF32,n,a);break;case 12:h=d.createBinary(p.BinaryOp.GeF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable()}this.currentType=_.Type.bool;break;case l.Token.EQUALS_EQUALS_EQUALS:case l.Token.EQUALS_EQUALS:if(n=this.compileExpressionRetainType(y,t),i=this.currentType,a=this.compileExpressionRetainType(m,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,l.operatorTokenToString(e.operator),i.toString(),o.toString()),this.currentType=t,d.createUnreachable();switch(n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:h=d.createBinary(p.BinaryOp.EqI32,n,a);break;case 9:if(this.currentType.is(256))if(null!=(v=(A=assert(this.currentType.classReference)).prototype.fnEquals)){h=this.compileOperatorOverload(A,v,n,a),assert(this.currentType==_.Type.bool);break}case 4:h=d.createBinary(this.options.isWasm64?p.BinaryOp.EqI64:p.BinaryOp.EqI32,n,a);break;case 3:case 8:h=d.createBinary(p.BinaryOp.EqI64,n,a);break;case 11:h=d.createBinary(p.BinaryOp.EqF32,n,a);break;case 12:h=d.createBinary(p.BinaryOp.EqF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable()}this.currentType=_.Type.bool;break;case l.Token.EXCLAMATION_EQUALS_EQUALS:case l.Token.EXCLAMATION_EQUALS:if(n=this.compileExpressionRetainType(y,t),i=this.currentType,a=this.compileExpressionRetainType(m,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,l.operatorTokenToString(e.operator),i.toString(),o.toString()),this.currentType=t,d.createUnreachable();switch(n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:h=d.createBinary(p.BinaryOp.NeI32,n,a);break;case 9:case 4:h=d.createBinary(this.options.isWasm64?p.BinaryOp.NeI64:p.BinaryOp.NeI32,n,a);break;case 3:case 8:h=d.createBinary(p.BinaryOp.NeI64,n,a);break;case 11:h=d.createBinary(p.BinaryOp.NeF32,n,a);break;case 12:h=d.createBinary(p.BinaryOp.NeF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable()}this.currentType=_.Type.bool;break;case l.Token.EQUALS:return this.compileAssignment(y,m,t);case l.Token.PLUS_EQUALS:g=!0;case l.Token.PLUS:if(n=this.compileExpressionRetainType(y,t,!1),g)a=this.compileExpression(m,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(m,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,d.createUnreachable();n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:T=!0;case 2:case 7:h=d.createBinary(p.BinaryOp.AddI32,n,a);break;case 9:var A,v;if(this.currentType.is(256))if(null!=(v=(A=assert(this.currentType.classReference)).prototype.fnConcat)){h=this.compileOperatorOverload(A,v,n,a);break}case 4:h=d.createBinary(this.options.isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,n,a);break;case 3:case 8:h=d.createBinary(p.BinaryOp.AddI64,n,a);break;case 11:h=d.createBinary(p.BinaryOp.AddF32,n,a);break;case 12:h=d.createBinary(p.BinaryOp.AddF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable()}break;case l.Token.MINUS_EQUALS:g=!0;case l.Token.MINUS:if(n=this.compileExpressionRetainType(y,t,!1),g)a=this.compileExpression(m,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(m,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,d.createUnreachable();n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:T=!0;case 2:case 7:h=d.createBinary(p.BinaryOp.SubI32,n,a);break;case 9:case 4:h=d.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,n,a);break;case 3:case 8:h=d.createBinary(p.BinaryOp.SubI64,n,a);break;case 11:h=d.createBinary(p.BinaryOp.SubF32,n,a);break;case 12:h=d.createBinary(p.BinaryOp.SubF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable()}break;case l.Token.ASTERISK_EQUALS:g=!0;case l.Token.ASTERISK:if(n=this.compileExpressionRetainType(y,t,!1),g)a=this.compileExpression(m,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(m,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,d.createUnreachable();n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:T=!0;case 2:case 7:h=d.createBinary(p.BinaryOp.MulI32,n,a);break;case 9:case 4:h=d.createBinary(this.options.isWasm64?p.BinaryOp.MulI64:p.BinaryOp.MulI32,n,a);break;case 3:case 8:h=d.createBinary(p.BinaryOp.MulI64,n,a);break;case 11:h=d.createBinary(p.BinaryOp.MulF32,n,a);break;case 12:h=d.createBinary(p.BinaryOp.MulF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable()}break;case l.Token.SLASH_EQUALS:g=!0;case l.Token.SLASH:if(n=this.compileExpressionRetainType(y,t,!0),g)a=this.compileExpression(m,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(m,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,d.createUnreachable();n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m)}switch(this.currentType.kind){case 0:case 1:T=!0;case 2:h=d.createBinary(p.BinaryOp.DivI32,n,a);break;case 4:h=d.createBinary(this.options.isWasm64?p.BinaryOp.DivI64:p.BinaryOp.DivI32,n,a);break;case 3:h=d.createBinary(p.BinaryOp.DivI64,n,a);break;case 5:case 6:case 10:T=!0;case 7:h=d.createBinary(p.BinaryOp.DivU32,n,a);break;case 9:h=d.createBinary(this.options.isWasm64?p.BinaryOp.DivU64:p.BinaryOp.DivU32,n,a);break;case 8:h=d.createBinary(p.BinaryOp.DivU64,n,a);break;case 11:h=d.createBinary(p.BinaryOp.DivF32,n,a);break;case 12:h=d.createBinary(p.BinaryOp.DivF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable()}break;case l.Token.PERCENT_EQUALS:g=!0;case l.Token.PERCENT:if(n=this.compileExpressionRetainType(y,t,!0),g)a=this.compileExpression(m,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(m,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,d.createUnreachable();n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m)}switch(this.currentType.kind){case 0:case 1:case 2:h=d.createBinary(p.BinaryOp.RemI32,n,a);break;case 4:h=d.createBinary(this.options.isWasm64?p.BinaryOp.RemI64:p.BinaryOp.RemI32,n,a);break;case 3:h=d.createBinary(p.BinaryOp.RemI64,n,a);break;case 5:case 6:case 7:case 10:h=d.createBinary(p.BinaryOp.RemU32,n,a);break;case 9:h=d.createBinary(this.options.isWasm64?p.BinaryOp.RemU64:p.BinaryOp.RemU32,n,a);break;case 8:h=d.createBinary(p.BinaryOp.RemU64,n,a);break;case 11:case 12:this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable();break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable()}break;case l.Token.LESSTHAN_LESSTHAN_EQUALS:g=!0;case l.Token.LESSTHAN_LESSTHAN:switch(n=this.compileExpressionRetainType(y,t,!1),a=this.compileExpression(m,this.currentType,1,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:T=!0;default:h=d.createBinary(p.BinaryOp.ShlI32,n,a);break;case 3:case 8:h=d.createBinary(p.BinaryOp.ShlI64,n,a);break;case 9:case 4:h=d.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,l.operatorTokenToString(e.operator),this.currentType.toString()),d.createUnreachable();case 13:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable()}break;case l.Token.GREATERTHAN_GREATERTHAN_EQUALS:g=!0;case l.Token.GREATERTHAN_GREATERTHAN:switch(n=this.compileExpressionRetainType(y,t,!0),a=this.compileExpression(m,this.currentType,1,!0),this.currentType.kind){default:h=d.createBinary(p.BinaryOp.ShrI32,n,a);break;case 3:h=d.createBinary(p.BinaryOp.ShrI64,n,a);break;case 4:h=d.createBinary(this.options.isWasm64?p.BinaryOp.ShrI64:p.BinaryOp.ShrI32,n,a);break;case 5:case 6:case 10:case 7:h=d.createBinary(p.BinaryOp.ShrU32,n,a);break;case 8:h=d.createBinary(p.BinaryOp.ShrU64,n,a);break;case 9:h=d.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,l.operatorTokenToString(e.operator),this.currentType.toString()),d.createUnreachable();case 13:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable()}break;case l.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:g=!0;case l.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:switch(n=this.compileExpressionRetainType(y,t,!0),a=this.compileExpression(m,this.currentType,1,!0),this.currentType.kind){case 0:case 1:T=!0;default:h=d.createBinary(p.BinaryOp.ShrU32,n,a);break;case 3:case 8:h=d.createBinary(p.BinaryOp.ShrU64,n,a);break;case 9:case 4:h=d.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),h=d.createUnreachable()}break;case l.Token.AMPERSAND_EQUALS:g=!0;case l.Token.AMPERSAND:if(n=this.compileExpressionRetainType(y,t,!1),g)a=this.compileExpression(m,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(m,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,d.createUnreachable();n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:T=!0;default:h=d.createBinary(p.BinaryOp.AndI32,n,a);break;case 3:case 8:h=d.createBinary(p.BinaryOp.AndI64,n,a);break;case 9:case 4:h=d.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),h=d.createUnreachable()}break;case l.Token.BAR_EQUALS:g=!0;case l.Token.BAR:if(n=this.compileExpressionRetainType(y,t,!1),g)a=this.compileExpression(m,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(m,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,d.createUnreachable();n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:T=!0;default:h=d.createBinary(p.BinaryOp.OrI32,n,a);break;case 3:case 8:h=d.createBinary(p.BinaryOp.OrI64,n,a);break;case 9:case 4:h=d.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),h=d.createUnreachable()}break;case l.Token.CARET_EQUALS:g=!0;case l.Token.CARET:if(n=this.compileExpressionRetainType(y,t,!1),g)a=this.compileExpression(m,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(m,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,d.createUnreachable();n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:T=!0;default:h=d.createBinary(p.BinaryOp.XorI32,n,a);break;case 3:case 8:h=d.createBinary(p.BinaryOp.XorI64,n,a);break;case 9:case 4:h=d.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),h=d.createUnreachable()}break;case l.Token.AMPERSAND_AMPERSAND:n=this.compileExpressionRetainType(y,t),a=this.compileExpression(m,this.currentType,1,!1),(h=d.cloneExpression(n,!0,0))||(I=this.currentFunction.getAndFreeTempLocal(this.currentType),n=d.createTeeLocal(I.index,n)),T=this.currentType.is(36),u=f(n,this.currentType,d),h=h?d.createIf(u,a,h):d.createIf(u,a,d.createGetLocal(assert(I).index,this.currentType.toNativeType()));break;case l.Token.BAR_BAR:n=this.compileExpressionRetainType(y,t),a=this.compileExpression(m,this.currentType,1,!1),(h=this.module.cloneExpression(n,!0,0))||(I=this.currentFunction.getAndFreeTempLocal(this.currentType),n=d.createTeeLocal(I.index,n)),T=this.currentType.is(36),u=f(n,this.currentType,d),h=h?this.module.createIf(u,h,a):d.createIf(u,d.createGetLocal(assert(I).index,this.currentType.toNativeType()),a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=this.module.createUnreachable()}return T&&r&&(assert(this.currentType.is(36)),h=E(h,this.currentType,d)),g?this.compileAssignmentWithValue(y,h,t!=_.Type.void):h},t.prototype.compileOperatorOverload=function(e,t,r,n){var i=e.prototype,a=assert(assert(i.members).get(t));assert(a.kind==u.ElementKind.FUNCTION_PROTOTYPE);var o=a.resolve();return o?this.makeCallDirect(o,[r,n]):this.module.createUnreachable()},t.prototype.compileAssignment=function(e,t,r){var n=this.currentFunction,i=this.program.resolveExpression(e,n);if(!i)return this.module.createUnreachable();var a,o=i.element;switch(o.kind){case u.ElementKind.GLOBAL:if(!this.compileGlobal(o))return this.module.createUnreachable();assert(o.type!=_.Type.void,"concrete type expected");case u.ElementKind.LOCAL:case u.ElementKind.FIELD:a=o.type;break;case u.ElementKind.PROPERTY:var s=o.setterPrototype;if(s){var p=s.resolve();if(!p)return this.module.createUnreachable();assert(1==p.signature.parameterTypes.length),a=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 u.ElementKind.FUNCTION_PROTOTYPE:if(e.kind==h.NodeKind.ELEMENTACCESS&&i.target&&i.target.kind==u.ElementKind.CLASS){if(o.simpleName!=i.target.prototype.fnIndexedGet)return this.error(c.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,i.target.toString()),this.module.createUnreachable();var l=o.resolve(null);if(l){a=l.signature.returnType;break}}default:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}var d=this.compileExpression(t,a);return this.compileAssignmentWithValue(e,d,r!=_.Type.void)},t.prototype.compileAssignmentWithValue=function(e,t,r){void 0===r&&(r=!1);var n=this.module,i=this.program.resolveExpression(e,this.currentFunction);if(!i)return n.createUnreachable();var a=i.element;switch(a.kind){case u.ElementKind.LOCAL:return this.currentType=r?a.type:_.Type.void,a.is(u.CommonFlags.CONST)?(this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,a.internalName),n.createUnreachable()):r?n.createTeeLocal(a.index,t):n.createSetLocal(a.index,t);case u.ElementKind.GLOBAL:if(!this.compileGlobal(a))return n.createUnreachable();var o=a.type;if(assert(o!=_.Type.void),this.currentType=r?o:_.Type.void,a.is(u.CommonFlags.CONST))return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,a.internalName),n.createUnreachable();if(r){var s=o.toNativeType(),p=a.internalName;return n.createBlock(null,[n.createSetGlobal(p,t),n.createGetGlobal(p,s)],s)}return n.createSetGlobal(a.internalName,t);case u.ElementKind.FIELD:if(a.is(u.CommonFlags.READONLY))return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,a.internalName),n.createUnreachable();assert(i.isInstanceTarget);var l=this.compileExpression(i.targetExpression,i.target.type);o=a.type;this.currentType=r?o:_.Type.void;s=o.toNativeType();if(r){var d=this.currentFunction.getAndFreeTempLocal(o).index;return n.createBlock(null,[n.createSetLocal(d,t),n.createStore(o.size>>3,l,n.createGetLocal(d,s),s,a.memoryOffset),n.createGetLocal(d,s)],s)}return n.createStore(o.size>>3,l,t,s,a.memoryOffset);case u.ElementKind.PROPERTY:var y=a.setterPrototype;if(y){if(!(A=y.resolve()))return n.createUnreachable();if(!r){if(A.is(u.CommonFlags.INSTANCE)){assert(i.isInstanceTarget);var m=this.compileExpression(i.targetExpression,i.target.type);return this.makeCallDirect(A,[m,t])}return this.makeCallDirect(A,[t])}var g=a.getterPrototype;if(assert(null!=g),!(T=g.resolve()))return n.createUnreachable();var E=(O=T.signature.returnType).toNativeType();if(A.is(u.CommonFlags.INSTANCE)){assert(i.isInstanceTarget);m=this.compileExpression(i.targetExpression,i.target.type),d=this.currentFunction.getAndFreeTempLocal(O).index;return n.createBlock(null,[this.makeCallDirect(A,[n.createTeeLocal(d,m),t]),this.makeCallDirect(T,[n.createGetLocal(d,E)])],E)}return n.createBlock(null,[this.makeCallDirect(A,[t]),this.makeCallDirect(T)],E)}return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,a.internalName),n.createUnreachable();case u.ElementKind.FUNCTION_PROTOTYPE:if(e.kind==h.NodeKind.ELEMENTACCESS){var T;if(assert(i.isInstanceTarget),!(T=a.resolve()))return n.createUnreachable();var f=i.target.prototype.fnIndexedSet,I=void 0;if(null!=f&&i.target.members&&(I=i.target.members.get(f))&&I.kind==u.ElementKind.FUNCTION_PROTOTYPE){var A;if(!(A=I.resolve()))return n.createUnreachable();var v=i.target.type,N=(l=this.compileExpression(i.targetExpression,v),this.compileExpression(e.elementExpression,_.Type.i32));if(r){var C=this.currentFunction.getTempLocal(v),S=this.currentFunction.getAndFreeTempLocal(this.currentType),O=T.signature.returnType;return this.currentFunction.freeTempLocal(C),n.createBlock(null,[this.makeCallDirect(A,[n.createTeeLocal(C.index,l),n.createTeeLocal(S.index,N),t]),this.makeCallDirect(T,[n.createGetLocal(C.index,C.type.toNativeType()),n.createGetLocal(S.index,S.type.toNativeType())])],O.toNativeType())}return this.makeCallDirect(A,[l,N,t])}return this.error(c.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,i.target.internalName),n.createUnreachable()}}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()},t.prototype.compileCallExpression=function(e,t){var r=this.module,n=this.currentFunction,i=this.program.resolveExpression(e.expression,n);if(!i)return r.createUnreachable();var a,o,l=i.element;switch(l.kind){case u.ElementKind.FUNCTION_PROTOTYPE:var h=l;if(h.is(u.CommonFlags.AMBIENT|u.CommonFlags.BUILTIN)){var _=s.compileCall(this,h,h.resolveBuiltinTypeArguments(e.typeArguments,n.contextualTypeArguments),e.arguments,t,e);return _||(this.error(c.DiagnosticCode.Operation_not_supported,e.range),r.createUnreachable())}var d=h.resolveUsingTypeArguments(e.typeArguments,n.contextualTypeArguments,e);if(!d)return r.createUnreachable();var y=0;if(d.is(u.CommonFlags.INSTANCE)){if(assert(i.isInstanceTarget),!(y=this.compileExpression(i.targetExpression,i.target.type)))return r.createUnreachable()}else assert(!i.isInstanceTarget);return this.compileCallDirect(d,e.arguments,e,y);case u.ElementKind.LOCAL:if(a=l.type.signatureReference){o=r.createGetLocal(l.index,p.NativeType.I32);break}return this.error(c.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,e.range,l.type.toString()),r.createUnreachable();case u.ElementKind.GLOBAL:if(a=l.type.signatureReference){o=r.createGetGlobal(l.internalName,l.type.toNativeType());break}return this.error(c.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,e.range,l.type.toString()),r.createUnreachable();case u.ElementKind.FIELD:var m=l.type;if(a=m.signatureReference){var g=this.compileExpression(assert(i.targetExpression),m);o=r.createLoad(4,!1,g,p.NativeType.I32,l.memoryOffset);break}return this.error(c.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,e.range,l.type.toString()),r.createUnreachable();case u.ElementKind.FUNCTION_TARGET:a=l.signature,o=this.compileExpression(e.expression,l.type);break;case u.ElementKind.PROPERTY:default:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),r.createUnreachable()}return this.compileCallIndirect(a,o,e.arguments,e)},t.prototype.checkCallSignature=function(e,t,r,n){if(r!=(null!=e.thisType))return this.error(c.DiagnosticCode.Operation_not_supported,n.range),!1;var i=e.hasRest;if(i)return this.error(c.DiagnosticCode.Operation_not_supported,n.range),!1;var a=e.requiredParameters,o=e.parameterTypes.length;return to&&!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){void 0===n&&(n=0);var i=t.length,a=e.signature;if(!this.checkCallSignature(a,i,0!=n,r))return this.module.createUnreachable();var o=n?i+1:i,s=new Array(o),c=0;n&&(s[0]=n,c=1);for(var p=a.parameterTypes,u=0;u=i);var s=this.module;if(!this.compileFunction(e))return s.createUnreachable();if(r=0),this.currentType=T,this.module.createGetLocal(f,T.toNativeType());case u.ElementKind.GLOBAL:if(E.is(u.CommonFlags.AMBIENT|u.CommonFlags.BUILTIN))return s.compileGetConstant(this,E,e);if(!this.compileGlobal(E))return this.module.createUnreachable();var I=E.type;return assert(I!=_.Type.void),E.is(u.CommonFlags.INLINED)?this.compileInlineConstant(E,t,r):(this.currentType=I,this.module.createGetGlobal(E.internalName,I.toNativeType()));case u.ElementKind.ENUMVALUE:return E.is(u.CommonFlags.COMPILED)?(this.currentType=_.Type.i32,E.is(u.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 u.ElementKind.FUNCTION_PROTOTYPE:var v=E.resolve(null,this.currentFunction.contextualTypeArguments);if(!v||!this.compileFunction(v))return n.createUnreachable();var N=this.ensureFunctionTableEntry(v);return this.currentType=v.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.elementsLookup.get("Array")?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 1:if(i64_is_i16(o))return n.createI32(i64_low(o));break;case 2:if(i64_is_i32(o))return n.createI32(i64_low(o));break;case 5:if(i64_is_u8(o))return n.createI32(i64_low(o));break;case 6:if(i64_is_u16(o))return n.createI32(i64_low(o));break;case 7:if(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_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.elementsLookup.get("Array"));if(!a||a.kind!=u.ElementKind.CLASS_PROTOTYPE)return i.createUnreachable();var o=a.resolve([e]);if(!o)return i.createUnreachable();var s,l,h=t.length,_=e.toNativeType();switch(_){case p.NativeType.I32:s=changetype(new Int32Array(h)),l=4*h;break;case p.NativeType.I64:s=changetype(new Array(h)),l=8*h;break;case p.NativeType.F32:s=changetype(new Float32Array(h)),l=4*h;break;case p.NativeType.F64:s=changetype(new Float64Array(h)),l=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),o=this.compileExpression(a.targetExpression,this.options.usizeType,0),this.currentType=l.type,i.createLoad(l.type.size>>3,l.type.is(5),o,l.type.toNativeType(),l.memoryOffset);case u.ElementKind.PROPERTY:var d=l.getterPrototype;if(d){var y=d.resolve(null);if(!y)return i.createUnreachable();var m=y.signature;if(!this.checkCallSignature(m,0,y.is(u.CommonFlags.INSTANCE),e))return i.createUnreachable();if(y.is(u.CommonFlags.INSTANCE)){var g=assert(y.memberOf);return assert(g.kind==u.ElementKind.CLASS),o=this.compileExpression(a.targetExpression,g.type),this.currentType=m.returnType,this.compileCallDirect(y,[],e,o)}return this.currentType=m.returnType,this.compileCallDirect(y,[],e)}return this.error(c.DiagnosticCode.Property_0_does_not_exist_on_type_1,e.range,l.simpleName,l.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=f(this.compileExpression(e.condition,_.Type.u32,0),this.currentType,this.module);if(this.currentFunction.isAny(u.CommonFlags.GENERIC|u.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(u.CommonFlags.CONSTRUCTOR)){var c=s.flow;c=c.enterBranchOrScope(),s.flow=c,a=this.compileExpression(r,t);var l=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,l&&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,n,i,a,o=this.module,s=this.currentFunction,u=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,!1),h=this.currentType,d=!1;switch(e.operator){case l.Token.PLUS_PLUS:if(h.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),o.createUnreachable();switch(h.kind){case 0:case 1:case 5:case 6:case 10:d=!0;default:r=p.BinaryOp.AddI32,n=p.NativeType.I32,i=o.createI32(1);break;case 9:case 4:r=(y=this.options).isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,n=y.nativeSizeType,i=h.toNativeOne(o);break;case 3:case 8:r=p.BinaryOp.AddI64,n=p.NativeType.I64,i=o.createI64(1);break;case 11:r=p.BinaryOp.AddF32,n=p.NativeType.F32,i=o.createF32(1);break;case 12:r=p.BinaryOp.AddF64,n=p.NativeType.F64,i=o.createF64(1);break;case 13:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),o.createUnreachable()}break;case l.Token.MINUS_MINUS:if(h.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),o.createUnreachable();switch(h.kind){case 0:case 1:case 5:case 6:case 10:d=!0;default:r=p.BinaryOp.SubI32,n=p.NativeType.I32,i=o.createI32(1);break;case 9:case 4:var y;r=(y=this.options).isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,n=y.nativeSizeType,i=h.toNativeOne(o);break;case 3:case 8:r=p.BinaryOp.SubI64,n=p.NativeType.I64,i=o.createI64(1);break;case 11:r=p.BinaryOp.SubF32,n=p.NativeType.F32,i=o.createF32(1);break;case 12:r=p.BinaryOp.SubF64,n=p.NativeType.F64,i=o.createF64(1);break;case 13:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),o.createUnreachable()}break;default:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),o.createUnreachable()}var m=null;if(t==_.Type.void?a=o.createBinary(r,u,i):(m=s.getTempLocal(h),a=o.createBinary(r,this.module.createGetLocal(m.index,n),i)),d&&(assert(h.is(36)),a=E(a,h,o)),a=this.compileAssignmentWithValue(e.operand,a,!1),t==_.Type.void)return assert(!m),a;this.currentType=assert(m).type,s.freeTempLocal(m);var g=m.index;return o.createBlock(null,[o.createSetLocal(g,u),a,o.createGetLocal(g,n)],n)},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 l.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 l.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 l.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 l.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 l.Token.EXCLAMATION:n=T(n=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,!0),this.currentType,i),this.currentType=_.Type.bool;break;case l.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 l.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 T(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 f(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,l=c.getTempLocal(t.type),h=new Array;if(h.push(o.createSetLocal(l.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==u.ElementKind.FIELD){var m=y,g=m.type,E=m.prototype.declaration;assert(!m.isAny(u.CommonFlags.CONST)),E.initializer?h.push(o.createStore(g.byteSize,o.createGetLocal(l.index,p),e.compileExpression(E.initializer,g),g.toNativeType(),m.memoryOffset)):h.push(o.createStore(m.type.byteSize,o.createGetLocal(l.index,p),m.type.toNativeZero(o),m.type.toNativeType(),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(l.index,p)),c.freeTempLocal(l),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=E,t.makeIsFalseish=T,t.makeIsTrueish=f,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.Structs_cannot_extend_classes_and_vice_versa=207]="Structs_cannot_extend_classes_and_vice_versa",e[e.Structs_cannot_implement_interfaces=208]="Structs_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.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.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.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"Structs cannot extend classes and vice-versa.";case 208:return"Structs 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 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 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 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),u=a.LIBRARY_PREFIX+"builtins.ts",l=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=n.sources,l=0,h=s.length;l"),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 u=p.ParameterKind.DEFAULT;if(e.skip(o.Token.DOT_DOT_DOT)&&(c=!0,e.discard(r),u=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 l=this.parseType(e,!1);if(!l)return null;if(l.kind!=p.NodeKind.TYPE)return this.error(s.DiagnosticCode.Operation_not_supported,l.range),this.tryParseSignatureIsSignature=!0,null;a=l}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),u==p.ParameterKind.REST?this.error(s.DiagnosticCode.A_rest_parameter_cannot_be_optional,e.range()):u=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=u,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 u=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()),!(u=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,u,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 u=this.parseEnumValue(e,a.CommonFlags.NONE);if(!u)return null;c.push(u)}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(),"}"),null}var l=p.Node.createEnumDeclaration(i,c,r,t,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),l},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){var t=new Array,r=null,n=!1,i=!1;if(e.peek()!=o.Token.CLOSEPAREN)do{var a=this.parseParameter(e);if(!a)return null;switch(r&&!i&&(this.error(s.DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,r.name.range),i=!0),a.parameterKind){default:n&&this.error(s.DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,a.name.range);break;case p.ParameterKind.OPTIONAL:n=!0;break;case p.ParameterKind.REST:r=a}t.push(a)}while(e.skip(o.Token.COMMA));return e.skip(o.Token.CLOSEPAREN)?t:(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;if(e.skip(o.Token.DOT_DOT_DOT)&&(r=!0,i=e.range()),e.skip(o.Token.IDENTIFIER)){r||(i=e.range());var a=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),c=null;if((n=e.skip(o.Token.QUESTION))&&r&&this.error(s.DiagnosticCode.A_rest_parameter_cannot_be_optional,a.range),e.skip(o.Token.COLON)){if(!(c=this.parseType(e)))return null}else c=p.Node.createOmittedType(e.range(e.pos));var u=null;return!e.skip(o.Token.EQUALS)||(r&&this.error(s.DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,a.range),n?this.error(s.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,a.range):n=!0,u=this.parseExpression(e,1))?p.Node.createParameter(a,c,u,r?p.ParameterKind.REST:n?p.ParameterKind.OPTIONAL:p.ParameterKind.DEFAULT,o.Range.join(i,e.range())):null}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,u=null;if(e.skip(o.Token.LESSTHAN)){if(c=e.tokenPos,!(u=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 l=this.parseParameters(e);if(!l)return null;var h=0!=(t&a.CommonFlags.SET);h&&(1!=l.length&&this.error(s.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,i.range),l.length&&l[0].initializer&&this.error(s.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,i.range)),t&a.CommonFlags.GET&&l.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(l,_,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,u,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 u=null;if(e.skip(o.Token.COLON)){if(!(u=this.parseType(e)))return null}else u=p.Node.createOmittedType(e.range(e.pos)),this.error(s.DiagnosticCode.Type_expected,u.range);if(n&&!e.skip(o.Token.EQUALS_GREATERTHAN))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"=>"),null;var l,h=p.Node.createSignature(r,u,null,!1,e.range(c,e.pos));if(n)l=this.parseStatement(e,!1);else{if(!e.skip(o.Token.OPENBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;l=this.parseBlockStatement(e,!1)}if(!l)return null;var _=p.Node.createFunctionDeclaration(t,null,h,l,null,n?a.CommonFlags.ARROW:a.CommonFlags.NONE,e.range(i,e.pos));return p.Node.createFunctionExpression(_)},t.prototype.parseClass=function(e,t,r,n){if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;var i,c=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(o.Token.LESSTHAN)){if(!(i=this.parseTypeParameters(e)))return null;t|=a.CommonFlags.GENERIC}else i=[];var u=null;if(e.skip(o.Token.EXTENDS)){var l=this.parseType(e);if(!l)return null;if(l.kind!=p.NodeKind.TYPE)return this.error(s.DiagnosticCode.Operation_not_supported,l.range),null;u=l}var h=new Array;if(e.skip(o.Token.IMPLEMENTS))do{var _=this.parseType(e);if(!_)return null;h.push(_)}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.OPENBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(),"{"),null;var d=new Array;if(!e.skip(o.Token.CLOSEBRACE))do{var y=this.parseClassMember(e,t);if(!y)return null;d.push(y)}while(!e.skip(o.Token.CLOSEBRACE));return p.Node.createClassDeclaration(c,i,u,h,d,r,t,e.range(n,e.pos))},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&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 u=0,l=0,h=0,_=0;e.skip(o.Token.STATIC)?(c|=a.CommonFlags.STATIC,u=e.tokenPos,l=e.pos):(e.skip(o.Token.ABSTRACT)?(c|=a.CommonFlags.ABSTRACT|a.CommonFlags.INSTANCE,h=e.tokenPos,_=e.pos):c|=a.CommonFlags.INSTANCE,t&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,I=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,I=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,I=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(u,l),"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 A=g?p.Node.createConstructorExpression(e.range()):p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),v=null;if(e.skip(o.Token.LESSTHAN)){var N=e.tokenPos;if(!(v=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);if(!S)return null;E?S.length&&this.error(s.DiagnosticCode.A_get_accessor_cannot_have_parameters,A.range):T&&(1!=S.length&&this.error(s.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,A.range),S.length&&S[0].initializer&&this.error(s.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,A.range));var O=null;if(e.skip(o.Token.COLON)){if(A.kind==p.NodeKind.CONSTRUCTOR?this.error(s.DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration,e.range()):T&&this.error(s.DiagnosticCode.A_set_accessor_cannot_have_a_return_type_annotation,e.range()),!(O=this.parseType(e,A.kind==p.NodeKind.CONSTRUCTOR||T)))return null}else O=p.Node.createOmittedType(e.range(e.pos)),T||A.kind==p.NodeKind.CONSTRUCTOR||this.error(s.DiagnosticCode.Type_expected,O.range);var b=p.Node.createSignature(S,O,null,!1,e.range(C,e.pos)),L=null;if(e.skip(o.Token.OPENBRACE)){if(c&a.CommonFlags.AMBIENT&&this.error(s.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,e.range()),!(L=this.parseBlockStatement(e,!1)))return null}else c&a.CommonFlags.AMBIENT||this.error(s.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,e.range());var k=p.Node.createMethodDeclaration(A,v,b,L,n,c,e.range(r,e.pos));return e.skip(o.Token.SEMICOLON),k}if(g)this.error(s.DiagnosticCode.Constructor_implementation_is_missing,A.range);else{if(!E&&!T){c&a.CommonFlags.ABSTRACT&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(h,_),"abstract"),c&a.CommonFlags.GET&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(0,0),"get"),c&a.CommonFlags.SET&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(f,I),"set");var x=null;if(e.skip(o.Token.COLON)){if(!(x=this.parseType(e)))return null}else this.error(s.DiagnosticCode.Type_expected,e.range());var R=null;if(e.skip(o.Token.EQUALS)&&!(R=this.parseExpression(e)))return null;var B=p.Node.createFieldDeclaration(A,x,R,n,c,e.range(r,e.pos));return e.skip(o.Token.SEMICOLON),B}this.error(s.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,A.range)}return null},t.prototype.parseNamespace=function(e,t,r,n){if(e.skip(o.Token.IDENTIFIER)){var i=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(o.Token.OPENBRACE)){for(var a=new Array,c=p.Node.createNamespaceDeclaration(i,a,r,t,e.range(n,e.pos));!e.skip(o.Token.CLOSEBRACE);){var u=this.parseTopLevelStatement(e,c);if(!u)return null;u.parent=c,a.push(u)}return e.skip(o.Token.SEMICOLON),c}this.error(s.DiagnosticCode._0_expected,e.range(),"{")}else this.error(s.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseExport=function(e,t,r){if(e.skip(o.Token.OPENBRACE)){var n=new Array;if(!e.skip(o.Token.CLOSEBRACE)){do{var i=this.parseExportMember(e);if(!i)return null;n.push(i)}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(),"}"),null}var a=null;if(e.skip(o.Token.FROM)){if(!e.skip(o.Token.STRINGLITERAL))return this.error(s.DiagnosticCode.String_literal_expected,e.range()),null;a=p.Node.createStringLiteralExpression(e.readString(),e.range())}var c=p.Node.createExportStatement(n,a,t,e.range(r,e.pos));return c.normalizedPath&&!this.seenlog.has(c.normalizedPath)&&(this.backlog.push(c.normalizedPath),this.seenlog.add(c.normalizedPath)),e.skip(o.Token.SEMICOLON),c}return this.error(s.DiagnosticCode._0_expected,e.range(),"{"),null},t.prototype.parseExportMember=function(e){if(e.skip(o.Token.IDENTIFIER)){var t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(o.Token.AS)){if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;r=p.Node.createIdentifierExpression(e.readIdentifier(),e.range())}return p.Node.createExportMember(t,r,r?o.Range.join(t.range,r.range):t.range)}return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseImport=function(e){var t=e.tokenPos,r=null,n=null,i=!1;if(e.skip(o.Token.OPENBRACE)){if(r=new Array,!e.skip(o.Token.CLOSEBRACE)){do{var a=this.parseImportDeclaration(e);if(!a)return null;r.push(a)}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(),"}"),null}}else if(e.skip(o.Token.ASTERISK)){if(!e.skip(o.Token.AS))return this.error(s.DiagnosticCode._0_expected,e.range(),"as"),null;if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;n=p.Node.createIdentifierExpression(e.readIdentifier(),e.range())}else i=!0;if(i||e.skip(o.Token.FROM)){if(e.skip(o.Token.STRINGLITERAL)){var c=p.Node.createStringLiteralExpression(e.readString(),e.range()),u=void 0;return n?(assert(!r),u=p.Node.createImportStatementWithWildcard(n,c,e.range(t,e.pos))):u=p.Node.createImportStatement(r,c,e.range(t,e.pos)),this.seenlog.has(u.normalizedPath)||(this.backlog.push(u.normalizedPath),this.seenlog.add(u.normalizedPath)),e.skip(o.Token.SEMICOLON),u}this.error(s.DiagnosticCode.String_literal_expected,e.range())}else this.error(s.DiagnosticCode._0_expected,e.range(),"from");return null},t.prototype.parseImportDeclaration=function(e){if(e.skip(o.Token.IDENTIFIER)){var t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(o.Token.AS)){if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;r=p.Node.createIdentifierExpression(e.readIdentifier(),e.range())}return p.Node.createImportDeclaration(t,r,r?o.Range.join(t.range,r.range):t.range)}return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseExportImport=function(e,t){if(e.skip(o.Token.IDENTIFIER)){var r=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(o.Token.EQUALS)){if(e.skip(o.Token.IDENTIFIER)){var n=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),i=p.Node.createExportImportStatement(n,r,e.range(t,e.pos));return e.skip(o.Token.SEMICOLON),i}this.error(s.DiagnosticCode.Identifier_expected,e.range())}else this.error(s.DiagnosticCode._0_expected,e.range(),"=")}else this.error(s.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseStatement=function(e,t){void 0===t&&(t=!1);var r=e.mark(),n=null;switch(e.next()){case o.Token.BREAK:n=this.parseBreak(e);break;case o.Token.CONST:n=this.parseVariable(e,a.CommonFlags.CONST,null,e.tokenPos);break;case o.Token.CONTINUE:n=this.parseContinue(e);break;case o.Token.DO:n=this.parseDoStatement(e);break;case o.Token.FOR:n=this.parseForStatement(e);break;case o.Token.IF:n=this.parseIfStatement(e);break;case o.Token.LET:n=this.parseVariable(e,a.CommonFlags.LET,null,e.tokenPos);break;case o.Token.VAR:n=this.parseVariable(e,a.CommonFlags.NONE,null,e.tokenPos);break;case o.Token.OPENBRACE:n=this.parseBlockStatement(e,t);break;case o.Token.RETURN:t&&this.error(s.DiagnosticCode.A_return_statement_can_only_be_used_within_a_function_body,e.range()),n=this.parseReturn(e);break;case o.Token.SEMICOLON:return p.Node.createEmptyStatement(e.range(e.tokenPos));case o.Token.SWITCH:n=this.parseSwitchStatement(e);break;case o.Token.THROW:n=this.parseThrowStatement(e);break;case o.Token.TRY:n=this.parseTryStatement(e);break;case o.Token.TYPE:n=this.parseTypeDeclaration(e,a.CommonFlags.NONE,null,e.tokenPos);break;case o.Token.VOID:n=this.parseVoidStatement(e);break;case o.Token.WHILE:n=this.parseWhileStatement(e);break;default:e.reset(r),n=this.parseExpressionStatement(e)}return n?e.discard(r):(e.reset(r),this.skipStatement(e)),n},t.prototype.parseBlockStatement=function(e,t){for(var r=e.tokenPos,n=new Array;!e.skip(o.Token.CLOSEBRACE);){var i=e.mark(),a=this.parseStatement(e,t);a?(e.discard(i),n.push(a)):(e.reset(i),this.skipStatement(e))}var s=p.Node.createBlockStatement(n,e.range(r,e.pos));return e.skip(o.Token.SEMICOLON),s},t.prototype.parseBreak=function(e){var t=null;e.peek(!0)!=o.Token.IDENTIFIER||e.nextTokenOnNewLine||(e.next(!0),t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()));var r=p.Node.createBreakStatement(t,e.range());return e.skip(o.Token.SEMICOLON),r},t.prototype.parseContinue=function(e){var t=null;e.peek(!0)!=o.Token.IDENTIFIER||e.nextTokenOnNewLine||(e.next(!0),t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()));var r=p.Node.createContinueStatement(t,e.range());return e.skip(o.Token.SEMICOLON),r},t.prototype.parseDoStatement=function(e){var t=e.tokenPos,r=this.parseStatement(e);if(!r)return null;if(e.skip(o.Token.WHILE))if(e.skip(o.Token.OPENPAREN)){var n=this.parseExpression(e);if(!n)return null;if(e.skip(o.Token.CLOSEPAREN)){var i=p.Node.createDoStatement(r,n,e.range(t,e.pos));return e.skip(o.Token.SEMICOLON),i}this.error(s.DiagnosticCode._0_expected,e.range(),")")}else this.error(s.DiagnosticCode._0_expected,e.range(),"(");else this.error(s.DiagnosticCode._0_expected,e.range(),"while");return null},t.prototype.parseExpressionStatement=function(e){var t=this.parseExpression(e);if(!t)return null;var r=p.Node.createExpressionStatement(t);return e.skip(o.Token.SEMICOLON),r},t.prototype.parseForStatement=function(e){var t=e.tokenPos;if(e.skip(o.Token.OPENPAREN)){var r=null;if(e.skip(o.Token.CONST))r=this.parseVariable(e,a.CommonFlags.CONST,null,e.tokenPos);else if(e.skip(o.Token.LET))r=this.parseVariable(e,a.CommonFlags.LET,null,e.tokenPos);else if(e.skip(o.Token.VAR))r=this.parseVariable(e,a.CommonFlags.NONE,null,e.tokenPos);else if(!e.skip(o.Token.SEMICOLON)&&!(r=this.parseExpressionStatement(e)))return null;if(e.token==o.Token.SEMICOLON){var n=null;if(!e.skip(o.Token.SEMICOLON)&&!(n=this.parseExpressionStatement(e)))return null;if(e.token==o.Token.SEMICOLON){var i=null;if(!e.skip(o.Token.CLOSEPAREN)){if(!(i=this.parseExpression(e)))return null;if(!e.skip(o.Token.CLOSEPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(),")"),null}var c=this.parseStatement(e);return c?p.Node.createForStatement(r,n?n.expression:null,i,c,e.range(t,e.pos)):null}this.error(s.DiagnosticCode._0_expected,e.range(),";")}else this.error(s.DiagnosticCode._0_expected,e.range(),";")}else this.error(s.DiagnosticCode._0_expected,e.range(),"(");return null},t.prototype.parseIfStatement=function(e){var t=e.tokenPos;if(e.skip(o.Token.OPENPAREN)){var r=this.parseExpression(e);if(!r)return null;if(e.skip(o.Token.CLOSEPAREN)){var n=this.parseStatement(e);if(!n)return null;var i=null;return e.skip(o.Token.ELSE)&&!(i=this.parseStatement(e))?null:p.Node.createIfStatement(r,n,i,e.range(t,e.pos))}this.error(s.DiagnosticCode._0_expected,e.range(),")")}else this.error(s.DiagnosticCode._0_expected,e.range(),"(");return null},t.prototype.parseSwitchStatement=function(e){var t=e.tokenPos;if(e.skip(o.Token.OPENPAREN)){var r=this.parseExpression(e);if(!r)return null;if(e.skip(o.Token.CLOSEPAREN)){if(e.skip(o.Token.OPENBRACE)){for(var n=new Array;!e.skip(o.Token.CLOSEBRACE);){var i=this.parseSwitchCase(e);if(!i)return null;n.push(i)}var a=p.Node.createSwitchStatement(r,n,e.range(t,e.pos));return e.skip(o.Token.SEMICOLON),a}this.error(s.DiagnosticCode._0_expected,e.range(),"{")}else this.error(s.DiagnosticCode._0_expected,e.range(),")")}else this.error(s.DiagnosticCode._0_expected,e.range(),"(");return null},t.prototype.parseSwitchCase=function(e){var t,r,n=e.tokenPos;if(e.skip(o.Token.CASE)){var i=this.parseExpression(e);if(!i)return null;if(e.skip(o.Token.COLON)){for(t=new Array;e.peek()!=o.Token.CASE&&e.nextToken!=o.Token.DEFAULT&&e.nextToken!=o.Token.CLOSEBRACE;){if(!(r=this.parseStatement(e)))return null;t.push(r)}return p.Node.createSwitchCase(i,t,e.range(n,e.pos))}this.error(s.DiagnosticCode._0_expected,e.range(),":")}else if(e.skip(o.Token.DEFAULT)){if(e.skip(o.Token.COLON)){for(t=new Array;e.peek()!=o.Token.CASE&&e.nextToken!=o.Token.DEFAULT&&e.nextToken!=o.Token.CLOSEBRACE;){if(!(r=this.parseStatement(e)))return null;t.push(r)}return p.Node.createSwitchCase(null,t,e.range(n,e.pos))}this.error(s.DiagnosticCode._0_expected,e.range(),":")}else this.error(s.DiagnosticCode._case_or_default_expected,e.range());return null},t.prototype.parseThrowStatement=function(e){var t=e.tokenPos,r=this.parseExpression(e);if(!r)return null;var n=p.Node.createThrowStatement(r,e.range(t,e.pos));return e.skip(o.Token.SEMICOLON),n},t.prototype.parseTryStatement=function(e){var t,r=e.tokenPos;if(e.skip(o.Token.OPENBRACE)){for(var n=new Array;!e.skip(o.Token.CLOSEBRACE);){if(!(t=this.parseStatement(e)))return null;n.push(t)}var i=null,a=null,c=null;if(e.skip(o.Token.CATCH)){if(!e.skip(o.Token.OPENPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(),"("),null;if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;if(i=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),!e.skip(o.Token.CLOSEPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(),")"),null;if(!e.skip(o.Token.OPENBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(),"{"),null;for(a=[];!e.skip(o.Token.CLOSEBRACE);){if(!(t=this.parseStatement(e)))return null;a.push(t)}}if(e.skip(o.Token.FINALLY)){if(!e.skip(o.Token.OPENBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(),"{"),null;for(c=[];!e.skip(o.Token.CLOSEBRACE);){if(!(t=this.parseStatement(e)))return null;c.push(t)}}if(!a&&!c)return this.error(s.DiagnosticCode._0_expected,e.range(),"catch"),null;var u=p.Node.createTryStatement(n,i,a,c,e.range(r,e.pos));return e.skip(o.Token.SEMICOLON),u}return this.error(s.DiagnosticCode._0_expected,e.range(),"{"),null},t.prototype.parseTypeDeclaration=function(e,t,r,n){if(e.skip(o.Token.IDENTIFIER)){var i=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),c=null;if(e.skip(o.Token.LESSTHAN)){if(!(c=this.parseTypeParameters(e)))return null;t|=a.CommonFlags.GENERIC}if(e.skip(o.Token.EQUALS)){var u=this.parseType(e);if(!u)return null;var l=p.Node.createTypeDeclaration(i,c,u,r,t,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),l}this.error(s.DiagnosticCode._0_expected,e.range(),"=")}else this.error(s.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseVoidStatement=function(e){var t=e.tokenPos,r=this.parseExpression(e,20);if(!r)return null;var n=p.Node.createVoidStatement(r,e.range(t,e.pos));return e.skip(o.Token.SEMICOLON),n},t.prototype.parseWhileStatement=function(e){var t=e.tokenPos;if(e.skip(o.Token.OPENPAREN)){var r=this.parseExpression(e);if(!r)return null;if(e.skip(o.Token.CLOSEPAREN)){var n=this.parseStatement(e);if(!n)return null;var i=p.Node.createWhileStatement(r,n,e.range(t,e.pos));return e.skip(o.Token.SEMICOLON),i}this.error(s.DiagnosticCode._0_expected,e.range(),")")}else this.error(s.DiagnosticCode._0_expected,e.range(),"(");return null},t.prototype.parseExpressionStart=function(e){var t=e.next(!0),r=e.tokenPos,n=null;if(t==o.Token.NULL)return p.Node.createNullExpression(e.range());if(t==o.Token.TRUE)return p.Node.createTrueExpression(e.range());if(t==o.Token.FALSE)return p.Node.createFalseExpression(e.range());var i=function(e){switch(e){case o.Token.DOT_DOT_DOT:return 1;case o.Token.YIELD:return 2;case o.Token.EXCLAMATION:case o.Token.TILDE:case o.Token.PLUS:case o.Token.MINUS:case o.Token.PLUS_PLUS:case o.Token.MINUS_MINUS:case o.Token.TYPEOF:case o.Token.VOID:case o.Token.DELETE:return 16;case o.Token.NEW:return 19;default:return-1}}(t);if(-1!=i){var a=void 0;return t==o.Token.NEW?(a=this.parseExpression(e,18))?a.kind==p.NodeKind.CALL?p.Node.createNewExpression(a.expression,a.typeArguments,a.arguments,e.range(r,e.pos)):(this.error(s.DiagnosticCode.Operation_not_supported,e.range()),null):null:(a=this.parseExpression(e,i))?(t!=o.Token.PLUS_PLUS&&t!=o.Token.MINUS_MINUS||a.kind!=p.NodeKind.IDENTIFIER&&a.kind!=p.NodeKind.ELEMENTACCESS&&a.kind!=p.NodeKind.PROPERTYACCESS&&this.error(s.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,a.range),p.Node.createUnaryPrefixExpression(t,a,e.range(r,e.pos))):null}switch(t){case o.Token.OPENPAREN:if(e.skip(o.Token.CLOSEPAREN))return this.parseFunctionExpressionCommon(e,p.Node.createEmptyIdentifierExpression(e.range(r)),[],!0);var c=e.mark(),u=!0;do{switch(e.next(!0)){case o.Token.DOT_DOT_DOT:return e.reset(c),this.parseFunctionExpression(e);case o.Token.IDENTIFIER:switch(e.readIdentifier(),e.next()){case o.Token.CLOSEPAREN:if(!e.skip(o.Token.EQUALS_GREATERTHAN)){u=!1;break}case o.Token.COLON:return e.reset(c),this.parseFunctionExpression(e);case o.Token.QUESTION:case o.Token.COMMA:break;default:u=!1}break;default:u=!1}}while(u);return e.reset(c),(n=this.parseExpression(e))?e.skip(o.Token.CLOSEPAREN)?p.Node.createParenthesizedExpression(n,e.range(r,e.pos)):(this.error(s.DiagnosticCode._0_expected,e.range(),")"),null):null;case o.Token.OPENBRACKET:var l=new Array;if(!e.skip(o.Token.CLOSEBRACKET)){do{if(e.peek()==o.Token.COMMA)n=null;else if(!(n=this.parseExpression(e,1)))return null;if(l.push(n),e.peek()==o.Token.CLOSEBRACKET)break}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEBRACKET))return this.error(s.DiagnosticCode._0_expected,e.range(),"]"),null}return p.Node.createArrayLiteralExpression(l,e.range(r,e.pos));case o.Token.LESSTHAN:var h=this.parseType(e);return h?e.skip(o.Token.GREATERTHAN)?(n=this.parseExpression(e,18))?p.Node.createAssertionExpression(p.AssertionKind.PREFIX,n,h,e.range(r,e.pos)):null:(this.error(s.DiagnosticCode._0_expected,e.range(),">"),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 u,l=null;(u=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(!(l=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,l,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(!(l=this.parseExpression(e,_(i)?u:u+1)))return null;if(i==o.Token.DOT)if(l.kind==p.NodeKind.IDENTIFIER)r=p.Node.createPropertyAccessExpression(r,l,e.range(a,e.pos));else{if(l.kind!=p.NodeKind.CALL)return this.error(s.DiagnosticCode.Identifier_expected,l.range),null;var E=l;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,l,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=l,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){u={error:e}}finally{try{i&&!i.done&&(l=n.return)&&l.call(n)}finally{if(u)throw u.error}}break;case s.ElementKind.NAMESPACE:e.is(s.CommonFlags.COMPILED)&&this.visitNamespace(e);break;default:assert(!1)}var c,p,u,l},e}(),u=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,u=e.members;if(u){try{for(var l=a(u),h=l.next();!h.done;h=l.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=l.return)&&n.call(l)}finally{if(r)throw r.error}}try{for(var m=a(u.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,r=!0),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 v}else{if(e<=-y)return N;if(e+1>=y)return A}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 u=Math.pow;function l(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 l(e.substring(1),t,r).neg();for(var i=c(u(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,u=0,l=0,_=0,d=0;return _+=(d+=a+(65535&e.low))>>>16,l+=(_+=n+c)>>>16,u+=(l+=r+s)>>>16,u+=t+o,p((_&=65535)<<16|(d&=65535),(u&=65535)<<16|(l&=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,u=65535&e.high,l=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*l)>>>16,d+=(y+=n*_)>>>16,y&=65535,d+=(y+=a*l)>>>16,y&=65535,d+=(y+=o*u)>>>16,d+=t*_+n*l+a*u+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(I)?N:e.eq(N)?T:(t=this.shr(1).div(e).shl(1)).eq(g)?e.isNegative()?T:I:(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:u(2,o-48),l=c(t),_=l.mul(e);_.isNegative()||_.gt(n);)_=(l=c(t-=s,this.unsigned)).mul(e);l.isZero()&&(l=T),a=a.add(l),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,r){t[r]=e,t[r+1]=e>>>8,t[r+2]=e>>>16,t[r+3]=e>>>24}Object.defineProperty(t,"__esModule",{value:!0}),t.writeI32=n,t.writeI64=function(e,t,r){n(i64_low(e),t,r),n(i64_high(e),t,r+4)},t.writeF32=function(e,t,r){n(f32_as_i32(e),t,r)},t.writeF64=function(e,t,r){var i=f64_as_i64(e);n(i64_low(i),t,r),n(i64_high(i),t,r+4)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=" ",i=" ",a=" ";t.indent=function(e,t){for(;t>=4;)e.push(a),t-=4;t>=2&&(e.push(i),t-=2),t&&e.push(n)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=47;function i(e){for(var t,r=0,i=e.length;r+10||i=0;)if(e.charCodeAt(a)==n){r-a==3&&46==e.charCodeAt(a+1)&&46==e.charCodeAt(a+2)||(e=t?e.substring(0,a):e.substring(0,a)+e.substring(r+3),i-=r+3-a,r=a-1);break}if(a<0&&r>0&&(2!=r||46!=e.charCodeAt(0)||46!=e.charCodeAt(1))){i=(e=e.substring(r+4)).length;continue}}}r++}return i>0?e:"."}function a(e){for(var t=e.length;--t>0;)if(e.charCodeAt(t)==n)return e.substring(0,t);return"."}t.normalizePath=i,t.resolvePath=function(e,t){return e.startsWith("std/")?e:i(a(t)+String.fromCharCode(n)+e)},t.dirname=a},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.NULL=0]="NULL",e[e.LINEFEED=10]="LINEFEED",e[e.CARRIAGERETURN=13]="CARRIAGERETURN",e[e.LINESEPARATOR=8232]="LINESEPARATOR",e[e.PARAGRAPHSEPARATOR=8233]="PARAGRAPHSEPARATOR",e[e.NEXTLINE=133]="NEXTLINE",e[e.SPACE=32]="SPACE",e[e.NONBREAKINGSPACE=160]="NONBREAKINGSPACE",e[e.ENQUAD=8192]="ENQUAD",e[e.EMQUAD=8193]="EMQUAD",e[e.ENSPACE=8194]="ENSPACE",e[e.EMSPACE=8195]="EMSPACE",e[e.THREEPEREMSPACE=8196]="THREEPEREMSPACE",e[e.FOURPEREMSPACE=8197]="FOURPEREMSPACE",e[e.SIXPEREMSPACE=8198]="SIXPEREMSPACE",e[e.FIGURESPACE=8199]="FIGURESPACE",e[e.PUNCTUATIONSPACE=8200]="PUNCTUATIONSPACE",e[e.THINSPACE=8201]="THINSPACE",e[e.HAIRSPACE=8202]="HAIRSPACE",e[e.ZEROWIDTHSPACE=8203]="ZEROWIDTHSPACE",e[e.NARROWNOBREAKSPACE=8239]="NARROWNOBREAKSPACE",e[e.IDEOGRAPHICSPACE=12288]="IDEOGRAPHICSPACE",e[e.MATHEMATICALSPACE=8287]="MATHEMATICALSPACE",e[e.OGHAM=5760]="OGHAM",e[e._=95]="_",e[e._0=48]="_0",e[e._1=49]="_1",e[e._2=50]="_2",e[e._3=51]="_3",e[e._4=52]="_4",e[e._5=53]="_5",e[e._6=54]="_6",e[e._7=55]="_7",e[e._8=56]="_8",e[e._9=57]="_9",e[e.a=97]="a",e[e.b=98]="b",e[e.c=99]="c",e[e.d=100]="d",e[e.e=101]="e",e[e.f=102]="f",e[e.g=103]="g",e[e.h=104]="h",e[e.i=105]="i",e[e.j=106]="j",e[e.k=107]="k",e[e.l=108]="l",e[e.m=109]="m",e[e.n=110]="n",e[e.o=111]="o",e[e.p=112]="p",e[e.q=113]="q",e[e.r=114]="r",e[e.s=115]="s",e[e.t=116]="t",e[e.u=117]="u",e[e.v=118]="v",e[e.w=119]="w",e[e.x=120]="x",e[e.y=121]="y",e[e.z=122]="z",e[e.A=65]="A",e[e.B=66]="B",e[e.C=67]="C",e[e.D=68]="D",e[e.E=69]="E",e[e.F=70]="F",e[e.G=71]="G",e[e.H=72]="H",e[e.I=73]="I",e[e.J=74]="J",e[e.K=75]="K",e[e.L=76]="L",e[e.M=77]="M",e[e.N=78]="N",e[e.O=79]="O",e[e.P=80]="P",e[e.Q=81]="Q",e[e.R=82]="R",e[e.S=83]="S",e[e.T=84]="T",e[e.U=85]="U",e[e.V=86]="V",e[e.W=87]="W",e[e.X=88]="X",e[e.Y=89]="Y",e[e.Z=90]="Z",e[e.AMPERSAND=38]="AMPERSAND",e[e.ASTERISK=42]="ASTERISK",e[e.AT=64]="AT",e[e.BACKSLASH=92]="BACKSLASH",e[e.BACKTICK=96]="BACKTICK",e[e.BAR=124]="BAR",e[e.CARET=94]="CARET",e[e.CLOSEBRACE=125]="CLOSEBRACE",e[e.CLOSEBRACKET=93]="CLOSEBRACKET",e[e.CLOSEPAREN=41]="CLOSEPAREN",e[e.COLON=58]="COLON",e[e.COMMA=44]="COMMA",e[e.DOLLAR=36]="DOLLAR",e[e.DOT=46]="DOT",e[e.DOUBLEQUOTE=34]="DOUBLEQUOTE",e[e.EQUALS=61]="EQUALS",e[e.EXCLAMATION=33]="EXCLAMATION",e[e.GREATERTHAN=62]="GREATERTHAN",e[e.HASH=35]="HASH",e[e.LESSTHAN=60]="LESSTHAN",e[e.MINUS=45]="MINUS",e[e.OPENBRACE=123]="OPENBRACE",e[e.OPENBRACKET=91]="OPENBRACKET",e[e.OPENPAREN=40]="OPENPAREN",e[e.PERCENT=37]="PERCENT",e[e.PLUS=43]="PLUS",e[e.QUESTION=63]="QUESTION",e[e.SEMICOLON=59]="SEMICOLON",e[e.SINGLEQUOTE=39]="SINGLEQUOTE",e[e.SLASH=47]="SLASH",e[e.TILDE=126]="TILDE",e[e.BACKSPACE=8]="BACKSPACE",e[e.FORMFEED=12]="FORMFEED",e[e.BYTEORDERMARK=65279]="BYTEORDERMARK",e[e.TAB=9]="TAB",e[e.VERTICALTAB=11]="VERTICALTAB"}(t.CharCode||(t.CharCode={})),t.isLineBreak=function(e){switch(e){case 10:case 13:case 8232:case 8233:return!0;default:return!1}},t.isWhiteSpace=function(e){switch(e){case 32:case 9:case 11:case 12:case 160:case 133:case 5760:case 8239:case 8287:case 12288:case 65279:return!0;default:return e>=8192&&e<=8203}},t.isDecimalDigit=function(e){return e>=48&&e<=57},t.isOctalDigit=function(e){return e>=48&&e<=55},t.isIdentifierStart=function(e){return e>=65&&e<=90||e>=97&&e<=122||36==e||95==e||e>127&&!((t=e)<0||t>65535)&&a(t,n);var t},t.isKeywordCharacter=function(e){return e>=97&&e<=122},t.isIdentifierPart=function(e){return e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||36==e||95==e||e>127&&!((t=e)<0||t>65535)&&a(t,i);var t};var n=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,880,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1162,1319,1329,1366,1369,1369,1377,1415,1488,1514,1520,1522,1568,1610,1646,1647,1649,1747,1749,1749,1765,1766,1774,1775,1786,1788,1791,1791,1808,1808,1810,1839,1869,1957,1969,1969,1994,2026,2036,2037,2042,2042,2048,2069,2074,2074,2084,2084,2088,2088,2112,2136,2208,2208,2210,2220,2308,2361,2365,2365,2384,2384,2392,2401,2417,2423,2425,2431,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2493,2493,2510,2510,2524,2525,2527,2529,2544,2545,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2649,2652,2654,2654,2674,2676,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2749,2749,2768,2768,2784,2785,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2877,2877,2908,2909,2911,2913,2929,2929,2947,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3024,3024,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3133,3160,3161,3168,3169,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3261,3261,3294,3294,3296,3297,3313,3314,3333,3340,3342,3344,3346,3386,3389,3389,3406,3406,3424,3425,3450,3455,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3585,3632,3634,3635,3648,3654,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3760,3762,3763,3773,3773,3776,3780,3782,3782,3804,3807,3840,3840,3904,3911,3913,3948,3976,3980,4096,4138,4159,4159,4176,4181,4186,4189,4193,4193,4197,4198,4206,4208,4213,4225,4238,4238,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5905,5920,5937,5952,5969,5984,5996,5998,6e3,6016,6067,6103,6103,6108,6108,6176,6263,6272,6312,6314,6314,6320,6389,6400,6428,6480,6509,6512,6516,6528,6571,6593,6599,6656,6678,6688,6740,6823,6823,6917,6963,6981,6987,7043,7072,7086,7087,7098,7141,7168,7203,7245,7247,7258,7293,7401,7404,7406,7409,7413,7414,7424,7615,7680,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8305,8305,8319,8319,8336,8348,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11502,11506,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11648,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11823,11823,12293,12295,12321,12329,12337,12341,12344,12348,12353,12438,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42527,42538,42539,42560,42606,42623,42647,42656,42735,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43009,43011,43013,43015,43018,43020,43042,43072,43123,43138,43187,43250,43255,43259,43259,43274,43301,43312,43334,43360,43388,43396,43442,43471,43471,43520,43560,43584,43586,43588,43595,43616,43638,43642,43642,43648,43695,43697,43697,43701,43702,43705,43709,43712,43712,43714,43714,43739,43741,43744,43754,43762,43764,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44002,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64285,64287,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65136,65140,65142,65276,65313,65338,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500],i=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,768,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1155,1159,1162,1319,1329,1366,1369,1369,1377,1415,1425,1469,1471,1471,1473,1474,1476,1477,1479,1479,1488,1514,1520,1522,1552,1562,1568,1641,1646,1747,1749,1756,1759,1768,1770,1788,1791,1791,1808,1866,1869,1969,1984,2037,2042,2042,2048,2093,2112,2139,2208,2208,2210,2220,2276,2302,2304,2403,2406,2415,2417,2423,2425,2431,2433,2435,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2492,2500,2503,2504,2507,2510,2519,2519,2524,2525,2527,2531,2534,2545,2561,2563,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2620,2620,2622,2626,2631,2632,2635,2637,2641,2641,2649,2652,2654,2654,2662,2677,2689,2691,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2748,2757,2759,2761,2763,2765,2768,2768,2784,2787,2790,2799,2817,2819,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2876,2884,2887,2888,2891,2893,2902,2903,2908,2909,2911,2915,2918,2927,2929,2929,2946,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3006,3010,3014,3016,3018,3021,3024,3024,3031,3031,3046,3055,3073,3075,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3140,3142,3144,3146,3149,3157,3158,3160,3161,3168,3171,3174,3183,3202,3203,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3260,3268,3270,3272,3274,3277,3285,3286,3294,3294,3296,3299,3302,3311,3313,3314,3330,3331,3333,3340,3342,3344,3346,3386,3389,3396,3398,3400,3402,3406,3415,3415,3424,3427,3430,3439,3450,3455,3458,3459,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3530,3530,3535,3540,3542,3542,3544,3551,3570,3571,3585,3642,3648,3662,3664,3673,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3769,3771,3773,3776,3780,3782,3782,3784,3789,3792,3801,3804,3807,3840,3840,3864,3865,3872,3881,3893,3893,3895,3895,3897,3897,3902,3911,3913,3948,3953,3972,3974,3991,3993,4028,4038,4038,4096,4169,4176,4253,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4957,4959,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5908,5920,5940,5952,5971,5984,5996,5998,6e3,6002,6003,6016,6099,6103,6103,6108,6109,6112,6121,6155,6157,6160,6169,6176,6263,6272,6314,6320,6389,6400,6428,6432,6443,6448,6459,6470,6509,6512,6516,6528,6571,6576,6601,6608,6617,6656,6683,6688,6750,6752,6780,6783,6793,6800,6809,6823,6823,6912,6987,6992,7001,7019,7027,7040,7155,7168,7223,7232,7241,7245,7293,7376,7378,7380,7414,7424,7654,7676,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8204,8205,8255,8256,8276,8276,8305,8305,8319,8319,8336,8348,8400,8412,8417,8417,8421,8432,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11647,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11744,11775,11823,11823,12293,12295,12321,12335,12337,12341,12344,12348,12353,12438,12441,12442,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42539,42560,42607,42612,42621,42623,42647,42655,42737,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43047,43072,43123,43136,43204,43216,43225,43232,43255,43259,43259,43264,43309,43312,43347,43360,43388,43392,43456,43471,43481,43520,43574,43584,43597,43600,43609,43616,43638,43642,43643,43648,43714,43739,43741,43744,43759,43762,43766,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44010,44012,44013,44016,44025,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65024,65039,65056,65062,65075,65076,65101,65103,65136,65140,65142,65276,65296,65305,65313,65338,65343,65343,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500];function a(e,t){if(e2?(r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r?r.length.toString(10):"0"),u.length<1?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,_.range,"1",u.length.toString(10)):e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"2",u.length.toString(10)),E.createUnreachable()):r&&1==r.length?(d=e.compileExpression(u[0],e.options.usizeType),(O=2==u.length?p(e,u[1]):0)<0?E.createUnreachable():(e.currentType=r[0],E.createLoad(r[0].byteSize,r[0].is(5),d,r[0].is(4)&&l.is(4)&&l.size>r[0].size?(e.currentType=l).toNativeType():(e.currentType=r[0]).toNativeType(),O))):(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r?r.length.toString(10):"0"),E.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,_.range,"1",r?r.length.toString(10):"0"),u.length<2?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,_.range,"2",u.length.toString(10)):e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"3",u.length.toString(10)),E.createUnreachable()):r&&1==r.length?(d=e.compileExpression(u[0],e.options.usizeType),y=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?(y=e.convertExpression(y,e.currentType,r[0],1,u[1]),T=r[0]):T=e.currentType,(O=3==u.length?p(e,u[2]):0)<0?E.createUnreachable():(e.currentType=o.Type.void,E.createStore(r[0].byteSize,d,y,T.toNativeType(),O))):(e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r?r.length.toString(10):"0"),E.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,_.range,"1",r?r.length.toString(10):"0"),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"0",u.length.toString(10)),E.createUnreachable();r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r?r.length.toString(10):"0");var C=r[0].byteSize;return e.options.isWasm64?l.is(4)&&l.size<=32?(e.currentType=o.Type.u32,g=E.createI32(C)):g=E.createI64(C,0):l.is(4)&&64==l.size?(e.currentType=o.Type.u64,g=E.createI64(C,0)):g=E.createI32(C),g;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,_.range,"1",r?r.length.toString(10):"0"),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),E.createUnreachable();if(!r||1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r?r.length.toString(10):"0"),E.createUnreachable();var S;if(!(S=r[0].classReference))return e.error(i.DiagnosticCode.Operation_not_supported,_.range),E.createUnreachable();var O=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),E.createUnreachable();var b=u[0].value,L=S.members?S.members.get(b):null;if(!L||L.kind!=c.ElementKind.FIELD)return e.error(i.DiagnosticCode.Type_0_has_no_property_1,u[0].range,S.internalName,b),E.createUnreachable();O=L.memoryOffset}else O=S.currentMemoryOffset;return e.options.isWasm64?l.is(4)&&l.size<=32?(e.currentType=o.Type.u32,E.createI32(O)):E.createI64(O):l.is(4)&&64==l.size?(e.currentType=o.Type.u64,E.createI64(O)):E.createI32(O);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,_.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"3",u.length.toString(10)),E.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,_.range,"1",r.length.toString(10)),E.createUnreachable();d=e.compileExpression(u[0],r[0])}else d=e.compileExpression(u[0],o.Type.i32,0);switch(T=e.currentType,y=e.compileExpression(u[1],T),m=e.compileExpression(u[2],o.Type.bool),e.currentType=T,e.currentType.kind){default:g=E.createSelect(d,y,m);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,_.range),g=E.createUnreachable()}return g;case"unreachable":return 0!=u.length&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"0",u.length.toString(10)),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),E.createUnreachable();case"current_memory":return e.currentType=o.Type.i32,0!=u.length&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"0",u.length.toString(10)),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),E.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,_.range,"0",u.length.toString(10)),d=E.createUnreachable()):d=e.compileExpression(u[0],o.Type.i32),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),E.createHost(s.HostOp.GrowMemory,null,[d]);case"move_memory":if(r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),3!=u.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"3",u.length.toString(10)),e.currentType=o.Type.void,E.createUnreachable();throw d=e.compileExpression(u[0],e.options.usizeType),y=e.compileExpression(u[1],e.options.usizeType),m=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,_.range,t.internalName),3!=u.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"3",u.length.toString(10)),e.currentType=o.Type.void,E.createUnreachable();throw d=e.compileExpression(u[0],e.options.usizeType),y=e.compileExpression(u[1],o.Type.u32),m=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,_.range),e.currentType=r[0],E.createUnreachable()):1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=r[0],E.createUnreachable()):(d=e.compileExpression(u[0],e.options.usizeType,0),e.currentType=r[0],9!=e.currentType.kind?(e.error(i.DiagnosticCode.Operation_not_supported,_.range),E.createUnreachable()):d):(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r?r.length.toString(10):"0"),E.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,_.range,"1",r.length.toString(10))),u.length<1?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,_.range,"1",u.length.toString(10)):u.length>2&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"2",u.length.toString(10)),E.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,_.range,"1",r.length.toString(10)),E.createUnreachable();d=e.compileExpression(u[0],r[0])}else d=e.compileExpressionRetainType(u[0],o.Type.i32);if(T=e.currentType,e.currentType=T.nonNullableType,e.options.noAssert)return l==o.Type.void?(e.currentType=o.Type.void,E.createNop()):d;var k=h(e,2==u.length?u[1]:null,_);if(e.currentType=T.nonNullableType,l==o.Type.void){switch(e.currentType.kind){default:g=E.createIf(E.createUnary(s.UnaryOp.EqzI32,d),k);break;case 3:case 8:g=E.createIf(E.createUnary(s.UnaryOp.EqzI64,d),k);break;case 4:case 9:g=E.createIf(E.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,d),k);break;case 11:g=E.createIf(E.createBinary(s.BinaryOp.EqF32,d,E.createF32(0)),k);break;case 12:g=E.createIf(E.createBinary(s.BinaryOp.EqF64,d,E.createF64(0)),k);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,_.range),g=k}e.currentType=o.Type.void}else switch(e.currentType.kind){default:A=e.currentFunction.getAndFreeTempLocal(o.Type.i32),g=E.createIf(E.createUnary(s.UnaryOp.EqzI32,E.createTeeLocal(A.index,d)),k,E.createGetLocal(A.index,s.NativeType.I32));break;case 3:case 8:A=e.currentFunction.getAndFreeTempLocal(o.Type.i64),g=E.createIf(E.createUnary(s.UnaryOp.EqzI64,E.createTeeLocal(A.index,d)),k,E.createGetLocal(A.index,s.NativeType.I64));break;case 4:case 9:A=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),g=E.createIf(E.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,E.createTeeLocal(A.index,d)),k,E.createGetLocal(A.index,e.options.nativeSizeType));break;case 11:A=e.currentFunction.getAndFreeTempLocal(o.Type.f32),g=E.createIf(E.createBinary(s.BinaryOp.EqF32,E.createTeeLocal(A.index,d),E.createF32(0)),k,E.createGetLocal(A.index,s.NativeType.F32));break;case 12:A=e.currentFunction.getAndFreeTempLocal(o.Type.f64),g=E.createIf(E.createBinary(s.BinaryOp.EqF64,E.createTeeLocal(A.index,d),E.createF64(0)),k,E.createGetLocal(A.index,s.NativeType.F64));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,_.range),g=k}return g;case"i8":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=o.Type.i8,E.createUnreachable()):e.compileExpression(u[0],o.Type.i8,2);case"i16":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=o.Type.i16,E.createUnreachable()):e.compileExpression(u[0],o.Type.i16,2);case"i32":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=o.Type.i32,E.createUnreachable()):e.compileExpression(u[0],o.Type.i32,2);case"i64":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=o.Type.i64,E.createUnreachable()):e.compileExpression(u[0],o.Type.i64,2);case"isize":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=e.options.isWasm64?o.Type.isize64:o.Type.isize32,E.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,_.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=o.Type.u8,E.createUnreachable()):e.compileExpression(u[0],o.Type.u8,2);case"u16":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=o.Type.u16,E.createUnreachable()):e.compileExpression(u[0],o.Type.u16,2);case"u32":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=o.Type.u32,E.createUnreachable()):e.compileExpression(u[0],o.Type.u32,2);case"u64":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=o.Type.u64,E.createUnreachable()):e.compileExpression(u[0],o.Type.u64,2);case"usize":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=e.options.usizeType,E.createUnreachable()):e.compileExpression(u[0],e.options.usizeType,2);case"bool":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=o.Type.bool,E.createUnreachable()):e.compileExpression(u[0],o.Type.bool,2);case"f32":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=o.Type.f32,E.createUnreachable()):e.compileExpression(u[0],o.Type.f32,2);case"f64":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=o.Type.f64,E.createUnreachable()):e.compileExpression(u[0],o.Type.f64,2)}return e.error(i.DiagnosticCode.Operation_not_supported,_.range),E.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 l="abort";function h(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(l);if(!p||p.kind!=c.ElementKind.FUNCTION_PROTOTYPE)return i.createUnreachable();var u=p.resolve();if(!u||!e.compileFunction(u))return i.createUnreachable();var h=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(u.internalName,[h,_,i.createI32(r.range.line),i.createI32(r.range.column)],s.NativeType.None),i.createUnreachable()])}t.compileAbort=h},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,r){(function(e){var t="undefined"!=typeof window&&window||void 0!==e&&e||self,r=new Uint8Array(0),n=0;t.allocate_memory=function(e){if(!(e>>>=0))return 0;if(n+e>r.length){var t=r;(r=new Uint8Array(Math.max(65536,r.length+e,2*r.length))).set(t)}var i=n;return 7&(n+=e)&&(n=1+(7|n)),i},t.free_memory=function(e){},t.move_memory=function(e,t,n){r.copyWithin(e,t,t+n)},t.store=function(e,t,n){"number"==typeof n&&(e+=n),r[e]=t},t.load=function(e){return"number"==typeof off&&(e+=off),r[e]}}).call(this,r(5))},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,r(24)}).call(this,r(5))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(25),r(23),r(16),r(14)},function(e,t,r){r(26),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=27)}([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),u=r(3);t.PATH_DELIMITER="/",t.PARENT_SUBST="..",t.GETTER_PREFIX="get:",t.SETTER_PREFIX="set:",t.INSTANCE_DELIMITER="#",t.STATIC_DELIMITER=".",t.LIBRARY_SUBST="(lib)",t.LIBRARY_PREFIX=t.LIBRARY_SUBST+t.PATH_DELIMITER;var l=function(){return function(){}}(),h=function(){return function(){}}(),_=function(){return function(){}}(),d=new Map,y=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=d,r.typeAliases=new Map,r.fileLevelExports=new Map,r.moduleLevelExports=new Map,r.sources=[],r}return i(r,e),r.prototype.initialize=function(e){this.options=e,this.typesLookup=new Map([["i8",c.Type.i8],["i16",c.Type.i16],["i32",c.Type.i32],["i64",c.Type.i64],["isize",e.isizeType],["u8",c.Type.u8],["u16",c.Type.u16],["u32",c.Type.u32],["u64",c.Type.u64],["usize",e.usizeType],["bool",c.Type.bool],["f32",c.Type.f32],["f64",c.Type.f64],["void",c.Type.void],["number",c.Type.f64],["boolean",c.Type.bool]]);for(var t,r,n=new Map,i=new Array,u=new Array,l=0,h=this.sources.length;l",l+="<"+I+">")}else if(r){var A=r.get(l);if(A)return A}}return(d=this.typesLookup.get(h))||(d=this.typesLookup.get(l))?d:(n&&this.error(s.DiagnosticCode.Cannot_find_name_0,o.name.range,l),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 L(this,K,w,C||u)).contextualTypeArguments=t,this.instances.set(r,n),n},t.prototype.resolvePartial=function(e){if(assert(this.is(E.INSTANCE)),assert(this.classPrototype),e&&e.length){var r=new t(this.program,this.simpleName,this.internalName,this.declaration,this.classPrototype);return r.flags=this.flags,r.classTypeArguments=e,r}return this},t.prototype.resolveUsingTypeArguments=function(e,t,r){var n=null;return!this.is(E.GENERIC)||(assert(null!=e&&0!=e.length),n=this.program.resolveTypeArguments(assert(this.declaration.typeParameters),e,t,r))?this.resolve(n,t):null},t.prototype.resolveBuiltinTypeArguments=function(e,t){assert(this.is(E.BUILTIN));var r=null;if(e){var n=e.length;r=new Array(n);for(var i=0;i0)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"),(i=new F(this,v,e,I)).contextualTypeArguments=r,this.instances.set(n,i);var N,C,S,O,b,L,k=0;if(I&&(k=I.currentMemoryOffset,I.members)){i.members||(i.members=new Map);try{for(var x=a(I.members.values()),U=x.next();!U.done;U=x.next()){var D=U.value;i.members.set(D.simpleName,D)}}catch(e){S={error:e}}finally{try{U&&!U.done&&(O=x.return)&&O.call(x)}finally{if(S)throw S.error}}}if(this.constructorPrototype){var P=this.constructorPrototype.resolvePartial(e);P&&(i.constructorInstance=P.resolve())}if(this.instanceMembers)try{for(var w=a(this.instanceMembers.values()),M=w.next();!M.done;M=w.next()){var G=M.value;switch(G.kind){case g.FIELD_PROTOTYPE:i.members||(i.members=new Map);var K=G.declaration;if(!K.type)throw new Error("type expected");var z=this.program.resolveType(K.type,i.contextualTypeArguments);if(z){var H=new R(G,v+t.INSTANCE_DELIMITER+G.simpleName,z);switch(z.byteSize){case 1:break;case 2:1&k&&++k;break;case 4:3&k&&(k=1+(3|k));break;case 8:7&k&&(k=1+(7|k));break;default:assert(!1)}H.memoryOffset=k,k+=z.byteSize,i.members.set(G.simpleName,H)}break;case g.FUNCTION_PROTOTYPE:i.members||(i.members=new Map);var V=G.resolvePartial(e);V&&(V.internalName=v+t.INSTANCE_DELIMITER+V.simpleName,i.members.set(G.simpleName,V));break;case g.PROPERTY:i.members||(i.members=new Map);var W=assert(G.getterPrototype),X=G.setterPrototype,Y=new B(this.program,G.simpleName,v+t.INSTANCE_DELIMITER+G.simpleName,this),Q=W.resolvePartial(e);if(!Q)return null;if(Q.internalName=v+t.INSTANCE_DELIMITER+Q.simpleName,Y.getterPrototype=Q,X){var q=X.resolvePartial(e);if(!q)return null;q.internalName=v+t.INSTANCE_DELIMITER+q.simpleName,Y.setterPrototype=q}i.members.set(G.simpleName,Y);break;default:assert(!1)}}}catch(e){b={error:e}}finally{try{M&&!M.done&&(L=w.return)&&L.call(w)}finally{if(b)throw b.error}}return i.currentMemoryOffset=k,i},r.prototype.resolveUsingTypeArguments=function(e,t,r){var n=null;if(this.is(E.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}(f);t.ClassPrototype=U;var F=function(e){function t(t,r,n,i){void 0===n&&(n=null),void 0===i&&(i=null);var s=e.call(this,t.program,t.simpleName,r)||this;if(s.kind=g.CLASS,s.contextualTypeArguments=null,s.currentMemoryOffset=0,s.constructorInstance=null,s.prototype=t,s.flags=t.flags,s.typeArguments=n,s.type=t.program.options.usizeType.asClass(s),s.base=i,i&&i.contextualTypeArguments){s.contextualTypeArguments||(s.contextualTypeArguments=new Map);try{for(var c=a(i.contextualTypeArguments),p=c.next();!p.done;p=c.next()){var u=o(p.value,2),l=u[0],h=u[1];s.contextualTypeArguments.set(l,h)}}catch(e){y={error:e}}finally{try{p&&!p.done&&(m=c.return)&&m.call(c)}finally{if(y)throw y.error}}}var _,d,y,m,E=s.prototype.declaration;if(E){var T=E.typeParameters;if(n){if((d=n.length)!=T.length)throw new Error("type argument count mismatch");if(d)for(s.contextualTypeArguments||(s.contextualTypeArguments=new Map),_=0;_0&&!a.isLineBreak(n.charCodeAt(o-1));)o--;for(;s=0;--o)free_memory(a[o])}},e.prototype.createCall=function(e,t,r){var n=l(e),i=u(t);try{return _BinaryenCall(this.ref,n,i,t&&t.length||0,r)}finally{free_memory(i),free_memory(n)}},e.prototype.createCallImport=function(e,t,r){var n=l(e),i=u(t);try{return _BinaryenCallImport(this.ref,n,i,t&&t.length||0,r)}finally{free_memory(i),free_memory(n)}},e.prototype.createCallIndirect=function(e,t,r){var n=u(t),i=l(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=l(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=l(e),a=u(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=l(e);try{_BinaryenRemoveFunction(this.ref,t)}finally{free_memory(t)}},e.prototype.addFunctionExport=function(e,t){var r=l(e),n=l(t);try{return _BinaryenAddFunctionExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addTableExport=function(e,t){var r=l(e),n=l(t);try{return _BinaryenAddTableExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addMemoryExport=function(e,t){var r=l(e),n=l(t);try{return _BinaryenAddMemoryExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addGlobalExport=function(e,t){var r=l(e),n=l(t);try{return _BinaryenAddGlobalExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.removeExport=function(e){var t=l(e);try{_BinaryenRemoveExport(this.ref,t)}finally{free_memory(t)}},e.prototype.addFunctionImport=function(e,t,r,n){var i=l(e),a=l(t),o=l(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=l(e),i=l(t),a=l(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=l(e),i=l(t),a=l(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=l(e),a=l(t),o=l(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=l(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=l(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=u(e);try{_BinaryenSetFunctionTable(this.ref,t,e.length)}finally{free_memory(t)}},e.prototype.setStart=function(e){_BinaryenSetStart(this.ref,e)},e.prototype.setOptimizeLevel=function(e){void 0===e&&(e=2),_BinaryenSetOptimizeLevel(e)},e.prototype.setShrinkLevel=function(e){void 0===e&&(e=1),_BinaryenSetShrinkLevel(e)},e.prototype.setDebugInfo=function(e){void 0===e&&(e=!1),_BinaryenSetDebugInfo(e)},e.prototype.optimize=function(e){void 0===e&&(e=0),e?_BinaryenFunctionOptimize(e,this.ref):_BinaryenModuleOptimize(this.ref)},e.prototype.runPasses=function(e,t){void 0===t&&(t=0);for(var r=e.length,n=new Array(r),i=0;i=0;--i)free_memory(n[i])}},e.prototype.validate=function(){return 1==_BinaryenModuleValidate(this.ref)},e.prototype.interpret=function(){_BinaryenModuleInterpret(this.ref)},e.prototype.toBinary=function(e){var t=this.out,r=l(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 l(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 l;return i.range=n,i.name=e,e.parent=i,i.typeArguments=t,t&&xe(t,i),i.isNullable=r,i},e.createOmittedType=function(t){return e.createType(e.createIdentifierExpression("",t),null,!1,t)},e.createTypeParameter=function(e,t,r){var n=new h;return n.range=r,n.name=e,e.parent=n,n.extendsType=t,t&&(t.parent=n),n},e.createParameter=function(e,t,r,n,i){var a=new _;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,xe(e,a),a.returnType=t,t.parent=a,a.explicitThisType=r,r&&(r.parent=a),a.isNullable=n,a},e.createDecorator=function(e,t,r){var n=new m;if(n.range=r,n.name=e,e.parent=n,n.arguments=t,t&&xe(t,n),e.kind==s.IDENTIFIER)switch(e.text){case"global":n.decoratorKind=d.GLOBAL;break;case"operator":n.decoratorKind=d.OPERATOR;break;case"unmanaged":n.decoratorKind=d.UNMANAGED;break;case"offset":n.decoratorKind=d.OFFSET;break;default:n.decoratorKind=d.CUSTOM}else n.decoratorKind=d.CUSTOM;return n},e.createComment=function(e,t,r){var n=new g;return n.range=r,n.commentKind=t,n.text=e,n},e.createIdentifierExpression=function(e,t){var r=new f;return r.range=t,r.text=e,r},e.createEmptyIdentifierExpression=function(e){var t=new f;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}(q);t.ClassDeclaration=J;var ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.CONTINUE,t}return i(t,e),t}(Y);t.ContinueStatement=ee;var te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.DO,t}return i(t,e),t}(Y);t.DoStatement=te;var re=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EMPTY,t}return i(t,e),t}(Y);t.EmptyStatement=re;var ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMDECLARATION,t}return i(t,e),t}(q);t.EnumDeclaration=ne;var ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMVALUEDECLARATION,t}return i(t,e),t}(q);t.EnumValueDeclaration=ie;var ae=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=ae;var oe=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=oe;var se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORT,t}return i(t,e),t}(Y);t.ExportStatement=se;var ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPRESSION,t}return i(t,e),t}(Y);t.ExpressionStatement=ce;var pe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FIELDDECLARATION,t}return i(t,e),t}(j);t.FieldDeclaration=pe;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}(Y);t.ForStatement=ue;var le=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}(q);t.FunctionDeclaration=le;var he=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IF,t}return i(t,e),t}(Y);t.IfStatement=he;var _e=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORTDECLARATION,t}return i(t,e),t}(q);t.ImportDeclaration=_e;var de=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORT,t}return i(t,e),t}(Y);t.ImportStatement=de;var ye=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.INTERFACEDECLARATION,t}return i(t,e),t}(J);t.InterfaceDeclaration=ye;var me=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.METHODDECLARATION,t}return i(t,e),t}(le);t.MethodDeclaration=me;var ge=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.NAMESPACEDECLARATION,t}return i(t,e),t}(q);t.NamespaceDeclaration=ge;var Ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.RETURN,t}return i(t,e),t}(Y);t.ReturnStatement=Ee;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 fe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCH,t}return i(t,e),t}(Y);t.SwitchStatement=fe;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}(Y);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}(Y);t.TryStatement=Ae;var ve=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TYPEDECLARATION,t}return i(t,e),t}(q);t.TypeDeclaration=ve;var Ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLEDECLARATION,t}return i(t,e),t}(j);t.VariableDeclaration=Ne;var Ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLE,t}return i(t,e),t}(Y);t.VariableStatement=Ce;var Se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VOID,t}return i(t,e),t}(Y);t.VoidStatement=Se;var Oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.WHILE,t}return i(t,e),t}(Y);function be(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 l=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=l;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 l(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"}(t.TypeFlags||(t.TypeFlags={}));var i=function(){function e(e,t,r){this.nullableType=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.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&&l!=u?t.push("?: "):t.push(": "),t.push(i[l].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),u=r(0),l=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}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.currentEnum=null,n.currentType=_.Type.void,n.startFunctionBody=[],n.memorySegments=new Array,n.stringSegments=new Map,n.functionTable=new Array,n.argumentCountRef=0,n.files=new Set,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==u.ElementKind.FUNCTION_PROTOTYPE);var i=new u.Function(n,n.internalName,new _.Signature([],_.Type.void));this.startFunction=i,this.currentFunction=i;for(var a=r.sources,o=0,s=a.length;o"),!1;e.type=this.currentType}var a=e.type.toNativeType(),o=e.isAny(u.CommonFlags.CONST)||e.is(u.CommonFlags.STATIC|u.CommonFlags.READONLY);if(e.is(u.CommonFlags.AMBIENT))return o?(e.set(u.CommonFlags.MODULE_IMPORT),t.addGlobalImport(e.internalName,e.namespace?e.namespace.simpleName:"env",e.simpleName,a),e.set(u.CommonFlags.COMPILED),!0):(this.error(c.DiagnosticCode.Operation_not_supported,r.range),!1);var s=!1;e.is(u.CommonFlags.INLINED)?n=this.compileInlineConstant(e,e.type,!0):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 l=e.internalName;if(s)t.addGlobal(l,a,!0,e.type.toNativeZero(t)),this.startFunctionBody.push(t.createSetGlobal(l,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,e.declaration.range),e.constantValueKind=1,e.constantIntegerValue=i64_new(0)}e.set(u.CommonFlags.INLINED),r.isTopLevel&&t.addGlobal(l,a,!1,n),r.range.source.isEntry&&r.isTopLevelExport&&t.addGlobalExport(e.internalName,r.programLevelInternalName)}else t.addGlobal(l,a,!o,n);return!0},t.prototype.compileEnumDeclaration=function(e){var t=assert(this.program.elementsLookup.get(e.fileLevelInternalName));return assert(t.kind==u.ElementKind.ENUM),this.compileEnum(t)?t:null},t.prototype.compileEnum=function(e){if(e.is(u.CommonFlags.COMPILED))return!0;e.set(u.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 l=s.value;if(l.kind==u.ElementKind.ENUMVALUE){var h=!1,d=l,y=d.declaration;if(d.set(u.CommonFlags.COMPILED),d.is(u.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(u.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(u.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(u.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(u.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&&(l.is(u.CommonFlags.INLINED)?t.addGlobalExport(l.internalName,l.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==u.ElementKind.FUNCTION_PROTOTYPE),this.compileFunctionUsingTypeArguments(n,t,r,n.declaration.name)},t.prototype.compileFunctionUsingTypeArguments=function(e,t,r,n){var i=e.resolveUsingTypeArguments(t,r,n);return i&&this.compileFunction(i)?i: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(u.CommonFlags.TRAMPOLINE)&&e.signature.requiredParameters=0?"case"+l.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){A=r.flow;m&&A.set(1),g&&A.set(2),E&&A.set(16)}return y},t.prototype.compileThrowStatement=function(e){var t=this.currentFunction.flow;return t.set(2),t.set(1),this.module.createUnreachable()},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}y=this.currentType}if(l.is(u.CommonFlags.CONST))if(m){if(m=this.precomputeExpressionRef(m),_BinaryenExpressionGetId(m)==p.ExpressionId.Const){var g=new u.Local(r,d,-1,y);switch(_BinaryenExpressionGetType(m)){case p.NativeType.I32:g=g.withConstantIntegerValue(_BinaryenConstGetValueI32(m),0);break;case p.NativeType.I64:g=g.withConstantIntegerValue(_BinaryenConstGetValueI64Low(m),_BinaryenConstGetValueI64High(m));break;case p.NativeType.F32:g=g.withConstantFloatValue(_BinaryenConstGetValueF32(m));break;case p.NativeType.F64:g=g.withConstantFloatValue(_BinaryenConstGetValueF64(m));break;default:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,l.range),this.module.createUnreachable()}var E=n.flow.scopedLocals;if(E){if(E.has(d))return this.error(c.DiagnosticCode.Duplicate_identifier_0,l.name.range,d),0}else n.flow.scopedLocals=E=new Map;return E.set(d,g),0}this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,l.range)}else this.error(c.DiagnosticCode._const_declarations_must_be_initialized,l.range);l.is(u.CommonFlags.LET)?n.flow.addScopedLocal(d,y,l.name):n.addLocal(y,d),m&&s.push(this.compileAssignmentWithValue(l.name,m))}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=f(this.compileExpression(e.condition,_.Type.i32,0),this.currentType,t);if(this.currentFunction.isAny(u.CommonFlags.GENERIC|u.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 l=t.createBlock(o,[t.createLoop(s,t.createIf(r,t.createBlock(null,[c,t.createBreak(s)],p.NativeType.None)))],p.NativeType.None);return l},t.prototype.compileInlineConstant=function(e,t,r){assert(e.is(u.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.error(c.DiagnosticCode.Operation_not_supported,e.declaration.range),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.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.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,u,h,d=this.module,y=e.left,m=e.right,g=!1,T=!1,I=null;switch(e.operator){case l.Token.LESSTHAN:if(n=this.compileExpressionRetainType(y,t),i=this.currentType,a=this.compileExpressionRetainType(m,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,d.createUnreachable();switch(n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m),s.kind){case 0:case 1:case 2:h=d.createBinary(p.BinaryOp.LtI32,n,a);break;case 3:h=d.createBinary(p.BinaryOp.LtI64,n,a);break;case 4:h=d.createBinary(this.options.isWasm64?p.BinaryOp.LtI64:p.BinaryOp.LtI32,n,a);break;case 5:case 6:case 7:case 10:h=d.createBinary(p.BinaryOp.LtU32,n,a);break;case 9:h=d.createBinary(this.options.isWasm64?p.BinaryOp.LtU64:p.BinaryOp.LtU32,n,a);break;case 8:h=d.createBinary(p.BinaryOp.LtU64,n,a);break;case 11:h=d.createBinary(p.BinaryOp.LtF32,n,a);break;case 12:h=d.createBinary(p.BinaryOp.LtF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable()}this.currentType=_.Type.bool;break;case l.Token.GREATERTHAN:if(n=this.compileExpressionRetainType(y,t),i=this.currentType,a=this.compileExpressionRetainType(m,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,d.createUnreachable();switch(n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m),s.kind){case 0:case 1:case 2:h=d.createBinary(p.BinaryOp.GtI32,n,a);break;case 4:h=d.createBinary(this.options.isWasm64?p.BinaryOp.GtI64:p.BinaryOp.GtI32,n,a);break;case 3:h=d.createBinary(p.BinaryOp.GtI64,n,a);break;case 5:case 6:case 7:case 10:h=d.createBinary(p.BinaryOp.GtU32,n,a);break;case 9:h=d.createBinary(this.options.isWasm64?p.BinaryOp.GtU64:p.BinaryOp.GtU32,n,a);break;case 8:h=d.createBinary(p.BinaryOp.GtU64,n,a);break;case 11:h=d.createBinary(p.BinaryOp.GtF32,n,a);break;case 12:h=d.createBinary(p.BinaryOp.GtF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable()}this.currentType=_.Type.bool;break;case l.Token.LESSTHAN_EQUALS:if(n=this.compileExpressionRetainType(y,t),i=this.currentType,a=this.compileExpressionRetainType(m,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,d.createUnreachable();switch(n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m),s.kind){case 0:case 1:case 2:h=d.createBinary(p.BinaryOp.LeI32,n,a);break;case 4:h=d.createBinary(this.options.isWasm64?p.BinaryOp.LeI64:p.BinaryOp.LeI32,n,a);break;case 3:h=d.createBinary(p.BinaryOp.LeI64,n,a);break;case 5:case 6:case 7:case 10:h=d.createBinary(p.BinaryOp.LeU32,n,a);break;case 9:h=d.createBinary(this.options.isWasm64?p.BinaryOp.LeU64:p.BinaryOp.LeU32,n,a);break;case 8:h=d.createBinary(p.BinaryOp.LeU64,n,a);break;case 11:h=d.createBinary(p.BinaryOp.LeF32,n,a);break;case 12:h=d.createBinary(p.BinaryOp.LeF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable()}this.currentType=_.Type.bool;break;case l.Token.GREATERTHAN_EQUALS:if(n=this.compileExpressionRetainType(y,t),i=this.currentType,a=this.compileExpressionRetainType(m,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,d.createUnreachable();switch(n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m),s.kind){case 0:case 1:case 2:h=d.createBinary(p.BinaryOp.GeI32,n,a);break;case 4:h=d.createBinary(this.options.isWasm64?p.BinaryOp.GeI64:p.BinaryOp.GeI32,n,a);break;case 3:h=d.createBinary(p.BinaryOp.GeI64,n,a);break;case 5:case 6:case 7:case 10:h=d.createBinary(p.BinaryOp.GeU32,n,a);break;case 9:h=d.createBinary(this.options.isWasm64?p.BinaryOp.GeU64:p.BinaryOp.GeU32,n,a);break;case 8:h=d.createBinary(p.BinaryOp.GeU64,n,a);break;case 11:h=d.createBinary(p.BinaryOp.GeF32,n,a);break;case 12:h=d.createBinary(p.BinaryOp.GeF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable()}this.currentType=_.Type.bool;break;case l.Token.EQUALS_EQUALS_EQUALS:case l.Token.EQUALS_EQUALS:if(n=this.compileExpressionRetainType(y,t),i=this.currentType,a=this.compileExpressionRetainType(m,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,l.operatorTokenToString(e.operator),i.toString(),o.toString()),this.currentType=t,d.createUnreachable();switch(n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:h=d.createBinary(p.BinaryOp.EqI32,n,a);break;case 9:if(this.currentType.is(256))if(null!=(v=(A=assert(this.currentType.classReference)).prototype.fnEquals)){h=this.compileOperatorOverload(A,v,n,a),assert(this.currentType==_.Type.bool);break}case 4:h=d.createBinary(this.options.isWasm64?p.BinaryOp.EqI64:p.BinaryOp.EqI32,n,a);break;case 3:case 8:h=d.createBinary(p.BinaryOp.EqI64,n,a);break;case 11:h=d.createBinary(p.BinaryOp.EqF32,n,a);break;case 12:h=d.createBinary(p.BinaryOp.EqF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable()}this.currentType=_.Type.bool;break;case l.Token.EXCLAMATION_EQUALS_EQUALS:case l.Token.EXCLAMATION_EQUALS:if(n=this.compileExpressionRetainType(y,t),i=this.currentType,a=this.compileExpressionRetainType(m,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,l.operatorTokenToString(e.operator),i.toString(),o.toString()),this.currentType=t,d.createUnreachable();switch(n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:h=d.createBinary(p.BinaryOp.NeI32,n,a);break;case 9:case 4:h=d.createBinary(this.options.isWasm64?p.BinaryOp.NeI64:p.BinaryOp.NeI32,n,a);break;case 3:case 8:h=d.createBinary(p.BinaryOp.NeI64,n,a);break;case 11:h=d.createBinary(p.BinaryOp.NeF32,n,a);break;case 12:h=d.createBinary(p.BinaryOp.NeF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable()}this.currentType=_.Type.bool;break;case l.Token.EQUALS:return this.compileAssignment(y,m,t);case l.Token.PLUS_EQUALS:g=!0;case l.Token.PLUS:if(n=this.compileExpressionRetainType(y,t,!1),g)a=this.compileExpression(m,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(m,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,d.createUnreachable();n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:T=!0;case 2:case 7:h=d.createBinary(p.BinaryOp.AddI32,n,a);break;case 9:var A,v;if(this.currentType.is(256))if(null!=(v=(A=assert(this.currentType.classReference)).prototype.fnConcat)){h=this.compileOperatorOverload(A,v,n,a);break}case 4:h=d.createBinary(this.options.isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,n,a);break;case 3:case 8:h=d.createBinary(p.BinaryOp.AddI64,n,a);break;case 11:h=d.createBinary(p.BinaryOp.AddF32,n,a);break;case 12:h=d.createBinary(p.BinaryOp.AddF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable()}break;case l.Token.MINUS_EQUALS:g=!0;case l.Token.MINUS:if(n=this.compileExpressionRetainType(y,t,!1),g)a=this.compileExpression(m,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(m,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,d.createUnreachable();n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:T=!0;case 2:case 7:h=d.createBinary(p.BinaryOp.SubI32,n,a);break;case 9:case 4:h=d.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,n,a);break;case 3:case 8:h=d.createBinary(p.BinaryOp.SubI64,n,a);break;case 11:h=d.createBinary(p.BinaryOp.SubF32,n,a);break;case 12:h=d.createBinary(p.BinaryOp.SubF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable()}break;case l.Token.ASTERISK_EQUALS:g=!0;case l.Token.ASTERISK:if(n=this.compileExpressionRetainType(y,t,!1),g)a=this.compileExpression(m,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(m,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,d.createUnreachable();n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:T=!0;case 2:case 7:h=d.createBinary(p.BinaryOp.MulI32,n,a);break;case 9:case 4:h=d.createBinary(this.options.isWasm64?p.BinaryOp.MulI64:p.BinaryOp.MulI32,n,a);break;case 3:case 8:h=d.createBinary(p.BinaryOp.MulI64,n,a);break;case 11:h=d.createBinary(p.BinaryOp.MulF32,n,a);break;case 12:h=d.createBinary(p.BinaryOp.MulF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable()}break;case l.Token.SLASH_EQUALS:g=!0;case l.Token.SLASH:if(n=this.compileExpressionRetainType(y,t,!0),g)a=this.compileExpression(m,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(m,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,d.createUnreachable();n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m)}switch(this.currentType.kind){case 0:case 1:T=!0;case 2:h=d.createBinary(p.BinaryOp.DivI32,n,a);break;case 4:h=d.createBinary(this.options.isWasm64?p.BinaryOp.DivI64:p.BinaryOp.DivI32,n,a);break;case 3:h=d.createBinary(p.BinaryOp.DivI64,n,a);break;case 5:case 6:case 10:T=!0;case 7:h=d.createBinary(p.BinaryOp.DivU32,n,a);break;case 9:h=d.createBinary(this.options.isWasm64?p.BinaryOp.DivU64:p.BinaryOp.DivU32,n,a);break;case 8:h=d.createBinary(p.BinaryOp.DivU64,n,a);break;case 11:h=d.createBinary(p.BinaryOp.DivF32,n,a);break;case 12:h=d.createBinary(p.BinaryOp.DivF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable()}break;case l.Token.PERCENT_EQUALS:g=!0;case l.Token.PERCENT:if(n=this.compileExpressionRetainType(y,t,!0),g)a=this.compileExpression(m,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(m,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,d.createUnreachable();n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m)}switch(this.currentType.kind){case 0:case 1:case 2:h=d.createBinary(p.BinaryOp.RemI32,n,a);break;case 4:h=d.createBinary(this.options.isWasm64?p.BinaryOp.RemI64:p.BinaryOp.RemI32,n,a);break;case 3:h=d.createBinary(p.BinaryOp.RemI64,n,a);break;case 5:case 6:case 7:case 10:h=d.createBinary(p.BinaryOp.RemU32,n,a);break;case 9:h=d.createBinary(this.options.isWasm64?p.BinaryOp.RemU64:p.BinaryOp.RemU32,n,a);break;case 8:h=d.createBinary(p.BinaryOp.RemU64,n,a);break;case 11:case 12:this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable();break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable()}break;case l.Token.LESSTHAN_LESSTHAN_EQUALS:g=!0;case l.Token.LESSTHAN_LESSTHAN:switch(n=this.compileExpressionRetainType(y,t,!1),a=this.compileExpression(m,this.currentType,1,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:T=!0;default:h=d.createBinary(p.BinaryOp.ShlI32,n,a);break;case 3:case 8:h=d.createBinary(p.BinaryOp.ShlI64,n,a);break;case 9:case 4:h=d.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,l.operatorTokenToString(e.operator),this.currentType.toString()),d.createUnreachable();case 13:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable()}break;case l.Token.GREATERTHAN_GREATERTHAN_EQUALS:g=!0;case l.Token.GREATERTHAN_GREATERTHAN:switch(n=this.compileExpressionRetainType(y,t,!0),a=this.compileExpression(m,this.currentType,1,!0),this.currentType.kind){default:h=d.createBinary(p.BinaryOp.ShrI32,n,a);break;case 3:h=d.createBinary(p.BinaryOp.ShrI64,n,a);break;case 4:h=d.createBinary(this.options.isWasm64?p.BinaryOp.ShrI64:p.BinaryOp.ShrI32,n,a);break;case 5:case 6:case 10:case 7:h=d.createBinary(p.BinaryOp.ShrU32,n,a);break;case 8:h=d.createBinary(p.BinaryOp.ShrU64,n,a);break;case 9:h=d.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,l.operatorTokenToString(e.operator),this.currentType.toString()),d.createUnreachable();case 13:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=d.createUnreachable()}break;case l.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:g=!0;case l.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:switch(n=this.compileExpressionRetainType(y,t,!0),a=this.compileExpression(m,this.currentType,1,!0),this.currentType.kind){case 0:case 1:T=!0;default:h=d.createBinary(p.BinaryOp.ShrU32,n,a);break;case 3:case 8:h=d.createBinary(p.BinaryOp.ShrU64,n,a);break;case 9:case 4:h=d.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),h=d.createUnreachable()}break;case l.Token.AMPERSAND_EQUALS:g=!0;case l.Token.AMPERSAND:if(n=this.compileExpressionRetainType(y,t,!1),g)a=this.compileExpression(m,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(m,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,d.createUnreachable();n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:T=!0;default:h=d.createBinary(p.BinaryOp.AndI32,n,a);break;case 3:case 8:h=d.createBinary(p.BinaryOp.AndI64,n,a);break;case 9:case 4:h=d.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),h=d.createUnreachable()}break;case l.Token.BAR_EQUALS:g=!0;case l.Token.BAR:if(n=this.compileExpressionRetainType(y,t,!1),g)a=this.compileExpression(m,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(m,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,d.createUnreachable();n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:T=!0;default:h=d.createBinary(p.BinaryOp.OrI32,n,a);break;case 3:case 8:h=d.createBinary(p.BinaryOp.OrI64,n,a);break;case 9:case 4:h=d.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),h=d.createUnreachable()}break;case l.Token.CARET_EQUALS:g=!0;case l.Token.CARET:if(n=this.compileExpressionRetainType(y,t,!1),g)a=this.compileExpression(m,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(m,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,d.createUnreachable();n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,m)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:T=!0;default:h=d.createBinary(p.BinaryOp.XorI32,n,a);break;case 3:case 8:h=d.createBinary(p.BinaryOp.XorI64,n,a);break;case 9:case 4:h=d.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),h=d.createUnreachable()}break;case l.Token.AMPERSAND_AMPERSAND:n=this.compileExpressionRetainType(y,t),a=this.compileExpression(m,this.currentType,1,!1),(h=d.cloneExpression(n,!0,0))||(I=this.currentFunction.getAndFreeTempLocal(this.currentType),n=d.createTeeLocal(I.index,n)),T=this.currentType.is(36),u=f(n,this.currentType,d),h=h?d.createIf(u,a,h):d.createIf(u,a,d.createGetLocal(assert(I).index,this.currentType.toNativeType()));break;case l.Token.BAR_BAR:n=this.compileExpressionRetainType(y,t),a=this.compileExpression(m,this.currentType,1,!1),(h=this.module.cloneExpression(n,!0,0))||(I=this.currentFunction.getAndFreeTempLocal(this.currentType),n=d.createTeeLocal(I.index,n)),T=this.currentType.is(36),u=f(n,this.currentType,d),h=h?this.module.createIf(u,h,a):d.createIf(u,d.createGetLocal(assert(I).index,this.currentType.toNativeType()),a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=this.module.createUnreachable()}return T&&r&&(assert(this.currentType.is(36)),h=E(h,this.currentType,d)),g?this.compileAssignmentWithValue(y,h,t!=_.Type.void):h},t.prototype.compileOperatorOverload=function(e,t,r,n){var i=e.prototype,a=assert(assert(i.members).get(t));assert(a.kind==u.ElementKind.FUNCTION_PROTOTYPE);var o=a.resolve();return o?this.makeCallDirect(o,[r,n]):this.module.createUnreachable()},t.prototype.compileAssignment=function(e,t,r){var n=this.currentFunction,i=this.program.resolveExpression(e,n);if(!i)return this.module.createUnreachable();var a,o=i.element;switch(o.kind){case u.ElementKind.GLOBAL:if(!this.compileGlobal(o))return this.module.createUnreachable();assert(o.type!=_.Type.void,"concrete type expected");case u.ElementKind.LOCAL:case u.ElementKind.FIELD:a=o.type;break;case u.ElementKind.PROPERTY:var s=o.setterPrototype;if(s){var p=s.resolve();if(!p)return this.module.createUnreachable();assert(1==p.signature.parameterTypes.length),a=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 u.ElementKind.FUNCTION_PROTOTYPE:if(e.kind==h.NodeKind.ELEMENTACCESS&&i.target&&i.target.kind==u.ElementKind.CLASS){if(o.simpleName!=i.target.prototype.fnIndexedGet)return this.error(c.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,i.target.toString()),this.module.createUnreachable();var l=o.resolve(null);if(l){a=l.signature.returnType;break}}default:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}var d=this.compileExpression(t,a);return this.compileAssignmentWithValue(e,d,r!=_.Type.void)},t.prototype.compileAssignmentWithValue=function(e,t,r){void 0===r&&(r=!1);var n=this.module,i=this.program.resolveExpression(e,this.currentFunction);if(!i)return n.createUnreachable();var a=i.element;switch(a.kind){case u.ElementKind.LOCAL:return this.currentType=r?a.type:_.Type.void,a.is(u.CommonFlags.CONST)?(this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,a.internalName),n.createUnreachable()):r?n.createTeeLocal(a.index,t):n.createSetLocal(a.index,t);case u.ElementKind.GLOBAL:if(!this.compileGlobal(a))return n.createUnreachable();var o=a.type;if(assert(o!=_.Type.void),this.currentType=r?o:_.Type.void,a.is(u.CommonFlags.CONST))return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,a.internalName),n.createUnreachable();if(r){var s=o.toNativeType(),p=a.internalName;return n.createBlock(null,[n.createSetGlobal(p,t),n.createGetGlobal(p,s)],s)}return n.createSetGlobal(a.internalName,t);case u.ElementKind.FIELD:if(a.is(u.CommonFlags.READONLY))return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,a.internalName),n.createUnreachable();assert(i.isInstanceTarget);var l=this.compileExpression(i.targetExpression,i.target.type);o=a.type;this.currentType=r?o:_.Type.void;s=o.toNativeType();if(r){var d=this.currentFunction.getAndFreeTempLocal(o).index;return n.createBlock(null,[n.createSetLocal(d,t),n.createStore(o.size>>3,l,n.createGetLocal(d,s),s,a.memoryOffset),n.createGetLocal(d,s)],s)}return n.createStore(o.size>>3,l,t,s,a.memoryOffset);case u.ElementKind.PROPERTY:var y=a.setterPrototype;if(y){if(!(A=y.resolve()))return n.createUnreachable();if(!r){if(A.is(u.CommonFlags.INSTANCE)){assert(i.isInstanceTarget);var m=this.compileExpression(i.targetExpression,i.target.type);return this.makeCallDirect(A,[m,t])}return this.makeCallDirect(A,[t])}var g=a.getterPrototype;if(assert(null!=g),!(T=g.resolve()))return n.createUnreachable();var E=(O=T.signature.returnType).toNativeType();if(A.is(u.CommonFlags.INSTANCE)){assert(i.isInstanceTarget);m=this.compileExpression(i.targetExpression,i.target.type),d=this.currentFunction.getAndFreeTempLocal(O).index;return n.createBlock(null,[this.makeCallDirect(A,[n.createTeeLocal(d,m),t]),this.makeCallDirect(T,[n.createGetLocal(d,E)])],E)}return n.createBlock(null,[this.makeCallDirect(A,[t]),this.makeCallDirect(T)],E)}return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,a.internalName),n.createUnreachable();case u.ElementKind.FUNCTION_PROTOTYPE:if(e.kind==h.NodeKind.ELEMENTACCESS){var T;if(assert(i.isInstanceTarget),!(T=a.resolve()))return n.createUnreachable();var f=i.target.prototype.fnIndexedSet,I=void 0;if(null!=f&&i.target.members&&(I=i.target.members.get(f))&&I.kind==u.ElementKind.FUNCTION_PROTOTYPE){var A;if(!(A=I.resolve()))return n.createUnreachable();var v=i.target.type,N=(l=this.compileExpression(i.targetExpression,v),this.compileExpression(e.elementExpression,_.Type.i32));if(r){var C=this.currentFunction.getTempLocal(v),S=this.currentFunction.getAndFreeTempLocal(this.currentType),O=T.signature.returnType;return this.currentFunction.freeTempLocal(C),n.createBlock(null,[this.makeCallDirect(A,[n.createTeeLocal(C.index,l),n.createTeeLocal(S.index,N),t]),this.makeCallDirect(T,[n.createGetLocal(C.index,C.type.toNativeType()),n.createGetLocal(S.index,S.type.toNativeType())])],O.toNativeType())}return this.makeCallDirect(A,[l,N,t])}return this.error(c.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,i.target.internalName),n.createUnreachable()}}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()},t.prototype.compileCallExpression=function(e,t){var r=this.module,n=this.currentFunction,i=this.program.resolveExpression(e.expression,n);if(!i)return r.createUnreachable();var a,o,l=i.element;switch(l.kind){case u.ElementKind.FUNCTION_PROTOTYPE:var h=l;if(h.is(u.CommonFlags.AMBIENT|u.CommonFlags.BUILTIN)){var _=s.compileCall(this,h,h.resolveBuiltinTypeArguments(e.typeArguments,n.contextualTypeArguments),e.arguments,t,e);return _||(this.error(c.DiagnosticCode.Operation_not_supported,e.range),r.createUnreachable())}var d=h.resolveUsingTypeArguments(e.typeArguments,n.contextualTypeArguments,e);if(!d)return r.createUnreachable();var y=0;if(d.is(u.CommonFlags.INSTANCE)){if(assert(i.isInstanceTarget),!(y=this.compileExpression(i.targetExpression,i.target.type)))return r.createUnreachable()}else assert(!i.isInstanceTarget);return this.compileCallDirect(d,e.arguments,e,y);case u.ElementKind.LOCAL:if(a=l.type.signatureReference){o=r.createGetLocal(l.index,p.NativeType.I32);break}return this.error(c.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,e.range,l.type.toString()),r.createUnreachable();case u.ElementKind.GLOBAL:if(a=l.type.signatureReference){o=r.createGetGlobal(l.internalName,l.type.toNativeType());break}return this.error(c.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,e.range,l.type.toString()),r.createUnreachable();case u.ElementKind.FIELD:var m=l.type;if(a=m.signatureReference){var g=this.compileExpression(assert(i.targetExpression),m);o=r.createLoad(4,!1,g,p.NativeType.I32,l.memoryOffset);break}return this.error(c.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,e.range,l.type.toString()),r.createUnreachable();case u.ElementKind.FUNCTION_TARGET:a=l.signature,o=this.compileExpression(e.expression,l.type);break;case u.ElementKind.PROPERTY:default:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),r.createUnreachable()}return this.compileCallIndirect(a,o,e.arguments,e)},t.prototype.checkCallSignature=function(e,t,r,n){if(r!=(null!=e.thisType))return this.error(c.DiagnosticCode.Operation_not_supported,n.range),!1;var i=e.hasRest;if(i)return this.error(c.DiagnosticCode.Operation_not_supported,n.range),!1;var a=e.requiredParameters,o=e.parameterTypes.length;return to&&!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){void 0===n&&(n=0);var i=t.length,a=e.signature;if(!this.checkCallSignature(a,i,0!=n,r))return this.module.createUnreachable();var o=n?i+1:i,s=new Array(o),c=0;n&&(s[0]=n,c=1);for(var p=a.parameterTypes,u=0;u=i);var s=this.module;if(!this.compileFunction(e))return s.createUnreachable();var c=e.signature.returnType,p=e.is(u.CommonFlags.MODULE_IMPORT);if(r=a),this.ensureFunctionType(e);var c=this.module;if(n=0),this.currentType=T,this.module.createGetLocal(f,T.toNativeType());case u.ElementKind.GLOBAL:if(E.is(u.CommonFlags.AMBIENT|u.CommonFlags.BUILTIN))return s.compileGetConstant(this,E,e);if(!this.compileGlobal(E))return this.module.createUnreachable();var I=E.type;return assert(I!=_.Type.void),E.is(u.CommonFlags.INLINED)?this.compileInlineConstant(E,t,r):(this.currentType=I,this.module.createGetGlobal(E.internalName,I.toNativeType()));case u.ElementKind.ENUMVALUE:return E.is(u.CommonFlags.COMPILED)?(this.currentType=_.Type.i32,E.is(u.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 u.ElementKind.FUNCTION_PROTOTYPE:var v=E.resolve(null,this.currentFunction.contextualTypeArguments);if(!v||!this.compileFunction(v))return n.createUnreachable();var N=this.ensureFunctionTableEntry(v);return this.currentType=v.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.elementsLookup.get("Array")?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 1:if(i64_is_i16(o))return n.createI32(i64_low(o));break;case 2:if(i64_is_i32(o))return n.createI32(i64_low(o));break;case 5:if(i64_is_u8(o))return n.createI32(i64_low(o));break;case 6:if(i64_is_u16(o))return n.createI32(i64_low(o));break;case 7:if(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_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.elementsLookup.get("Array"));if(!a||a.kind!=u.ElementKind.CLASS_PROTOTYPE)return i.createUnreachable();var o=a.resolve([e]);if(!o)return i.createUnreachable();var s,l,h=t.length,_=e.toNativeType();switch(_){case p.NativeType.I32:s=changetype(new Int32Array(h)),l=4*h;break;case p.NativeType.I64:s=changetype(new Array(h)),l=8*h;break;case p.NativeType.F32:s=changetype(new Float32Array(h)),l=4*h;break;case p.NativeType.F64:s=changetype(new Float64Array(h)),l=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),o=this.compileExpression(a.targetExpression,this.options.usizeType,0),this.currentType=l.type,i.createLoad(l.type.size>>3,l.type.is(5),o,l.type.toNativeType(),l.memoryOffset);case u.ElementKind.PROPERTY:var d=l.getterPrototype;if(d){var y=d.resolve(null);if(!y)return i.createUnreachable();var m=y.signature;if(!this.checkCallSignature(m,0,y.is(u.CommonFlags.INSTANCE),e))return i.createUnreachable();if(y.is(u.CommonFlags.INSTANCE)){var g=assert(y.memberOf);return assert(g.kind==u.ElementKind.CLASS),o=this.compileExpression(a.targetExpression,g.type),this.currentType=m.returnType,this.compileCallDirect(y,[],e,o)}return this.currentType=m.returnType,this.compileCallDirect(y,[],e)}return this.error(c.DiagnosticCode.Property_0_does_not_exist_on_type_1,e.range,l.simpleName,l.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=f(this.compileExpression(e.condition,_.Type.u32,0),this.currentType,this.module);if(this.currentFunction.isAny(u.CommonFlags.GENERIC|u.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(u.CommonFlags.CONSTRUCTOR)){var c=s.flow;c=c.enterBranchOrScope(),s.flow=c,a=this.compileExpression(r,t);var l=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,l&&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,n,i,a,o=this.module,s=this.currentFunction,u=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,!1),h=this.currentType,d=!1;switch(e.operator){case l.Token.PLUS_PLUS:if(h.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),o.createUnreachable();switch(h.kind){case 0:case 1:case 5:case 6:case 10:d=!0;default:r=p.BinaryOp.AddI32,n=p.NativeType.I32,i=o.createI32(1);break;case 9:case 4:r=(y=this.options).isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,n=y.nativeSizeType,i=h.toNativeOne(o);break;case 3:case 8:r=p.BinaryOp.AddI64,n=p.NativeType.I64,i=o.createI64(1);break;case 11:r=p.BinaryOp.AddF32,n=p.NativeType.F32,i=o.createF32(1);break;case 12:r=p.BinaryOp.AddF64,n=p.NativeType.F64,i=o.createF64(1);break;case 13:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),o.createUnreachable()}break;case l.Token.MINUS_MINUS:if(h.is(256))return this.error(c.DiagnosticCode.Operation_not_supported,e.range),o.createUnreachable();switch(h.kind){case 0:case 1:case 5:case 6:case 10:d=!0;default:r=p.BinaryOp.SubI32,n=p.NativeType.I32,i=o.createI32(1);break;case 9:case 4:var y;r=(y=this.options).isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,n=y.nativeSizeType,i=h.toNativeOne(o);break;case 3:case 8:r=p.BinaryOp.SubI64,n=p.NativeType.I64,i=o.createI64(1);break;case 11:r=p.BinaryOp.SubF32,n=p.NativeType.F32,i=o.createF32(1);break;case 12:r=p.BinaryOp.SubF64,n=p.NativeType.F64,i=o.createF64(1);break;case 13:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),o.createUnreachable()}break;default:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),o.createUnreachable()}var m=null;if(t==_.Type.void?a=o.createBinary(r,u,i):(m=s.getTempLocal(h),a=o.createBinary(r,this.module.createGetLocal(m.index,n),i)),d&&(assert(h.is(36)),a=E(a,h,o)),a=this.compileAssignmentWithValue(e.operand,a,!1),t==_.Type.void)return assert(!m),a;this.currentType=assert(m).type,s.freeTempLocal(m);var g=m.index;return o.createBlock(null,[o.createSetLocal(g,u),a,o.createGetLocal(g,n)],n)},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 l.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 l.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 l.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 l.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 l.Token.EXCLAMATION:n=T(n=this.compileExpression(e.operand,t==_.Type.void?_.Type.i32:t,0,!0),this.currentType,i),this.currentType=_.Type.bool;break;case l.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 l.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 T(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 f(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,l=c.getTempLocal(t.type),h=new Array;if(h.push(o.createSetLocal(l.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==u.ElementKind.FIELD){var m=y,g=m.type,E=m.prototype.declaration;assert(!m.isAny(u.CommonFlags.CONST)),E.initializer?h.push(o.createStore(g.byteSize,o.createGetLocal(l.index,p),e.compileExpression(E.initializer,g),g.toNativeType(),m.memoryOffset)):h.push(o.createStore(m.type.byteSize,o.createGetLocal(l.index,p),m.type.toNativeZero(o),m.type.toNativeType(),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(l.index,p)),c.freeTempLocal(l),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=E,t.makeIsFalseish=T,t.makeIsTrueish=f,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.Structs_cannot_extend_classes_and_vice_versa=207]="Structs_cannot_extend_classes_and_vice_versa",e[e.Structs_cannot_implement_interfaces=208]="Structs_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.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.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.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"Structs cannot extend classes and vice-versa.";case 208:return"Structs 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 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 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 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),u=a.LIBRARY_PREFIX+"builtins.ts",l=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=n.sources,l=0,h=s.length;l"),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 u=p.ParameterKind.DEFAULT;if(e.skip(o.Token.DOT_DOT_DOT)&&(c=!0,e.discard(r),u=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 l=this.parseType(e,!1);if(!l)return null;if(l.kind!=p.NodeKind.TYPE)return this.error(s.DiagnosticCode.Operation_not_supported,l.range),this.tryParseSignatureIsSignature=!0,null;a=l}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),u==p.ParameterKind.REST?this.error(s.DiagnosticCode.A_rest_parameter_cannot_be_optional,e.range()):u=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=u,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 u=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()),!(u=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,u,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 u=this.parseEnumValue(e,a.CommonFlags.NONE);if(!u)return null;c.push(u)}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(),"}"),null}var l=p.Node.createEnumDeclaration(i,c,r,t,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),l},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){var t=new Array,r=null,n=!1,i=!1;if(e.peek()!=o.Token.CLOSEPAREN)do{var a=this.parseParameter(e);if(!a)return null;switch(r&&!i&&(this.error(s.DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,r.name.range),i=!0),a.parameterKind){default:n&&this.error(s.DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,a.name.range);break;case p.ParameterKind.OPTIONAL:n=!0;break;case p.ParameterKind.REST:r=a}t.push(a)}while(e.skip(o.Token.COMMA));return e.skip(o.Token.CLOSEPAREN)?t:(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;if(e.skip(o.Token.DOT_DOT_DOT)&&(r=!0,i=e.range()),e.skip(o.Token.IDENTIFIER)){r||(i=e.range());var a=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),c=null;if((n=e.skip(o.Token.QUESTION))&&r&&this.error(s.DiagnosticCode.A_rest_parameter_cannot_be_optional,a.range),e.skip(o.Token.COLON)){if(!(c=this.parseType(e)))return null}else c=p.Node.createOmittedType(e.range(e.pos));var u=null;return!e.skip(o.Token.EQUALS)||(r&&this.error(s.DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,a.range),n?this.error(s.DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,a.range):n=!0,u=this.parseExpression(e,1))?p.Node.createParameter(a,c,u,r?p.ParameterKind.REST:n?p.ParameterKind.OPTIONAL:p.ParameterKind.DEFAULT,o.Range.join(i,e.range())):null}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,u=null;if(e.skip(o.Token.LESSTHAN)){if(c=e.tokenPos,!(u=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 l=this.parseParameters(e);if(!l)return null;var h=0!=(t&a.CommonFlags.SET);h&&(1!=l.length&&this.error(s.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,i.range),l.length&&l[0].initializer&&this.error(s.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,i.range)),t&a.CommonFlags.GET&&l.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(l,_,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,u,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 u=null;if(e.skip(o.Token.COLON)){if(!(u=this.parseType(e)))return null}else u=p.Node.createOmittedType(e.range(e.pos)),this.error(s.DiagnosticCode.Type_expected,u.range);if(n&&!e.skip(o.Token.EQUALS_GREATERTHAN))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"=>"),null;var l,h=p.Node.createSignature(r,u,null,!1,e.range(c,e.pos));if(n)l=this.parseStatement(e,!1);else{if(!e.skip(o.Token.OPENBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;l=this.parseBlockStatement(e,!1)}if(!l)return null;var _=p.Node.createFunctionDeclaration(t,null,h,l,null,n?a.CommonFlags.ARROW:a.CommonFlags.NONE,e.range(i,e.pos));return p.Node.createFunctionExpression(_)},t.prototype.parseClass=function(e,t,r,n){if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;var i,c=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(o.Token.LESSTHAN)){if(!(i=this.parseTypeParameters(e)))return null;t|=a.CommonFlags.GENERIC}else i=[];var u=null;if(e.skip(o.Token.EXTENDS)){var l=this.parseType(e);if(!l)return null;if(l.kind!=p.NodeKind.TYPE)return this.error(s.DiagnosticCode.Operation_not_supported,l.range),null;u=l}var h=new Array;if(e.skip(o.Token.IMPLEMENTS))do{var _=this.parseType(e);if(!_)return null;h.push(_)}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.OPENBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(),"{"),null;var d=new Array;if(!e.skip(o.Token.CLOSEBRACE))do{var y=this.parseClassMember(e,t);if(!y)return null;d.push(y)}while(!e.skip(o.Token.CLOSEBRACE));return p.Node.createClassDeclaration(c,i,u,h,d,r,t,e.range(n,e.pos))},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&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 u=0,l=0,h=0,_=0;e.skip(o.Token.STATIC)?(c|=a.CommonFlags.STATIC,u=e.tokenPos,l=e.pos):(e.skip(o.Token.ABSTRACT)?(c|=a.CommonFlags.ABSTRACT|a.CommonFlags.INSTANCE,h=e.tokenPos,_=e.pos):c|=a.CommonFlags.INSTANCE,t&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,I=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,I=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,I=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(u,l),"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 A=g?p.Node.createConstructorExpression(e.range()):p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),v=null;if(e.skip(o.Token.LESSTHAN)){var N=e.tokenPos;if(!(v=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);if(!S)return null;E?S.length&&this.error(s.DiagnosticCode.A_get_accessor_cannot_have_parameters,A.range):T&&(1!=S.length&&this.error(s.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,A.range),S.length&&S[0].initializer&&this.error(s.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,A.range));var O=null;if(e.skip(o.Token.COLON)){if(A.kind==p.NodeKind.CONSTRUCTOR?this.error(s.DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration,e.range()):T&&this.error(s.DiagnosticCode.A_set_accessor_cannot_have_a_return_type_annotation,e.range()),!(O=this.parseType(e,A.kind==p.NodeKind.CONSTRUCTOR||T)))return null}else O=p.Node.createOmittedType(e.range(e.pos)),T||A.kind==p.NodeKind.CONSTRUCTOR||this.error(s.DiagnosticCode.Type_expected,O.range);var b=p.Node.createSignature(S,O,null,!1,e.range(C,e.pos)),L=null;if(e.skip(o.Token.OPENBRACE)){if(c&a.CommonFlags.AMBIENT&&this.error(s.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,e.range()),!(L=this.parseBlockStatement(e,!1)))return null}else c&a.CommonFlags.AMBIENT||this.error(s.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,e.range());var k=p.Node.createMethodDeclaration(A,v,b,L,n,c,e.range(r,e.pos));return e.skip(o.Token.SEMICOLON),k}if(g)this.error(s.DiagnosticCode.Constructor_implementation_is_missing,A.range);else{if(!E&&!T){c&a.CommonFlags.ABSTRACT&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(h,_),"abstract"),c&a.CommonFlags.GET&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(0,0),"get"),c&a.CommonFlags.SET&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,e.range(f,I),"set");var x=null;if(e.skip(o.Token.COLON)){if(!(x=this.parseType(e)))return null}else this.error(s.DiagnosticCode.Type_expected,e.range());var R=null;if(e.skip(o.Token.EQUALS)&&!(R=this.parseExpression(e)))return null;var B=p.Node.createFieldDeclaration(A,x,R,n,c,e.range(r,e.pos));return e.skip(o.Token.SEMICOLON),B}this.error(s.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,A.range)}return null},t.prototype.parseNamespace=function(e,t,r,n){if(e.skip(o.Token.IDENTIFIER)){var i=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(o.Token.OPENBRACE)){for(var a=new Array,c=p.Node.createNamespaceDeclaration(i,a,r,t,e.range(n,e.pos));!e.skip(o.Token.CLOSEBRACE);){var u=this.parseTopLevelStatement(e,c);if(!u)return null;u.parent=c,a.push(u)}return e.skip(o.Token.SEMICOLON),c}this.error(s.DiagnosticCode._0_expected,e.range(),"{")}else this.error(s.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseExport=function(e,t,r){if(e.skip(o.Token.OPENBRACE)){var n=new Array;if(!e.skip(o.Token.CLOSEBRACE)){do{var i=this.parseExportMember(e);if(!i)return null;n.push(i)}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(),"}"),null}var a=null;if(e.skip(o.Token.FROM)){if(!e.skip(o.Token.STRINGLITERAL))return this.error(s.DiagnosticCode.String_literal_expected,e.range()),null;a=p.Node.createStringLiteralExpression(e.readString(),e.range())}var c=p.Node.createExportStatement(n,a,t,e.range(r,e.pos));return c.normalizedPath&&!this.seenlog.has(c.normalizedPath)&&(this.backlog.push(c.normalizedPath),this.seenlog.add(c.normalizedPath)),e.skip(o.Token.SEMICOLON),c}return this.error(s.DiagnosticCode._0_expected,e.range(),"{"),null},t.prototype.parseExportMember=function(e){if(e.skip(o.Token.IDENTIFIER)){var t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(o.Token.AS)){if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;r=p.Node.createIdentifierExpression(e.readIdentifier(),e.range())}return p.Node.createExportMember(t,r,r?o.Range.join(t.range,r.range):t.range)}return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseImport=function(e){var t=e.tokenPos,r=null,n=null,i=!1;if(e.skip(o.Token.OPENBRACE)){if(r=new Array,!e.skip(o.Token.CLOSEBRACE)){do{var a=this.parseImportDeclaration(e);if(!a)return null;r.push(a)}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(),"}"),null}}else if(e.skip(o.Token.ASTERISK)){if(!e.skip(o.Token.AS))return this.error(s.DiagnosticCode._0_expected,e.range(),"as"),null;if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;n=p.Node.createIdentifierExpression(e.readIdentifier(),e.range())}else i=!0;if(i||e.skip(o.Token.FROM)){if(e.skip(o.Token.STRINGLITERAL)){var c=p.Node.createStringLiteralExpression(e.readString(),e.range()),u=void 0;return n?(assert(!r),u=p.Node.createImportStatementWithWildcard(n,c,e.range(t,e.pos))):u=p.Node.createImportStatement(r,c,e.range(t,e.pos)),this.seenlog.has(u.normalizedPath)||(this.backlog.push(u.normalizedPath),this.seenlog.add(u.normalizedPath)),e.skip(o.Token.SEMICOLON),u}this.error(s.DiagnosticCode.String_literal_expected,e.range())}else this.error(s.DiagnosticCode._0_expected,e.range(),"from");return null},t.prototype.parseImportDeclaration=function(e){if(e.skip(o.Token.IDENTIFIER)){var t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(o.Token.AS)){if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;r=p.Node.createIdentifierExpression(e.readIdentifier(),e.range())}return p.Node.createImportDeclaration(t,r,r?o.Range.join(t.range,r.range):t.range)}return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseExportImport=function(e,t){if(e.skip(o.Token.IDENTIFIER)){var r=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(o.Token.EQUALS)){if(e.skip(o.Token.IDENTIFIER)){var n=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),i=p.Node.createExportImportStatement(n,r,e.range(t,e.pos));return e.skip(o.Token.SEMICOLON),i}this.error(s.DiagnosticCode.Identifier_expected,e.range())}else this.error(s.DiagnosticCode._0_expected,e.range(),"=")}else this.error(s.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseStatement=function(e,t){void 0===t&&(t=!1);var r=e.mark(),n=null;switch(e.next()){case o.Token.BREAK:n=this.parseBreak(e);break;case o.Token.CONST:n=this.parseVariable(e,a.CommonFlags.CONST,null,e.tokenPos);break;case o.Token.CONTINUE:n=this.parseContinue(e);break;case o.Token.DO:n=this.parseDoStatement(e);break;case o.Token.FOR:n=this.parseForStatement(e);break;case o.Token.IF:n=this.parseIfStatement(e);break;case o.Token.LET:n=this.parseVariable(e,a.CommonFlags.LET,null,e.tokenPos);break;case o.Token.VAR:n=this.parseVariable(e,a.CommonFlags.NONE,null,e.tokenPos);break;case o.Token.OPENBRACE:n=this.parseBlockStatement(e,t);break;case o.Token.RETURN:t&&this.error(s.DiagnosticCode.A_return_statement_can_only_be_used_within_a_function_body,e.range()),n=this.parseReturn(e);break;case o.Token.SEMICOLON:return p.Node.createEmptyStatement(e.range(e.tokenPos));case o.Token.SWITCH:n=this.parseSwitchStatement(e);break;case o.Token.THROW:n=this.parseThrowStatement(e);break;case o.Token.TRY:n=this.parseTryStatement(e);break;case o.Token.TYPE:n=this.parseTypeDeclaration(e,a.CommonFlags.NONE,null,e.tokenPos);break;case o.Token.VOID:n=this.parseVoidStatement(e);break;case o.Token.WHILE:n=this.parseWhileStatement(e);break;default:e.reset(r),n=this.parseExpressionStatement(e)}return n?e.discard(r):(e.reset(r),this.skipStatement(e)),n},t.prototype.parseBlockStatement=function(e,t){for(var r=e.tokenPos,n=new Array;!e.skip(o.Token.CLOSEBRACE);){var i=e.mark(),a=this.parseStatement(e,t);a?(e.discard(i),n.push(a)):(e.reset(i),this.skipStatement(e))}var s=p.Node.createBlockStatement(n,e.range(r,e.pos));return e.skip(o.Token.SEMICOLON),s},t.prototype.parseBreak=function(e){var t=null;e.peek(!0)!=o.Token.IDENTIFIER||e.nextTokenOnNewLine||(e.next(!0),t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()));var r=p.Node.createBreakStatement(t,e.range());return e.skip(o.Token.SEMICOLON),r},t.prototype.parseContinue=function(e){var t=null;e.peek(!0)!=o.Token.IDENTIFIER||e.nextTokenOnNewLine||(e.next(!0),t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()));var r=p.Node.createContinueStatement(t,e.range());return e.skip(o.Token.SEMICOLON),r},t.prototype.parseDoStatement=function(e){var t=e.tokenPos,r=this.parseStatement(e);if(!r)return null;if(e.skip(o.Token.WHILE))if(e.skip(o.Token.OPENPAREN)){var n=this.parseExpression(e);if(!n)return null;if(e.skip(o.Token.CLOSEPAREN)){var i=p.Node.createDoStatement(r,n,e.range(t,e.pos));return e.skip(o.Token.SEMICOLON),i}this.error(s.DiagnosticCode._0_expected,e.range(),")")}else this.error(s.DiagnosticCode._0_expected,e.range(),"(");else this.error(s.DiagnosticCode._0_expected,e.range(),"while");return null},t.prototype.parseExpressionStatement=function(e){var t=this.parseExpression(e);if(!t)return null;var r=p.Node.createExpressionStatement(t);return e.skip(o.Token.SEMICOLON),r},t.prototype.parseForStatement=function(e){var t=e.tokenPos;if(e.skip(o.Token.OPENPAREN)){var r=null;if(e.skip(o.Token.CONST))r=this.parseVariable(e,a.CommonFlags.CONST,null,e.tokenPos);else if(e.skip(o.Token.LET))r=this.parseVariable(e,a.CommonFlags.LET,null,e.tokenPos);else if(e.skip(o.Token.VAR))r=this.parseVariable(e,a.CommonFlags.NONE,null,e.tokenPos);else if(!e.skip(o.Token.SEMICOLON)&&!(r=this.parseExpressionStatement(e)))return null;if(e.token==o.Token.SEMICOLON){var n=null;if(!e.skip(o.Token.SEMICOLON)&&!(n=this.parseExpressionStatement(e)))return null;if(e.token==o.Token.SEMICOLON){var i=null;if(!e.skip(o.Token.CLOSEPAREN)){if(!(i=this.parseExpression(e)))return null;if(!e.skip(o.Token.CLOSEPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(),")"),null}var c=this.parseStatement(e);return c?p.Node.createForStatement(r,n?n.expression:null,i,c,e.range(t,e.pos)):null}this.error(s.DiagnosticCode._0_expected,e.range(),";")}else this.error(s.DiagnosticCode._0_expected,e.range(),";")}else this.error(s.DiagnosticCode._0_expected,e.range(),"(");return null},t.prototype.parseIfStatement=function(e){var t=e.tokenPos;if(e.skip(o.Token.OPENPAREN)){var r=this.parseExpression(e);if(!r)return null;if(e.skip(o.Token.CLOSEPAREN)){var n=this.parseStatement(e);if(!n)return null;var i=null;return e.skip(o.Token.ELSE)&&!(i=this.parseStatement(e))?null:p.Node.createIfStatement(r,n,i,e.range(t,e.pos))}this.error(s.DiagnosticCode._0_expected,e.range(),")")}else this.error(s.DiagnosticCode._0_expected,e.range(),"(");return null},t.prototype.parseSwitchStatement=function(e){var t=e.tokenPos;if(e.skip(o.Token.OPENPAREN)){var r=this.parseExpression(e);if(!r)return null;if(e.skip(o.Token.CLOSEPAREN)){if(e.skip(o.Token.OPENBRACE)){for(var n=new Array;!e.skip(o.Token.CLOSEBRACE);){var i=this.parseSwitchCase(e);if(!i)return null;n.push(i)}var a=p.Node.createSwitchStatement(r,n,e.range(t,e.pos));return e.skip(o.Token.SEMICOLON),a}this.error(s.DiagnosticCode._0_expected,e.range(),"{")}else this.error(s.DiagnosticCode._0_expected,e.range(),")")}else this.error(s.DiagnosticCode._0_expected,e.range(),"(");return null},t.prototype.parseSwitchCase=function(e){var t,r,n=e.tokenPos;if(e.skip(o.Token.CASE)){var i=this.parseExpression(e);if(!i)return null;if(e.skip(o.Token.COLON)){for(t=new Array;e.peek()!=o.Token.CASE&&e.nextToken!=o.Token.DEFAULT&&e.nextToken!=o.Token.CLOSEBRACE;){if(!(r=this.parseStatement(e)))return null;t.push(r)}return p.Node.createSwitchCase(i,t,e.range(n,e.pos))}this.error(s.DiagnosticCode._0_expected,e.range(),":")}else if(e.skip(o.Token.DEFAULT)){if(e.skip(o.Token.COLON)){for(t=new Array;e.peek()!=o.Token.CASE&&e.nextToken!=o.Token.DEFAULT&&e.nextToken!=o.Token.CLOSEBRACE;){if(!(r=this.parseStatement(e)))return null;t.push(r)}return p.Node.createSwitchCase(null,t,e.range(n,e.pos))}this.error(s.DiagnosticCode._0_expected,e.range(),":")}else this.error(s.DiagnosticCode._case_or_default_expected,e.range());return null},t.prototype.parseThrowStatement=function(e){var t=e.tokenPos,r=this.parseExpression(e);if(!r)return null;var n=p.Node.createThrowStatement(r,e.range(t,e.pos));return e.skip(o.Token.SEMICOLON),n},t.prototype.parseTryStatement=function(e){var t,r=e.tokenPos;if(e.skip(o.Token.OPENBRACE)){for(var n=new Array;!e.skip(o.Token.CLOSEBRACE);){if(!(t=this.parseStatement(e)))return null;n.push(t)}var i=null,a=null,c=null;if(e.skip(o.Token.CATCH)){if(!e.skip(o.Token.OPENPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(),"("),null;if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;if(i=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),!e.skip(o.Token.CLOSEPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(),")"),null;if(!e.skip(o.Token.OPENBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(),"{"),null;for(a=[];!e.skip(o.Token.CLOSEBRACE);){if(!(t=this.parseStatement(e)))return null;a.push(t)}}if(e.skip(o.Token.FINALLY)){if(!e.skip(o.Token.OPENBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(),"{"),null;for(c=[];!e.skip(o.Token.CLOSEBRACE);){if(!(t=this.parseStatement(e)))return null;c.push(t)}}if(!a&&!c)return this.error(s.DiagnosticCode._0_expected,e.range(),"catch"),null;var u=p.Node.createTryStatement(n,i,a,c,e.range(r,e.pos));return e.skip(o.Token.SEMICOLON),u}return this.error(s.DiagnosticCode._0_expected,e.range(),"{"),null},t.prototype.parseTypeDeclaration=function(e,t,r,n){if(e.skip(o.Token.IDENTIFIER)){var i=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),c=null;if(e.skip(o.Token.LESSTHAN)){if(!(c=this.parseTypeParameters(e)))return null;t|=a.CommonFlags.GENERIC}if(e.skip(o.Token.EQUALS)){var u=this.parseType(e);if(!u)return null;var l=p.Node.createTypeDeclaration(i,c,u,r,t,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),l}this.error(s.DiagnosticCode._0_expected,e.range(),"=")}else this.error(s.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseVoidStatement=function(e){var t=e.tokenPos,r=this.parseExpression(e,20);if(!r)return null;var n=p.Node.createVoidStatement(r,e.range(t,e.pos));return e.skip(o.Token.SEMICOLON),n},t.prototype.parseWhileStatement=function(e){var t=e.tokenPos;if(e.skip(o.Token.OPENPAREN)){var r=this.parseExpression(e);if(!r)return null;if(e.skip(o.Token.CLOSEPAREN)){var n=this.parseStatement(e);if(!n)return null;var i=p.Node.createWhileStatement(r,n,e.range(t,e.pos));return e.skip(o.Token.SEMICOLON),i}this.error(s.DiagnosticCode._0_expected,e.range(),")")}else this.error(s.DiagnosticCode._0_expected,e.range(),"(");return null},t.prototype.parseExpressionStart=function(e){var t=e.next(!0),r=e.tokenPos,n=null;if(t==o.Token.NULL)return p.Node.createNullExpression(e.range());if(t==o.Token.TRUE)return p.Node.createTrueExpression(e.range());if(t==o.Token.FALSE)return p.Node.createFalseExpression(e.range());var i=function(e){switch(e){case o.Token.DOT_DOT_DOT:return 1;case o.Token.YIELD:return 2;case o.Token.EXCLAMATION:case o.Token.TILDE:case o.Token.PLUS:case o.Token.MINUS:case o.Token.PLUS_PLUS:case o.Token.MINUS_MINUS:case o.Token.TYPEOF:case o.Token.VOID:case o.Token.DELETE:return 16;case o.Token.NEW:return 19;default:return-1}}(t);if(-1!=i){var a=void 0;return t==o.Token.NEW?(a=this.parseExpression(e,18))?a.kind==p.NodeKind.CALL?p.Node.createNewExpression(a.expression,a.typeArguments,a.arguments,e.range(r,e.pos)):(this.error(s.DiagnosticCode.Operation_not_supported,e.range()),null):null:(a=this.parseExpression(e,i))?(t!=o.Token.PLUS_PLUS&&t!=o.Token.MINUS_MINUS||a.kind!=p.NodeKind.IDENTIFIER&&a.kind!=p.NodeKind.ELEMENTACCESS&&a.kind!=p.NodeKind.PROPERTYACCESS&&this.error(s.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,a.range),p.Node.createUnaryPrefixExpression(t,a,e.range(r,e.pos))):null}switch(t){case o.Token.OPENPAREN:if(e.skip(o.Token.CLOSEPAREN))return this.parseFunctionExpressionCommon(e,p.Node.createEmptyIdentifierExpression(e.range(r)),[],!0);var c=e.mark(),u=!0;do{switch(e.next(!0)){case o.Token.DOT_DOT_DOT:return e.reset(c),this.parseFunctionExpression(e);case o.Token.IDENTIFIER:switch(e.readIdentifier(),e.next()){case o.Token.CLOSEPAREN:if(!e.skip(o.Token.EQUALS_GREATERTHAN)){u=!1;break}case o.Token.COLON:return e.reset(c),this.parseFunctionExpression(e);case o.Token.QUESTION:case o.Token.COMMA:break;default:u=!1}break;default:u=!1}}while(u);return e.reset(c),(n=this.parseExpression(e))?e.skip(o.Token.CLOSEPAREN)?p.Node.createParenthesizedExpression(n,e.range(r,e.pos)):(this.error(s.DiagnosticCode._0_expected,e.range(),")"),null):null;case o.Token.OPENBRACKET:var l=new Array;if(!e.skip(o.Token.CLOSEBRACKET)){do{if(e.peek()==o.Token.COMMA)n=null;else if(!(n=this.parseExpression(e,1)))return null;if(l.push(n),e.peek()==o.Token.CLOSEBRACKET)break}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEBRACKET))return this.error(s.DiagnosticCode._0_expected,e.range(),"]"),null}return p.Node.createArrayLiteralExpression(l,e.range(r,e.pos));case o.Token.LESSTHAN:var h=this.parseType(e);return h?e.skip(o.Token.GREATERTHAN)?(n=this.parseExpression(e,18))?p.Node.createAssertionExpression(p.AssertionKind.PREFIX,n,h,e.range(r,e.pos)):null:(this.error(s.DiagnosticCode._0_expected,e.range(),">"),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 u,l=null;(u=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(!(l=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,l,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(!(l=this.parseExpression(e,_(i)?u:u+1)))return null;if(i==o.Token.DOT)if(l.kind==p.NodeKind.IDENTIFIER)r=p.Node.createPropertyAccessExpression(r,l,e.range(a,e.pos));else{if(l.kind!=p.NodeKind.CALL)return this.error(s.DiagnosticCode.Identifier_expected,l.range),null;var E=l;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,l,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=l,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){u={error:e}}finally{try{i&&!i.done&&(l=n.return)&&l.call(n)}finally{if(u)throw u.error}}break;case s.ElementKind.NAMESPACE:e.is(s.CommonFlags.COMPILED)&&this.visitNamespace(e);break;default:assert(!1)}var c,p,u,l},e}(),u=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,u=e.members;if(u){try{for(var l=a(u),h=l.next();!h.done;h=l.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=l.return)&&n.call(l)}finally{if(r)throw r.error}}try{for(var m=a(u.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,r=!0),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 v}else{if(e<=-y)return N;if(e+1>=y)return A}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 u=Math.pow;function l(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 l(e.substring(1),t,r).neg();for(var i=c(u(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,u=0,l=0,_=0,d=0;return _+=(d+=a+(65535&e.low))>>>16,l+=(_+=n+c)>>>16,u+=(l+=r+s)>>>16,u+=t+o,p((_&=65535)<<16|(d&=65535),(u&=65535)<<16|(l&=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,u=65535&e.high,l=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*l)>>>16,d+=(y+=n*_)>>>16,y&=65535,d+=(y+=a*l)>>>16,y&=65535,d+=(y+=o*u)>>>16,d+=t*_+n*l+a*u+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(I)?N:e.eq(N)?T:(t=this.shr(1).div(e).shl(1)).eq(g)?e.isNegative()?T:I:(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:u(2,o-48),l=c(t),_=l.mul(e);_.isNegative()||_.gt(n);)_=(l=c(t-=s,this.unsigned)).mul(e);l.isZero()&&(l=T),a=a.add(l),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,r){t[r]=e,t[r+1]=e>>>8,t[r+2]=e>>>16,t[r+3]=e>>>24}Object.defineProperty(t,"__esModule",{value:!0}),t.writeI32=n,t.writeI64=function(e,t,r){n(i64_low(e),t,r),n(i64_high(e),t,r+4)},t.writeF32=function(e,t,r){n(f32_as_i32(e),t,r)},t.writeF64=function(e,t,r){var i=f64_as_i64(e);n(i64_low(i),t,r),n(i64_high(i),t,r+4)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=" ",i=" ",a=" ";t.indent=function(e,t){for(;t>=4;)e.push(a),t-=4;t>=2&&(e.push(i),t-=2),t&&e.push(n)}},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=47;function i(e){for(var t,r=0,i=e.length;r+10||i=0;)if(e.charCodeAt(a)==n){r-a==3&&46==e.charCodeAt(a+1)&&46==e.charCodeAt(a+2)||(e=t?e.substring(0,a):e.substring(0,a)+e.substring(r+3),i-=r+3-a,r=a-1);break}if(a<0&&r>0&&(2!=r||46!=e.charCodeAt(0)||46!=e.charCodeAt(1))){i=(e=e.substring(r+4)).length;continue}}}r++}return i>0?e:"."}function a(e){for(var t=e.length;--t>0;)if(e.charCodeAt(t)==n)return e.substring(0,t);return"."}t.normalizePath=i,t.resolvePath=function(e,t){return e.startsWith("std/")?e:i(a(t)+String.fromCharCode(n)+e)},t.dirname=a},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),function(e){e[e.NULL=0]="NULL",e[e.LINEFEED=10]="LINEFEED",e[e.CARRIAGERETURN=13]="CARRIAGERETURN",e[e.LINESEPARATOR=8232]="LINESEPARATOR",e[e.PARAGRAPHSEPARATOR=8233]="PARAGRAPHSEPARATOR",e[e.NEXTLINE=133]="NEXTLINE",e[e.SPACE=32]="SPACE",e[e.NONBREAKINGSPACE=160]="NONBREAKINGSPACE",e[e.ENQUAD=8192]="ENQUAD",e[e.EMQUAD=8193]="EMQUAD",e[e.ENSPACE=8194]="ENSPACE",e[e.EMSPACE=8195]="EMSPACE",e[e.THREEPEREMSPACE=8196]="THREEPEREMSPACE",e[e.FOURPEREMSPACE=8197]="FOURPEREMSPACE",e[e.SIXPEREMSPACE=8198]="SIXPEREMSPACE",e[e.FIGURESPACE=8199]="FIGURESPACE",e[e.PUNCTUATIONSPACE=8200]="PUNCTUATIONSPACE",e[e.THINSPACE=8201]="THINSPACE",e[e.HAIRSPACE=8202]="HAIRSPACE",e[e.ZEROWIDTHSPACE=8203]="ZEROWIDTHSPACE",e[e.NARROWNOBREAKSPACE=8239]="NARROWNOBREAKSPACE",e[e.IDEOGRAPHICSPACE=12288]="IDEOGRAPHICSPACE",e[e.MATHEMATICALSPACE=8287]="MATHEMATICALSPACE",e[e.OGHAM=5760]="OGHAM",e[e._=95]="_",e[e._0=48]="_0",e[e._1=49]="_1",e[e._2=50]="_2",e[e._3=51]="_3",e[e._4=52]="_4",e[e._5=53]="_5",e[e._6=54]="_6",e[e._7=55]="_7",e[e._8=56]="_8",e[e._9=57]="_9",e[e.a=97]="a",e[e.b=98]="b",e[e.c=99]="c",e[e.d=100]="d",e[e.e=101]="e",e[e.f=102]="f",e[e.g=103]="g",e[e.h=104]="h",e[e.i=105]="i",e[e.j=106]="j",e[e.k=107]="k",e[e.l=108]="l",e[e.m=109]="m",e[e.n=110]="n",e[e.o=111]="o",e[e.p=112]="p",e[e.q=113]="q",e[e.r=114]="r",e[e.s=115]="s",e[e.t=116]="t",e[e.u=117]="u",e[e.v=118]="v",e[e.w=119]="w",e[e.x=120]="x",e[e.y=121]="y",e[e.z=122]="z",e[e.A=65]="A",e[e.B=66]="B",e[e.C=67]="C",e[e.D=68]="D",e[e.E=69]="E",e[e.F=70]="F",e[e.G=71]="G",e[e.H=72]="H",e[e.I=73]="I",e[e.J=74]="J",e[e.K=75]="K",e[e.L=76]="L",e[e.M=77]="M",e[e.N=78]="N",e[e.O=79]="O",e[e.P=80]="P",e[e.Q=81]="Q",e[e.R=82]="R",e[e.S=83]="S",e[e.T=84]="T",e[e.U=85]="U",e[e.V=86]="V",e[e.W=87]="W",e[e.X=88]="X",e[e.Y=89]="Y",e[e.Z=90]="Z",e[e.AMPERSAND=38]="AMPERSAND",e[e.ASTERISK=42]="ASTERISK",e[e.AT=64]="AT",e[e.BACKSLASH=92]="BACKSLASH",e[e.BACKTICK=96]="BACKTICK",e[e.BAR=124]="BAR",e[e.CARET=94]="CARET",e[e.CLOSEBRACE=125]="CLOSEBRACE",e[e.CLOSEBRACKET=93]="CLOSEBRACKET",e[e.CLOSEPAREN=41]="CLOSEPAREN",e[e.COLON=58]="COLON",e[e.COMMA=44]="COMMA",e[e.DOLLAR=36]="DOLLAR",e[e.DOT=46]="DOT",e[e.DOUBLEQUOTE=34]="DOUBLEQUOTE",e[e.EQUALS=61]="EQUALS",e[e.EXCLAMATION=33]="EXCLAMATION",e[e.GREATERTHAN=62]="GREATERTHAN",e[e.HASH=35]="HASH",e[e.LESSTHAN=60]="LESSTHAN",e[e.MINUS=45]="MINUS",e[e.OPENBRACE=123]="OPENBRACE",e[e.OPENBRACKET=91]="OPENBRACKET",e[e.OPENPAREN=40]="OPENPAREN",e[e.PERCENT=37]="PERCENT",e[e.PLUS=43]="PLUS",e[e.QUESTION=63]="QUESTION",e[e.SEMICOLON=59]="SEMICOLON",e[e.SINGLEQUOTE=39]="SINGLEQUOTE",e[e.SLASH=47]="SLASH",e[e.TILDE=126]="TILDE",e[e.BACKSPACE=8]="BACKSPACE",e[e.FORMFEED=12]="FORMFEED",e[e.BYTEORDERMARK=65279]="BYTEORDERMARK",e[e.TAB=9]="TAB",e[e.VERTICALTAB=11]="VERTICALTAB"}(t.CharCode||(t.CharCode={})),t.isLineBreak=function(e){switch(e){case 10:case 13:case 8232:case 8233:return!0;default:return!1}},t.isWhiteSpace=function(e){switch(e){case 32:case 9:case 11:case 12:case 160:case 133:case 5760:case 8239:case 8287:case 12288:case 65279:return!0;default:return e>=8192&&e<=8203}},t.isDecimalDigit=function(e){return e>=48&&e<=57},t.isOctalDigit=function(e){return e>=48&&e<=55},t.isIdentifierStart=function(e){return e>=65&&e<=90||e>=97&&e<=122||36==e||95==e||e>127&&!((t=e)<0||t>65535)&&a(t,n);var t},t.isKeywordCharacter=function(e){return e>=97&&e<=122},t.isIdentifierPart=function(e){return e>=65&&e<=90||e>=97&&e<=122||e>=48&&e<=57||36==e||95==e||e>127&&!((t=e)<0||t>65535)&&a(t,i);var t};var n=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,880,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1162,1319,1329,1366,1369,1369,1377,1415,1488,1514,1520,1522,1568,1610,1646,1647,1649,1747,1749,1749,1765,1766,1774,1775,1786,1788,1791,1791,1808,1808,1810,1839,1869,1957,1969,1969,1994,2026,2036,2037,2042,2042,2048,2069,2074,2074,2084,2084,2088,2088,2112,2136,2208,2208,2210,2220,2308,2361,2365,2365,2384,2384,2392,2401,2417,2423,2425,2431,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2493,2493,2510,2510,2524,2525,2527,2529,2544,2545,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2649,2652,2654,2654,2674,2676,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2749,2749,2768,2768,2784,2785,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2877,2877,2908,2909,2911,2913,2929,2929,2947,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3024,3024,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3133,3160,3161,3168,3169,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3261,3261,3294,3294,3296,3297,3313,3314,3333,3340,3342,3344,3346,3386,3389,3389,3406,3406,3424,3425,3450,3455,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3585,3632,3634,3635,3648,3654,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3760,3762,3763,3773,3773,3776,3780,3782,3782,3804,3807,3840,3840,3904,3911,3913,3948,3976,3980,4096,4138,4159,4159,4176,4181,4186,4189,4193,4193,4197,4198,4206,4208,4213,4225,4238,4238,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5905,5920,5937,5952,5969,5984,5996,5998,6e3,6016,6067,6103,6103,6108,6108,6176,6263,6272,6312,6314,6314,6320,6389,6400,6428,6480,6509,6512,6516,6528,6571,6593,6599,6656,6678,6688,6740,6823,6823,6917,6963,6981,6987,7043,7072,7086,7087,7098,7141,7168,7203,7245,7247,7258,7293,7401,7404,7406,7409,7413,7414,7424,7615,7680,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8305,8305,8319,8319,8336,8348,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11502,11506,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11648,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11823,11823,12293,12295,12321,12329,12337,12341,12344,12348,12353,12438,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42527,42538,42539,42560,42606,42623,42647,42656,42735,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43009,43011,43013,43015,43018,43020,43042,43072,43123,43138,43187,43250,43255,43259,43259,43274,43301,43312,43334,43360,43388,43396,43442,43471,43471,43520,43560,43584,43586,43588,43595,43616,43638,43642,43642,43648,43695,43697,43697,43701,43702,43705,43709,43712,43712,43714,43714,43739,43741,43744,43754,43762,43764,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44002,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64285,64287,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65136,65140,65142,65276,65313,65338,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500],i=[170,170,181,181,186,186,192,214,216,246,248,705,710,721,736,740,748,748,750,750,768,884,886,887,890,893,902,902,904,906,908,908,910,929,931,1013,1015,1153,1155,1159,1162,1319,1329,1366,1369,1369,1377,1415,1425,1469,1471,1471,1473,1474,1476,1477,1479,1479,1488,1514,1520,1522,1552,1562,1568,1641,1646,1747,1749,1756,1759,1768,1770,1788,1791,1791,1808,1866,1869,1969,1984,2037,2042,2042,2048,2093,2112,2139,2208,2208,2210,2220,2276,2302,2304,2403,2406,2415,2417,2423,2425,2431,2433,2435,2437,2444,2447,2448,2451,2472,2474,2480,2482,2482,2486,2489,2492,2500,2503,2504,2507,2510,2519,2519,2524,2525,2527,2531,2534,2545,2561,2563,2565,2570,2575,2576,2579,2600,2602,2608,2610,2611,2613,2614,2616,2617,2620,2620,2622,2626,2631,2632,2635,2637,2641,2641,2649,2652,2654,2654,2662,2677,2689,2691,2693,2701,2703,2705,2707,2728,2730,2736,2738,2739,2741,2745,2748,2757,2759,2761,2763,2765,2768,2768,2784,2787,2790,2799,2817,2819,2821,2828,2831,2832,2835,2856,2858,2864,2866,2867,2869,2873,2876,2884,2887,2888,2891,2893,2902,2903,2908,2909,2911,2915,2918,2927,2929,2929,2946,2947,2949,2954,2958,2960,2962,2965,2969,2970,2972,2972,2974,2975,2979,2980,2984,2986,2990,3001,3006,3010,3014,3016,3018,3021,3024,3024,3031,3031,3046,3055,3073,3075,3077,3084,3086,3088,3090,3112,3114,3123,3125,3129,3133,3140,3142,3144,3146,3149,3157,3158,3160,3161,3168,3171,3174,3183,3202,3203,3205,3212,3214,3216,3218,3240,3242,3251,3253,3257,3260,3268,3270,3272,3274,3277,3285,3286,3294,3294,3296,3299,3302,3311,3313,3314,3330,3331,3333,3340,3342,3344,3346,3386,3389,3396,3398,3400,3402,3406,3415,3415,3424,3427,3430,3439,3450,3455,3458,3459,3461,3478,3482,3505,3507,3515,3517,3517,3520,3526,3530,3530,3535,3540,3542,3542,3544,3551,3570,3571,3585,3642,3648,3662,3664,3673,3713,3714,3716,3716,3719,3720,3722,3722,3725,3725,3732,3735,3737,3743,3745,3747,3749,3749,3751,3751,3754,3755,3757,3769,3771,3773,3776,3780,3782,3782,3784,3789,3792,3801,3804,3807,3840,3840,3864,3865,3872,3881,3893,3893,3895,3895,3897,3897,3902,3911,3913,3948,3953,3972,3974,3991,3993,4028,4038,4038,4096,4169,4176,4253,4256,4293,4295,4295,4301,4301,4304,4346,4348,4680,4682,4685,4688,4694,4696,4696,4698,4701,4704,4744,4746,4749,4752,4784,4786,4789,4792,4798,4800,4800,4802,4805,4808,4822,4824,4880,4882,4885,4888,4954,4957,4959,4992,5007,5024,5108,5121,5740,5743,5759,5761,5786,5792,5866,5870,5872,5888,5900,5902,5908,5920,5940,5952,5971,5984,5996,5998,6e3,6002,6003,6016,6099,6103,6103,6108,6109,6112,6121,6155,6157,6160,6169,6176,6263,6272,6314,6320,6389,6400,6428,6432,6443,6448,6459,6470,6509,6512,6516,6528,6571,6576,6601,6608,6617,6656,6683,6688,6750,6752,6780,6783,6793,6800,6809,6823,6823,6912,6987,6992,7001,7019,7027,7040,7155,7168,7223,7232,7241,7245,7293,7376,7378,7380,7414,7424,7654,7676,7957,7960,7965,7968,8005,8008,8013,8016,8023,8025,8025,8027,8027,8029,8029,8031,8061,8064,8116,8118,8124,8126,8126,8130,8132,8134,8140,8144,8147,8150,8155,8160,8172,8178,8180,8182,8188,8204,8205,8255,8256,8276,8276,8305,8305,8319,8319,8336,8348,8400,8412,8417,8417,8421,8432,8450,8450,8455,8455,8458,8467,8469,8469,8473,8477,8484,8484,8486,8486,8488,8488,8490,8493,8495,8505,8508,8511,8517,8521,8526,8526,8544,8584,11264,11310,11312,11358,11360,11492,11499,11507,11520,11557,11559,11559,11565,11565,11568,11623,11631,11631,11647,11670,11680,11686,11688,11694,11696,11702,11704,11710,11712,11718,11720,11726,11728,11734,11736,11742,11744,11775,11823,11823,12293,12295,12321,12335,12337,12341,12344,12348,12353,12438,12441,12442,12445,12447,12449,12538,12540,12543,12549,12589,12593,12686,12704,12730,12784,12799,13312,19893,19968,40908,40960,42124,42192,42237,42240,42508,42512,42539,42560,42607,42612,42621,42623,42647,42655,42737,42775,42783,42786,42888,42891,42894,42896,42899,42912,42922,43e3,43047,43072,43123,43136,43204,43216,43225,43232,43255,43259,43259,43264,43309,43312,43347,43360,43388,43392,43456,43471,43481,43520,43574,43584,43597,43600,43609,43616,43638,43642,43643,43648,43714,43739,43741,43744,43759,43762,43766,43777,43782,43785,43790,43793,43798,43808,43814,43816,43822,43968,44010,44012,44013,44016,44025,44032,55203,55216,55238,55243,55291,63744,64109,64112,64217,64256,64262,64275,64279,64285,64296,64298,64310,64312,64316,64318,64318,64320,64321,64323,64324,64326,64433,64467,64829,64848,64911,64914,64967,65008,65019,65024,65039,65056,65062,65075,65076,65101,65103,65136,65140,65142,65276,65296,65305,65313,65338,65343,65343,65345,65370,65382,65470,65474,65479,65482,65487,65490,65495,65498,65500];function a(e,t){if(e2?(r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r?r.length.toString(10):"0"),u.length<1?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,_.range,"1",u.length.toString(10)):e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"2",u.length.toString(10)),E.createUnreachable()):r&&1==r.length?(d=e.compileExpression(u[0],e.options.usizeType),(O=2==u.length?p(e,u[1]):0)<0?E.createUnreachable():(e.currentType=r[0],E.createLoad(r[0].byteSize,r[0].is(5),d,r[0].is(4)&&l.is(4)&&l.size>r[0].size?(e.currentType=l).toNativeType():(e.currentType=r[0]).toNativeType(),O))):(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r?r.length.toString(10):"0"),E.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,_.range,"1",r?r.length.toString(10):"0"),u.length<2?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,_.range,"2",u.length.toString(10)):e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"3",u.length.toString(10)),E.createUnreachable()):r&&1==r.length?(d=e.compileExpression(u[0],e.options.usizeType),y=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?(y=e.convertExpression(y,e.currentType,r[0],1,u[1]),T=r[0]):T=e.currentType,(O=3==u.length?p(e,u[2]):0)<0?E.createUnreachable():(e.currentType=o.Type.void,E.createStore(r[0].byteSize,d,y,T.toNativeType(),O))):(e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r?r.length.toString(10):"0"),E.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,_.range,"1",r?r.length.toString(10):"0"),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"0",u.length.toString(10)),E.createUnreachable();r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r?r.length.toString(10):"0");var C=r[0].byteSize;return e.options.isWasm64?l.is(4)&&l.size<=32?(e.currentType=o.Type.u32,g=E.createI32(C)):g=E.createI64(C,0):l.is(4)&&64==l.size?(e.currentType=o.Type.u64,g=E.createI64(C,0)):g=E.createI32(C),g;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,_.range,"1",r?r.length.toString(10):"0"),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),E.createUnreachable();if(!r||1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r?r.length.toString(10):"0"),E.createUnreachable();var S;if(!(S=r[0].classReference))return e.error(i.DiagnosticCode.Operation_not_supported,_.range),E.createUnreachable();var O=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),E.createUnreachable();var b=u[0].value,L=S.members?S.members.get(b):null;if(!L||L.kind!=c.ElementKind.FIELD)return e.error(i.DiagnosticCode.Type_0_has_no_property_1,u[0].range,S.internalName,b),E.createUnreachable();O=L.memoryOffset}else O=S.currentMemoryOffset;return e.options.isWasm64?l.is(4)&&l.size<=32?(e.currentType=o.Type.u32,E.createI32(O)):E.createI64(O):l.is(4)&&64==l.size?(e.currentType=o.Type.u64,E.createI64(O)):E.createI32(O);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,_.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"3",u.length.toString(10)),E.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,_.range,"1",r.length.toString(10)),E.createUnreachable();d=e.compileExpression(u[0],r[0])}else d=e.compileExpression(u[0],o.Type.i32,0);switch(T=e.currentType,y=e.compileExpression(u[1],T),m=e.compileExpression(u[2],o.Type.bool),e.currentType=T,e.currentType.kind){default:g=E.createSelect(d,y,m);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,_.range),g=E.createUnreachable()}return g;case"unreachable":return 0!=u.length&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"0",u.length.toString(10)),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),E.createUnreachable();case"current_memory":return e.currentType=o.Type.i32,0!=u.length&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"0",u.length.toString(10)),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),E.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,_.range,"0",u.length.toString(10)),d=E.createUnreachable()):d=e.compileExpression(u[0],o.Type.i32),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),E.createHost(s.HostOp.GrowMemory,null,[d]);case"move_memory":if(r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),3!=u.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"3",u.length.toString(10)),e.currentType=o.Type.void,E.createUnreachable();throw d=e.compileExpression(u[0],e.options.usizeType),y=e.compileExpression(u[1],e.options.usizeType),m=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,_.range,t.internalName),3!=u.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"3",u.length.toString(10)),e.currentType=o.Type.void,E.createUnreachable();throw d=e.compileExpression(u[0],e.options.usizeType),y=e.compileExpression(u[1],o.Type.u32),m=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,_.range),e.currentType=r[0],E.createUnreachable()):1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=r[0],E.createUnreachable()):(d=e.compileExpression(u[0],e.options.usizeType,0),e.currentType=r[0],9!=e.currentType.kind?(e.error(i.DiagnosticCode.Operation_not_supported,_.range),E.createUnreachable()):d):(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,_.range,"1",r?r.length.toString(10):"0"),E.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,_.range,"1",r.length.toString(10))),u.length<1?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,_.range,"1",u.length.toString(10)):u.length>2&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"2",u.length.toString(10)),E.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,_.range,"1",r.length.toString(10)),E.createUnreachable();d=e.compileExpression(u[0],r[0])}else d=e.compileExpressionRetainType(u[0],o.Type.i32);if(T=e.currentType,e.currentType=T.nonNullableType,e.options.noAssert)return l==o.Type.void?(e.currentType=o.Type.void,E.createNop()):d;var k=h(e,2==u.length?u[1]:null,_);if(e.currentType=T.nonNullableType,l==o.Type.void){switch(e.currentType.kind){default:g=E.createIf(E.createUnary(s.UnaryOp.EqzI32,d),k);break;case 3:case 8:g=E.createIf(E.createUnary(s.UnaryOp.EqzI64,d),k);break;case 4:case 9:g=E.createIf(E.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,d),k);break;case 11:g=E.createIf(E.createBinary(s.BinaryOp.EqF32,d,E.createF32(0)),k);break;case 12:g=E.createIf(E.createBinary(s.BinaryOp.EqF64,d,E.createF64(0)),k);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,_.range),g=k}e.currentType=o.Type.void}else switch(e.currentType.kind){default:A=e.currentFunction.getAndFreeTempLocal(o.Type.i32),g=E.createIf(E.createUnary(s.UnaryOp.EqzI32,E.createTeeLocal(A.index,d)),k,E.createGetLocal(A.index,s.NativeType.I32));break;case 3:case 8:A=e.currentFunction.getAndFreeTempLocal(o.Type.i64),g=E.createIf(E.createUnary(s.UnaryOp.EqzI64,E.createTeeLocal(A.index,d)),k,E.createGetLocal(A.index,s.NativeType.I64));break;case 4:case 9:A=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),g=E.createIf(E.createUnary(e.options.isWasm64?s.UnaryOp.EqzI64:s.UnaryOp.EqzI32,E.createTeeLocal(A.index,d)),k,E.createGetLocal(A.index,e.options.nativeSizeType));break;case 11:A=e.currentFunction.getAndFreeTempLocal(o.Type.f32),g=E.createIf(E.createBinary(s.BinaryOp.EqF32,E.createTeeLocal(A.index,d),E.createF32(0)),k,E.createGetLocal(A.index,s.NativeType.F32));break;case 12:A=e.currentFunction.getAndFreeTempLocal(o.Type.f64),g=E.createIf(E.createBinary(s.BinaryOp.EqF64,E.createTeeLocal(A.index,d),E.createF64(0)),k,E.createGetLocal(A.index,s.NativeType.F64));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,_.range),g=k}return g;case"i8":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=o.Type.i8,E.createUnreachable()):e.compileExpression(u[0],o.Type.i8,2);case"i16":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=o.Type.i16,E.createUnreachable()):e.compileExpression(u[0],o.Type.i16,2);case"i32":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=o.Type.i32,E.createUnreachable()):e.compileExpression(u[0],o.Type.i32,2);case"i64":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=o.Type.i64,E.createUnreachable()):e.compileExpression(u[0],o.Type.i64,2);case"isize":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=e.options.isWasm64?o.Type.isize64:o.Type.isize32,E.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,_.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=o.Type.u8,E.createUnreachable()):e.compileExpression(u[0],o.Type.u8,2);case"u16":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=o.Type.u16,E.createUnreachable()):e.compileExpression(u[0],o.Type.u16,2);case"u32":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=o.Type.u32,E.createUnreachable()):e.compileExpression(u[0],o.Type.u32,2);case"u64":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=o.Type.u64,E.createUnreachable()):e.compileExpression(u[0],o.Type.u64,2);case"usize":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=e.options.usizeType,E.createUnreachable()):e.compileExpression(u[0],e.options.usizeType,2);case"bool":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=o.Type.bool,E.createUnreachable()):e.compileExpression(u[0],o.Type.bool,2);case"f32":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=o.Type.f32,E.createUnreachable()):e.compileExpression(u[0],o.Type.f32,2);case"f64":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,_.range,t.internalName),1!=u.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,_.range,"1",u.length.toString(10)),e.currentType=o.Type.f64,E.createUnreachable()):e.compileExpression(u[0],o.Type.f64,2)}return e.error(i.DiagnosticCode.Operation_not_supported,_.range),E.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 l="abort";function h(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(l);if(!p||p.kind!=c.ElementKind.FUNCTION_PROTOTYPE)return i.createUnreachable();var u=p.resolve();if(!u||!e.compileFunction(u))return i.createUnreachable();var h=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(u.internalName,[h,_,i.createI32(r.range.line),i.createI32(r.range.column)],s.NativeType.None),i.createUnreachable()])}t.compileAbort=h},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,r){(function(e){var t="undefined"!=typeof window&&window||void 0!==e&&e||self,r=new Uint8Array(0),n=0;t.allocate_memory=function(e){if(!(e>>>=0))return 0;if(n+e>r.length){var t=r;(r=new Uint8Array(Math.max(65536,r.length+e,2*r.length))).set(t)}var i=n;return 7&(n+=e)&&(n=1+(7|n)),i},t.free_memory=function(e){},t.move_memory=function(e,t,n){r.copyWithin(e,t,t+n)},t.store=function(e,t,n){"number"==typeof n&&(e+=n),r[e]=t},t.load=function(e){return"number"==typeof off&&(e+=off),r[e]}}).call(this,r(5))},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,r(24)}).call(this,r(5))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(25),r(23),r(16),r(14)},function(e,t,r){r(26),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 9d0167ed..4204f413 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.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","LIBRARY_SUBST","LIBRARY_PREFIX","QueuedExport","QueuedImport","TypeAlias","noTypesYet","Map","Program","_super","diagnostics","_this","diagnosticsOffset","elementsLookup","typesLookup","typeAliases","fileLevelExports","moduleLevelExports","sources","__extends","initialize","options","Type","i8","i16","i32","i64","isizeType","u8","u16","u32","u64","usizeType","bool","f32","f64","void","queuedExports","queuedImports","Array","queuedDerivedClasses","k","length","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","derivedDeclaration","derivedType","assert","extendsType","resolved","resolveIdentifier","ElementKind","CLASS_PROTOTYPE","A_class_may_only_extend_another_class","basePrototype","checkInternalDecorators","parentNode","is","CommonFlags","GLOBAL","source","isLibrary","SOURCE","simpleName","has","Duplicate_identifier_0","BUILTIN","namespace","fileLevelInternalName","ClassPrototype","implementsTypes","numImplementsTypes","UNMANAGED","Structs_cannot_implement_interfaces","Range","join","Operation_not_supported","push","members","MODULE_EXPORT","Export_declaration_conflicts_with_exported_declaration_of_0","isEntry","memberDeclarations","memberDeclaration","FIELDDECLARATION","initializeField","METHODDECLARATION","isAny","GET","SET","initializeAccessor","initializeMethod","Error","programLevelInternalName","instance","resolve","type","classPrototype","STATIC","staticField","Global","instanceMembers","instanceField","FieldPrototype","CONSTRUCTOR","FunctionPrototype","constructorPrototype","Multiple_constructor_implementations_are_not_allowed","checkOperators","decorators","decorator","decoratorKind","DecoratorKind","OPERATOR","numArgs","arguments","firstArg","LITERAL","literalKind","LiteralKind","STRING","fnIndexedGet","fnIndexedSet","fnConcat","fnEquals","String_literal_expected","Expected_0_arguments_but_got_1","toString","CUSTOM","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","queuedExtendingClasses","parentNamespace","Namespace","existingExport","Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local","alias","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","resolveUsingTypeArguments","typeArguments","paramTypes","paramType","instanceKey","typesToString","placeholderType","resolveTypeArguments","typeArgumentNodes","alternativeReportNode","parameterCount","argumentCount","Expected_0_type_arguments_but_got_1","atEnd","contextualFunction","contextualEnum","ENUMVALUE","resolvedElement","ResolvedElement","flow","getScopedLocal","resolvePropertyAccess","propertyAccess","targetExpression","expression","resolveExpression","targetType","target","propertyName","LOCAL","FIELD","classReference","Property_0_does_not_exist_on_type_1","CLASS","withTarget","base","resolveElementAccess","elementAccess","indexedGetName","indexedGet","FUNCTION_PROTOTYPE","Index_signature_is_missing_in_type_0","PARENTHESIZED","ASSERTION","toType","classType","BINARY","THIS","memberOf","_this_cannot_be_referenced_in_current_location","SUPER","_super_can_only_be_referenced_in_a_derived_class","IDENTIFIER","PROPERTYACCESS","ELEMENTACCESS","CALL","signatureReference","functionTarget","cachedFunctionTarget","FunctionTarget","DiagnosticEmitter","Element","program","flags","NONE","flag","NAMESPACE","ENUM","constantValue","enum","ConstantValueKind","VariableLikeElement","apply","constantValueKind","withConstantIntegerValue","lo","hi","constantIntegerValue","i64_new","CONST","INLINED","withConstantFloatValue","constantFloatValue","Parameter","initializer","Local","index","instances","classTypeArguments","functionTypeArguments","isInstance","INSTANCE","inheritedTypeArguments","inheritedTypeArguments_1","inheritedTypeArguments_1_1","inheritedName","inheritedType","classTypeParameters","numClassTypeParameters","numFunctionTypeArguments","signatureNode","functionTypeParameters","classInstance","signatureParameters","signatureParameterCount","parameterDeclaration","Function","resolvePartial","partialPrototype","reportNode","resolvedTypeArguments","GENERIC","resolveBuiltinTypeArguments","resolvedType","FUNCTION","locals","additionalLocals","breakContext","debugLocations","ref","functionTableIndex","trampoline","nextBreakId","breakStack","tempI32s","tempI64s","tempF32s","tempF64s","DECLARE","localIndex","contextualTypeArguments_1","contextualTypeArguments_1_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_2","inheritedTypeArguments_2_1","baseClass","baseClassType","SEALED","Class_0_is_sealed_and_cannot_be_extended","Structs_cannot_extend_classes_and_vice_versa","Class","currentMemoryOffset","_c","_d","inheritedMember","partialConstructor","constructorInstance","_f","_g","fieldDeclaration","fieldType","fieldInstance","byteSize","methodPrototype","instanceProperty","partialGetterPrototype","partialSetterPrototype","asClass","_b","baseType","isAssignableTo","current","INTERFACE_PROTOTYPE","Interface","INTERFACE","FlowFlags","scopedLocals","currentFunction","parentFlow","continueLabel","breakLabel","unset","enterBranchOrScope","branch","leaveBranchOrScope","scopedLocal","addScopedLocal","__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","normalizedPath","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","str","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","OFFSET","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","elementExpression","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","TYPE","TYPEPARAMETER","PARAMETER","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","FOR","IF","IMPORTDECLARATION","RETURN","SWITCHCASE","SWITCH","THROW","TRY","VARIABLEDECLARATION","VOID","WHILE","getFirstDecorator","asGlobal","hasDecorator","g","eval","e","window","tokenFomKeyword","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","INVALID","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","parseFloat","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","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","startFunctionBody","currentEnum","currentType","memorySegments","stringSegments","functionTable","files","max","compile","startFunctionPrototype","startFunctionInstance","startFunction","compileSource","funcRef","typeRef","ensureFunctionType","i64_align","isWasm64","pages","i64_shr_u","functionTableSize","entries","compileSourceByPath","normalizedPathWithoutExtension","File_0_not_found","isGeneric","compileClassDeclaration","compileEnumDeclaration","compileFunctionDeclaration","compileNamespaceDeclaration","variableInit","compileVariableStatement","compileExportStatement","previousFunction","compileStatement","compileGlobalDeclaration","compileGlobal","global","COMPILED","AMBIENT","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","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","isKnownGlobal","numDeclarations","initializers","init","_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","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","operatorName","compileOperatorOverload","EqI64","EqF32","EqF64","NeI32","NeI64","NeF32","NeF64","compileAssignment","AddI64","AddF32","AddF64","SubI32","SubI64","SubF32","SubF64","MulI32","MulI64","MulF32","MulF64","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","operatorPrototype","operatorInstance","makeCallDirect","valueExpression","elementType","Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property","resolvedIndexedSet","valueExpr","valueWithCorrectType","tee","isInstanceTarget","targetExpr","setterInstance","thisArg","getterInstance","nativeReturnType","setElementName","setElement","elementExpr","tempLocalTarget","tempLocalElement","Index_signature_in_type_0_only_permits_reading","indexArg","compileCall","compileCallDirect","Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures","compileCallIndirect","checkCallSignature","numArguments","hasThis","minimum","Expected_at_least_0_arguments_but_got_1","argumentExpressions","numArgumentsInclThis","original","originalSignature","originalName","originalParameterTypes","originalParameterDeclarations","commonReturnType","commonThisType","minArguments","minOperands","maxArguments","maxOperands","numOptional","forwardedOperands","operandIndex","trampolineParameterTypes","trampolineSignature","trampolineName","numOperands","makeCallIndirect","numExpressions","exprs","retainConstantType","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_i16","i64_is_i32","i64_is_u8","i64_is_u16","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","arrayPrototype","arrayType","memorySize","elementSize","Int32Array","Float32Array","Float64Array","usizeTypeSize","headerSize","writeI64","writeI32","writeF32","writeF64","Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature","makeAllocate","ifThenExpr","ifElseExpr","ifThenAllocates","ifElseAllocates","nativeOne","setValue","getValue","NegF32","NegF64","makeIsFalseish","EqzI32","EqzI64","compiler","compileAllocate","field","builtinsFile","Parser","backlog","seenlog","tryParseSignatureIsSignature","parseFile","indexOf","tn","parseTopLevelStatement","startPos","parseDecorator","exportStart","exportEnd","contextIsAmbient","A_declare_modifier_cannot_be_used_in_an_already_ambient_context","first","parseEnum","parseVariable","parseFunction","parseClass","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","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","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","skipStatement","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","isInterface","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","Unreachable","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","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","valueI64","indentX1","indentX2","indentX4","separator","ipos","dirname","origin","CharCode","lookupInUnicodeMap","unicodeIdentifierStart","unicodeIdentifierPart","map","mid","evaluateConstantOffset","NaN","Infinity","Type_0_is_not_generic","stringPrototype","stringInstance","tempLocal0","tempLocal1","fieldName","Type_0_has_no_property_1","abort","compileAbort","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"],"mappings":"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AM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAC1C,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAEtCC,GACJ,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IAAK,IACtE,IAAK,IAAK,IAAK,IAAK,IACpB,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,IAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KACxB,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,KAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MACtE,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,MAAO,OAG1D,SAAAF,EAA4BltD,EAAWqtD,GACrC,GAAIrtD,EAAOqtD,EAAI,GAAI,OAAO,EAM1B,IAJA,IAEIC,EAFA92D,EAAK,EACLC,EAAK42D,EAAIxoE,OAGN2R,EAAK,EAAIC,GAAI,CAGlB,GAFA62D,EAAM92D,GAAMC,EAAKD,GAAM,EAEnB62D,EADJC,GAAOA,EAAM,IACGttD,GAAQA,GAAQqtD,EAAIC,EAAM,GACxC,OAAO,EAELttD,EAAOqtD,EAAIC,GACb72D,EAAK62D,EAEL92D,EAAK82D,EAAM,EAGf,OAAO,kFCvWT,IAAA7rD,EAAA1hB,EAAA,GAOA2B,EAAA3B,EAAA,GAIA6B,EAAA7B,EAAA,GASA4B,EAAA5B,EAAA,GAMA8B,EAAA9B,EAAA,GASAs+B,EAAAt+B,EAAA,GAg6EA,SAAAwtE,EAAgCpc,EAAoB99C,GAClD,IAAIob,EACAxtB,EA6BJ,OA5BIkwD,EAAS3tD,QAAQy3C,UACnBxsB,EAAO0iC,EAASrN,qBAAqBzwC,EAAY1R,EAAA8B,KAAK20C,UAEpDte,yBAAyBrL,IAAS5sB,EAAA2f,aAAauY,OAC/CC,2BAA2BvL,IAAS5sB,EAAA6Y,WAAWE,KACR,GAAvCuf,8BAA8B1L,KAC7BxtB,EAAQi5B,6BAA6BzL,IAAS,KAE/C0iC,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfkJ,EAAWpM,OAEbhG,GAAS,KAGXwtB,EAAO0iC,EAASrN,qBAAqBzwC,EAAY1R,EAAA8B,KAAK00C,UAEpDre,yBAAyBrL,IAAS5sB,EAAA2f,aAAauY,OAC/CC,2BAA2BvL,IAAS5sB,EAAA6Y,WAAWC,MAC9C1Z,EAAQg5B,0BAA0BxL,IAAS,KAE5C0iC,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfkJ,EAAWpM,OAEbhG,GAAS,IAGNA,EAr7ET3B,EAAAwuD,mBAAA,SACEqD,EACA9U,EACA3jC,GAEA,OAAQ2jC,EAAO31C,cACb,IAAK,MACH,OAAIyqD,EAASjX,aAAev4C,EAAA8B,KAAKY,IACxB8sD,EAAS5xD,OAAO4uB,UAAUq/C,MAEjCrc,EAASjX,YAAcv4C,EAAA8B,KAAKa,IACrB6sD,EAAS5xD,OAAO8uB,UAAUm/C,MAGrC,IAAK,WACH,OAAIrc,EAASjX,aAAev4C,EAAA8B,KAAKY,IACxB8sD,EAAS5xD,OAAO4uB,UAAUs/C,MAEjCtc,EAASjX,YAAcv4C,EAAA8B,KAAKa,IACrB6sD,EAAS5xD,OAAO8uB,UAAUo/C,MAGrC,IAAK,YAEH,OADAtc,EAASjX,YAAciX,EAAS3tD,QAAQW,UACjCgtD,EAAS5xD,OAAO+vB,gBAAgB,YAAa6hC,EAASjX,YAAYz/B,gBAO7E,OAJA02C,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAENkqD,EAAS5xD,OAAOi0B,qBAIzBl0B,EAAAqsD,YAAA,SACEwF,EACA7vD,EACAwQ,EACAkd,EACAwzB,EACA9pC,GAEA,IAEIwH,EACAC,EACAC,EACArF,EALAxb,EAAS4xD,EAAS5xD,OAWtB,OAAQ+B,EAAUoF,cAIhB,IAAK,YAQH,GAPAyqD,EAASjX,YAAcv4C,EAAA8B,KAAKW,KACxB0N,GACFq/C,EAAStqD,MACPnF,EAAAoF,eAAe4mE,sBACfh1D,EAAWzR,MAAO3F,EAAUoF,cAGT,GAAnBsoB,EAASnqB,OAKX,OAJAssD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAE3C/N,EAAOi0B,oBAEhB29B,EAAStN,4BAA4B70B,EAAS,GAAIrtB,EAAA8B,KAAKG,KAAK,GAC5D,IAAI2H,EAAO4lD,EAASjX,YAEpB,OADAiX,EAASjX,YAAcv4C,EAAA8B,KAAKW,KACrBmH,EAAKvC,GAAE,KAAwBuC,EAAKvC,GAAE,KACzCzJ,EAAOquB,UAAU,GACjBruB,EAAOquB,UAAU,GAEvB,IAAK,UAQH,OAPAujC,EAASjX,YAAcv4C,EAAA8B,KAAKW,KACxB0N,GACFq/C,EAAStqD,MACPnF,EAAAoF,eAAe4mE,sBACfh1D,EAAWzR,MAAO3F,EAAUoF,cAGT,GAAnBsoB,EAASnqB,QACXssD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAE3C/N,EAAOi0B,sBAEhB29B,EAAStN,4BAA4B70B,EAAS,GAAIrtB,EAAA8B,KAAKG,KAAK,GACxD2H,EAAO4lD,EAASjX,YACpBiX,EAASjX,YAAcv4C,EAAA8B,KAAKW,KACrBmH,EAAKvC,GAAE,GACVzJ,EAAOquB,UAAU,GACjBruB,EAAOquB,UAAU,IAEvB,IAAK,cAQH,OAPAujC,EAASjX,YAAcv4C,EAAA8B,KAAKW,KACxB0N,GACFq/C,EAAStqD,MACPnF,EAAAoF,eAAe4mE,sBACfh1D,EAAWzR,MAAO3F,EAAUoF,cAGT,GAAnBsoB,EAASnqB,QACXssD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAE3C/N,EAAOi0B,sBAEhB29B,EAAStN,4BAA4B70B,EAAS,GAAIrtB,EAAA8B,KAAKG,KAAK,GACxD2H,EAAO4lD,EAASjX,YACpBiX,EAASjX,YAAcv4C,EAAA8B,KAAKW,KACrBmH,EAAKvC,GAAE,KACVzJ,EAAOquB,UAAU,GACjBruB,EAAOquB,UAAU,IAEvB,IAAK,WAQH,GAPAujC,EAASjX,YAAcv4C,EAAA8B,KAAKW,KACxB0N,GACFq/C,EAAStqD,MACPnF,EAAAoF,eAAe4mE,sBACfh1D,EAAWzR,MAAO3F,EAAUoF,cAGT,GAAnBsoB,EAASnqB,OAKX,OAJAssD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAE3C/N,EAAOi0B,oBAMhB,GAJA29B,EAAStN,4BAA4B70B,EAAS,GAAIrtB,EAAA8B,KAAKG,KAAK,GACxD2H,EAAO4lD,EAASjX,YACpBiX,EAASjX,YAAcv4C,EAAA8B,KAAKW,KACxBsQ,EAAYnJ,EAAKqI,eACN,CACb,IAAI+5D,EAAkBxc,EAASx7C,QAAQ3S,eAAejC,IAAI,UAC1D,GAAI4sE,EAAiB,CACnBrlE,OAAOqlE,EAAgB1oE,MAAQo5B,EAAA31B,YAAYC,iBAC3C,IAAIilE,EAAkCD,EAAiBriE,QAAQ,MAC/D,IAAKsiE,EAAgB,OAAOruE,EAAOi0B,oBACnC,GAAI9e,EAAUoJ,eAAe8vD,GAC3B,OAAOruE,EAAOquB,UAAU,IAI9B,OAAOruB,EAAOquB,UAAU,GAE1B,IAAK,UAQH,OAPAujC,EAASjX,YAAcv4C,EAAA8B,KAAKW,KACxB0N,GACFq/C,EAAStqD,MACPnF,EAAAoF,eAAe4mE,sBACfh1D,EAAWzR,MAAO3F,EAAUoF,cAGT,GAAnBsoB,EAASnqB,QACXssD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAE3C/N,EAAOi0B,sBAEhB29B,EAAStN,4BAA4B70B,EAAS,GAAIrtB,EAAA8B,KAAKG,KAAK,GACxD2H,EAAO4lD,EAASjX,YACpBiX,EAASjX,YAAcv4C,EAAA8B,KAAKW,KAER,OADhBsQ,EAAYnJ,EAAKqI,iBAC2C,MAApCc,EAAUpT,UAAU0L,aAC5CzN,EAAOquB,UAAU,GACjBruB,EAAOquB,UAAU,IAKvB,IAAK,QAEH,GADAujC,EAASjX,YAAcv4C,EAAA8B,KAAKW,KACL,GAAnB4qB,EAASnqB,OAWX,OAVIiN,GAAyC,GAAxBA,EAAcjN,QACjCssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,KAGzD6jD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAE3C/N,EAAOi0B,oBAEhB,GAAI1hB,EAAe,CACjB,GAA4B,GAAxBA,EAAcjN,OAKhB,OAJAssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,KAEhD/N,EAAOi0B,oBAEhBtT,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIld,EAAc,SAE7DoO,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKa,IAAG,GAGzD,OAAQ6sD,EAASjX,YAAYj1C,MAC3B,QACE,IAAIu8C,EAAY2P,EAAS9yC,gBAAgBnD,oBAAoBvZ,EAAA8B,KAAKY,KAClE0W,EAAMxb,EAAOovB,aAAa9sB,EAAAglB,SAASkhC,MACjCxoD,EAAO6vB,eAAeoyB,EAAUrqC,MAAO+I,GACvC3gB,EAAO2vB,eAAesyB,EAAUrqC,MAAOtV,EAAA6Y,WAAWG,MAEpD,MAEF,QACM2mC,EAAY2P,EAAS9yC,gBAAgBnD,oBAAoBvZ,EAAA8B,KAAKa,KAClEyW,EAAMxb,EAAOovB,aAAa9sB,EAAAglB,SAASmhC,MACjCzoD,EAAO6vB,eAAeoyB,EAAUrqC,MAAO+I,GACvC3gB,EAAO2vB,eAAesyB,EAAUrqC,MAAOtV,EAAA6Y,WAAWI,MAEpD,MAEF,QACEq2C,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBACb,MAEF,QACEzY,EAAMxb,EAAOquB,UAAU,GAK3B,OADAujC,EAASjX,YAAcv4C,EAAA8B,KAAKW,KACrB2W,EAET,IAAK,WAEH,GADAo2C,EAASjX,YAAcv4C,EAAA8B,KAAKW,KACL,GAAnB4qB,EAASnqB,OAWX,OAVIiN,GAAyC,GAAxBA,EAAcjN,QACjCssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,KAGzD6jD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAE3C/N,EAAOi0B,oBAEhB,GAAI1hB,EAAe,CACjB,GAA4B,GAAxBA,EAAcjN,OAKhB,OAJAssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,KAEhD/N,EAAOi0B,oBAEhBtT,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIld,EAAc,SAE7DoO,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKa,IAAG,GAEzD,OAAQ6sD,EAASjX,YAAYj1C,MAC3B,QACMu8C,EAAY2P,EAAS9yC,gBAAgBnD,oBAAoBvZ,EAAA8B,KAAKY,KAClE0W,EAAMxb,EAAOkzB,aACXlzB,EAAOovB,aAAa9sB,EAAAglB,SAASkhC,MAC3BxoD,EAAOgvB,YAAY1sB,EAAAgiB,QAAQg6C,OACzBt+D,EAAO6vB,eAAeoyB,EAAUrqC,MAAO+I,IAEzC3gB,EAAO4uB,UAAUs/C,MAEnBluE,EAAOquB,UAAU,GACjBruB,EAAOovB,aAAa9sB,EAAAglB,SAAS8gC,MAC3BpoD,EAAO2vB,eAAesyB,EAAUrqC,MAAOtV,EAAA6Y,WAAWG,KAClDtb,EAAO2vB,eAAesyB,EAAUrqC,MAAOtV,EAAA6Y,WAAWG,OAGtD,MAEF,QACM2mC,EAAY2P,EAAS9yC,gBAAgBnD,oBAAoBvZ,EAAA8B,KAAKa,KAClEyW,EAAMxb,EAAOkzB,aACXlzB,EAAOovB,aAAa9sB,EAAAglB,SAASmhC,MAC3BzoD,EAAOgvB,YAAY1sB,EAAAgiB,QAAQy6C,OACzB/+D,EAAO6vB,eAAeoyB,EAAUrqC,MAAO+I,IAEzC3gB,EAAO8uB,UAAUo/C,MAEnBluE,EAAOquB,UAAU,GACjBruB,EAAOovB,aAAa9sB,EAAAglB,SAAS+gC,MAC3BroD,EAAO2vB,eAAesyB,EAAUrqC,MAAOtV,EAAA6Y,WAAWI,KAClDvb,EAAO2vB,eAAesyB,EAAUrqC,MAAOtV,EAAA6Y,WAAWI,OAGtD,MAEF,QACEq2C,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBACb,MAEF,QACEzY,EAAMxb,EAAOquB,UAAU,GAK3B,OADAujC,EAASjX,YAAcv4C,EAAA8B,KAAKW,KACrB2W,EAET,IAAK,MACH,GAAuB,GAAnBiU,EAASnqB,OAcX,OAbIiN,IACEA,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IACnC,GAAxBA,EAAcjN,QAChBssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,MAI3D6jD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAE3C/N,EAAOi0B,oBAEhB,GAAI1hB,EAAe,CACjB,GAA4B,GAAxBA,EAAcjN,OAMhB,OALIiN,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IAC/Dq/C,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,KAEhD/N,EAAOi0B,oBAEhBtT,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIld,EAAc,SAE7DoO,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKG,IAAG,GAEzD,OAAQutD,EAASjX,YAAYj1C,MAC3B,QACE8V,EAAMxb,EAAOgvB,YAAY1sB,EAAAgiB,QAAQ65C,OAAQx9C,GACzC,MAEF,OACE,GAAIixC,EAASjX,YAAYlxC,GAAE,KAAuB,CAChDmoD,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBACb,MAIJ,OACEzY,EAAMxb,EAAOgvB,YACX4iC,EAAS3tD,QAAQy3C,SACbp5C,EAAAgiB,QAAQs6C,OACRt8D,EAAAgiB,QAAQ65C,OACZx9C,GAEF,MAEF,OACA,OACEnF,EAAMxb,EAAOgvB,YAAY1sB,EAAAgiB,QAAQs6C,OAAQj+C,GACzC,MAEF,QACA,QACA,QACEixC,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBAIjB,OAAOzY,EAET,IAAK,MACH,GAAuB,GAAnBiU,EAASnqB,OAcX,OAbIiN,IACEA,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IACnC,GAAxBA,EAAcjN,QAChBssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,MAI3D6jD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAE3C/N,EAAOi0B,oBAEhB,GAAI1hB,EAAe,CACjB,GAA4B,GAAxBA,EAAcjN,OAMhB,OALIiN,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IAC/Dq/C,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,KAEhD/N,EAAOi0B,oBAEhBtT,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIld,EAAc,SAE7DoO,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKG,IAAG,GAEzD,OAAQutD,EAASjX,YAAYj1C,MAC3B,QACE8V,EAAMxb,EAAOgvB,YAAY1sB,EAAAgiB,QAAQ85C,OAAQz9C,GACzC,MAEF,OACE,GAAIixC,EAASjX,YAAYlxC,GAAE,KAAuB,CAChDmoD,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBACb,MAIJ,OACEzY,EAAMxb,EAAOgvB,YACX4iC,EAAS3tD,QAAQy3C,SACbp5C,EAAAgiB,QAAQu6C,OACRv8D,EAAAgiB,QAAQ85C,OACZz9C,GAEF,MAEF,OACA,OACEnF,EAAMxb,EAAOgvB,YAAY1sB,EAAAgiB,QAAQu6C,OAAQl+C,GACzC,MAEF,QACA,QACA,QACEixC,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBAIjB,OAAOzY,EAET,IAAK,SACH,GAAuB,GAAnBiU,EAASnqB,OAcX,OAbIiN,IACEA,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IACnC,GAAxBA,EAAcjN,QAChBssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,MAI3D6jD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAE3C/N,EAAOi0B,oBAEhB,GAAI1hB,EAAe,CACjB,GAA4B,GAAxBA,EAAcjN,OAMhB,OALIiN,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IAC/Dq/C,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,KAEhD/N,EAAOi0B,oBAEhBtT,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIld,EAAc,SAE7DoO,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKG,IAAG,GAEzD,OAAQutD,EAASjX,YAAYj1C,MAC3B,QACE8V,EAAMxb,EAAOgvB,YAAY1sB,EAAAgiB,QAAQ+5C,UAAW19C,GAC5C,MAEF,OACE,GAAIixC,EAASjX,YAAYlxC,GAAE,KAAuB,CAChDmoD,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBACb,MAIJ,OACEzY,EAAMxb,EAAOgvB,YACX4iC,EAAS3tD,QAAQy3C,SACbp5C,EAAAgiB,QAAQw6C,UACRx8D,EAAAgiB,QAAQ+5C,UACZ19C,GAEF,MAEF,OACA,OACEnF,EAAMxb,EAAOgvB,YAAY1sB,EAAAgiB,QAAQw6C,UAAWn+C,GAC5C,MAEF,QACA,QACA,QACEixC,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBAIjB,OAAOzY,EAET,IAAK,OACH,GAAuB,GAAnBiU,EAASnqB,OAcX,OAbIiN,IACEA,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IACnC,GAAxBA,EAAcjN,QAChBssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,MAI3D6jD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAE3C/N,EAAOi0B,oBAEhB,GAAI1hB,EAAe,CACjB,GAA4B,GAAxBA,EAAcjN,OAMhB,OALIiN,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IAC/Dq/C,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,KAEhD/N,EAAOi0B,oBAEhBtT,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIld,EAAc,SAE7DoO,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKG,IAAG,GAGzD,OADAuc,EAAOgxC,EAASzU,kBAAkB1tB,EAAS,GAAImiC,EAASjX,aAChDiX,EAASjX,YAAYj1C,MAC3B,OACA,OACA,OACA,OACA,QACE8V,EAAM0G,EAAA6iC,qBACJ/kD,EAAOovB,aAAa9sB,EAAAglB,SAASm4C,QAAS9+C,EAAMC,GAC5CgxC,EAASjX,YACT36C,GAIJ,OACA,OACEwb,EAAMxb,EAAOovB,aAAa9sB,EAAAglB,SAASm4C,QAAS9+C,EAAMC,GAClD,MAEF,OACE,GAAIgxC,EAASjX,YAAYlxC,GAAE,KAAuB,CAChDmoD,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBACb,MAIJ,OACEzY,EAAMxb,EAAOovB,aACXwiC,EAAS3tD,QAAQy3C,SACbp5C,EAAAglB,SAASq4C,QACTr9D,EAAAglB,SAASm4C,QACb9+C,EACAC,GAEF,MAEF,OACA,OACEpF,EAAMxb,EAAOovB,aAAa9sB,EAAAglB,SAASq4C,QAASh/C,EAAMC,GAClD,MAEF,QACEgxC,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBAIjB,OAAOzY,EAET,IAAK,OACH,GAAuB,GAAnBiU,EAASnqB,OAcX,OAbIiN,IACEA,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IACnC,GAAxBA,EAAcjN,QAChBssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,MAI3D6jD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAE3C/N,EAAOi0B,oBAEhB,GAAI1hB,EAAe,CACjB,GAA4B,GAAxBA,EAAcjN,OAMhB,OALIiN,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IAC/Dq/C,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,KAEhD/N,EAAOi0B,oBAEhBtT,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIld,EAAc,SAE7DoO,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKG,IAAG,GAGzD,OADAuc,EAAOgxC,EAASzU,kBAAkB1tB,EAAS,GAAImiC,EAASjX,aAChDiX,EAASjX,YAAYj1C,MAC3B,OACA,OACA,OACA,OACA,QACE8V,EAAM0G,EAAA6iC,qBACJ/kD,EAAOovB,aAAa9sB,EAAAglB,SAASo4C,QAAS/+C,EAAMC,GAC5CgxC,EAASjX,YACT36C,GAEF,MAEF,OACA,OACEwb,EAAMxb,EAAOovB,aAAa9sB,EAAAglB,SAASo4C,QAAS/+C,EAAMC,GAClD,MAEF,OACE,GAAIgxC,EAASjX,YAAYlxC,GAAE,KAAuB,CAChDmoD,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBACb,MAIJ,OACEzY,EAAMxb,EAAOovB,aACXwiC,EAAS3tD,QAAQy3C,SACbp5C,EAAAglB,SAASs4C,QACTt9D,EAAAglB,SAASo4C,QACb/+C,EACAC,GAEF,MAEF,OACA,OACEpF,EAAMxb,EAAOovB,aAAa9sB,EAAAglB,SAASs4C,QAASj/C,EAAMC,GAClD,MAEF,QACEgxC,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBAIjB,OAAOzY,EAET,IAAK,MACH,GAAuB,GAAnBiU,EAASnqB,OAcX,OAbIiN,IACEA,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IACnC,GAAxBA,EAAcjN,QAChBssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,MAI3D6jD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAE3C/N,EAAOi0B,oBAEhB,GAAI1hB,EAAe,CACjB,GAA4B,GAAxBA,EAAcjN,OAMhB,OALIiN,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IAC/Dq/C,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,KAEhD/N,EAAOi0B,oBAEhBtT,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIld,EAAc,SAE7DoO,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKa,IAAG,GAEzD,OAAQ6sD,EAASjX,YAAYj1C,MAC3B,OACA,OAGA,OACMu8C,EAAY2P,EAAS9yC,gBAAgBnD,oBAAoBvZ,EAAA8B,KAAKG,KAClEmX,EAAMxb,EAAOkzB,aACXlzB,EAAO6vB,eAAeoyB,EAAUrqC,MAAO+I,GACvC3gB,EAAOovB,aAAa9sB,EAAAglB,SAASwhC,OAC3B9oD,EAAOquB,UAAU,GACjBruB,EAAO2vB,eAAesyB,EAAUrqC,MAAOtV,EAAA6Y,WAAWC,MAEpDpb,EAAOovB,aAAa9sB,EAAAglB,SAASy/B,MAC3B/mD,EAAO2vB,eAAesyB,EAAUrqC,MAAOtV,EAAA6Y,WAAWC,KAClDpb,EAAOquB,UAAU,KAGrB,MAEF,OACM4zB,EAAY2P,EAAS9yC,gBAAgBnD,oBAAoBi2C,EAAS3tD,QAAQW,WAC9E4W,EAAMxb,EAAOkzB,aACXlzB,EAAO6vB,eAAeoyB,EAAUrqC,MAAO+I,GACvC3gB,EAAOovB,aACLwiC,EAAS3tD,QAAQy3C,SACbp5C,EAAAglB,SAASyhC,OACTzmD,EAAAglB,SAASwhC,OACb8I,EAAS3tD,QAAQW,UAAU2zC,aAAav4C,GACxCA,EAAO2vB,eAAesyB,EAAUrqC,MAAOg6C,EAAS3tD,QAAQw6C,iBAE1Dz+C,EAAOovB,aACLwiC,EAAS3tD,QAAQy3C,SACbp5C,EAAAglB,SAAS0/B,MACT1kD,EAAAglB,SAASy/B,MACb/mD,EAAO2vB,eAAesyB,EAAUrqC,MAAOg6C,EAAS3tD,QAAQw6C,gBACxDmT,EAAS3tD,QAAQW,UAAU2zC,aAAav4C,KAG5C,MAEF,OACMiiD,EAAY2P,EAAS9yC,gBAAgBnD,oBAAoBvZ,EAAA8B,KAAKI,KAClEkX,EAAMxb,EAAOkzB,aACXlzB,EAAO6vB,eAAeoyB,EAAUrqC,MAAO+I,GACvC3gB,EAAOovB,aAAa9sB,EAAAglB,SAASyhC,OAC3B/oD,EAAOwuB,UAAU,EAAG,GACpBxuB,EAAO2vB,eAAesyB,EAAUrqC,MAAOtV,EAAA6Y,WAAWE,MAEpDrb,EAAOovB,aAAa9sB,EAAAglB,SAAS0/B,MAC3BhnD,EAAO2vB,eAAesyB,EAAUrqC,MAAOtV,EAAA6Y,WAAWE,KAClDrb,EAAOwuB,UAAU,EAAG,KAGxB,MAEF,OACE,GAAIojC,EAASjX,YAAYlxC,GAAE,KAAuB,CAChDmoD,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBACb,MAIJ,OACA,OACA,OACA,OACA,QACEzY,EAAMmF,EACN,MAEF,QACEnF,EAAMxb,EAAOgvB,YAAY1sB,EAAAgiB,QAAQg6C,OAAQ39C,GACzC,MAEF,QACEnF,EAAMxb,EAAOgvB,YAAY1sB,EAAAgiB,QAAQy6C,OAAQp+C,GACzC,MAEF,QACEnF,EAAMxb,EAAOi0B,oBACb,MAEF,QACE29B,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBAIjB,OAAOzY,EAET,IAAK,MACH,GAAuB,GAAnBiU,EAASnqB,OAcX,OAbIiN,IACEA,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IACnC,GAAxBA,EAAcjN,QAChBssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,MAI3D6jD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAE3C/N,EAAOi0B,oBAEhB,GAAI1hB,EAAe,CACjB,GAA4B,GAAxBA,EAAcjN,OAMhB,OALIiN,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IAC/Dq/C,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,KAEhD/N,EAAOi0B,oBAEhBtT,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIld,EAAc,SAE7DoO,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKa,IAAG,GAGzD,OADA6b,EAAOgxC,EAASzU,kBAAkB1tB,EAAS,GAAImiC,EAASjX,aAChDiX,EAASjX,YAAYj1C,MAC3B,OACA,OACA,OACE,IAAI4oE,EAAa1c,EAAS9yC,gBAAgB9D,aAAa5Y,EAAA8B,KAAKG,KACxDkqE,EAAa3c,EAAS9yC,gBAAgBnD,oBAAoBvZ,EAAA8B,KAAKG,KACnEutD,EAAS9yC,gBAAgBpD,cAAc4yD,GACvC9yD,EAAMxb,EAAOkzB,aACXlzB,EAAO6vB,eAAey+C,EAAW12D,MAAO+I,GACxC3gB,EAAO6vB,eAAe0+C,EAAW32D,MAAOgJ,GACxC5gB,EAAOovB,aAAa9sB,EAAAglB,SAASy/B,MAC3B/mD,EAAO2vB,eAAe2+C,EAAW12D,MAAOtV,EAAA6Y,WAAWC,KACnDpb,EAAO2vB,eAAe4+C,EAAW32D,MAAOtV,EAAA6Y,WAAWC,OAGvD,MAEF,OACA,OACA,OACA,QACMkzD,EAAa1c,EAAS9yC,gBAAgB9D,aAAa5Y,EAAA8B,KAAKG,KACxDkqE,EAAa3c,EAAS9yC,gBAAgBnD,oBAAoBvZ,EAAA8B,KAAKG,KACnEutD,EAAS9yC,gBAAgBpD,cAAc4yD,GACvC9yD,EAAMxb,EAAOkzB,aACXlzB,EAAO6vB,eAAey+C,EAAW12D,MAAO+I,GACxC3gB,EAAO6vB,eAAe0+C,EAAW32D,MAAOgJ,GACxC5gB,EAAOovB,aAAa9sB,EAAAglB,SAAS2/B,MAC3BjnD,EAAO2vB,eAAe2+C,EAAW12D,MAAOtV,EAAA6Y,WAAWC,KACnDpb,EAAO2vB,eAAe4+C,EAAW32D,MAAOtV,EAAA6Y,WAAWC,OAGvD,MAEF,OACMkzD,EAAa1c,EAAS9yC,gBAAgB9D,aAAa5Y,EAAA8B,KAAKI,KACxDiqE,EAAa3c,EAAS9yC,gBAAgBnD,oBAAoBvZ,EAAA8B,KAAKI,KACnEstD,EAAS9yC,gBAAgBpD,cAAc4yD,GACvC9yD,EAAMxb,EAAOkzB,aACXlzB,EAAO6vB,eAAey+C,EAAW12D,MAAO+I,GACxC3gB,EAAO6vB,eAAe0+C,EAAW32D,MAAOgJ,GACxC5gB,EAAOovB,aAAa9sB,EAAAglB,SAAS0/B,MAC3BhnD,EAAO2vB,eAAe2+C,EAAW12D,MAAOtV,EAAA6Y,WAAWE,KACnDrb,EAAO2vB,eAAe4+C,EAAW32D,MAAOtV,EAAA6Y,WAAWE,OAGvD,MAEF,OACMizD,EAAa1c,EAAS9yC,gBAAgB9D,aAAa5Y,EAAA8B,KAAKI,KACxDiqE,EAAa3c,EAAS9yC,gBAAgBnD,oBAAoBvZ,EAAA8B,KAAKI,KACnEstD,EAAS9yC,gBAAgBpD,cAAc4yD,GACvC9yD,EAAMxb,EAAOkzB,aACXlzB,EAAO6vB,eAAey+C,EAAW12D,MAAO+I,GACxC3gB,EAAO6vB,eAAe0+C,EAAW32D,MAAOgJ,GACxC5gB,EAAOovB,aAAa9sB,EAAAglB,SAAS4/B,MAC3BlnD,EAAO2vB,eAAe2+C,EAAW12D,MAAOtV,EAAA6Y,WAAWE,KACnDrb,EAAO2vB,eAAe4+C,EAAW32D,MAAOtV,EAAA6Y,WAAWE,OAGvD,MAEF,OACMizD,EAAa1c,EAAS9yC,gBAAgB9D,aAAa42C,EAAS3tD,QAAQW,WACpE2pE,EAAa3c,EAAS9yC,gBAAgBnD,oBAAoBi2C,EAAS3tD,QAAQW,WAC/EgtD,EAAS9yC,gBAAgBpD,cAAc4yD,GACvC9yD,EAAMxb,EAAOkzB,aACXlzB,EAAO6vB,eAAey+C,EAAW12D,MAAO+I,GACxC3gB,EAAO6vB,eAAe0+C,EAAW32D,MAAOgJ,GACxC5gB,EAAOovB,aACLwiC,EAAS3tD,QAAQy3C,SACbp5C,EAAAglB,SAAS0/B,MACT1kD,EAAAglB,SAASy/B,MACb/mD,EAAO2vB,eAAe2+C,EAAW12D,MAAOg6C,EAAS3tD,QAAQw6C,gBACzDz+C,EAAO2vB,eAAe4+C,EAAW32D,MAAOg6C,EAAS3tD,QAAQw6C,kBAG7D,MAEF,OACE,GAAImT,EAASjX,YAAYlxC,GAAE,KAAuB,CAChDmoD,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBACb,MAEEq6C,EAAa1c,EAAS9yC,gBAAgB9D,aAAa42C,EAAS3tD,QAAQW,WACpE2pE,EAAa3c,EAAS9yC,gBAAgBnD,oBAAoBi2C,EAAS3tD,QAAQW,WAC/EgtD,EAAS9yC,gBAAgBpD,cAAc4yD,GACvC9yD,EAAMxb,EAAOkzB,aACXlzB,EAAO6vB,eAAey+C,EAAW12D,MAAO+I,GACxC3gB,EAAO6vB,eAAe0+C,EAAW32D,MAAOgJ,GACxC5gB,EAAOovB,aACLwiC,EAAS3tD,QAAQy3C,SACbp5C,EAAAglB,SAAS4/B,MACT5kD,EAAAglB,SAAS2/B,MACbjnD,EAAO2vB,eAAe2+C,EAAW12D,MAAOg6C,EAAS3tD,QAAQw6C,gBACzDz+C,EAAO2vB,eAAe4+C,EAAW32D,MAAOg6C,EAAS3tD,QAAQw6C,kBAG7D,MAEF,QACEjjC,EAAMxb,EAAOovB,aAAa9sB,EAAAglB,SAASy4C,OAAQp/C,EAAMC,GACjD,MAEF,QACEpF,EAAMxb,EAAOovB,aAAa9sB,EAAAglB,SAAS44C,OAAQv/C,EAAMC,GACjD,MAEF,QACEgxC,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBAIjB,OAAOzY,EAET,IAAK,MACH,GAAuB,GAAnBiU,EAASnqB,OAcX,OAbIiN,IACEA,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IACnC,GAAxBA,EAAcjN,QAChBssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,MAI3D6jD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAE3C/N,EAAOi0B,oBAEhB,GAAI1hB,EAAe,CACjB,GAA4B,GAAxBA,EAAcjN,OAMhB,OALIiN,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IAC/Dq/C,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,KAEhD/N,EAAOi0B,oBAEhBtT,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIld,EAAc,SAE7DoO,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKa,IAAG,GAGzD,OADA6b,EAAOgxC,EAASzU,kBAAkB1tB,EAAS,GAAImiC,EAASjX,aAChDiX,EAASjX,YAAYj1C,MAC3B,OACA,OACA,OACM4oE,EAAa1c,EAAS9yC,gBAAgB9D,aAAa5Y,EAAA8B,KAAKG,KACxDkqE,EAAa3c,EAAS9yC,gBAAgBnD,oBAAoBvZ,EAAA8B,KAAKG,KACnEutD,EAAS9yC,gBAAgBpD,cAAc4yD,GACvC9yD,EAAMxb,EAAOkzB,aACXlzB,EAAO6vB,eAAey+C,EAAW12D,MAAO+I,GACxC3gB,EAAO6vB,eAAe0+C,EAAW32D,MAAOgJ,GACxC5gB,EAAOovB,aAAa9sB,EAAAglB,SAASm/B,MAC3BzmD,EAAO2vB,eAAe2+C,EAAW12D,MAAOtV,EAAA6Y,WAAWC,KACnDpb,EAAO2vB,eAAe4+C,EAAW32D,MAAOtV,EAAA6Y,WAAWC,OAGvD,MAEF,OACA,OACA,OACA,QACMkzD,EAAa1c,EAAS9yC,gBAAgB9D,aAAa5Y,EAAA8B,KAAKG,KACxDkqE,EAAa3c,EAAS9yC,gBAAgBnD,oBAAoBvZ,EAAA8B,KAAKG,KACnEutD,EAAS9yC,gBAAgBpD,cAAc4yD,GACvC9yD,EAAMxb,EAAOkzB,aACXlzB,EAAO6vB,eAAey+C,EAAW12D,MAAO+I,GACxC3gB,EAAO6vB,eAAe0+C,EAAW32D,MAAOgJ,GACxC5gB,EAAOovB,aAAa9sB,EAAAglB,SAASq/B,MAC3B3mD,EAAO2vB,eAAe2+C,EAAW12D,MAAOtV,EAAA6Y,WAAWC,KACnDpb,EAAO2vB,eAAe4+C,EAAW32D,MAAOtV,EAAA6Y,WAAWC,OAGvD,MAEF,OACMkzD,EAAa1c,EAAS9yC,gBAAgB9D,aAAa5Y,EAAA8B,KAAKI,KACxDiqE,EAAa3c,EAAS9yC,gBAAgBnD,oBAAoBvZ,EAAA8B,KAAKI,KACnEstD,EAAS9yC,gBAAgBpD,cAAc4yD,GACvC9yD,EAAMxb,EAAOkzB,aACXlzB,EAAO6vB,eAAey+C,EAAW12D,MAAO+I,GACxC3gB,EAAO6vB,eAAe0+C,EAAW32D,MAAOgJ,GACxC5gB,EAAOovB,aAAa9sB,EAAAglB,SAASo/B,MAC3B1mD,EAAO2vB,eAAe2+C,EAAW12D,MAAOtV,EAAA6Y,WAAWE,KACnDrb,EAAO2vB,eAAe4+C,EAAW32D,MAAOtV,EAAA6Y,WAAWE,OAGvD,MAEF,OACMizD,EAAa1c,EAAS9yC,gBAAgB9D,aAAa5Y,EAAA8B,KAAKI,KACxDiqE,EAAa3c,EAAS9yC,gBAAgBnD,oBAAoBvZ,EAAA8B,KAAKI,KACnEstD,EAAS9yC,gBAAgBpD,cAAc4yD,GACvC9yD,EAAMxb,EAAOkzB,aACXlzB,EAAO6vB,eAAey+C,EAAW12D,MAAO+I,GACxC3gB,EAAO6vB,eAAe0+C,EAAW32D,MAAOgJ,GACxC5gB,EAAOovB,aAAa9sB,EAAAglB,SAASs/B,MAC3B5mD,EAAO2vB,eAAe2+C,EAAW12D,MAAOtV,EAAA6Y,WAAWE,KACnDrb,EAAO2vB,eAAe4+C,EAAW32D,MAAOtV,EAAA6Y,WAAWE,OAGvD,MAEF,OACMizD,EAAa1c,EAAS9yC,gBAAgB9D,aAAa42C,EAAS3tD,QAAQW,WACpE2pE,EAAa3c,EAAS9yC,gBAAgBnD,oBAAoBi2C,EAAS3tD,QAAQW,WAC/EgtD,EAAS9yC,gBAAgBpD,cAAc4yD,GACvC9yD,EAAMxb,EAAOkzB,aACXlzB,EAAO6vB,eAAey+C,EAAW12D,MAAO+I,GACxC3gB,EAAO6vB,eAAe0+C,EAAW32D,MAAOgJ,GACxC5gB,EAAOovB,aACLwiC,EAAS3tD,QAAQy3C,SACbp5C,EAAAglB,SAASo/B,MACTpkD,EAAAglB,SAASm/B,MACbzmD,EAAO2vB,eAAe2+C,EAAW12D,MAAOg6C,EAAS3tD,QAAQw6C,gBACzDz+C,EAAO2vB,eAAe4+C,EAAW32D,MAAOg6C,EAAS3tD,QAAQw6C,kBAG7D,MAEF,OACE,GAAImT,EAASjX,YAAYlxC,GAAE,KAAuB,CAChDmoD,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBACb,MAEEq6C,EAAa1c,EAAS9yC,gBAAgB9D,aAAa42C,EAAS3tD,QAAQW,WACpE2pE,EAAa3c,EAAS9yC,gBAAgBnD,oBAAoBi2C,EAAS3tD,QAAQW,WAC/EgtD,EAAS9yC,gBAAgBpD,cAAc4yD,GACvC9yD,EAAMxb,EAAOkzB,aACXlzB,EAAO6vB,eAAey+C,EAAW12D,MAAO+I,GACxC3gB,EAAO6vB,eAAe0+C,EAAW32D,MAAOgJ,GACxC5gB,EAAOovB,aACLwiC,EAAS3tD,QAAQy3C,SACbp5C,EAAAglB,SAASs/B,MACTtkD,EAAAglB,SAASq/B,MACb3mD,EAAO2vB,eAAe2+C,EAAW12D,MAAOg6C,EAAS3tD,QAAQw6C,gBACzDz+C,EAAO2vB,eAAe4+C,EAAW32D,MAAOg6C,EAAS3tD,QAAQw6C,kBAG7D,MAEF,QACEjjC,EAAMxb,EAAOovB,aAAa9sB,EAAAglB,SAASw4C,OAAQn/C,EAAMC,GACjD,MAEF,QACEpF,EAAMxb,EAAOovB,aAAa9sB,EAAAglB,SAAS24C,OAAQt/C,EAAMC,GACjD,MAEF,QACEgxC,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBAIjB,OAAOzY,EAET,IAAK,OACH,GAAuB,GAAnBiU,EAASnqB,OAcX,OAbIiN,IACEA,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IACnC,GAAxBA,EAAcjN,QAChBssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,MAI3D6jD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAE3C/N,EAAOi0B,oBAEhB,GAAI1hB,EAAe,CACjB,GAA4B,GAAxBA,EAAcjN,OAMhB,OALIiN,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IAC/Dq/C,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,KAEhD/N,EAAOi0B,oBAEhBtT,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIld,EAAc,SAE7DoO,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKa,IAAG,GAEzD,OAAQ6sD,EAASjX,YAAYj1C,MAC3B,OACE,GAAIksD,EAASjX,YAAYlxC,GAAE,KAAuB,CAChDmoD,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBACb,MAIJ,QACEzY,EAAMmF,EACN,MAEF,QACEnF,EAAMxb,EAAOgvB,YAAY1sB,EAAAgiB,QAAQi6C,QAAS59C,GAC1C,MAEF,QACEnF,EAAMxb,EAAOgvB,YAAY1sB,EAAAgiB,QAAQ06C,QAASr+C,GAC1C,MAEF,QACEixC,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBAIjB,OAAOzY,EAET,IAAK,QACH,GAAuB,GAAnBiU,EAASnqB,OAcX,OAbIiN,IACEA,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IACnC,GAAxBA,EAAcjN,QAChBssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,MAI3D6jD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAE3C/N,EAAOi0B,oBAEhB,GAAI1hB,EAAe,CACjB,GAA4B,GAAxBA,EAAcjN,OAMhB,OALIiN,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IAC/Dq/C,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,KAEhD/N,EAAOi0B,oBAEhBtT,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIld,EAAc,SAE7DoO,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKa,IAAG,GAEzD,OAAQ6sD,EAASjX,YAAYj1C,MAC3B,OACE,GAAIksD,EAASjX,YAAYlxC,GAAE,KAAuB,CAChDmoD,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBACb,MAIJ,QACEzY,EAAMmF,EACN,MAEF,QACEnF,EAAMxb,EAAOgvB,YAAY1sB,EAAAgiB,QAAQk6C,SAAU79C,GAC3C,MAEF,QACEnF,EAAMxb,EAAOgvB,YAAY1sB,EAAAgiB,QAAQ26C,SAAUt+C,GAC3C,MAEF,QACEixC,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBAIjB,OAAOzY,EAET,IAAK,WACH,GAAuB,GAAnBiU,EAASnqB,OAcX,OAbIiN,IACEA,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IACnC,GAAxBA,EAAcjN,QAChBssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,MAI3D6jD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAE3C/N,EAAOi0B,oBAEhB,GAAI1hB,EAAe,CACjB,GAA4B,GAAxBA,EAAcjN,OAMhB,OALIiN,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IAC/Dq/C,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,KAEhD/N,EAAOi0B,oBAEhBtT,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIld,EAAc,SAE7DoO,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKa,IAAG,GAGzD,OADA6b,EAAOgxC,EAASzU,kBAAkB1tB,EAAS,GAAImiC,EAASjX,aAChDiX,EAASjX,YAAYj1C,MAC3B,QACE8V,EAAMxb,EAAOovB,aAAa9sB,EAAAglB,SAASu4C,YAAal/C,EAAMC,GACtD,MAEF,QACEpF,EAAMxb,EAAOovB,aAAa9sB,EAAAglB,SAAS04C,YAAar/C,EAAMC,GACtD,MAEF,QACEgxC,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBAIjB,OAAOzY,EAET,IAAK,UACH,GAAuB,GAAnBiU,EAASnqB,OAcX,OAbIiN,IACEA,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IACnC,GAAxBA,EAAcjN,QAChBssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,MAI3D6jD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAE3C/N,EAAOi0B,oBAEhB,GAAI1hB,EAAe,CACjB,GAA4B,GAAxBA,EAAcjN,OAMhB,OALIiN,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IAC/Dq/C,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,KAEhD/N,EAAOi0B,oBAEhBtT,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIld,EAAc,SAE7DoO,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKa,IAAG,GAEzD,OAAQ6sD,EAASjX,YAAYj1C,MAC3B,OACE,GAAIksD,EAASjX,YAAYlxC,GAAE,KAAuB,CAChDmoD,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBACb,MAIJ,QACEzY,EAAMmF,EACN,MAEF,QACEnF,EAAMxb,EAAOgvB,YAAY1sB,EAAAgiB,QAAQo6C,WAAY/9C,GAC7C,MAEF,QACEnF,EAAMxb,EAAOgvB,YAAY1sB,EAAAgiB,QAAQ66C,WAAYx+C,GAC7C,MAEF,QACEixC,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBAIjB,OAAOzY,EAET,IAAK,cACH,GAAuB,GAAnBiU,EAASnqB,OAYX,OAXMiN,GAAyC,GAAxBA,EAAcjN,SAC/BiN,GAAiBA,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IAChFq/C,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAgBA,EAAcjN,OAAOyI,SAAS,IAAM,MAG/E6jD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAE3C/N,EAAOi0B,oBAEhB,IAAM1hB,GAAyC,GAAxBA,EAAcjN,OAMnC,OALIiN,GAAiBA,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IAChFq/C,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAgBA,EAAcjN,OAAOyI,SAAS,IAAM,KAEtE/N,EAAOi0B,oBAEhB,OAAQ1hB,EAAc,GAAG7M,MACvB,OACA,OACEib,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKY,KACpD0W,EAAMxb,EAAOgvB,YAAY1sB,EAAAgiB,QAAQ+6C,eAAgB1+C,GACjD,MAEF,OACA,OACEA,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKa,KACpDyW,EAAMxb,EAAOgvB,YAAY1sB,EAAAgiB,QAAQg7C,eAAgB3+C,GACjD,MAEF,OACE,GAAIpO,EAAc,GAAG9I,GAAE,KAMrB,OALAmoD,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEbkqD,EAASjX,YAAcpoC,EAAc,GAC9BvS,EAAOi0B,oBAIlB,OACEtT,EAAOixC,EAASzU,kBACd1tB,EAAS,GACTmiC,EAAS3tD,QAAQy3C,SACbt5C,EAAA8B,KAAKa,IACL3C,EAAA8B,KAAKY,KAEX0W,EAAMxb,EAAOgvB,YACX4iC,EAAS3tD,QAAQy3C,SACbp5C,EAAAgiB,QAAQg7C,eACRh9D,EAAAgiB,QAAQ+6C,eACZ1+C,GAEF,MAEF,QACEA,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKQ,KACpD8W,EAAMxb,EAAOgvB,YAAY1sB,EAAAgiB,QAAQi7C,eAAgB5+C,GACjD,MAEF,QACEA,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKS,KACpD6W,EAAMxb,EAAOgvB,YAAY1sB,EAAAgiB,QAAQk7C,eAAgB7+C,GACjD,MAEF,QACEixC,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBAKjB,OADA29B,EAASjX,YAAcpoC,EAAc,GAC9BiJ,EAET,IAAK,OACH,GAAuB,GAAnBiU,EAASnqB,OAcX,OAbIiN,IACEA,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IACnC,GAAxBA,EAAcjN,QAChBssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,MAI3D6jD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAE3C/N,EAAOi0B,oBAEhB,GAAI1hB,EAAe,CACjB,GAA4B,GAAxBA,EAAcjN,OAMhB,OALIiN,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IAC/Dq/C,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,KAEhD/N,EAAOi0B,oBAEhBtT,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIld,EAAc,SAE7DoO,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKa,IAAG,GAEzD,OAAQ6sD,EAASjX,YAAYj1C,MAC3B,QACE8V,EAAMxb,EAAOgvB,YAAY1sB,EAAAgiB,QAAQq6C,QAASh+C,GAC1C,MAEF,QACEnF,EAAMxb,EAAOgvB,YAAY1sB,EAAAgiB,QAAQ86C,QAASz+C,GAC1C,MAGF,QACEixC,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBAIjB,OAAOzY,EAET,IAAK,QACH,GAAuB,GAAnBiU,EAASnqB,OAcX,OAbIiN,IACEA,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IACnC,GAAxBA,EAAcjN,QAChBssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,MAI3D6jD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAE3C/N,EAAOi0B,oBAEhB,GAAI1hB,GAAiBA,EAAcjN,OAAQ,CAEzC,GADAssD,EAASjX,YAAcpoC,EAAc,GACT,GAAxBA,EAAcjN,OAMhB,OALIiN,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IAC/Dq/C,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,KAEhD/N,EAAOi0B,oBAEhBtT,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIld,EAAc,SAE7DoO,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKa,IAAG,GAEzD,OAAQ6sD,EAASjX,YAAYj1C,MAC3B,OACE,GAAIksD,EAASjX,YAAYlxC,GAAE,KAAuB,CAChDmoD,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBACb,MAIJ,QACEzY,EAAMmF,EACN,MAGF,QACEnF,EAAMxb,EAAOgvB,YAAY1sB,EAAAgiB,QAAQm6C,SAAU99C,GAC3C,MAEF,QACEnF,EAAMxb,EAAOgvB,YAAY1sB,EAAAgiB,QAAQ46C,SAAUv+C,GAC3C,MAEF,QACEixC,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBAIjB,OAAOzY,EAKT,IAAK,OACH,OAAIiU,EAASnqB,OAAS,GAAKmqB,EAASnqB,OAAS,GACrCiN,GAAyC,GAAxBA,EAAcjN,QACnCssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAgBA,EAAcjN,OAAOyI,SAAS,IAAM,KAG3E0hB,EAASnqB,OAAS,EACpBssD,EAAStqD,MACPnF,EAAAoF,eAAeqlD,wCACfzzC,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAGlD6jD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAG7C/N,EAAOi0B,qBAEV1hB,GAAyC,GAAxBA,EAAcjN,QAQrCqb,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAImiC,EAAS3tD,QAAQW,YAC5DqoB,EAA4B,GAAnBwC,EAASnqB,OAAc0oE,EAAuBpc,EAAUniC,EAAS,IAAM,GACvE,EACJzvB,EAAOi0B,qBAEhB29B,EAASjX,YAAcpoC,EAAc,GAC9BvS,EAAOiwB,WACZ1d,EAAc,GAAGwL,SACjBxL,EAAc,GAAG9I,GAAG,GACpBkX,EACApO,EAAc,GAAG9I,GAAE,IACnBw5C,EAAex5C,GAAE,IACjBw5C,EAAevL,KAAOnlC,EAAc,GAAGmlC,MAClCka,EAASjX,YAAcsI,GAAgB/nC,gBACvC02C,EAASjX,YAAcpoC,EAAc,IAAI2I,eAC9C+R,MAtBI1a,GAAiBA,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IAChFq/C,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAgBA,EAAcjN,OAAOyI,SAAS,IAAM,KAEtE/N,EAAOi0B,qBAoBlB,IAAK,QAEH,OADA29B,EAASjX,YAAcv4C,EAAA8B,KAAKc,KACxByqB,EAASnqB,OAAS,GAAKmqB,EAASnqB,OAAS,GACrCiN,GAAyC,GAAxBA,EAAcjN,QACnCssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAgBA,EAAcjN,OAAOyI,SAAS,IAAM,KAG3E0hB,EAASnqB,OAAS,EACpBssD,EAAStqD,MACPnF,EAAAoF,eAAeqlD,wCACfzzC,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAGlD6jD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAG7C/N,EAAOi0B,qBAEV1hB,GAAyC,GAAxBA,EAAcjN,QAOrCqb,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAImiC,EAAS3tD,QAAQW,WAChEgc,EAAOgxC,EAASzU,kBACd1tB,EAAS,GACTld,EAAc,GACdA,EAAc,GAAG9I,GAAE,GAChB,EACA,GAEDuC,OAAI,EAEN4lD,EAASjX,YAAYlxC,GAAE,IACvB8I,EAAc,GAAG9I,GAAE,IACnB8I,EAAc,GAAGmlC,KAAOka,EAASjX,YAAYjD,MAE7C92B,EAAOgxC,EAASvN,kBACdzjC,EACAgxC,EAASjX,YAAapoC,EAAc,GAAE,EAEtCkd,EAAS,IAEXzjB,EAAOuG,EAAc,IAErBvG,EAAO4lD,EAASjX,aAEd1tB,EAA4B,GAAnBwC,EAASnqB,OAAc0oE,EAAuBpc,EAAUniC,EAAS,IAAM,GACvE,EACJzvB,EAAOi0B,qBAEhB29B,EAASjX,YAAcv4C,EAAA8B,KAAKc,KACrBhF,EAAOswB,YAAY/d,EAAc,GAAGwL,SAAU4C,EAAMC,EAAM5U,EAAKkP,eAAgB+R,MAnCpF2kC,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAgBA,EAAcjN,OAAOyI,SAAS,IAAM,KAEtE/N,EAAOi0B,qBAiClB,IAAK,SAEH,GADA29B,EAASjX,YAAciX,EAAS3tD,QAAQW,UACjB,GAAnB6qB,EAASnqB,OAWX,OAVMiN,GAAyC,GAAxBA,EAAcjN,QACnCssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAgBA,EAAcjN,OAAOyI,SAAS,IAAM,KAG/E6jD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAE3C/N,EAAOi0B,oBAEV1hB,GAAyC,GAAxBA,EAAcjN,QACnCssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAgBA,EAAcjN,OAAOyI,SAAS,IAAM,KAG/E,IAAIgQ,EAAoBxL,EAAe,GAAGwL,SAkB1C,OAjBI6zC,EAAS3tD,QAAQy3C,SAEfuH,EAAex5C,GAAE,IAAuBw5C,EAAevL,MAAQ,IACjEka,EAASjX,YAAcv4C,EAAA8B,KAAKQ,IAC5B8W,EAAMxb,EAAOquB,UAAUtQ,IAEvBvC,EAAMxb,EAAOwuB,UAAUzQ,EAAU,GAI/BklC,EAAex5C,GAAE,IAA8C,IAAvBw5C,EAAevL,MACzDka,EAASjX,YAAcv4C,EAAA8B,KAAKS,IAC5B6W,EAAMxb,EAAOwuB,UAAUzQ,EAAU,IAEjCvC,EAAMxb,EAAOquB,UAAUtQ,GAGpBvC,EAET,IAAK,WAEH,GADAo2C,EAASjX,YAAciX,EAAS3tD,QAAQW,UACpC6qB,EAASnqB,OAAS,EAWpB,OAVMiN,GAAyC,GAAxBA,EAAcjN,QACnCssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAgBA,EAAcjN,OAAOyI,SAAS,IAAM,KAG/E6jD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAE3C/N,EAAOi0B,oBAEhB,IAAM1hB,GAAyC,GAAxBA,EAAcjN,OAKnC,OAJAssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAgBA,EAAcjN,OAAOyI,SAAS,IAAM,KAEtE/N,EAAOi0B,oBAEhB,IAAI9e,EACJ,KADIA,EAAY5C,EAAc,GAAG8B,gBAM/B,OAJAu9C,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEN1H,EAAOi0B,oBAEhB,IAAIhH,OAAM,EACV,GAAIwC,EAASnqB,OAAQ,CACnB,GACEmqB,EAAS,GAAG/pB,MAAQrD,EAAAsD,SAAS0H,SACToiB,EAAS,GAAIniB,aAAejL,EAAAkL,YAAYC,OAM5D,OAJAokD,EAAStqD,MACPnF,EAAAoF,eAAesG,wBACf4hB,EAAS,GAAG/nB,OAEP1H,EAAOi0B,oBAEhB,IAAIu6C,EAAsC/+C,EAAS,GAAI/tB,MACnDowD,EAAQ38C,EAAUrK,QAAUqK,EAAUrK,QAAQtJ,IAAIgtE,GAAa,KACnE,IAAM1c,GAASA,EAAMpsD,MAAQo5B,EAAA31B,YAAYiL,MAKvC,OAJAw9C,EAAStqD,MACPnF,EAAAoF,eAAeknE,yBACfh/C,EAAS,GAAG/nB,MAAOyN,EAAUhO,aAAcqnE,GAEtCxuE,EAAOi0B,oBAEhBhH,EAAiB6kC,EAAOn1C,kBAExBsQ,EAAS9X,EAAUiI,oBAErB,OAAIw0C,EAAS3tD,QAAQy3C,SAEfuH,EAAex5C,GAAE,IAAuBw5C,EAAevL,MAAQ,IACjEka,EAASjX,YAAcv4C,EAAA8B,KAAKQ,IACrB1E,EAAOquB,UAAUpB,IAEjBjtB,EAAOwuB,UAAUvB,GAItBg2B,EAAex5C,GAAE,IAA8C,IAAvBw5C,EAAevL,MACzDka,EAASjX,YAAcv4C,EAAA8B,KAAKS,IACrB3E,EAAOwuB,UAAUvB,IAEjBjtB,EAAOquB,UAAUpB,GAO9B,IAAK,SACH,GAAuB,GAAnBwC,EAASnqB,OAcX,OAbIiN,IACEA,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IACnC,GAAxBA,EAAcjN,QAChBssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,MAI3D6jD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAE3C/N,EAAOi0B,oBAEhB,GAAI1hB,EAAe,CACjB,GAA4B,GAAxBA,EAAcjN,OAMhB,OALIiN,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IAC/Dq/C,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,KAEhD/N,EAAOi0B,oBAEhBtT,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIld,EAAc,SAE7DoO,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKG,IAAG,GAMzD,OAJI2H,EAAO4lD,EAASjX,YACpB/5B,EAAOgxC,EAASzU,kBAAkB1tB,EAAS,GAAIzjB,GAC/C6U,EAAO+wC,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKW,MACpD+sD,EAASjX,YAAc3uC,EACf4lD,EAASjX,YAAYj1C,MAC3B,QACE8V,EAAMxb,EAAOkzB,aAAavS,EAAMC,EAAMC,GACtC,MAEF,QACE+wC,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMxb,EAAOi0B,oBAIjB,OAAOzY,EAET,IAAK,cAaH,OAZuB,GAAnBiU,EAASnqB,QACXssD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAGhDwE,GACFq/C,EAAStqD,MACPnF,EAAAoF,eAAe4mE,sBACfh1D,EAAWzR,MAAO3F,EAAUoF,cAGzBnH,EAAOi0B,oBAKhB,IAAK,iBAcH,OAbA29B,EAASjX,YAAcv4C,EAAA8B,KAAKG,IACL,GAAnBorB,EAASnqB,QACXssD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAGhDwE,GACFq/C,EAAStqD,MACPnF,EAAAoF,eAAe4mE,sBACfh1D,EAAWzR,MAAO3F,EAAUoF,cAGzBnH,EAAOwvB,WAAWltB,EAAA6pB,OAAO00C,eAElC,IAAK,cAiBH,OAhBAjP,EAASjX,YAAcv4C,EAAA8B,KAAKG,IACL,GAAnBorB,EAASnqB,QACXssD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAElD4S,EAAO3gB,EAAOi0B,qBAEdtT,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKG,KAElDkO,GACFq/C,EAAStqD,MACPnF,EAAAoF,eAAe4mE,sBACfh1D,EAAWzR,MAAO3F,EAAUoF,cAGzBnH,EAAOwvB,WAAWltB,EAAA6pB,OAAO20C,WAAY,MAAQngD,IAGtD,IAAK,cAOH,GANIpO,GACFq/C,EAAStqD,MACPnF,EAAAoF,eAAe4mE,sBACfh1D,EAAWzR,MAAO3F,EAAUoF,cAGT,GAAnBsoB,EAASnqB,OAMX,OALAssD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAElD6jD,EAASjX,YAAcv4C,EAAA8B,KAAKc,KACrBhF,EAAOi0B,oBAMhB,MAJAtT,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAImiC,EAAS3tD,QAAQW,WAChEgc,EAAOgxC,EAASzU,kBAAkB1tB,EAAS,GAAImiC,EAAS3tD,QAAQW,WAChEic,EAAO+wC,EAASzU,kBAAkB1tB,EAAS,GAAImiC,EAAS3tD,QAAQW,WAChEgtD,EAASjX,YAAcv4C,EAAA8B,KAAKc,KACtB,IAAI4G,MAAM,mBAGlB,IAAK,aAOH,GANI2G,GACFq/C,EAAStqD,MACPnF,EAAAoF,eAAe4mE,sBACfh1D,EAAWzR,MAAO3F,EAAUoF,cAGT,GAAnBsoB,EAASnqB,OAMX,OALAssD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAElD6jD,EAASjX,YAAcv4C,EAAA8B,KAAKc,KACrBhF,EAAOi0B,oBAMhB,MAJAtT,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAImiC,EAAS3tD,QAAQW,WAChEgc,EAAOgxC,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKQ,KACpDmc,EAAO+wC,EAASzU,kBAAkB1tB,EAAS,GAAImiC,EAAS3tD,QAAQW,WAChEgtD,EAASjX,YAAcv4C,EAAA8B,KAAKc,KACtB,IAAI4G,MAAM,mBAMlB,IAAK,aACH,OAAM2G,GAAyC,GAAxBA,EAAcjN,OAOL,GAArBiN,EAAc,GAAG7M,MAC1BksD,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEbkqD,EAASjX,YAAcpoC,EAAc,GAC9BvS,EAAOi0B,qBAEO,GAAnBxE,EAASnqB,QACXssD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAElD6jD,EAASjX,YAAcpoC,EAAc,GAC9BvS,EAAOi0B,sBAEhBtT,EAAOixC,EAASzU,kBACd1tB,EAAS,GACTmiC,EAAS3tD,QAAQW,UAAS,GAG5BgtD,EAASjX,YAAcpoC,EAAc,GACR,GAAzBq/C,EAASjX,YAAYj1C,MACvBksD,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEN1H,EAAOi0B,qBAITtT,IArCDpO,GAAiBA,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,IAChFq/C,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAgBA,EAAcjN,OAAOyI,SAAS,IAAM,KAEtE/N,EAAOi0B,qBAkClB,IAAK,SACH,GAAIxE,EAASnqB,OAAS,GAAKmqB,EAASnqB,OAAS,EAqB3C,OApBIiN,IACEA,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,GAAGslC,iBACtC,GAAxBtlC,EAAcjN,QAChBssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,MAIvD0hB,EAASnqB,OAAS,EACpBssD,EAAStqD,MACPnF,EAAAoF,eAAeqlD,wCACfzzC,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAEzC0hB,EAASnqB,OAAS,GAC3BssD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAG7C/N,EAAOi0B,oBAEhB,GAAI1hB,EAAe,CAEjB,GADIA,EAAcjN,SAAQssD,EAASjX,YAAcpoC,EAAc,GAAGslC,iBACtC,GAAxBtlC,EAAcjN,OAKhB,OAJAssD,EAAStqD,MACPnF,EAAAoF,eAAe2L,oCACfiG,EAAWzR,MAAO,IAAK6K,EAAcjN,OAAOyI,SAAS,KAEhD/N,EAAOi0B,oBAEhBtT,EAAOixC,EAASzU,kBAAkB1tB,EAAS,GAAIld,EAAc,SAE7DoO,EAAOixC,EAAStN,4BAA4B70B,EAAS,GAAIrtB,EAAA8B,KAAKG,KAOhE,GAJI2H,EAAO4lD,EAASjX,YACpBiX,EAASjX,YAAc3uC,EAAK6rC,gBAGxB+Z,EAAS3tD,QAAQi2C,SACnB,OAAI+I,GAAkB7gD,EAAA8B,KAAKc,MACzB4sD,EAASjX,YAAcv4C,EAAA8B,KAAKc,KACrBhF,EAAO8yB,aAETnS,EAGT,IAAI+tD,EAAQC,EAAa/c,EAA6B,GAAnBniC,EAASnqB,OAAcmqB,EAAS,GAAK,KAAMtW,GAI9E,GAFAy4C,EAASjX,YAAc3uC,EAAK6rC,gBAExBoL,GAAkB7gD,EAAA8B,KAAKc,KAAM,CAC/B,OAAQ4sD,EAASjX,YAAYj1C,MAC3B,QACE8V,EAAMxb,EAAO0yB,SACX1yB,EAAOgvB,YAAY1sB,EAAAgiB,QAAQotC,OACzB/wC,GAEF+tD,GAEF,MAEF,OACA,OACElzD,EAAMxb,EAAO0yB,SACX1yB,EAAOgvB,YAAY1sB,EAAAgiB,QAAQqtC,OACzBhxC,GAEF+tD,GAEF,MAEF,OACA,OACElzD,EAAMxb,EAAO0yB,SACX1yB,EAAOgvB,YACL4iC,EAAS3tD,QAAQy3C,SACbp5C,EAAAgiB,QAAQqtC,OACRrvD,EAAAgiB,QAAQotC,OACZ/wC,GAEF+tD,GAEF,MAGF,QACElzD,EAAMxb,EAAO0yB,SACX1yB,EAAOovB,aAAa9sB,EAAAglB,SAAS8gC,MAC3BznC,EACA3gB,EAAO4uB,UAAU,IAEnB8/C,GAEF,MAEF,QACElzD,EAAMxb,EAAO0yB,SACX1yB,EAAOovB,aAAa9sB,EAAAglB,SAAS+gC,MAC3B1nC,EACA3gB,EAAO8uB,UAAU,IAEnB4/C,GAEF,MAEF,QACE9c,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMkzD,EAIV9c,EAASjX,YAAcv4C,EAAA8B,KAAKc,UAE5B,OAAQ4sD,EAASjX,YAAYj1C,MAC3B,QACMu8C,EAAY2P,EAAS9yC,gBAAgBnD,oBAAoBvZ,EAAA8B,KAAKG,KAClEmX,EAAMxb,EAAO0yB,SACX1yB,EAAOgvB,YAAY1sB,EAAAgiB,QAAQotC,OACzB1xD,EAAO6vB,eAAeoyB,EAAUrqC,MAAO+I,IAEzC+tD,EACA1uE,EAAO2vB,eAAesyB,EAAUrqC,MAAOtV,EAAA6Y,WAAWC,MAEpD,MAEF,OACA,OACM6mC,EAAY2P,EAAS9yC,gBAAgBnD,oBAAoBvZ,EAAA8B,KAAKI,KAClEkX,EAAMxb,EAAO0yB,SACX1yB,EAAOgvB,YAAY1sB,EAAAgiB,QAAQqtC,OACzB3xD,EAAO6vB,eAAeoyB,EAAUrqC,MAAO+I,IAEzC+tD,EACA1uE,EAAO2vB,eAAesyB,EAAUrqC,MAAOtV,EAAA6Y,WAAWE,MAEpD,MAEF,OACA,OACM4mC,EAAY2P,EAAS9yC,gBAAgBnD,oBAAoBi2C,EAAS3tD,QAAQW,WAC9E4W,EAAMxb,EAAO0yB,SACX1yB,EAAOgvB,YACL4iC,EAAS3tD,QAAQy3C,SACbp5C,EAAAgiB,QAAQqtC,OACRrvD,EAAAgiB,QAAQotC,OACZ1xD,EAAO6vB,eAAeoyB,EAAUrqC,MAAO+I,IAEzC+tD,EACA1uE,EAAO2vB,eAAesyB,EAAUrqC,MAAOg6C,EAAS3tD,QAAQw6C,iBAE1D,MAEF,QACMwD,EAAY2P,EAAS9yC,gBAAgBnD,oBAAoBvZ,EAAA8B,KAAKY,KAClE0W,EAAMxb,EAAO0yB,SACX1yB,EAAOovB,aAAa9sB,EAAAglB,SAAS8gC,MAC3BpoD,EAAO6vB,eAAeoyB,EAAUrqC,MAAO+I,GACvC3gB,EAAO4uB,UAAU,IAEnB8/C,EACA1uE,EAAO2vB,eAAesyB,EAAUrqC,MAAOtV,EAAA6Y,WAAWG,MAEpD,MAEF,QACM2mC,EAAY2P,EAAS9yC,gBAAgBnD,oBAAoBvZ,EAAA8B,KAAKa,KAClEyW,EAAMxb,EAAO0yB,SACX1yB,EAAOovB,aAAa9sB,EAAAglB,SAAS+gC,MAC3BroD,EAAO6vB,eAAeoyB,EAAUrqC,MAAO+I,GACvC3gB,EAAO8uB,UAAU,IAEnB4/C,EACA1uE,EAAO2vB,eAAesyB,EAAUrqC,MAAOtV,EAAA6Y,WAAWI,MAEpD,MAEF,QACEq2C,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEb8T,EAAMkzD,EAKZ,OAAOlzD,EAKT,IAAK,KAOH,OANIjJ,GACFq/C,EAAStqD,MACPnF,EAAAoF,eAAe4mE,sBACfh1D,EAAWzR,MAAO3F,EAAUoF,cAGT,GAAnBsoB,EAASnqB,QACXssD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAElD6jD,EAASjX,YAAcv4C,EAAA8B,KAAKC,GACrBnE,EAAOi0B,qBAET29B,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKC,GAAE,GAExD,IAAK,MAOH,OANIoO,GACFq/C,EAAStqD,MACPnF,EAAAoF,eAAe4mE,sBACfh1D,EAAWzR,MAAO3F,EAAUoF,cAGT,GAAnBsoB,EAASnqB,QACXssD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAElD6jD,EAASjX,YAAcv4C,EAAA8B,KAAKE,IACrBpE,EAAOi0B,qBAET29B,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKE,IAAG,GAEzD,IAAK,MAOH,OANImO,GACFq/C,EAAStqD,MACPnF,EAAAoF,eAAe4mE,sBACfh1D,EAAWzR,MAAO3F,EAAUoF,cAGT,GAAnBsoB,EAASnqB,QACXssD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAElD6jD,EAASjX,YAAcv4C,EAAA8B,KAAKG,IACrBrE,EAAOi0B,qBAET29B,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKG,IAAG,GAEzD,IAAK,MAOH,OANIkO,GACFq/C,EAAStqD,MACPnF,EAAAoF,eAAe4mE,sBACfh1D,EAAWzR,MAAO3F,EAAUoF,cAGT,GAAnBsoB,EAASnqB,QACXssD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAElD6jD,EAASjX,YAAcv4C,EAAA8B,KAAKI,IACrBtE,EAAOi0B,qBAET29B,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKI,IAAG,GAEzD,IAAK,QAOH,OANIiO,GACFq/C,EAAStqD,MACPnF,EAAAoF,eAAe4mE,sBACfh1D,EAAWzR,MAAO3F,EAAUoF,cAGT,GAAnBsoB,EAASnqB,QACXssD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAElD6jD,EAASjX,YAAciX,EAAS3tD,QAAQy3C,SACpCt5C,EAAA8B,KAAKy0C,QACLv2C,EAAA8B,KAAKw0C,QACF14C,EAAOi0B,qBAET29B,EAASzU,kBACd1tB,EAAS,GACTmiC,EAAS3tD,QAAQy3C,SACbt5C,EAAA8B,KAAKy0C,QACLv2C,EAAA8B,KAAKw0C,QAAO,GAIpB,IAAK,KAOH,OANInmC,GACFq/C,EAAStqD,MACPnF,EAAAoF,eAAe4mE,sBACfh1D,EAAWzR,MAAO3F,EAAUoF,cAGT,GAAnBsoB,EAASnqB,QACXssD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAElD6jD,EAASjX,YAAcv4C,EAAA8B,KAAKM,GACrBxE,EAAOi0B,qBAET29B,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKM,GAAE,GAExD,IAAK,MAOH,OANI+N,GACFq/C,EAAStqD,MACPnF,EAAAoF,eAAe4mE,sBACfh1D,EAAWzR,MAAO3F,EAAUoF,cAGT,GAAnBsoB,EAASnqB,QACXssD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAElD6jD,EAASjX,YAAcv4C,EAAA8B,KAAKO,IACrBzE,EAAOi0B,qBAET29B,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKO,IAAG,GAEzD,IAAK,MAOH,OANI8N,GACFq/C,EAAStqD,MACPnF,EAAAoF,eAAe4mE,sBACfh1D,EAAWzR,MAAO3F,EAAUoF,cAGT,GAAnBsoB,EAASnqB,QACXssD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAElD6jD,EAASjX,YAAcv4C,EAAA8B,KAAKQ,IACrB1E,EAAOi0B,qBAET29B,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKQ,IAAG,GAEzD,IAAK,MAOH,OANI6N,GACFq/C,EAAStqD,MACPnF,EAAAoF,eAAe4mE,sBACfh1D,EAAWzR,MAAO3F,EAAUoF,cAGT,GAAnBsoB,EAASnqB,QACXssD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAElD6jD,EAASjX,YAAcv4C,EAAA8B,KAAKS,IACrB3E,EAAOi0B,qBAET29B,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKS,IAAG,GAEzD,IAAK,QAOH,OANI4N,GACFq/C,EAAStqD,MACPnF,EAAAoF,eAAe4mE,sBACfh1D,EAAWzR,MAAO3F,EAAUoF,cAGT,GAAnBsoB,EAASnqB,QACXssD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAElD6jD,EAASjX,YAAciX,EAAS3tD,QAAQW,UACjC5E,EAAOi0B,qBAET29B,EAASzU,kBACd1tB,EAAS,GACTmiC,EAAS3tD,QAAQW,UAAS,GAI9B,IAAK,OAOH,OANI2N,GACFq/C,EAAStqD,MACPnF,EAAAoF,eAAe4mE,sBACfh1D,EAAWzR,MAAO3F,EAAUoF,cAGT,GAAnBsoB,EAASnqB,QACXssD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAElD6jD,EAASjX,YAAcv4C,EAAA8B,KAAKW,KACrB7E,EAAOi0B,qBAET29B,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKW,KAAI,GAE1D,IAAK,MAOH,OANI0N,GACFq/C,EAAStqD,MACPnF,EAAAoF,eAAe4mE,sBACfh1D,EAAWzR,MAAO3F,EAAUoF,cAGT,GAAnBsoB,EAASnqB,QACXssD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAElD6jD,EAASjX,YAAcv4C,EAAA8B,KAAKY,IACrB9E,EAAOi0B,qBAET29B,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKY,IAAG,GAEzD,IAAK,MAOH,OANIyN,GACFq/C,EAAStqD,MACPnF,EAAAoF,eAAe4mE,sBACfh1D,EAAWzR,MAAO3F,EAAUoF,cAGT,GAAnBsoB,EAASnqB,QACXssD,EAAStqD,MACPnF,EAAAoF,eAAeuG,+BACfqL,EAAWzR,MAAO,IAAK+nB,EAASnqB,OAAOyI,SAAS,KAElD6jD,EAASjX,YAAcv4C,EAAA8B,KAAKa,IACrB/E,EAAOi0B,qBAET29B,EAASzU,kBAAkB1tB,EAAS,GAAIrtB,EAAA8B,KAAKa,IAAG,GAO3D,OAJA6sD,EAAStqD,MACPnF,EAAAoF,eAAeqD,wBACfuO,EAAWzR,OAEN1H,EAAOi0B,qBAqChB,IAAM26C,EAAuB,kBAG7B7uE,EAAA8xD,gBAAA,SACED,EACAh5C,EACAO,GAEA,IAAI/C,EAAUw7C,EAASx7C,QACvBrN,OAAO6P,EAAcxC,SAAWA,GAChC,IAAIpW,EAAS4xD,EAAS5xD,OAClBiE,EAAU2tD,EAAS3tD,QAEnB4qE,EAAoBz4D,EAAQ3S,eAAejC,IAAIotE,GACnD,IAAKC,EAKH,OAJAz4D,EAAQ9O,MACNnF,EAAAoF,eAAeqB,mBACfuQ,EAAWzR,MAAOknE,GAEb5uE,EAAOi0B,oBAEhB,GAAI46C,EAAkBnpE,MAAQo5B,EAAA31B,YAAY2L,mBAKxC,OAJAsB,EAAQ9O,MACNnF,EAAAoF,eAAe+kD,uGACfnzC,EAAWzR,MAAOmnE,EAAkB1nE,cAE/BnH,EAAOi0B,oBAGhB,IAAI66C,EAAuCD,EAAmB9iE,UAC9D,OAAM+iE,GAAoBld,EAASxT,gBAAgB0wB,IAEnDld,EAASjX,YAAc/hC,EAAc5M,KAC9BhM,EAAO0zB,WACZo7C,EAAiB3nE,cACflD,EAAQy3C,SACJ17C,EAAOwuB,UAAU5V,EAAcwE,qBAC/Bpd,EAAOquB,UAAUzV,EAAcwE,sBAErCnZ,EAAQw6C,iBAToEz+C,EAAOi0B,qBAavF,IAAM86C,EAAoB,QAG1B,SAAAJ,EACE/c,EACAlxC,EACAvH,GAEA,IAAI/C,EAAUw7C,EAASx7C,QACnBpW,EAAS4xD,EAAS5xD,OAElB+vD,EAAa35C,EAAQ1S,YAAYlC,IAAI,UACzC,IAAKuuD,EAAY,OAAO/vD,EAAOi0B,oBAE/B,IAAI+6C,EAAiB54D,EAAQ3S,eAAejC,IAAIutE,GAChD,IAAKC,GAAkBA,EAAetpE,MAAQo5B,EAAA31B,YAAY2L,mBAAoB,OAAO9U,EAAOi0B,oBAE5F,IAAIg7C,EAAoCD,EAAgBjjE,UACxD,IAAMkjE,IAAiBrd,EAASxT,gBAAgB6wB,GAAiB,OAAOjvE,EAAOi0B,oBAE/E,IAAIi7C,EAAwB,MAAXxuD,EACbkxC,EAASzU,kBAAkBz8B,EAASqvC,GACpCA,EAAWxX,aAAav4C,GAExBmvE,EAAcvd,EAASnC,oBAAoBt2C,EAAWzR,MAAMkC,OAAOuX,gBAGvE,OADAywC,EAASjX,YAAcv4C,EAAA8B,KAAKc,KACrBhF,EAAO6xB,YAAY,MACxB7xB,EAAO4zB,iBACLq7C,EAAc9nE,cACZ+nE,EACAC,EACAnvE,EAAOquB,UAAUlV,EAAWzR,MAAM2U,MAClCrc,EAAOquB,UAAUlV,EAAWzR,MAAM4U,SAEpCha,EAAA6Y,WAAW6W,MAEbhyB,EAAOi0B,sBAlCXl0B,EAAA4uE,8BCxhFA3uE,EAAAD,QAAAO,oBCAA,SAAAw8C,GAEA,MAAAsyB,EAAAtyB,EAAAuyB,UAAA7uE,EAAA,IAEA,QAAA8uE,KAAAF,GACAE,EAAA3pC,WAAA,cAAA2pC,EAAA3pC,WAAA,gBACAmX,EAAAwyB,GAAAF,EAAAE,IAIAxyB,EAAAxvB,gBAAA,SAAAoqB,GACA,OAAAA,EACA03B,EAAAG,QAAA73B,GADA,GAIAoF,EAAAnvB,YAAA,SAAAyC,GACAA,GAAAg/C,EAAAI,MAAAp/C,IAGA0sB,EAAA2yB,YAAA,SAAAC,EAAAC,EAAAhuE,GACA,OAAAytE,EAAAQ,SAAAF,EAAAC,EAAAhuE,IAGAm7C,EAAA9e,MAAA,SAAA5N,EAAA8N,GACAkxC,EAAAS,OAAAz/C,GAAA8N,GAGA4e,EAAAtjB,KAAA,SAAApJ,GACA,OAAAg/C,EAAAS,OAAAz/C,IAKA,MAAAjD,EAAA3sB,EAAA,GAAA2sB,OAEAA,EAAAprB,UAAA43B,OAAA,WACA,IAAAm2C,EAAAV,EAAAW,MACAv0D,EAAA,GAIA,OAHA4zD,EAAAW,MAAA,SAAAC,GAAgCx0D,GAAAw0D,EAAA,MAChCC,qBAAA5vE,KAAAwZ,KACAu1D,EAAAW,MAAAD,EACAt0D,GAGA2R,EAAAprB,UAAA63B,QAAA,WACA,IAAAk2C,EAAAV,EAAAW,MACAv0D,EAAA,GAIA,OAHA4zD,EAAAW,MAAA,SAAAC,GAAgCx0D,GAAAw0D,EAAA,MAChCE,0BAAA7vE,KAAAwZ,KACAu1D,EAAAW,MAAAD,EACAt0D,uCClDA,SAAAshC,GAAA,IAAAqzB,EAAA,oBAAAnjC,qBAAA,IAAA8P,MAAA18C,KAEAgwE,EAAA,IAAA72C,WAAA,GACA82C,EAAA,EAEAF,EAAA,yBAAAz4B,GACA,KAAAA,KAAA,GACA,SACA,GAAA24B,EAAA34B,EAAA04B,EAAA9qE,OAAA,CACA,IAAAgrE,EAAAF,GACAA,EAAA,IAAA72C,WAAAwrC,KAAA/pB,IAAA,MAAAo1B,EAAA9qE,OAAAoyC,EAAA,EAAA04B,EAAA9qE,UACA4B,IAAAopE,GAEA,IAAAlgD,EAAAigD,EAGA,OAFA,GAAAA,GAAA34B,KACA24B,EAAA,KAAAA,IACAjgD,GAGA+/C,EAAA,qBAAA//C,KAIA+/C,EAAA,qBAAAT,EAAAC,EAAAhuE,GACAyuE,EAAAG,WAAAb,EAAAC,IAAAhuE,IAGAwuE,EAAA,eAAA//C,EAAA8N,EAAAsyC,GACA,iBAAAA,IACApgD,GAAAogD,GACAJ,EAAAhgD,GAAA8N,GAGAiyC,EAAA,cAAA//C,GAGA,MAFA,iBAAAogD,MACApgD,GAAAogD,KACAJ,EAAAhgD,wCCpCA,SAAA0sB,GAEA,IAAAqzB,EAAA,oBAAAnjC,qBAAA,IAAA8P,MAAA18C,KA0GA,SAAAqwE,IACA7kE,MAAA8kE,kBACA9kE,MAAA8kE,kBAAArwE,KAAAowE,GAEApwE,KAAAswE,MAAAtwE,KAAAY,KAAA,KAAAZ,KAAAqgB,QAAA,UAAA9U,OAAA+kE,MAWA,SAAAC,EAAAlwD,GACArgB,KAAAqgB,WAAA,mBACA9U,MAAA8kE,kBACA9kE,MAAA8kE,kBAAArwE,KAAAuwE,GAEAvwE,KAAAswE,MAAAtwE,KAAAY,KAAA,KAAAZ,KAAAqgB,QAAA,UAAA9U,OAAA+kE,MA5HAvvE,OAAAyvE,iBACAV,EAAA,YAAAzuE,GAA0C,OAAAA,GAAA,SAE1C+iE,WAAgB/iE,OAAA,IAAAovE,UAAA,GAChB12C,WAAgB14B,MAAA,IAAAovE,UAAA,KAGhB1vE,OAAAyvE,iBACAV,EAAA,aAAAzuE,GAA4C,OAAAA,GAAA,SAE5C+iE,WAAgB/iE,OAAA,MAAAovE,UAAA,GAChB12C,WAAgB14B,MAAA,MAAAovE,UAAA,KAGhB1vE,OAAAyvE,iBACAV,EAAA,IAAAA,EAAA,eAAAzuE,GAAmE,SAAAA,IAEnE+iE,WAAgB/iE,OAAA,WAAAovE,UAAA,GAChB12C,WAAgB14B,MAAA,WAAAovE,UAAA,KAGhB1vE,OAAAyvE,iBACAV,EAAA,YAAAzuE,GAA0C,WAAAA,IAE1C+iE,WAAgB/iE,MAAA,EAAAovE,UAAA,GAChB12C,WAAgB14B,MAAA,IAAAovE,UAAA,KAGhB1vE,OAAAyvE,iBACAV,EAAA,aAAAzuE,GAA4C,aAAAA,IAE5C+iE,WAAgB/iE,MAAA,EAAAovE,UAAA,GAChB12C,WAAgB14B,MAAA,MAAAovE,UAAA,KAGhB1vE,OAAAyvE,iBACAV,EAAA,IAAAA,EAAA,eAAAzuE,GAAmE,OAAAA,IAAA,IAEnE+iE,WAAgB/iE,MAAA,EAAAovE,UAAA,GAChB12C,WAAgB14B,MAAA,WAAAovE,UAAA,KAGhB1vE,OAAAyvE,iBACAV,EAAA,cAAAzuE,GAA8C,QAAAA,IAE9C+iE,WAAgB/iE,MAAA,EAAAovE,UAAA,GAChB12C,WAAgB14B,MAAA,EAAAovE,UAAA,KAGhB1vE,OAAAyvE,iBACAV,EAAA,aAAAzuE,GAA4C,OAAAqjE,KAAAkI,OAAAvrE,KAE5C+iE,WAAgB/iE,MAAAqjE,KAAAkI,QAAA,eAAA6D,UAAA,GAChB12C,WAAgB14B,MAAAqjE,KAAAkI,OAAA,eAAA6D,UAAA,GAChBC,oBAAyBrvE,MAAAqjE,KAAAkI,OAAA,iBAAA6D,UAAA,GACzBlE,kBAAuBlrE,OAAA,SAAAovE,UAAA,GACvBhE,kBAAuBprE,MAAA,SAAAovE,UAAA,GACvBE,SAActvE,MAAAqjE,KAAAkI,OAAA,cAAA6D,UAAA,KAGd1vE,OAAAyvE,iBACAV,EAAA,aAAAzuE,GAA4C,OAAAA,IAE5C+iE,WAAgB/iE,OAAA,uBAAAovE,UAAA,GAChB12C,WAAgB14B,MAAA,uBAAAovE,UAAA,GAChBC,oBAAyBrvE,MAAA,wBAAAovE,UAAA,GACzBlE,kBAAuBlrE,OAAA,iBAAAovE,UAAA,GACvBhE,kBAAuBprE,MAAA,iBAAAovE,UAAA,GACvBE,SAActvE,MAAA,sBAAAovE,UAAA,KAGdX,EAAA,IAAApL,KAAAkM,MAEAd,EAAA,IAAApL,KAAAmM,IAEAf,EAAA,IAAApL,KAAA/pB,IAEAm1B,EAAA,IAAApL,KAAAM,IAEA8K,EAAA,KAAApL,KAAAntB,KAEAu4B,EAAA,MAAApL,KAAAwF,MAEA4F,EAAA,gBAAAx9C,EAAAC,EAAAT,GACA,OAAAA,EAAAQ,EAAAC,GAGAu9C,EAAA,KAAApL,KAAAoM,KAEAhB,EAAA,MAAApL,KAAAqM,MAEAjB,EAAA,eAAAzuE,GACA,IAAAiwC,EAAAjwC,GAAA,WACAkwC,GAAA,SAAAlwC,IAAA,EAIA,OAFAiwC,GADAjwC,EAAAiwC,EAAAC,IACA,WACAA,GAAA,MAAAlwC,IAAA,KAIAyuE,EAAA,iBAAAzuE,GACA,OAAAA,GAAA,QAAAA,GAAA,iBAAAA,GAUA+uE,EAAA1uE,UAAAX,OAAAyZ,OAAAjP,MAAA7J,WACA0uE,EAAA1uE,UAAAd,KAAA,mBACAwvE,EAAA1uE,UAAA2e,QAAA,cAEAyvD,EAAA,uBACA,UAAAM,GAWAG,EAAA7uE,UAAAX,OAAAyZ,OAAAjP,MAAA7J,WACA6uE,EAAA7uE,UAAAd,KAAA,iBAEAkvE,EAAA,gBAAAkB,EAAA3wD,GACA,GAAA2wD,EAAA,OAAAA,EACA,UAAAT,EAAAlwD,IAGAyvD,EAAA,oBAAAzuE,GACA,OAAAA,GAGAyuE,EAAA,kBAAAhyC,EAAA+mC,GACA,SAAAI,SAAAnnC,OAAAmzC,IAGA1yC,OAAA,uBAAAD,GACA,OAAAC,OAAA4W,aAAA1+B,MAAA8nB,OAAAD,IAGAC,OAAA,wBAAAD,GACA,OAAAC,OAAA2yC,cAAAz6D,MAAA8nB,OAAAD,IAGAwxC,EAAA,UAAAqB,OAAAC,UAEAtB,EAAA,iBAAAuB,GACA,uBAAAA,GAGAvB,EAAA,qBAAAuB,GACA,uBAAAA,GAAA,iBAAAA,GAGAvB,EAAA,kBAAAuB,GACA,uBAAAA,gBAAA9yC,QAGAuxC,EAAA,QAAAhrE,MAAAwsE,QAEAnxE,EAAA,qGCrKAA,EAAA,IACAA,EAAA,IACAA,EAAA,IACAA,EAAA","file":"assemblyscript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"binaryen\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"binaryen\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"assemblyscript\"] = factory(require(\"binaryen\"));\n\telse\n\t\troot[\"assemblyscript\"] = factory(root[\"binaryen\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE__22__) {\nreturn "," \t// The module cache\n \tvar installedModules = {};\n\n \t// The require function\n \tfunction __webpack_require__(moduleId) {\n\n \t\t// Check if module is in cache\n \t\tif(installedModules[moduleId]) {\n \t\t\treturn installedModules[moduleId].exports;\n \t\t}\n \t\t// Create a new module (and put it into the cache)\n \t\tvar module = installedModules[moduleId] = {\n \t\t\ti: moduleId,\n \t\t\tl: false,\n \t\t\texports: {}\n \t\t};\n\n \t\t// Execute the module function\n \t\tmodules[moduleId].call(module.exports, module, module.exports, __webpack_require__);\n\n \t\t// Flag the module as loaded\n \t\tmodule.l = true;\n\n \t\t// Return the exports of the module\n \t\treturn module.exports;\n \t}\n\n\n \t// expose the modules object (__webpack_modules__)\n \t__webpack_require__.m = modules;\n\n \t// expose the module cache\n \t__webpack_require__.c = installedModules;\n\n \t// define getter function for harmony exports\n \t__webpack_require__.d = function(exports, name, getter) {\n \t\tif(!__webpack_require__.o(exports, name)) {\n \t\t\tObject.defineProperty(exports, name, {\n \t\t\t\tconfigurable: false,\n \t\t\t\tenumerable: true,\n \t\t\t\tget: getter\n \t\t\t});\n \t\t}\n \t};\n\n \t// define __esModule on exports\n \t__webpack_require__.r = function(exports) {\n \t\tObject.defineProperty(exports, '__esModule', { value: true });\n \t};\n\n \t// getDefaultExport function for compatibility with non-harmony modules\n \t__webpack_require__.n = function(module) {\n \t\tvar getter = module && module.__esModule ?\n \t\t\tfunction getDefault() { return module['default']; } :\n \t\t\tfunction getModuleExports() { return module; };\n \t\t__webpack_require__.d(getter, 'a', getter);\n \t\treturn getter;\n \t};\n\n \t// Object.prototype.hasOwnProperty.call\n \t__webpack_require__.o = function(object, property) { return Object.prototype.hasOwnProperty.call(object, property); };\n\n \t// __webpack_public_path__\n \t__webpack_require__.p = \"\";\n\n\n \t// Load entry module and return exports\n \treturn __webpack_require__(__webpack_require__.s = 27);\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} 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/** 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\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\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 /** 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 queuedDerivedClasses = 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, queuedDerivedClasses);\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, queuedDerivedClasses);\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 = queuedDerivedClasses.length; i < k; ++i) {\r\n let derivedDeclaration = queuedDerivedClasses[i].declaration;\r\n let derivedType = assert(derivedDeclaration.extendsType);\r\n let resolved = this.resolveIdentifier(derivedType.name, null);\r\n if (resolved) {\r\n if (resolved.element.kind != ElementKind.CLASS_PROTOTYPE) {\r\n this.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n derivedType.range\r\n );\r\n continue;\r\n }\r\n queuedDerivedClasses[i].basePrototype = (\r\n resolved.element\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 /** Processes internal decorators, if present. */\r\n private checkInternalDecorators(\r\n element: Element,\r\n declaration: DeclarationStatement\r\n ): void {\r\n var parentNode = declaration.parent;\r\n if (\r\n element.is(CommonFlags.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 element.set(CommonFlags.GLOBAL);\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 queuedDerivedClasses: 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 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 );\r\n prototype.namespace = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n var implementsTypes = declaration.implementsTypes;\r\n var numImplementsTypes = implementsTypes.length;\r\n if (prototype.is(CommonFlags.UNMANAGED)) {\r\n if (implementsTypes && numImplementsTypes) {\r\n this.error(\r\n DiagnosticCode.Structs_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 } else if (numImplementsTypes) {\r\n for (let i = 0; i < numImplementsTypes; ++i) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n implementsTypes[i].range\r\n );\r\n }\r\n }\r\n\r\n // remember classes that extend another one\r\n if (declaration.extendsType) {\r\n queuedDerivedClasses.push(prototype);\r\n }\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.checkInternalDecorators(prototype, declaration);\r\n\r\n // check and possibly register string type\r\n if (\r\n prototype.is(CommonFlags.GLOBAL) &&\r\n declaration.name.text == \"String\"\r\n ) {\r\n if (!this.typesLookup.has(\"string\")) {\r\n let instance = prototype.resolve(null);\r\n if (instance) this.typesLookup.set(\"string\", instance.type);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, declaration.programLevelInternalName\r\n );\r\n }\r\n }\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 declaration,\r\n Type.void\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 // 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 );\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 );\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.checkOperators(declaration.decorators, prototype, classPrototype);\r\n }\r\n\r\n private checkOperators(\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 if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n decorator.range\r\n );\r\n continue;\r\n }\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 switch ((firstArg).value) {\r\n case \"[]\": {\r\n classPrototype.fnIndexedGet = prototype.simpleName;\r\n break;\r\n }\r\n case \"[]=\": {\r\n classPrototype.fnIndexedSet = prototype.simpleName;\r\n break;\r\n }\r\n case \"+\": {\r\n classPrototype.fnConcat = prototype.simpleName;\r\n break;\r\n }\r\n case \"==\": {\r\n classPrototype.fnEquals = prototype.simpleName;\r\n break;\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n firstArg.range\r\n );\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 } else if (decorator.decoratorKind != DecoratorKind.CUSTOM) {\r\n // methods support built-in @operator only\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n decorator.range\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 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 );\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 );\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.checkInternalDecorators(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 prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n null\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.checkInternalDecorators(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 var prototype = new InterfacePrototype(this, declaration.name.text, internalName, declaration);\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.checkInternalDecorators(prototype, declaration);\r\n }\r\n\r\n private initializeNamespace(\r\n declaration: NamespaceDeclaration,\r\n queuedExtendingClasses: 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.checkInternalDecorators(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], queuedExtendingClasses, 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], queuedExtendingClasses, 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 declaration,\r\n Type.void // resolved later on\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.checkInternalDecorators(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 ): ResolvedElement | 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 if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\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 if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\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 if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\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 if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\r\n }\r\n\r\n // search global scope\r\n if (element = this.elementsLookup.get(name)) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\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 ): ResolvedElement | null {\r\n // start by resolving the lhs target (expression before the last dot)\r\n var targetExpression = propertyAccess.expression;\r\n resolvedElement = this.resolveExpression( // reports\r\n targetExpression,\r\n contextualFunction\r\n );\r\n if (!resolvedElement) return null;\r\n var target = resolvedElement.element;\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 var targetType: Type;\r\n var member: Element | null;\r\n\r\n // Resolve variable-likes to their class type first\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n if (!(targetType = (target).type).classReference) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, targetType.toString()\r\n );\r\n return null;\r\n }\r\n target = targetType.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 if (!(targetType = getter.signature.returnType).classReference) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, targetType.toString()\r\n );\r\n return null;\r\n }\r\n target = targetType.classReference;\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 if (target.members && (member = target.members.get(propertyName))) {\r\n return resolvedElement.set(member).withTarget(target, targetExpression);\r\n }\r\n // check inherited static members on the base prototype while 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 // or inherited instance members on the base class while 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 if (target.members && (member = target.members.get(propertyName))) {\r\n return resolvedElement.set(member).withTarget(target, targetExpression);\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 ): ResolvedElement | null {\r\n // start by resolving the lhs target (expression before the last dot)\r\n var targetExpression = elementAccess.expression;\r\n resolvedElement = this.resolveExpression(\r\n targetExpression,\r\n contextualFunction\r\n );\r\n if (!resolvedElement) return null;\r\n var target = resolvedElement.element;\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 (type.classReference) {\r\n let indexedGetName = (target = type.classReference).prototype.fnIndexedGet;\r\n let indexedGet: Element | null;\r\n if (\r\n indexedGetName != null &&\r\n target.members &&\r\n (indexedGet = target.members.get(indexedGetName)) &&\r\n indexedGet.kind == ElementKind.FUNCTION_PROTOTYPE\r\n ) {\r\n return resolvedElement.set(indexedGet).withTarget(type.classReference, targetExpression);\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n targetExpression.range, target.internalName\r\n );\r\n return null;\r\n }\r\n\r\n resolveExpression(\r\n expression: Expression,\r\n contextualFunction: Function\r\n ): ResolvedElement | 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 if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(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 let parent = contextualFunction.memberOf;\r\n if (parent) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(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 let parent = contextualFunction.memberOf;\r\n if (parent && parent.kind == ElementKind.CLASS && (parent = (parent).base)) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(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.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 resolved = this.resolveExpression(\r\n (expression).expression,\r\n contextualFunction\r\n );\r\n if (resolved) {\r\n let element = resolved.element;\r\n if (element && element.kind == ElementKind.FUNCTION_PROTOTYPE) {\r\n let instance = (element).resolveUsingTypeArguments(\r\n (expression).typeArguments,\r\n contextualFunction.contextualTypeArguments,\r\n expression\r\n );\r\n if (instance) {\r\n let returnType = instance.signature.returnType;\r\n let classType = returnType.classReference;\r\n if (classType) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(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 if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(functionTarget);\r\n }\r\n }\r\n }\r\n }\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/** Common result structure returned when calling any of the resolve functions on a {@link Program}. */\r\nexport class ResolvedElement {\r\n\r\n /** The target element, if a property or element access */\r\n target: Element | null;\r\n /** The target element's expression, if a property or element access. */\r\n targetExpression: Expression | null;\r\n /** The element being accessed. */\r\n element: Element;\r\n\r\n /** Clears the target and sets the resolved element. */\r\n set(element: Element): this {\r\n this.target = null;\r\n this.targetExpression = null;\r\n this.element = element;\r\n return this;\r\n }\r\n\r\n /** Sets the resolved target in addition to the previously set element. */\r\n withTarget(target: Element, targetExpression: Expression): this {\r\n this.target = target;\r\n this.targetExpression = targetExpression;\r\n return this;\r\n }\r\n\r\n /** Tests if the target is a valid instance target. */\r\n get isInstanceTarget(): bool {\r\n return (\r\n this.target != null &&\r\n this.target.kind == ElementKind.CLASS &&\r\n this.targetExpression != null\r\n );\r\n }\r\n}\r\n\r\n// Cached result structure instance\r\nvar resolvedElement: ResolvedElement | null;\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 // Internal decorators\r\n\r\n /** Is global. */\r\n GLOBAL = 1 << 13,\r\n /** Is built-in. */\r\n BUILTIN = 1 << 14,\r\n /** Is unmanaged. */\r\n UNMANAGED = 1 << 15,\r\n /** Is sealed. */\r\n SEALED = 1 << 16,\r\n\r\n // Extended modifiers usually derived from basic modifiers or internal decorators\r\n\r\n /** Is ambient, that is either declared or nested in a declared element. */\r\n AMBIENT = 1 << 17,\r\n /** Is generic. */\r\n GENERIC = 1 << 18,\r\n /** Is part of a generic context. */\r\n GENERIC_CONTEXT = 1 << 19,\r\n /** Is an instance member. */\r\n INSTANCE = 1 << 20,\r\n /** Is a constructor. */\r\n CONSTRUCTOR = 1 << 21,\r\n /** Is an arrow function. */\r\n ARROW = 1 << 22,\r\n /** Is a module export. */\r\n MODULE_EXPORT = 1 << 23,\r\n /** Is a module import. */\r\n MODULE_IMPORT = 1 << 24,\r\n\r\n // Compilation states\r\n\r\n /** Is compiled. */\r\n COMPILED = 1 << 25,\r\n /** Has a constant value and is therefore inlined. */\r\n INLINED = 1 << 26,\r\n /** Is scoped. */\r\n SCOPED = 1 << 27\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 /** 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}\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;\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 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 declaration: VariableLikeDeclarationStatement,\r\n type: Type\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\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\r\n constructor(program: Program, simpleName: string, index: i32, type: Type) {\r\n super(program, simpleName, simpleName);\r\n this.index = index;\r\n this.type = type;\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\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 ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n this.classPrototype = classPrototype;\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 be overridden.\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(\r\n inheritedName,\r\n inheritedType\r\n );\r\n }\r\n }\r\n\r\n // override with class type arguments if a partially resolved instance method\r\n var classTypeArguments = this.classTypeArguments;\r\n if (classTypeArguments) { // set only if partially resolved\r\n assert(this.is(CommonFlags.INSTANCE));\r\n let classDeclaration = assert(classPrototype).declaration;\r\n let classTypeParameters = classDeclaration.typeParameters;\r\n let numClassTypeParameters = classTypeParameters.length;\r\n assert(numClassTypeParameters == classTypeArguments.length);\r\n for (let i = 0; i < numClassTypeParameters; ++i) {\r\n contextualTypeArguments.set(\r\n classTypeParameters[i].name.text,\r\n classTypeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!classTypeArguments);\r\n }\r\n\r\n // override with function specific type arguments\r\n var signatureNode = declaration.signature;\r\n var functionTypeParameters = declaration.typeParameters;\r\n var numFunctionTypeArguments: i32;\r\n if (functionTypeArguments && (numFunctionTypeArguments = functionTypeArguments.length)) {\r\n assert(functionTypeParameters && numFunctionTypeArguments == functionTypeParameters.length);\r\n for (let i = 0; i < numFunctionTypeArguments; ++i) {\r\n contextualTypeArguments.set(\r\n (functionTypeParameters)[i].name.text,\r\n functionTypeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!functionTypeParameters || functionTypeParameters.length == 0);\r\n }\r\n\r\n // resolve class if an instance method\r\n var classInstance: Class | null = null;\r\n var thisType: Type | null = null;\r\n if (isInstance) {\r\n classInstance = assert(classPrototype).resolve(classTypeArguments, contextualTypeArguments); // reports\r\n if (!classInstance) return null;\r\n thisType = classInstance.type;\r\n }\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(this, internalName, signature, classInstance ? classInstance : classPrototype);\r\n instance.contextualTypeArguments = contextualTypeArguments;\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 assert(this.classPrototype);\r\n if (classTypeArguments && classTypeArguments.length) {\r\n let partialPrototype = new FunctionPrototype(\r\n this.program,\r\n this.simpleName,\r\n this.internalName,\r\n this.declaration,\r\n this.classPrototype\r\n );\r\n partialPrototype.flags = this.flags;\r\n partialPrototype.classTypeArguments = classTypeArguments;\r\n return partialPrototype;\r\n }\r\n return this; // no need to clone\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(\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\r\n private nextBreakId: i32 = 0;\r\n private breakStack: i32[] | null = null;\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 ) {\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 if (!(prototype.is(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 contextualTypeArguments = (memberOf).contextualTypeArguments;\r\n if (contextualTypeArguments) {\r\n if (!this.contextualTypeArguments) {\r\n this.contextualTypeArguments = new Map();\r\n }\r\n for (let [inheritedName, inheritedType] of contextualTypeArguments) {\r\n this.contextualTypeArguments.set(inheritedName, inheritedType);\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 )\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): 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 );\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 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 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(prototype: FieldPrototype, internalName: string, type: Type) {\r\n super(prototype.program, prototype.simpleName, internalName);\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\r\n /** Overloaded indexed get method, if any. */\r\n fnIndexedGet: string | null = null;\r\n /** Overloaded indexed set method, if any. */\r\n fnIndexedSet: string | null = null;\r\n /** Overloaded concatenation method, if any. */\r\n fnConcat: string | null = null;\r\n /** Overloaded equality comparison method, if any. */\r\n fnEquals: string | null = null;\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: ClassDeclaration\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 /** 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.is(CommonFlags.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.prototype.is(CommonFlags.UNMANAGED) != this.is(CommonFlags.UNMANAGED)) {\r\n this.program.error(\r\n DiagnosticCode.Structs_cannot_extend_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 internalName = this.internalName;\r\n if (instanceKey.length) {\r\n internalName += \"<\" + instanceKey + \">\";\r\n }\r\n instance = new Class(this, 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 if (this.constructorPrototype) {\r\n let partialConstructor = this.constructorPrototype.resolvePartial(typeArguments); // reports\r\n if (partialConstructor) {\r\n instance.constructorInstance = partialConstructor.resolve(); // reports\r\n }\r\n // TODO: ^ doesn't know the return type, hence returns null\r\n }\r\n\r\n if (this.instanceMembers) {\r\n for (let member of this.instanceMembers.values()) {\r\n switch (member.kind) {\r\n case ElementKind.FIELD_PROTOTYPE: { // fields are layed out in advance\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 );\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 case ElementKind.FUNCTION_PROTOTYPE: { // instance methods remain partially resolved prototypes until compiled\r\n if (!instance.members) instance.members = new Map();\r\n let methodPrototype = (member).resolvePartial(typeArguments); // reports\r\n if (methodPrototype) {\r\n methodPrototype.internalName = internalName + INSTANCE_DELIMITER + methodPrototype.simpleName;\r\n instance.members.set(member.simpleName, methodPrototype);\r\n }\r\n break;\r\n }\r\n case ElementKind.PROPERTY: { // instance properties are cloned with partially resolved getters and setters\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 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\r\n /** Constructs a new class. */\r\n constructor(\r\n prototype: ClassPrototype,\r\n internalName: string,\r\n typeArguments: Type[] | null = null,\r\n base: Class | null = null\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\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 if (base.contextualTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [baseName, baseType] of base.contextualTypeArguments) {\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 {\r\n if (current == target) {\r\n return true;\r\n }\r\n } while (current = current.base);\r\n return false;\r\n }\r\n\r\n toString(): string {\r\n return this.prototype.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 ) {\r\n super(program, simpleName, internalName, declaration);\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 internalName: string,\r\n typeArguments: Type[] = [],\r\n base: Interface | null = null\r\n ) {\r\n super(prototype, 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\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 /** Scoped local variables. */\r\n scopedLocals: 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 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 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(name: string, type: Type, reportNode: Node): void {\r\n var scopedLocal = this.currentFunction.getTempLocal(type);\r\n if (!this.scopedLocals) this.scopedLocals = new Map();\r\n else if (this.scopedLocals.has(name)) {\r\n this.currentFunction.program.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n reportNode.range\r\n );\r\n return;\r\n }\r\n this.scopedLocals.set(name, 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 /** 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 }\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))) {\r\n start--;\r\n }\r\n while (end < len && !isLineBreak(text.charCodeAt(end))) {\r\n end++;\r\n }\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) {\r\n sb.push(\"~\");\r\n }\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// 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 if (expression.kind == NodeKind.IDENTIFIER) {\r\n switch ((expression).text) {\r\n case \"global\": {\r\n stmt.decoratorKind = DecoratorKind.GLOBAL;\r\n break;\r\n }\r\n case \"operator\": {\r\n stmt.decoratorKind = DecoratorKind.OPERATOR;\r\n break;\r\n }\r\n case \"unmanaged\": {\r\n stmt.decoratorKind = DecoratorKind.UNMANAGED;\r\n break;\r\n }\r\n case \"offset\": {\r\n stmt.decoratorKind = DecoratorKind.OFFSET;\r\n break;\r\n }\r\n default: {\r\n stmt.decoratorKind = DecoratorKind.CUSTOM;\r\n break;\r\n }\r\n }\r\n } else {\r\n stmt.decoratorKind = DecoratorKind.CUSTOM;\r\n }\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[], // can't be a function\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; 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 extendsType: TypeNode | null, // can't be a function\r\n members: DeclarationStatement[],\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.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.members = members; setParent(members, 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}\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 OFFSET\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. */\r\n extendsType: TypeNode | null; // can't be a function\r\n /** Interface types being implemented. */\r\n implementsTypes: TypeNode[]; // can't be a function\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\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 tokenFomKeyword(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 = tokenFomKeyword(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 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 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}\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\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 /** 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} 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} 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\r\n PATH_DELIMITER,\r\n LIBRARY_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} 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\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\r\n /** Start function being compiled. */\r\n startFunction: Function;\r\n /** Start function statements. */\r\n startFunctionBody: ExpressionRef[] = [];\r\n\r\n /** Current function in compilation. */\r\n currentFunction: Function;\r\n /** Current enum in compilation. */\r\n currentEnum: Enum | null = null;\r\n /** Current type in compilation. */\r\n currentType: Type = Type.void;\r\n\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\r\n /** Function table being compiled. */\r\n functionTable: Function[] = new Array();\r\n\r\n /** Already processed file names. */\r\n files: Set = new Set();\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: FunctionRef;\r\n module.setStart(\r\n 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 );\r\n startFunctionInstance.finalize(module, 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) {\r\n module.addMemoryImport(\"0\", \"env\", \"memory\");\r\n }\r\n\r\n // set up function table\r\n var functionTable = this.functionTable;\r\n var functionTableSize = functionTable.length;\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 }\r\n\r\n // import table if requested\r\n if (options.importTable) {\r\n module.addTableImport(\"0\", \"env\", \"table\");\r\n if (!functionTableSize) 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 sources = this.program.sources;\r\n\r\n // try file.ts\r\n var expected = normalizedPathWithoutExtension + \".ts\";\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n let source = sources[i];\r\n if (source.normalizedPath == expected) {\r\n this.compileSource(source);\r\n return;\r\n }\r\n }\r\n\r\n // try file/index.ts\r\n expected = normalizedPathWithoutExtension + \"/index.ts\";\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n let source = sources[i];\r\n if (source.normalizedPath == expected) {\r\n this.compileSource(source);\r\n return;\r\n }\r\n }\r\n\r\n // try (lib)/file.ts\r\n expected = LIBRARY_PREFIX + normalizedPathWithoutExtension + \".ts\";\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n let source = sources[i];\r\n if (source.normalizedPath == expected) {\r\n this.compileSource(source);\r\n return;\r\n }\r\n }\r\n\r\n this.error(\r\n DiagnosticCode.File_0_not_found,\r\n reportNode.range, normalizedPathWithoutExtension\r\n );\r\n }\r\n\r\n compileSource(source: Source): void {\r\n var files = this.files;\r\n var normalizedPath = source.normalizedPath;\r\n if (files.has(normalizedPath)) return;\r\n files.add(normalizedPath);\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.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\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 }\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 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.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 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.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\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 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 (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 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 && 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.simpleName == \"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,\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,\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.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 assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\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 currentFunction = this.currentFunction;\r\n var expression: ExpressionRef = 0;\r\n if (statement.value) {\r\n expression = this.compileExpression(\r\n statement.value,\r\n currentFunction.signature.returnType\r\n );\r\n }\r\n\r\n // Remember that this flow returns\r\n currentFunction.flow.set(FlowFlags.RETURNS);\r\n\r\n return this.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 this.module.createUnreachable();\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 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 currentFunction.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 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 0;\r\n }\r\n scopedLocals.set(name, local);\r\n return 0;\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 (declaration.is(CommonFlags.LET)) { // here: not top-level\r\n currentFunction.flow.addScopedLocal(name, type, declaration.name); // reports\r\n } else {\r\n currentFunction.addLocal(type, name); // reports\r\n }\r\n if (init) {\r\n initializers.push(this.compileAssignmentWithValue(declaration.name, init));\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n element.declaration.range\r\n );\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.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.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 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 switch (expression.operator) {\r\n case Token.LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType);\r\n leftType = this.currentType;\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: { // TODO: check operator overload\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 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: { // TODO: check operator overload\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 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: { // TODO: check operator overload\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 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: { // TODO: check operator overload\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 // TODO?\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 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: { // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classInstance = assert(this.currentType.classReference);\r\n let operatorName = classInstance.prototype.fnEquals;\r\n if (operatorName != null) {\r\n expr = this.compileOperatorOverload(classInstance, operatorName, leftExpr, rightExpr);\r\n assert(this.currentType == Type.bool);\r\n break;\r\n }\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.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 // TODO?\r\n case Token.EXCLAMATION_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType);\r\n leftType = this.currentType;\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: // TODO: check operator overload\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 if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\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: { // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classInstance = assert(this.currentType.classReference);\r\n let operatorName = classInstance.prototype.fnConcat;\r\n if (operatorName != null) {\r\n expr = this.compileOperatorOverload(classInstance, operatorName, leftExpr, rightExpr);\r\n break;\r\n }\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 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 if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\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: // TODO: check operator overload\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 if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\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: // TODO: check operator overload\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.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 if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\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: { // TODO: check operator overload\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 if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\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: { // TODO: check operator overload\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 case TypeKind.F64: {\r\n // TODO: internal fmod, possibly simply imported from JS\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 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 if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\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: // TODO: check operator overload\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 if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\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: // TODO: check operator overload\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 if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\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: // TODO: check operator overload\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 compileOperatorOverload(\r\n classInstance: Class,\r\n operatorName: string,\r\n leftExpr: ExpressionRef,\r\n rightExpr: ExpressionRef\r\n ): ExpressionRef {\r\n var classPrototype = classInstance.prototype;\r\n var operatorPrototype = assert(assert(classPrototype.members).get(operatorName));\r\n assert(operatorPrototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n var operatorInstance = (operatorPrototype).resolve();\r\n if (!operatorInstance) return this.module.createUnreachable();\r\n return this.makeCallDirect(operatorInstance, [ leftExpr, rightExpr ]);\r\n }\r\n\r\n compileAssignment(expression: Expression, valueExpression: Expression, contextualType: Type): ExpressionRef {\r\n var currentFunction = this.currentFunction;\r\n var resolved = this.program.resolveExpression(expression, currentFunction); // reports\r\n if (!resolved) return this.module.createUnreachable();\r\n\r\n // to compile just the value, we need to know the target's type\r\n var element = resolved.element;\r\n var elementType: Type;\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(element)) { // reports; not yet compiled if a static field compiled as a global\r\n return this.module.createUnreachable();\r\n }\r\n assert((element).type != Type.void, \"concrete type expected\");\r\n // fall-through\r\n }\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n elementType = (element).type;\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let prototype = (element).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);\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, (element).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (expression.kind == NodeKind.ELEMENTACCESS) { // @operator(\"[]\")\r\n if (resolved.target && resolved.target.kind == ElementKind.CLASS) {\r\n if (element.simpleName == (resolved.target).prototype.fnIndexedGet) {\r\n let resolvedIndexedSet = (element).resolve(null); // reports\r\n if (resolvedIndexedSet) {\r\n elementType = resolvedIndexedSet.signature.returnType;\r\n break;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, (resolved.target).toString()\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\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 resolved = this.program.resolveExpression(expression, this.currentFunction); // reports\r\n if (!resolved) return module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n switch (element.kind) {\r\n case ElementKind.LOCAL: {\r\n this.currentType = tee ? (element).type : Type.void;\r\n if ((element).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, (element).internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n return tee\r\n ? module.createTeeLocal((element).index, valueWithCorrectType)\r\n : module.createSetLocal((element).index, valueWithCorrectType);\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(element)) return module.createUnreachable();\r\n let type = (element).type;\r\n assert(type != Type.void);\r\n this.currentType = tee ? type : Type.void;\r\n if ((element).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 (element).internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (tee) {\r\n let nativeType = type.toNativeType();\r\n let internalName = (element).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((element).internalName, valueWithCorrectType);\r\n }\r\n }\r\n case ElementKind.FIELD: {\r\n if ((element).is(CommonFlags.READONLY)) {\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, (element).internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n assert(resolved.isInstanceTarget);\r\n let targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n (resolved.target).type\r\n );\r\n let type = (element).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 targetExpr,\r\n module.createGetLocal(tempLocalIndex, nativeType),\r\n nativeType,\r\n (element).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 targetExpr,\r\n valueWithCorrectType,\r\n nativeType,\r\n (element).memoryOffset\r\n );\r\n }\r\n }\r\n case ElementKind.PROPERTY: {\r\n let setterPrototype = (element).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 assert(resolved.isInstanceTarget);\r\n let thisArg = this.compileExpression(\r\n resolved.targetExpression,\r\n (resolved.target).type\r\n );\r\n return this.makeCallDirect(setterInstance, [ thisArg, 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 = (element).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 assert(resolved.isInstanceTarget);\r\n let thisArg = this.compileExpression(\r\n resolved.targetExpression,\r\n (resolved.target).type\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, thisArg),\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, (element).internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: { // @operator(\"[]\") ?\r\n if (expression.kind == NodeKind.ELEMENTACCESS) {\r\n assert(resolved.isInstanceTarget);\r\n let getterInstance = (element).resolve(); // reports\r\n if (!getterInstance) return module.createUnreachable();\r\n // obtain @operator(\"[]=\")\r\n let setElementName = (resolved.target).prototype.fnIndexedSet;\r\n let setElement: Element | null;\r\n if (\r\n setElementName != null &&\r\n (resolved.target).members &&\r\n (setElement = (>(resolved.target).members).get(setElementName)) &&\r\n setElement.kind == ElementKind.FUNCTION_PROTOTYPE\r\n ) {\r\n let setterInstance = (setElement).resolve(); // reports\r\n if (!setterInstance) return module.createUnreachable();\r\n let targetType = (resolved.target).type;\r\n let targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n targetType\r\n );\r\n let elementExpr = this.compileExpression(\r\n (expression).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 = getterInstance.signature.returnType;\r\n this.currentFunction.freeTempLocal(tempLocalTarget);\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [\r\n module.createTeeLocal(tempLocalTarget.index, targetExpr),\r\n module.createTeeLocal(tempLocalElement.index, elementExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(getterInstance, [\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(setterInstance, [\r\n targetExpr,\r\n elementExpr,\r\n valueWithCorrectType\r\n ]);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, (resolved.target).internalName\r\n );\r\n return module.createUnreachable();\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 resolved = this.program.resolveExpression(expression.expression, currentFunction); // reports\r\n if (!resolved) return module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n var signature: Signature | null;\r\n var indexArg: ExpressionRef;\r\n switch (element.kind) {\r\n\r\n // direct call: concrete function\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let prototype = element;\r\n\r\n // builtins are compiled on the fly\r\n if (prototype.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) {\r\n let expr = compileBuiltinCall( // reports\r\n this,\r\n prototype,\r\n prototype.resolveBuiltinTypeArguments(\r\n expression.typeArguments,\r\n currentFunction.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 module.createUnreachable();\r\n }\r\n return expr;\r\n\r\n // otherwise compile to a call\r\n } else {\r\n let instance = prototype.resolveUsingTypeArguments( // reports\r\n expression.typeArguments,\r\n currentFunction.contextualTypeArguments,\r\n expression\r\n );\r\n if (!instance) return module.createUnreachable();\r\n let thisArg: ExpressionRef = 0;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n assert(resolved.isInstanceTarget);\r\n thisArg = this.compileExpression(\r\n resolved.targetExpression,\r\n (resolved.target).type\r\n );\r\n if (!thisArg) return module.createUnreachable();\r\n } else {\r\n assert(!resolved.isInstanceTarget);\r\n }\r\n return this.compileCallDirect(instance, expression.arguments, expression, thisArg);\r\n }\r\n }\r\n\r\n // indirect call: index argument with signature\r\n case ElementKind.LOCAL: {\r\n if (signature = (element).type.signatureReference) {\r\n indexArg = module.createGetLocal((element).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, (element).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (signature = (element).type.signatureReference) {\r\n indexArg = module.createGetGlobal((element).internalName, (element).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, (element).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FIELD: {\r\n let type = (element).type;\r\n if (signature = type.signatureReference) {\r\n let targetExpr = this.compileExpression(assert(resolved.targetExpression), type);\r\n indexArg = module.createLoad(\r\n 4,\r\n false,\r\n targetExpr,\r\n NativeType.I32,\r\n (element).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, (element).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FUNCTION_TARGET: {\r\n signature = (element).signature;\r\n indexArg = this.compileExpression(expression.expression, (element).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 /**\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 ): 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 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 /** 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 = maxOperands - minOperands;\r\n assert(numOptional);\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 // append an additional parameter taking the number of optional arguments provided\r\n var trampolineParameterTypes = new Array(maxArguments + 1);\r\n for (let i = 0; i < maxArguments; ++i) {\r\n trampolineParameterTypes[i] = originalParameterTypes[i];\r\n }\r\n trampolineParameterTypes[maxArguments] = Type.i32;\r\n\r\n // create the trampoline element\r\n var trampolineSignature = new Signature(trampolineParameterTypes, commonReturnType, commonThisType);\r\n var trampolineName = originalName + \"|trampoline\";\r\n trampolineSignature.requiredParameters = maxArguments + 1;\r\n trampoline = new Function(original.prototype, trampolineName, trampolineSignature, original.memberOf);\r\n trampoline.flags = original.flags;\r\n trampoline.contextualTypeArguments = original.contextualTypeArguments;\r\n trampoline.set(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. 'with0'\r\n var names = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n let label = \"N=\" + i.toString();\r\n names[i] = label;\r\n }\r\n var body = module.createBlock(names[0], [\r\n module.createBlock(\"N=invalid\", [\r\n module.createSwitch(names, \"N=invalid\",\r\n // condition is number of provided optional operands, so subtract required operands\r\n minOperands\r\n ? module.createBinary(\r\n BinaryOp.SubI32,\r\n module.createGetLocal(maxOperands, NativeType.I32),\r\n module.createI32(minOperands)\r\n )\r\n : module.createGetLocal(maxOperands, 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(instance: Function, operands: ExpressionRef[] | null = null): 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 var module = this.module;\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n if (numOperands < maxOperands) {\r\n instance = this.ensureTrampoline(instance);\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n if (!operands) {\r\n operands = new Array(maxOperands + 1);\r\n operands.length = 0;\r\n }\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(instance.signature.parameterTypes[i].toNativeZero(module));\r\n }\r\n operands.push(module.createI32(numOperands)); // actual number of provided operands\r\n }\r\n var returnType = instance.signature.returnType;\r\n this.currentType = returnType;\r\n if (instance.is(CommonFlags.MODULE_IMPORT)) {\r\n return module.createCallImport(instance.internalName, operands, returnType.toNativeType());\r\n } else {\r\n return module.createCall(instance.internalName, operands, returnType.toNativeType());\r\n }\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(signature: Signature, indexArg: ExpressionRef, operands: ExpressionRef[]): ExpressionRef {\r\n var returnType = signature.returnType;\r\n this.currentType = returnType;\r\n this.ensureFunctionType(signature);\r\n return this.module.createCallIndirect(indexArg, operands, signature.toSignatureString());\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 resolved = this.program.resolveElementAccess(expression, this.currentFunction); // reports\r\n if (!resolved) return this.module.createUnreachable();\r\n\r\n assert( // should be guaranteed by resolveElementAccess\r\n resolved.element.kind == ElementKind.FUNCTION_PROTOTYPE &&\r\n resolved.target &&\r\n resolved.target.kind == ElementKind.CLASS\r\n );\r\n var target = resolved.target;\r\n var instance = (resolved.element).resolve( // reports\r\n null,\r\n target.contextualTypeArguments\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n var thisArg = this.compileExpression(expression.expression, target.type);\r\n return this.compileCallDirect(instance, [\r\n expression.elementExpression\r\n ], expression, thisArg);\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 + \"~\" + simpleName,\r\n declaration\r\n );\r\n var instance = this.compileFunctionUsingTypeArguments(\r\n prototype,\r\n [],\r\n currentFunction.contextualTypeArguments,\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 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 let flow = currentFunction.flow;\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 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 resolved = this.program.resolveIdentifier( // reports\r\n expression,\r\n this.currentFunction,\r\n this.currentEnum\r\n );\r\n if (!resolved) return module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n switch (element.kind) {\r\n case ElementKind.LOCAL: {\r\n if ((element).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(element, contextualType, retainConstantType);\r\n }\r\n let localType = (element).type;\r\n let localIndex = (element).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 (element.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) {\r\n return compileBuiltinGetConstant(this, element, expression);\r\n }\r\n if (!this.compileGlobal(element)) { // reports; not yet compiled if a static field\r\n return this.module.createUnreachable();\r\n }\r\n let globalType = (element).type;\r\n assert(globalType != Type.void);\r\n if ((element).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(element, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return this.module.createGetGlobal((element).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // here: if referenced from within the same enum\r\n if (!element.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 ((element).is(CommonFlags.INLINED)) {\r\n return this.module.createI32((element).constantValue);\r\n }\r\n return this.module.createGetGlobal((element).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let instance = (element).resolve(\r\n null,\r\n this.currentFunction.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.elementsLookup.get(\"Array\")\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.I16: {\r\n if (i64_is_i16(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n if (i64_is_i32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U8: {\r\n if (i64_is_u8(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.U32: {\r\n if (i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.BOOL: {\r\n if (i64_is_bool(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n if (!this.options.isWasm64) {\r\n if (i64_is_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_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.elementsLookup.get(\"Array\"));\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 elementSize = expressions.length;\r\n var nativeType = elementType.toNativeType();\r\n var values: usize;\r\n var memorySize: usize;\r\n switch (nativeType) {\r\n case NativeType.I32: {\r\n values = changetype(new Int32Array(elementSize));\r\n memorySize = elementSize * 4;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n values = changetype(new Array(elementSize));\r\n memorySize = elementSize * 8;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n values = changetype(new Float32Array(elementSize));\r\n memorySize = elementSize * 4;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n values = changetype(new Float64Array(elementSize));\r\n memorySize = elementSize * 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(elementSize);\r\n var expr: BinaryenExpressionRef;\r\n for (let i = 0; i < elementSize; ++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 var headerSize = usizeTypeSize + 4 + 4; // memory + capacity + length\r\n\r\n if (isStatic) {\r\n let buffer = new Uint8Array(headerSize + memorySize);\r\n let segment = this.addMemorySegment(buffer);\r\n\r\n // make header\r\n let offset = 0;\r\n if (usizeTypeSize == 8) {\r\n writeI64(i64_add(segment.offset, i64_new(headerSize)), buffer, 0); // memory\r\n } else {\r\n assert(i64_high(segment.offset) == 0);\r\n writeI32(i64_low(segment.offset) + headerSize, buffer, 0); // memory\r\n }\r\n offset += usizeTypeSize;\r\n writeI32(elementSize, buffer, offset); // capacity\r\n offset += 4;\r\n writeI32(elementSize, buffer, offset); // length\r\n offset += 4;\r\n assert(offset == headerSize);\r\n\r\n // make memory\r\n switch (nativeType) {\r\n case NativeType.I32: {\r\n for (let i = 0; i < elementSize; ++i) {\r\n writeI32(changetype(values)[i], buffer, offset); offset += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.I64: {\r\n for (let i = 0; i < elementSize; ++i) {\r\n writeI64(changetype(values)[i], buffer, offset); offset += 8;\r\n }\r\n break;\r\n }\r\n case NativeType.F32: {\r\n for (let i = 0; i < elementSize; ++i) {\r\n writeF32(changetype(values)[i], buffer, offset); offset += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.F64: {\r\n for (let i = 0; i < elementSize; ++i) {\r\n writeF64(changetype(values)[i], buffer, 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 == headerSize + memorySize);\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 resolved = this.program.resolveExpression( // reports\r\n expression.expression,\r\n currentFunction\r\n );\r\n if (!resolved) return module.createUnreachable();\r\n if (resolved.element.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 = resolved.element;\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 var constructorInstance = classInstance.constructorInstance;\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 resolved = program.resolvePropertyAccess(propertyAccess, this.currentFunction); // reports\r\n if (!resolved) return module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n var targetExpr: ExpressionRef;\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: { // static property\r\n if (element.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) {\r\n return compileBuiltinGetConstant(this, element, propertyAccess);\r\n }\r\n if (!this.compileGlobal(element)) { // reports; not yet compiled if a static field\r\n return module.createUnreachable();\r\n }\r\n let globalType = (element).type;\r\n assert(globalType != Type.void);\r\n if ((element).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(element, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return module.createGetGlobal((element).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // enum value\r\n if (!this.compileEnum((element).enum)) {\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((element).is(CommonFlags.INLINED)) {\r\n return module.createI32((element).constantValue);\r\n }\r\n return module.createGetGlobal((element).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FIELD: { // instance field\r\n assert(resolved.isInstanceTarget);\r\n assert((element).memoryOffset >= 0);\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n this.options.usizeType,\r\n ConversionKind.NONE\r\n );\r\n this.currentType = (element).type;\r\n return module.createLoad(\r\n (element).type.size >> 3,\r\n (element).type.is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n targetExpr,\r\n (element).type.toNativeType(),\r\n (element).memoryOffset\r\n );\r\n }\r\n case ElementKind.PROPERTY: { // instance property (here: getter)\r\n let prototype = (element).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 targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n (parent).type\r\n );\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], propertyAccess, targetExpr);\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, (element).simpleName, (element).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(\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 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 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 fieldType.toNativeType(),\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 initializers.push(module.createStore(field.type.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n field.type.toNativeZero(module),\r\n field.type.toNativeType(),\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","/**\n * Generated from diagnosticsMessages.json. Do not edit.\n * @module diagnostics\n *//***/\n\n/* tslint:disable:max-line-length */\n\n/** Enum of available diagnostic codes. */\nexport enum DiagnosticCode {\n Operation_not_supported = 100,\n Operation_is_unsafe = 101,\n Conversion_from_type_0_to_1_requires_an_explicit_cast = 200,\n Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit = 201,\n Type_0_cannot_be_changed_to_type_1 = 202,\n Type_0_cannot_be_reinterpreted_as_type_1 = 203,\n Basic_type_0_cannot_be_nullable = 204,\n Cannot_export_a_mutable_global = 205,\n Compiling_constant_with_non_constant_initializer_as_mutable = 206,\n Structs_cannot_extend_classes_and_vice_versa = 207,\n Structs_cannot_implement_interfaces = 208,\n Invalid_regular_expression_flags = 209,\n Implementation_0_must_match_the_signature_1 = 210,\n Class_0_is_sealed_and_cannot_be_extended = 211,\n Unterminated_string_literal = 1002,\n Identifier_expected = 1003,\n _0_expected = 1005,\n A_file_cannot_have_a_reference_to_itself = 1006,\n Trailing_comma_not_allowed = 1009,\n Unexpected_token = 1012,\n A_rest_parameter_must_be_last_in_a_parameter_list = 1014,\n Parameter_cannot_have_question_mark_and_initializer = 1015,\n A_required_parameter_cannot_follow_an_optional_parameter = 1016,\n Enum_member_must_have_initializer = 1061,\n Statements_are_not_allowed_in_ambient_contexts = 1036,\n Initializers_are_not_allowed_in_ambient_contexts = 1039,\n _0_modifier_cannot_be_used_here = 1042,\n A_rest_parameter_cannot_be_optional = 1047,\n A_rest_parameter_cannot_have_an_initializer = 1048,\n A_set_accessor_must_have_exactly_one_parameter = 1049,\n A_set_accessor_parameter_cannot_have_an_initializer = 1052,\n A_get_accessor_cannot_have_parameters = 1054,\n Type_parameters_cannot_appear_on_a_constructor_declaration = 1092,\n Type_annotation_cannot_appear_on_a_constructor_declaration = 1093,\n An_accessor_cannot_have_type_parameters = 1094,\n A_set_accessor_cannot_have_a_return_type_annotation = 1095,\n Type_parameter_list_cannot_be_empty = 1098,\n A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement = 1104,\n A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement = 1105,\n A_return_statement_can_only_be_used_within_a_function_body = 1108,\n Expression_expected = 1109,\n Type_expected = 1110,\n A_default_clause_cannot_appear_more_than_once_in_a_switch_statement = 1113,\n Duplicate_label_0 = 1114,\n Octal_literals_are_not_allowed_in_strict_mode = 1121,\n Digit_expected = 1124,\n Hexadecimal_digit_expected = 1125,\n Unexpected_end_of_text = 1126,\n Invalid_character = 1127,\n _case_or_default_expected = 1130,\n A_declare_modifier_cannot_be_used_in_an_already_ambient_context = 1038,\n Type_argument_expected = 1140,\n String_literal_expected = 1141,\n Line_break_not_permitted_here = 1142,\n Declaration_expected = 1146,\n _const_declarations_must_be_initialized = 1155,\n Unterminated_regular_expression_literal = 1161,\n Binary_digit_expected = 1177,\n Octal_digit_expected = 1178,\n An_implementation_cannot_be_declared_in_ambient_contexts = 1183,\n An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive = 1198,\n Unterminated_Unicode_escape_sequence = 1199,\n Decorators_are_not_valid_here = 1206,\n _abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration = 1242,\n A_class_may_only_extend_another_class = 1311,\n Duplicate_identifier_0 = 2300,\n Cannot_find_name_0 = 2304,\n Module_0_has_no_exported_member_1 = 2305,\n Generic_type_0_requires_1_type_argument_s = 2314,\n Type_0_is_not_generic = 2315,\n Type_0_is_not_assignable_to_type_1 = 2322,\n Index_signature_is_missing_in_type_0 = 2329,\n _this_cannot_be_referenced_in_current_location = 2332,\n _super_can_only_be_referenced_in_a_derived_class = 2335,\n Property_0_does_not_exist_on_type_1 = 2339,\n Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures = 2349,\n Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature = 2351,\n A_function_whose_declared_type_is_not_void_must_return_a_value = 2355,\n The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access = 2357,\n The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access = 2364,\n Operator_0_cannot_be_applied_to_types_1_and_2 = 2365,\n _get_and_set_accessor_must_have_the_same_type = 2380,\n Constructor_implementation_is_missing = 2390,\n Function_implementation_is_missing_or_not_immediately_following_the_declaration = 2391,\n Multiple_constructor_implementations_are_not_allowed = 2392,\n Duplicate_function_implementation = 2393,\n Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local = 2395,\n Type_0_has_no_property_1 = 2460,\n The_0_operator_cannot_be_applied_to_type_1 = 2469,\n Export_declaration_conflicts_with_exported_declaration_of_0 = 2484,\n Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property = 2540,\n The_target_of_an_assignment_must_be_a_variable_or_a_property_access = 2541,\n Index_signature_in_type_0_only_permits_reading = 2542,\n Expected_0_arguments_but_got_1 = 2554,\n Expected_at_least_0_arguments_but_got_1 = 2555,\n Expected_0_type_arguments_but_got_1 = 2558,\n A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums = 2651,\n Namespace_0_has_no_exported_member_1 = 2694,\n File_0_not_found = 6054\n}\n\n/** Translates a diagnostic code to its respective string. */\nexport function diagnosticCodeToString(code: DiagnosticCode): string {\n switch (code) {\n case 100: return \"Operation not supported.\";\n case 101: return \"Operation is unsafe.\";\n case 200: return \"Conversion from type '{0}' to '{1}' requires an explicit cast.\";\n case 201: return \"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.\";\n case 202: return \"Type '{0}' cannot be changed to type '{1}'.\";\n case 203: return \"Type '{0}' cannot be reinterpreted as type '{1}'.\";\n case 204: return \"Basic type '{0}' cannot be nullable.\";\n case 205: return \"Cannot export a mutable global.\";\n case 206: return \"Compiling constant with non-constant initializer as mutable.\";\n case 207: return \"Structs cannot extend classes and vice-versa.\";\n case 208: return \"Structs cannot implement interfaces.\";\n case 209: return \"Invalid regular expression flags.\";\n case 210: return \"Implementation '{0}' must match the signature '{1}'.\";\n case 211: return \"Class '{0}' is sealed and cannot be extended.\";\n case 1002: return \"Unterminated string literal.\";\n case 1003: return \"Identifier expected.\";\n case 1005: return \"'{0}' expected.\";\n case 1006: return \"A file cannot have a reference to itself.\";\n case 1009: return \"Trailing comma not allowed.\";\n case 1012: return \"Unexpected token.\";\n case 1014: return \"A rest parameter must be last in a parameter list.\";\n case 1015: return \"Parameter cannot have question mark and initializer.\";\n case 1016: return \"A required parameter cannot follow an optional parameter.\";\n case 1061: return \"Enum member must have initializer.\";\n case 1036: return \"Statements are not allowed in ambient contexts.\";\n case 1039: return \"Initializers are not allowed in ambient contexts.\";\n case 1042: return \"'{0}' modifier cannot be used here.\";\n case 1047: return \"A rest parameter cannot be optional.\";\n case 1048: return \"A rest parameter cannot have an initializer.\";\n case 1049: return \"A 'set' accessor must have exactly one parameter.\";\n case 1052: return \"A 'set' accessor parameter cannot have an initializer.\";\n case 1054: return \"A 'get' accessor cannot have parameters.\";\n case 1092: return \"Type parameters cannot appear on a constructor declaration.\";\n case 1093: return \"Type annotation cannot appear on a constructor declaration.\";\n case 1094: return \"An accessor cannot have type parameters.\";\n case 1095: return \"A 'set' accessor cannot have a return type annotation.\";\n case 1098: return \"Type parameter list cannot be empty.\";\n case 1104: return \"A 'continue' statement can only be used within an enclosing iteration statement.\";\n case 1105: return \"A 'break' statement can only be used within an enclosing iteration or switch statement.\";\n case 1108: return \"A 'return' statement can only be used within a function body.\";\n case 1109: return \"Expression expected.\";\n case 1110: return \"Type expected.\";\n case 1113: return \"A 'default' clause cannot appear more than once in a 'switch' statement.\";\n case 1114: return \"Duplicate label '{0}'.\";\n case 1121: return \"Octal literals are not allowed in strict mode.\";\n case 1124: return \"Digit expected.\";\n case 1125: return \"Hexadecimal digit expected.\";\n case 1126: return \"Unexpected end of text.\";\n case 1127: return \"Invalid character.\";\n case 1130: return \"'case' or 'default' expected.\";\n case 1038: return \"A 'declare' modifier cannot be used in an already ambient context.\";\n case 1140: return \"Type argument expected.\";\n case 1141: return \"String literal expected.\";\n case 1142: return \"Line break not permitted here.\";\n case 1146: return \"Declaration expected.\";\n case 1155: return \"'const' declarations must be initialized.\";\n case 1161: return \"Unterminated regular expression literal.\";\n case 1177: return \"Binary digit expected.\";\n case 1178: return \"Octal digit expected.\";\n case 1183: return \"An implementation cannot be declared in ambient contexts.\";\n case 1198: return \"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.\";\n case 1199: return \"Unterminated Unicode escape sequence.\";\n case 1206: return \"Decorators are not valid here.\";\n case 1242: return \"'abstract' modifier can only appear on a class, method, or property declaration.\";\n case 1311: return \"A class may only extend another class.\";\n case 2300: return \"Duplicate identifier '{0}'.\";\n case 2304: return \"Cannot find name '{0}'.\";\n case 2305: return \"Module '{0}' has no exported member '{1}'.\";\n case 2314: return \"Generic type '{0}' requires {1} type argument(s).\";\n case 2315: return \"Type '{0}' is not generic.\";\n case 2322: return \"Type '{0}' is not assignable to type '{1}'.\";\n case 2329: return \"Index signature is missing in type '{0}'.\";\n case 2332: return \"'this' cannot be referenced in current location.\";\n case 2335: return \"'super' can only be referenced in a derived class.\";\n case 2339: return \"Property '{0}' does not exist on type '{1}'.\";\n case 2349: return \"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.\";\n case 2351: return \"Cannot use 'new' with an expression whose type lacks a construct signature.\";\n case 2355: return \"A function whose declared type is not 'void' must return a value.\";\n case 2357: return \"The operand of an increment or decrement operator must be a variable or a property access.\";\n case 2364: return \"The left-hand side of an assignment expression must be a variable or a property access.\";\n case 2365: return \"Operator '{0}' cannot be applied to types '{1}' and '{2}'.\";\n case 2380: return \"'get' and 'set' accessor must have the same type.\";\n case 2390: return \"Constructor implementation is missing.\";\n case 2391: return \"Function implementation is missing or not immediately following the declaration.\";\n case 2392: return \"Multiple constructor implementations are not allowed.\";\n case 2393: return \"Duplicate function implementation.\";\n case 2395: return \"Individual declarations in merged declaration '{0}' must be all exported or all local.\";\n case 2460: return \"Type '{0}' has no property '{1}'.\";\n case 2469: return \"The '{0}' operator cannot be applied to type '{1}'.\";\n case 2484: return \"Export declaration conflicts with exported declaration of '{0}'.\";\n case 2540: return \"Cannot assign to '{0}' because it is a constant or a read-only property.\";\n case 2541: return \"The target of an assignment must be a variable or a property access.\";\n case 2542: return \"Index signature in type '{0}' only permits reading.\";\n case 2554: return \"Expected {0} arguments, but got {1}.\";\n case 2555: return \"Expected at least {0} arguments, but got {1}.\";\n case 2558: return \"Expected {0} type arguments, but got {1}.\";\n case 2651: return \"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.\";\n case 2694: return \"Namespace '{0}' has no exported member '{1}'.\";\n case 6054: return \"File '{0}' not found.\";\n default: return \"\";\n }\n}\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\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} 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 sources = program.sources;\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n if (sources[i].normalizedPath == normalizedPath) return;\r\n }\r\n this.seenlog.add(normalizedPath);\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) break;\r\n let name = decorator.name;\r\n if (name.kind == NodeKind.IDENTIFIER) {\r\n let text = (name).text;\r\n if (text == \"global\") {\r\n flags |= CommonFlags.GLOBAL;\r\n continue;\r\n }\r\n if (text == \"unmananged\") {\r\n flags |= CommonFlags.UNMANAGED;\r\n continue;\r\n }\r\n if (text == \"sealed\") {\r\n flags |= CommonFlags.SEALED;\r\n continue;\r\n }\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 tn.next();\r\n statement = this.parseClass(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 ): 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);\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 suppressErrors: bool = false\r\n ): ParameterNode | null {\r\n\r\n // before: '...'? Identifier '?'? (':' Type)? ('=' Expression)?\r\n\r\n var isRest = false;\r\n var isOptional = false;\r\n var startRange: Range | null = null;\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n isRest = true;\r\n startRange = tn.range();\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 return 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 } 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 parseClass(\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':\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // ('extends' Type)?\r\n // ('implements' Type (',' Type)*)?\r\n // '{' ClassMember* '}'\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 = new Array();\r\n if (tn.skip(Token.IMPLEMENTS)) {\r\n do {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n implementsTypes.push(type);\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 if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseClassMember(tn, flags);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (!tn.skip(Token.CLOSEBRACE));\r\n }\r\n return 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\r\n parseClassMember(\r\n tn: Tokenizer,\r\n parentFlags: CommonFlags\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 = parentFlags & 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 (parentFlags & 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);\r\n if (!parameters) return null;\r\n\r\n 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 if (ret.normalizedPath && !this.seenlog.has(ret.normalizedPath)) {\r\n this.backlog.push(ret.normalizedPath);\r\n this.seenlog.add(ret.normalizedPath);\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 if (!this.seenlog.has(ret.normalizedPath)) {\r\n this.backlog.push(ret.normalizedPath);\r\n this.seenlog.add(ret.normalizedPath);\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) {\r\n parser = new Parser();\r\n isEntry = true;\r\n }\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/** 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\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\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\nexport function writeF32(value: f32, buffer: Uint8Array, offset: i32): void {\r\n writeI32(f32_as_i32(value), buffer, offset);\r\n}\r\n\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 ClassPrototype,\r\n Field\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\": {\r\n compiler.currentType = Type.bool;\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n ); // recoverable\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, false);\r\n let type = compiler.currentType;\r\n compiler.currentType = Type.bool;\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\": {\r\n compiler.currentType = Type.bool;\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n ); // recoverable\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, false);\r\n let type = compiler.currentType;\r\n compiler.currentType = Type.bool;\r\n return type.is(TypeFlags.FLOAT)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isReference\": {\r\n compiler.currentType = Type.bool;\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n ); // recoverable\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, false);\r\n let type = compiler.currentType;\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\": {\r\n compiler.currentType = Type.bool;\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n ); // recoverable\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, false);\r\n let type = compiler.currentType;\r\n compiler.currentType = Type.bool;\r\n let classType = type.classReference;\r\n if (classType) {\r\n let stringPrototype = compiler.program.elementsLookup.get(\"String\");\r\n if (stringPrototype) {\r\n assert(stringPrototype.kind == ElementKind.CLASS_PROTOTYPE);\r\n let stringInstance = (stringPrototype).resolve(null);\r\n if (!stringInstance) return module.createUnreachable();\r\n if (classType.isAssignableTo(stringInstance)) {\r\n return module.createI32(1);\r\n }\r\n }\r\n }\r\n return module.createI32(0);\r\n }\r\n case \"isArray\": {\r\n compiler.currentType = Type.bool;\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n ); // recoverable\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, false);\r\n let type = compiler.currentType;\r\n compiler.currentType = Type.bool;\r\n let classType = type.classReference;\r\n return classType != null && classType.prototype.fnIndexedGet != 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 let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f32);\r\n ret = module.createBinary(BinaryOp.NeF32,\r\n module.createTeeLocal(tempLocal.index, arg0),\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.createBinary(BinaryOp.NeF64,\r\n module.createTeeLocal(tempLocal.index, arg0),\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 = 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 let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f32);\r\n ret = module.createSelect(\r\n module.createBinary(BinaryOp.NeF32,\r\n module.createUnary(UnaryOp.AbsF32,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n module.createF32(Infinity)\r\n ),\r\n module.createI32(0),\r\n module.createBinary(BinaryOp.EqF32,\r\n module.createGetLocal(tempLocal.index, NativeType.F32),\r\n module.createGetLocal(tempLocal.index, NativeType.F32)\r\n )\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.createSelect(\r\n module.createBinary(BinaryOp.NeF64,\r\n module.createUnary(UnaryOp.AbsF64,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n module.createF64(Infinity)\r\n ),\r\n module.createI32(0),\r\n module.createBinary(BinaryOp.EqF64,\r\n module.createGetLocal(tempLocal.index, NativeType.F64),\r\n module.createGetLocal(tempLocal.index, NativeType.F64)\r\n )\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 \"offsetof\": { // offsetof(fieldName?)\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.bool);\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 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","var globalScope = typeof window !== \"undefined\" && window || typeof global !== \"undefined\" && global || self;\r\n\r\nvar HEAP = new Uint8Array(0);\r\nvar HEAP_OFFSET = 0;\r\n\r\nglobalScope[\"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\nglobalScope[\"free_memory\"] = function free_memory(ptr) {\r\n // TODO\r\n};\r\n\r\nglobalScope[\"move_memory\"] = function move_memory(dest, src, n) {\r\n HEAP.copyWithin(dest, src, src + n);\r\n};\r\n\r\nglobalScope[\"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\nglobalScope[\"load\"] = function load(ptr) {\r\n if (typeof off === \"number\")\r\n ptr += off;\r\n return HEAP[ptr];\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\nrequire(\"./portable/memory\");\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.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","LIBRARY_SUBST","LIBRARY_PREFIX","QueuedExport","QueuedImport","TypeAlias","noTypesYet","Map","Program","_super","diagnostics","_this","diagnosticsOffset","elementsLookup","typesLookup","typeAliases","fileLevelExports","moduleLevelExports","sources","__extends","initialize","options","Type","i8","i16","i32","i64","isizeType","u8","u16","u32","u64","usizeType","bool","f32","f64","void","queuedExports","queuedImports","Array","queuedDerivedClasses","k","length","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","derivedDeclaration","derivedType","assert","extendsType","resolved","resolveIdentifier","ElementKind","CLASS_PROTOTYPE","A_class_may_only_extend_another_class","basePrototype","checkInternalDecorators","parentNode","is","CommonFlags","GLOBAL","source","isLibrary","SOURCE","simpleName","has","Duplicate_identifier_0","BUILTIN","namespace","fileLevelInternalName","ClassPrototype","implementsTypes","numImplementsTypes","UNMANAGED","Structs_cannot_implement_interfaces","Range","join","Operation_not_supported","push","members","MODULE_EXPORT","Export_declaration_conflicts_with_exported_declaration_of_0","isEntry","memberDeclarations","memberDeclaration","FIELDDECLARATION","initializeField","METHODDECLARATION","isAny","GET","SET","initializeAccessor","initializeMethod","Error","programLevelInternalName","instance","resolve","type","classPrototype","STATIC","staticField","Global","instanceMembers","instanceField","FieldPrototype","CONSTRUCTOR","FunctionPrototype","constructorPrototype","Multiple_constructor_implementations_are_not_allowed","checkOperators","decorators","decorator","decoratorKind","DecoratorKind","OPERATOR","numArgs","arguments","firstArg","LITERAL","literalKind","LiteralKind","STRING","fnIndexedGet","fnIndexedSet","fnConcat","fnEquals","String_literal_expected","Expected_0_arguments_but_got_1","toString","CUSTOM","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","queuedExtendingClasses","parentNamespace","Namespace","existingExport","Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local","alias","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","resolveUsingTypeArguments","typeArguments","paramTypes","paramType","instanceKey","typesToString","placeholderType","resolveTypeArguments","typeArgumentNodes","alternativeReportNode","parameterCount","argumentCount","Expected_0_type_arguments_but_got_1","atEnd","contextualFunction","contextualEnum","ENUMVALUE","resolvedElement","ResolvedElement","flow","getScopedLocal","resolvePropertyAccess","propertyAccess","targetExpression","expression","resolveExpression","targetType","target","propertyName","LOCAL","FIELD","classReference","Property_0_does_not_exist_on_type_1","CLASS","withTarget","base","resolveElementAccess","elementAccess","indexedGetName","indexedGet","FUNCTION_PROTOTYPE","Index_signature_is_missing_in_type_0","PARENTHESIZED","ASSERTION","toType","classType","BINARY","THIS","memberOf","_this_cannot_be_referenced_in_current_location","SUPER","_super_can_only_be_referenced_in_a_derived_class","IDENTIFIER","PROPERTYACCESS","ELEMENTACCESS","CALL","signatureReference","functionTarget","cachedFunctionTarget","FunctionTarget","DiagnosticEmitter","Element","program","flags","NONE","flag","NAMESPACE","ENUM","constantValue","enum","ConstantValueKind","VariableLikeElement","apply","constantValueKind","withConstantIntegerValue","lo","hi","constantIntegerValue","i64_new","CONST","INLINED","withConstantFloatValue","constantFloatValue","Parameter","initializer","Local","index","instances","classTypeArguments","functionTypeArguments","isInstance","INSTANCE","inheritedTypeArguments","inheritedTypeArguments_1","inheritedTypeArguments_1_1","inheritedName","inheritedType","classTypeParameters","numClassTypeParameters","numFunctionTypeArguments","signatureNode","functionTypeParameters","classInstance","signatureParameters","signatureParameterCount","parameterDeclaration","Function","resolvePartial","partialPrototype","reportNode","resolvedTypeArguments","GENERIC","resolveBuiltinTypeArguments","resolvedType","FUNCTION","locals","additionalLocals","breakContext","debugLocations","ref","functionTableIndex","trampoline","nextBreakId","breakStack","tempI32s","tempI64s","tempF32s","tempF64s","DECLARE","localIndex","contextualTypeArguments_1","contextualTypeArguments_1_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_2","inheritedTypeArguments_2_1","baseClass","baseClassType","SEALED","Class_0_is_sealed_and_cannot_be_extended","Structs_cannot_extend_classes_and_vice_versa","Class","currentMemoryOffset","_c","_d","inheritedMember","partialConstructor","constructorInstance","_f","_g","fieldDeclaration","fieldType","fieldInstance","byteSize","methodPrototype","instanceProperty","partialGetterPrototype","partialSetterPrototype","asClass","_b","baseType","isAssignableTo","current","INTERFACE_PROTOTYPE","Interface","INTERFACE","FlowFlags","scopedLocals","currentFunction","parentFlow","continueLabel","breakLabel","unset","enterBranchOrScope","branch","leaveBranchOrScope","scopedLocal","addScopedLocal","__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","normalizedPath","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","str","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","OFFSET","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","elementExpression","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","TYPE","TYPEPARAMETER","PARAMETER","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","FOR","IF","IMPORTDECLARATION","RETURN","SWITCHCASE","SWITCH","THROW","TRY","VARIABLEDECLARATION","VOID","WHILE","getFirstDecorator","asGlobal","hasDecorator","g","eval","e","window","tokenFomKeyword","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","INVALID","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","parseFloat","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","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","currentEnum","currentType","startFunctionBody","memorySegments","stringSegments","functionTable","argumentCountRef","files","max","compile","startFunctionPrototype","startFunctionInstance","startFunction","compileSource","funcRef","typeRef","ensureFunctionType","i64_align","isWasm64","pages","i64_shr_u","functionTableSize","entries","compileSourceByPath","normalizedPathWithoutExtension","File_0_not_found","isGeneric","compileClassDeclaration","compileEnumDeclaration","compileFunctionDeclaration","compileNamespaceDeclaration","variableInit","compileVariableStatement","compileExportStatement","previousFunction","compileStatement","compileGlobalDeclaration","compileGlobal","global","COMPILED","AMBIENT","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","isKnownGlobal","numDeclarations","initializers","init","_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","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","operatorName","compileOperatorOverload","EqI64","EqF32","EqF64","NeI32","NeI64","NeF32","NeF64","compileAssignment","AddI64","AddF32","AddF64","SubI32","SubI64","SubF32","SubF64","MulI32","MulI64","MulF32","MulF64","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","operatorPrototype","operatorInstance","makeCallDirect","valueExpression","elementType","Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property","resolvedIndexedSet","valueExpr","valueWithCorrectType","tee","isInstanceTarget","targetExpr","setterInstance","thisArg","getterInstance","nativeReturnType","setElementName","setElement","elementExpr","tempLocalTarget","tempLocalElement","Index_signature_in_type_0_only_permits_reading","indexArg","compileCall","compileCallDirect","Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures","compileCallIndirect","checkCallSignature","numArguments","hasThis","minimum","Expected_at_least_0_arguments_but_got_1","argumentExpressions","numArgumentsInclThis","original","originalSignature","originalName","originalParameterTypes","originalParameterDeclarations","commonReturnType","commonThisType","minArguments","minOperands","maxArguments","maxOperands","numOptional","forwardedOperands","operandIndex","trampolineSignature","trampolineName","ofN","numOperands","isCallImport","ensureArgumentCount","makeCallIndirect","numExpressions","exprs","retainConstantType","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_i16","i64_is_i32","i64_is_u8","i64_is_u16","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","arrayPrototype","arrayType","memorySize","elementSize","Int32Array","Float32Array","Float64Array","usizeTypeSize","headerSize","writeI64","writeI32","writeF32","writeF64","Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature","makeAllocate","ifThenExpr","ifElseExpr","ifThenAllocates","ifElseAllocates","nativeOne","setValue","getValue","NegF32","NegF64","makeIsFalseish","EqzI32","EqzI64","compiler","compileAllocate","field","builtinsFile","Parser","backlog","seenlog","tryParseSignatureIsSignature","parseFile","indexOf","tn","parseTopLevelStatement","startPos","parseDecorator","exportStart","exportEnd","contextIsAmbient","A_declare_modifier_cannot_be_used_in_an_already_ambient_context","first","parseEnum","parseVariable","parseFunction","parseClass","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","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","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","skipStatement","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","isInterface","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","Unreachable","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","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","valueI64","indentX1","indentX2","indentX4","separator","ipos","dirname","origin","CharCode","lookupInUnicodeMap","unicodeIdentifierStart","unicodeIdentifierPart","map","mid","evaluateConstantOffset","NaN","Infinity","Type_0_is_not_generic","stringPrototype","stringInstance","tempLocal0","tempLocal1","fieldName","Type_0_has_no_property_1","abort","compileAbort","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"],"mappings":"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KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,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,MAA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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 = 27);\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} 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/** 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\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\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 /** 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 queuedDerivedClasses = 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, queuedDerivedClasses);\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, queuedDerivedClasses);\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 = queuedDerivedClasses.length; i < k; ++i) {\r\n let derivedDeclaration = queuedDerivedClasses[i].declaration;\r\n let derivedType = assert(derivedDeclaration.extendsType);\r\n let resolved = this.resolveIdentifier(derivedType.name, null);\r\n if (resolved) {\r\n if (resolved.element.kind != ElementKind.CLASS_PROTOTYPE) {\r\n this.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n derivedType.range\r\n );\r\n continue;\r\n }\r\n queuedDerivedClasses[i].basePrototype = (\r\n resolved.element\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 /** Processes internal decorators, if present. */\r\n private checkInternalDecorators(\r\n element: Element,\r\n declaration: DeclarationStatement\r\n ): void {\r\n var parentNode = declaration.parent;\r\n if (\r\n element.is(CommonFlags.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 element.set(CommonFlags.GLOBAL);\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 queuedDerivedClasses: 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 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 );\r\n prototype.namespace = namespace;\r\n this.elementsLookup.set(internalName, prototype);\r\n\r\n var implementsTypes = declaration.implementsTypes;\r\n var numImplementsTypes = implementsTypes.length;\r\n if (prototype.is(CommonFlags.UNMANAGED)) {\r\n if (implementsTypes && numImplementsTypes) {\r\n this.error(\r\n DiagnosticCode.Structs_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 } else if (numImplementsTypes) {\r\n for (let i = 0; i < numImplementsTypes; ++i) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n implementsTypes[i].range\r\n );\r\n }\r\n }\r\n\r\n // remember classes that extend another one\r\n if (declaration.extendsType) {\r\n queuedDerivedClasses.push(prototype);\r\n }\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.checkInternalDecorators(prototype, declaration);\r\n\r\n // check and possibly register string type\r\n if (\r\n prototype.is(CommonFlags.GLOBAL) &&\r\n declaration.name.text == \"String\"\r\n ) {\r\n if (!this.typesLookup.has(\"string\")) {\r\n let instance = prototype.resolve(null);\r\n if (instance) this.typesLookup.set(\"string\", instance.type);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, declaration.programLevelInternalName\r\n );\r\n }\r\n }\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 declaration,\r\n Type.void\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 // 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 );\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 );\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.checkOperators(declaration.decorators, prototype, classPrototype);\r\n }\r\n\r\n private checkOperators(\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 if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n decorator.range\r\n );\r\n continue;\r\n }\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 switch ((firstArg).value) {\r\n case \"[]\": {\r\n classPrototype.fnIndexedGet = prototype.simpleName;\r\n break;\r\n }\r\n case \"[]=\": {\r\n classPrototype.fnIndexedSet = prototype.simpleName;\r\n break;\r\n }\r\n case \"+\": {\r\n classPrototype.fnConcat = prototype.simpleName;\r\n break;\r\n }\r\n case \"==\": {\r\n classPrototype.fnEquals = prototype.simpleName;\r\n break;\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n firstArg.range\r\n );\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 } else if (decorator.decoratorKind != DecoratorKind.CUSTOM) {\r\n // methods support built-in @operator only\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n decorator.range\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 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 );\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 );\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.checkInternalDecorators(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 prototype = new FunctionPrototype(\r\n this,\r\n simpleName,\r\n internalName,\r\n declaration,\r\n null\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.checkInternalDecorators(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 var prototype = new InterfacePrototype(this, declaration.name.text, internalName, declaration);\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.checkInternalDecorators(prototype, declaration);\r\n }\r\n\r\n private initializeNamespace(\r\n declaration: NamespaceDeclaration,\r\n queuedExtendingClasses: 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.checkInternalDecorators(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], queuedExtendingClasses, 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], queuedExtendingClasses, 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 declaration,\r\n Type.void // resolved later on\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.checkInternalDecorators(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 ): ResolvedElement | 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 if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\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 if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\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 if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\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 if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\r\n }\r\n\r\n // search global scope\r\n if (element = this.elementsLookup.get(name)) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\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 ): ResolvedElement | null {\r\n // start by resolving the lhs target (expression before the last dot)\r\n var targetExpression = propertyAccess.expression;\r\n resolvedElement = this.resolveExpression( // reports\r\n targetExpression,\r\n contextualFunction\r\n );\r\n if (!resolvedElement) return null;\r\n var target = resolvedElement.element;\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 var targetType: Type;\r\n var member: Element | null;\r\n\r\n // Resolve variable-likes to their class type first\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n if (!(targetType = (target).type).classReference) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, targetType.toString()\r\n );\r\n return null;\r\n }\r\n target = targetType.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 if (!(targetType = getter.signature.returnType).classReference) {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, targetType.toString()\r\n );\r\n return null;\r\n }\r\n target = targetType.classReference;\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 if (target.members && (member = target.members.get(propertyName))) {\r\n return resolvedElement.set(member).withTarget(target, targetExpression);\r\n }\r\n // check inherited static members on the base prototype while 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 // or inherited instance members on the base class while 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 if (target.members && (member = target.members.get(propertyName))) {\r\n return resolvedElement.set(member).withTarget(target, targetExpression);\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 ): ResolvedElement | null {\r\n // start by resolving the lhs target (expression before the last dot)\r\n var targetExpression = elementAccess.expression;\r\n resolvedElement = this.resolveExpression(\r\n targetExpression,\r\n contextualFunction\r\n );\r\n if (!resolvedElement) return null;\r\n var target = resolvedElement.element;\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 (type.classReference) {\r\n let indexedGetName = (target = type.classReference).prototype.fnIndexedGet;\r\n let indexedGet: Element | null;\r\n if (\r\n indexedGetName != null &&\r\n target.members &&\r\n (indexedGet = target.members.get(indexedGetName)) &&\r\n indexedGet.kind == ElementKind.FUNCTION_PROTOTYPE\r\n ) {\r\n return resolvedElement.set(indexedGet).withTarget(type.classReference, targetExpression);\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n targetExpression.range, target.internalName\r\n );\r\n return null;\r\n }\r\n\r\n resolveExpression(\r\n expression: Expression,\r\n contextualFunction: Function\r\n ): ResolvedElement | 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 if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(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 let parent = contextualFunction.memberOf;\r\n if (parent) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(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 let parent = contextualFunction.memberOf;\r\n if (parent && parent.kind == ElementKind.CLASS && (parent = (parent).base)) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(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.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 resolved = this.resolveExpression(\r\n (expression).expression,\r\n contextualFunction\r\n );\r\n if (resolved) {\r\n let element = resolved.element;\r\n if (element && element.kind == ElementKind.FUNCTION_PROTOTYPE) {\r\n let instance = (element).resolveUsingTypeArguments(\r\n (expression).typeArguments,\r\n contextualFunction.contextualTypeArguments,\r\n expression\r\n );\r\n if (instance) {\r\n let returnType = instance.signature.returnType;\r\n let classType = returnType.classReference;\r\n if (classType) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(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 if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(functionTarget);\r\n }\r\n }\r\n }\r\n }\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/** Common result structure returned when calling any of the resolve functions on a {@link Program}. */\r\nexport class ResolvedElement {\r\n\r\n /** The target element, if a property or element access */\r\n target: Element | null;\r\n /** The target element's expression, if a property or element access. */\r\n targetExpression: Expression | null;\r\n /** The element being accessed. */\r\n element: Element;\r\n\r\n /** Clears the target and sets the resolved element. */\r\n set(element: Element): this {\r\n this.target = null;\r\n this.targetExpression = null;\r\n this.element = element;\r\n return this;\r\n }\r\n\r\n /** Sets the resolved target in addition to the previously set element. */\r\n withTarget(target: Element, targetExpression: Expression): this {\r\n this.target = target;\r\n this.targetExpression = targetExpression;\r\n return this;\r\n }\r\n\r\n /** Tests if the target is a valid instance target. */\r\n get isInstanceTarget(): bool {\r\n return (\r\n this.target != null &&\r\n this.target.kind == ElementKind.CLASS &&\r\n this.targetExpression != null\r\n );\r\n }\r\n}\r\n\r\n// Cached result structure instance\r\nvar resolvedElement: ResolvedElement | null;\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 // Internal decorators\r\n\r\n /** Is global. */\r\n GLOBAL = 1 << 13,\r\n /** Is built-in. */\r\n BUILTIN = 1 << 14,\r\n /** Is unmanaged. */\r\n UNMANAGED = 1 << 15,\r\n /** Is sealed. */\r\n SEALED = 1 << 16,\r\n\r\n // Extended modifiers usually derived from basic modifiers or internal decorators\r\n\r\n /** Is ambient, that is either declared or nested in a declared element. */\r\n AMBIENT = 1 << 17,\r\n /** Is generic. */\r\n GENERIC = 1 << 18,\r\n /** Is part of a generic context. */\r\n GENERIC_CONTEXT = 1 << 19,\r\n /** Is an instance member. */\r\n INSTANCE = 1 << 20,\r\n /** Is a constructor. */\r\n CONSTRUCTOR = 1 << 21,\r\n /** Is an arrow function. */\r\n ARROW = 1 << 22,\r\n /** Is a module export. */\r\n MODULE_EXPORT = 1 << 23,\r\n /** Is a module import. */\r\n MODULE_IMPORT = 1 << 24,\r\n\r\n // Compilation states\r\n\r\n /** Is compiled. */\r\n COMPILED = 1 << 25,\r\n /** Has a constant value and is therefore inlined. */\r\n INLINED = 1 << 26,\r\n /** Is scoped. */\r\n SCOPED = 1 << 27,\r\n /** Is a trampoline. */\r\n TRAMPOLINE = 1 << 28\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 /** 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}\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;\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 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 declaration: VariableLikeDeclarationStatement,\r\n type: Type\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\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\r\n constructor(program: Program, simpleName: string, index: i32, type: Type) {\r\n super(program, simpleName, simpleName);\r\n this.index = index;\r\n this.type = type;\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\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 ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n this.flags = declaration.flags;\r\n this.classPrototype = classPrototype;\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 be overridden.\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(\r\n inheritedName,\r\n inheritedType\r\n );\r\n }\r\n }\r\n\r\n // override with class type arguments if a partially resolved instance method\r\n var classTypeArguments = this.classTypeArguments;\r\n if (classTypeArguments) { // set only if partially resolved\r\n assert(this.is(CommonFlags.INSTANCE));\r\n let classDeclaration = assert(classPrototype).declaration;\r\n let classTypeParameters = classDeclaration.typeParameters;\r\n let numClassTypeParameters = classTypeParameters.length;\r\n assert(numClassTypeParameters == classTypeArguments.length);\r\n for (let i = 0; i < numClassTypeParameters; ++i) {\r\n contextualTypeArguments.set(\r\n classTypeParameters[i].name.text,\r\n classTypeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!classTypeArguments);\r\n }\r\n\r\n // override with function specific type arguments\r\n var signatureNode = declaration.signature;\r\n var functionTypeParameters = declaration.typeParameters;\r\n var numFunctionTypeArguments: i32;\r\n if (functionTypeArguments && (numFunctionTypeArguments = functionTypeArguments.length)) {\r\n assert(functionTypeParameters && numFunctionTypeArguments == functionTypeParameters.length);\r\n for (let i = 0; i < numFunctionTypeArguments; ++i) {\r\n contextualTypeArguments.set(\r\n (functionTypeParameters)[i].name.text,\r\n functionTypeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!functionTypeParameters || functionTypeParameters.length == 0);\r\n }\r\n\r\n // resolve class if an instance method\r\n var classInstance: Class | null = null;\r\n var thisType: Type | null = null;\r\n if (isInstance) {\r\n classInstance = assert(classPrototype).resolve(classTypeArguments, contextualTypeArguments); // reports\r\n if (!classInstance) return null;\r\n thisType = classInstance.type;\r\n }\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(this, internalName, signature, classInstance ? classInstance : classPrototype);\r\n instance.contextualTypeArguments = contextualTypeArguments;\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 assert(this.classPrototype);\r\n if (classTypeArguments && classTypeArguments.length) {\r\n let partialPrototype = new FunctionPrototype(\r\n this.program,\r\n this.simpleName,\r\n this.internalName,\r\n this.declaration,\r\n this.classPrototype\r\n );\r\n partialPrototype.flags = this.flags;\r\n partialPrototype.classTypeArguments = classTypeArguments;\r\n return partialPrototype;\r\n }\r\n return this; // no need to clone\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(\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\r\n private nextBreakId: i32 = 0;\r\n private breakStack: i32[] | null = null;\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 ) {\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 if (!(prototype.is(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 contextualTypeArguments = (memberOf).contextualTypeArguments;\r\n if (contextualTypeArguments) {\r\n if (!this.contextualTypeArguments) {\r\n this.contextualTypeArguments = new Map();\r\n }\r\n for (let [inheritedName, inheritedType] of contextualTypeArguments) {\r\n this.contextualTypeArguments.set(inheritedName, inheritedType);\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 )\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): 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 );\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 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 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(prototype: FieldPrototype, internalName: string, type: Type) {\r\n super(prototype.program, prototype.simpleName, internalName);\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\r\n /** Overloaded indexed get method, if any. */\r\n fnIndexedGet: string | null = null;\r\n /** Overloaded indexed set method, if any. */\r\n fnIndexedSet: string | null = null;\r\n /** Overloaded concatenation method, if any. */\r\n fnConcat: string | null = null;\r\n /** Overloaded equality comparison method, if any. */\r\n fnEquals: string | null = null;\r\n\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: ClassDeclaration\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 /** 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.is(CommonFlags.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.prototype.is(CommonFlags.UNMANAGED) != this.is(CommonFlags.UNMANAGED)) {\r\n this.program.error(\r\n DiagnosticCode.Structs_cannot_extend_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 internalName = this.internalName;\r\n if (instanceKey.length) {\r\n internalName += \"<\" + instanceKey + \">\";\r\n }\r\n instance = new Class(this, 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 if (this.constructorPrototype) {\r\n let partialConstructor = this.constructorPrototype.resolvePartial(typeArguments); // reports\r\n if (partialConstructor) {\r\n instance.constructorInstance = partialConstructor.resolve(); // reports\r\n }\r\n // TODO: ^ doesn't know the return type, hence returns null\r\n }\r\n\r\n if (this.instanceMembers) {\r\n for (let member of this.instanceMembers.values()) {\r\n switch (member.kind) {\r\n case ElementKind.FIELD_PROTOTYPE: { // fields are layed out in advance\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 );\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 case ElementKind.FUNCTION_PROTOTYPE: { // instance methods remain partially resolved prototypes until compiled\r\n if (!instance.members) instance.members = new Map();\r\n let methodPrototype = (member).resolvePartial(typeArguments); // reports\r\n if (methodPrototype) {\r\n methodPrototype.internalName = internalName + INSTANCE_DELIMITER + methodPrototype.simpleName;\r\n instance.members.set(member.simpleName, methodPrototype);\r\n }\r\n break;\r\n }\r\n case ElementKind.PROPERTY: { // instance properties are cloned with partially resolved getters and setters\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 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\r\n /** Constructs a new class. */\r\n constructor(\r\n prototype: ClassPrototype,\r\n internalName: string,\r\n typeArguments: Type[] | null = null,\r\n base: Class | null = null\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName);\r\n this.prototype = prototype;\r\n this.flags = prototype.flags;\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 if (base.contextualTypeArguments) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (let [baseName, baseType] of base.contextualTypeArguments) {\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 {\r\n if (current == target) {\r\n return true;\r\n }\r\n } while (current = current.base);\r\n return false;\r\n }\r\n\r\n toString(): string {\r\n return this.prototype.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 ) {\r\n super(program, simpleName, internalName, declaration);\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 internalName: string,\r\n typeArguments: Type[] = [],\r\n base: Interface | null = null\r\n ) {\r\n super(prototype, 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\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 /** Scoped local variables. */\r\n scopedLocals: 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 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 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(name: string, type: Type, reportNode: Node): void {\r\n var scopedLocal = this.currentFunction.getTempLocal(type);\r\n if (!this.scopedLocals) this.scopedLocals = new Map();\r\n else if (this.scopedLocals.has(name)) {\r\n this.currentFunction.program.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n reportNode.range\r\n );\r\n return;\r\n }\r\n this.scopedLocals.set(name, 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 /** 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 }\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))) {\r\n start--;\r\n }\r\n while (end < len && !isLineBreak(text.charCodeAt(end))) {\r\n end++;\r\n }\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) {\r\n sb.push(\"~\");\r\n }\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// 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 if (expression.kind == NodeKind.IDENTIFIER) {\r\n switch ((expression).text) {\r\n case \"global\": {\r\n stmt.decoratorKind = DecoratorKind.GLOBAL;\r\n break;\r\n }\r\n case \"operator\": {\r\n stmt.decoratorKind = DecoratorKind.OPERATOR;\r\n break;\r\n }\r\n case \"unmanaged\": {\r\n stmt.decoratorKind = DecoratorKind.UNMANAGED;\r\n break;\r\n }\r\n case \"offset\": {\r\n stmt.decoratorKind = DecoratorKind.OFFSET;\r\n break;\r\n }\r\n default: {\r\n stmt.decoratorKind = DecoratorKind.CUSTOM;\r\n break;\r\n }\r\n }\r\n } else {\r\n stmt.decoratorKind = DecoratorKind.CUSTOM;\r\n }\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[], // can't be a function\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; 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 extendsType: TypeNode | null, // can't be a function\r\n members: DeclarationStatement[],\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.extendsType = extendsType; if (extendsType) extendsType.parent = stmt;\r\n stmt.members = members; setParent(members, 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}\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 OFFSET\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. */\r\n extendsType: TypeNode | null; // can't be a function\r\n /** Interface types being implemented. */\r\n implementsTypes: TypeNode[]; // can't be a function\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\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 tokenFomKeyword(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 = tokenFomKeyword(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 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 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}\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\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 /** 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} 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\r\n PATH_DELIMITER,\r\n LIBRARY_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} 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\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 /** 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 /** Already processed file names. */\r\n files: Set = new Set();\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: FunctionRef;\r\n module.setStart(\r\n 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 );\r\n startFunctionInstance.finalize(module, 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) {\r\n module.addMemoryImport(\"0\", \"env\", \"memory\");\r\n }\r\n\r\n // set up function table\r\n var functionTable = this.functionTable;\r\n var functionTableSize = functionTable.length;\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 }\r\n\r\n // import table if requested\r\n if (options.importTable) {\r\n module.addTableImport(\"0\", \"env\", \"table\");\r\n if (!functionTableSize) 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 sources = this.program.sources;\r\n\r\n // try file.ts\r\n var expected = normalizedPathWithoutExtension + \".ts\";\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n let source = sources[i];\r\n if (source.normalizedPath == expected) {\r\n this.compileSource(source);\r\n return;\r\n }\r\n }\r\n\r\n // try file/index.ts\r\n expected = normalizedPathWithoutExtension + \"/index.ts\";\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n let source = sources[i];\r\n if (source.normalizedPath == expected) {\r\n this.compileSource(source);\r\n return;\r\n }\r\n }\r\n\r\n // try (lib)/file.ts\r\n expected = LIBRARY_PREFIX + normalizedPathWithoutExtension + \".ts\";\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n let source = sources[i];\r\n if (source.normalizedPath == expected) {\r\n this.compileSource(source);\r\n return;\r\n }\r\n }\r\n\r\n this.error(\r\n DiagnosticCode.File_0_not_found,\r\n reportNode.range, normalizedPathWithoutExtension\r\n );\r\n }\r\n\r\n compileSource(source: Source): void {\r\n var files = this.files;\r\n var normalizedPath = source.normalizedPath;\r\n if (files.has(normalizedPath)) return;\r\n files.add(normalizedPath);\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.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\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 }\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 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.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 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.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\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 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 (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 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 && 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.simpleName == \"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,\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,\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 assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\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 currentFunction = this.currentFunction;\r\n var expression: ExpressionRef = 0;\r\n if (statement.value) {\r\n expression = this.compileExpression(\r\n statement.value,\r\n currentFunction.signature.returnType\r\n );\r\n }\r\n\r\n // Remember that this flow returns\r\n currentFunction.flow.set(FlowFlags.RETURNS);\r\n\r\n return this.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 this.module.createUnreachable();\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 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 currentFunction.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 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 0;\r\n }\r\n scopedLocals.set(name, local);\r\n return 0;\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 (declaration.is(CommonFlags.LET)) { // here: not top-level\r\n currentFunction.flow.addScopedLocal(name, type, declaration.name); // reports\r\n } else {\r\n currentFunction.addLocal(type, name); // reports\r\n }\r\n if (init) {\r\n initializers.push(this.compileAssignmentWithValue(declaration.name, init));\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 this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n element.declaration.range\r\n );\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.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.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 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 switch (expression.operator) {\r\n case Token.LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType);\r\n leftType = this.currentType;\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: { // TODO: check operator overload\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 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: { // TODO: check operator overload\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 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: { // TODO: check operator overload\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 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: { // TODO: check operator overload\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 // TODO?\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 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: { // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classInstance = assert(this.currentType.classReference);\r\n let operatorName = classInstance.prototype.fnEquals;\r\n if (operatorName != null) {\r\n expr = this.compileOperatorOverload(classInstance, operatorName, leftExpr, rightExpr);\r\n assert(this.currentType == Type.bool);\r\n break;\r\n }\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.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 // TODO?\r\n case Token.EXCLAMATION_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType);\r\n leftType = this.currentType;\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: // TODO: check operator overload\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 if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\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: { // check operator overload\r\n if (this.currentType.is(TypeFlags.REFERENCE)) {\r\n let classInstance = assert(this.currentType.classReference);\r\n let operatorName = classInstance.prototype.fnConcat;\r\n if (operatorName != null) {\r\n expr = this.compileOperatorOverload(classInstance, operatorName, leftExpr, rightExpr);\r\n break;\r\n }\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 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 if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\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: // TODO: check operator overload\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 if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\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: // TODO: check operator overload\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.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 if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\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: { // TODO: check operator overload\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 if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\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: { // TODO: check operator overload\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 case TypeKind.F64: {\r\n // TODO: internal fmod, possibly simply imported from JS\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 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 if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\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: // TODO: check operator overload\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 if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\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: // TODO: check operator overload\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 if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\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: // TODO: check operator overload\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 compileOperatorOverload(\r\n classInstance: Class,\r\n operatorName: string,\r\n leftExpr: ExpressionRef,\r\n rightExpr: ExpressionRef\r\n ): ExpressionRef {\r\n var classPrototype = classInstance.prototype;\r\n var operatorPrototype = assert(assert(classPrototype.members).get(operatorName));\r\n assert(operatorPrototype.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n var operatorInstance = (operatorPrototype).resolve();\r\n if (!operatorInstance) return this.module.createUnreachable();\r\n return this.makeCallDirect(operatorInstance, [ leftExpr, rightExpr ]);\r\n }\r\n\r\n compileAssignment(expression: Expression, valueExpression: Expression, contextualType: Type): ExpressionRef {\r\n var currentFunction = this.currentFunction;\r\n var resolved = this.program.resolveExpression(expression, currentFunction); // reports\r\n if (!resolved) return this.module.createUnreachable();\r\n\r\n // to compile just the value, we need to know the target's type\r\n var element = resolved.element;\r\n var elementType: Type;\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(element)) { // reports; not yet compiled if a static field compiled as a global\r\n return this.module.createUnreachable();\r\n }\r\n assert((element).type != Type.void, \"concrete type expected\");\r\n // fall-through\r\n }\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n elementType = (element).type;\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let prototype = (element).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);\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, (element).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (expression.kind == NodeKind.ELEMENTACCESS) { // @operator(\"[]\")\r\n if (resolved.target && resolved.target.kind == ElementKind.CLASS) {\r\n if (element.simpleName == (resolved.target).prototype.fnIndexedGet) {\r\n let resolvedIndexedSet = (element).resolve(null); // reports\r\n if (resolvedIndexedSet) {\r\n elementType = resolvedIndexedSet.signature.returnType;\r\n break;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, (resolved.target).toString()\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\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 resolved = this.program.resolveExpression(expression, this.currentFunction); // reports\r\n if (!resolved) return module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n switch (element.kind) {\r\n case ElementKind.LOCAL: {\r\n this.currentType = tee ? (element).type : Type.void;\r\n if ((element).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, (element).internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n return tee\r\n ? module.createTeeLocal((element).index, valueWithCorrectType)\r\n : module.createSetLocal((element).index, valueWithCorrectType);\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(element)) return module.createUnreachable();\r\n let type = (element).type;\r\n assert(type != Type.void);\r\n this.currentType = tee ? type : Type.void;\r\n if ((element).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 (element).internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (tee) {\r\n let nativeType = type.toNativeType();\r\n let internalName = (element).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((element).internalName, valueWithCorrectType);\r\n }\r\n }\r\n case ElementKind.FIELD: {\r\n if ((element).is(CommonFlags.READONLY)) {\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, (element).internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n assert(resolved.isInstanceTarget);\r\n let targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n (resolved.target).type\r\n );\r\n let type = (element).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 targetExpr,\r\n module.createGetLocal(tempLocalIndex, nativeType),\r\n nativeType,\r\n (element).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 targetExpr,\r\n valueWithCorrectType,\r\n nativeType,\r\n (element).memoryOffset\r\n );\r\n }\r\n }\r\n case ElementKind.PROPERTY: {\r\n let setterPrototype = (element).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 assert(resolved.isInstanceTarget);\r\n let thisArg = this.compileExpression(\r\n resolved.targetExpression,\r\n (resolved.target).type\r\n );\r\n return this.makeCallDirect(setterInstance, [ thisArg, 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 = (element).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 assert(resolved.isInstanceTarget);\r\n let thisArg = this.compileExpression(\r\n resolved.targetExpression,\r\n (resolved.target).type\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, thisArg),\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, (element).internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: { // @operator(\"[]\") ?\r\n if (expression.kind == NodeKind.ELEMENTACCESS) {\r\n assert(resolved.isInstanceTarget);\r\n let getterInstance = (element).resolve(); // reports\r\n if (!getterInstance) return module.createUnreachable();\r\n // obtain @operator(\"[]=\")\r\n let setElementName = (resolved.target).prototype.fnIndexedSet;\r\n let setElement: Element | null;\r\n if (\r\n setElementName != null &&\r\n (resolved.target).members &&\r\n (setElement = (>(resolved.target).members).get(setElementName)) &&\r\n setElement.kind == ElementKind.FUNCTION_PROTOTYPE\r\n ) {\r\n let setterInstance = (setElement).resolve(); // reports\r\n if (!setterInstance) return module.createUnreachable();\r\n let targetType = (resolved.target).type;\r\n let targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n targetType\r\n );\r\n let elementExpr = this.compileExpression(\r\n (expression).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 = getterInstance.signature.returnType;\r\n this.currentFunction.freeTempLocal(tempLocalTarget);\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [\r\n module.createTeeLocal(tempLocalTarget.index, targetExpr),\r\n module.createTeeLocal(tempLocalElement.index, elementExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(getterInstance, [\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(setterInstance, [\r\n targetExpr,\r\n elementExpr,\r\n valueWithCorrectType\r\n ]);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, (resolved.target).internalName\r\n );\r\n return module.createUnreachable();\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 resolved = this.program.resolveExpression(expression.expression, currentFunction); // reports\r\n if (!resolved) return module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n var signature: Signature | null;\r\n var indexArg: ExpressionRef;\r\n switch (element.kind) {\r\n\r\n // direct call: concrete function\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let prototype = element;\r\n\r\n // builtins are compiled on the fly\r\n if (prototype.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) {\r\n let expr = compileBuiltinCall( // reports\r\n this,\r\n prototype,\r\n prototype.resolveBuiltinTypeArguments(\r\n expression.typeArguments,\r\n currentFunction.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 module.createUnreachable();\r\n }\r\n return expr;\r\n\r\n // otherwise compile to a call\r\n } else {\r\n let instance = prototype.resolveUsingTypeArguments( // reports\r\n expression.typeArguments,\r\n currentFunction.contextualTypeArguments,\r\n expression\r\n );\r\n if (!instance) return module.createUnreachable();\r\n let thisArg: ExpressionRef = 0;\r\n if (instance.is(CommonFlags.INSTANCE)) {\r\n assert(resolved.isInstanceTarget);\r\n thisArg = this.compileExpression(\r\n resolved.targetExpression,\r\n (resolved.target).type\r\n );\r\n if (!thisArg) return module.createUnreachable();\r\n } else {\r\n assert(!resolved.isInstanceTarget);\r\n }\r\n return this.compileCallDirect(instance, expression.arguments, expression, thisArg);\r\n }\r\n }\r\n\r\n // indirect call: index argument with signature\r\n case ElementKind.LOCAL: {\r\n if (signature = (element).type.signatureReference) {\r\n indexArg = module.createGetLocal((element).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, (element).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (signature = (element).type.signatureReference) {\r\n indexArg = module.createGetGlobal((element).internalName, (element).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, (element).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FIELD: {\r\n let type = (element).type;\r\n if (signature = type.signatureReference) {\r\n let targetExpr = this.compileExpression(assert(resolved.targetExpression), type);\r\n indexArg = module.createLoad(\r\n 4,\r\n false,\r\n targetExpr,\r\n NativeType.I32,\r\n (element).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, (element).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FUNCTION_TARGET: {\r\n signature = (element).signature;\r\n indexArg = this.compileExpression(expression.expression, (element).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 /**\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 ): 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 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 /** 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(original.prototype, trampolineName, trampolineSignature, original.memberOf);\r\n trampoline.set(original.flags | CommonFlags.TRAMPOLINE | CommonFlags.COMPILED);\r\n trampoline.contextualTypeArguments = original.contextualTypeArguments;\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 resolved = this.program.resolveElementAccess(expression, this.currentFunction); // reports\r\n if (!resolved) return this.module.createUnreachable();\r\n\r\n assert( // should be guaranteed by resolveElementAccess\r\n resolved.element.kind == ElementKind.FUNCTION_PROTOTYPE &&\r\n resolved.target &&\r\n resolved.target.kind == ElementKind.CLASS\r\n );\r\n var target = resolved.target;\r\n var instance = (resolved.element).resolve( // reports\r\n null,\r\n target.contextualTypeArguments\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n var thisArg = this.compileExpression(expression.expression, target.type);\r\n return this.compileCallDirect(instance, [\r\n expression.elementExpression\r\n ], expression, thisArg);\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 + \"~\" + simpleName,\r\n declaration\r\n );\r\n var instance = this.compileFunctionUsingTypeArguments(\r\n prototype,\r\n [],\r\n currentFunction.contextualTypeArguments,\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 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 let flow = currentFunction.flow;\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 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 resolved = this.program.resolveIdentifier( // reports\r\n expression,\r\n this.currentFunction,\r\n this.currentEnum\r\n );\r\n if (!resolved) return module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n switch (element.kind) {\r\n case ElementKind.LOCAL: {\r\n if ((element).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(element, contextualType, retainConstantType);\r\n }\r\n let localType = (element).type;\r\n let localIndex = (element).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 (element.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) {\r\n return compileBuiltinGetConstant(this, element, expression);\r\n }\r\n if (!this.compileGlobal(element)) { // reports; not yet compiled if a static field\r\n return this.module.createUnreachable();\r\n }\r\n let globalType = (element).type;\r\n assert(globalType != Type.void);\r\n if ((element).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(element, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return this.module.createGetGlobal((element).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // here: if referenced from within the same enum\r\n if (!element.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 ((element).is(CommonFlags.INLINED)) {\r\n return this.module.createI32((element).constantValue);\r\n }\r\n return this.module.createGetGlobal((element).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let instance = (element).resolve(\r\n null,\r\n this.currentFunction.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.elementsLookup.get(\"Array\")\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.I16: {\r\n if (i64_is_i16(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n if (i64_is_i32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U8: {\r\n if (i64_is_u8(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.U32: {\r\n if (i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.BOOL: {\r\n if (i64_is_bool(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n if (!this.options.isWasm64) {\r\n if (i64_is_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_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.elementsLookup.get(\"Array\"));\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 elementSize = expressions.length;\r\n var nativeType = elementType.toNativeType();\r\n var values: usize;\r\n var memorySize: usize;\r\n switch (nativeType) {\r\n case NativeType.I32: {\r\n values = changetype(new Int32Array(elementSize));\r\n memorySize = elementSize * 4;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n values = changetype(new Array(elementSize));\r\n memorySize = elementSize * 8;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n values = changetype(new Float32Array(elementSize));\r\n memorySize = elementSize * 4;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n values = changetype(new Float64Array(elementSize));\r\n memorySize = elementSize * 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(elementSize);\r\n var expr: BinaryenExpressionRef;\r\n for (let i = 0; i < elementSize; ++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 var headerSize = usizeTypeSize + 4 + 4; // memory + capacity + length\r\n\r\n if (isStatic) {\r\n let buffer = new Uint8Array(headerSize + memorySize);\r\n let segment = this.addMemorySegment(buffer);\r\n\r\n // make header\r\n let offset = 0;\r\n if (usizeTypeSize == 8) {\r\n writeI64(i64_add(segment.offset, i64_new(headerSize)), buffer, 0); // memory\r\n } else {\r\n assert(i64_high(segment.offset) == 0);\r\n writeI32(i64_low(segment.offset) + headerSize, buffer, 0); // memory\r\n }\r\n offset += usizeTypeSize;\r\n writeI32(elementSize, buffer, offset); // capacity\r\n offset += 4;\r\n writeI32(elementSize, buffer, offset); // length\r\n offset += 4;\r\n assert(offset == headerSize);\r\n\r\n // make memory\r\n switch (nativeType) {\r\n case NativeType.I32: {\r\n for (let i = 0; i < elementSize; ++i) {\r\n writeI32(changetype(values)[i], buffer, offset); offset += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.I64: {\r\n for (let i = 0; i < elementSize; ++i) {\r\n writeI64(changetype(values)[i], buffer, offset); offset += 8;\r\n }\r\n break;\r\n }\r\n case NativeType.F32: {\r\n for (let i = 0; i < elementSize; ++i) {\r\n writeF32(changetype(values)[i], buffer, offset); offset += 4;\r\n }\r\n break;\r\n }\r\n case NativeType.F64: {\r\n for (let i = 0; i < elementSize; ++i) {\r\n writeF64(changetype(values)[i], buffer, 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 == headerSize + memorySize);\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 resolved = this.program.resolveExpression( // reports\r\n expression.expression,\r\n currentFunction\r\n );\r\n if (!resolved) return module.createUnreachable();\r\n if (resolved.element.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 = resolved.element;\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 var constructorInstance = classInstance.constructorInstance;\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 resolved = program.resolvePropertyAccess(propertyAccess, this.currentFunction); // reports\r\n if (!resolved) return module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n var targetExpr: ExpressionRef;\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: { // static property\r\n if (element.is(CommonFlags.AMBIENT | CommonFlags.BUILTIN)) {\r\n return compileBuiltinGetConstant(this, element, propertyAccess);\r\n }\r\n if (!this.compileGlobal(element)) { // reports; not yet compiled if a static field\r\n return module.createUnreachable();\r\n }\r\n let globalType = (element).type;\r\n assert(globalType != Type.void);\r\n if ((element).is(CommonFlags.INLINED)) {\r\n return this.compileInlineConstant(element, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return module.createGetGlobal((element).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // enum value\r\n if (!this.compileEnum((element).enum)) {\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((element).is(CommonFlags.INLINED)) {\r\n return module.createI32((element).constantValue);\r\n }\r\n return module.createGetGlobal((element).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FIELD: { // instance field\r\n assert(resolved.isInstanceTarget);\r\n assert((element).memoryOffset >= 0);\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n this.options.usizeType,\r\n ConversionKind.NONE\r\n );\r\n this.currentType = (element).type;\r\n return module.createLoad(\r\n (element).type.size >> 3,\r\n (element).type.is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n targetExpr,\r\n (element).type.toNativeType(),\r\n (element).memoryOffset\r\n );\r\n }\r\n case ElementKind.PROPERTY: { // instance property (here: getter)\r\n let prototype = (element).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 targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n (parent).type\r\n );\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], propertyAccess, targetExpr);\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, (element).simpleName, (element).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(\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 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 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 fieldType.toNativeType(),\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 initializers.push(module.createStore(field.type.byteSize,\r\n module.createGetLocal(tempLocal.index, nativeSizeType),\r\n field.type.toNativeZero(module),\r\n field.type.toNativeType(),\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","/**\n * Generated from diagnosticsMessages.json. Do not edit.\n * @module diagnostics\n *//***/\n\n/* tslint:disable:max-line-length */\n\n/** Enum of available diagnostic codes. */\nexport enum DiagnosticCode {\n Operation_not_supported = 100,\n Operation_is_unsafe = 101,\n Conversion_from_type_0_to_1_requires_an_explicit_cast = 200,\n Conversion_from_type_0_to_1_will_require_an_explicit_cast_when_switching_between_32_64_bit = 201,\n Type_0_cannot_be_changed_to_type_1 = 202,\n Type_0_cannot_be_reinterpreted_as_type_1 = 203,\n Basic_type_0_cannot_be_nullable = 204,\n Cannot_export_a_mutable_global = 205,\n Compiling_constant_with_non_constant_initializer_as_mutable = 206,\n Structs_cannot_extend_classes_and_vice_versa = 207,\n Structs_cannot_implement_interfaces = 208,\n Invalid_regular_expression_flags = 209,\n Implementation_0_must_match_the_signature_1 = 210,\n Class_0_is_sealed_and_cannot_be_extended = 211,\n Unterminated_string_literal = 1002,\n Identifier_expected = 1003,\n _0_expected = 1005,\n A_file_cannot_have_a_reference_to_itself = 1006,\n Trailing_comma_not_allowed = 1009,\n Unexpected_token = 1012,\n A_rest_parameter_must_be_last_in_a_parameter_list = 1014,\n Parameter_cannot_have_question_mark_and_initializer = 1015,\n A_required_parameter_cannot_follow_an_optional_parameter = 1016,\n Enum_member_must_have_initializer = 1061,\n Statements_are_not_allowed_in_ambient_contexts = 1036,\n Initializers_are_not_allowed_in_ambient_contexts = 1039,\n _0_modifier_cannot_be_used_here = 1042,\n A_rest_parameter_cannot_be_optional = 1047,\n A_rest_parameter_cannot_have_an_initializer = 1048,\n A_set_accessor_must_have_exactly_one_parameter = 1049,\n A_set_accessor_parameter_cannot_have_an_initializer = 1052,\n A_get_accessor_cannot_have_parameters = 1054,\n Type_parameters_cannot_appear_on_a_constructor_declaration = 1092,\n Type_annotation_cannot_appear_on_a_constructor_declaration = 1093,\n An_accessor_cannot_have_type_parameters = 1094,\n A_set_accessor_cannot_have_a_return_type_annotation = 1095,\n Type_parameter_list_cannot_be_empty = 1098,\n A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement = 1104,\n A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement = 1105,\n A_return_statement_can_only_be_used_within_a_function_body = 1108,\n Expression_expected = 1109,\n Type_expected = 1110,\n A_default_clause_cannot_appear_more_than_once_in_a_switch_statement = 1113,\n Duplicate_label_0 = 1114,\n Octal_literals_are_not_allowed_in_strict_mode = 1121,\n Digit_expected = 1124,\n Hexadecimal_digit_expected = 1125,\n Unexpected_end_of_text = 1126,\n Invalid_character = 1127,\n _case_or_default_expected = 1130,\n A_declare_modifier_cannot_be_used_in_an_already_ambient_context = 1038,\n Type_argument_expected = 1140,\n String_literal_expected = 1141,\n Line_break_not_permitted_here = 1142,\n Declaration_expected = 1146,\n _const_declarations_must_be_initialized = 1155,\n Unterminated_regular_expression_literal = 1161,\n Binary_digit_expected = 1177,\n Octal_digit_expected = 1178,\n An_implementation_cannot_be_declared_in_ambient_contexts = 1183,\n An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive = 1198,\n Unterminated_Unicode_escape_sequence = 1199,\n Decorators_are_not_valid_here = 1206,\n _abstract_modifier_can_only_appear_on_a_class_method_or_property_declaration = 1242,\n A_class_may_only_extend_another_class = 1311,\n Duplicate_identifier_0 = 2300,\n Cannot_find_name_0 = 2304,\n Module_0_has_no_exported_member_1 = 2305,\n Generic_type_0_requires_1_type_argument_s = 2314,\n Type_0_is_not_generic = 2315,\n Type_0_is_not_assignable_to_type_1 = 2322,\n Index_signature_is_missing_in_type_0 = 2329,\n _this_cannot_be_referenced_in_current_location = 2332,\n _super_can_only_be_referenced_in_a_derived_class = 2335,\n Property_0_does_not_exist_on_type_1 = 2339,\n Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures = 2349,\n Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature = 2351,\n A_function_whose_declared_type_is_not_void_must_return_a_value = 2355,\n The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access = 2357,\n The_left_hand_side_of_an_assignment_expression_must_be_a_variable_or_a_property_access = 2364,\n Operator_0_cannot_be_applied_to_types_1_and_2 = 2365,\n _get_and_set_accessor_must_have_the_same_type = 2380,\n Constructor_implementation_is_missing = 2390,\n Function_implementation_is_missing_or_not_immediately_following_the_declaration = 2391,\n Multiple_constructor_implementations_are_not_allowed = 2392,\n Duplicate_function_implementation = 2393,\n Individual_declarations_in_merged_declaration_0_must_be_all_exported_or_all_local = 2395,\n Type_0_has_no_property_1 = 2460,\n The_0_operator_cannot_be_applied_to_type_1 = 2469,\n Export_declaration_conflicts_with_exported_declaration_of_0 = 2484,\n Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property = 2540,\n The_target_of_an_assignment_must_be_a_variable_or_a_property_access = 2541,\n Index_signature_in_type_0_only_permits_reading = 2542,\n Expected_0_arguments_but_got_1 = 2554,\n Expected_at_least_0_arguments_but_got_1 = 2555,\n Expected_0_type_arguments_but_got_1 = 2558,\n A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums = 2651,\n Namespace_0_has_no_exported_member_1 = 2694,\n File_0_not_found = 6054\n}\n\n/** Translates a diagnostic code to its respective string. */\nexport function diagnosticCodeToString(code: DiagnosticCode): string {\n switch (code) {\n case 100: return \"Operation not supported.\";\n case 101: return \"Operation is unsafe.\";\n case 200: return \"Conversion from type '{0}' to '{1}' requires an explicit cast.\";\n case 201: return \"Conversion from type '{0}' to '{1}' will require an explicit cast when switching between 32/64-bit.\";\n case 202: return \"Type '{0}' cannot be changed to type '{1}'.\";\n case 203: return \"Type '{0}' cannot be reinterpreted as type '{1}'.\";\n case 204: return \"Basic type '{0}' cannot be nullable.\";\n case 205: return \"Cannot export a mutable global.\";\n case 206: return \"Compiling constant with non-constant initializer as mutable.\";\n case 207: return \"Structs cannot extend classes and vice-versa.\";\n case 208: return \"Structs cannot implement interfaces.\";\n case 209: return \"Invalid regular expression flags.\";\n case 210: return \"Implementation '{0}' must match the signature '{1}'.\";\n case 211: return \"Class '{0}' is sealed and cannot be extended.\";\n case 1002: return \"Unterminated string literal.\";\n case 1003: return \"Identifier expected.\";\n case 1005: return \"'{0}' expected.\";\n case 1006: return \"A file cannot have a reference to itself.\";\n case 1009: return \"Trailing comma not allowed.\";\n case 1012: return \"Unexpected token.\";\n case 1014: return \"A rest parameter must be last in a parameter list.\";\n case 1015: return \"Parameter cannot have question mark and initializer.\";\n case 1016: return \"A required parameter cannot follow an optional parameter.\";\n case 1061: return \"Enum member must have initializer.\";\n case 1036: return \"Statements are not allowed in ambient contexts.\";\n case 1039: return \"Initializers are not allowed in ambient contexts.\";\n case 1042: return \"'{0}' modifier cannot be used here.\";\n case 1047: return \"A rest parameter cannot be optional.\";\n case 1048: return \"A rest parameter cannot have an initializer.\";\n case 1049: return \"A 'set' accessor must have exactly one parameter.\";\n case 1052: return \"A 'set' accessor parameter cannot have an initializer.\";\n case 1054: return \"A 'get' accessor cannot have parameters.\";\n case 1092: return \"Type parameters cannot appear on a constructor declaration.\";\n case 1093: return \"Type annotation cannot appear on a constructor declaration.\";\n case 1094: return \"An accessor cannot have type parameters.\";\n case 1095: return \"A 'set' accessor cannot have a return type annotation.\";\n case 1098: return \"Type parameter list cannot be empty.\";\n case 1104: return \"A 'continue' statement can only be used within an enclosing iteration statement.\";\n case 1105: return \"A 'break' statement can only be used within an enclosing iteration or switch statement.\";\n case 1108: return \"A 'return' statement can only be used within a function body.\";\n case 1109: return \"Expression expected.\";\n case 1110: return \"Type expected.\";\n case 1113: return \"A 'default' clause cannot appear more than once in a 'switch' statement.\";\n case 1114: return \"Duplicate label '{0}'.\";\n case 1121: return \"Octal literals are not allowed in strict mode.\";\n case 1124: return \"Digit expected.\";\n case 1125: return \"Hexadecimal digit expected.\";\n case 1126: return \"Unexpected end of text.\";\n case 1127: return \"Invalid character.\";\n case 1130: return \"'case' or 'default' expected.\";\n case 1038: return \"A 'declare' modifier cannot be used in an already ambient context.\";\n case 1140: return \"Type argument expected.\";\n case 1141: return \"String literal expected.\";\n case 1142: return \"Line break not permitted here.\";\n case 1146: return \"Declaration expected.\";\n case 1155: return \"'const' declarations must be initialized.\";\n case 1161: return \"Unterminated regular expression literal.\";\n case 1177: return \"Binary digit expected.\";\n case 1178: return \"Octal digit expected.\";\n case 1183: return \"An implementation cannot be declared in ambient contexts.\";\n case 1198: return \"An extended Unicode escape value must be between 0x0 and 0x10FFFF inclusive.\";\n case 1199: return \"Unterminated Unicode escape sequence.\";\n case 1206: return \"Decorators are not valid here.\";\n case 1242: return \"'abstract' modifier can only appear on a class, method, or property declaration.\";\n case 1311: return \"A class may only extend another class.\";\n case 2300: return \"Duplicate identifier '{0}'.\";\n case 2304: return \"Cannot find name '{0}'.\";\n case 2305: return \"Module '{0}' has no exported member '{1}'.\";\n case 2314: return \"Generic type '{0}' requires {1} type argument(s).\";\n case 2315: return \"Type '{0}' is not generic.\";\n case 2322: return \"Type '{0}' is not assignable to type '{1}'.\";\n case 2329: return \"Index signature is missing in type '{0}'.\";\n case 2332: return \"'this' cannot be referenced in current location.\";\n case 2335: return \"'super' can only be referenced in a derived class.\";\n case 2339: return \"Property '{0}' does not exist on type '{1}'.\";\n case 2349: return \"Cannot invoke an expression whose type lacks a call signature. Type '{0}' has no compatible call signatures.\";\n case 2351: return \"Cannot use 'new' with an expression whose type lacks a construct signature.\";\n case 2355: return \"A function whose declared type is not 'void' must return a value.\";\n case 2357: return \"The operand of an increment or decrement operator must be a variable or a property access.\";\n case 2364: return \"The left-hand side of an assignment expression must be a variable or a property access.\";\n case 2365: return \"Operator '{0}' cannot be applied to types '{1}' and '{2}'.\";\n case 2380: return \"'get' and 'set' accessor must have the same type.\";\n case 2390: return \"Constructor implementation is missing.\";\n case 2391: return \"Function implementation is missing or not immediately following the declaration.\";\n case 2392: return \"Multiple constructor implementations are not allowed.\";\n case 2393: return \"Duplicate function implementation.\";\n case 2395: return \"Individual declarations in merged declaration '{0}' must be all exported or all local.\";\n case 2460: return \"Type '{0}' has no property '{1}'.\";\n case 2469: return \"The '{0}' operator cannot be applied to type '{1}'.\";\n case 2484: return \"Export declaration conflicts with exported declaration of '{0}'.\";\n case 2540: return \"Cannot assign to '{0}' because it is a constant or a read-only property.\";\n case 2541: return \"The target of an assignment must be a variable or a property access.\";\n case 2542: return \"Index signature in type '{0}' only permits reading.\";\n case 2554: return \"Expected {0} arguments, but got {1}.\";\n case 2555: return \"Expected at least {0} arguments, but got {1}.\";\n case 2558: return \"Expected {0} type arguments, but got {1}.\";\n case 2651: return \"A member initializer in a enum declaration cannot reference members declared after it, including members defined in other enums.\";\n case 2694: return \"Namespace '{0}' has no exported member '{1}'.\";\n case 6054: return \"File '{0}' not found.\";\n default: return \"\";\n }\n}\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\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} 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 sources = program.sources;\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n if (sources[i].normalizedPath == normalizedPath) return;\r\n }\r\n this.seenlog.add(normalizedPath);\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) break;\r\n let name = decorator.name;\r\n if (name.kind == NodeKind.IDENTIFIER) {\r\n let text = (name).text;\r\n if (text == \"global\") {\r\n flags |= CommonFlags.GLOBAL;\r\n continue;\r\n }\r\n if (text == \"unmananged\") {\r\n flags |= CommonFlags.UNMANAGED;\r\n continue;\r\n }\r\n if (text == \"sealed\") {\r\n flags |= CommonFlags.SEALED;\r\n continue;\r\n }\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 tn.next();\r\n statement = this.parseClass(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 ): 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);\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 suppressErrors: bool = false\r\n ): ParameterNode | null {\r\n\r\n // before: '...'? Identifier '?'? (':' Type)? ('=' Expression)?\r\n\r\n var isRest = false;\r\n var isOptional = false;\r\n var startRange: Range | null = null;\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n isRest = true;\r\n startRange = tn.range();\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 return 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 } 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 parseClass(\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':\r\n // Identifier\r\n // ('<' TypeParameters)?\r\n // ('extends' Type)?\r\n // ('implements' Type (',' Type)*)?\r\n // '{' ClassMember* '}'\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 = new Array();\r\n if (tn.skip(Token.IMPLEMENTS)) {\r\n do {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n implementsTypes.push(type);\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 if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseClassMember(tn, flags);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (!tn.skip(Token.CLOSEBRACE));\r\n }\r\n return 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\r\n parseClassMember(\r\n tn: Tokenizer,\r\n parentFlags: CommonFlags\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 = parentFlags & 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 (parentFlags & 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);\r\n if (!parameters) return null;\r\n\r\n 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 if (ret.normalizedPath && !this.seenlog.has(ret.normalizedPath)) {\r\n this.backlog.push(ret.normalizedPath);\r\n this.seenlog.add(ret.normalizedPath);\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 if (!this.seenlog.has(ret.normalizedPath)) {\r\n this.backlog.push(ret.normalizedPath);\r\n this.seenlog.add(ret.normalizedPath);\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) {\r\n parser = new Parser();\r\n isEntry = true;\r\n }\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/** 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\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\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\nexport function writeF32(value: f32, buffer: Uint8Array, offset: i32): void {\r\n writeI32(f32_as_i32(value), buffer, offset);\r\n}\r\n\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 ClassPrototype,\r\n Field\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\": {\r\n compiler.currentType = Type.bool;\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n ); // recoverable\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, false);\r\n let type = compiler.currentType;\r\n compiler.currentType = Type.bool;\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\": {\r\n compiler.currentType = Type.bool;\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n ); // recoverable\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, false);\r\n let type = compiler.currentType;\r\n compiler.currentType = Type.bool;\r\n return type.is(TypeFlags.FLOAT)\r\n ? module.createI32(1)\r\n : module.createI32(0);\r\n }\r\n case \"isReference\": {\r\n compiler.currentType = Type.bool;\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n ); // recoverable\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, false);\r\n let type = compiler.currentType;\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\": {\r\n compiler.currentType = Type.bool;\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n ); // recoverable\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, false);\r\n let type = compiler.currentType;\r\n compiler.currentType = Type.bool;\r\n let classType = type.classReference;\r\n if (classType) {\r\n let stringPrototype = compiler.program.elementsLookup.get(\"String\");\r\n if (stringPrototype) {\r\n assert(stringPrototype.kind == ElementKind.CLASS_PROTOTYPE);\r\n let stringInstance = (stringPrototype).resolve(null);\r\n if (!stringInstance) return module.createUnreachable();\r\n if (classType.isAssignableTo(stringInstance)) {\r\n return module.createI32(1);\r\n }\r\n }\r\n }\r\n return module.createI32(0);\r\n }\r\n case \"isArray\": {\r\n compiler.currentType = Type.bool;\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n ); // recoverable\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n compiler.compileExpressionRetainType(operands[0], Type.i32, false);\r\n let type = compiler.currentType;\r\n compiler.currentType = Type.bool;\r\n let classType = type.classReference;\r\n return classType != null && classType.prototype.fnIndexedGet != 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 let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f32);\r\n ret = module.createBinary(BinaryOp.NeF32,\r\n module.createTeeLocal(tempLocal.index, arg0),\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.createBinary(BinaryOp.NeF64,\r\n module.createTeeLocal(tempLocal.index, arg0),\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 = 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 let tempLocal = compiler.currentFunction.getAndFreeTempLocal(Type.f32);\r\n ret = module.createSelect(\r\n module.createBinary(BinaryOp.NeF32,\r\n module.createUnary(UnaryOp.AbsF32,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n module.createF32(Infinity)\r\n ),\r\n module.createI32(0),\r\n module.createBinary(BinaryOp.EqF32,\r\n module.createGetLocal(tempLocal.index, NativeType.F32),\r\n module.createGetLocal(tempLocal.index, NativeType.F32)\r\n )\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.createSelect(\r\n module.createBinary(BinaryOp.NeF64,\r\n module.createUnary(UnaryOp.AbsF64,\r\n module.createTeeLocal(tempLocal.index, arg0)\r\n ),\r\n module.createF64(Infinity)\r\n ),\r\n module.createI32(0),\r\n module.createBinary(BinaryOp.EqF64,\r\n module.createGetLocal(tempLocal.index, NativeType.F64),\r\n module.createGetLocal(tempLocal.index, NativeType.F64)\r\n )\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 \"offsetof\": { // offsetof(fieldName?)\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.bool);\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 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","var globalScope = typeof window !== \"undefined\" && window || typeof global !== \"undefined\" && global || self;\r\n\r\nvar HEAP = new Uint8Array(0);\r\nvar HEAP_OFFSET = 0;\r\n\r\nglobalScope[\"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\nglobalScope[\"free_memory\"] = function free_memory(ptr) {\r\n // TODO\r\n};\r\n\r\nglobalScope[\"move_memory\"] = function move_memory(dest, src, n) {\r\n HEAP.copyWithin(dest, src, src + n);\r\n};\r\n\r\nglobalScope[\"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\nglobalScope[\"load\"] = function load(ptr) {\r\n if (typeof off === \"number\")\r\n ptr += off;\r\n return HEAP[ptr];\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\nrequire(\"./portable/memory\");\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 fe13aed0..c6e1586b 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -23,7 +23,8 @@ import { NativeType, FunctionRef, ExpressionId, - FunctionTypeRef + FunctionTypeRef, + GlobalRef } from "./module"; import { @@ -194,29 +195,26 @@ export class Compiler extends DiagnosticEmitter { options: Options; /** Module instance being compiled. */ module: Module; - - /** Start function being compiled. */ - startFunction: Function; - /** Start function statements. */ - startFunctionBody: ExpressionRef[] = []; - /** Current function in compilation. */ currentFunction: Function; /** Current enum in compilation. */ currentEnum: Enum | null = null; /** Current type in compilation. */ currentType: Type = Type.void; - + /** Start function being compiled. */ + startFunction: Function; + /** Start function statements. */ + startFunctionBody: ExpressionRef[] = []; /** Counting memory offset. */ memoryOffset: I64; /** Memory segments being compiled. */ memorySegments: MemorySegment[] = new Array(); /** Map of already compiled static string segments. */ stringSegments: Map = new Map(); - /** Function table being compiled. */ functionTable: Function[] = new Array(); - + /** Argument count helper global. */ + argumentCountRef: GlobalRef = 0; /** Already processed file names. */ files: Set = new Set(); @@ -1192,7 +1190,7 @@ export class Compiler extends DiagnosticEmitter { } var functionTable = this.functionTable; var index = functionTable.length; - if (func.signature.requiredParameters < func.signature.parameterTypes.length) { + if (!func.is(CommonFlags.TRAMPOLINE) && func.signature.requiredParameters < func.signature.parameterTypes.length) { // insert the trampoline if the function has optional parameters func = this.ensureTrampoline(func); } @@ -4314,8 +4312,7 @@ export class Compiler extends DiagnosticEmitter { ++minOperands; ++maxOperands; } - var numOptional = maxOperands - minOperands; - assert(numOptional); + var numOptional = assert(maxOperands - minOperands); var forwardedOperands = new Array(minOperands); var operandIndex = 0; @@ -4333,21 +4330,13 @@ export class Compiler extends DiagnosticEmitter { } assert(operandIndex == minOperands); - // append an additional parameter taking the number of optional arguments provided - var trampolineParameterTypes = new Array(maxArguments + 1); - for (let i = 0; i < maxArguments; ++i) { - trampolineParameterTypes[i] = originalParameterTypes[i]; - } - trampolineParameterTypes[maxArguments] = Type.i32; - // create the trampoline element - var trampolineSignature = new Signature(trampolineParameterTypes, commonReturnType, commonThisType); + var trampolineSignature = new Signature(originalParameterTypes, commonReturnType, commonThisType); var trampolineName = originalName + "|trampoline"; - trampolineSignature.requiredParameters = maxArguments + 1; + trampolineSignature.requiredParameters = maxArguments; trampoline = new Function(original.prototype, trampolineName, trampolineSignature, original.memberOf); - trampoline.flags = original.flags; + trampoline.set(original.flags | CommonFlags.TRAMPOLINE | CommonFlags.COMPILED); trampoline.contextualTypeArguments = original.contextualTypeArguments; - trampoline.set(CommonFlags.COMPILED); original.trampoline = trampoline; // compile initializers of omitted arguments in scope of the trampoline function @@ -4356,23 +4345,24 @@ export class Compiler extends DiagnosticEmitter { this.currentFunction = trampoline; // create a br_table switching over the number of optional parameters provided - var numNames = numOptional + 1; // incl. 'with0' + var numNames = numOptional + 1; // incl. outer block var names = new Array(numNames); + var ofN = "of" + numOptional.toString(10); for (let i = 0; i < numNames; ++i) { - let label = "N=" + i.toString(); + let label = i.toString(10) + ofN; names[i] = label; } var body = module.createBlock(names[0], [ - module.createBlock("N=invalid", [ - module.createSwitch(names, "N=invalid", - // condition is number of provided optional operands, so subtract required operands - minOperands + module.createBlock("oob", [ + module.createSwitch(names, "oob", + // condition is number of provided optional arguments, so subtract required arguments + minArguments ? module.createBinary( BinaryOp.SubI32, - module.createGetLocal(maxOperands, NativeType.I32), - module.createI32(minOperands) + module.createGetGlobal("argumentCount", NativeType.I32), + module.createI32(minArguments) ) - : module.createGetLocal(maxOperands, NativeType.I32) + : module.createGetGlobal("argumentCount", NativeType.I32) ) ]), module.createUnreachable() @@ -4409,7 +4399,10 @@ export class Compiler extends DiagnosticEmitter { } /** Creates a direct call to the specified function. */ - makeCallDirect(instance: Function, operands: ExpressionRef[] | null = null): ExpressionRef { + makeCallDirect( + instance: Function, + operands: ExpressionRef[] | null = null + ): ExpressionRef { var numOperands = operands ? operands.length : 0; var numArguments = numOperands; var minArguments = instance.signature.requiredParameters; @@ -4422,27 +4415,39 @@ export class Compiler extends DiagnosticEmitter { --numArguments; } assert(numOperands >= minOperands); + var module = this.module; if (!this.compileFunction(instance)) return module.createUnreachable(); + var returnType = instance.signature.returnType; + var isCallImport = instance.is(CommonFlags.MODULE_IMPORT); + + // fill up omitted arguments with zeroes if (numOperands < maxOperands) { - instance = this.ensureTrampoline(instance); - if (!this.compileFunction(instance)) return module.createUnreachable(); if (!operands) { - operands = new Array(maxOperands + 1); + operands = new Array(maxOperands); operands.length = 0; } + let parameterTypes = instance.signature.parameterTypes; for (let i = numArguments; i < maxArguments; ++i) { - operands.push(instance.signature.parameterTypes[i].toNativeZero(module)); + operands.push(parameterTypes[i].toNativeZero(module)); + } + if (!isCallImport) { // call the trampoline + instance = this.ensureTrampoline(instance); + if (!this.compileFunction(instance)) return module.createUnreachable(); + let nativeReturnType = returnType.toNativeType(); + this.currentType = returnType; + return module.createBlock(null, [ + this.ensureArgumentCount(numArguments), + module.createCall(instance.internalName, operands, nativeReturnType) + ], nativeReturnType); } - operands.push(module.createI32(numOperands)); // actual number of provided operands } - var returnType = instance.signature.returnType; + + // otherwise just call through this.currentType = returnType; - if (instance.is(CommonFlags.MODULE_IMPORT)) { - return module.createCallImport(instance.internalName, operands, returnType.toNativeType()); - } else { - return module.createCall(instance.internalName, operands, returnType.toNativeType()); - } + return isCallImport + ? module.createCallImport(instance.internalName, operands, returnType.toNativeType()) + : module.createCall(instance.internalName, operands, returnType.toNativeType()); } /** Compiles an indirect call using an index argument and a signature. */ @@ -4483,11 +4488,59 @@ export class Compiler extends DiagnosticEmitter { } /** Creates an indirect call to the function at `indexArg` in the function table. */ - makeCallIndirect(signature: Signature, indexArg: ExpressionRef, operands: ExpressionRef[]): ExpressionRef { + makeCallIndirect( + signature: Signature, + indexArg: ExpressionRef, + operands: ExpressionRef[] | null = null + ): ExpressionRef { + var numOperands = operands ? operands.length : 0; + var numArguments = numOperands; + var minArguments = signature.requiredParameters; + var minOperands = minArguments; + var maxArguments = signature.parameterTypes.length; + var maxOperands = maxArguments; + if (signature.thisType) { + ++minOperands; + ++maxOperands; + --numArguments; + } + assert(numOperands >= minOperands); + + this.ensureFunctionType(signature); + var module = this.module; + + // fill up omitted arguments with zeroes + if (numOperands < maxOperands) { + if (!operands) { + operands = new Array(maxOperands); + operands.length = 0; + } + let parameterTypes = signature.parameterTypes; + for (let i = numArguments; i < maxArguments; ++i) { + operands.push(parameterTypes[i].toNativeZero(module)); + } + } + var returnType = signature.returnType; this.currentType = returnType; - this.ensureFunctionType(signature); - return this.module.createCallIndirect(indexArg, operands, signature.toSignatureString()); + return module.createBlock(null, [ + this.ensureArgumentCount(numArguments), // might still be calling a trampoline + module.createCallIndirect(indexArg, operands, signature.toSignatureString()) + ], returnType.toNativeType()); + } + + /** Makes sure that the `argumentCount` helper global is present and returns an expression that sets it. */ + private ensureArgumentCount(argumentCount: i32): ExpressionRef { + var module = this.module; + if (!this.argumentCountRef) { + this.argumentCountRef = module.addGlobal( + "argumentCount", + NativeType.I32, + true, + module.createI32(0) + ); + } + return module.createSetGlobal("argumentCount", module.createI32(argumentCount)); } compileCommaExpression(expression: CommaExpression, contextualType: Type): ExpressionRef { diff --git a/src/program.ts b/src/program.ts index fc62a1af..257801c0 100644 --- a/src/program.ts +++ b/src/program.ts @@ -2070,7 +2070,9 @@ export enum CommonFlags { /** Has a constant value and is therefore inlined. */ INLINED = 1 << 26, /** Is scoped. */ - SCOPED = 1 << 27 + SCOPED = 1 << 27, + /** Is a trampoline. */ + TRAMPOLINE = 1 << 28 } /** Base class of all program elements. */ diff --git a/tests/compiler/call-optional.optimized.wat b/tests/compiler/call-optional.optimized.wat index fe8271b8..07e4e99e 100644 --- a/tests/compiler/call-optional.optimized.wat +++ b/tests/compiler/call-optional.optimized.wat @@ -1,12 +1,16 @@ (module (type $iiii (func (param i32 i32 i32) (result i32))) - (type $iiiii (func (param i32 i32 i32 i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (global $argumentCount (mut i32) (i32.const 0)) + (global $call-optional/optIndirect (mut i32) (i32.const 0)) + (table 1 1 anyfunc) + (elem (i32.const 0) $call-optional/opt|trampoline) (memory $0 1) (data (i32.const 4) "\10\00\00\00c\00a\00l\00l\00-\00o\00p\00t\00i\00o\00n\00a\00l\00.\00t\00s") (export "memory" (memory $0)) + (export "table" (table $0)) (start $start) (func $call-optional/opt (; 1 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (i32.add @@ -17,14 +21,14 @@ (get_local $2) ) ) - (func $call-optional/opt|trampoline (; 2 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) - (block $N=2 - (block $N=1 - (block $N=0 - (block $N=invalid - (br_table $N=0 $N=1 $N=2 $N=invalid + (func $call-optional/opt|trampoline (; 2 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $2of2 + (block $1of2 + (block $0of2 + (block $oob + (br_table $0of2 $1of2 $2of2 $oob (i32.sub - (get_local $3) + (get_global $argumentCount) (i32.const 1) ) ) @@ -47,11 +51,15 @@ ) (func $start (; 3 ;) (type $v) (if - (call $call-optional/opt|trampoline - (i32.const 3) - (i32.const 0) - (i32.const 0) - (i32.const 1) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call $call-optional/opt|trampoline + (i32.const 3) + (i32.const 0) + (i32.const 0) + ) ) (block (call $abort @@ -64,14 +72,18 @@ ) ) (if - (i32.ne - (call $call-optional/opt|trampoline - (i32.const 3) - (i32.const 4) - (i32.const 0) + (block (result i32) + (set_global $argumentCount (i32.const 2) ) - (i32.const 5) + (i32.ne + (call $call-optional/opt|trampoline + (i32.const 3) + (i32.const 4) + (i32.const 0) + ) + (i32.const 5) + ) ) (block (call $abort @@ -102,5 +114,77 @@ (unreachable) ) ) + (if + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call_indirect (type $iiii) + (i32.const 3) + (i32.const 0) + (i32.const 0) + (get_global $call-optional/optIndirect) + ) + ) + (block + (call $abort + (i32.const 0) + (i32.const 4) + (i32.const 9) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (block (result i32) + (set_global $argumentCount + (i32.const 2) + ) + (i32.ne + (call_indirect (type $iiii) + (i32.const 3) + (i32.const 4) + (i32.const 0) + (get_global $call-optional/optIndirect) + ) + (i32.const 5) + ) + ) + (block + (call $abort + (i32.const 0) + (i32.const 4) + (i32.const 10) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (block (result i32) + (set_global $argumentCount + (i32.const 3) + ) + (i32.ne + (call_indirect (type $iiii) + (i32.const 3) + (i32.const 4) + (i32.const 5) + (get_global $call-optional/optIndirect) + ) + (i32.const 12) + ) + ) + (block + (call $abort + (i32.const 0) + (i32.const 4) + (i32.const 11) + (i32.const 0) + ) + (unreachable) + ) + ) ) ) diff --git a/tests/compiler/call-optional.ts b/tests/compiler/call-optional.ts index f97cbae3..075d7f0c 100644 --- a/tests/compiler/call-optional.ts +++ b/tests/compiler/call-optional.ts @@ -1,6 +1,11 @@ function opt(a: i32, b: i32 = -1, c: i32 = -2): i32 { return a + b + c; } -assert(opt(3) == 0); // calls the trampoline with N=0 -assert(opt(3, 4) == 5); // calls the trampoline with N=1 +assert(opt(3) == 0); // calls the trampoline with 0of2 +assert(opt(3, 4) == 5); // calls the trampoline with 1of2 assert(opt(3, 4, 5) == 12); // calls the function directly + +var optIndirect = opt; +assert(optIndirect(3) == 0); // calls the trampoline indirectly with 0of2 +assert(optIndirect(3, 4) == 5); // calls the trampoline indirectly with 1of2 +assert(optIndirect(3, 4, 5) == 12); // calls the trampoline indirectly with 2of2 diff --git a/tests/compiler/call-optional.untouched.wat b/tests/compiler/call-optional.untouched.wat index 8fdd2e4c..77106bdc 100644 --- a/tests/compiler/call-optional.untouched.wat +++ b/tests/compiler/call-optional.untouched.wat @@ -1,13 +1,17 @@ (module (type $iiii (func (param i32 i32 i32) (result i32))) - (type $iiiii (func (param i32 i32 i32 i32) (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) (type $v (func)) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) + (global $argumentCount (mut i32) (i32.const 0)) + (global $call-optional/optIndirect (mut i32) (i32.const 0)) (global $HEAP_BASE i32 (i32.const 40)) + (table 1 1 anyfunc) + (elem (i32.const 0) $call-optional/opt|trampoline) (memory $0 1) (data (i32.const 4) "\10\00\00\00c\00a\00l\00l\00-\00o\00p\00t\00i\00o\00n\00a\00l\00.\00t\00s\00") (export "memory" (memory $0)) + (export "table" (table $0)) (start $start) (func $call-optional/opt (; 1 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (return @@ -20,14 +24,14 @@ ) ) ) - (func $call-optional/opt|trampoline (; 2 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) - (block $N=2 - (block $N=1 - (block $N=0 - (block $N=invalid - (br_table $N=0 $N=1 $N=2 $N=invalid + (func $call-optional/opt|trampoline (; 2 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $2of2 + (block $1of2 + (block $0of2 + (block $oob + (br_table $0of2 $1of2 $2of2 $oob (i32.sub - (get_local $3) + (get_global $argumentCount) (i32.const 1) ) ) @@ -52,11 +56,15 @@ (if (i32.eqz (i32.eq - (call $call-optional/opt|trampoline - (i32.const 3) - (i32.const 0) - (i32.const 0) - (i32.const 1) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call $call-optional/opt|trampoline + (i32.const 3) + (i32.const 0) + (i32.const 0) + ) ) (i32.const 0) ) @@ -74,11 +82,15 @@ (if (i32.eqz (i32.eq - (call $call-optional/opt|trampoline - (i32.const 3) - (i32.const 4) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 2) + ) + (call $call-optional/opt|trampoline + (i32.const 3) + (i32.const 4) + (i32.const 0) + ) ) (i32.const 5) ) @@ -114,5 +126,86 @@ (unreachable) ) ) + (if + (i32.eqz + (i32.eq + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call_indirect (type $iiii) + (i32.const 3) + (i32.const 0) + (i32.const 0) + (get_global $call-optional/optIndirect) + ) + ) + (i32.const 0) + ) + ) + (block + (call $abort + (i32.const 0) + (i32.const 4) + (i32.const 9) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (i32.eq + (block (result i32) + (set_global $argumentCount + (i32.const 2) + ) + (call_indirect (type $iiii) + (i32.const 3) + (i32.const 4) + (i32.const 0) + (get_global $call-optional/optIndirect) + ) + ) + (i32.const 5) + ) + ) + (block + (call $abort + (i32.const 0) + (i32.const 4) + (i32.const 10) + (i32.const 0) + ) + (unreachable) + ) + ) + (if + (i32.eqz + (i32.eq + (block (result i32) + (set_global $argumentCount + (i32.const 3) + ) + (call_indirect (type $iiii) + (i32.const 3) + (i32.const 4) + (i32.const 5) + (get_global $call-optional/optIndirect) + ) + ) + (i32.const 12) + ) + ) + (block + (call $abort + (i32.const 0) + (i32.const 4) + (i32.const 11) + (i32.const 0) + ) + (unreachable) + ) + ) ) ) diff --git a/tests/compiler/function-expression.optimized.wat b/tests/compiler/function-expression.optimized.wat index f2ccf4be..91b4d398 100644 --- a/tests/compiler/function-expression.optimized.wat +++ b/tests/compiler/function-expression.optimized.wat @@ -5,6 +5,7 @@ (type $i (func (result i32))) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (global $function-expression/f1 (mut i32) (i32.const 0)) + (global $argumentCount (mut i32) (i32.const 0)) (global $function-expression/f2 (mut i32) (i32.const 1)) (global $function-expression/f3 (mut i32) (i32.const 2)) (global $function-expression/f4 (mut i32) (i32.const 3)) @@ -26,12 +27,17 @@ ) (func $start (; 4 ;) (type $v) (if - (i32.ne - (call_indirect (type $ii) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (i32.ne + (call_indirect (type $ii) + (i32.const 1) + (get_global $function-expression/f1) + ) (i32.const 1) - (get_global $function-expression/f1) ) - (i32.const 1) ) (block (call $abort @@ -44,12 +50,17 @@ ) ) (if - (i32.ne - (call_indirect (type $ii) - (i32.const 2) - (get_global $function-expression/f2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (i32.ne + (call_indirect (type $ii) + (i32.const 2) + (get_global $function-expression/f2) + ) + (i32.const 2) ) - (i32.const 2) ) (block (call $abort @@ -61,15 +72,23 @@ (unreachable) ) ) + (set_global $argumentCount + (i32.const 0) + ) (call_indirect (type $v) (get_global $function-expression/f3) ) (if - (i32.ne - (call_indirect (type $i) - (get_global $function-expression/f4) + (block (result i32) + (set_global $argumentCount + (i32.const 0) + ) + (i32.ne + (call_indirect (type $i) + (get_global $function-expression/f4) + ) + (i32.const 1) ) - (i32.const 1) ) (block (call $abort diff --git a/tests/compiler/function-expression.untouched.wat b/tests/compiler/function-expression.untouched.wat index f29659d4..1d6381f5 100644 --- a/tests/compiler/function-expression.untouched.wat +++ b/tests/compiler/function-expression.untouched.wat @@ -5,6 +5,7 @@ (type $i (func (result i32))) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (global $function-expression/f1 (mut i32) (i32.const 0)) + (global $argumentCount (mut i32) (i32.const 0)) (global $function-expression/f2 (mut i32) (i32.const 1)) (global $function-expression/f3 (mut i32) (i32.const 2)) (global $function-expression/f4 (mut i32) (i32.const 3)) @@ -35,9 +36,14 @@ (if (i32.eqz (i32.eq - (call_indirect (type $ii) - (i32.const 1) - (get_global $function-expression/f1) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call_indirect (type $ii) + (i32.const 1) + (get_global $function-expression/f1) + ) ) (i32.const 1) ) @@ -55,9 +61,14 @@ (if (i32.eqz (i32.eq - (call_indirect (type $ii) - (i32.const 2) - (get_global $function-expression/f2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call_indirect (type $ii) + (i32.const 2) + (get_global $function-expression/f2) + ) ) (i32.const 2) ) @@ -72,14 +83,24 @@ (unreachable) ) ) - (call_indirect (type $v) - (get_global $function-expression/f3) + (block + (set_global $argumentCount + (i32.const 0) + ) + (call_indirect (type $v) + (get_global $function-expression/f3) + ) ) (if (i32.eqz (i32.eq - (call_indirect (type $i) - (get_global $function-expression/f4) + (block (result i32) + (set_global $argumentCount + (i32.const 0) + ) + (call_indirect (type $i) + (get_global $function-expression/f4) + ) ) (i32.const 1) ) diff --git a/tests/compiler/function-types.optimized.wat b/tests/compiler/function-types.optimized.wat index ddd05921..24df9ef3 100644 --- a/tests/compiler/function-types.optimized.wat +++ b/tests/compiler/function-types.optimized.wat @@ -5,10 +5,10 @@ (type $III (func (param i64 i64) (result i64))) (type $FFF (func (param f64 f64) (result f64))) (type $iiii (func (param i32 i32 i32) (result i32))) - (type $iiiii (func (param i32 i32 i32 i32) (result i32))) (type $v (func)) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (global $function-types/i32Adder (mut i32) (i32.const 0)) + (global $argumentCount (mut i32) (i32.const 0)) (global $function-types/i64Adder (mut i32) (i32.const 0)) (table 4 4 anyfunc) (elem (i32.const 0) $function-types/makeAdder~anonymous|0 $function-types/makeAdder~anonymous|1 $function-types/makeAdder~anonymous|2 $function-types/makeAdder~anonymous|0) @@ -45,6 +45,9 @@ (i32.const 2) ) (func $function-types/doAddWithFn (; 7 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (set_global $argumentCount + (i32.const 2) + ) (call_indirect (type $iii) (get_local $0) (get_local $1) @@ -52,19 +55,22 @@ ) ) (func $function-types/doAdd (; 8 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) + (set_global $argumentCount + (i32.const 2) + ) (call_indirect (type $iii) (get_local $0) (get_local $1) (call $function-types/makeAdder) ) ) - (func $function-types/makeAndAdd|trampoline (; 9 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) - (block $N=1 - (block $N=0 - (block $N=invalid - (br_table $N=0 $N=1 $N=invalid + (func $function-types/makeAndAdd|trampoline (; 9 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $1of1 + (block $0of1 + (block $oob + (br_table $0of1 $1of1 $oob (i32.sub - (get_local $3) + (get_global $argumentCount) (i32.const 2) ) ) @@ -86,13 +92,18 @@ (call $function-types/makeAdder) ) (if - (i32.ne - (call_indirect (type $iii) - (i32.const 1) + (block (result i32) + (set_global $argumentCount (i32.const 2) - (get_global $function-types/i32Adder) ) - (i32.const 3) + (i32.ne + (call_indirect (type $iii) + (i32.const 1) + (i32.const 2) + (get_global $function-types/i32Adder) + ) + (i32.const 3) + ) ) (block (call $abort @@ -108,13 +119,18 @@ (call $function-types/makeAdder) ) (if - (i64.ne - (call_indirect (type $III) - (i64.const 10) - (i64.const 20) - (get_global $function-types/i64Adder) + (block (result i32) + (set_global $argumentCount + (i32.const 2) + ) + (i64.ne + (call_indirect (type $III) + (i64.const 10) + (i64.const 20) + (get_global $function-types/i64Adder) + ) + (i64.const 30) ) - (i64.const 30) ) (block (call $abort @@ -127,13 +143,18 @@ ) ) (if - (f64.ne - (call_indirect (type $FFF) - (f64.const 1.5) - (f64.const 2.5) - (call $function-types/makeAdder) + (block (result i32) + (set_global $argumentCount + (i32.const 2) + ) + (f64.ne + (call_indirect (type $FFF) + (f64.const 1.5) + (f64.const 2.5) + (call $function-types/makeAdder) + ) + (f64.const 4) ) - (f64.const 4) ) (block (call $abort @@ -202,14 +223,18 @@ ) ) (if - (i32.ne - (call $function-types/makeAndAdd|trampoline - (i32.const 1) - (i32.const 2) - (i32.const 0) + (block (result i32) + (set_global $argumentCount (i32.const 2) ) - (i32.const 3) + (i32.ne + (call $function-types/makeAndAdd|trampoline + (i32.const 1) + (i32.const 2) + (i32.const 0) + ) + (i32.const 3) + ) ) (block (call $abort @@ -221,5 +246,24 @@ (unreachable) ) ) + (if + (i32.ne + (call $function-types/doAddWithFn + (i32.const 1) + (i32.const 2) + (call $function-types/makeAdder) + ) + (i32.const 3) + ) + (block + (call $abort + (i32.const 0) + (i32.const 4) + (i32.const 42) + (i32.const 0) + ) + (unreachable) + ) + ) ) ) diff --git a/tests/compiler/function-types.ts b/tests/compiler/function-types.ts index ac17a90f..6c085c86 100644 --- a/tests/compiler/function-types.ts +++ b/tests/compiler/function-types.ts @@ -39,3 +39,4 @@ function makeAndAdd(a: T, b: T, adder: Adder = makeAdder()): T { } assert(makeAndAdd(1, 2) == 3); +assert(makeAndAdd(1, 2, makeAdder()) == 3); diff --git a/tests/compiler/function-types.untouched.wat b/tests/compiler/function-types.untouched.wat index e475adcd..ebef79c9 100644 --- a/tests/compiler/function-types.untouched.wat +++ b/tests/compiler/function-types.untouched.wat @@ -5,10 +5,10 @@ (type $III (func (param i64 i64) (result i64))) (type $FFF (func (param f64 f64) (result f64))) (type $iiii (func (param i32 i32 i32) (result i32))) - (type $iiiii (func (param i32 i32 i32 i32) (result i32))) (type $v (func)) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (global $function-types/i32Adder (mut i32) (i32.const 0)) + (global $argumentCount (mut i32) (i32.const 0)) (global $function-types/i64Adder (mut i32) (i32.const 0)) (global $HEAP_BASE i32 (i32.const 44)) (table 4 4 anyfunc) @@ -59,19 +59,29 @@ ) (func $function-types/doAddWithFn (; 7 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (return - (call_indirect (type $iii) - (get_local $0) - (get_local $1) - (get_local $2) + (block (result i32) + (set_global $argumentCount + (i32.const 2) + ) + (call_indirect (type $iii) + (get_local $0) + (get_local $1) + (get_local $2) + ) ) ) ) (func $function-types/doAdd (; 8 ;) (type $iii) (param $0 i32) (param $1 i32) (result i32) (return - (call_indirect (type $iii) - (get_local $0) - (get_local $1) - (call $function-types/makeAdder) + (block (result i32) + (set_global $argumentCount + (i32.const 2) + ) + (call_indirect (type $iii) + (get_local $0) + (get_local $1) + (call $function-types/makeAdder) + ) ) ) ) @@ -85,20 +95,25 @@ ) (func $function-types/makeAndAdd (; 10 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) (return - (call_indirect (type $iii) - (get_local $0) - (get_local $1) - (get_local $2) + (block (result i32) + (set_global $argumentCount + (i32.const 2) + ) + (call_indirect (type $iii) + (get_local $0) + (get_local $1) + (get_local $2) + ) ) ) ) - (func $function-types/makeAndAdd|trampoline (; 11 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) - (block $N=1 - (block $N=0 - (block $N=invalid - (br_table $N=0 $N=1 $N=invalid + (func $function-types/makeAndAdd|trampoline (; 11 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $1of1 + (block $0of1 + (block $oob + (br_table $0of1 $1of1 $oob (i32.sub - (get_local $3) + (get_global $argumentCount) (i32.const 2) ) ) @@ -123,10 +138,15 @@ (if (i32.eqz (i32.eq - (call_indirect (type $iii) - (i32.const 1) - (i32.const 2) - (get_global $function-types/i32Adder) + (block (result i32) + (set_global $argumentCount + (i32.const 2) + ) + (call_indirect (type $iii) + (i32.const 1) + (i32.const 2) + (get_global $function-types/i32Adder) + ) ) (i32.const 3) ) @@ -147,10 +167,15 @@ (if (i32.eqz (i64.eq - (call_indirect (type $III) - (i64.const 10) - (i64.const 20) - (get_global $function-types/i64Adder) + (block (result i64) + (set_global $argumentCount + (i32.const 2) + ) + (call_indirect (type $III) + (i64.const 10) + (i64.const 20) + (get_global $function-types/i64Adder) + ) ) (i64.const 30) ) @@ -168,10 +193,15 @@ (if (i32.eqz (f64.eq - (call_indirect (type $FFF) - (f64.const 1.5) - (f64.const 2.5) - (call $function-types/makeAdder) + (block (result f64) + (set_global $argumentCount + (i32.const 2) + ) + (call_indirect (type $FFF) + (f64.const 1.5) + (f64.const 2.5) + (call $function-types/makeAdder) + ) ) (f64.const 4) ) @@ -251,11 +281,15 @@ (if (i32.eqz (i32.eq - (call $function-types/makeAndAdd|trampoline - (i32.const 1) - (i32.const 2) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 2) + ) + (call $function-types/makeAndAdd|trampoline + (i32.const 1) + (i32.const 2) + (i32.const 0) + ) ) (i32.const 3) ) @@ -270,5 +304,26 @@ (unreachable) ) ) + (if + (i32.eqz + (i32.eq + (call $function-types/makeAndAdd + (i32.const 1) + (i32.const 2) + (call $function-types/makeAdder) + ) + (i32.const 3) + ) + ) + (block + (call $abort + (i32.const 0) + (i32.const 4) + (i32.const 42) + (i32.const 0) + ) + (unreachable) + ) + ) ) ) diff --git a/tests/compiler/std/array.optimized.wat b/tests/compiler/std/array.optimized.wat index b8687d72..a0fcac76 100644 --- a/tests/compiler/std/array.optimized.wat +++ b/tests/compiler/std/array.optimized.wat @@ -6,13 +6,13 @@ (type $iiiv (func (param i32 i32 i32))) (type $iv (func (param i32))) (type $iiii (func (param i32 i32 i32) (result i32))) - (type $iiiii (func (param i32 i32 i32 i32) (result i32))) (type $v (func)) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (global "$(lib)/allocator/arena/startOffset" (mut i32) (i32.const 0)) (global "$(lib)/allocator/arena/offset" (mut i32) (i32.const 0)) (global $std/array/arr (mut i32) (i32.const 0)) (global $std/array/i (mut i32) (i32.const 0)) + (global $argumentCount (mut i32) (i32.const 0)) (global $std/array/includes (mut i32) (i32.const 0)) (global $HEAP_BASE i32 (i32.const 64)) (memory $0 1) @@ -2839,14 +2839,14 @@ ) (i32.const -1) ) - (func "$(lib)/array/Array#indexOf|trampoline" (; 15 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) - (block $N=1 - (block $N=0 - (block $N=invalid - (br_table $N=0 $N=1 $N=invalid + (func "$(lib)/array/Array#indexOf|trampoline" (; 15 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $1of1 + (block $0of1 + (block $oob + (br_table $0of1 $1of1 $oob (i32.sub - (get_local $3) - (i32.const 2) + (get_global $argumentCount) + (i32.const 1) ) ) ) @@ -2950,14 +2950,14 @@ ) (i32.const 0) ) - (func "$(lib)/array/Array#includes|trampoline" (; 17 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) - (block $N=1 - (block $N=0 - (block $N=invalid - (br_table $N=0 $N=1 $N=invalid + (func "$(lib)/array/Array#includes|trampoline" (; 17 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $1of1 + (block $0of1 + (block $oob + (br_table $0of1 $1of1 $oob (i32.sub - (get_local $3) - (i32.const 2) + (get_global $argumentCount) + (i32.const 1) ) ) ) @@ -4039,11 +4039,15 @@ ) ) (set_global $std/array/i - (call "$(lib)/array/Array#indexOf|trampoline" - (get_global $std/array/arr) - (i32.const 44) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/array/Array#indexOf|trampoline" + (get_global $std/array/arr) + (i32.const 44) + (i32.const 0) + ) ) ) (if @@ -4059,11 +4063,15 @@ ) ) (set_global $std/array/i - (call "$(lib)/array/Array#indexOf|trampoline" - (get_global $std/array/arr) - (i32.const 42) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/array/Array#indexOf|trampoline" + (get_global $std/array/arr) + (i32.const 42) + (i32.const 0) + ) ) ) (if @@ -4082,11 +4090,15 @@ ) ) (set_global $std/array/i - (call "$(lib)/array/Array#indexOf|trampoline" - (get_global $std/array/arr) - (i32.const 45) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/array/Array#indexOf|trampoline" + (get_global $std/array/arr) + (i32.const 45) + (i32.const 0) + ) ) ) (if @@ -4259,11 +4271,15 @@ ) ) (set_global $std/array/includes - (call "$(lib)/array/Array#includes|trampoline" - (get_global $std/array/arr) - (i32.const 44) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/array/Array#includes|trampoline" + (get_global $std/array/arr) + (i32.const 44) + (i32.const 0) + ) ) ) (if @@ -4282,11 +4298,15 @@ ) ) (set_global $std/array/includes - (call "$(lib)/array/Array#includes|trampoline" - (get_global $std/array/arr) - (i32.const 42) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/array/Array#includes|trampoline" + (get_global $std/array/arr) + (i32.const 42) + (i32.const 0) + ) ) ) (if @@ -4305,11 +4325,15 @@ ) ) (set_global $std/array/includes - (call "$(lib)/array/Array#includes|trampoline" - (get_global $std/array/arr) - (i32.const 45) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/array/Array#includes|trampoline" + (get_global $std/array/arr) + (i32.const 45) + (i32.const 0) + ) ) ) (if diff --git a/tests/compiler/std/array.untouched.wat b/tests/compiler/std/array.untouched.wat index 61766e90..fc1bd171 100644 --- a/tests/compiler/std/array.untouched.wat +++ b/tests/compiler/std/array.untouched.wat @@ -7,7 +7,6 @@ (type $iiiv (func (param i32 i32 i32))) (type $iv (func (param i32))) (type $iiii (func (param i32 i32 i32) (result i32))) - (type $iiiii (func (param i32 i32 i32 i32) (result i32))) (type $v (func)) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (global "$(lib)/allocator/common/alignment/BITS" i32 (i32.const 3)) @@ -17,6 +16,7 @@ (global "$(lib)/allocator/arena/offset" (mut i32) (i32.const 0)) (global $std/array/arr (mut i32) (i32.const 0)) (global $std/array/i (mut i32) (i32.const 0)) + (global $argumentCount (mut i32) (i32.const 0)) (global $std/array/includes (mut i32) (i32.const 0)) (global $HEAP_BASE i32 (i32.const 64)) (memory $0 1) @@ -3187,14 +3187,14 @@ (i32.const -1) ) ) - (func "$(lib)/array/Array#indexOf|trampoline" (; 15 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) - (block $N=1 - (block $N=0 - (block $N=invalid - (br_table $N=0 $N=1 $N=invalid + (func "$(lib)/array/Array#indexOf|trampoline" (; 15 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $1of1 + (block $0of1 + (block $oob + (br_table $0of1 $1of1 $oob (i32.sub - (get_local $3) - (i32.const 2) + (get_global $argumentCount) + (i32.const 1) ) ) ) @@ -3308,14 +3308,14 @@ (i32.const 0) ) ) - (func "$(lib)/array/Array#includes|trampoline" (; 17 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) - (block $N=1 - (block $N=0 - (block $N=invalid - (br_table $N=0 $N=1 $N=invalid + (func "$(lib)/array/Array#includes|trampoline" (; 17 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $1of1 + (block $0of1 + (block $oob + (br_table $0of1 $1of1 $oob (i32.sub - (get_local $3) - (i32.const 2) + (get_global $argumentCount) + (i32.const 1) ) ) ) @@ -4525,11 +4525,15 @@ ) ) (set_global $std/array/i - (call "$(lib)/array/Array#indexOf|trampoline" - (get_global $std/array/arr) - (i32.const 44) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/array/Array#indexOf|trampoline" + (get_global $std/array/arr) + (i32.const 44) + (i32.const 0) + ) ) ) (if @@ -4550,11 +4554,15 @@ ) ) (set_global $std/array/i - (call "$(lib)/array/Array#indexOf|trampoline" - (get_global $std/array/arr) - (i32.const 42) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/array/Array#indexOf|trampoline" + (get_global $std/array/arr) + (i32.const 42) + (i32.const 0) + ) ) ) (if @@ -4575,11 +4583,15 @@ ) ) (set_global $std/array/i - (call "$(lib)/array/Array#indexOf|trampoline" - (get_global $std/array/arr) - (i32.const 45) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/array/Array#indexOf|trampoline" + (get_global $std/array/arr) + (i32.const 45) + (i32.const 0) + ) ) ) (if @@ -4768,11 +4780,15 @@ ) ) (set_global $std/array/includes - (call "$(lib)/array/Array#includes|trampoline" - (get_global $std/array/arr) - (i32.const 44) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/array/Array#includes|trampoline" + (get_global $std/array/arr) + (i32.const 44) + (i32.const 0) + ) ) ) (if @@ -4793,11 +4809,15 @@ ) ) (set_global $std/array/includes - (call "$(lib)/array/Array#includes|trampoline" - (get_global $std/array/arr) - (i32.const 42) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/array/Array#includes|trampoline" + (get_global $std/array/arr) + (i32.const 42) + (i32.const 0) + ) ) ) (if @@ -4818,11 +4838,15 @@ ) ) (set_global $std/array/includes - (call "$(lib)/array/Array#includes|trampoline" - (get_global $std/array/arr) - (i32.const 45) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/array/Array#includes|trampoline" + (get_global $std/array/arr) + (i32.const 45) + (i32.const 0) + ) ) ) (if diff --git a/tests/compiler/std/arraybuffer.optimized.wat b/tests/compiler/std/arraybuffer.optimized.wat index 66e7e815..afbc6eb1 100644 --- a/tests/compiler/std/arraybuffer.optimized.wat +++ b/tests/compiler/std/arraybuffer.optimized.wat @@ -4,13 +4,13 @@ (type $iiiiv (func (param i32 i32 i32 i32))) (type $iiii (func (param i32 i32 i32) (result i32))) (type $iiiv (func (param i32 i32 i32))) - (type $iiiii (func (param i32 i32 i32 i32) (result i32))) (type $v (func)) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (global "$(lib)/allocator/arena/startOffset" (mut i32) (i32.const 0)) (global "$(lib)/allocator/arena/offset" (mut i32) (i32.const 0)) (global $std/arraybuffer/buffer (mut i32) (i32.const 0)) (global "$(lib)/arraybuffer/ArrayBuffer.EMPTY" (mut i32) (i32.const 0)) + (global $argumentCount (mut i32) (i32.const 0)) (global $std/arraybuffer/sliced (mut i32) (i32.const 0)) (global $HEAP_BASE i32 (i32.const 44)) (memory $0 1) @@ -2129,16 +2129,13 @@ ) ) ) - (func "$(lib)/arraybuffer/ArrayBuffer#slice|trampoline" (; 6 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) - (block $N=2 - (block $N=1 - (block $N=0 - (block $N=invalid - (br_table $N=0 $N=1 $N=2 $N=invalid - (i32.sub - (get_local $3) - (i32.const 1) - ) + (func "$(lib)/arraybuffer/ArrayBuffer#slice|trampoline" (; 6 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $2of2 + (block $1of2 + (block $0of2 + (block $oob + (br_table $0of2 $1of2 $2of2 $oob + (get_global $argumentCount) ) ) (unreachable) @@ -2194,11 +2191,15 @@ ) ) (set_global $std/arraybuffer/sliced - (call "$(lib)/arraybuffer/ArrayBuffer#slice|trampoline" - (get_global $std/arraybuffer/buffer) - (i32.const 0) - (i32.const 0) - (i32.const 1) + (block (result i32) + (set_global $argumentCount + (i32.const 0) + ) + (call "$(lib)/arraybuffer/ArrayBuffer#slice|trampoline" + (get_global $std/arraybuffer/buffer) + (i32.const 0) + (i32.const 0) + ) ) ) (if @@ -2234,11 +2235,15 @@ ) ) (set_global $std/arraybuffer/sliced - (call "$(lib)/arraybuffer/ArrayBuffer#slice|trampoline" - (get_global $std/arraybuffer/buffer) - (i32.const 1) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/arraybuffer/ArrayBuffer#slice|trampoline" + (get_global $std/arraybuffer/buffer) + (i32.const 1) + (i32.const 0) + ) ) ) (if @@ -2259,11 +2264,15 @@ ) ) (set_global $std/arraybuffer/sliced - (call "$(lib)/arraybuffer/ArrayBuffer#slice|trampoline" - (get_global $std/arraybuffer/buffer) - (i32.const -1) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/arraybuffer/ArrayBuffer#slice|trampoline" + (get_global $std/arraybuffer/buffer) + (i32.const -1) + (i32.const 0) + ) ) ) (if @@ -2380,11 +2389,15 @@ ) ) (set_global $std/arraybuffer/sliced - (call "$(lib)/arraybuffer/ArrayBuffer#slice|trampoline" - (get_global $std/arraybuffer/buffer) - (i32.const 42) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/arraybuffer/ArrayBuffer#slice|trampoline" + (get_global $std/arraybuffer/buffer) + (i32.const 42) + (i32.const 0) + ) ) ) (if diff --git a/tests/compiler/std/arraybuffer.untouched.wat b/tests/compiler/std/arraybuffer.untouched.wat index 1be02e7e..cdb400f2 100644 --- a/tests/compiler/std/arraybuffer.untouched.wat +++ b/tests/compiler/std/arraybuffer.untouched.wat @@ -5,7 +5,6 @@ (type $iiiiv (func (param i32 i32 i32 i32))) (type $iiii (func (param i32 i32 i32) (result i32))) (type $iiiv (func (param i32 i32 i32))) - (type $iiiii (func (param i32 i32 i32 i32) (result i32))) (type $v (func)) (import "env" "abort" (func $abort (param i32 i32 i32 i32))) (global "$(lib)/allocator/common/alignment/BITS" i32 (i32.const 3)) @@ -16,6 +15,7 @@ (global "$(lib)/arraybuffer/HEADER_SIZE" i32 (i32.const 4)) (global $std/arraybuffer/buffer (mut i32) (i32.const 0)) (global "$(lib)/arraybuffer/ArrayBuffer.EMPTY" (mut i32) (i32.const 0)) + (global $argumentCount (mut i32) (i32.const 0)) (global $std/arraybuffer/sliced (mut i32) (i32.const 0)) (global $HEAP_BASE i32 (i32.const 44)) (memory $0 1) @@ -2435,16 +2435,13 @@ ) ) ) - (func "$(lib)/arraybuffer/ArrayBuffer#slice|trampoline" (; 6 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) - (block $N=2 - (block $N=1 - (block $N=0 - (block $N=invalid - (br_table $N=0 $N=1 $N=2 $N=invalid - (i32.sub - (get_local $3) - (i32.const 1) - ) + (func "$(lib)/arraybuffer/ArrayBuffer#slice|trampoline" (; 6 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $2of2 + (block $1of2 + (block $0of2 + (block $oob + (br_table $0of2 $1of2 $2of2 $oob + (get_global $argumentCount) ) ) (unreachable) @@ -2505,11 +2502,15 @@ ) ) (set_global $std/arraybuffer/sliced - (call "$(lib)/arraybuffer/ArrayBuffer#slice|trampoline" - (get_global $std/arraybuffer/buffer) - (i32.const 0) - (i32.const 0) - (i32.const 1) + (block (result i32) + (set_global $argumentCount + (i32.const 0) + ) + (call "$(lib)/arraybuffer/ArrayBuffer#slice|trampoline" + (get_global $std/arraybuffer/buffer) + (i32.const 0) + (i32.const 0) + ) ) ) (if @@ -2549,11 +2550,15 @@ ) ) (set_global $std/arraybuffer/sliced - (call "$(lib)/arraybuffer/ArrayBuffer#slice|trampoline" - (get_global $std/arraybuffer/buffer) - (i32.const 1) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/arraybuffer/ArrayBuffer#slice|trampoline" + (get_global $std/arraybuffer/buffer) + (i32.const 1) + (i32.const 0) + ) ) ) (if @@ -2576,11 +2581,15 @@ ) ) (set_global $std/arraybuffer/sliced - (call "$(lib)/arraybuffer/ArrayBuffer#slice|trampoline" - (get_global $std/arraybuffer/buffer) - (i32.const -1) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/arraybuffer/ArrayBuffer#slice|trampoline" + (get_global $std/arraybuffer/buffer) + (i32.const -1) + (i32.const 0) + ) ) ) (if @@ -2707,11 +2716,15 @@ ) ) (set_global $std/arraybuffer/sliced - (call "$(lib)/arraybuffer/ArrayBuffer#slice|trampoline" - (get_global $std/arraybuffer/buffer) - (i32.const 42) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/arraybuffer/ArrayBuffer#slice|trampoline" + (get_global $std/arraybuffer/buffer) + (i32.const 42) + (i32.const 0) + ) ) ) (if diff --git a/tests/compiler/std/string.optimized.wat b/tests/compiler/std/string.optimized.wat index fefb5bd6..1f5a8d45 100644 --- a/tests/compiler/std/string.optimized.wat +++ b/tests/compiler/std/string.optimized.wat @@ -3,9 +3,7 @@ (type $iiiiv (func (param i32 i32 i32 i32))) (type $iii (func (param i32 i32) (result i32))) (type $iiii (func (param i32 i32 i32) (result i32))) - (type $iiiii (func (param i32 i32 i32 i32) (result i32))) (type $iiF (func (param i32 i32) (result f64))) - (type $iiiF (func (param i32 i32 i32) (result f64))) (type $iF (func (param i32) (result f64))) (type $ii (func (param i32) (result i32))) (type $iiiv (func (param i32 i32 i32))) @@ -14,6 +12,7 @@ (global "$(lib)/allocator/arena/startOffset" (mut i32) (i32.const 0)) (global "$(lib)/allocator/arena/offset" (mut i32) (i32.const 0)) (global $std/string/str (mut i32) (i32.const 4)) + (global $argumentCount (mut i32) (i32.const 0)) (global $std/string/c (mut i32) (i32.const 0)) (global $HEAP_BASE i32 (i32.const 348)) (memory $0 1) @@ -279,14 +278,14 @@ ) ) ) - (func "$(lib)/string/String#startsWith|trampoline" (; 5 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) - (block $N=1 - (block $N=0 - (block $N=invalid - (br_table $N=0 $N=1 $N=invalid + (func "$(lib)/string/String#startsWith|trampoline" (; 5 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $1of1 + (block $0of1 + (block $oob + (br_table $0of1 $1of1 $oob (i32.sub - (get_local $3) - (i32.const 2) + (get_global $argumentCount) + (i32.const 1) ) ) ) @@ -388,14 +387,14 @@ ) ) ) - (func "$(lib)/string/String#endsWith|trampoline" (; 7 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) - (block $N=1 - (block $N=0 - (block $N=invalid - (br_table $N=0 $N=1 $N=invalid + (func "$(lib)/string/String#endsWith|trampoline" (; 7 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $1of1 + (block $0of1 + (block $oob + (br_table $0of1 $1of1 $oob (i32.sub - (get_local $3) - (i32.const 2) + (get_global $argumentCount) + (i32.const 1) ) ) ) @@ -527,14 +526,14 @@ (i32.const -1) ) ) - (func "$(lib)/string/String#includes|trampoline" (; 10 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) - (block $N=1 - (block $N=0 - (block $N=invalid - (br_table $N=0 $N=1 $N=invalid + (func "$(lib)/string/String#includes|trampoline" (; 10 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $1of1 + (block $0of1 + (block $oob + (br_table $0of1 $1of1 $oob (i32.sub - (get_local $3) - (i32.const 2) + (get_global $argumentCount) + (i32.const 1) ) ) ) @@ -550,14 +549,14 @@ (get_local $2) ) ) - (func "$(lib)/string/String#indexOf|trampoline" (; 11 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) - (block $N=1 - (block $N=0 - (block $N=invalid - (br_table $N=0 $N=1 $N=invalid + (func "$(lib)/string/String#indexOf|trampoline" (; 11 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $1of1 + (block $0of1 + (block $oob + (br_table $0of1 $1of1 $oob (i32.sub - (get_local $3) - (i32.const 2) + (get_global $argumentCount) + (i32.const 1) ) ) ) @@ -947,13 +946,13 @@ (get_local $1) ) ) - (func "$(lib)/string/parseInt|trampoline" (; 15 ;) (type $iiiF) (param $0 i32) (param $1 i32) (param $2 i32) (result f64) - (block $N=1 - (block $N=0 - (block $N=invalid - (br_table $N=0 $N=1 $N=invalid + (func "$(lib)/string/parseInt|trampoline" (; 15 ;) (type $iiF) (param $0 i32) (param $1 i32) (result f64) + (block $1of1 + (block $0of1 + (block $oob + (br_table $0of1 $1of1 $oob (i32.sub - (get_local $2) + (get_global $argumentCount) (i32.const 1) ) ) @@ -3368,12 +3367,16 @@ ) ) (if - (i32.eqz - (call "$(lib)/string/String#startsWith|trampoline" - (get_global $std/string/str) - (i32.const 108) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (i32.eqz + (call "$(lib)/string/String#startsWith|trampoline" + (get_global $std/string/str) + (i32.const 108) + (i32.const 0) + ) ) ) (block @@ -3387,12 +3390,16 @@ ) ) (if - (i32.eqz - (call "$(lib)/string/String#endsWith|trampoline" - (get_global $std/string/str) - (i32.const 128) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (i32.eqz + (call "$(lib)/string/String#endsWith|trampoline" + (get_global $std/string/str) + (i32.const 128) + (i32.const 0) + ) ) ) (block @@ -3406,12 +3413,16 @@ ) ) (if - (i32.eqz - (call "$(lib)/string/String#includes|trampoline" - (get_global $std/string/str) - (i32.const 144) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (i32.eqz + (call "$(lib)/string/String#includes|trampoline" + (get_global $std/string/str) + (i32.const 144) + (i32.const 0) + ) ) ) (block @@ -3425,14 +3436,18 @@ ) ) (if - (i32.ne - (call "$(lib)/string/String#indexOf|trampoline" - (get_global $std/string/str) - (i32.const 156) - (i32.const 0) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (i32.ne + (call "$(lib)/string/String#indexOf|trampoline" + (get_global $std/string/str) + (i32.const 156) + (i32.const 0) + ) (i32.const 2) ) - (i32.const 2) ) (block (call $abort @@ -3445,14 +3460,18 @@ ) ) (if - (i32.ne - (call "$(lib)/string/String#indexOf|trampoline" - (get_global $std/string/str) - (i32.const 164) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (i32.ne + (call "$(lib)/string/String#indexOf|trampoline" + (get_global $std/string/str) + (i32.const 164) + (i32.const 0) + ) + (i32.const -1) ) - (i32.const -1) ) (block (call $abort @@ -3465,13 +3484,17 @@ ) ) (if - (f64.ne - (call "$(lib)/string/parseInt|trampoline" - (i32.const 172) - (i32.const 0) + (block (result i32) + (set_global $argumentCount (i32.const 1) ) - (f64.const 0) + (f64.ne + (call "$(lib)/string/parseInt|trampoline" + (i32.const 172) + (i32.const 0) + ) + (f64.const 0) + ) ) (block (call $abort @@ -3484,13 +3507,17 @@ ) ) (if - (f64.ne - (call "$(lib)/string/parseInt|trampoline" - (i32.const 180) - (i32.const 0) + (block (result i32) + (set_global $argumentCount (i32.const 1) ) - (f64.const 1) + (f64.ne + (call "$(lib)/string/parseInt|trampoline" + (i32.const 180) + (i32.const 0) + ) + (f64.const 1) + ) ) (block (call $abort @@ -3503,13 +3530,17 @@ ) ) (if - (f64.ne - (call "$(lib)/string/parseInt|trampoline" - (i32.const 188) - (i32.const 0) + (block (result i32) + (set_global $argumentCount (i32.const 1) ) - (f64.const 5) + (f64.ne + (call "$(lib)/string/parseInt|trampoline" + (i32.const 188) + (i32.const 0) + ) + (f64.const 5) + ) ) (block (call $abort @@ -3522,13 +3553,17 @@ ) ) (if - (f64.ne - (call "$(lib)/string/parseInt|trampoline" - (i32.const 204) - (i32.const 0) + (block (result i32) + (set_global $argumentCount (i32.const 1) ) - (f64.const 455) + (f64.ne + (call "$(lib)/string/parseInt|trampoline" + (i32.const 204) + (i32.const 0) + ) + (f64.const 455) + ) ) (block (call $abort @@ -3541,13 +3576,17 @@ ) ) (if - (f64.ne - (call "$(lib)/string/parseInt|trampoline" - (i32.const 220) - (i32.const 0) + (block (result i32) + (set_global $argumentCount (i32.const 1) ) - (f64.const 3855) + (f64.ne + (call "$(lib)/string/parseInt|trampoline" + (i32.const 220) + (i32.const 0) + ) + (f64.const 3855) + ) ) (block (call $abort @@ -3560,13 +3599,17 @@ ) ) (if - (f64.ne - (call "$(lib)/string/parseInt|trampoline" - (i32.const 236) - (i32.const 0) + (block (result i32) + (set_global $argumentCount (i32.const 1) ) - (f64.const 3855) + (f64.ne + (call "$(lib)/string/parseInt|trampoline" + (i32.const 236) + (i32.const 0) + ) + (f64.const 3855) + ) ) (block (call $abort @@ -3579,13 +3622,17 @@ ) ) (if - (f64.ne - (call "$(lib)/string/parseInt|trampoline" - (i32.const 252) - (i32.const 0) + (block (result i32) + (set_global $argumentCount (i32.const 1) ) - (f64.const 11) + (f64.ne + (call "$(lib)/string/parseInt|trampoline" + (i32.const 252) + (i32.const 0) + ) + (f64.const 11) + ) ) (block (call $abort @@ -3598,13 +3645,17 @@ ) ) (if - (f64.ne - (call "$(lib)/string/parseInt|trampoline" - (i32.const 264) - (i32.const 0) + (block (result i32) + (set_global $argumentCount (i32.const 1) ) - (f64.const 1) + (f64.ne + (call "$(lib)/string/parseInt|trampoline" + (i32.const 264) + (i32.const 0) + ) + (f64.const 1) + ) ) (block (call $abort diff --git a/tests/compiler/std/string.untouched.wat b/tests/compiler/std/string.untouched.wat index 781706ab..3ae80a52 100644 --- a/tests/compiler/std/string.untouched.wat +++ b/tests/compiler/std/string.untouched.wat @@ -3,9 +3,7 @@ (type $iiiiv (func (param i32 i32 i32 i32))) (type $iii (func (param i32 i32) (result i32))) (type $iiii (func (param i32 i32 i32) (result i32))) - (type $iiiii (func (param i32 i32 i32 i32) (result i32))) (type $iiF (func (param i32 i32) (result f64))) - (type $iiiF (func (param i32 i32 i32) (result f64))) (type $iF (func (param i32) (result f64))) (type $ii (func (param i32) (result i32))) (type $iiiv (func (param i32 i32 i32))) @@ -18,6 +16,7 @@ (global "$(lib)/allocator/arena/offset" (mut i32) (i32.const 0)) (global $std/string/str (mut i32) (i32.const 4)) (global "$(lib)/string/HEADER_SIZE" i32 (i32.const 4)) + (global $argumentCount (mut i32) (i32.const 0)) (global "$(lib)/string/CharCode.PLUS" i32 (i32.const 43)) (global "$(lib)/string/CharCode.MINUS" i32 (i32.const 45)) (global "$(lib)/string/CharCode.DOT" i32 (i32.const 46)) @@ -344,14 +343,14 @@ ) ) ) - (func "$(lib)/string/String#startsWith|trampoline" (; 5 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) - (block $N=1 - (block $N=0 - (block $N=invalid - (br_table $N=0 $N=1 $N=invalid + (func "$(lib)/string/String#startsWith|trampoline" (; 5 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $1of1 + (block $0of1 + (block $oob + (br_table $0of1 $1of1 $oob (i32.sub - (get_local $3) - (i32.const 2) + (get_global $argumentCount) + (i32.const 1) ) ) ) @@ -471,14 +470,14 @@ ) ) ) - (func "$(lib)/string/String#endsWith|trampoline" (; 7 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) - (block $N=1 - (block $N=0 - (block $N=invalid - (br_table $N=0 $N=1 $N=invalid + (func "$(lib)/string/String#endsWith|trampoline" (; 7 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $1of1 + (block $0of1 + (block $oob + (br_table $0of1 $1of1 $oob (i32.sub - (get_local $3) - (i32.const 2) + (get_global $argumentCount) + (i32.const 1) ) ) ) @@ -635,14 +634,14 @@ ) ) ) - (func "$(lib)/string/String#includes|trampoline" (; 10 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) - (block $N=1 - (block $N=0 - (block $N=invalid - (br_table $N=0 $N=1 $N=invalid + (func "$(lib)/string/String#includes|trampoline" (; 10 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $1of1 + (block $0of1 + (block $oob + (br_table $0of1 $1of1 $oob (i32.sub - (get_local $3) - (i32.const 2) + (get_global $argumentCount) + (i32.const 1) ) ) ) @@ -658,14 +657,14 @@ (get_local $2) ) ) - (func "$(lib)/string/String#indexOf|trampoline" (; 11 ;) (type $iiiii) (param $0 i32) (param $1 i32) (param $2 i32) (param $3 i32) (result i32) - (block $N=1 - (block $N=0 - (block $N=invalid - (br_table $N=0 $N=1 $N=invalid + (func "$(lib)/string/String#indexOf|trampoline" (; 11 ;) (type $iiii) (param $0 i32) (param $1 i32) (param $2 i32) (result i32) + (block $1of1 + (block $0of1 + (block $oob + (br_table $0of1 $1of1 $oob (i32.sub - (get_local $3) - (i32.const 2) + (get_global $argumentCount) + (i32.const 1) ) ) ) @@ -1104,13 +1103,13 @@ ) ) ) - (func "$(lib)/string/parseInt|trampoline" (; 15 ;) (type $iiiF) (param $0 i32) (param $1 i32) (param $2 i32) (result f64) - (block $N=1 - (block $N=0 - (block $N=invalid - (br_table $N=0 $N=1 $N=invalid + (func "$(lib)/string/parseInt|trampoline" (; 15 ;) (type $iiF) (param $0 i32) (param $1 i32) (result f64) + (block $1of1 + (block $0of1 + (block $oob + (br_table $0of1 $1of1 $oob (i32.sub - (get_local $2) + (get_global $argumentCount) (i32.const 1) ) ) @@ -3865,11 +3864,15 @@ ) (if (i32.eqz - (call "$(lib)/string/String#startsWith|trampoline" - (get_global $std/string/str) - (i32.const 108) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/string/String#startsWith|trampoline" + (get_global $std/string/str) + (i32.const 108) + (i32.const 0) + ) ) ) (block @@ -3884,11 +3887,15 @@ ) (if (i32.eqz - (call "$(lib)/string/String#endsWith|trampoline" - (get_global $std/string/str) - (i32.const 128) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/string/String#endsWith|trampoline" + (get_global $std/string/str) + (i32.const 128) + (i32.const 0) + ) ) ) (block @@ -3903,11 +3910,15 @@ ) (if (i32.eqz - (call "$(lib)/string/String#includes|trampoline" - (get_global $std/string/str) - (i32.const 144) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/string/String#includes|trampoline" + (get_global $std/string/str) + (i32.const 144) + (i32.const 0) + ) ) ) (block @@ -3923,11 +3934,15 @@ (if (i32.eqz (i32.eq - (call "$(lib)/string/String#indexOf|trampoline" - (get_global $std/string/str) - (i32.const 156) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/string/String#indexOf|trampoline" + (get_global $std/string/str) + (i32.const 156) + (i32.const 0) + ) ) (i32.const 2) ) @@ -3945,11 +3960,15 @@ (if (i32.eqz (i32.eq - (call "$(lib)/string/String#indexOf|trampoline" - (get_global $std/string/str) - (i32.const 164) - (i32.const 0) - (i32.const 2) + (block (result i32) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/string/String#indexOf|trampoline" + (get_global $std/string/str) + (i32.const 164) + (i32.const 0) + ) ) (i32.const -1) ) @@ -3967,10 +3986,14 @@ (if (i32.eqz (f64.eq - (call "$(lib)/string/parseInt|trampoline" - (i32.const 172) - (i32.const 0) - (i32.const 1) + (block (result f64) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/string/parseInt|trampoline" + (i32.const 172) + (i32.const 0) + ) ) (f64.const 0) ) @@ -3988,10 +4011,14 @@ (if (i32.eqz (f64.eq - (call "$(lib)/string/parseInt|trampoline" - (i32.const 180) - (i32.const 0) - (i32.const 1) + (block (result f64) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/string/parseInt|trampoline" + (i32.const 180) + (i32.const 0) + ) ) (f64.const 1) ) @@ -4009,10 +4036,14 @@ (if (i32.eqz (f64.eq - (call "$(lib)/string/parseInt|trampoline" - (i32.const 188) - (i32.const 0) - (i32.const 1) + (block (result f64) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/string/parseInt|trampoline" + (i32.const 188) + (i32.const 0) + ) ) (f64.const 5) ) @@ -4030,10 +4061,14 @@ (if (i32.eqz (f64.eq - (call "$(lib)/string/parseInt|trampoline" - (i32.const 204) - (i32.const 0) - (i32.const 1) + (block (result f64) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/string/parseInt|trampoline" + (i32.const 204) + (i32.const 0) + ) ) (f64.const 455) ) @@ -4051,10 +4086,14 @@ (if (i32.eqz (f64.eq - (call "$(lib)/string/parseInt|trampoline" - (i32.const 220) - (i32.const 0) - (i32.const 1) + (block (result f64) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/string/parseInt|trampoline" + (i32.const 220) + (i32.const 0) + ) ) (f64.const 3855) ) @@ -4072,10 +4111,14 @@ (if (i32.eqz (f64.eq - (call "$(lib)/string/parseInt|trampoline" - (i32.const 236) - (i32.const 0) - (i32.const 1) + (block (result f64) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/string/parseInt|trampoline" + (i32.const 236) + (i32.const 0) + ) ) (f64.const 3855) ) @@ -4093,10 +4136,14 @@ (if (i32.eqz (f64.eq - (call "$(lib)/string/parseInt|trampoline" - (i32.const 252) - (i32.const 0) - (i32.const 1) + (block (result f64) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/string/parseInt|trampoline" + (i32.const 252) + (i32.const 0) + ) ) (f64.const 11) ) @@ -4114,10 +4161,14 @@ (if (i32.eqz (f64.eq - (call "$(lib)/string/parseInt|trampoline" - (i32.const 264) - (i32.const 0) - (i32.const 1) + (block (result f64) + (set_global $argumentCount + (i32.const 1) + ) + (call "$(lib)/string/parseInt|trampoline" + (i32.const 264) + (i32.const 0) + ) ) (f64.const 1) )