From d81ce5f907d3cf47ae062b3d534ebe9cb787b68e Mon Sep 17 00:00:00 2001 From: dcodeIO Date: Sun, 4 Mar 2018 18:52:12 +0100 Subject: [PATCH] Retain wrap state in parenthesized expressions; Void statements fwiw --- dist/assemblyscript.js | 2 +- dist/assemblyscript.js.map | 2 +- src/ast.ts | 19 ++++ src/compiler.ts | 35 +++++-- src/parser.ts | 20 +++- tests/compiler/std/polyfills.optimized.wat | 17 +--- tests/compiler/std/polyfills.untouched.wat | 110 +++++++-------------- tests/compiler/void.optimized.wat | 15 +++ tests/compiler/void.ts | 12 +++ tests/compiler/void.untouched.wat | 29 ++++++ 10 files changed, 166 insertions(+), 95 deletions(-) create mode 100644 tests/compiler/void.optimized.wat create mode 100644 tests/compiler/void.ts create mode 100644 tests/compiler/void.untouched.wat diff --git a/dist/assemblyscript.js b/dist/assemblyscript.js index 0092d5ee..901e2ce4 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=21)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,i=r(10),a=r(9),o=r(10);function s(e){switch(e){case n.INFO:return"INFO";case n.WARNING:return"WARNING";case n.ERROR:return"ERROR";default:return""}}t.DiagnosticCode=o.DiagnosticCode,t.diagnosticCodeToString=o.diagnosticCodeToString,function(e){e[e.INFO=0]="INFO",e[e.WARNING=1]="WARNING",e[e.ERROR=2]="ERROR"}(n=t.DiagnosticCategory||(t.DiagnosticCategory={})),t.diagnosticCategoryToString=s;var c="",p="",u="",l="";function h(e){switch(e){case n.INFO:return c;case n.WARNING:return p;case n.ERROR:return u;default:return""}}t.diagnosticCategoryToColor=h;var d=function(){function e(e,t,r){this.range=null,this.code=e,this.category=t,this.message=r}return e.create=function(t,r,n,a,o){void 0===n&&(n=null),void 0===a&&(a=null),void 0===o&&(o=null);var s=i.diagnosticCodeToString(t);return null!=n&&(s=s.replace("{0}",n)),null!=a&&(s=s.replace("{1}",a)),null!=o&&(s=s.replace("{2}",o)),new e(t,r,s)},e.createInfo=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.INFO,r,i)},e.createWarning=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.WARNING,r,i)},e.createError=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.ERROR,r,i)},e.prototype.withRange=function(e){return this.range=e,this},e.prototype.toString=function(){return this.range?s(this.category)+" "+this.code.toString(10)+': "'+this.message+'" in '+this.range.source.normalizedPath+" @ "+this.range.start.toString(10)+","+this.range.end.toString(10):s(this.category)+" "+this.code.toString(10)+": "+this.message},e}();function _(e,t){void 0===t&&(t=!1);for(var r=e.source.text,n=r.length,i=e.start,o=e.end;i>0&&!a.isLineBreak(r.charCodeAt(i-1));)i--;for(;o=0;--a)free_memory(i[a])}},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.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.length,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),d=new Array(s),_=0;_=0;--_)free_memory(c[_]);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 y;return o.output=d(n,a),o.sourceMap=_(i),o}finally{r&&free_memory(r),n&&free_memory(n),i&&free_memory(i)}},e.prototype.toText=function(){throw new Error("not implemented")},e.prototype.toAsmjs=function(){throw new Error("not implemented")},e.prototype.dispose=function(){this.ref&&(_BinaryenModuleDispose(this.ref),free_memory(this.out))},e.prototype.createRelooper=function(){return c.create(this)},e.prototype.cloneExpression=function(e,t,r){if(void 0===t&&(t=!1),void 0===r&&(r=i32.MAX_VALUE),r<0)return 0;var a,o;switch(r-=1,_BinaryenExpressionGetId(e)){case i.Const:switch(_BinaryenExpressionGetType(e)){case n.I32:return this.createI32(_BinaryenConstGetValueI32(e));case n.I64:return this.createI64(_BinaryenConstGetValueI64Low(e),_BinaryenConstGetValueI64High(e));case n.F32:return this.createF32(_BinaryenConstGetValueF32(e));case n.F64:return this.createF64(_BinaryenConstGetValueF64(e));default:throw new Error("concrete type expected")}case i.GetLocal:return _BinaryenGetLocal(this.ref,_BinaryenGetLocalGetIndex(e),_BinaryenExpressionGetType(e));case i.GetGlobal:var s=_BinaryenGetGlobalGetName(e);if(!s)break;return _BinaryenGetGlobal(this.ref,s,_BinaryenExpressionGetType(e));case i.Load:if(!(a=this.cloneExpression(_BinaryenLoadGetPtr(e),t,r)))break;return _BinaryenLoadIsAtomic(e)?_BinaryenAtomicLoad(this.ref,_BinaryenLoadGetBytes(e),_BinaryenLoadGetOffset(e),_BinaryenExpressionGetType(e),a):_BinaryenLoad(this.ref,_BinaryenLoadGetBytes(e),_BinaryenLoadIsSigned(e)?1:0,_BinaryenLoadGetOffset(e),_BinaryenLoadGetAlign(e),_BinaryenExpressionGetType(e),a);case i.Unary:if(!(a=this.cloneExpression(_BinaryenUnaryGetValue(e),t,r)))break;return _BinaryenUnary(this.ref,_BinaryenUnaryGetOp(e),a);case i.Binary:if(!(a=this.cloneExpression(_BinaryenBinaryGetLeft(e),t,r)))break;if(!(o=this.cloneExpression(_BinaryenBinaryGetRight(e),t,r)))break;return _BinaryenBinary(this.ref,_BinaryenBinaryGetOp(e),a,o)}return 0},e.prototype.addDebugInfoFile=function(e){var t=l(e);try{return _BinaryenModuleAddDebugInfoFileName(this.ref,t)}finally{free_memory(t)}},e.prototype.getDebugInfoFile=function(e){return _(_BinaryenModuleGetDebugInfoFileName(this.ref,e))},e.prototype.setDebugLocation=function(e,t,r,n,i){_BinaryenFunctionSetDebugLocation(e,t,r,n,i)},e.MAX_MEMORY_WASM32=65535,e}();t.Module=s;var c=function(){function e(){}return e.create=function(t){var r=new e;return r.module=t,r.ref=_RelooperCreate(),r},e.createStub=function(t){var r=new e;return r.module=t,r.ref=0,r},e.prototype.addBlock=function(e){return _RelooperAddBlock(this.ref,e)},e.prototype.addBranch=function(e,t,r,n){void 0===r&&(r=0),void 0===n&&(n=0),_RelooperAddBranch(e,t,r,n)},e.prototype.addBlockWithSwitch=function(e,t){return _RelooperAddBlockWithSwitch(this.ref,e,t)},e.prototype.addBranchForSwitch=function(e,t,r,n){void 0===n&&(n=0);var i=u(r);try{_RelooperAddBranchForSwitch(e,t,i,r.length,n)}finally{free_memory(i)}},e.prototype.renderAndDispose=function(e,t){return _RelooperRenderAndDispose(this.ref,e,t,this.module.ref)},e}();function p(e){if(!e)return 0;for(var t=allocate_memory(e.length),r=t,n=0,i=e.length;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 d(e,t){for(var r=new Uint8Array(t),n=0;n=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(5),p=r(4),u=r(1);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(){}}(),d=new Map,_=function(e){function r(t){void 0===t&&(t=null);var r=e.call(this,t)||this;return r.diagnosticsOffset=0,r.elements=new Map,r.types=d,r.typeAliases=new Map,r.exports=new Map,r.sources=[],r}return i(r,e),r.prototype.initialize=function(e){this.options=e,this.types=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,i=new Map,u=new Array,l=new Array,h=0,d=this.sources.length;h",a+="<"+y+">")}else if(r){var E=r.get(a);if(E)return E}if((u=this.types.get(o))||(u=this.types.get(a)))return u;var f=this.typeAliases.get(a);return f&&(u=this.resolveType(f,null,n))?u:(n&&this.error(s.DiagnosticCode.Cannot_find_name_0,e.name.range,a),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");var C,b,x,k=null;if(this.classPrototype&&!(k=this.classPrototype.resolve(this.classTypeArguments,t)))return null;if(this.is(E.SETTER)||this.is(E.CONSTRUCTOR))C=c.Type.void;else{T=assert(p.returnType);var L=this.program.resolveType(T,t,!0);if(!L)return null;C=L}return(n=new O(this,N,e,g,C,k)).contextualTypeArguments=t,this.instances.set(r,n),n},t.prototype.resolvePartial=function(e){if(!this.classPrototype)throw new Error("partially resolved instance method must reference its class prototype");if(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"),(n=new B(this,A,e,T)).contextualTypeArguments=t,this.instances.set(r,n);var I,v,N,S,C,b,O=0;if(T&&(O=T.currentMemoryOffset,T.members)){n.members||(n.members=new Map);try{for(var x=a(T.members.values()),R=x.next();!R.done;R=x.next()){var U=R.value;n.members.set(U.simpleName,U)}}catch(e){N={error:e}}finally{try{R&&!R.done&&(S=x.return)&&S.call(x)}finally{if(N)throw N.error}}}if(this.constructorPrototype){var F=this.constructorPrototype.resolvePartial(e);F&&(n.constructorInstance=F.resolve())}if(this.instanceMembers)try{for(var D=a(this.instanceMembers.values()),w=D.next();!w.done;w=D.next()){var P=w.value;switch(P.kind){case m.FIELD_PROTOTYPE:n.members||(n.members=new Map);var M=P.declaration;if(!M.type)throw new Error("type expected");var G=this.program.resolveType(M.type,n.contextualTypeArguments);if(G){var K=new k(P,P.internalName,G);switch(G.byteSize){case 1:break;case 2:1&O&&++O;break;case 4:3&O&&(O=1+(3|O));break;case 8:7&O&&(O=1+(7|O));break;default:assert(!1)}K.memoryOffset=O,O+=G.byteSize,n.members.set(P.simpleName,K)}break;case m.FUNCTION_PROTOTYPE:n.members||(n.members=new Map);var z=P.resolvePartial(e);z&&n.members.set(P.simpleName,z);break;case m.PROPERTY:n.members||(n.members=new Map),assert(P.getterPrototype);var H=new L(this.program,P.simpleName,P.internalName,this);H.getterPrototype=P.getterPrototype.resolvePartial(e),P.setterPrototype&&(H.setterPrototype=P.setterPrototype.resolvePartial(e)),n.members.set(P.simpleName,H);break;default:throw new Error("instance member expected")}}}catch(e){C={error:e}}finally{try{w&&!w.done&&(b=D.return)&&b.call(D)}finally{if(C)throw C.error}}return n.currentMemoryOffset=O,n},t.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)},t.prototype.toString=function(){return this.simpleName},t}(T);t.ClassPrototype=R;var B=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=m.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&&(E=c.return)&&E.call(c)}finally{if(y)throw y.error}}}var d,_,y,E,f=s.prototype.declaration;if(f){var T=f.typeParameters;if(n){if((_=n.length)!=T.length)throw new Error("type argument count mismatch");if(_)for(s.contextualTypeArguments||(s.contextualTypeArguments=new Map),d=0;d<_;++d)s.contextualTypeArguments.set(T[d].name.text,n[d])}else if(T.length)throw new Error("type argument count mismatch")}return s}return i(t,e),t.prototype.isAssignableTo=function(e){var t=this;do{if(t==e)return!0}while(t=t.base);return!1},t.prototype.toString=function(){return this.prototype.simpleName},t}(T);t.Class=B;var U=function(e){function t(t,r,n,i){var a=e.call(this,t,r,n,i)||this;return a.kind=m.INTERFACE_PROTOTYPE,a}return i(t,e),t}(R);t.InterfacePrototype=U;var F=function(e){function t(t,r,n,i){void 0===n&&(n=[]),void 0===i&&(i=null);var a=e.call(this,t,r,n,i)||this;return a.kind=m.INTERFACE,a}return i(t,e),t}(B);t.Interface=F,function(e){e[e.NONE=0]="NONE",e[e.RETURNS=1]="RETURNS",e[e.POSSIBLY_THROWS=2]="POSSIBLY_THROWS",e[e.POSSIBLY_BREAKS=4]="POSSIBLY_BREAKS",e[e.POSSIBLY_CONTINUES=8]="POSSIBLY_CONTINUES"}(t.FlowFlags||(t.FlowFlags={}));var D=function(){function e(){this.scopedLocals=null}return e.create=function(t){var r=new e;return r.parent=null,r.flags=0,r.currentFunction=t,r.continueLabel=null,r.breakLabel=null,r},e.prototype.is=function(e){return(this.flags&e)==e},e.prototype.set=function(e){this.flags|=e},e.prototype.enterBranchOrScope=function(){var t=new e;return t.parent=this,t.flags=this.flags,t.currentFunction=this.currentFunction,t.continueLabel=this.continueLabel,t.breakLabel=this.breakLabel,t},e.prototype.leaveBranchOrScope=function(){var e,t,r=assert(this.parent);if(this.scopedLocals){try{for(var n=a(this.scopedLocals.values()),i=n.next();!i.done;i=n.next()){var o=i.value;this.currentFunction.freeTempLocal(o)}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}this.scopedLocals=null}return this.is(2)&&r.set(2),this.is(4)&&r.breakLabel==this.breakLabel&&r.set(4),this.is(8)&&r.continueLabel==this.continueLabel&&r.set(8),r},e.prototype.addScopedLocal=function(e,t,r){var n=this.currentFunction.getTempLocal(t);if(this.scopedLocals){if(this.scopedLocals.has(e))return void this.currentFunction.program.error(s.DiagnosticCode.Duplicate_identifier_0,r.range)}else this.scopedLocals=new Map;this.scopedLocals.set(e,n)},e.prototype.getScopedLocal=function(e){var t,r=this;do{if(r.scopedLocals&&(t=r.scopedLocals.get(e)))return t}while(r=r.parent);return this.currentFunction.locals.get(e)},e.prototype.finalize=function(){return assert(null==this.parent,"must be the topmost parent flow"),this.continueLabel=null,this.breakLabel=null,this.is(1)},e}();t.Flow=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,o=r(0),s=r(9);!function(e){e[e.ABSTRACT=0]="ABSTRACT",e[e.AS=1]="AS",e[e.ASYNC=2]="ASYNC",e[e.AWAIT=3]="AWAIT",e[e.BREAK=4]="BREAK",e[e.CASE=5]="CASE",e[e.CATCH=6]="CATCH",e[e.CLASS=7]="CLASS",e[e.CONST=8]="CONST",e[e.CONTINUE=9]="CONTINUE",e[e.CONSTRUCTOR=10]="CONSTRUCTOR",e[e.DEBUGGER=11]="DEBUGGER",e[e.DECLARE=12]="DECLARE",e[e.DEFAULT=13]="DEFAULT",e[e.DELETE=14]="DELETE",e[e.DO=15]="DO",e[e.ELSE=16]="ELSE",e[e.ENUM=17]="ENUM",e[e.EXPORT=18]="EXPORT",e[e.EXTENDS=19]="EXTENDS",e[e.FALSE=20]="FALSE",e[e.FINALLY=21]="FINALLY",e[e.FOR=22]="FOR",e[e.FROM=23]="FROM",e[e.FUNCTION=24]="FUNCTION",e[e.GET=25]="GET",e[e.IF=26]="IF",e[e.IMPLEMENTS=27]="IMPLEMENTS",e[e.IMPORT=28]="IMPORT",e[e.IN=29]="IN",e[e.INSTANCEOF=30]="INSTANCEOF",e[e.INTERFACE=31]="INTERFACE",e[e.IS=32]="IS",e[e.KEYOF=33]="KEYOF",e[e.LET=34]="LET",e[e.MODULE=35]="MODULE",e[e.NAMESPACE=36]="NAMESPACE",e[e.NEW=37]="NEW",e[e.NULL=38]="NULL",e[e.OF=39]="OF",e[e.PACKAGE=40]="PACKAGE",e[e.PRIVATE=41]="PRIVATE",e[e.PROTECTED=42]="PROTECTED",e[e.PUBLIC=43]="PUBLIC",e[e.READONLY=44]="READONLY",e[e.RETURN=45]="RETURN",e[e.SET=46]="SET",e[e.STATIC=47]="STATIC",e[e.SUPER=48]="SUPER",e[e.SWITCH=49]="SWITCH",e[e.THIS=50]="THIS",e[e.THROW=51]="THROW",e[e.TRUE=52]="TRUE",e[e.TRY=53]="TRY",e[e.TYPE=54]="TYPE",e[e.TYPEOF=55]="TYPEOF",e[e.VAR=56]="VAR",e[e.VOID=57]="VOID",e[e.WHILE=58]="WHILE",e[e.WITH=59]="WITH",e[e.YIELD=60]="YIELD",e[e.OPENBRACE=61]="OPENBRACE",e[e.CLOSEBRACE=62]="CLOSEBRACE",e[e.OPENPAREN=63]="OPENPAREN",e[e.CLOSEPAREN=64]="CLOSEPAREN",e[e.OPENBRACKET=65]="OPENBRACKET",e[e.CLOSEBRACKET=66]="CLOSEBRACKET",e[e.DOT=67]="DOT",e[e.DOT_DOT_DOT=68]="DOT_DOT_DOT",e[e.SEMICOLON=69]="SEMICOLON",e[e.COMMA=70]="COMMA",e[e.LESSTHAN=71]="LESSTHAN",e[e.GREATERTHAN=72]="GREATERTHAN",e[e.LESSTHAN_EQUALS=73]="LESSTHAN_EQUALS",e[e.GREATERTHAN_EQUALS=74]="GREATERTHAN_EQUALS",e[e.EQUALS_EQUALS=75]="EQUALS_EQUALS",e[e.EXCLAMATION_EQUALS=76]="EXCLAMATION_EQUALS",e[e.EQUALS_EQUALS_EQUALS=77]="EQUALS_EQUALS_EQUALS",e[e.EXCLAMATION_EQUALS_EQUALS=78]="EXCLAMATION_EQUALS_EQUALS",e[e.EQUALS_GREATERTHAN=79]="EQUALS_GREATERTHAN",e[e.PLUS=80]="PLUS",e[e.MINUS=81]="MINUS",e[e.ASTERISK_ASTERISK=82]="ASTERISK_ASTERISK",e[e.ASTERISK=83]="ASTERISK",e[e.SLASH=84]="SLASH",e[e.PERCENT=85]="PERCENT",e[e.PLUS_PLUS=86]="PLUS_PLUS",e[e.MINUS_MINUS=87]="MINUS_MINUS",e[e.LESSTHAN_LESSTHAN=88]="LESSTHAN_LESSTHAN",e[e.GREATERTHAN_GREATERTHAN=89]="GREATERTHAN_GREATERTHAN",e[e.GREATERTHAN_GREATERTHAN_GREATERTHAN=90]="GREATERTHAN_GREATERTHAN_GREATERTHAN",e[e.AMPERSAND=91]="AMPERSAND",e[e.BAR=92]="BAR",e[e.CARET=93]="CARET",e[e.EXCLAMATION=94]="EXCLAMATION",e[e.TILDE=95]="TILDE",e[e.AMPERSAND_AMPERSAND=96]="AMPERSAND_AMPERSAND",e[e.BAR_BAR=97]="BAR_BAR",e[e.QUESTION=98]="QUESTION",e[e.COLON=99]="COLON",e[e.EQUALS=100]="EQUALS",e[e.PLUS_EQUALS=101]="PLUS_EQUALS",e[e.MINUS_EQUALS=102]="MINUS_EQUALS",e[e.ASTERISK_EQUALS=103]="ASTERISK_EQUALS",e[e.ASTERISK_ASTERISK_EQUALS=104]="ASTERISK_ASTERISK_EQUALS",e[e.SLASH_EQUALS=105]="SLASH_EQUALS",e[e.PERCENT_EQUALS=106]="PERCENT_EQUALS",e[e.LESSTHAN_LESSTHAN_EQUALS=107]="LESSTHAN_LESSTHAN_EQUALS",e[e.GREATERTHAN_GREATERTHAN_EQUALS=108]="GREATERTHAN_GREATERTHAN_EQUALS",e[e.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS=109]="GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS",e[e.AMPERSAND_EQUALS=110]="AMPERSAND_EQUALS",e[e.BAR_EQUALS=111]="BAR_EQUALS",e[e.CARET_EQUALS=112]="CARET_EQUALS",e[e.AT=113]="AT",e[e.IDENTIFIER=114]="IDENTIFIER",e[e.STRINGLITERAL=115]="STRINGLITERAL",e[e.INTEGERLITERAL=116]="INTEGERLITERAL",e[e.FLOATLITERAL=117]="FLOATLITERAL",e[e.INVALID=118]="INVALID",e[e.ENDOFFILE=119]="ENDOFFILE"}(a=t.Token||(t.Token={})),function(e){e.fromKeyword=function(t){switch(t){case"abstract":return e.ABSTRACT;case"as":return e.AS;case"async":return e.ASYNC;case"await":return e.AWAIT;case"break":return e.BREAK;case"case":return e.CASE;case"catch":return e.CATCH;case"class":return e.CLASS;case"continue":return e.CONTINUE;case"const":return e.CONST;case"constructor":return e.CONSTRUCTOR;case"debugger":return e.DEBUGGER;case"declare":return e.DECLARE;case"default":return e.DEFAULT;case"delete":return e.DELETE;case"do":return e.DO;case"else":return e.ELSE;case"enum":return e.ENUM;case"export":return e.EXPORT;case"extends":return e.EXTENDS;case"false":return e.FALSE;case"finally":return e.FINALLY;case"for":return e.FOR;case"from":return e.FROM;case"function":return e.FUNCTION;case"get":return e.GET;case"if":return e.IF;case"implements":return e.IMPLEMENTS;case"import":return e.IMPORT;case"in":return e.IN;case"instanceof":return e.INSTANCEOF;case"interface":return e.INTERFACE;case"is":return e.IS;case"keyof":return e.KEYOF;case"let":return e.LET;case"module":return e.MODULE;case"namespace":return e.NAMESPACE;case"new":return e.NEW;case"null":return e.NULL;case"of":return e.OF;case"package":return e.PACKAGE;case"private":return e.PRIVATE;case"protected":return e.PROTECTED;case"public":return e.PUBLIC;case"readonly":return e.READONLY;case"return":return e.RETURN;case"set":return e.SET;case"static":return e.STATIC;case"super":return e.SUPER;case"switch":return e.SWITCH;case"this":return e.THIS;case"throw":return e.THROW;case"true":return e.TRUE;case"try":return e.TRY;case"type":return e.TYPE;case"typeof":return e.TYPEOF;case"var":return e.VAR;case"void":return e.VOID;case"while":return e.WHILE;case"with":return e.WITH;case"yield":return e.YIELD;default:return e.INVALID}},e.isAlsoIdentifier=function(t){switch(t){case e.ABSTRACT:case e.AS:case e.CONSTRUCTOR:case e.DECLARE:case e.DELETE:case e.FROM:case e.GET:case e.IS:case e.KEYOF:case e.MODULE:case e.NAMESPACE:case e.READONLY:case e.SET:case e.TYPE:return!0;default:return!1}},e.operatorToString=function(t){switch(t){case e.DELETE:return"delete";case e.IN:return"in";case e.INSTANCEOF:return"instanceof";case e.NEW:return"new";case e.TYPEOF:return"typeof";case e.VOID:return"void";case e.YIELD:return"yield";case e.DOT_DOT_DOT:return"...";case e.COMMA:return",";case e.LESSTHAN:return"<";case e.GREATERTHAN:return">";case e.LESSTHAN_EQUALS:return"<=";case e.GREATERTHAN_EQUALS:return">=";case e.EQUALS_EQUALS:return"==";case e.EXCLAMATION_EQUALS:return"!=";case e.EQUALS_EQUALS_EQUALS:return"===";case e.EXCLAMATION_EQUALS_EQUALS:return"!==";case e.PLUS:return"+";case e.MINUS:return"-";case e.ASTERISK_ASTERISK:return"**";case e.ASTERISK:return"*";case e.SLASH:return"/";case e.PERCENT:return"%";case e.PLUS_PLUS:return"++";case e.MINUS_MINUS:return"--";case e.LESSTHAN_LESSTHAN:return"<<";case e.GREATERTHAN_GREATERTHAN:return">>";case e.GREATERTHAN_GREATERTHAN_GREATERTHAN:return">>>";case e.AMPERSAND:return"&";case e.BAR:return"|";case e.CARET:return"^";case e.EXCLAMATION:return"!";case e.TILDE:return"~";case e.AMPERSAND_AMPERSAND:return"&&";case e.BAR_BAR:return"||";case e.EQUALS:return"=";case e.PLUS_EQUALS:return"+=";case e.MINUS_EQUALS:return"-=";case e.ASTERISK_EQUALS:return"*=";case e.ASTERISK_ASTERISK_EQUALS:return"**=";case e.SLASH_EQUALS:return"/=";case e.PERCENT_EQUALS:return"%=";case e.LESSTHAN_LESSTHAN_EQUALS:return"<<=";case e.GREATERTHAN_GREATERTHAN_EQUALS:return">>=";case e.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:return">>>=";case e.AMPERSAND_EQUALS:return"&=";case e.BAR_EQUALS:return"|=";case e.CARET_EQUALS:return"^=";default:return assert(!1),""}}}(a=t.Token||(t.Token={}));var c=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=this.start,r=1;t-- >0;)10==e.charCodeAt(t)&&r++;return r},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"column",{get:function(){for(var e=this.source.text,t=this.start,r=0;t-- >0&&10!=e.charCodeAt(t);)r++;return r},enumerable:!0,configurable:!0}),e.prototype.toString=function(){return this.source.text.substring(this.start,this.end)},e}();t.Range=c;var p=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.markedPos=0,n.markedToken=-1,n.markedTokenPos=0,n.nextToken=-1,n.nextTokenOnNewLine=!1,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(s.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(){this.markedPos=this.pos,this.markedToken=this.token,this.markedTokenPos=this.tokenPos},t.prototype.reset=function(){this.pos=this.markedPos,this.token=this.markedToken,this.tokenPos=this.markedTokenPos,this.nextToken=-1},t.prototype.range=function(e,t){return void 0===e&&(e=-1),void 0===t&&(t=-1),e<0?(e=this.tokenPos,t=this.pos):t<0&&(t=e),new c(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(s.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(s.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=p},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(2),o=r(3);t.Token=o.Token,t.Range=o.Range;var s,c=r(8);!function(e){e[e.SOURCE=0]="SOURCE",e[e.TYPE=1]="TYPE",e[e.TYPEPARAMETER=2]="TYPEPARAMETER",e[e.IDENTIFIER=3]="IDENTIFIER",e[e.ASSERTION=4]="ASSERTION",e[e.BINARY=5]="BINARY",e[e.CALL=6]="CALL",e[e.COMMA=7]="COMMA",e[e.ELEMENTACCESS=8]="ELEMENTACCESS",e[e.FALSE=9]="FALSE",e[e.FUNCTION=10]="FUNCTION",e[e.FUNCTIONARROW=11]="FUNCTIONARROW",e[e.LITERAL=12]="LITERAL",e[e.NEW=13]="NEW",e[e.NULL=14]="NULL",e[e.PARENTHESIZED=15]="PARENTHESIZED",e[e.PROPERTYACCESS=16]="PROPERTYACCESS",e[e.TERNARY=17]="TERNARY",e[e.SUPER=18]="SUPER",e[e.THIS=19]="THIS",e[e.TRUE=20]="TRUE",e[e.CONSTRUCTOR=21]="CONSTRUCTOR",e[e.UNARYPOSTFIX=22]="UNARYPOSTFIX",e[e.UNARYPREFIX=23]="UNARYPREFIX",e[e.BLOCK=24]="BLOCK",e[e.BREAK=25]="BREAK",e[e.CONTINUE=26]="CONTINUE",e[e.DO=27]="DO",e[e.EMPTY=28]="EMPTY",e[e.EXPORT=29]="EXPORT",e[e.EXPORTIMPORT=30]="EXPORTIMPORT",e[e.EXPRESSION=31]="EXPRESSION",e[e.FOR=32]="FOR",e[e.IF=33]="IF",e[e.IMPORT=34]="IMPORT",e[e.RETURN=35]="RETURN",e[e.SWITCH=36]="SWITCH",e[e.THROW=37]="THROW",e[e.TRY=38]="TRY",e[e.VARIABLE=39]="VARIABLE",e[e.WHILE=40]="WHILE",e[e.CLASSDECLARATION=41]="CLASSDECLARATION",e[e.ENUMDECLARATION=42]="ENUMDECLARATION",e[e.ENUMVALUEDECLARATION=43]="ENUMVALUEDECLARATION",e[e.FIELDDECLARATION=44]="FIELDDECLARATION",e[e.FUNCTIONDECLARATION=45]="FUNCTIONDECLARATION",e[e.IMPORTDECLARATION=46]="IMPORTDECLARATION",e[e.INTERFACEDECLARATION=47]="INTERFACEDECLARATION",e[e.METHODDECLARATION=48]="METHODDECLARATION",e[e.NAMESPACEDECLARATION=49]="NAMESPACEDECLARATION",e[e.TYPEDECLARATION=50]="TYPEDECLARATION",e[e.VARIABLEDECLARATION=51]="VARIABLEDECLARATION",e[e.DECORATOR=52]="DECORATOR",e[e.EXPORTMEMBER=53]="EXPORTMEMBER",e[e.MODIFIER=54]="MODIFIER",e[e.PARAMETER=55]="PARAMETER",e[e.SWITCHCASE=56]="SWITCHCASE"}(s=t.NodeKind||(t.NodeKind={}));var p=function(){function e(){this.parent=null}return e.createType=function(e,t,r,n){var i=new u;return i.range=n,i.name=e,i.typeArguments=t,i.isNullable=r,i},e.createIdentifierExpression=function(e,t){var r=new d;return r.range=t,r.text=e,r},e.createArrayLiteralExpression=function(e,t){var r=new y;return r.range=t,r.elementExpressions=e,function(e,t){for(var r=0,n=e.length;r0},enumerable:!0,configurable:!0}),t}(V);t.FunctionDeclaration=se;var ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IF,t}return i(t,e),t}(z);t.IfStatement=ce;var pe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORTDECLARATION,t.modifiers=null,t}return i(t,e),t}(V);t.ImportDeclaration=pe;var ue=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORT,t}return i(t,e),t}(z);t.ImportStatement=ue;var le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.INTERFACEDECLARATION,t}return i(t,e),t}(X);t.InterfaceDeclaration=le;var he=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.METHODDECLARATION,t}return i(t,e),t}(se);t.MethodDeclaration=he;var de=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.NAMESPACEDECLARATION,t}return i(t,e),t}(V);t.NamespaceDeclaration=de,function(e){e[e.DEFAULT=0]="DEFAULT",e[e.OPTIONAL=1]="OPTIONAL",e[e.REST=2]="REST"}(t.ParameterKind||(t.ParameterKind={}));var _e=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.PARAMETER,t}return i(t,e),t}(p);t.Parameter=_e;var ye=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.MODIFIER,t}return i(t,e),t}(p);t.Modifier=ye;var me=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.RETURN,t}return i(t,e),t}(z);t.ReturnStatement=me;var Ee=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=Ee;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}(z);t.SwitchStatement=fe;var Te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.THROW,t}return i(t,e),t}(z);t.ThrowStatement=Te;var ge=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TRY,t}return i(t,e),t}(z);t.TryStatement=ge;var Ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TYPEDECLARATION,t}return i(t,e),t}(V);t.TypeDeclaration=Ae;var Ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLEDECLARATION,t}return i(t,e),t}(W);t.VariableDeclaration=Ie;var ve=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLE,t}return i(t,e),t}(z);t.VariableStatement=ve;var Ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.WHILE,t}return i(t,e),t}(z);t.WhileStatement=Ne;var Se=null;function Ce(){var e;return null!=Se?(e=Se,Se=null):e=[],e.length=0,e}function be(e,t){if(t)for(var r=0,n=t.length;r>>e.size-this.size},e.prototype.is=function(e){return(this.flags&e)==e},Object.defineProperty(e.prototype,"isClass",{get:function(){return null!=this.classType},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isFunction",{get:function(){return null!=this.functionType},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isReference",{get:function(){return null!=this.classType||null!=this.functionType},enumerable:!0,configurable:!0}),e.prototype.asClass=function(t){assert(9==this.kind&&!this.classType);var r=new e(this.kind,-129&this.flags|256,this.size);return r.classType=t,r},e.prototype.asFunction=function(t){assert(7==this.kind&&!this.functionType);var r=new e(this.kind,-129&this.flags|256,this.size);return r.functionType=t,r},e.prototype.asNullable=function(){return assert(this.isReference),this.nullableType||(assert(!this.is(512)),this.nullableType=new e(this.kind,512|this.flags,this.size),this.nullableType.classType=this.classType,this.nullableType.functionType=this.functionType),this.nullableType},e.prototype.isAssignableTo=function(e,t){var r,n,i,a;if(void 0===t&&(t=!1),this.isReference){if(e.isReference)if(r=this.classType){if(n=e.classType)return r.isAssignableTo(n)}else if((i=this.functionType)&&(a=e.functionType))return i.isAssignableTo(a)}else if(!e.isReference)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:return"u32";case 8:return"u64";case 9:return e?"usize":this.classType?this.classType.toString():this.functionType?this.functionType.toTypeString():"usize";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;n=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}};Object.defineProperty(t,"__esModule",{value:!0});var o,s=r(16),c=r(0),p=r(1),u=r(2),l=r(3),h=r(4),d=r(5);!function(e){e[e.WASM32=0]="WASM32",e[e.WASM64=1]="WASM64"}(o=t.Target||(t.Target={}));var _=function(){function e(){this.target=o.WASM32,this.noTreeShaking=!1,this.noAssert=!1,this.noMemory=!1,this.importMemory=!1,this.memoryBase=0,this.allocateImpl="allocate_memory",this.freeImpl="free_memory",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?d.Type.usize64:d.Type.usize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isizeType",{get:function(){return this.target==o.WASM64?d.Type.isize64:d.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=_,function(e){e[e.NONE=0]="NONE",e[e.IMPLICIT=1]="IMPLICIT",e[e.EXPLICIT=2]="EXPLICIT"}(t.ConversionKind||(t.ConversionKind={}));var y=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,t.diagnostics)||this;return n.startFunctionBody=new Array,n.currentEnum=null,n.currentType=d.Type.void,n.memorySegments=new Array,n.stringSegments=new Map,n.functionTable=new Array,n.files=new Set,n.program=t,n.options=r||new _,n.memoryOffset=i64_new(max(n.options.memoryBase,n.options.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(){this.program.initialize(this.options);var e=assert(this.program.elements.get("start"));assert(e.kind==u.ElementKind.FUNCTION_PROTOTYPE);var t=new u.Function(e,e.internalName,null,null,d.Type.void);t.set(u.ElementFlags.START),this.currentFunction=this.startFunction=t;for(var r=this.program.sources,n=0,i=r.length;n"),!1;e.type=this.currentType}var i=e.type.toNativeType();if(e.is(u.ElementFlags.DECLARED))return e.is(u.ElementFlags.CONSTANT)?(this.module.addGlobalImport(e.internalName,e.namespace?e.namespace.simpleName:"env",e.simpleName,i),e.set(u.ElementFlags.COMPILED),!0):(this.error(c.DiagnosticCode.Operation_not_supported,t.range),!1);var a=!1;e.is(u.ElementFlags.INLINED)?r=this.compileInlineConstant(e,e.type,!0):t.initializer?(r||(r=this.compileExpression(t.initializer,e.type)),_BinaryenExpressionGetId(r)!=p.ExpressionId.Const&&(e.is(u.ElementFlags.CONSTANT)?(r=this.precomputeExpressionRef(r),_BinaryenExpressionGetId(r)!=p.ExpressionId.Const&&(this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,t.range),a=!0)):a=!0)):r=e.type.toNativeZero(this.module);var o=e.internalName;if(a){this.module.addGlobal(o,i,!0,e.type.toNativeZero(this.module));var s=this.module.createSetGlobal(o,r);this.startFunctionBody.push(s)}else if(e.is(u.ElementFlags.CONSTANT)){switch(_BinaryenExpressionGetType(r)){case p.NativeType.I32:e.constantValueKind=1,e.constantIntegerValue=i64_new(_BinaryenConstGetValueI32(r),0);break;case p.NativeType.I64:e.constantValueKind=1,e.constantIntegerValue=i64_new(_BinaryenConstGetValueI64Low(r),_BinaryenConstGetValueI64High(r));break;case p.NativeType.F32:e.constantValueKind=2,e.constantFloatValue=_BinaryenConstGetValueF32(r);break;case p.NativeType.F64:e.constantValueKind=2,e.constantFloatValue=_BinaryenConstGetValueF64(r);break;default:throw new Error("concrete type expected")}e.set(u.ElementFlags.INLINED),t.isTopLevel&&this.module.addGlobal(o,i,!1,r),t.range.source.isEntry&&t.isTopLevelExport&&this.module.addGlobalExport(e.internalName,t.programLevelInternalName)}else this.module.addGlobal(o,i,!e.is(u.ElementFlags.CONSTANT),r);return!0},t.prototype.compileEnumDeclaration=function(e){var t=this.program.elements.get(e.fileLevelInternalName);if(!t||t.kind!=u.ElementKind.ENUM)throw new Error("enum expected");return this.compileEnum(t)?t:null},t.prototype.compileEnum=function(e){if(e.is(u.ElementFlags.COMPILED))return!0;e.set(u.ElementFlags.COMPILED),this.currentEnum=e;var t,r,n=null;if(e.members)try{for(var i=a(e.members.values()),o=i.next();!o.done;o=i.next()){var s=o.value;if(s.kind==u.ElementKind.ENUMVALUE){var l,h=!1,_=s,y=_.declaration;if(_.set(u.ElementFlags.COMPILED),_.is(u.ElementFlags.INLINED))e.declaration.isTopLevelExport&&this.module.addGlobal(_.internalName,p.NativeType.I32,!1,this.module.createI32(_.constantValue));else if(y.value?(l=this.compileExpression(y.value,d.Type.i32),_BinaryenExpressionGetId(l)!=p.ExpressionId.Const&&(l=this.precomputeExpressionRef(l),_BinaryenExpressionGetId(l)!=p.ExpressionId.Const&&(e.is(u.ElementFlags.CONSTANT)&&this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range),h=!0))):null==n?l=this.module.createI32(0):n.is(u.ElementFlags.INLINED)?l=this.module.createI32(n.constantValue+1):(l=this.module.createBinary(p.BinaryOp.AddI32,this.module.createGetGlobal(n.internalName,p.NativeType.I32),this.module.createI32(1)),e.is(u.ElementFlags.CONSTANT)&&this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range),h=!0),h){this.module.addGlobal(_.internalName,p.NativeType.I32,!0,this.module.createI32(0));var m=this.module.createSetGlobal(_.internalName,l);this.startFunctionBody.push(m)}else{if(this.module.addGlobal(_.internalName,p.NativeType.I32,!1,l),_BinaryenExpressionGetType(l)!=p.NativeType.I32)throw new Error("i32 expected");_.constantValue=_BinaryenConstGetValueI32(l),_.set(u.ElementFlags.INLINED)}n=_,e.declaration.range.source.isEntry&&e.declaration.isTopLevelExport&&(s.is(u.ElementFlags.INLINED)?this.module.addGlobalExport(s.internalName,s.internalName):y&&this.warning(c.DiagnosticCode.Cannot_export_a_mutable_global,y.range))}}}catch(e){t={error:e}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(t)throw t.error}}return this.currentEnum=null,!0},t.prototype.compileFunctionDeclaration=function(e,t,r){void 0===r&&(r=null);var n=this.program.elements.get(e.fileLevelInternalName);if(!n||n.kind!=u.ElementKind.FUNCTION_PROTOTYPE)throw new Error("function expected");return 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.compileFunction=function(e){if(e.is(u.ElementFlags.COMPILED))return!0;assert(!e.is(u.ElementFlags.BUILTIN)||"abort"==e.simpleName);var t=e.prototype.declaration;if(e.is(u.ElementFlags.DECLARED)){if(t.body)return this.error(c.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,t.name.range),!1}else if(!t.body)return this.error(c.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,t.name.range),!1;e.set(u.ElementFlags.COMPILED);var r=0;if(!e.is(u.ElementFlags.DECLARED)){var n=this.currentFunction;this.currentFunction=e;var i=assert(t.body,"implementation expected");r=this.compileStatement(i);var a=this.currentFunction.flow.finalize();e.returnType==d.Type.void||a||this.error(c.DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,assert(t.returnType,"return type expected").range),this.currentFunction=n}var o=e.parameters?e.parameters.length:0,s=e.instanceMethodOf?o+1:o,l=0,h=e.returnType.toNativeType(),_=new Array(s),y=new Array(s+1);if(e.instanceMethodOf&&(_[l]=this.options.isWasm64?p.NativeType.I64:p.NativeType.I32,y[l++]=e.instanceMethodOf.type.toSignatureString()),e.parameters)for(var m=0;m=0)return e.functionTableIndex;var t=this.functionTable.length;return this.functionTable.push(e),e.functionTableIndex=t,t},t.prototype.compileStatement=function(e){var t;switch(e.kind){case h.NodeKind.BLOCK:t=this.compileBlockStatement(e);break;case h.NodeKind.BREAK:t=this.compileBreakStatement(e);break;case h.NodeKind.CONTINUE:t=this.compileContinueStatement(e);break;case h.NodeKind.DO:t=this.compileDoStatement(e);break;case h.NodeKind.EMPTY:t=this.compileEmptyStatement(e);break;case h.NodeKind.EXPRESSION:t=this.compileExpressionStatement(e);break;case h.NodeKind.FOR:t=this.compileForStatement(e);break;case h.NodeKind.IF:t=this.compileIfStatement(e);break;case h.NodeKind.RETURN:t=this.compileReturnStatement(e);break;case h.NodeKind.SWITCH:t=this.compileSwitchStatement(e);break;case h.NodeKind.THROW:t=this.compileThrowStatement(e);break;case h.NodeKind.TRY:t=this.compileTryStatement(e);break;case h.NodeKind.VARIABLE:var r=this.compileVariableStatement(e);t=r||this.module.createNop();break;case h.NodeKind.WHILE:t=this.compileWhileStatement(e);break;case h.NodeKind.TYPEDECLARATION:if(this.currentFunction==this.startFunction)return this.module.createNop();default:throw new Error("statement expected")}return this.addDebugLocation(t,e.range),t},t.prototype.compileStatements=function(e){for(var t=e.length,r=new Array(t),n=0;n=0?"case"+o.toString(10):"break")+"|"+t);var u=this.module.createBlock("case0|"+t,i,p.NativeType.None),l=!0;for(s=0;s=0&&l&&this.currentFunction.flow.set(1),u},t.prototype.compileThrowStatement=function(e){return this.currentFunction.flow.set(2),this.currentFunction.flow.set(1),this.module.createUnreachable()},t.prototype.compileTryStatement=function(e){throw new Error("not implemented")},t.prototype.compileVariableStatement=function(e,t){void 0===t&&(t=!1);var r=e.declarations;if(t||this.currentFunction==this.startFunction&&e.parent&&e.parent.kind==h.NodeKind.SOURCE){for(var n=0,i=r.length;n");continue}l=this.currentType}if(h.hasModifier(h.ModifierKind.CONST,o.modifiers))if(_){if(_=this.precomputeExpressionRef(_),_BinaryenExpressionGetId(_)==p.ExpressionId.Const){var y=new u.Local(this.program,s,-1,l);switch(_BinaryenExpressionGetType(_)){case p.NativeType.I32:y=y.withConstantIntegerValue(_BinaryenConstGetValueI32(_),0);break;case p.NativeType.I64:y=y.withConstantIntegerValue(_BinaryenConstGetValueI64Low(_),_BinaryenConstGetValueI64High(_));break;case p.NativeType.F32:y=y.withConstantFloatValue(_BinaryenConstGetValueF32(_));break;case p.NativeType.F64:y=y.withConstantFloatValue(_BinaryenConstGetValueF64(_));break;default:throw new Error("concrete type expected")}var m=this.currentFunction.flow.scopedLocals;if(m){if(m.has(s))return this.error(c.DiagnosticCode.Duplicate_identifier_0,o.name.range,s),0}else m=this.currentFunction.flow.scopedLocals=new Map;return m.set(s,y),0}this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,o.range)}else this.error(c.DiagnosticCode._const_declarations_must_be_initialized,o.range);h.hasModifier(h.ModifierKind.LET,o.modifiers)?this.currentFunction.flow.addScopedLocal(s,l,o.name):this.currentFunction.addLocal(l,s),_&&a.push(this.compileAssignmentWithValue(o.name,_))}return a.length?1==a.length?a[0]:this.module.createBlock(null,a,p.NativeType.None):0},t.prototype.compileWhileStatement=function(e){var t=f(this.compileExpression(e.condition,d.Type.i32,0),this.currentType,this.module),r=this.currentFunction.enterBreakContext();this.currentFunction.flow=this.currentFunction.flow.enterBranchOrScope();var n=this.currentFunction.flow.breakLabel="break|"+r,i=this.currentFunction.flow.continueLabel="continue|"+r,a=this.compileStatement(e.statement);this.currentFunction.flow=this.currentFunction.flow.leaveBranchOrScope(),this.currentFunction.leaveBreakContext();var o=this.module.createBlock(n,[this.module.createLoop(i,this.module.createIf(t,this.module.createBlock(null,[a,this.module.createBreak(i)],p.NativeType.None)))],p.NativeType.None);return o},t.prototype.compileInlineConstant=function(e,t,r){switch(assert(e.is(u.ElementFlags.INLINED)),!r&&e.type.is(4)&&t.is(4)&&e.type.size>n:0);case 5:case 6:case 10:var i=e.type.computeSmallIntegerMask(d.Type.i32);return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue)&i: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:throw new Error("concrete type expected")}},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:case h.NodeKind.FUNCTIONARROW: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);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:throw new Error("expression expected")}return 0!=r&&this.currentType!=t&&(i=this.convertExpression(i,this.currentType,t,r,e),this.currentType=t),this.addDebugLocation(i,e.range),i},t.prototype.compileExpressionRetainType=function(e,t,r){return void 0===r&&(r=!0),this.compileExpression(e,t==d.Type.void?d.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.currentType.toNativeType(),r=this.module.getFunctionTypeBySignature(t,[]);r||(r=this.module.addFunctionType(this.currentType.toSignatureString(),t,[]));var n=this.module.addFunction("__precompute",r,[],e);this.module.runPasses(["precompute"],n);var i=_BinaryenFunctionGetBody(n);return this.module.removeFunction("__precompute"),i},t.prototype.convertExpression=function(e,t,r,n,i){return 0==n?(assert(!1,"concrete type expected"),e):13==t.kind?(this.error(c.DiagnosticCode.Type_0_is_not_assignable_to_type_1,i.range,t.toString(),r.toString()),this.module.createUnreachable()):13==r.kind?this.module.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=this.module.createUnary(p.UnaryOp.PromoteF32,e)):11==r.kind&&(e=this.module.createUnary(p.UnaryOp.DemoteF64,e)):r.is(4)?11==t.kind?r.is(1)?r.is(64)?e=this.module.createUnary(p.UnaryOp.TruncF32ToI64,e):(e=this.module.createUnary(p.UnaryOp.TruncF32ToI32,e),r.is(32)&&(e=m(e,r,this.module))):r.is(64)?e=this.module.createUnary(p.UnaryOp.TruncF32ToU64,e):(e=this.module.createUnary(p.UnaryOp.TruncF32ToU32,e),r.is(32)&&(e=m(e,r,this.module))):r.is(1)?r.is(64)?e=this.module.createUnary(p.UnaryOp.TruncF64ToI64,e):(e=this.module.createUnary(p.UnaryOp.TruncF64ToI32,e),r.is(32)&&(e=m(e,r,this.module))):r.is(64)?e=this.module.createUnary(p.UnaryOp.TruncF64ToU64,e):(e=this.module.createUnary(p.UnaryOp.TruncF64ToU32,e),r.is(32)&&(e=m(e,r,this.module))):(assert(0==r.flags,"void type expected"),e=this.module.createDrop(e)):t.is(4)&&r.is(8)?e=11==r.kind?t.is(64)?this.module.createUnary(t.is(1)?p.UnaryOp.ConvertI64ToF32:p.UnaryOp.ConvertU64ToF32,e):this.module.createUnary(t.is(1)?p.UnaryOp.ConvertI32ToF32:p.UnaryOp.ConvertU32ToF32,e):t.is(64)?this.module.createUnary(t.is(1)?p.UnaryOp.ConvertI64ToF64:p.UnaryOp.ConvertU64ToF64,e):this.module.createUnary(t.is(1)?p.UnaryOp.ConvertI32ToF64:p.UnaryOp.ConvertU32ToF64,e):t.is(64)?r.is(64)||(e=this.module.createUnary(p.UnaryOp.WrapI64,e),r.is(32)&&(e=m(e,r,this.module))):r.is(64)?e=this.module.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=m(e,r,this.module)),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){var n,i,a,o,s,u,h;void 0===r&&(r=!0);var _=!1,y=!1,E=null;switch(e.operator){case l.Token.LESSTHAN:if(n=this.compileExpressionRetainType(e.left,t),i=this.currentType,a=this.compileExpressionRetainType(e.right,i),o=this.currentType,!(s=d.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,this.module.createUnreachable();switch(n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right),s.kind){case 0:case 1:case 2:h=this.module.createBinary(p.BinaryOp.LtI32,n,a);break;case 3:h=this.module.createBinary(p.BinaryOp.LtI64,n,a);break;case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.LtI64:p.BinaryOp.LtI32,n,a);break;case 5:case 6:case 7:case 10:h=this.module.createBinary(p.BinaryOp.LtU32,n,a);break;case 9:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.LtU64:p.BinaryOp.LtU32,n,a);break;case 8:h=this.module.createBinary(p.BinaryOp.LtU64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.LtF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.LtF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}this.currentType=d.Type.bool;break;case l.Token.GREATERTHAN:if(n=this.compileExpressionRetainType(e.left,t),i=this.currentType,a=this.compileExpressionRetainType(e.right,i),o=this.currentType,!(s=d.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,this.module.createUnreachable();switch(n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right),s.kind){case 0:case 1:case 2:h=this.module.createBinary(p.BinaryOp.GtI32,n,a);break;case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.GtI64:p.BinaryOp.GtI32,n,a);break;case 3:h=this.module.createBinary(p.BinaryOp.GtI64,n,a);break;case 5:case 6:case 7:case 10:h=this.module.createBinary(p.BinaryOp.GtU32,n,a);break;case 9:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.GtU64:p.BinaryOp.GtU32,n,a);break;case 8:h=this.module.createBinary(p.BinaryOp.GtU64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.GtF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.GtF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}this.currentType=d.Type.bool;break;case l.Token.LESSTHAN_EQUALS:if(n=this.compileExpressionRetainType(e.left,t),i=this.currentType,a=this.compileExpressionRetainType(e.right,i),o=this.currentType,!(s=d.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,this.module.createUnreachable();switch(n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right),s.kind){case 0:case 1:case 2:h=this.module.createBinary(p.BinaryOp.LeI32,n,a);break;case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.LeI64:p.BinaryOp.LeI32,n,a);break;case 3:h=this.module.createBinary(p.BinaryOp.LeI64,n,a);break;case 5:case 6:case 7:case 10:h=this.module.createBinary(p.BinaryOp.LeU32,n,a);break;case 9:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.LeU64:p.BinaryOp.LeU32,n,a);break;case 8:h=this.module.createBinary(p.BinaryOp.LeU64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.LeF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.LeF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}this.currentType=d.Type.bool;break;case l.Token.GREATERTHAN_EQUALS:if(n=this.compileExpressionRetainType(e.left,t),i=this.currentType,a=this.compileExpressionRetainType(e.right,i),o=this.currentType,!(s=d.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,this.module.createUnreachable();switch(n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right),s.kind){case 0:case 1:case 2:h=this.module.createBinary(p.BinaryOp.GeI32,n,a);break;case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.GeI64:p.BinaryOp.GeI32,n,a);break;case 3:h=this.module.createBinary(p.BinaryOp.GeI64,n,a);break;case 5:case 6:case 7:case 10:h=this.module.createBinary(p.BinaryOp.GeU32,n,a);break;case 9:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.GeU64:p.BinaryOp.GeU32,n,a);break;case 8:h=this.module.createBinary(p.BinaryOp.GeU64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.GeF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.GeF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}this.currentType=d.Type.bool;break;case l.Token.EQUALS_EQUALS_EQUALS:case l.Token.EQUALS_EQUALS:if(n=this.compileExpressionRetainType(e.left,t),i=this.currentType,a=this.compileExpressionRetainType(e.right,i),o=this.currentType,!(s=d.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,l.Token.operatorToString(e.operator),i.toString(),o.toString()),this.currentType=t,this.module.createUnreachable();switch(n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:h=this.module.createBinary(p.BinaryOp.EqI32,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.EqI64:p.BinaryOp.EqI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.EqI64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.EqF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.EqF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}this.currentType=d.Type.bool;break;case l.Token.EXCLAMATION_EQUALS_EQUALS:case l.Token.EXCLAMATION_EQUALS:if(n=this.compileExpressionRetainType(e.left,t),i=this.currentType,a=this.compileExpressionRetainType(e.right,i),o=this.currentType,!(s=d.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,l.Token.operatorToString(e.operator),i.toString(),o.toString()),this.currentType=t,this.module.createUnreachable();switch(n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:h=this.module.createBinary(p.BinaryOp.NeI32,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.NeI64:p.BinaryOp.NeI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.NeI64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.NeF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.NeF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}this.currentType=d.Type.bool;break;case l.Token.EQUALS:return this.compileAssignment(e.left,e.right,t);case l.Token.PLUS_EQUALS:_=!0;case l.Token.PLUS:if(n=this.compileExpressionRetainType(e.left,t,!1),_)a=this.compileExpression(e.right,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(e.right,i,!1),o=this.currentType,!(s=d.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,this.module.createUnreachable();n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=!0;case 2:case 7:h=this.module.createBinary(p.BinaryOp.AddI32,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.AddI64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.AddF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.AddF64,n,a);break;default:throw new Error("concrete type expected")}break;case l.Token.MINUS_EQUALS:_=!0;case l.Token.MINUS:if(n=this.compileExpressionRetainType(e.left,t,!1),_)a=this.compileExpression(e.right,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(e.right,i,!1),o=this.currentType,!(s=d.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,this.module.createUnreachable();n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=!0;case 2:case 7:h=this.module.createBinary(p.BinaryOp.SubI32,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.SubI64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.SubF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.SubF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.ASTERISK_EQUALS:_=!0;case l.Token.ASTERISK:if(n=this.compileExpressionRetainType(e.left,t,!1),_)a=this.compileExpression(e.right,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(e.right,i,!1),o=this.currentType,!(s=d.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,this.module.createUnreachable();n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=!0;case 2:case 7:h=this.module.createBinary(p.BinaryOp.MulI32,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.MulI64:p.BinaryOp.MulI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.MulI64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.MulF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.MulF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.SLASH_EQUALS:_=!0;case l.Token.SLASH:if(n=this.compileExpressionRetainType(e.left,t,!0),_)a=this.compileExpression(e.right,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(e.right,i,!1),o=this.currentType,!(s=d.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,this.module.createUnreachable();n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right)}switch(this.currentType.kind){case 0:case 1:y=!0;case 2:h=this.module.createBinary(p.BinaryOp.DivI32,n,a);break;case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.DivI64:p.BinaryOp.DivI32,n,a);break;case 3:h=this.module.createBinary(p.BinaryOp.DivI64,n,a);break;case 5:case 6:case 10:y=!0;case 7:h=this.module.createBinary(p.BinaryOp.DivU32,n,a);break;case 9:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.DivU64:p.BinaryOp.DivU32,n,a);break;case 8:h=this.module.createBinary(p.BinaryOp.DivU64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.DivF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.DivF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.PERCENT_EQUALS:_=!0;case l.Token.PERCENT:if(n=this.compileExpressionRetainType(e.left,t,!0),_)a=this.compileExpression(e.right,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(e.right,i,!1),o=this.currentType,!(s=d.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,this.module.createUnreachable();n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right)}switch(this.currentType.kind){case 0:case 1:case 2:h=this.module.createBinary(p.BinaryOp.RemI32,n,a);break;case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.RemI64:p.BinaryOp.RemI32,n,a);break;case 3:h=this.module.createBinary(p.BinaryOp.RemI64,n,a);break;case 5:case 6:case 7:case 10:h=this.module.createBinary(p.BinaryOp.RemU32,n,a);break;case 9:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.RemU64:p.BinaryOp.RemU32,n,a);break;case 8:h=this.module.createBinary(p.BinaryOp.RemU64,n,a);break;case 11:case 12:this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=this.module.createUnreachable();break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.LESSTHAN_LESSTHAN_EQUALS:_=!0;case l.Token.LESSTHAN_LESSTHAN:switch(n=this.compileExpressionRetainType(e.left,t,!1),a=this.compileExpression(e.right,this.currentType,1,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=!0;default:h=this.module.createBinary(p.BinaryOp.ShlI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.ShlI64,n,a);break;case 9:case 4:h=this.module.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.Token.operatorToString(e.operator),this.currentType.toString()),this.module.createUnreachable();case 13:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.GREATERTHAN_GREATERTHAN_EQUALS:_=!0;case l.Token.GREATERTHAN_GREATERTHAN:switch(n=this.compileExpressionRetainType(e.left,t,!0),a=this.compileExpression(e.right,this.currentType,1,!0),this.currentType.kind){default:h=this.module.createBinary(p.BinaryOp.ShrI32,n,a);break;case 3:h=this.module.createBinary(p.BinaryOp.ShrI64,n,a);break;case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.ShrI64:p.BinaryOp.ShrI32,n,a);break;case 5:case 6:case 10:case 7:h=this.module.createBinary(p.BinaryOp.ShrU32,n,a);break;case 8:h=this.module.createBinary(p.BinaryOp.ShrU64,n,a);break;case 9:h=this.module.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.Token.operatorToString(e.operator),this.currentType.toString()),this.module.createUnreachable();case 13:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:_=!0;case l.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:switch(n=this.compileExpressionRetainType(e.left,t,!0),a=this.compileExpression(e.right,this.currentType,1,!0),this.currentType.kind){case 0:case 1:y=!0;default:h=this.module.createBinary(p.BinaryOp.ShrU32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.ShrU64,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.ShrU64:p.BinaryOp.ShrU32,n,a);break;case 13:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.AMPERSAND_EQUALS:_=!0;case l.Token.AMPERSAND:if(n=this.compileExpressionRetainType(e.left,t,!1),_)a=this.compileExpression(e.right,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(e.right,i,!1),o=this.currentType,!(s=d.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,this.module.createUnreachable();n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=!0;default:h=this.module.createBinary(p.BinaryOp.AndI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.AndI64,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.AndI64:p.BinaryOp.AndI32,n,a);break;case 13:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.BAR_EQUALS:_=!0;case l.Token.BAR:if(n=this.compileExpressionRetainType(e.left,t,!1),_)a=this.compileExpression(e.right,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(e.right,i,!1),o=this.currentType,!(s=d.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,this.module.createUnreachable();n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=!0;default:h=this.module.createBinary(p.BinaryOp.OrI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.OrI64,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.OrI64:p.BinaryOp.OrI32,n,a);break;case 13:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.CARET_EQUALS:_=!0;case l.Token.CARET:if(n=this.compileExpressionRetainType(e.left,t,!1),_)a=this.compileExpression(e.right,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(e.right,i,!1),o=this.currentType,!(s=d.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,this.module.createUnreachable();n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=!0;default:h=this.module.createBinary(p.BinaryOp.XorI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.XorI64,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.XorI64:p.BinaryOp.XorI32,n,a);break;case 13:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.AMPERSAND_AMPERSAND:n=this.compileExpressionRetainType(e.left,t),a=this.compileExpression(e.right,this.currentType,1,!1),(h=this.module.cloneExpression(n,!0,0))||(E=this.currentFunction.getAndFreeTempLocal(this.currentType),n=this.module.createTeeLocal(E.index,n)),y=this.currentType.is(36),u=f(n,this.currentType,this.module),h=h?this.module.createIf(u,a,h):this.module.createIf(u,a,this.module.createGetLocal(assert(E,"tempLocal must be set").index,this.currentType.toNativeType()));break;case l.Token.BAR_BAR:n=this.compileExpressionRetainType(e.left,t),a=this.compileExpression(e.right,this.currentType,1,!1),(h=this.module.cloneExpression(n,!0,0))||(E=this.currentFunction.getAndFreeTempLocal(this.currentType),n=this.module.createTeeLocal(E.index,n)),y=this.currentType.is(36),u=f(n,this.currentType,this.module),h=h?this.module.createIf(u,h,a):this.module.createIf(u,this.module.createGetLocal(assert(E,"tempLocal must be set").index,this.currentType.toNativeType()),a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("not implemented")}return y&&r&&(assert(this.currentType.is(36),"small integer type expected"),h=m(h,this.currentType,this.module)),_?this.compileAssignmentWithValue(e.left,h,t!=d.Type.void):h},t.prototype.compileAssignment=function(e,t,r){var n=this.program.resolveExpression(e,this.currentFunction);if(!n)return this.module.createUnreachable();var i,a=n.element;switch(a.kind){case u.ElementKind.GLOBAL:if(!this.compileGlobal(a))return this.module.createUnreachable();assert(a.type!=d.Type.void,"concrete type expected");case u.ElementKind.LOCAL:case u.ElementKind.FIELD:i=a.type;break;case u.ElementKind.PROPERTY:var o=a.setterPrototype;if(o){var s=o.resolve();if(!s)return this.module.createUnreachable();assert(s.parameters&&1==s.parameters.length),i=s.parameters[0].type;break}return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,a.internalName),this.module.createUnreachable();case u.ElementKind.FUNCTION_PROTOTYPE:if(e.kind==h.NodeKind.ELEMENTACCESS){assert(n.target&&n.target.kind==u.ElementKind.CLASS&&a.simpleName==n.target.prototype.fnIndexedGet);var p=a.resolve(null);if(p){i=p.returnType;break}}default:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}return this.currentType=i,this.compileAssignmentWithValue(e,this.compileExpression(t,i),r!=d.Type.void)},t.prototype.compileAssignmentWithValue=function(e,t,r){void 0===r&&(r=!1);var n=this.program.resolveExpression(e,this.currentFunction);if(!n)return this.module.createUnreachable();var i,a,o=n.element;switch(o.kind){case u.ElementKind.LOCAL:return this.currentType=r?o.type:d.Type.void,o.is(u.ElementFlags.CONSTANT)?(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()):r?this.module.createTeeLocal(o.index,t):this.module.createSetLocal(o.index,t);case u.ElementKind.GLOBAL:if(!this.compileGlobal(o))return this.module.createUnreachable();if(assert(o.type!=d.Type.void,"concrete type expected"),this.currentType=r?o.type:d.Type.void,o.is(u.ElementFlags.CONSTANT))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();if(!r)return this.module.createSetGlobal(o.internalName,t);var s=o.type.toNativeType();return this.module.createBlock(null,[this.module.createSetGlobal(o.internalName,t),this.module.createGetGlobal(o.internalName,s)],s);case u.ElementKind.FIELD:if(o.prototype.isReadonly)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();assert(null!=n.targetExpression,"target expression expected"),a=this.compileExpression(n.targetExpression,this.options.isWasm64?d.Type.usize64:d.Type.usize32,0),assert(this.currentType.classType,"class type expected"),this.currentType=r?o.type:d.Type.void;var p=o.type.toNativeType();return r?(i=this.currentFunction.getAndFreeTempLocal(o.type),this.module.createBlock(null,[this.module.createSetLocal(i.index,t),this.module.createStore(o.type.size>>3,a,this.module.createGetLocal(i.index,p),p,o.memoryOffset),this.module.createGetLocal(i.index,p)],p)):this.module.createStore(o.type.size>>3,a,t,p,o.memoryOffset);case u.ElementKind.PROPERTY:var l=o.setterPrototype;if(l){var _=l.resolve();if(_){if(assert(_.parameters&&1==_.parameters.length),!r)return _.is(u.ElementFlags.INSTANCE)?(assert(null!=n.targetExpression),a=this.compileExpression(n.targetExpression,this.options.isWasm64?d.Type.usize64:d.Type.usize32,0),assert(this.currentType.classType),this.currentType=d.Type.void,this.makeCall(_,[a,t])):(this.currentType=d.Type.void,this.makeCall(_,[t]));var y=o.getterPrototype;assert(null!=y);var m=y.resolve();if(m)return assert(!m.parameters||!m.parameters.length),_.is(u.ElementFlags.INSTANCE)?(assert(null!=n.targetExpression),a=this.compileExpression(n.targetExpression,this.options.isWasm64?d.Type.usize64:d.Type.usize32,0),assert(this.currentType.classType),i=this.currentFunction.getAndFreeTempLocal(m.returnType),this.module.createBlock(null,[this.makeCall(_,[this.module.createTeeLocal(i.index,a),t]),this.makeCall(m,[this.module.createGetLocal(i.index,i.type.toNativeType())])],(this.currentType=m.returnType).toNativeType())):this.module.createBlock(null,[this.makeCall(_,[t]),this.makeCall(m)],(this.currentType=m.returnType).toNativeType())}}else this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,o.internalName);return this.module.createUnreachable();case u.ElementKind.FUNCTION_PROTOTYPE:if(e.kind==h.NodeKind.ELEMENTACCESS){assert(n.target&&n.target.kind==u.ElementKind.CLASS);var E=o.resolve();if(!E)return this.module.createUnreachable();var f,T=n.target.prototype.fnIndexedSet;if(null!=T&&n.target.members&&(f=n.target.members.get(T))&&f.kind==u.ElementKind.FUNCTION_PROTOTYPE){var g=f.resolve();if(!g)return this.module.createUnreachable();a=this.compileExpression(n.targetExpression,this.options.isWasm64?d.Type.usize64:d.Type.usize32,0),assert(this.currentType.classType);var A=this.compileExpression(e.elementExpression,d.Type.i32);return r?(this.currentType=E.returnType,i=this.currentFunction.getAndFreeTempLocal(this.currentType),this.module.createBlock(null,[this.makeCall(g,[a,A,this.module.createTeeLocal(i.index,t)]),this.module.createGetLocal(i.index,i.type.toNativeType())],this.currentType.toNativeType())):(this.currentType=g.returnType,this.makeCall(g,[a,A,t]))}return this.error(c.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,n.target.internalName),this.module.createUnreachable()}}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileCallExpression=function(e,t){var r=this.program.resolveExpression(e.expression,this.currentFunction);if(!r)return this.module.createUnreachable();var n,i,a=r.element;switch(a.kind){case u.ElementKind.FUNCTION_PROTOTYPE:if((n=a).is(u.ElementFlags.BUILTIN)){var o=s.compileCall(this,n,n.resolveBuiltinTypeArguments(e.typeArguments,this.currentFunction.contextualTypeArguments),e.arguments,t,e);return o||(this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable())}if(!(i=n.resolveUsingTypeArguments(e.typeArguments,this.currentFunction.contextualTypeArguments,e)))return this.module.createUnreachable();break;case u.ElementKind.LOCAL:case u.ElementKind.GLOBAL:case u.ElementKind.FIELD:if(!a.type.isFunction)return this.error(c.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,e.range,a.type.toString()),this.module.createUnreachable();i=a.type.functionType;break;default:return this.error(c.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,e.range,a.internalName),this.module.createUnreachable()}var p=e.arguments.length,l=i.instanceMethodOf?p+1:p,h=0,d=new Array(l);i.instanceMethodOf&&(assert(null!=r.targetExpression),d[h++]=r.targetExpression);for(var _=0;_o)return this.error(c.DiagnosticCode.Expected_0_arguments_but_got_1,r.range,a.toString(10),p.toString(10)),this.module.createUnreachable();var u=new Array(o),l=0,h=0;if(e.instanceMethodOf&&(u[l++]=n||this.compileExpression(t[h++],e.instanceMethodOf.type)),i)for(;ll)u[l]=this.compileExpression(t[h++],i[l+a-o].type);else{var d=i[l+a-o].initializer;if(!d)return this.error(c.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,r.range,(l+a-o).toString(10),p.toString(10)),this.module.createUnreachable();u[l]=this.compileExpression(d,i[l+a-o].type)}return this.currentType=e.returnType,this.makeCall(e,u)},t.prototype.makeCall=function(e,t){return void 0===t&&(t=null),e.is(u.ElementFlags.COMPILED)||this.compileFunction(e)?e.is(u.ElementFlags.DECLARED)?this.module.createCallImport(e.internalName,t,e.returnType.toNativeType()):this.module.createCall(e.internalName,t,e.returnType.toNativeType()):this.module.createUnreachable()},t.prototype.compileCommaExpression=function(e,t){for(var r=e.expressions,n=r.length,i=new Array(n--),a=0;a=0),this.currentType=i.type,this.module.createGetLocal(i.index,this.currentType.toNativeType()));case u.ElementKind.GLOBAL:return i.is(u.ElementFlags.BUILTIN)?s.compileGetConstant(this,i,e):this.compileGlobal(i)?(assert(i.type!=d.Type.void),i.is(u.ElementFlags.INLINED)?this.compileInlineConstant(i,t,r):(this.currentType=i.type,this.module.createGetGlobal(i.internalName,this.currentType.toNativeType()))):this.module.createUnreachable();case u.ElementKind.ENUMVALUE:return i.is(u.ElementFlags.COMPILED)?(this.currentType=d.Type.i32,i.is(u.ElementFlags.INLINED)?this.module.createI32(i.constantValue):this.module.createGetGlobal(i.internalName,p.NativeType.I32)):(this.error(c.DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,e.range),this.currentType=d.Type.i32,this.module.createUnreachable())}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileLiteralExpression=function(e,t,r){switch(void 0===r&&(r=!1),e.literalKind){case 4:assert(!r);var n=t.classType;return n&&n==this.program.elements.get("Array")&&n.typeArguments&&1==n.typeArguments.length?this.compileStaticArray(n.typeArguments[0],e.elementExpressions):(this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable());case 0:var i=e.value;return r&&(i=-i),t==d.Type.f32?this.module.createF32(i):(this.currentType=d.Type.f64,this.module.createF64(i));case 1:var a=e.value;switch(r&&(a=i64_sub(i64_new(0),a)),t.kind){case 0:if(i64_is_i8(a))return this.module.createI32(i64_low(a));break;case 1:if(i64_is_i16(a))return this.module.createI32(i64_low(a));break;case 2:if(i64_is_i32(a))return this.module.createI32(i64_low(a));break;case 5:if(i64_is_u8(a))return this.module.createI32(i64_low(a));break;case 6:if(i64_is_u16(a))return this.module.createI32(i64_low(a));break;case 7:if(i64_is_u32(a))return this.module.createI32(i64_low(a));break;case 10:if(i64_is_bool(a))return this.module.createI32(i64_low(a));break;case 4:case 9:if(!this.options.isWasm64){if(i64_is_u32(a))return this.module.createI32(i64_low(a));break}return this.module.createI64(i64_low(a),i64_high(a));case 3:case 8:return this.module.createI64(i64_low(a),i64_high(a));case 11:if(i64_is_f32(a))return this.module.createF32(i64_to_f32(a));break;case 12:if(i64_is_f64(a))return this.module.createF64(i64_to_f64(a));break;case 13:break;default:assert(!1)}return i64_is_i32(a)?(this.currentType=d.Type.i32,this.module.createI32(i64_low(a))):(this.currentType=d.Type.i64,this.module.createI64(i64_low(a),i64_high(a)));case 2:return assert(!r),this.compileStaticString(e.value)}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.currentType=t,this.module.createUnreachable()},t.prototype.compileStaticString=function(e){var t=this.stringSegments.get(e);if(!t){var r=e.length,n=new Uint8Array(4+2*r);n[0]=255&r,n[1]=r>>>8&255,n[2]=r>>>16&255,n[3]=r>>>24&255;for(var i=0;i>>8&255;t=this.addMemorySegment(n,this.options.usizeType.byteSize),this.stringSegments.set(e,t)}var a=t.offset,o=this.program.types.get("string");return this.currentType=o||this.options.usizeType,this.options.isWasm64?this.module.createI64(i64_low(a),i64_high(a)):(assert(i64_is_i32(a)),this.module.createI32(i64_low(a)))},t.prototype.compileStaticArray=function(e,t){var r,n=!0,i=t.length,a=e.toNativeType();switch(a){case p.NativeType.I32:r=changetype(new Int32Array(i));break;case p.NativeType.I64:r=changetype(new Array(i));break;case p.NativeType.F32:r=changetype(new Float32Array(i));break;case p.NativeType.F64:r=changetype(new Float64Array(i));break;default:throw new Error("concrete type expected")}for(var o,s=new Array(i),c=0;c=0),i=this.compileExpression(n.targetExpression,this.options.usizeType,0),this.currentType=a.type,this.module.createLoad(a.type.size>>3,a.type.is(5),i,a.type.toNativeType(),a.memoryOffset);case u.ElementKind.PROPERTY:var o=a.getterPrototype;assert(null!=o);var l=o.resolve(null);return l?(assert(!l.parameters||!l.parameters.length),this.currentType=l.returnType,l.is(u.ElementFlags.INSTANCE)?(i=this.compileExpression(n.targetExpression,this.options.usizeType,0),this.currentType=l.returnType,this.makeCall(l,[i])):this.makeCall(l)):this.module.createUnreachable()}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileTernaryExpression=function(e,t){var r=f(this.compileExpression(e.condition,d.Type.u32,0),this.currentType,this.module),n=this.compileExpression(e.ifThen,t),i=this.compileExpression(e.ifElse,t);return this.module.createIf(r,n,i)},t.prototype.compileUnaryPostfixExpression=function(e,t){var r,n,i,a,o=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,!1),s=!1;switch(e.operator){case l.Token.PLUS_PLUS:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:s=!0;default:r=p.BinaryOp.AddI32,n=p.NativeType.I32,i=this.module.createI32(1);break;case 9:case 4:r=this.options.isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,n=this.options.isWasm64?p.NativeType.I64:p.NativeType.I32,i=this.currentType.toNativeOne(this.module);break;case 3:case 8:r=p.BinaryOp.AddI64,n=p.NativeType.I64,i=this.module.createI64(1);break;case 11:r=p.BinaryOp.AddF32,n=p.NativeType.F32,i=this.module.createF32(1);break;case 12:r=p.BinaryOp.AddF64,n=p.NativeType.F64,i=this.module.createF64(1);break;case 13:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.MINUS_MINUS:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:s=!0;default:r=p.BinaryOp.SubI32,n=p.NativeType.I32,i=this.module.createI32(1);break;case 9:case 4:r=this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,n=this.options.isWasm64?p.NativeType.I64:p.NativeType.I32,i=this.currentType.toNativeOne(this.module);break;case 3:case 8:r=p.BinaryOp.SubI64,n=p.NativeType.I64,i=this.module.createI64(1);break;case 11:r=p.BinaryOp.SubF32,n=p.NativeType.F32,i=this.module.createF32(1);break;case 12:r=p.BinaryOp.SubF64,n=p.NativeType.F64,i=this.module.createF64(1);break;case 13:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("unary postfix operator expected")}var u=null;return t==d.Type.void?a=this.module.createBinary(r,o,i):(u=this.currentFunction.getTempLocal(this.currentType),a=this.module.createBinary(r,this.module.createGetLocal(u.index,n),i)),s&&(assert(this.currentType.is(36)),a=m(a,this.currentType,this.module)),a=this.compileAssignmentWithValue(e.operand,a,!1),t==d.Type.void?(assert(!u),a):(this.currentType=assert(u).type,this.currentFunction.freeTempLocal(u),this.module.createBlock(null,[this.module.createSetLocal(u.index,o),a,this.module.createGetLocal(u.index,n)],n))},t.prototype.compileUnaryPrefixExpression=function(e,t,r){void 0===r&&(r=!0);var n,i=!1,a=!1;switch(e.operator){case l.Token.PLUS:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();n=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,!1),i=this.currentType.is(36);break;case l.Token.MINUS:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();if(e.operand.kind!=h.NodeKind.LITERAL||1!=e.operand.literalKind&&0!=e.operand.literalKind)switch(n=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:i=!0;default:n=this.module.createBinary(p.BinaryOp.SubI32,this.module.createI32(0),n);break;case 9:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();case 4:n=this.module.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,this.currentType.toNativeZero(this.module),n);break;case 3:case 8:n=this.module.createBinary(p.BinaryOp.SubI64,this.module.createI64(0),n);break;case 11:n=this.module.createUnary(p.UnaryOp.NegF32,n);break;case 12:n=this.module.createUnary(p.UnaryOp.NegF64,n)}else n=this.compileLiteralExpression(e.operand,t,!0),this.addDebugLocation(n,e.range);break;case l.Token.PLUS_PLUS:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(a=!0,n=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:i=!0;default:n=this.module.createBinary(p.BinaryOp.AddI32,n,this.module.createI32(1));break;case 9:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();case 4:n=this.module.createBinary(this.options.isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,n,this.currentType.toNativeOne(this.module));break;case 3:case 8:n=this.module.createBinary(p.BinaryOp.AddI64,n,this.module.createI64(1));break;case 11:n=this.module.createBinary(p.BinaryOp.AddF32,n,this.module.createF32(1));break;case 12:n=this.module.createBinary(p.BinaryOp.AddF64,n,this.module.createF64(1))}break;case l.Token.MINUS_MINUS:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(a=!0,n=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:i=!0;default:n=this.module.createBinary(p.BinaryOp.SubI32,n,this.module.createI32(1));break;case 9:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();case 4:n=this.module.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,n,this.currentType.toNativeOne(this.module));break;case 3:case 8:n=this.module.createBinary(p.BinaryOp.SubI64,n,this.module.createI64(1));break;case 11:n=this.module.createBinary(p.BinaryOp.SubF32,n,this.module.createF32(1));break;case 12:n=this.module.createBinary(p.BinaryOp.SubF64,n,this.module.createF64(1))}break;case l.Token.EXCLAMATION:n=E(n=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,!0),this.currentType,this.module),this.currentType=d.Type.bool;break;case l.Token.TILDE:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(n=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t.is(8)?d.Type.i64:t,t==d.Type.void?0:1,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:i=!0;default:n=this.module.createBinary(p.BinaryOp.XorI32,n,this.module.createI32(-1));break;case 9:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();case 4:n=this.module.createBinary(this.options.isWasm64?p.BinaryOp.XorI64:p.BinaryOp.XorI32,n,this.currentType.toNativeNegOne(this.module));break;case 3:case 8:n=this.module.createBinary(p.BinaryOp.XorI64,n,this.module.createI64(-1,-1))}break;case l.Token.TYPEOF:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("not implemented");default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("unary operator expected")}return i&&r&&(assert(this.currentType.is(36)),n=m(n,this.currentType,this.module)),a?this.compileAssignmentWithValue(e.operand,n,t!=d.Type.void):n},t.prototype.addDebugLocation=function(e,t){if(null!=this.options.sourceMap){var r=t.source;r.debugInfoIndex<0&&(r.debugInfoIndex=this.module.addDebugInfoFile(r.normalizedPath)),t.debugInfoRef=e,this.currentFunction.debugLocations||(this.currentFunction.debugLocations=[]),this.currentFunction.debugLocations.push(t)}},t}(c.DiagnosticEmitter);function m(e,t,r){switch(t.kind){case 0:e=r.createBinary(p.BinaryOp.ShrI32,r.createBinary(p.BinaryOp.ShlI32,e,r.createI32(24)),r.createI32(24));break;case 1:e=r.createBinary(p.BinaryOp.ShrI32,r.createBinary(p.BinaryOp.ShlI32,e,r.createI32(16)),r.createI32(16));break;case 5:e=r.createBinary(p.BinaryOp.AndI32,e,r.createI32(255));break;case 6:e=r.createBinary(p.BinaryOp.AndI32,e,r.createI32(65535));break;case 10:e=r.createBinary(p.BinaryOp.AndI32,e,r.createI32(1));break;case 13:throw new Error("concrete type expected")}return e}function E(e,t,r){switch(t.kind){default:e=r.createUnary(p.UnaryOp.EqzI32,e);break;case 3:case 8:e=r.createUnary(p.UnaryOp.EqzI64,e);break;case 9:case 4:e=r.createUnary(64==t.size?p.UnaryOp.EqzI64:p.UnaryOp.EqzI32,e);break;case 11:e=r.createBinary(p.BinaryOp.EqF32,e,r.createF32(0));break;case 12:e=r.createBinary(p.BinaryOp.EqF64,e,r.createF64(0));break;case 13:throw new Error("concrete type expected")}return e}function f(e,t,r){switch(t.kind){case 3:case 8:e=r.createBinary(p.BinaryOp.NeI64,e,r.createI64(0));break;case 9:case 4:64==t.size&&(e=r.createBinary(p.BinaryOp.NeI64,e,r.createI64(0)));break;case 11:e=r.createBinary(p.BinaryOp.NeF32,e,r.createF32(0));break;case 12:e=r.createBinary(p.BinaryOp.NeF64,e,r.createF64(0));break;case 13:throw new Error("concrete type expected")}return e}t.Compiler=y,t.makeSmallIntegerWrap=m,t.makeIsFalseish=E,t.makeIsTrueish=f},function(e,t){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=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.normalize=i,t.resolve=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(e"),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;h=!0}n=p.Node.createType(u,l,h,e.range(a,e.pos))}for(;e.skip(o.Token.OPENBRACKET);){var _=e.tokenPos;if(!e.skip(o.Token.CLOSEBRACKET))return r||this.error(s.DiagnosticCode._0_expected,e.range(),"]"),null;var y=e.range(_,e.pos);if(h=!1,e.skip(o.Token.BAR)){if(!e.skip(o.Token.NULL))return r||this.error(s.DiagnosticCode._0_expected,e.range(),"null"),null;h=!0}if(n=p.Node.createType(p.Node.createIdentifierExpression("Array",y),[n],h,e.range(a,e.pos)),h)break}return n},t.prototype.parseDecorator=function(e){var t=e.tokenPos;if(e.skip(o.Token.IDENTIFIER)){for(var r,n=e.readIdentifier(),i=p.Node.createIdentifierExpression(n,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;n=e.readIdentifier(),i=p.Node.createPropertyAccessExpression(i,p.Node.createIdentifierExpression(n,e.range()),e.range(t,e.pos))}if(!e.skip(o.Token.OPENPAREN))return p.Node.createDecorator(i,null,e.range(t,e.pos));if(r=this.parseArguments(e))return p.Node.createDecorator(i,r,e.range(t,e.pos))}else this.error(s.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseVariable=function(e,t,r){var n=t&&t.length?t[0].range.start:e.tokenPos,i=new Array,a=p.hasModifier(p.ModifierKind.DECLARE,t);do{var s=this.parseVariableDeclaration(e,a,t,r);if(!s)return null;i.push(s)}while(e.skip(o.Token.COMMA));var c=p.Node.createVariableStatement(i,t,r,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),c},t.prototype.parseVariableDeclaration=function(e,t,r,n){if(void 0===t&&(t=!1),!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;var i=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),a=null;e.skip(o.Token.COLON)&&(a=this.parseType(e));var c=null;if(e.skip(o.Token.EQUALS)){if(t&&this.error(s.DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,e.range()),!(c=this.parseExpression(e,1)))return null}else p.hasModifier(p.ModifierKind.CONST,r)?p.hasModifier(p.ModifierKind.DECLARE,r)||this.error(s.DiagnosticCode._const_declarations_must_be_initialized,i.range):a||this.error(s.DiagnosticCode.Type_expected,e.range(e.pos));return p.Node.createVariableDeclaration(i,a,c,r,n,o.Range.join(i.range,e.range()))},t.prototype.parseEnum=function(e,t,r){var n=t&&t.length?t[0].range.start:e.tokenPos;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 a=new Array;if(!e.skip(o.Token.CLOSEBRACE)){do{var c=this.parseEnumValue(e);if(!c)return null;a.push(c)}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(),"}"),null}var u=p.Node.createEnumDeclaration(i,a,t,r,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),u},t.prototype.parseEnumValue=function(e){if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;var t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;return e.skip(o.Token.EQUALS)&&!(r=this.parseExpression(e,1))?null:p.Node.createEnumValueDeclaration(t,r,o.Range.join(t.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;return e.skip(o.Token.EXTENDS)&&!(r=this.parseType(e))?null: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)&&!(c=this.parseType(e)))return null;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){var n=t&&t.length?t[0].range.start:e.tokenPos;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()),a=null;if(e.skip(o.Token.LESSTHAN)&&!(a=this.parseTypeParameters(e)))return null;if(!e.skip(o.Token.OPENPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"("),null;var c=this.parseParameters(e);if(!c)return null;var u=p.hasModifier(p.ModifierKind.SET,t);u&&(1!=c.length&&this.error(s.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,i.range),c.length&&c[0].initializer&&this.error(s.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,i.range)),p.hasModifier(p.ModifierKind.GET,t)&&c.length&&this.error(s.DiagnosticCode.A_get_accessor_cannot_have_parameters,i.range);var l=null;if(e.skip(o.Token.COLON)){if(!(l=this.parseType(e,u)))return null}else u||this.error(s.DiagnosticCode.Type_expected,e.range(e.pos));var h=p.hasModifier(p.ModifierKind.DECLARE,t),d=null;if(e.skip(o.Token.OPENBRACE)){if(h&&this.error(s.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,e.range()),!(d=this.parseBlockStatement(e,!1)))return null}else h||this.error(s.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,e.range(e.pos));var _=p.Node.createFunctionDeclaration(i,a,c,l,d,t,r,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),_},t.prototype.parseFunctionExpression=function(e){var t,r=e.tokenPos,n=!1;if(e.token==o.Token.FUNCTION){if(n=!1,t=e.skip(o.Token.IDENTIFIER)?p.Node.createIdentifierExpression(e.readIdentifier(),e.range()):p.Node.createIdentifierExpression("",e.range(e.pos,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.createIdentifierExpression("",e.range(e.tokenPos,e.tokenPos));var i=this.parseParameters(e);return i?this.parseFunctionExpressionCommon(e,t,i,n,r):null},t.prototype.parseFunctionExpressionCommon=function(e,t,r,n,i){void 0===i&&(i=-1),i<0&&(i=t.range.start);var a,c=null;if(e.skip(o.Token.COLON)&&!(c=this.parseType(e)))return null;if(n&&!e.skip(o.Token.EQUALS_GREATERTHAN))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"=>"),null;if(n)a=this.parseStatement(e,!1);else{if(!e.skip(o.Token.OPENBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;a=this.parseBlockStatement(e,!1)}if(!a)return null;var u=p.Node.createFunctionDeclaration(t,null,r,c,a,null,null,e.range(i,e.pos));return p.Node.createFunctionExpression(u,n)},t.prototype.parseClass=function(e,t,r){var n=r&&r.length?r[0].range.start:t&&t.length?t[0].range.start:e.tokenPos;if(e.skip(o.Token.IDENTIFIER)){var i,a=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(o.Token.LESSTHAN)){if(!(i=this.parseTypeParameters(e)))return null}else i=[];var c=null;if(e.skip(o.Token.EXTENDS)&&!(c=this.parseType(e)))return null;var u=new Array;if(e.skip(o.Token.IMPLEMENTS))do{var l=this.parseType(e);if(!l)return null;u.push(l)}while(e.skip(o.Token.COMMA));if(e.skip(o.Token.OPENBRACE)){var h=new Array;if(!e.skip(o.Token.CLOSEBRACE)){var d=p.hasModifier(p.ModifierKind.DECLARE,t);do{var _=this.parseClassMember(e,d);if(!_)return null;h.push(_)}while(!e.skip(o.Token.CLOSEBRACE))}return p.Node.createClassDeclaration(a,i,c,u,h,t,r,e.range(n,e.pos))}this.error(s.DiagnosticCode._0_expected,e.range(),"{")}else this.error(s.DiagnosticCode.Identifier_expected,e.range());return null},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 a=null;e.skip(o.Token.PUBLIC)?a=p.addModifier(p.Node.createModifier(p.ModifierKind.PUBLIC,e.range()),a):e.skip(o.Token.PRIVATE)?a=p.addModifier(p.Node.createModifier(p.ModifierKind.PRIVATE,e.range()),a):e.skip(o.Token.PROTECTED)&&(a=p.addModifier(p.Node.createModifier(p.ModifierKind.PROTECTED,e.range()),a)),e.skip(o.Token.STATIC)?a=p.addModifier(p.Node.createModifier(p.ModifierKind.STATIC,e.range()),a):e.skip(o.Token.ABSTRACT)&&(a=p.addModifier(p.Node.createModifier(p.ModifierKind.ABSTRACT,e.range()),a)),e.skip(o.Token.READONLY)&&(a=p.addModifier(p.Node.createModifier(p.ModifierKind.READONLY,e.range()),a)),e.mark();var c=!1,u=!1;(c=e.skip(o.Token.GET))?e.peek(!0,!0)!=o.Token.IDENTIFIER||e.nextTokenOnNewLine?(e.reset(),c=!1):a=p.addModifier(p.Node.createModifier(p.ModifierKind.GET,e.range()),a):(u=e.skip(o.Token.SET))&&(e.peek(!0,!0)!=o.Token.IDENTIFIER||e.nextTokenOnNewLine?(e.reset(),u=!1):a=p.addModifier(p.Node.createModifier(p.ModifierKind.SET,e.range()),a));var l=e.skip(o.Token.CONSTRUCTOR);if(l||e.skip(o.Token.IDENTIFIER)){var h=l?p.Node.createConstructorExpression(e.range()):p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),d=null;if(e.skip(o.Token.LESSTHAN)&&(l&&this.error(s.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,e.range()),!(d=this.parseTypeParameters(e))))return null;if(e.skip(o.Token.OPENPAREN)){var _=this.parseParameters(e);if(!_)return null;c&&_.length&&this.error(s.DiagnosticCode.A_get_accessor_cannot_have_parameters,h.range),u&&(1!=_.length&&this.error(s.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,h.range),_.length&&_[0].initializer&&this.error(s.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,h.range));var y=null;if(e.skip(o.Token.COLON)){if(h.kind==p.NodeKind.CONSTRUCTOR?this.error(s.DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration,e.range()):u&&this.error(s.DiagnosticCode.A_set_accessor_cannot_have_a_return_type_annotation,e.range()),!(y=this.parseType(e,h.kind==p.NodeKind.CONSTRUCTOR||u)))return null}else u||h.kind==p.NodeKind.CONSTRUCTOR||this.error(s.DiagnosticCode.Type_expected,e.range());var m=null;if(e.skip(o.Token.OPENBRACE)){if(t&&this.error(s.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,e.range()),!(m=this.parseBlockStatement(e,!1)))return null}else t||this.error(s.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,e.range());var E=p.Node.createMethodDeclaration(h,d,_,y,m,a,n,e.range(r,e.pos));return e.skip(o.Token.SEMICOLON),E}if(l)this.error(s.DiagnosticCode.Constructor_implementation_is_missing,h.range);else{if(!c&&!u){var f;(f=p.getModifier(p.ModifierKind.ABSTRACT,a))&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,f.range,"abstract"),(f=p.getModifier(p.ModifierKind.GET,a))&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,f.range,"get"),(f=p.getModifier(p.ModifierKind.SET,a))&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,f.range,"set");var T=null;if(e.skip(o.Token.COLON)){if(!(T=this.parseType(e)))return null}else this.error(s.DiagnosticCode.Type_expected,e.range());var g=null;if(e.skip(o.Token.EQUALS)&&!(g=this.parseExpression(e)))return null;var A=p.Node.createFieldDeclaration(h,T,g,a,n,e.range(r,e.pos));return e.skip(o.Token.SEMICOLON),A}this.error(s.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,h.range)}}else this.error(s.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseNamespace=function(e,t,r){var n=t&&t.length?t[0].range.start:e.tokenPos;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;!e.skip(o.Token.CLOSEBRACE);){var c=this.parseTopLevelStatement(e,!0);if(!c)return null;a.push(c)}var u=p.Node.createNamespaceDeclaration(i,a,t,r,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),u}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){var r=t&&t.length?t[0].range.start:e.tokenPos;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,u=p.Node.createStringLiteralExpression(e.readString(),e.range());return n?(assert(!r),c=p.Node.createImportStatementWithWildcard(n,u,e.range(t,e.pos))):c=p.Node.createImportStatement(r,u,e.range(t,e.pos)),this.seenlog.has(c.normalizedPath)||(this.backlog.push(c.normalizedPath),this.seenlog.add(c.normalizedPath)),e.skip(o.Token.SEMICOLON),c}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,o.Range.join(t,e.range()));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){switch(void 0===t&&(t=!1),e.mark(),e.next()){case o.Token.BREAK:return this.parseBreak(e);case o.Token.CONST:return this.parseVariable(e,[p.Node.createModifier(p.ModifierKind.CONST,e.range())],null);case o.Token.CONTINUE:return this.parseContinue(e);case o.Token.DO:return this.parseDoStatement(e);case o.Token.FOR:return this.parseForStatement(e);case o.Token.IF:return this.parseIfStatement(e);case o.Token.LET:return this.parseVariable(e,[p.Node.createModifier(p.ModifierKind.LET,e.range())],null);case o.Token.VAR:return this.parseVariable(e,null,null);case o.Token.OPENBRACE:return this.parseBlockStatement(e,t);case o.Token.RETURN:return t&&this.error(s.DiagnosticCode.A_return_statement_can_only_be_used_within_a_function_body,e.range()),this.parseReturn(e);case o.Token.SEMICOLON:return p.Node.createEmptyStatement(e.range(e.tokenPos));case o.Token.SWITCH:return this.parseSwitchStatement(e);case o.Token.THROW:return this.parseThrowStatement(e);case o.Token.TRY:return this.parseTryStatement(e);case o.Token.TYPE:return this.parseTypeDeclaration(e,null);case o.Token.WHILE:return this.parseWhileStatement(e);default:return e.reset(),this.parseExpressionStatement(e)}},t.prototype.parseBlockStatement=function(e,t){for(var r=e.tokenPos,n=new Array;!e.skip(o.Token.CLOSEBRACE);){var i=this.parseStatement(e,t);if(!i)return null;n.push(i)}var a=p.Node.createBlockStatement(n,e.range(r,e.pos));return e.skip(o.Token.SEMICOLON),a},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.LET)||e.skip(o.Token.CONST)||e.skip(o.Token.VAR))r=this.parseVariable(e,null,null);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 a=this.parseStatement(e);return a?p.Node.createForStatement(r,n?n.expression:null,i,a,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){void 0===t&&(t=null),void 0===r&&(r=null);var n=r&&r.length?r[0].range.start:t&&t.length?t[0].range.start:e.tokenPos;if(e.skip(o.Token.IDENTIFIER)){var i=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(o.Token.EQUALS)){var a=this.parseType(e);if(!a)return null;var c=p.Node.createTypeDeclaration(i,a,t,r,e.range(n,e.pos));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.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,a=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!=a)return t==o.Token.NEW?(i=this.parseExpression(e,18))?i.kind==p.NodeKind.CALL?p.Node.createNewExpression(i.expression,i.typeArguments,i.arguments,e.range(r,e.pos)):(this.error(s.DiagnosticCode.Operation_not_supported,e.range()),null):null:(i=this.parseExpression(e,a))?(t!=o.Token.PLUS_PLUS&&t!=o.Token.MINUS_MINUS||i.kind!=p.NodeKind.IDENTIFIER&&i.kind!=p.NodeKind.ELEMENTACCESS&&i.kind!=p.NodeKind.PROPERTYACCESS&&this.error(s.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,i.range),p.Node.createUnaryPrefixExpression(t,i,e.range(r,e.pos))):null;switch(t){case o.Token.OPENPAREN:if(e.skip(o.Token.CLOSEPAREN))return this.parseFunctionExpressionCommon(e,p.Node.createIdentifierExpression("",e.range(r,r)),[],!0);e.mark();var c=!0;do{switch(e.next(!0)){case o.Token.DOT_DOT_DOT:return e.reset(),this.parseFunctionExpression(e);case o.Token.IDENTIFIER:switch(e.readIdentifier(),e.next()){case o.Token.CLOSEPAREN:if(!e.skip(o.Token.EQUALS_GREATERTHAN)){c=!1;break}case o.Token.QUESTION:case o.Token.COLON:return e.reset(),this.parseFunctionExpression(e);case o.Token.COMMA:break;default:c=!1}break;default:c=!1}}while(c);return e.reset(),(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 u=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(u.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(u,e.range(r,e.pos));case o.Token.LESSTHAN:var l=this.parseType(e);return l?e.skip(o.Token.GREATERTHAN)?(n=this.parseExpression(e,18))?p.Node.createAssertionExpression(0,n,l,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 h=e.readRegexpPattern();return e.skip(o.Token.SLASH)?p.Node.createRegexpLiteralExpression(h,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){if(e.mark(),!e.skip(o.Token.LESSTHAN))return null;var t=new Array;do{var r=this.parseType(e,!0,!0);if(!r)return e.reset(),null;t.push(r)}while(e.skip(o.Token.COMMA));return e.skip(o.Token.GREATERTHAN)&&e.skip(o.Token.OPENPAREN)?t:(e.reset(),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;var n,i=r.range.start,a=this.tryParseTypeArgumentsBeforeArguments(e);if(a||e.skip(o.Token.OPENPAREN)){var c=this.parseArguments(e);if(!c)return null;r=p.Node.createCallExpression(r,a,c,e.range(i,e.pos))}for(var u,d=null;(u=l(n=e.peek()))>=t;)switch(e.next(),n){case o.Token.AS:var _=this.parseType(e);if(!_)return null;r=p.Node.createAssertionExpression(1,r,_,e.range(i,e.pos));break;case o.Token.OPENBRACKET:if(!(d=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,d,e.range(i,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(n,r,e.range(i,e.pos));break;case o.Token.QUESTION:var y=this.parseExpression(e);if(!y)return null;if(!e.skip(o.Token.COLON))return this.error(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(i,e.pos));break;case o.Token.COMMA:var E=[r];do{if(!(r=this.parseExpression(e,1)))return null;E.push(r)}while(e.skip(o.Token.COMMA));r=p.Node.createCommaExpression(E,e.range(i,e.pos));break;default:if(!(d=this.parseExpression(e,h(n)?u:u+1)))return null;if(n==o.Token.DOT)if(d.kind==p.NodeKind.IDENTIFIER)r=p.Node.createPropertyAccessExpression(r,d,e.range(i,e.pos));else{if(d.kind!=p.NodeKind.CALL)return this.error(s.DiagnosticCode.Identifier_expected,d.range),null;var f=d;if(f.expression.kind!=p.NodeKind.IDENTIFIER)return this.error(s.DiagnosticCode.Identifier_expected,f.expression.range),null;f.expression=p.Node.createPropertyAccessExpression(r,f.expression,e.range(i,e.pos)),r=f}else r=p.Node.createBinaryExpression(n,r,d,e.range(i,e.pos))}return r},t}(s.DiagnosticEmitter);function l(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 h(e){switch(e){case o.Token.EQUALS:case o.Token.PLUS_EQUALS:case o.Token.MINUS_EQUALS:case o.Token.ASTERISK_ASTERISK_EQUALS:case o.Token.ASTERISK_EQUALS:case o.Token.SLASH_EQUALS:case o.Token.PERCENT_EQUALS:case o.Token.LESSTHAN_LESSTHAN_EQUALS:case o.Token.GREATERTHAN_GREATERTHAN_EQUALS:case o.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case o.Token.AMPERSAND_EQUALS:case o.Token.CARET_EQUALS:case o.Token.BAR_EQUALS:case o.Token.QUESTION:case o.Token.ASTERISK_ASTERISK:return!0;default:return!1}}t.Parser=u,function(e){e[e.COMMA=0]="COMMA",e[e.SPREAD=1]="SPREAD",e[e.YIELD=2]="YIELD",e[e.ASSIGNMENT=3]="ASSIGNMENT",e[e.CONDITIONAL=4]="CONDITIONAL",e[e.LOGICAL_OR=5]="LOGICAL_OR",e[e.LOGICAL_AND=6]="LOGICAL_AND",e[e.BITWISE_OR=7]="BITWISE_OR",e[e.BITWISE_XOR=8]="BITWISE_XOR",e[e.BITWISE_AND=9]="BITWISE_AND",e[e.EQUALITY=10]="EQUALITY",e[e.RELATIONAL=11]="RELATIONAL",e[e.SHIFT=12]="SHIFT",e[e.ADDITIVE=13]="ADDITIVE",e[e.MULTIPLICATIVE=14]="MULTIPLICATIVE",e[e.EXPONENTIATED=15]="EXPONENTIATED",e[e.UNARY_PREFIX=16]="UNARY_PREFIX",e[e.UNARY_POSTFIX=17]="UNARY_POSTFIX",e[e.CALL=18]="CALL",e[e.MEMBERACCESS=19]="MEMBERACCESS",e[e.GROUPING=20]="GROUPING",e[e.INVALID=-1]="INVALID"}(t.Precedence||(t.Precedence={}))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(1),i=function(){function e(){this.text=[],this.functionId=0}return e.decompile=function(t){var r=new e;return r.decompile(t),r.finish()},e.prototype.decompile=function(e){throw new Error("not implemented")},e.prototype.decompileFunction=function(e){var t=n.readString(_BinaryenFunctionGetName(e))||"$"+this.functionId.toString(10),r=_BinaryenFunctionGetBody(e);this.push("function "),this.push(t),this.push("(");for(var i=0,o=_BinaryenFunctionGetNumParams(e);i0&&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(6),i=r(12),a=r(0);t.formatDiagnostic=a.formatDiagnosticMessage;var o=r(11);t.parseFile=function(e,t,r,n){return void 0===r&&(r=!1),void 0===n&&(n=null),n||(n=new o.Parser,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?f:E;if(t){if(e<0)return f;if(e>=_)return v}else{if(e<=-y)return N;if(e+1>=y)return I}return e<0?c(-e,t).neg():p(e%d|0,e/d|0,t)}function p(e,t,r){return new n(e,t,r)}n.fromInt=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 E;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=E,o=0;o>>0:this.low},S.toNumber=function(){return this.unsigned?(this.high>>>0)*d+(this.low>>>0):this.high*d+(this.low>>>0)},S.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}},S.getHighBits=function(){return this.high},S.getHighBitsUnsigned=function(){return this.high>>>0},S.getLowBits=function(){return this.low},S.getLowBitsUnsigned=function(){return this.low>>>0},S.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},S.isOdd=function(){return 1==(1&this.low)},S.isEven=function(){return 0==(1&this.low)},S.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)},S.eq=S.equals,S.notEquals=function(e){return!this.eq(e)},S.neq=S.notEquals,S.ne=S.notEquals,S.lessThan=function(e){return this.comp(e)<0},S.lt=S.lessThan,S.lessThanOrEqual=function(e){return this.comp(e)<=0},S.lte=S.lessThanOrEqual,S.le=S.lessThanOrEqual,S.greaterThan=function(e){return this.comp(e)>0},S.gt=S.greaterThan,S.greaterThanOrEqual=function(e){return this.comp(e)>=0},S.gte=S.greaterThanOrEqual,S.ge=S.greaterThanOrEqual,S.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},S.comp=S.compare,S.negate=function(){return!this.unsigned&&this.eq(N)?N:this.not().add(T)},S.neg=S.negate,S.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,d=0,_=0;return d+=(_+=a+(65535&e.low))>>>16,l+=(d+=n+c)>>>16,u+=(l+=r+s)>>>16,u+=t+o,p((d&=65535)<<16|(_&=65535),(u&=65535)<<16|(l&=65535),this.unsigned)},S.subtract=function(e){return i(e)||(e=h(e)),this.add(e.neg())},S.sub=S.subtract,S.multiply=function(e){if(this.isZero())return E;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 E;if(this.eq(N))return e.isOdd()?N:E;if(e.eq(N))return this.isOdd()?N:E;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,d=65535&e.low,_=0,y=0,f=0,T=0;return f+=(T+=o*d)>>>16,y+=(f+=a*d)>>>16,f&=65535,y+=(f+=o*l)>>>16,_+=(y+=n*d)>>>16,y&=65535,_+=(y+=a*l)>>>16,y&=65535,_+=(y+=o*u)>>>16,_+=t*d+n*l+a*u+o*s,p((f&=65535)<<16|(T&=65535),(_&=65535)<<16|(y&=65535),this.unsigned)},S.mul=S.multiply,S.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?f:E;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return f;if(e.gt(this.shru(1)))return g;a=f}else{if(this.eq(N))return e.eq(T)||e.eq(A)?N:e.eq(N)?T:(t=this.shr(1).div(e).shl(1)).eq(E)?e.isNegative()?T:A:(n=this.sub(e.mul(t)),a=t.add(n.div(e)));else if(e.eq(N))return this.unsigned?f:E;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=E}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),d=l.mul(e);d.isNegative()||d.gt(n);)d=(l=c(t-=s,this.unsigned)).mul(e);l.isZero()&&(l=T),a=a.add(l),n=n.sub(d)}return a},S.div=S.divide,S.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))},S.mod=S.modulo,S.rem=S.modulo,S.not=function(){return p(~this.low,~this.high,this.unsigned)},S.and=function(e){return i(e)||(e=h(e)),p(this.low&e.low,this.high&e.high,this.unsigned)},S.or=function(e){return i(e)||(e=h(e)),p(this.low|e.low,this.high|e.high,this.unsigned)},S.xor=function(e){return i(e)||(e=h(e)),p(this.low^e.low,this.high^e.high,this.unsigned)},S.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)},S.shr=S.shiftRight,S.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)},S.shru=S.shiftRightUnsigned,S.shr_u=S.shiftRightUnsigned,S.toSigned=function(){return this.unsigned?p(this.low,this.high,!1):this},S.toUnsigned=function(){return this.unsigned?this:p(this.low,this.high,!0)},S.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()},S.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]},S.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(14);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(7))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(6),i=r(0),a=r(5),o=r(1),s=r(2);function c(e,t){var r,n;return e.options.isWasm64?(r=e.precomputeExpression(t,a.Type.usize64),(_BinaryenExpressionGetId(r)!=o.ExpressionId.Const||_BinaryenExpressionGetType(r)!=o.NativeType.I64||0!=_BinaryenConstGetValueI64High(r)||(n=_BinaryenConstGetValueI64Low(r))<0)&&(e.error(i.DiagnosticCode.Operation_not_supported,t.range),n=-1)):(r=e.precomputeExpression(t,a.Type.usize32),(_BinaryenExpressionGetId(r)!=o.ExpressionId.Const||_BinaryenExpressionGetType(r)!=o.NativeType.I32||(n=_BinaryenConstGetValueI32(r))<0)&&(e.error(i.DiagnosticCode.Operation_not_supported,t.range),n=-1)),n}function p(e,t,r){var n=e.module,i=n.createUnreachable(),a=e.program.elements.get("abort"),o=e.program.types.get("string");if(a&&a.kind==s.ElementKind.FUNCTION_PROTOTYPE&&o){var c=a.resolve();c&&e.compileFunction(c)&&(assert(c.parameters&&4==c.parameters.length),i=n.createBlock(null,[e.makeCall(c,[null!=t?e.compileExpression(t,o):e.options.usizeType.toNativeZero(n),e.compileStaticString(r.range.source.normalizedPath),n.createI32(r.range.line),n.createI32(r.range.column)]),i]))}return i}t.compileGetConstant=function(e,t,r){switch(t.internalName){case"NaN":return e.currentType==a.Type.f32?e.module.createF32(NaN):(e.currentType=a.Type.f64,e.module.createF64(NaN));case"Infinity":return e.currentType==a.Type.f32?e.module.createF32(1/0):(e.currentType=a.Type.f64,e.module.createF64(1/0));case"HEAP_BASE":return e.currentType=e.options.usizeType,e.module.createGetGlobal("HEAP_BASE",e.currentType.toNativeType())}return e.error(i.DiagnosticCode.Operation_not_supported,r.range),e.module.createUnreachable()},t.compileCall=function(e,t,r,s,u,l){var h,d,_,y,m,E,f,T,g=e.module;switch(t.internalName){case"isNaN":if(e.currentType=a.Type.bool,1!=s.length)return r&&1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(e.currentType.kind){case 11:m=e.currentFunction.getAndFreeTempLocal(a.Type.f32),y=g.createBinary(o.BinaryOp.NeF32,g.createTeeLocal(m.index,h),g.createGetLocal(m.index,o.NativeType.F32));break;case 12:m=e.currentFunction.getAndFreeTempLocal(a.Type.f64),y=g.createBinary(o.BinaryOp.NeF64,g.createTeeLocal(m.index,h),g.createGetLocal(m.index,o.NativeType.F64));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break;default:y=g.createI32(0)}return e.currentType=a.Type.bool,y;case"isFinite":if(e.currentType=a.Type.bool,1!=s.length)return r&&1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(e.currentType.kind){case 11:m=e.currentFunction.getAndFreeTempLocal(a.Type.f32),y=g.createSelect(g.createBinary(o.BinaryOp.NeF32,g.createUnary(o.UnaryOp.AbsF32,g.createTeeLocal(m.index,h)),g.createF32(1/0)),g.createI32(0),g.createBinary(o.BinaryOp.EqF32,g.createGetLocal(m.index,o.NativeType.F32),g.createGetLocal(m.index,o.NativeType.F32)));break;case 12:m=e.currentFunction.getAndFreeTempLocal(a.Type.f64),y=g.createSelect(g.createBinary(o.BinaryOp.NeF64,g.createUnary(o.UnaryOp.AbsF64,g.createTeeLocal(m.index,h)),g.createF64(1/0)),g.createI32(0),g.createBinary(o.BinaryOp.EqF64,g.createGetLocal(m.index,o.NativeType.F64),g.createGetLocal(m.index,o.NativeType.F64)));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break;default:y=g.createI32(1)}return e.currentType=a.Type.bool,y;case"clz":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.i32,0);switch(e.currentType.kind){default:y=g.createUnary(o.UnaryOp.ClzI32,h);break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}case 4:y=g.createUnary(e.options.isWasm64?o.UnaryOp.ClzI64:o.UnaryOp.ClzI32,h);break;case 3:case 8:y=g.createUnary(o.UnaryOp.ClzI64,h);break;case 11:case 12:case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"ctz":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.i32,0);switch(e.currentType.kind){default:y=g.createUnary(o.UnaryOp.CtzI32,h);break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}case 4:y=g.createUnary(e.options.isWasm64?o.UnaryOp.CtzI64:o.UnaryOp.CtzI32,h);break;case 3:case 8:y=g.createUnary(o.UnaryOp.CtzI64,h);break;case 11:case 12:case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"popcnt":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.i32,0);switch(e.currentType.kind){default:y=g.createUnary(o.UnaryOp.PopcntI32,h);break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}case 4:y=g.createUnary(e.options.isWasm64?o.UnaryOp.PopcntI64:o.UnaryOp.PopcntI32,h);break;case 3:case 8:y=g.createUnary(o.UnaryOp.PopcntI64,h);break;case 11:case 12:case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"rotl":if(2!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"2",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.i32,0);switch(d=e.compileExpression(s[1],e.currentType),e.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=n.makeSmallIntegerWrap(g.createBinary(o.BinaryOp.RotlI32,h,d),e.currentType,g);case 2:case 7:y=g.createBinary(o.BinaryOp.RotlI32,h,d);break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}case 4:y=g.createBinary(e.options.isWasm64?o.BinaryOp.RotlI64:o.BinaryOp.RotlI32,h,d);break;case 3:case 8:y=g.createBinary(o.BinaryOp.RotlI64,h,d);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"rotr":if(2!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"2",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.i32,0);switch(d=e.compileExpression(s[1],e.currentType),e.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=n.makeSmallIntegerWrap(g.createBinary(o.BinaryOp.RotrI32,h,d),e.currentType,g);break;case 2:case 7:y=g.createBinary(o.BinaryOp.RotrI32,h,d);break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}case 4:y=g.createBinary(e.options.isWasm64?o.BinaryOp.RotrI64:o.BinaryOp.RotrI32,h,d);break;case 3:case 8:y=g.createBinary(o.BinaryOp.RotrI64,h,d);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"abs":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(e.currentType.kind){case 0:case 1:case 2:m=e.currentFunction.getAndFreeTempLocal(a.Type.i32),y=g.createSelect(g.createTeeLocal(m.index,h),g.createBinary(o.BinaryOp.SubI32,g.createI32(0),g.createGetLocal(m.index,o.NativeType.I32)),g.createBinary(o.BinaryOp.GtI32,g.createGetLocal(m.index,o.NativeType.I32),g.createI32(0)));break;case 4:m=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),y=g.createSelect(g.createTeeLocal(m.index,h),g.createBinary(e.options.isWasm64?o.BinaryOp.SubI64:o.BinaryOp.SubI32,e.options.usizeType.toNativeZero(g),g.createGetLocal(m.index,e.options.nativeSizeType)),g.createBinary(e.options.isWasm64?o.BinaryOp.GtI64:o.BinaryOp.GtI32,g.createGetLocal(m.index,e.options.nativeSizeType),e.options.usizeType.toNativeZero(g)));break;case 3:m=e.currentFunction.getAndFreeTempLocal(a.Type.i64),y=g.createSelect(g.createTeeLocal(m.index,h),g.createBinary(o.BinaryOp.SubI64,g.createI64(0,0),g.createGetLocal(m.index,o.NativeType.I64)),g.createBinary(o.BinaryOp.GtI64,g.createGetLocal(m.index,o.NativeType.I64),g.createI64(0,0)));break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}case 5:case 6:case 7:case 8:case 10:y=h;break;case 11:y=g.createUnary(o.UnaryOp.AbsF32,h);break;case 12:y=g.createUnary(o.UnaryOp.AbsF64,h);break;case 13:y=g.createUnreachable();break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"max":if(2!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"2",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(d=e.compileExpression(s[1],e.currentType),e.currentType.kind){case 0:case 1:case 2:m=e.currentFunction.getTempLocal(a.Type.i32),E=e.currentFunction.getAndFreeTempLocal(a.Type.i32),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(o.BinaryOp.GtI32,g.createGetLocal(m.index,o.NativeType.I32),g.createGetLocal(E.index,o.NativeType.I32)));break;case 5:case 6:case 7:case 10:m=e.currentFunction.getTempLocal(a.Type.i32),E=e.currentFunction.getAndFreeTempLocal(a.Type.i32),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(o.BinaryOp.GtU32,g.createGetLocal(m.index,o.NativeType.I32),g.createGetLocal(E.index,o.NativeType.I32)));break;case 3:m=e.currentFunction.getTempLocal(a.Type.i64),E=e.currentFunction.getAndFreeTempLocal(a.Type.i64),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(o.BinaryOp.GtI64,g.createGetLocal(m.index,o.NativeType.I64),g.createGetLocal(E.index,o.NativeType.I64)));break;case 8:m=e.currentFunction.getTempLocal(a.Type.i64),E=e.currentFunction.getAndFreeTempLocal(a.Type.i64),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(o.BinaryOp.GtU64,g.createGetLocal(m.index,o.NativeType.I64),g.createGetLocal(E.index,o.NativeType.I64)));break;case 4:m=e.currentFunction.getTempLocal(e.options.usizeType),E=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(e.options.isWasm64?o.BinaryOp.GtI64:o.BinaryOp.GtI32,g.createGetLocal(m.index,e.options.nativeSizeType),g.createGetLocal(E.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}m=e.currentFunction.getTempLocal(e.options.usizeType),E=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(e.options.isWasm64?o.BinaryOp.GtU64:o.BinaryOp.GtU32,g.createGetLocal(m.index,e.options.nativeSizeType),g.createGetLocal(E.index,e.options.nativeSizeType)));break;case 11:y=g.createBinary(o.BinaryOp.MaxF32,h,d);break;case 12:y=g.createBinary(o.BinaryOp.MaxF64,h,d);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"min":if(2!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"2",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(d=e.compileExpression(s[1],e.currentType),e.currentType.kind){case 0:case 1:case 2:m=e.currentFunction.getTempLocal(a.Type.i32),E=e.currentFunction.getAndFreeTempLocal(a.Type.i32),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(o.BinaryOp.LtI32,g.createGetLocal(m.index,o.NativeType.I32),g.createGetLocal(E.index,o.NativeType.I32)));break;case 5:case 6:case 7:case 10:m=e.currentFunction.getTempLocal(a.Type.i32),E=e.currentFunction.getAndFreeTempLocal(a.Type.i32),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(o.BinaryOp.LtU32,g.createGetLocal(m.index,o.NativeType.I32),g.createGetLocal(E.index,o.NativeType.I32)));break;case 3:m=e.currentFunction.getTempLocal(a.Type.i64),E=e.currentFunction.getAndFreeTempLocal(a.Type.i64),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(o.BinaryOp.LtI64,g.createGetLocal(m.index,o.NativeType.I64),g.createGetLocal(E.index,o.NativeType.I64)));break;case 8:m=e.currentFunction.getTempLocal(a.Type.i64),E=e.currentFunction.getAndFreeTempLocal(a.Type.i64),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(o.BinaryOp.LtU64,g.createGetLocal(m.index,o.NativeType.I64),g.createGetLocal(E.index,o.NativeType.I64)));break;case 4:m=e.currentFunction.getTempLocal(e.options.usizeType),E=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(e.options.isWasm64?o.BinaryOp.LtI64:o.BinaryOp.LtI32,g.createGetLocal(m.index,e.options.nativeSizeType),g.createGetLocal(E.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}m=e.currentFunction.getTempLocal(e.options.usizeType),E=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(e.options.isWasm64?o.BinaryOp.LtU64:o.BinaryOp.LtU32,g.createGetLocal(m.index,e.options.nativeSizeType),g.createGetLocal(E.index,e.options.nativeSizeType)));break;case 11:y=g.createBinary(o.BinaryOp.MinF32,h,d);break;case 12:y=g.createBinary(o.BinaryOp.MinF64,h,d);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"ceil":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(e.currentType.kind){case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}default:y=h;break;case 11:y=g.createUnary(o.UnaryOp.CeilF32,h);break;case 12:y=g.createUnary(o.UnaryOp.CeilF64,h);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"floor":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(e.currentType.kind){case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}default:y=h;break;case 11:y=g.createUnary(o.UnaryOp.FloorF32,h);break;case 12:y=g.createUnary(o.UnaryOp.FloorF64,h);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"copysign":if(2!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"2",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(d=e.compileExpression(s[1],e.currentType),e.currentType.kind){case 11:y=g.createBinary(o.BinaryOp.CopysignF32,h,d);break;case 12:y=g.createBinary(o.BinaryOp.CopysignF64,h,d);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"nearest":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(e.currentType.kind){case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}default:y=h;break;case 11:y=g.createUnary(o.UnaryOp.NearestF32,h);break;case 12:y=g.createUnary(o.UnaryOp.NearestF64,h);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"reinterpret":if(1!=s.length)return r&&1==r.length||(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0")),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.createUnreachable();if(!r||1!=r.length)return r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0"),g.createUnreachable();switch(r[0].kind){case 2:case 7:h=e.compileExpression(s[0],a.Type.f32),y=g.createUnary(o.UnaryOp.ReinterpretF32,h);break;case 3:case 8:h=e.compileExpression(s[0],a.Type.f64),y=g.createUnary(o.UnaryOp.ReinterpretF64,h);break;case 9:if(r[0].isReference)return e.error(i.DiagnosticCode.Operation_not_supported,l.range),e.currentType=r[0],g.createUnreachable();case 4:h=e.compileExpression(s[0],e.options.isWasm64?a.Type.f64:a.Type.f32),y=g.createUnary(e.options.isWasm64?o.UnaryOp.ReinterpretF64:o.UnaryOp.ReinterpretF32,h);break;case 11:h=e.compileExpression(s[0],a.Type.u32),y=g.createUnary(o.UnaryOp.ReinterpretI32,h);break;case 12:h=e.compileExpression(s[0],a.Type.u64),y=g.createUnary(o.UnaryOp.ReinterpretI64,h);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return e.currentType=r[0],y;case"sqrt":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(e.currentType.kind){case 11:y=g.createUnary(o.UnaryOp.SqrtF32,h);break;case 12:y=g.createUnary(o.UnaryOp.SqrtF64,h);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"trunc":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.createUnreachable();if(r&&r.length){if(e.currentType=r[0],1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(e.currentType.kind){case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}default:y=h;break;case 11:y=g.createUnary(o.UnaryOp.TruncF32,h);break;case 12:y=g.createUnary(o.UnaryOp.TruncF64,h);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"load":return s.length<1||s.length>2?(r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0"),s.length<1?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,l.range,"1",s.length.toString(10)):e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"2",s.length.toString(10)),g.createUnreachable()):r&&1==r.length?(h=e.compileExpression(s[0],e.options.usizeType),(T=2==s.length?c(e,s[1]):0)<0?g.createUnreachable():(e.currentType=r[0],g.createLoad(r[0].byteSize,r[0].is(5),h,r[0].is(4)&&u.is(4)&&u.size>r[0].size?(e.currentType=u).toNativeType():(e.currentType=r[0]).toNativeType(),T))):(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0"),g.createUnreachable());case"store":return e.currentType=a.Type.void,s.length<2||s.length>3?(r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0"),s.length<2?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,l.range,"2",s.length.toString(10)):e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"3",s.length.toString(10)),g.createUnreachable()):r&&1==r.length?(h=e.compileExpression(s[0],e.options.usizeType),d=e.compileExpression(s[1],r[0],r[0].is(4)?0:1),e.currentType.is(4)&&r[0].is(4)&&r[0].size>e.currentType.size?(d=e.convertExpression(d,e.currentType,r[0],1,s[1]),f=r[0]):f=e.currentType,(T=3==s.length?c(e,s[2]):0)<0?g.createUnreachable():(e.currentType=a.Type.void,g.createStore(r[0].byteSize,h,d,f.toNativeType(),T))):(e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0"),g.createUnreachable());case"sizeof":return e.currentType=e.options.usizeType,0!=s.length?(r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0"),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"0",s.length.toString(10)),g.createUnreachable()):r?1!=r.length?(e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable()):y=e.options.isWasm64?g.createI64(r[0].byteSize,0):g.createI32(r[0].byteSize):(e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1","0"),g.createUnreachable());case"select":if(3!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"3",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.i32,0);switch(d=e.compileExpression(s[1],f=e.currentType),_=e.compileExpression(s[2],a.Type.bool),e.currentType=f,e.currentType.kind){default:y=g.createSelect(h,d,_);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"unreachable":return 0!=s.length&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"0",s.length.toString(10)),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),g.createUnreachable();case"current_memory":return e.currentType=a.Type.i32,0!=s.length&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"0",s.length.toString(10)),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),g.createHost(o.HostOp.CurrentMemory);case"grow_memory":return e.currentType=a.Type.i32,1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"0",s.length.toString(10)),h=g.createUnreachable()):h=e.compileExpression(s[0],a.Type.i32),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),g.createHost(o.HostOp.GrowMemory,null,[h]);case"move_memory":if(r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),3!=s.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"3",s.length.toString(10)),e.currentType=a.Type.void,g.createUnreachable();throw h=e.compileExpression(s[0],e.options.usizeType),d=e.compileExpression(s[1],e.options.usizeType),_=e.compileExpression(s[2],e.options.usizeType),e.currentType=a.Type.void,new Error("not implemented");case"set_memory":if(r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),3!=s.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"3",s.length.toString(10)),e.currentType=a.Type.void,g.createUnreachable();throw h=e.compileExpression(s[0],e.options.usizeType),d=e.compileExpression(s[1],a.Type.u32),_=e.compileExpression(s[2],e.options.usizeType),e.currentType=a.Type.void,new Error("not implemented");case"changetype":return r&&1==r.length?9!=r[0].kind?(e.error(i.DiagnosticCode.Operation_not_supported,l.range),e.currentType=r[0],g.createUnreachable()):1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=r[0],g.createUnreachable()):(h=e.compileExpression(s[0],e.options.usizeType,0),e.currentType=r[0],9!=e.currentType.kind?(e.error(i.DiagnosticCode.Operation_not_supported,l.range),g.createUnreachable()):h):(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0"),g.createUnreachable());case"assert":if(s.length<1||s.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,l.range,"1",r.length.toString(10))),s.length<1?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,l.range,"1",s.length.toString(10)):s.length>2&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"2",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpressionRetainType(s[0],a.Type.i32);if(f=e.currentType,e.currentType=f.nonNullableType,e.options.noAssert)return u==a.Type.void?(e.currentType=a.Type.void,g.createNop()):h;var A=p(e,2==s.length?s[1]:null,l);if(e.currentType=f.nonNullableType,u==a.Type.void){switch(e.currentType.kind){default:y=g.createIf(g.createUnary(o.UnaryOp.EqzI32,h),A);break;case 3:case 8:y=g.createIf(g.createUnary(o.UnaryOp.EqzI64,h),A);break;case 4:case 9:y=g.createIf(g.createUnary(e.options.isWasm64?o.UnaryOp.EqzI64:o.UnaryOp.EqzI32,h),A);break;case 11:y=g.createIf(g.createBinary(o.BinaryOp.EqF32,h,g.createF32(0)),A);break;case 12:y=g.createIf(g.createBinary(o.BinaryOp.EqF64,h,g.createF64(0)),A);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=A}e.currentType=a.Type.void}else switch(e.currentType.kind){default:m=e.currentFunction.getAndFreeTempLocal(a.Type.i32),y=g.createIf(g.createUnary(o.UnaryOp.EqzI32,g.createTeeLocal(m.index,h)),A,g.createGetLocal(m.index,o.NativeType.I32));break;case 3:case 8:m=e.currentFunction.getAndFreeTempLocal(a.Type.i64),y=g.createIf(g.createUnary(o.UnaryOp.EqzI64,g.createTeeLocal(m.index,h)),A,g.createGetLocal(m.index,o.NativeType.I64));break;case 4:case 9:m=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),y=g.createIf(g.createUnary(e.options.isWasm64?o.UnaryOp.EqzI64:o.UnaryOp.EqzI32,g.createTeeLocal(m.index,h)),A,g.createGetLocal(m.index,e.options.nativeSizeType));break;case 11:m=e.currentFunction.getAndFreeTempLocal(a.Type.f32),y=g.createIf(g.createBinary(o.BinaryOp.EqF32,g.createTeeLocal(m.index,h),g.createF32(0)),A,g.createGetLocal(m.index,o.NativeType.F32));break;case 12:m=e.currentFunction.getAndFreeTempLocal(a.Type.f64),y=g.createIf(g.createBinary(o.BinaryOp.EqF64,g.createTeeLocal(m.index,h),g.createF64(0)),A,g.createGetLocal(m.index,o.NativeType.F64));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=A}return y;case"i8":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.i8,g.createUnreachable()):e.compileExpression(s[0],a.Type.i8,2);case"i16":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.i16,g.createUnreachable()):e.compileExpression(s[0],a.Type.i16,2);case"i32":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.i32,g.createUnreachable()):e.compileExpression(s[0],a.Type.i32,2);case"i64":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.i64,g.createUnreachable()):e.compileExpression(s[0],a.Type.i64,2);case"isize":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=e.options.isWasm64?a.Type.isize64:a.Type.isize32,g.createUnreachable()):e.compileExpression(s[0],e.options.isWasm64?a.Type.isize64:a.Type.isize32,2);case"u8":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.u8,g.createUnreachable()):e.compileExpression(s[0],a.Type.u8,2);case"u16":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.u16,g.createUnreachable()):e.compileExpression(s[0],a.Type.u16,2);case"u32":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.u32,g.createUnreachable()):e.compileExpression(s[0],a.Type.u32,2);case"u64":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.u64,g.createUnreachable()):e.compileExpression(s[0],a.Type.u64,2);case"usize":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=e.options.usizeType,g.createUnreachable()):e.compileExpression(s[0],e.options.usizeType,2);case"bool":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.bool,g.createUnreachable()):e.compileExpression(s[0],a.Type.bool,2);case"f32":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.f32,g.createUnreachable()):e.compileExpression(s[0],a.Type.f32,2);case"f64":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.f64,g.createUnreachable()):e.compileExpression(s[0],a.Type.f64,2)}return e.error(i.DiagnosticCode.Operation_not_supported,l.range),g.createUnreachable()},t.compileAllocate=function(e,t,r){var n=t.program,a=n.elements.get(e.options.allocateImpl);if(a)if(a.kind==s.ElementKind.FUNCTION_PROTOTYPE){var o=a.resolve();if(o)if(!o.is(s.ElementFlags.GENERIC)&&o.returnType==e.options.usizeType&&o.parameters&&1==o.parameters.length&&o.parameters[0].type==e.options.usizeType){if(e.compileFunction(o))return e.makeCall(o,[e.options.isWasm64?e.module.createI64(t.currentMemoryOffset):e.module.createI32(t.currentMemoryOffset)])}else n.error(i.DiagnosticCode.Implementation_0_must_match_the_signature_1,r.range,e.options.allocateImpl,"(size: usize): usize")}else n.error(i.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,r.range,a.internalName);else n.error(i.DiagnosticCode.Cannot_find_name_0,r.range,e.options.allocateImpl);return e.module.createUnreachable()},t.compileAbort=p},function(t,r){t.exports=e},function(e,t,r){(function(e){const t=e.Binaryen||r(17);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(1).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(7))},function(e,t,r){(function(e){var t="undefined"!=typeof window&&window||void 0!==e&&e||self;function r(){Error.captureStackTrace?Error.captureStackTrace(this,r):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}function n(e){this.message=e||"assertion failed",Error.captureStackTrace?Error.captureStackTrace(this,n):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}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_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_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},r.prototype=Object.create(Error.prototype),r.prototype.name="UnreachableError",r.prototype.message="unreachable",t.unreachable=function(){throw new r},n.prototype=Object.create(Error.prototype),n.prototype.name="AssertionError",t.assert=function(e,t){if(e)return e;throw new n(t)},t.changetype=function(e){return e},t.parseI32=function(e,t){return 0|parseInt(e,void 0)},String.fromCharCodes=function(e){return String.fromCharCode.apply(String,e)},String.fromCodePoints=function(e){return String.fromCodePoint.apply(String,e)}}).call(this,r(7))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(19),r(18),r(15)},function(e,t,r){r(20),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=21)}([function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n,i=r(10),a=r(9),o=r(10);function s(e){switch(e){case n.INFO:return"INFO";case n.WARNING:return"WARNING";case n.ERROR:return"ERROR";default:return""}}t.DiagnosticCode=o.DiagnosticCode,t.diagnosticCodeToString=o.diagnosticCodeToString,function(e){e[e.INFO=0]="INFO",e[e.WARNING=1]="WARNING",e[e.ERROR=2]="ERROR"}(n=t.DiagnosticCategory||(t.DiagnosticCategory={})),t.diagnosticCategoryToString=s;var c="",p="",u="",l="";function h(e){switch(e){case n.INFO:return c;case n.WARNING:return p;case n.ERROR:return u;default:return""}}t.diagnosticCategoryToColor=h;var d=function(){function e(e,t,r){this.range=null,this.code=e,this.category=t,this.message=r}return e.create=function(t,r,n,a,o){void 0===n&&(n=null),void 0===a&&(a=null),void 0===o&&(o=null);var s=i.diagnosticCodeToString(t);return null!=n&&(s=s.replace("{0}",n)),null!=a&&(s=s.replace("{1}",a)),null!=o&&(s=s.replace("{2}",o)),new e(t,r,s)},e.createInfo=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.INFO,r,i)},e.createWarning=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.WARNING,r,i)},e.createError=function(t,r,i){return void 0===r&&(r=null),void 0===i&&(i=null),e.create(t,n.ERROR,r,i)},e.prototype.withRange=function(e){return this.range=e,this},e.prototype.toString=function(){return this.range?s(this.category)+" "+this.code.toString(10)+': "'+this.message+'" in '+this.range.source.normalizedPath+" @ "+this.range.start.toString(10)+","+this.range.end.toString(10):s(this.category)+" "+this.code.toString(10)+": "+this.message},e}();function _(e,t){void 0===t&&(t=!1);for(var r=e.source.text,n=r.length,i=e.start,o=e.end;i>0&&!a.isLineBreak(r.charCodeAt(i-1));)i--;for(;o=0;--a)free_memory(i[a])}},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.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.length,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),d=new Array(s),_=0;_=0;--_)free_memory(c[_]);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 y;return o.output=d(n,a),o.sourceMap=_(i),o}finally{r&&free_memory(r),n&&free_memory(n),i&&free_memory(i)}},e.prototype.toText=function(){throw new Error("not implemented")},e.prototype.toAsmjs=function(){throw new Error("not implemented")},e.prototype.dispose=function(){this.ref&&(_BinaryenModuleDispose(this.ref),free_memory(this.out))},e.prototype.createRelooper=function(){return c.create(this)},e.prototype.cloneExpression=function(e,t,r){if(void 0===t&&(t=!1),void 0===r&&(r=i32.MAX_VALUE),r<0)return 0;var a,o;switch(r-=1,_BinaryenExpressionGetId(e)){case i.Const:switch(_BinaryenExpressionGetType(e)){case n.I32:return this.createI32(_BinaryenConstGetValueI32(e));case n.I64:return this.createI64(_BinaryenConstGetValueI64Low(e),_BinaryenConstGetValueI64High(e));case n.F32:return this.createF32(_BinaryenConstGetValueF32(e));case n.F64:return this.createF64(_BinaryenConstGetValueF64(e));default:throw new Error("concrete type expected")}case i.GetLocal:return _BinaryenGetLocal(this.ref,_BinaryenGetLocalGetIndex(e),_BinaryenExpressionGetType(e));case i.GetGlobal:var s=_BinaryenGetGlobalGetName(e);if(!s)break;return _BinaryenGetGlobal(this.ref,s,_BinaryenExpressionGetType(e));case i.Load:if(!(a=this.cloneExpression(_BinaryenLoadGetPtr(e),t,r)))break;return _BinaryenLoadIsAtomic(e)?_BinaryenAtomicLoad(this.ref,_BinaryenLoadGetBytes(e),_BinaryenLoadGetOffset(e),_BinaryenExpressionGetType(e),a):_BinaryenLoad(this.ref,_BinaryenLoadGetBytes(e),_BinaryenLoadIsSigned(e)?1:0,_BinaryenLoadGetOffset(e),_BinaryenLoadGetAlign(e),_BinaryenExpressionGetType(e),a);case i.Unary:if(!(a=this.cloneExpression(_BinaryenUnaryGetValue(e),t,r)))break;return _BinaryenUnary(this.ref,_BinaryenUnaryGetOp(e),a);case i.Binary:if(!(a=this.cloneExpression(_BinaryenBinaryGetLeft(e),t,r)))break;if(!(o=this.cloneExpression(_BinaryenBinaryGetRight(e),t,r)))break;return _BinaryenBinary(this.ref,_BinaryenBinaryGetOp(e),a,o)}return 0},e.prototype.addDebugInfoFile=function(e){var t=l(e);try{return _BinaryenModuleAddDebugInfoFileName(this.ref,t)}finally{free_memory(t)}},e.prototype.getDebugInfoFile=function(e){return _(_BinaryenModuleGetDebugInfoFileName(this.ref,e))},e.prototype.setDebugLocation=function(e,t,r,n,i){_BinaryenFunctionSetDebugLocation(e,t,r,n,i)},e.MAX_MEMORY_WASM32=65535,e}();t.Module=s;var c=function(){function e(){}return e.create=function(t){var r=new e;return r.module=t,r.ref=_RelooperCreate(),r},e.createStub=function(t){var r=new e;return r.module=t,r.ref=0,r},e.prototype.addBlock=function(e){return _RelooperAddBlock(this.ref,e)},e.prototype.addBranch=function(e,t,r,n){void 0===r&&(r=0),void 0===n&&(n=0),_RelooperAddBranch(e,t,r,n)},e.prototype.addBlockWithSwitch=function(e,t){return _RelooperAddBlockWithSwitch(this.ref,e,t)},e.prototype.addBranchForSwitch=function(e,t,r,n){void 0===n&&(n=0);var i=u(r);try{_RelooperAddBranchForSwitch(e,t,i,r.length,n)}finally{free_memory(i)}},e.prototype.renderAndDispose=function(e,t){return _RelooperRenderAndDispose(this.ref,e,t,this.module.ref)},e}();function p(e){if(!e)return 0;for(var t=allocate_memory(e.length),r=t,n=0,i=e.length;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 d(e,t){for(var r=new Uint8Array(t),n=0;n=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(5),p=r(4),u=r(1);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(){}}(),d=new Map,_=function(e){function r(t){void 0===t&&(t=null);var r=e.call(this,t)||this;return r.diagnosticsOffset=0,r.elements=new Map,r.types=d,r.typeAliases=new Map,r.exports=new Map,r.sources=[],r}return i(r,e),r.prototype.initialize=function(e){this.options=e,this.types=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,i=new Map,u=new Array,l=new Array,h=0,d=this.sources.length;h",a+="<"+y+">")}else if(r){var E=r.get(a);if(E)return E}if((u=this.types.get(o))||(u=this.types.get(a)))return u;var f=this.typeAliases.get(a);return f&&(u=this.resolveType(f,null,n))?u:(n&&this.error(s.DiagnosticCode.Cannot_find_name_0,e.name.range,a),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");var C,b,x,k=null;if(this.classPrototype&&!(k=this.classPrototype.resolve(this.classTypeArguments,t)))return null;if(this.is(E.SETTER)||this.is(E.CONSTRUCTOR))C=c.Type.void;else{T=assert(p.returnType);var L=this.program.resolveType(T,t,!0);if(!L)return null;C=L}return(n=new O(this,N,e,g,C,k)).contextualTypeArguments=t,this.instances.set(r,n),n},t.prototype.resolvePartial=function(e){if(!this.classPrototype)throw new Error("partially resolved instance method must reference its class prototype");if(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"),(n=new B(this,A,e,T)).contextualTypeArguments=t,this.instances.set(r,n);var I,v,N,S,C,b,O=0;if(T&&(O=T.currentMemoryOffset,T.members)){n.members||(n.members=new Map);try{for(var x=a(T.members.values()),R=x.next();!R.done;R=x.next()){var U=R.value;n.members.set(U.simpleName,U)}}catch(e){N={error:e}}finally{try{R&&!R.done&&(S=x.return)&&S.call(x)}finally{if(N)throw N.error}}}if(this.constructorPrototype){var D=this.constructorPrototype.resolvePartial(e);D&&(n.constructorInstance=D.resolve())}if(this.instanceMembers)try{for(var F=a(this.instanceMembers.values()),w=F.next();!w.done;w=F.next()){var P=w.value;switch(P.kind){case m.FIELD_PROTOTYPE:n.members||(n.members=new Map);var M=P.declaration;if(!M.type)throw new Error("type expected");var G=this.program.resolveType(M.type,n.contextualTypeArguments);if(G){var K=new k(P,P.internalName,G);switch(G.byteSize){case 1:break;case 2:1&O&&++O;break;case 4:3&O&&(O=1+(3|O));break;case 8:7&O&&(O=1+(7|O));break;default:assert(!1)}K.memoryOffset=O,O+=G.byteSize,n.members.set(P.simpleName,K)}break;case m.FUNCTION_PROTOTYPE:n.members||(n.members=new Map);var z=P.resolvePartial(e);z&&n.members.set(P.simpleName,z);break;case m.PROPERTY:n.members||(n.members=new Map),assert(P.getterPrototype);var H=new L(this.program,P.simpleName,P.internalName,this);H.getterPrototype=P.getterPrototype.resolvePartial(e),P.setterPrototype&&(H.setterPrototype=P.setterPrototype.resolvePartial(e)),n.members.set(P.simpleName,H);break;default:throw new Error("instance member expected")}}}catch(e){C={error:e}}finally{try{w&&!w.done&&(b=F.return)&&b.call(F)}finally{if(C)throw C.error}}return n.currentMemoryOffset=O,n},t.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)},t.prototype.toString=function(){return this.simpleName},t}(T);t.ClassPrototype=R;var B=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=m.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&&(E=c.return)&&E.call(c)}finally{if(y)throw y.error}}}var d,_,y,E,f=s.prototype.declaration;if(f){var T=f.typeParameters;if(n){if((_=n.length)!=T.length)throw new Error("type argument count mismatch");if(_)for(s.contextualTypeArguments||(s.contextualTypeArguments=new Map),d=0;d<_;++d)s.contextualTypeArguments.set(T[d].name.text,n[d])}else if(T.length)throw new Error("type argument count mismatch")}return s}return i(t,e),t.prototype.isAssignableTo=function(e){var t=this;do{if(t==e)return!0}while(t=t.base);return!1},t.prototype.toString=function(){return this.prototype.simpleName},t}(T);t.Class=B;var U=function(e){function t(t,r,n,i){var a=e.call(this,t,r,n,i)||this;return a.kind=m.INTERFACE_PROTOTYPE,a}return i(t,e),t}(R);t.InterfacePrototype=U;var D=function(e){function t(t,r,n,i){void 0===n&&(n=[]),void 0===i&&(i=null);var a=e.call(this,t,r,n,i)||this;return a.kind=m.INTERFACE,a}return i(t,e),t}(B);t.Interface=D,function(e){e[e.NONE=0]="NONE",e[e.RETURNS=1]="RETURNS",e[e.POSSIBLY_THROWS=2]="POSSIBLY_THROWS",e[e.POSSIBLY_BREAKS=4]="POSSIBLY_BREAKS",e[e.POSSIBLY_CONTINUES=8]="POSSIBLY_CONTINUES"}(t.FlowFlags||(t.FlowFlags={}));var F=function(){function e(){this.scopedLocals=null}return e.create=function(t){var r=new e;return r.parent=null,r.flags=0,r.currentFunction=t,r.continueLabel=null,r.breakLabel=null,r},e.prototype.is=function(e){return(this.flags&e)==e},e.prototype.set=function(e){this.flags|=e},e.prototype.enterBranchOrScope=function(){var t=new e;return t.parent=this,t.flags=this.flags,t.currentFunction=this.currentFunction,t.continueLabel=this.continueLabel,t.breakLabel=this.breakLabel,t},e.prototype.leaveBranchOrScope=function(){var e,t,r=assert(this.parent);if(this.scopedLocals){try{for(var n=a(this.scopedLocals.values()),i=n.next();!i.done;i=n.next()){var o=i.value;this.currentFunction.freeTempLocal(o)}}catch(t){e={error:t}}finally{try{i&&!i.done&&(t=n.return)&&t.call(n)}finally{if(e)throw e.error}}this.scopedLocals=null}return this.is(2)&&r.set(2),this.is(4)&&r.breakLabel==this.breakLabel&&r.set(4),this.is(8)&&r.continueLabel==this.continueLabel&&r.set(8),r},e.prototype.addScopedLocal=function(e,t,r){var n=this.currentFunction.getTempLocal(t);if(this.scopedLocals){if(this.scopedLocals.has(e))return void this.currentFunction.program.error(s.DiagnosticCode.Duplicate_identifier_0,r.range)}else this.scopedLocals=new Map;this.scopedLocals.set(e,n)},e.prototype.getScopedLocal=function(e){var t,r=this;do{if(r.scopedLocals&&(t=r.scopedLocals.get(e)))return t}while(r=r.parent);return this.currentFunction.locals.get(e)},e.prototype.finalize=function(){return assert(null==this.parent,"must be the topmost parent flow"),this.continueLabel=null,this.breakLabel=null,this.is(1)},e}();t.Flow=F},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,o=r(0),s=r(9);!function(e){e[e.ABSTRACT=0]="ABSTRACT",e[e.AS=1]="AS",e[e.ASYNC=2]="ASYNC",e[e.AWAIT=3]="AWAIT",e[e.BREAK=4]="BREAK",e[e.CASE=5]="CASE",e[e.CATCH=6]="CATCH",e[e.CLASS=7]="CLASS",e[e.CONST=8]="CONST",e[e.CONTINUE=9]="CONTINUE",e[e.CONSTRUCTOR=10]="CONSTRUCTOR",e[e.DEBUGGER=11]="DEBUGGER",e[e.DECLARE=12]="DECLARE",e[e.DEFAULT=13]="DEFAULT",e[e.DELETE=14]="DELETE",e[e.DO=15]="DO",e[e.ELSE=16]="ELSE",e[e.ENUM=17]="ENUM",e[e.EXPORT=18]="EXPORT",e[e.EXTENDS=19]="EXTENDS",e[e.FALSE=20]="FALSE",e[e.FINALLY=21]="FINALLY",e[e.FOR=22]="FOR",e[e.FROM=23]="FROM",e[e.FUNCTION=24]="FUNCTION",e[e.GET=25]="GET",e[e.IF=26]="IF",e[e.IMPLEMENTS=27]="IMPLEMENTS",e[e.IMPORT=28]="IMPORT",e[e.IN=29]="IN",e[e.INSTANCEOF=30]="INSTANCEOF",e[e.INTERFACE=31]="INTERFACE",e[e.IS=32]="IS",e[e.KEYOF=33]="KEYOF",e[e.LET=34]="LET",e[e.MODULE=35]="MODULE",e[e.NAMESPACE=36]="NAMESPACE",e[e.NEW=37]="NEW",e[e.NULL=38]="NULL",e[e.OF=39]="OF",e[e.PACKAGE=40]="PACKAGE",e[e.PRIVATE=41]="PRIVATE",e[e.PROTECTED=42]="PROTECTED",e[e.PUBLIC=43]="PUBLIC",e[e.READONLY=44]="READONLY",e[e.RETURN=45]="RETURN",e[e.SET=46]="SET",e[e.STATIC=47]="STATIC",e[e.SUPER=48]="SUPER",e[e.SWITCH=49]="SWITCH",e[e.THIS=50]="THIS",e[e.THROW=51]="THROW",e[e.TRUE=52]="TRUE",e[e.TRY=53]="TRY",e[e.TYPE=54]="TYPE",e[e.TYPEOF=55]="TYPEOF",e[e.VAR=56]="VAR",e[e.VOID=57]="VOID",e[e.WHILE=58]="WHILE",e[e.WITH=59]="WITH",e[e.YIELD=60]="YIELD",e[e.OPENBRACE=61]="OPENBRACE",e[e.CLOSEBRACE=62]="CLOSEBRACE",e[e.OPENPAREN=63]="OPENPAREN",e[e.CLOSEPAREN=64]="CLOSEPAREN",e[e.OPENBRACKET=65]="OPENBRACKET",e[e.CLOSEBRACKET=66]="CLOSEBRACKET",e[e.DOT=67]="DOT",e[e.DOT_DOT_DOT=68]="DOT_DOT_DOT",e[e.SEMICOLON=69]="SEMICOLON",e[e.COMMA=70]="COMMA",e[e.LESSTHAN=71]="LESSTHAN",e[e.GREATERTHAN=72]="GREATERTHAN",e[e.LESSTHAN_EQUALS=73]="LESSTHAN_EQUALS",e[e.GREATERTHAN_EQUALS=74]="GREATERTHAN_EQUALS",e[e.EQUALS_EQUALS=75]="EQUALS_EQUALS",e[e.EXCLAMATION_EQUALS=76]="EXCLAMATION_EQUALS",e[e.EQUALS_EQUALS_EQUALS=77]="EQUALS_EQUALS_EQUALS",e[e.EXCLAMATION_EQUALS_EQUALS=78]="EXCLAMATION_EQUALS_EQUALS",e[e.EQUALS_GREATERTHAN=79]="EQUALS_GREATERTHAN",e[e.PLUS=80]="PLUS",e[e.MINUS=81]="MINUS",e[e.ASTERISK_ASTERISK=82]="ASTERISK_ASTERISK",e[e.ASTERISK=83]="ASTERISK",e[e.SLASH=84]="SLASH",e[e.PERCENT=85]="PERCENT",e[e.PLUS_PLUS=86]="PLUS_PLUS",e[e.MINUS_MINUS=87]="MINUS_MINUS",e[e.LESSTHAN_LESSTHAN=88]="LESSTHAN_LESSTHAN",e[e.GREATERTHAN_GREATERTHAN=89]="GREATERTHAN_GREATERTHAN",e[e.GREATERTHAN_GREATERTHAN_GREATERTHAN=90]="GREATERTHAN_GREATERTHAN_GREATERTHAN",e[e.AMPERSAND=91]="AMPERSAND",e[e.BAR=92]="BAR",e[e.CARET=93]="CARET",e[e.EXCLAMATION=94]="EXCLAMATION",e[e.TILDE=95]="TILDE",e[e.AMPERSAND_AMPERSAND=96]="AMPERSAND_AMPERSAND",e[e.BAR_BAR=97]="BAR_BAR",e[e.QUESTION=98]="QUESTION",e[e.COLON=99]="COLON",e[e.EQUALS=100]="EQUALS",e[e.PLUS_EQUALS=101]="PLUS_EQUALS",e[e.MINUS_EQUALS=102]="MINUS_EQUALS",e[e.ASTERISK_EQUALS=103]="ASTERISK_EQUALS",e[e.ASTERISK_ASTERISK_EQUALS=104]="ASTERISK_ASTERISK_EQUALS",e[e.SLASH_EQUALS=105]="SLASH_EQUALS",e[e.PERCENT_EQUALS=106]="PERCENT_EQUALS",e[e.LESSTHAN_LESSTHAN_EQUALS=107]="LESSTHAN_LESSTHAN_EQUALS",e[e.GREATERTHAN_GREATERTHAN_EQUALS=108]="GREATERTHAN_GREATERTHAN_EQUALS",e[e.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS=109]="GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS",e[e.AMPERSAND_EQUALS=110]="AMPERSAND_EQUALS",e[e.BAR_EQUALS=111]="BAR_EQUALS",e[e.CARET_EQUALS=112]="CARET_EQUALS",e[e.AT=113]="AT",e[e.IDENTIFIER=114]="IDENTIFIER",e[e.STRINGLITERAL=115]="STRINGLITERAL",e[e.INTEGERLITERAL=116]="INTEGERLITERAL",e[e.FLOATLITERAL=117]="FLOATLITERAL",e[e.INVALID=118]="INVALID",e[e.ENDOFFILE=119]="ENDOFFILE"}(a=t.Token||(t.Token={})),function(e){e.fromKeyword=function(t){switch(t){case"abstract":return e.ABSTRACT;case"as":return e.AS;case"async":return e.ASYNC;case"await":return e.AWAIT;case"break":return e.BREAK;case"case":return e.CASE;case"catch":return e.CATCH;case"class":return e.CLASS;case"continue":return e.CONTINUE;case"const":return e.CONST;case"constructor":return e.CONSTRUCTOR;case"debugger":return e.DEBUGGER;case"declare":return e.DECLARE;case"default":return e.DEFAULT;case"delete":return e.DELETE;case"do":return e.DO;case"else":return e.ELSE;case"enum":return e.ENUM;case"export":return e.EXPORT;case"extends":return e.EXTENDS;case"false":return e.FALSE;case"finally":return e.FINALLY;case"for":return e.FOR;case"from":return e.FROM;case"function":return e.FUNCTION;case"get":return e.GET;case"if":return e.IF;case"implements":return e.IMPLEMENTS;case"import":return e.IMPORT;case"in":return e.IN;case"instanceof":return e.INSTANCEOF;case"interface":return e.INTERFACE;case"is":return e.IS;case"keyof":return e.KEYOF;case"let":return e.LET;case"module":return e.MODULE;case"namespace":return e.NAMESPACE;case"new":return e.NEW;case"null":return e.NULL;case"of":return e.OF;case"package":return e.PACKAGE;case"private":return e.PRIVATE;case"protected":return e.PROTECTED;case"public":return e.PUBLIC;case"readonly":return e.READONLY;case"return":return e.RETURN;case"set":return e.SET;case"static":return e.STATIC;case"super":return e.SUPER;case"switch":return e.SWITCH;case"this":return e.THIS;case"throw":return e.THROW;case"true":return e.TRUE;case"try":return e.TRY;case"type":return e.TYPE;case"typeof":return e.TYPEOF;case"var":return e.VAR;case"void":return e.VOID;case"while":return e.WHILE;case"with":return e.WITH;case"yield":return e.YIELD;default:return e.INVALID}},e.isAlsoIdentifier=function(t){switch(t){case e.ABSTRACT:case e.AS:case e.CONSTRUCTOR:case e.DECLARE:case e.DELETE:case e.FROM:case e.GET:case e.IS:case e.KEYOF:case e.MODULE:case e.NAMESPACE:case e.READONLY:case e.SET:case e.TYPE:return!0;default:return!1}},e.operatorToString=function(t){switch(t){case e.DELETE:return"delete";case e.IN:return"in";case e.INSTANCEOF:return"instanceof";case e.NEW:return"new";case e.TYPEOF:return"typeof";case e.VOID:return"void";case e.YIELD:return"yield";case e.DOT_DOT_DOT:return"...";case e.COMMA:return",";case e.LESSTHAN:return"<";case e.GREATERTHAN:return">";case e.LESSTHAN_EQUALS:return"<=";case e.GREATERTHAN_EQUALS:return">=";case e.EQUALS_EQUALS:return"==";case e.EXCLAMATION_EQUALS:return"!=";case e.EQUALS_EQUALS_EQUALS:return"===";case e.EXCLAMATION_EQUALS_EQUALS:return"!==";case e.PLUS:return"+";case e.MINUS:return"-";case e.ASTERISK_ASTERISK:return"**";case e.ASTERISK:return"*";case e.SLASH:return"/";case e.PERCENT:return"%";case e.PLUS_PLUS:return"++";case e.MINUS_MINUS:return"--";case e.LESSTHAN_LESSTHAN:return"<<";case e.GREATERTHAN_GREATERTHAN:return">>";case e.GREATERTHAN_GREATERTHAN_GREATERTHAN:return">>>";case e.AMPERSAND:return"&";case e.BAR:return"|";case e.CARET:return"^";case e.EXCLAMATION:return"!";case e.TILDE:return"~";case e.AMPERSAND_AMPERSAND:return"&&";case e.BAR_BAR:return"||";case e.EQUALS:return"=";case e.PLUS_EQUALS:return"+=";case e.MINUS_EQUALS:return"-=";case e.ASTERISK_EQUALS:return"*=";case e.ASTERISK_ASTERISK_EQUALS:return"**=";case e.SLASH_EQUALS:return"/=";case e.PERCENT_EQUALS:return"%=";case e.LESSTHAN_LESSTHAN_EQUALS:return"<<=";case e.GREATERTHAN_GREATERTHAN_EQUALS:return">>=";case e.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:return">>>=";case e.AMPERSAND_EQUALS:return"&=";case e.BAR_EQUALS:return"|=";case e.CARET_EQUALS:return"^=";default:return assert(!1),""}}}(a=t.Token||(t.Token={}));var c=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=this.start,r=1;t-- >0;)10==e.charCodeAt(t)&&r++;return r},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"column",{get:function(){for(var e=this.source.text,t=this.start,r=0;t-- >0&&10!=e.charCodeAt(t);)r++;return r},enumerable:!0,configurable:!0}),e.prototype.toString=function(){return this.source.text.substring(this.start,this.end)},e}();t.Range=c;var p=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.markedPos=0,n.markedToken=-1,n.markedTokenPos=0,n.nextToken=-1,n.nextTokenOnNewLine=!1,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(s.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(){this.markedPos=this.pos,this.markedToken=this.token,this.markedTokenPos=this.tokenPos},t.prototype.reset=function(){this.pos=this.markedPos,this.token=this.markedToken,this.tokenPos=this.markedTokenPos,this.nextToken=-1},t.prototype.range=function(e,t){return void 0===e&&(e=-1),void 0===t&&(t=-1),e<0?(e=this.tokenPos,t=this.pos):t<0&&(t=e),new c(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(s.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(s.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=p},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(2),o=r(3);t.Token=o.Token,t.Range=o.Range;var s,c=r(8);!function(e){e[e.SOURCE=0]="SOURCE",e[e.TYPE=1]="TYPE",e[e.TYPEPARAMETER=2]="TYPEPARAMETER",e[e.IDENTIFIER=3]="IDENTIFIER",e[e.ASSERTION=4]="ASSERTION",e[e.BINARY=5]="BINARY",e[e.CALL=6]="CALL",e[e.COMMA=7]="COMMA",e[e.ELEMENTACCESS=8]="ELEMENTACCESS",e[e.FALSE=9]="FALSE",e[e.FUNCTION=10]="FUNCTION",e[e.FUNCTIONARROW=11]="FUNCTIONARROW",e[e.LITERAL=12]="LITERAL",e[e.NEW=13]="NEW",e[e.NULL=14]="NULL",e[e.PARENTHESIZED=15]="PARENTHESIZED",e[e.PROPERTYACCESS=16]="PROPERTYACCESS",e[e.TERNARY=17]="TERNARY",e[e.SUPER=18]="SUPER",e[e.THIS=19]="THIS",e[e.TRUE=20]="TRUE",e[e.CONSTRUCTOR=21]="CONSTRUCTOR",e[e.UNARYPOSTFIX=22]="UNARYPOSTFIX",e[e.UNARYPREFIX=23]="UNARYPREFIX",e[e.BLOCK=24]="BLOCK",e[e.BREAK=25]="BREAK",e[e.CONTINUE=26]="CONTINUE",e[e.DO=27]="DO",e[e.EMPTY=28]="EMPTY",e[e.EXPORT=29]="EXPORT",e[e.EXPORTIMPORT=30]="EXPORTIMPORT",e[e.EXPRESSION=31]="EXPRESSION",e[e.FOR=32]="FOR",e[e.IF=33]="IF",e[e.IMPORT=34]="IMPORT",e[e.RETURN=35]="RETURN",e[e.SWITCH=36]="SWITCH",e[e.THROW=37]="THROW",e[e.TRY=38]="TRY",e[e.VARIABLE=39]="VARIABLE",e[e.VOID=40]="VOID",e[e.WHILE=41]="WHILE",e[e.CLASSDECLARATION=42]="CLASSDECLARATION",e[e.ENUMDECLARATION=43]="ENUMDECLARATION",e[e.ENUMVALUEDECLARATION=44]="ENUMVALUEDECLARATION",e[e.FIELDDECLARATION=45]="FIELDDECLARATION",e[e.FUNCTIONDECLARATION=46]="FUNCTIONDECLARATION",e[e.IMPORTDECLARATION=47]="IMPORTDECLARATION",e[e.INTERFACEDECLARATION=48]="INTERFACEDECLARATION",e[e.METHODDECLARATION=49]="METHODDECLARATION",e[e.NAMESPACEDECLARATION=50]="NAMESPACEDECLARATION",e[e.TYPEDECLARATION=51]="TYPEDECLARATION",e[e.VARIABLEDECLARATION=52]="VARIABLEDECLARATION",e[e.DECORATOR=53]="DECORATOR",e[e.EXPORTMEMBER=54]="EXPORTMEMBER",e[e.MODIFIER=55]="MODIFIER",e[e.PARAMETER=56]="PARAMETER",e[e.SWITCHCASE=57]="SWITCHCASE"}(s=t.NodeKind||(t.NodeKind={}));var p=function(){function e(){this.parent=null}return e.createType=function(e,t,r,n){var i=new u;return i.range=n,i.name=e,i.typeArguments=t,i.isNullable=r,i},e.createIdentifierExpression=function(e,t){var r=new d;return r.range=t,r.text=e,r},e.createArrayLiteralExpression=function(e,t){var r=new y;return r.range=t,r.elementExpressions=e,function(e,t){for(var r=0,n=e.length;r0},enumerable:!0,configurable:!0}),t}(V);t.FunctionDeclaration=se;var ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IF,t}return i(t,e),t}(z);t.IfStatement=ce;var pe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORTDECLARATION,t.modifiers=null,t}return i(t,e),t}(V);t.ImportDeclaration=pe;var ue=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORT,t}return i(t,e),t}(z);t.ImportStatement=ue;var le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.INTERFACEDECLARATION,t}return i(t,e),t}(X);t.InterfaceDeclaration=le;var he=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.METHODDECLARATION,t}return i(t,e),t}(se);t.MethodDeclaration=he;var de=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.NAMESPACEDECLARATION,t}return i(t,e),t}(V);t.NamespaceDeclaration=de,function(e){e[e.DEFAULT=0]="DEFAULT",e[e.OPTIONAL=1]="OPTIONAL",e[e.REST=2]="REST"}(t.ParameterKind||(t.ParameterKind={}));var _e=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.PARAMETER,t}return i(t,e),t}(p);t.Parameter=_e;var ye=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.MODIFIER,t}return i(t,e),t}(p);t.Modifier=ye;var me=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.RETURN,t}return i(t,e),t}(z);t.ReturnStatement=me;var Ee=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=Ee;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}(z);t.SwitchStatement=fe;var Te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.THROW,t}return i(t,e),t}(z);t.ThrowStatement=Te;var ge=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TRY,t}return i(t,e),t}(z);t.TryStatement=ge;var Ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TYPEDECLARATION,t}return i(t,e),t}(V);t.TypeDeclaration=Ae;var Ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLEDECLARATION,t}return i(t,e),t}(W);t.VariableDeclaration=Ie;var ve=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLE,t}return i(t,e),t}(z);t.VariableStatement=ve;var Ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VOID,t}return i(t,e),t}(z);t.VoidStatement=Ne;var Se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.WHILE,t}return i(t,e),t}(z);t.WhileStatement=Se;var Ce=null;function be(){var e;return null!=Ce?(e=Ce,Ce=null):e=[],e.length=0,e}function Oe(e,t){if(t)for(var r=0,n=t.length;r>>e.size-this.size},e.prototype.is=function(e){return(this.flags&e)==e},Object.defineProperty(e.prototype,"isClass",{get:function(){return null!=this.classType},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isFunction",{get:function(){return null!=this.functionType},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isReference",{get:function(){return null!=this.classType||null!=this.functionType},enumerable:!0,configurable:!0}),e.prototype.asClass=function(t){assert(9==this.kind&&!this.classType);var r=new e(this.kind,-129&this.flags|256,this.size);return r.classType=t,r},e.prototype.asFunction=function(t){assert(7==this.kind&&!this.functionType);var r=new e(this.kind,-129&this.flags|256,this.size);return r.functionType=t,r},e.prototype.asNullable=function(){return assert(this.isReference),this.nullableType||(assert(!this.is(512)),this.nullableType=new e(this.kind,512|this.flags,this.size),this.nullableType.classType=this.classType,this.nullableType.functionType=this.functionType),this.nullableType},e.prototype.isAssignableTo=function(e,t){var r,n,i,a;if(void 0===t&&(t=!1),this.isReference){if(e.isReference)if(r=this.classType){if(n=e.classType)return r.isAssignableTo(n)}else if((i=this.functionType)&&(a=e.functionType))return i.isAssignableTo(a)}else if(!e.isReference)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:return"u32";case 8:return"u64";case 9:return e?"usize":this.classType?this.classType.toString():this.functionType?this.functionType.toTypeString():"usize";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;n=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}};Object.defineProperty(t,"__esModule",{value:!0});var o,s=r(16),c=r(0),p=r(1),u=r(2),l=r(3),h=r(4),d=r(5);!function(e){e[e.WASM32=0]="WASM32",e[e.WASM64=1]="WASM64"}(o=t.Target||(t.Target={}));var _=function(){function e(){this.target=o.WASM32,this.noTreeShaking=!1,this.noAssert=!1,this.noMemory=!1,this.importMemory=!1,this.memoryBase=0,this.allocateImpl="allocate_memory",this.freeImpl="free_memory",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?d.Type.usize64:d.Type.usize32},enumerable:!0,configurable:!0}),Object.defineProperty(e.prototype,"isizeType",{get:function(){return this.target==o.WASM64?d.Type.isize64:d.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=_,function(e){e[e.NONE=0]="NONE",e[e.IMPLICIT=1]="IMPLICIT",e[e.EXPLICIT=2]="EXPLICIT"}(t.ConversionKind||(t.ConversionKind={}));var y=function(e){function t(t,r){void 0===r&&(r=null);var n=e.call(this,t.diagnostics)||this;return n.startFunctionBody=new Array,n.currentEnum=null,n.currentType=d.Type.void,n.memorySegments=new Array,n.stringSegments=new Map,n.functionTable=new Array,n.files=new Set,n.program=t,n.options=r||new _,n.memoryOffset=i64_new(max(n.options.memoryBase,n.options.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(){this.program.initialize(this.options);var e=assert(this.program.elements.get("start"));assert(e.kind==u.ElementKind.FUNCTION_PROTOTYPE);var t=new u.Function(e,e.internalName,null,null,d.Type.void);t.set(u.ElementFlags.START),this.currentFunction=this.startFunction=t;for(var r=this.program.sources,n=0,i=r.length;n"),!1;e.type=this.currentType}var i=e.type.toNativeType();if(e.is(u.ElementFlags.DECLARED))return e.is(u.ElementFlags.CONSTANT)?(this.module.addGlobalImport(e.internalName,e.namespace?e.namespace.simpleName:"env",e.simpleName,i),e.set(u.ElementFlags.COMPILED),!0):(this.error(c.DiagnosticCode.Operation_not_supported,t.range),!1);var a=!1;e.is(u.ElementFlags.INLINED)?r=this.compileInlineConstant(e,e.type,!0):t.initializer?(r||(r=this.compileExpression(t.initializer,e.type)),_BinaryenExpressionGetId(r)!=p.ExpressionId.Const&&(e.is(u.ElementFlags.CONSTANT)?(r=this.precomputeExpressionRef(r),_BinaryenExpressionGetId(r)!=p.ExpressionId.Const&&(this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,t.range),a=!0)):a=!0)):r=e.type.toNativeZero(this.module);var o=e.internalName;if(a){this.module.addGlobal(o,i,!0,e.type.toNativeZero(this.module));var s=this.module.createSetGlobal(o,r);this.startFunctionBody.push(s)}else if(e.is(u.ElementFlags.CONSTANT)){switch(_BinaryenExpressionGetType(r)){case p.NativeType.I32:e.constantValueKind=1,e.constantIntegerValue=i64_new(_BinaryenConstGetValueI32(r),0);break;case p.NativeType.I64:e.constantValueKind=1,e.constantIntegerValue=i64_new(_BinaryenConstGetValueI64Low(r),_BinaryenConstGetValueI64High(r));break;case p.NativeType.F32:e.constantValueKind=2,e.constantFloatValue=_BinaryenConstGetValueF32(r);break;case p.NativeType.F64:e.constantValueKind=2,e.constantFloatValue=_BinaryenConstGetValueF64(r);break;default:throw new Error("concrete type expected")}e.set(u.ElementFlags.INLINED),t.isTopLevel&&this.module.addGlobal(o,i,!1,r),t.range.source.isEntry&&t.isTopLevelExport&&this.module.addGlobalExport(e.internalName,t.programLevelInternalName)}else this.module.addGlobal(o,i,!e.is(u.ElementFlags.CONSTANT),r);return!0},t.prototype.compileEnumDeclaration=function(e){var t=this.program.elements.get(e.fileLevelInternalName);if(!t||t.kind!=u.ElementKind.ENUM)throw new Error("enum expected");return this.compileEnum(t)?t:null},t.prototype.compileEnum=function(e){if(e.is(u.ElementFlags.COMPILED))return!0;e.set(u.ElementFlags.COMPILED),this.currentEnum=e;var t,r,n=null;if(e.members)try{for(var i=a(e.members.values()),o=i.next();!o.done;o=i.next()){var s=o.value;if(s.kind==u.ElementKind.ENUMVALUE){var l,h=!1,_=s,y=_.declaration;if(_.set(u.ElementFlags.COMPILED),_.is(u.ElementFlags.INLINED))e.declaration.isTopLevelExport&&this.module.addGlobal(_.internalName,p.NativeType.I32,!1,this.module.createI32(_.constantValue));else if(y.value?(l=this.compileExpression(y.value,d.Type.i32),_BinaryenExpressionGetId(l)!=p.ExpressionId.Const&&(l=this.precomputeExpressionRef(l),_BinaryenExpressionGetId(l)!=p.ExpressionId.Const&&(e.is(u.ElementFlags.CONSTANT)&&this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range),h=!0))):null==n?l=this.module.createI32(0):n.is(u.ElementFlags.INLINED)?l=this.module.createI32(n.constantValue+1):(l=this.module.createBinary(p.BinaryOp.AddI32,this.module.createGetGlobal(n.internalName,p.NativeType.I32),this.module.createI32(1)),e.is(u.ElementFlags.CONSTANT)&&this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range),h=!0),h){this.module.addGlobal(_.internalName,p.NativeType.I32,!0,this.module.createI32(0));var m=this.module.createSetGlobal(_.internalName,l);this.startFunctionBody.push(m)}else{if(this.module.addGlobal(_.internalName,p.NativeType.I32,!1,l),_BinaryenExpressionGetType(l)!=p.NativeType.I32)throw new Error("i32 expected");_.constantValue=_BinaryenConstGetValueI32(l),_.set(u.ElementFlags.INLINED)}n=_,e.declaration.range.source.isEntry&&e.declaration.isTopLevelExport&&(s.is(u.ElementFlags.INLINED)?this.module.addGlobalExport(s.internalName,s.internalName):y&&this.warning(c.DiagnosticCode.Cannot_export_a_mutable_global,y.range))}}}catch(e){t={error:e}}finally{try{o&&!o.done&&(r=i.return)&&r.call(i)}finally{if(t)throw t.error}}return this.currentEnum=null,!0},t.prototype.compileFunctionDeclaration=function(e,t,r){void 0===r&&(r=null);var n=this.program.elements.get(e.fileLevelInternalName);if(!n||n.kind!=u.ElementKind.FUNCTION_PROTOTYPE)throw new Error("function expected");return 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.compileFunction=function(e){if(e.is(u.ElementFlags.COMPILED))return!0;assert(!e.is(u.ElementFlags.BUILTIN)||"abort"==e.simpleName);var t=e.prototype.declaration;if(e.is(u.ElementFlags.DECLARED)){if(t.body)return this.error(c.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,t.name.range),!1}else if(!t.body)return this.error(c.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,t.name.range),!1;e.set(u.ElementFlags.COMPILED);var r=0;if(!e.is(u.ElementFlags.DECLARED)){var n=this.currentFunction;this.currentFunction=e;var i=assert(t.body,"implementation expected");r=this.compileStatement(i);var a=this.currentFunction.flow.finalize();e.returnType==d.Type.void||a||this.error(c.DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,assert(t.returnType,"return type expected").range),this.currentFunction=n}var o=e.parameters?e.parameters.length:0,s=e.instanceMethodOf?o+1:o,l=0,h=e.returnType.toNativeType(),_=new Array(s),y=new Array(s+1);if(e.instanceMethodOf&&(_[l]=this.options.isWasm64?p.NativeType.I64:p.NativeType.I32,y[l++]=e.instanceMethodOf.type.toSignatureString()),e.parameters)for(var m=0;m=0)return e.functionTableIndex;var t=this.functionTable.length;return this.functionTable.push(e),e.functionTableIndex=t,t},t.prototype.compileStatement=function(e){var t;switch(e.kind){case h.NodeKind.BLOCK:t=this.compileBlockStatement(e);break;case h.NodeKind.BREAK:t=this.compileBreakStatement(e);break;case h.NodeKind.CONTINUE:t=this.compileContinueStatement(e);break;case h.NodeKind.DO:t=this.compileDoStatement(e);break;case h.NodeKind.EMPTY:t=this.compileEmptyStatement(e);break;case h.NodeKind.EXPRESSION:t=this.compileExpressionStatement(e);break;case h.NodeKind.FOR:t=this.compileForStatement(e);break;case h.NodeKind.IF:t=this.compileIfStatement(e);break;case h.NodeKind.RETURN:t=this.compileReturnStatement(e);break;case h.NodeKind.SWITCH:t=this.compileSwitchStatement(e);break;case h.NodeKind.THROW:t=this.compileThrowStatement(e);break;case h.NodeKind.TRY:t=this.compileTryStatement(e);break;case h.NodeKind.VARIABLE:var r=this.compileVariableStatement(e);t=r||this.module.createNop();break;case h.NodeKind.VOID:t=this.compileVoidStatement(e);break;case h.NodeKind.WHILE:t=this.compileWhileStatement(e);break;case h.NodeKind.TYPEDECLARATION:if(this.currentFunction==this.startFunction)return this.module.createNop();default:throw new Error("statement expected")}return this.addDebugLocation(t,e.range),t},t.prototype.compileStatements=function(e){for(var t=e.length,r=new Array(t),n=0;n=0?"case"+o.toString(10):"break")+"|"+t);var u=this.module.createBlock("case0|"+t,i,p.NativeType.None),l=!0;for(s=0;s=0&&l&&this.currentFunction.flow.set(1),u},t.prototype.compileThrowStatement=function(e){return this.currentFunction.flow.set(2),this.currentFunction.flow.set(1),this.module.createUnreachable()},t.prototype.compileTryStatement=function(e){throw new Error("not implemented")},t.prototype.compileVariableStatement=function(e,t){void 0===t&&(t=!1);var r=e.declarations;if(t||this.currentFunction==this.startFunction&&e.parent&&e.parent.kind==h.NodeKind.SOURCE){for(var n=0,i=r.length;n");continue}l=this.currentType}if(h.hasModifier(h.ModifierKind.CONST,o.modifiers))if(_){if(_=this.precomputeExpressionRef(_),_BinaryenExpressionGetId(_)==p.ExpressionId.Const){var y=new u.Local(this.program,s,-1,l);switch(_BinaryenExpressionGetType(_)){case p.NativeType.I32:y=y.withConstantIntegerValue(_BinaryenConstGetValueI32(_),0);break;case p.NativeType.I64:y=y.withConstantIntegerValue(_BinaryenConstGetValueI64Low(_),_BinaryenConstGetValueI64High(_));break;case p.NativeType.F32:y=y.withConstantFloatValue(_BinaryenConstGetValueF32(_));break;case p.NativeType.F64:y=y.withConstantFloatValue(_BinaryenConstGetValueF64(_));break;default:throw new Error("concrete type expected")}var m=this.currentFunction.flow.scopedLocals;if(m){if(m.has(s))return this.error(c.DiagnosticCode.Duplicate_identifier_0,o.name.range,s),0}else m=this.currentFunction.flow.scopedLocals=new Map;return m.set(s,y),0}this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,o.range)}else this.error(c.DiagnosticCode._const_declarations_must_be_initialized,o.range);h.hasModifier(h.ModifierKind.LET,o.modifiers)?this.currentFunction.flow.addScopedLocal(s,l,o.name):this.currentFunction.addLocal(l,s),_&&a.push(this.compileAssignmentWithValue(o.name,_))}return a.length?1==a.length?a[0]:this.module.createBlock(null,a,p.NativeType.None):0},t.prototype.compileVoidStatement=function(e){return this.compileExpression(e.expression,d.Type.void,2,!1)},t.prototype.compileWhileStatement=function(e){var t=f(this.compileExpression(e.condition,d.Type.i32,0),this.currentType,this.module),r=this.currentFunction.enterBreakContext();this.currentFunction.flow=this.currentFunction.flow.enterBranchOrScope();var n=this.currentFunction.flow.breakLabel="break|"+r,i=this.currentFunction.flow.continueLabel="continue|"+r,a=this.compileStatement(e.statement);this.currentFunction.flow=this.currentFunction.flow.leaveBranchOrScope(),this.currentFunction.leaveBreakContext();var o=this.module.createBlock(n,[this.module.createLoop(i,this.module.createIf(t,this.module.createBlock(null,[a,this.module.createBreak(i)],p.NativeType.None)))],p.NativeType.None);return o},t.prototype.compileInlineConstant=function(e,t,r){switch(assert(e.is(u.ElementFlags.INLINED)),!r&&e.type.is(4)&&t.is(4)&&e.type.size>n:0);case 5:case 6:case 10:var i=e.type.computeSmallIntegerMask(d.Type.i32);return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue)&i: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:throw new Error("concrete type expected")}},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:case h.NodeKind.FUNCTIONARROW: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:throw new Error("expression expected")}return 0!=r&&this.currentType!=t&&(i=this.convertExpression(i,this.currentType,t,r,e),this.currentType=t),this.addDebugLocation(i,e.range),i},t.prototype.compileExpressionRetainType=function(e,t,r){return void 0===r&&(r=!0),this.compileExpression(e,t==d.Type.void?d.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.currentType.toNativeType(),r=this.module.getFunctionTypeBySignature(t,[]);r||(r=this.module.addFunctionType(this.currentType.toSignatureString(),t,[]));var n=this.module.addFunction("__precompute",r,[],e);this.module.runPasses(["precompute"],n);var i=_BinaryenFunctionGetBody(n);return this.module.removeFunction("__precompute"),i},t.prototype.convertExpression=function(e,t,r,n,i){return 0==n?(assert(!1,"concrete type expected"),e):13==t.kind?(this.error(c.DiagnosticCode.Type_0_is_not_assignable_to_type_1,i.range,t.toString(),r.toString()),this.module.createUnreachable()):13==r.kind?this.module.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=this.module.createUnary(p.UnaryOp.PromoteF32,e)):11==r.kind&&(e=this.module.createUnary(p.UnaryOp.DemoteF64,e)):r.is(4)?11==t.kind?r.is(1)?r.is(64)?e=this.module.createUnary(p.UnaryOp.TruncF32ToI64,e):(e=this.module.createUnary(p.UnaryOp.TruncF32ToI32,e),r.is(32)&&(e=m(e,r,this.module))):r.is(64)?e=this.module.createUnary(p.UnaryOp.TruncF32ToU64,e):(e=this.module.createUnary(p.UnaryOp.TruncF32ToU32,e),r.is(32)&&(e=m(e,r,this.module))):r.is(1)?r.is(64)?e=this.module.createUnary(p.UnaryOp.TruncF64ToI64,e):(e=this.module.createUnary(p.UnaryOp.TruncF64ToI32,e),r.is(32)&&(e=m(e,r,this.module))):r.is(64)?e=this.module.createUnary(p.UnaryOp.TruncF64ToU64,e):(e=this.module.createUnary(p.UnaryOp.TruncF64ToU32,e),r.is(32)&&(e=m(e,r,this.module))):(assert(0==r.flags,"void type expected"),e=this.module.createDrop(e)):t.is(4)&&r.is(8)?e=11==r.kind?t.is(64)?this.module.createUnary(t.is(1)?p.UnaryOp.ConvertI64ToF32:p.UnaryOp.ConvertU64ToF32,e):this.module.createUnary(t.is(1)?p.UnaryOp.ConvertI32ToF32:p.UnaryOp.ConvertU32ToF32,e):t.is(64)?this.module.createUnary(t.is(1)?p.UnaryOp.ConvertI64ToF64:p.UnaryOp.ConvertU64ToF64,e):this.module.createUnary(t.is(1)?p.UnaryOp.ConvertI32ToF64:p.UnaryOp.ConvertU32ToF64,e):t.is(64)?r.is(64)||(e=this.module.createUnary(p.UnaryOp.WrapI64,e),r.is(32)&&(e=m(e,r,this.module))):r.is(64)?e=this.module.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=m(e,r,this.module)),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){var n,i,a,o,s,u,h;void 0===r&&(r=!0);var _=!1,y=!1,E=null;switch(e.operator){case l.Token.LESSTHAN:if(n=this.compileExpressionRetainType(e.left,t),i=this.currentType,a=this.compileExpressionRetainType(e.right,i),o=this.currentType,!(s=d.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,this.module.createUnreachable();switch(n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right),s.kind){case 0:case 1:case 2:h=this.module.createBinary(p.BinaryOp.LtI32,n,a);break;case 3:h=this.module.createBinary(p.BinaryOp.LtI64,n,a);break;case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.LtI64:p.BinaryOp.LtI32,n,a);break;case 5:case 6:case 7:case 10:h=this.module.createBinary(p.BinaryOp.LtU32,n,a);break;case 9:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.LtU64:p.BinaryOp.LtU32,n,a);break;case 8:h=this.module.createBinary(p.BinaryOp.LtU64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.LtF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.LtF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}this.currentType=d.Type.bool;break;case l.Token.GREATERTHAN:if(n=this.compileExpressionRetainType(e.left,t),i=this.currentType,a=this.compileExpressionRetainType(e.right,i),o=this.currentType,!(s=d.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,this.module.createUnreachable();switch(n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right),s.kind){case 0:case 1:case 2:h=this.module.createBinary(p.BinaryOp.GtI32,n,a);break;case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.GtI64:p.BinaryOp.GtI32,n,a);break;case 3:h=this.module.createBinary(p.BinaryOp.GtI64,n,a);break;case 5:case 6:case 7:case 10:h=this.module.createBinary(p.BinaryOp.GtU32,n,a);break;case 9:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.GtU64:p.BinaryOp.GtU32,n,a);break;case 8:h=this.module.createBinary(p.BinaryOp.GtU64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.GtF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.GtF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}this.currentType=d.Type.bool;break;case l.Token.LESSTHAN_EQUALS:if(n=this.compileExpressionRetainType(e.left,t),i=this.currentType,a=this.compileExpressionRetainType(e.right,i),o=this.currentType,!(s=d.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,this.module.createUnreachable();switch(n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right),s.kind){case 0:case 1:case 2:h=this.module.createBinary(p.BinaryOp.LeI32,n,a);break;case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.LeI64:p.BinaryOp.LeI32,n,a);break;case 3:h=this.module.createBinary(p.BinaryOp.LeI64,n,a);break;case 5:case 6:case 7:case 10:h=this.module.createBinary(p.BinaryOp.LeU32,n,a);break;case 9:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.LeU64:p.BinaryOp.LeU32,n,a);break;case 8:h=this.module.createBinary(p.BinaryOp.LeU64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.LeF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.LeF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}this.currentType=d.Type.bool;break;case l.Token.GREATERTHAN_EQUALS:if(n=this.compileExpressionRetainType(e.left,t),i=this.currentType,a=this.compileExpressionRetainType(e.right,i),o=this.currentType,!(s=d.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,this.module.createUnreachable();switch(n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right),s.kind){case 0:case 1:case 2:h=this.module.createBinary(p.BinaryOp.GeI32,n,a);break;case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.GeI64:p.BinaryOp.GeI32,n,a);break;case 3:h=this.module.createBinary(p.BinaryOp.GeI64,n,a);break;case 5:case 6:case 7:case 10:h=this.module.createBinary(p.BinaryOp.GeU32,n,a);break;case 9:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.GeU64:p.BinaryOp.GeU32,n,a);break;case 8:h=this.module.createBinary(p.BinaryOp.GeU64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.GeF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.GeF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}this.currentType=d.Type.bool;break;case l.Token.EQUALS_EQUALS_EQUALS:case l.Token.EQUALS_EQUALS:if(n=this.compileExpressionRetainType(e.left,t),i=this.currentType,a=this.compileExpressionRetainType(e.right,i),o=this.currentType,!(s=d.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,l.Token.operatorToString(e.operator),i.toString(),o.toString()),this.currentType=t,this.module.createUnreachable();switch(n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:h=this.module.createBinary(p.BinaryOp.EqI32,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.EqI64:p.BinaryOp.EqI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.EqI64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.EqF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.EqF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}this.currentType=d.Type.bool;break;case l.Token.EXCLAMATION_EQUALS_EQUALS:case l.Token.EXCLAMATION_EQUALS:if(n=this.compileExpressionRetainType(e.left,t),i=this.currentType,a=this.compileExpressionRetainType(e.right,i),o=this.currentType,!(s=d.Type.commonCompatible(i,o,!1)))return this.error(c.DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,e.range,l.Token.operatorToString(e.operator),i.toString(),o.toString()),this.currentType=t,this.module.createUnreachable();switch(n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:h=this.module.createBinary(p.BinaryOp.NeI32,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.NeI64:p.BinaryOp.NeI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.NeI64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.NeF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.NeF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}this.currentType=d.Type.bool;break;case l.Token.EQUALS:return this.compileAssignment(e.left,e.right,t);case l.Token.PLUS_EQUALS:_=!0;case l.Token.PLUS:if(n=this.compileExpressionRetainType(e.left,t,!1),_)a=this.compileExpression(e.right,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(e.right,i,!1),o=this.currentType,!(s=d.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,this.module.createUnreachable();n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=!0;case 2:case 7:h=this.module.createBinary(p.BinaryOp.AddI32,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.AddI64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.AddF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.AddF64,n,a);break;default:throw new Error("concrete type expected")}break;case l.Token.MINUS_EQUALS:_=!0;case l.Token.MINUS:if(n=this.compileExpressionRetainType(e.left,t,!1),_)a=this.compileExpression(e.right,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(e.right,i,!1),o=this.currentType,!(s=d.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,this.module.createUnreachable();n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=!0;case 2:case 7:h=this.module.createBinary(p.BinaryOp.SubI32,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.SubI64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.SubF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.SubF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.ASTERISK_EQUALS:_=!0;case l.Token.ASTERISK:if(n=this.compileExpressionRetainType(e.left,t,!1),_)a=this.compileExpression(e.right,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(e.right,i,!1),o=this.currentType,!(s=d.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,this.module.createUnreachable();n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=!0;case 2:case 7:h=this.module.createBinary(p.BinaryOp.MulI32,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.MulI64:p.BinaryOp.MulI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.MulI64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.MulF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.MulF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.SLASH_EQUALS:_=!0;case l.Token.SLASH:if(n=this.compileExpressionRetainType(e.left,t,!0),_)a=this.compileExpression(e.right,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(e.right,i,!1),o=this.currentType,!(s=d.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,this.module.createUnreachable();n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right)}switch(this.currentType.kind){case 0:case 1:y=!0;case 2:h=this.module.createBinary(p.BinaryOp.DivI32,n,a);break;case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.DivI64:p.BinaryOp.DivI32,n,a);break;case 3:h=this.module.createBinary(p.BinaryOp.DivI64,n,a);break;case 5:case 6:case 10:y=!0;case 7:h=this.module.createBinary(p.BinaryOp.DivU32,n,a);break;case 9:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.DivU64:p.BinaryOp.DivU32,n,a);break;case 8:h=this.module.createBinary(p.BinaryOp.DivU64,n,a);break;case 11:h=this.module.createBinary(p.BinaryOp.DivF32,n,a);break;case 12:h=this.module.createBinary(p.BinaryOp.DivF64,n,a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.PERCENT_EQUALS:_=!0;case l.Token.PERCENT:if(n=this.compileExpressionRetainType(e.left,t,!0),_)a=this.compileExpression(e.right,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(e.right,i,!1),o=this.currentType,!(s=d.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,this.module.createUnreachable();n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right)}switch(this.currentType.kind){case 0:case 1:case 2:h=this.module.createBinary(p.BinaryOp.RemI32,n,a);break;case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.RemI64:p.BinaryOp.RemI32,n,a);break;case 3:h=this.module.createBinary(p.BinaryOp.RemI64,n,a);break;case 5:case 6:case 7:case 10:h=this.module.createBinary(p.BinaryOp.RemU32,n,a);break;case 9:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.RemU64:p.BinaryOp.RemU32,n,a);break;case 8:h=this.module.createBinary(p.BinaryOp.RemU64,n,a);break;case 11:case 12:this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=this.module.createUnreachable();break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.LESSTHAN_LESSTHAN_EQUALS:_=!0;case l.Token.LESSTHAN_LESSTHAN:switch(n=this.compileExpressionRetainType(e.left,t,!1),a=this.compileExpression(e.right,this.currentType,1,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=!0;default:h=this.module.createBinary(p.BinaryOp.ShlI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.ShlI64,n,a);break;case 9:case 4:h=this.module.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.Token.operatorToString(e.operator),this.currentType.toString()),this.module.createUnreachable();case 13:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.GREATERTHAN_GREATERTHAN_EQUALS:_=!0;case l.Token.GREATERTHAN_GREATERTHAN:switch(n=this.compileExpressionRetainType(e.left,t,!0),a=this.compileExpression(e.right,this.currentType,1,!0),this.currentType.kind){default:h=this.module.createBinary(p.BinaryOp.ShrI32,n,a);break;case 3:h=this.module.createBinary(p.BinaryOp.ShrI64,n,a);break;case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.ShrI64:p.BinaryOp.ShrI32,n,a);break;case 5:case 6:case 10:case 7:h=this.module.createBinary(p.BinaryOp.ShrU32,n,a);break;case 8:h=this.module.createBinary(p.BinaryOp.ShrU64,n,a);break;case 9:h=this.module.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.Token.operatorToString(e.operator),this.currentType.toString()),this.module.createUnreachable();case 13:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:_=!0;case l.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:switch(n=this.compileExpressionRetainType(e.left,t,!0),a=this.compileExpression(e.right,this.currentType,1,!0),this.currentType.kind){case 0:case 1:y=!0;default:h=this.module.createBinary(p.BinaryOp.ShrU32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.ShrU64,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.ShrU64:p.BinaryOp.ShrU32,n,a);break;case 13:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.AMPERSAND_EQUALS:_=!0;case l.Token.AMPERSAND:if(n=this.compileExpressionRetainType(e.left,t,!1),_)a=this.compileExpression(e.right,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(e.right,i,!1),o=this.currentType,!(s=d.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,this.module.createUnreachable();n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=!0;default:h=this.module.createBinary(p.BinaryOp.AndI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.AndI64,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.AndI64:p.BinaryOp.AndI32,n,a);break;case 13:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.BAR_EQUALS:_=!0;case l.Token.BAR:if(n=this.compileExpressionRetainType(e.left,t,!1),_)a=this.compileExpression(e.right,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(e.right,i,!1),o=this.currentType,!(s=d.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,this.module.createUnreachable();n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=!0;default:h=this.module.createBinary(p.BinaryOp.OrI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.OrI64,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.OrI64:p.BinaryOp.OrI32,n,a);break;case 13:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.CARET_EQUALS:_=!0;case l.Token.CARET:if(n=this.compileExpressionRetainType(e.left,t,!1),_)a=this.compileExpression(e.right,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(e.right,i,!1),o=this.currentType,!(s=d.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,this.module.createUnreachable();n=this.convertExpression(n,i,s,1,e.left),a=this.convertExpression(a,o,s,1,e.right)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=!0;default:h=this.module.createBinary(p.BinaryOp.XorI32,n,a);break;case 3:case 8:h=this.module.createBinary(p.BinaryOp.XorI64,n,a);break;case 9:case 4:h=this.module.createBinary(this.options.isWasm64?p.BinaryOp.XorI64:p.BinaryOp.XorI32,n,a);break;case 13:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.AMPERSAND_AMPERSAND:n=this.compileExpressionRetainType(e.left,t),a=this.compileExpression(e.right,this.currentType,1,!1),(h=this.module.cloneExpression(n,!0,0))||(E=this.currentFunction.getAndFreeTempLocal(this.currentType),n=this.module.createTeeLocal(E.index,n)),y=this.currentType.is(36),u=f(n,this.currentType,this.module),h=h?this.module.createIf(u,a,h):this.module.createIf(u,a,this.module.createGetLocal(assert(E,"tempLocal must be set").index,this.currentType.toNativeType()));break;case l.Token.BAR_BAR:n=this.compileExpressionRetainType(e.left,t),a=this.compileExpression(e.right,this.currentType,1,!1),(h=this.module.cloneExpression(n,!0,0))||(E=this.currentFunction.getAndFreeTempLocal(this.currentType),n=this.module.createTeeLocal(E.index,n)),y=this.currentType.is(36),u=f(n,this.currentType,this.module),h=h?this.module.createIf(u,h,a):this.module.createIf(u,this.module.createGetLocal(assert(E,"tempLocal must be set").index,this.currentType.toNativeType()),a);break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("not implemented")}return y&&r&&(assert(this.currentType.is(36),"small integer type expected"),h=m(h,this.currentType,this.module)),_?this.compileAssignmentWithValue(e.left,h,t!=d.Type.void):h},t.prototype.compileAssignment=function(e,t,r){var n=this.program.resolveExpression(e,this.currentFunction);if(!n)return this.module.createUnreachable();var i,a=n.element;switch(a.kind){case u.ElementKind.GLOBAL:if(!this.compileGlobal(a))return this.module.createUnreachable();assert(a.type!=d.Type.void,"concrete type expected");case u.ElementKind.LOCAL:case u.ElementKind.FIELD:i=a.type;break;case u.ElementKind.PROPERTY:var o=a.setterPrototype;if(o){var s=o.resolve();if(!s)return this.module.createUnreachable();assert(s.parameters&&1==s.parameters.length),i=s.parameters[0].type;break}return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,a.internalName),this.module.createUnreachable();case u.ElementKind.FUNCTION_PROTOTYPE:if(e.kind==h.NodeKind.ELEMENTACCESS){assert(n.target&&n.target.kind==u.ElementKind.CLASS&&a.simpleName==n.target.prototype.fnIndexedGet);var p=a.resolve(null);if(p){i=p.returnType;break}}default:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}return this.currentType=i,this.compileAssignmentWithValue(e,this.compileExpression(t,i),r!=d.Type.void)},t.prototype.compileAssignmentWithValue=function(e,t,r){void 0===r&&(r=!1);var n=this.program.resolveExpression(e,this.currentFunction);if(!n)return this.module.createUnreachable();var i,a,o=n.element;switch(o.kind){case u.ElementKind.LOCAL:return this.currentType=r?o.type:d.Type.void,o.is(u.ElementFlags.CONSTANT)?(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()):r?this.module.createTeeLocal(o.index,t):this.module.createSetLocal(o.index,t);case u.ElementKind.GLOBAL:if(!this.compileGlobal(o))return this.module.createUnreachable();if(assert(o.type!=d.Type.void,"concrete type expected"),this.currentType=r?o.type:d.Type.void,o.is(u.ElementFlags.CONSTANT))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();if(!r)return this.module.createSetGlobal(o.internalName,t);var s=o.type.toNativeType();return this.module.createBlock(null,[this.module.createSetGlobal(o.internalName,t),this.module.createGetGlobal(o.internalName,s)],s);case u.ElementKind.FIELD:if(o.prototype.isReadonly)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();assert(null!=n.targetExpression,"target expression expected"),a=this.compileExpression(n.targetExpression,this.options.isWasm64?d.Type.usize64:d.Type.usize32,0),assert(this.currentType.classType,"class type expected"),this.currentType=r?o.type:d.Type.void;var p=o.type.toNativeType();return r?(i=this.currentFunction.getAndFreeTempLocal(o.type),this.module.createBlock(null,[this.module.createSetLocal(i.index,t),this.module.createStore(o.type.size>>3,a,this.module.createGetLocal(i.index,p),p,o.memoryOffset),this.module.createGetLocal(i.index,p)],p)):this.module.createStore(o.type.size>>3,a,t,p,o.memoryOffset);case u.ElementKind.PROPERTY:var l=o.setterPrototype;if(l){var _=l.resolve();if(_){if(assert(_.parameters&&1==_.parameters.length),!r)return _.is(u.ElementFlags.INSTANCE)?(assert(null!=n.targetExpression),a=this.compileExpression(n.targetExpression,this.options.isWasm64?d.Type.usize64:d.Type.usize32,0),assert(this.currentType.classType),this.currentType=d.Type.void,this.makeCall(_,[a,t])):(this.currentType=d.Type.void,this.makeCall(_,[t]));var y=o.getterPrototype;assert(null!=y);var m=y.resolve();if(m)return assert(!m.parameters||!m.parameters.length),_.is(u.ElementFlags.INSTANCE)?(assert(null!=n.targetExpression),a=this.compileExpression(n.targetExpression,this.options.isWasm64?d.Type.usize64:d.Type.usize32,0),assert(this.currentType.classType),i=this.currentFunction.getAndFreeTempLocal(m.returnType),this.module.createBlock(null,[this.makeCall(_,[this.module.createTeeLocal(i.index,a),t]),this.makeCall(m,[this.module.createGetLocal(i.index,i.type.toNativeType())])],(this.currentType=m.returnType).toNativeType())):this.module.createBlock(null,[this.makeCall(_,[t]),this.makeCall(m)],(this.currentType=m.returnType).toNativeType())}}else this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,o.internalName);return this.module.createUnreachable();case u.ElementKind.FUNCTION_PROTOTYPE:if(e.kind==h.NodeKind.ELEMENTACCESS){assert(n.target&&n.target.kind==u.ElementKind.CLASS);var E=o.resolve();if(!E)return this.module.createUnreachable();var f,T=n.target.prototype.fnIndexedSet;if(null!=T&&n.target.members&&(f=n.target.members.get(T))&&f.kind==u.ElementKind.FUNCTION_PROTOTYPE){var g=f.resolve();if(!g)return this.module.createUnreachable();a=this.compileExpression(n.targetExpression,this.options.isWasm64?d.Type.usize64:d.Type.usize32,0),assert(this.currentType.classType);var A=this.compileExpression(e.elementExpression,d.Type.i32);return r?(this.currentType=E.returnType,i=this.currentFunction.getAndFreeTempLocal(this.currentType),this.module.createBlock(null,[this.makeCall(g,[a,A,this.module.createTeeLocal(i.index,t)]),this.module.createGetLocal(i.index,i.type.toNativeType())],this.currentType.toNativeType())):(this.currentType=g.returnType,this.makeCall(g,[a,A,t]))}return this.error(c.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,n.target.internalName),this.module.createUnreachable()}}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileCallExpression=function(e,t){var r=this.program.resolveExpression(e.expression,this.currentFunction);if(!r)return this.module.createUnreachable();var n,i,a=r.element;switch(a.kind){case u.ElementKind.FUNCTION_PROTOTYPE:if((n=a).is(u.ElementFlags.BUILTIN)){var o=s.compileCall(this,n,n.resolveBuiltinTypeArguments(e.typeArguments,this.currentFunction.contextualTypeArguments),e.arguments,t,e);return o||(this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable())}if(!(i=n.resolveUsingTypeArguments(e.typeArguments,this.currentFunction.contextualTypeArguments,e)))return this.module.createUnreachable();break;case u.ElementKind.LOCAL:case u.ElementKind.GLOBAL:case u.ElementKind.FIELD:if(!a.type.isFunction)return this.error(c.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,e.range,a.type.toString()),this.module.createUnreachable();i=a.type.functionType;break;default:return this.error(c.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,e.range,a.internalName),this.module.createUnreachable()}var p=e.arguments.length,l=i.instanceMethodOf?p+1:p,h=0,d=new Array(l);i.instanceMethodOf&&(assert(null!=r.targetExpression),d[h++]=r.targetExpression);for(var _=0;_o)return this.error(c.DiagnosticCode.Expected_0_arguments_but_got_1,r.range,a.toString(10),p.toString(10)),this.module.createUnreachable();var u=new Array(o),l=0,h=0;if(e.instanceMethodOf&&(u[l++]=n||this.compileExpression(t[h++],e.instanceMethodOf.type)),i)for(;ll)u[l]=this.compileExpression(t[h++],i[l+a-o].type);else{var d=i[l+a-o].initializer;if(!d)return this.error(c.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,r.range,(l+a-o).toString(10),p.toString(10)),this.module.createUnreachable();u[l]=this.compileExpression(d,i[l+a-o].type)}return this.currentType=e.returnType,this.makeCall(e,u)},t.prototype.makeCall=function(e,t){return void 0===t&&(t=null),e.is(u.ElementFlags.COMPILED)||this.compileFunction(e)?e.is(u.ElementFlags.DECLARED)?this.module.createCallImport(e.internalName,t,e.returnType.toNativeType()):this.module.createCall(e.internalName,t,e.returnType.toNativeType()):this.module.createUnreachable()},t.prototype.compileCommaExpression=function(e,t){for(var r=e.expressions,n=r.length,i=new Array(n--),a=0;a=0),this.currentType=i.type,this.module.createGetLocal(i.index,this.currentType.toNativeType()));case u.ElementKind.GLOBAL:return i.is(u.ElementFlags.BUILTIN)?s.compileGetConstant(this,i,e):this.compileGlobal(i)?(assert(i.type!=d.Type.void),i.is(u.ElementFlags.INLINED)?this.compileInlineConstant(i,t,r):(this.currentType=i.type,this.module.createGetGlobal(i.internalName,this.currentType.toNativeType()))):this.module.createUnreachable();case u.ElementKind.ENUMVALUE:return i.is(u.ElementFlags.COMPILED)?(this.currentType=d.Type.i32,i.is(u.ElementFlags.INLINED)?this.module.createI32(i.constantValue):this.module.createGetGlobal(i.internalName,p.NativeType.I32)):(this.error(c.DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,e.range),this.currentType=d.Type.i32,this.module.createUnreachable())}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileLiteralExpression=function(e,t,r){switch(void 0===r&&(r=!1),e.literalKind){case 4:assert(!r);var n=t.classType;return n&&n==this.program.elements.get("Array")&&n.typeArguments&&1==n.typeArguments.length?this.compileStaticArray(n.typeArguments[0],e.elementExpressions):(this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable());case 0:var i=e.value;return r&&(i=-i),t==d.Type.f32?this.module.createF32(i):(this.currentType=d.Type.f64,this.module.createF64(i));case 1:var a=e.value;switch(r&&(a=i64_sub(i64_new(0),a)),t.kind){case 0:if(i64_is_i8(a))return this.module.createI32(i64_low(a));break;case 1:if(i64_is_i16(a))return this.module.createI32(i64_low(a));break;case 2:if(i64_is_i32(a))return this.module.createI32(i64_low(a));break;case 5:if(i64_is_u8(a))return this.module.createI32(i64_low(a));break;case 6:if(i64_is_u16(a))return this.module.createI32(i64_low(a));break;case 7:if(i64_is_u32(a))return this.module.createI32(i64_low(a));break;case 10:if(i64_is_bool(a))return this.module.createI32(i64_low(a));break;case 4:case 9:if(!this.options.isWasm64){if(i64_is_u32(a))return this.module.createI32(i64_low(a));break}return this.module.createI64(i64_low(a),i64_high(a));case 3:case 8:return this.module.createI64(i64_low(a),i64_high(a));case 11:if(i64_is_f32(a))return this.module.createF32(i64_to_f32(a));break;case 12:if(i64_is_f64(a))return this.module.createF64(i64_to_f64(a));break;case 13:break;default:assert(!1)}return i64_is_i32(a)?(this.currentType=d.Type.i32,this.module.createI32(i64_low(a))):(this.currentType=d.Type.i64,this.module.createI64(i64_low(a),i64_high(a)));case 2:return assert(!r),this.compileStaticString(e.value)}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.currentType=t,this.module.createUnreachable()},t.prototype.compileStaticString=function(e){var t=this.stringSegments.get(e);if(!t){var r=e.length,n=new Uint8Array(4+2*r);n[0]=255&r,n[1]=r>>>8&255,n[2]=r>>>16&255,n[3]=r>>>24&255;for(var i=0;i>>8&255;t=this.addMemorySegment(n,this.options.usizeType.byteSize),this.stringSegments.set(e,t)}var a=t.offset,o=this.program.types.get("string");return this.currentType=o||this.options.usizeType,this.options.isWasm64?this.module.createI64(i64_low(a),i64_high(a)):(assert(i64_is_i32(a)),this.module.createI32(i64_low(a)))},t.prototype.compileStaticArray=function(e,t){var r,n=!0,i=t.length,a=e.toNativeType();switch(a){case p.NativeType.I32:r=changetype(new Int32Array(i));break;case p.NativeType.I64:r=changetype(new Array(i));break;case p.NativeType.F32:r=changetype(new Float32Array(i));break;case p.NativeType.F64:r=changetype(new Float64Array(i));break;default:throw new Error("concrete type expected")}for(var o,s=new Array(i),c=0;c=0),i=this.compileExpression(n.targetExpression,this.options.usizeType,0),this.currentType=a.type,this.module.createLoad(a.type.size>>3,a.type.is(5),i,a.type.toNativeType(),a.memoryOffset);case u.ElementKind.PROPERTY:var o=a.getterPrototype;assert(null!=o);var l=o.resolve(null);return l?(assert(!l.parameters||!l.parameters.length),this.currentType=l.returnType,l.is(u.ElementFlags.INSTANCE)?(i=this.compileExpression(n.targetExpression,this.options.usizeType,0),this.currentType=l.returnType,this.makeCall(l,[i])):this.makeCall(l)):this.module.createUnreachable()}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileTernaryExpression=function(e,t){var r=f(this.compileExpression(e.condition,d.Type.u32,0),this.currentType,this.module),n=this.compileExpression(e.ifThen,t),i=this.compileExpression(e.ifElse,t);return this.module.createIf(r,n,i)},t.prototype.compileUnaryPostfixExpression=function(e,t){var r,n,i,a,o=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,!1),s=!1;switch(e.operator){case l.Token.PLUS_PLUS:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:s=!0;default:r=p.BinaryOp.AddI32,n=p.NativeType.I32,i=this.module.createI32(1);break;case 9:case 4:r=this.options.isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,n=this.options.isWasm64?p.NativeType.I64:p.NativeType.I32,i=this.currentType.toNativeOne(this.module);break;case 3:case 8:r=p.BinaryOp.AddI64,n=p.NativeType.I64,i=this.module.createI64(1);break;case 11:r=p.BinaryOp.AddF32,n=p.NativeType.F32,i=this.module.createF32(1);break;case 12:r=p.BinaryOp.AddF64,n=p.NativeType.F64,i=this.module.createF64(1);break;case 13:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;case l.Token.MINUS_MINUS:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:s=!0;default:r=p.BinaryOp.SubI32,n=p.NativeType.I32,i=this.module.createI32(1);break;case 9:case 4:r=this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,n=this.options.isWasm64?p.NativeType.I64:p.NativeType.I32,i=this.currentType.toNativeOne(this.module);break;case 3:case 8:r=p.BinaryOp.SubI64,n=p.NativeType.I64,i=this.module.createI64(1);break;case 11:r=p.BinaryOp.SubF32,n=p.NativeType.F32,i=this.module.createF32(1);break;case 12:r=p.BinaryOp.SubF64,n=p.NativeType.F64,i=this.module.createF64(1);break;case 13:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("concrete type expected")}break;default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("unary postfix operator expected")}var u=null;return t==d.Type.void?a=this.module.createBinary(r,o,i):(u=this.currentFunction.getTempLocal(this.currentType),a=this.module.createBinary(r,this.module.createGetLocal(u.index,n),i)),s&&(assert(this.currentType.is(36)),a=m(a,this.currentType,this.module)),a=this.compileAssignmentWithValue(e.operand,a,!1),t==d.Type.void?(assert(!u),a):(this.currentType=assert(u).type,this.currentFunction.freeTempLocal(u),this.module.createBlock(null,[this.module.createSetLocal(u.index,o),a,this.module.createGetLocal(u.index,n)],n))},t.prototype.compileUnaryPrefixExpression=function(e,t,r){void 0===r&&(r=!0);var n,i=!1,a=!1;switch(e.operator){case l.Token.PLUS:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();n=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,!1),i=this.currentType.is(36);break;case l.Token.MINUS:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();if(e.operand.kind!=h.NodeKind.LITERAL||1!=e.operand.literalKind&&0!=e.operand.literalKind)switch(n=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:i=!0;default:n=this.module.createBinary(p.BinaryOp.SubI32,this.module.createI32(0),n);break;case 9:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();case 4:n=this.module.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,this.currentType.toNativeZero(this.module),n);break;case 3:case 8:n=this.module.createBinary(p.BinaryOp.SubI64,this.module.createI64(0),n);break;case 11:n=this.module.createUnary(p.UnaryOp.NegF32,n);break;case 12:n=this.module.createUnary(p.UnaryOp.NegF64,n)}else n=this.compileLiteralExpression(e.operand,t,!0),this.addDebugLocation(n,e.range);break;case l.Token.PLUS_PLUS:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(a=!0,n=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:i=!0;default:n=this.module.createBinary(p.BinaryOp.AddI32,n,this.module.createI32(1));break;case 9:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();case 4:n=this.module.createBinary(this.options.isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,n,this.currentType.toNativeOne(this.module));break;case 3:case 8:n=this.module.createBinary(p.BinaryOp.AddI64,n,this.module.createI64(1));break;case 11:n=this.module.createBinary(p.BinaryOp.AddF32,n,this.module.createF32(1));break;case 12:n=this.module.createBinary(p.BinaryOp.AddF64,n,this.module.createF64(1))}break;case l.Token.MINUS_MINUS:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(a=!0,n=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:i=!0;default:n=this.module.createBinary(p.BinaryOp.SubI32,n,this.module.createI32(1));break;case 9:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();case 4:n=this.module.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,n,this.currentType.toNativeOne(this.module));break;case 3:case 8:n=this.module.createBinary(p.BinaryOp.SubI64,n,this.module.createI64(1));break;case 11:n=this.module.createBinary(p.BinaryOp.SubF32,n,this.module.createF32(1));break;case 12:n=this.module.createBinary(p.BinaryOp.SubF64,n,this.module.createF64(1))}break;case l.Token.EXCLAMATION:n=E(n=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,!0),this.currentType,this.module),this.currentType=d.Type.bool;break;case l.Token.TILDE:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();switch(n=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t.is(8)?d.Type.i64:t,t==d.Type.void?0:1,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:i=!0;default:n=this.module.createBinary(p.BinaryOp.XorI32,n,this.module.createI32(-1));break;case 9:if(this.currentType.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable();case 4:n=this.module.createBinary(this.options.isWasm64?p.BinaryOp.XorI64:p.BinaryOp.XorI32,n,this.currentType.toNativeNegOne(this.module));break;case 3:case 8:n=this.module.createBinary(p.BinaryOp.XorI64,n,this.module.createI64(-1,-1))}break;case l.Token.TYPEOF:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("not implemented");default:throw this.error(c.DiagnosticCode.Operation_not_supported,e.range),new Error("unary operator expected")}return i&&r&&(assert(this.currentType.is(36)),n=m(n,this.currentType,this.module)),a?this.compileAssignmentWithValue(e.operand,n,t!=d.Type.void):n},t.prototype.addDebugLocation=function(e,t){if(null!=this.options.sourceMap){var r=t.source;r.debugInfoIndex<0&&(r.debugInfoIndex=this.module.addDebugInfoFile(r.normalizedPath)),t.debugInfoRef=e,this.currentFunction.debugLocations||(this.currentFunction.debugLocations=[]),this.currentFunction.debugLocations.push(t)}},t}(c.DiagnosticEmitter);function m(e,t,r){switch(t.kind){case 0:e=r.createBinary(p.BinaryOp.ShrI32,r.createBinary(p.BinaryOp.ShlI32,e,r.createI32(24)),r.createI32(24));break;case 1:e=r.createBinary(p.BinaryOp.ShrI32,r.createBinary(p.BinaryOp.ShlI32,e,r.createI32(16)),r.createI32(16));break;case 5:e=r.createBinary(p.BinaryOp.AndI32,e,r.createI32(255));break;case 6:e=r.createBinary(p.BinaryOp.AndI32,e,r.createI32(65535));break;case 10:e=r.createBinary(p.BinaryOp.AndI32,e,r.createI32(1));break;case 13:throw new Error("concrete type expected")}return e}function E(e,t,r){switch(t.kind){default:e=r.createUnary(p.UnaryOp.EqzI32,e);break;case 3:case 8:e=r.createUnary(p.UnaryOp.EqzI64,e);break;case 9:case 4:e=r.createUnary(64==t.size?p.UnaryOp.EqzI64:p.UnaryOp.EqzI32,e);break;case 11:e=r.createBinary(p.BinaryOp.EqF32,e,r.createF32(0));break;case 12:e=r.createBinary(p.BinaryOp.EqF64,e,r.createF64(0));break;case 13:throw new Error("concrete type expected")}return e}function f(e,t,r){switch(t.kind){case 3:case 8:e=r.createBinary(p.BinaryOp.NeI64,e,r.createI64(0));break;case 9:case 4:64==t.size&&(e=r.createBinary(p.BinaryOp.NeI64,e,r.createI64(0)));break;case 11:e=r.createBinary(p.BinaryOp.NeF32,e,r.createF32(0));break;case 12:e=r.createBinary(p.BinaryOp.NeF64,e,r.createF64(0));break;case 13:throw new Error("concrete type expected")}return e}t.Compiler=y,t.makeSmallIntegerWrap=m,t.makeIsFalseish=E,t.makeIsTrueish=f},function(e,t){var r;r=function(){return this}();try{r=r||Function("return this")()||(0,eval)("this")}catch(e){"object"==typeof window&&(r=window)}e.exports=r},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=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.normalize=i,t.resolve=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(e"),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;h=!0}n=p.Node.createType(u,l,h,e.range(a,e.pos))}for(;e.skip(o.Token.OPENBRACKET);){var _=e.tokenPos;if(!e.skip(o.Token.CLOSEBRACKET))return r||this.error(s.DiagnosticCode._0_expected,e.range(),"]"),null;var y=e.range(_,e.pos);if(h=!1,e.skip(o.Token.BAR)){if(!e.skip(o.Token.NULL))return r||this.error(s.DiagnosticCode._0_expected,e.range(),"null"),null;h=!0}if(n=p.Node.createType(p.Node.createIdentifierExpression("Array",y),[n],h,e.range(a,e.pos)),h)break}return n},t.prototype.parseDecorator=function(e){var t=e.tokenPos;if(e.skip(o.Token.IDENTIFIER)){for(var r,n=e.readIdentifier(),i=p.Node.createIdentifierExpression(n,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;n=e.readIdentifier(),i=p.Node.createPropertyAccessExpression(i,p.Node.createIdentifierExpression(n,e.range()),e.range(t,e.pos))}if(!e.skip(o.Token.OPENPAREN))return p.Node.createDecorator(i,null,e.range(t,e.pos));if(r=this.parseArguments(e))return p.Node.createDecorator(i,r,e.range(t,e.pos))}else this.error(s.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseVariable=function(e,t,r){var n=t&&t.length?t[0].range.start:e.tokenPos,i=new Array,a=p.hasModifier(p.ModifierKind.DECLARE,t);do{var s=this.parseVariableDeclaration(e,a,t,r);if(!s)return null;i.push(s)}while(e.skip(o.Token.COMMA));var c=p.Node.createVariableStatement(i,t,r,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),c},t.prototype.parseVariableDeclaration=function(e,t,r,n){if(void 0===t&&(t=!1),!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;var i=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),a=null;e.skip(o.Token.COLON)&&(a=this.parseType(e));var c=null;if(e.skip(o.Token.EQUALS)){if(t&&this.error(s.DiagnosticCode.Initializers_are_not_allowed_in_ambient_contexts,e.range()),!(c=this.parseExpression(e,1)))return null}else p.hasModifier(p.ModifierKind.CONST,r)?p.hasModifier(p.ModifierKind.DECLARE,r)||this.error(s.DiagnosticCode._const_declarations_must_be_initialized,i.range):a||this.error(s.DiagnosticCode.Type_expected,e.range(e.pos));return p.Node.createVariableDeclaration(i,a,c,r,n,o.Range.join(i.range,e.range()))},t.prototype.parseEnum=function(e,t,r){var n=t&&t.length?t[0].range.start:e.tokenPos;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 a=new Array;if(!e.skip(o.Token.CLOSEBRACE)){do{var c=this.parseEnumValue(e);if(!c)return null;a.push(c)}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(),"}"),null}var u=p.Node.createEnumDeclaration(i,a,t,r,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),u},t.prototype.parseEnumValue=function(e){if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;var t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;return e.skip(o.Token.EQUALS)&&!(r=this.parseExpression(e,1))?null:p.Node.createEnumValueDeclaration(t,r,o.Range.join(t.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;return e.skip(o.Token.EXTENDS)&&!(r=this.parseType(e))?null: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)&&!(c=this.parseType(e)))return null;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){var n=t&&t.length?t[0].range.start:e.tokenPos;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()),a=null;if(e.skip(o.Token.LESSTHAN)&&!(a=this.parseTypeParameters(e)))return null;if(!e.skip(o.Token.OPENPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"("),null;var c=this.parseParameters(e);if(!c)return null;var u=p.hasModifier(p.ModifierKind.SET,t);u&&(1!=c.length&&this.error(s.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,i.range),c.length&&c[0].initializer&&this.error(s.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,i.range)),p.hasModifier(p.ModifierKind.GET,t)&&c.length&&this.error(s.DiagnosticCode.A_get_accessor_cannot_have_parameters,i.range);var l=null;if(e.skip(o.Token.COLON)){if(!(l=this.parseType(e,u)))return null}else u||this.error(s.DiagnosticCode.Type_expected,e.range(e.pos));var h=p.hasModifier(p.ModifierKind.DECLARE,t),d=null;if(e.skip(o.Token.OPENBRACE)){if(h&&this.error(s.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,e.range()),!(d=this.parseBlockStatement(e,!1)))return null}else h||this.error(s.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,e.range(e.pos));var _=p.Node.createFunctionDeclaration(i,a,c,l,d,t,r,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),_},t.prototype.parseFunctionExpression=function(e){var t,r=e.tokenPos,n=!1;if(e.token==o.Token.FUNCTION){if(n=!1,t=e.skip(o.Token.IDENTIFIER)?p.Node.createIdentifierExpression(e.readIdentifier(),e.range()):p.Node.createIdentifierExpression("",e.range(e.pos,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.createIdentifierExpression("",e.range(e.tokenPos,e.tokenPos));var i=this.parseParameters(e);return i?this.parseFunctionExpressionCommon(e,t,i,n,r):null},t.prototype.parseFunctionExpressionCommon=function(e,t,r,n,i){void 0===i&&(i=-1),i<0&&(i=t.range.start);var a,c=null;if(e.skip(o.Token.COLON)&&!(c=this.parseType(e)))return null;if(n&&!e.skip(o.Token.EQUALS_GREATERTHAN))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"=>"),null;if(n)a=this.parseStatement(e,!1);else{if(!e.skip(o.Token.OPENBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;a=this.parseBlockStatement(e,!1)}if(!a)return null;var u=p.Node.createFunctionDeclaration(t,null,r,c,a,null,null,e.range(i,e.pos));return p.Node.createFunctionExpression(u,n)},t.prototype.parseClass=function(e,t,r){var n=r&&r.length?r[0].range.start:t&&t.length?t[0].range.start:e.tokenPos;if(e.skip(o.Token.IDENTIFIER)){var i,a=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(o.Token.LESSTHAN)){if(!(i=this.parseTypeParameters(e)))return null}else i=[];var c=null;if(e.skip(o.Token.EXTENDS)&&!(c=this.parseType(e)))return null;var u=new Array;if(e.skip(o.Token.IMPLEMENTS))do{var l=this.parseType(e);if(!l)return null;u.push(l)}while(e.skip(o.Token.COMMA));if(e.skip(o.Token.OPENBRACE)){var h=new Array;if(!e.skip(o.Token.CLOSEBRACE)){var d=p.hasModifier(p.ModifierKind.DECLARE,t);do{var _=this.parseClassMember(e,d);if(!_)return null;h.push(_)}while(!e.skip(o.Token.CLOSEBRACE))}return p.Node.createClassDeclaration(a,i,c,u,h,t,r,e.range(n,e.pos))}this.error(s.DiagnosticCode._0_expected,e.range(),"{")}else this.error(s.DiagnosticCode.Identifier_expected,e.range());return null},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 a=null;e.skip(o.Token.PUBLIC)?a=p.addModifier(p.Node.createModifier(p.ModifierKind.PUBLIC,e.range()),a):e.skip(o.Token.PRIVATE)?a=p.addModifier(p.Node.createModifier(p.ModifierKind.PRIVATE,e.range()),a):e.skip(o.Token.PROTECTED)&&(a=p.addModifier(p.Node.createModifier(p.ModifierKind.PROTECTED,e.range()),a)),e.skip(o.Token.STATIC)?a=p.addModifier(p.Node.createModifier(p.ModifierKind.STATIC,e.range()),a):e.skip(o.Token.ABSTRACT)&&(a=p.addModifier(p.Node.createModifier(p.ModifierKind.ABSTRACT,e.range()),a)),e.skip(o.Token.READONLY)&&(a=p.addModifier(p.Node.createModifier(p.ModifierKind.READONLY,e.range()),a)),e.mark();var c=!1,u=!1;(c=e.skip(o.Token.GET))?e.peek(!0,!0)!=o.Token.IDENTIFIER||e.nextTokenOnNewLine?(e.reset(),c=!1):a=p.addModifier(p.Node.createModifier(p.ModifierKind.GET,e.range()),a):(u=e.skip(o.Token.SET))&&(e.peek(!0,!0)!=o.Token.IDENTIFIER||e.nextTokenOnNewLine?(e.reset(),u=!1):a=p.addModifier(p.Node.createModifier(p.ModifierKind.SET,e.range()),a));var l=e.skip(o.Token.CONSTRUCTOR);if(l||e.skip(o.Token.IDENTIFIER)){var h=l?p.Node.createConstructorExpression(e.range()):p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),d=null;if(e.skip(o.Token.LESSTHAN)&&(l&&this.error(s.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,e.range()),!(d=this.parseTypeParameters(e))))return null;if(e.skip(o.Token.OPENPAREN)){var _=this.parseParameters(e);if(!_)return null;c&&_.length&&this.error(s.DiagnosticCode.A_get_accessor_cannot_have_parameters,h.range),u&&(1!=_.length&&this.error(s.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,h.range),_.length&&_[0].initializer&&this.error(s.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,h.range));var y=null;if(e.skip(o.Token.COLON)){if(h.kind==p.NodeKind.CONSTRUCTOR?this.error(s.DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration,e.range()):u&&this.error(s.DiagnosticCode.A_set_accessor_cannot_have_a_return_type_annotation,e.range()),!(y=this.parseType(e,h.kind==p.NodeKind.CONSTRUCTOR||u)))return null}else u||h.kind==p.NodeKind.CONSTRUCTOR||this.error(s.DiagnosticCode.Type_expected,e.range());var m=null;if(e.skip(o.Token.OPENBRACE)){if(t&&this.error(s.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,e.range()),!(m=this.parseBlockStatement(e,!1)))return null}else t||this.error(s.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,e.range());var E=p.Node.createMethodDeclaration(h,d,_,y,m,a,n,e.range(r,e.pos));return e.skip(o.Token.SEMICOLON),E}if(l)this.error(s.DiagnosticCode.Constructor_implementation_is_missing,h.range);else{if(!c&&!u){var f;(f=p.getModifier(p.ModifierKind.ABSTRACT,a))&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,f.range,"abstract"),(f=p.getModifier(p.ModifierKind.GET,a))&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,f.range,"get"),(f=p.getModifier(p.ModifierKind.SET,a))&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,f.range,"set");var T=null;if(e.skip(o.Token.COLON)){if(!(T=this.parseType(e)))return null}else this.error(s.DiagnosticCode.Type_expected,e.range());var g=null;if(e.skip(o.Token.EQUALS)&&!(g=this.parseExpression(e)))return null;var A=p.Node.createFieldDeclaration(h,T,g,a,n,e.range(r,e.pos));return e.skip(o.Token.SEMICOLON),A}this.error(s.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,h.range)}}else this.error(s.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseNamespace=function(e,t,r){var n=t&&t.length?t[0].range.start:e.tokenPos;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;!e.skip(o.Token.CLOSEBRACE);){var c=this.parseTopLevelStatement(e,!0);if(!c)return null;a.push(c)}var u=p.Node.createNamespaceDeclaration(i,a,t,r,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),u}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){var r=t&&t.length?t[0].range.start:e.tokenPos;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,u=p.Node.createStringLiteralExpression(e.readString(),e.range());return n?(assert(!r),c=p.Node.createImportStatementWithWildcard(n,u,e.range(t,e.pos))):c=p.Node.createImportStatement(r,u,e.range(t,e.pos)),this.seenlog.has(c.normalizedPath)||(this.backlog.push(c.normalizedPath),this.seenlog.add(c.normalizedPath)),e.skip(o.Token.SEMICOLON),c}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,o.Range.join(t,e.range()));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){switch(void 0===t&&(t=!1),e.mark(),e.next()){case o.Token.BREAK:return this.parseBreak(e);case o.Token.CONST:return this.parseVariable(e,[p.Node.createModifier(p.ModifierKind.CONST,e.range())],null);case o.Token.CONTINUE:return this.parseContinue(e);case o.Token.DO:return this.parseDoStatement(e);case o.Token.FOR:return this.parseForStatement(e);case o.Token.IF:return this.parseIfStatement(e);case o.Token.LET:return this.parseVariable(e,[p.Node.createModifier(p.ModifierKind.LET,e.range())],null);case o.Token.VAR:return this.parseVariable(e,null,null);case o.Token.OPENBRACE:return this.parseBlockStatement(e,t);case o.Token.RETURN:return t&&this.error(s.DiagnosticCode.A_return_statement_can_only_be_used_within_a_function_body,e.range()),this.parseReturn(e);case o.Token.SEMICOLON:return p.Node.createEmptyStatement(e.range(e.tokenPos));case o.Token.SWITCH:return this.parseSwitchStatement(e);case o.Token.THROW:return this.parseThrowStatement(e);case o.Token.TRY:return this.parseTryStatement(e);case o.Token.TYPE:return this.parseTypeDeclaration(e,null);case o.Token.VOID:return this.parseVoidStatement(e);case o.Token.WHILE:return this.parseWhileStatement(e);default:return e.reset(),this.parseExpressionStatement(e)}},t.prototype.parseBlockStatement=function(e,t){for(var r=e.tokenPos,n=new Array;!e.skip(o.Token.CLOSEBRACE);){var i=this.parseStatement(e,t);if(!i)return null;n.push(i)}var a=p.Node.createBlockStatement(n,e.range(r,e.pos));return e.skip(o.Token.SEMICOLON),a},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.LET)||e.skip(o.Token.CONST)||e.skip(o.Token.VAR))r=this.parseVariable(e,null,null);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 a=this.parseStatement(e);return a?p.Node.createForStatement(r,n?n.expression:null,i,a,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){void 0===t&&(t=null),void 0===r&&(r=null);var n=r&&r.length?r[0].range.start:t&&t.length?t[0].range.start:e.tokenPos;if(e.skip(o.Token.IDENTIFIER)){var i=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(o.Token.EQUALS)){var a=this.parseType(e);if(!a)return null;var c=p.Node.createTypeDeclaration(i,a,t,r,e.range(n,e.pos));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.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,a=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!=a)return t==o.Token.NEW?(i=this.parseExpression(e,18))?i.kind==p.NodeKind.CALL?p.Node.createNewExpression(i.expression,i.typeArguments,i.arguments,e.range(r,e.pos)):(this.error(s.DiagnosticCode.Operation_not_supported,e.range()),null):null:(i=this.parseExpression(e,a))?(t!=o.Token.PLUS_PLUS&&t!=o.Token.MINUS_MINUS||i.kind!=p.NodeKind.IDENTIFIER&&i.kind!=p.NodeKind.ELEMENTACCESS&&i.kind!=p.NodeKind.PROPERTYACCESS&&this.error(s.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,i.range),p.Node.createUnaryPrefixExpression(t,i,e.range(r,e.pos))):null;switch(t){case o.Token.OPENPAREN:if(e.skip(o.Token.CLOSEPAREN))return this.parseFunctionExpressionCommon(e,p.Node.createIdentifierExpression("",e.range(r,r)),[],!0);e.mark();var c=!0;do{switch(e.next(!0)){case o.Token.DOT_DOT_DOT:return e.reset(),this.parseFunctionExpression(e);case o.Token.IDENTIFIER:switch(e.readIdentifier(),e.next()){case o.Token.CLOSEPAREN:if(!e.skip(o.Token.EQUALS_GREATERTHAN)){c=!1;break}case o.Token.QUESTION:case o.Token.COLON:return e.reset(),this.parseFunctionExpression(e);case o.Token.COMMA:break;default:c=!1}break;default:c=!1}}while(c);return e.reset(),(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 u=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(u.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(u,e.range(r,e.pos));case o.Token.LESSTHAN:var l=this.parseType(e);return l?e.skip(o.Token.GREATERTHAN)?(n=this.parseExpression(e,18))?p.Node.createAssertionExpression(0,n,l,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 h=e.readRegexpPattern();return e.skip(o.Token.SLASH)?p.Node.createRegexpLiteralExpression(h,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){if(e.mark(),!e.skip(o.Token.LESSTHAN))return null;var t=new Array;do{var r=this.parseType(e,!0,!0);if(!r)return e.reset(),null;t.push(r)}while(e.skip(o.Token.COMMA));return e.skip(o.Token.GREATERTHAN)&&e.skip(o.Token.OPENPAREN)?t:(e.reset(),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;var n,i=r.range.start,a=this.tryParseTypeArgumentsBeforeArguments(e);if(a||e.skip(o.Token.OPENPAREN)){var c=this.parseArguments(e);if(!c)return null;r=p.Node.createCallExpression(r,a,c,e.range(i,e.pos))}for(var u,d=null;(u=l(n=e.peek()))>=t;)switch(e.next(),n){case o.Token.AS:var _=this.parseType(e);if(!_)return null;r=p.Node.createAssertionExpression(1,r,_,e.range(i,e.pos));break;case o.Token.OPENBRACKET:if(!(d=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,d,e.range(i,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(n,r,e.range(i,e.pos));break;case o.Token.QUESTION:var y=this.parseExpression(e);if(!y)return null;if(!e.skip(o.Token.COLON))return this.error(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(i,e.pos));break;case o.Token.COMMA:var E=[r];do{if(!(r=this.parseExpression(e,1)))return null;E.push(r)}while(e.skip(o.Token.COMMA));r=p.Node.createCommaExpression(E,e.range(i,e.pos));break;default:if(!(d=this.parseExpression(e,h(n)?u:u+1)))return null;if(n==o.Token.DOT)if(d.kind==p.NodeKind.IDENTIFIER)r=p.Node.createPropertyAccessExpression(r,d,e.range(i,e.pos));else{if(d.kind!=p.NodeKind.CALL)return this.error(s.DiagnosticCode.Identifier_expected,d.range),null;var f=d;if(f.expression.kind!=p.NodeKind.IDENTIFIER)return this.error(s.DiagnosticCode.Identifier_expected,f.expression.range),null;f.expression=p.Node.createPropertyAccessExpression(r,f.expression,e.range(i,e.pos)),r=f}else r=p.Node.createBinaryExpression(n,r,d,e.range(i,e.pos))}return r},t}(s.DiagnosticEmitter);function l(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 h(e){switch(e){case o.Token.EQUALS:case o.Token.PLUS_EQUALS:case o.Token.MINUS_EQUALS:case o.Token.ASTERISK_ASTERISK_EQUALS:case o.Token.ASTERISK_EQUALS:case o.Token.SLASH_EQUALS:case o.Token.PERCENT_EQUALS:case o.Token.LESSTHAN_LESSTHAN_EQUALS:case o.Token.GREATERTHAN_GREATERTHAN_EQUALS:case o.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:case o.Token.AMPERSAND_EQUALS:case o.Token.CARET_EQUALS:case o.Token.BAR_EQUALS:case o.Token.QUESTION:case o.Token.ASTERISK_ASTERISK:return!0;default:return!1}}t.Parser=u,function(e){e[e.COMMA=0]="COMMA",e[e.SPREAD=1]="SPREAD",e[e.YIELD=2]="YIELD",e[e.ASSIGNMENT=3]="ASSIGNMENT",e[e.CONDITIONAL=4]="CONDITIONAL",e[e.LOGICAL_OR=5]="LOGICAL_OR",e[e.LOGICAL_AND=6]="LOGICAL_AND",e[e.BITWISE_OR=7]="BITWISE_OR",e[e.BITWISE_XOR=8]="BITWISE_XOR",e[e.BITWISE_AND=9]="BITWISE_AND",e[e.EQUALITY=10]="EQUALITY",e[e.RELATIONAL=11]="RELATIONAL",e[e.SHIFT=12]="SHIFT",e[e.ADDITIVE=13]="ADDITIVE",e[e.MULTIPLICATIVE=14]="MULTIPLICATIVE",e[e.EXPONENTIATED=15]="EXPONENTIATED",e[e.UNARY_PREFIX=16]="UNARY_PREFIX",e[e.UNARY_POSTFIX=17]="UNARY_POSTFIX",e[e.CALL=18]="CALL",e[e.MEMBERACCESS=19]="MEMBERACCESS",e[e.GROUPING=20]="GROUPING",e[e.INVALID=-1]="INVALID"}(t.Precedence||(t.Precedence={}))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(1),i=function(){function e(){this.text=[],this.functionId=0}return e.decompile=function(t){var r=new e;return r.decompile(t),r.finish()},e.prototype.decompile=function(e){throw new Error("not implemented")},e.prototype.decompileFunction=function(e){var t=n.readString(_BinaryenFunctionGetName(e))||"$"+this.functionId.toString(10),r=_BinaryenFunctionGetBody(e);this.push("function "),this.push(t),this.push("(");for(var i=0,o=_BinaryenFunctionGetNumParams(e);i0&&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(6),i=r(12),a=r(0);t.formatDiagnostic=a.formatDiagnosticMessage;var o=r(11);t.parseFile=function(e,t,r,n){return void 0===r&&(r=!1),void 0===n&&(n=null),n||(n=new o.Parser,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?f:E;if(t){if(e<0)return f;if(e>=_)return v}else{if(e<=-y)return N;if(e+1>=y)return I}return e<0?c(-e,t).neg():p(e%d|0,e/d|0,t)}function p(e,t,r){return new n(e,t,r)}n.fromInt=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 E;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=E,o=0;o>>0:this.low},S.toNumber=function(){return this.unsigned?(this.high>>>0)*d+(this.low>>>0):this.high*d+(this.low>>>0)},S.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}},S.getHighBits=function(){return this.high},S.getHighBitsUnsigned=function(){return this.high>>>0},S.getLowBits=function(){return this.low},S.getLowBitsUnsigned=function(){return this.low>>>0},S.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},S.isOdd=function(){return 1==(1&this.low)},S.isEven=function(){return 0==(1&this.low)},S.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)},S.eq=S.equals,S.notEquals=function(e){return!this.eq(e)},S.neq=S.notEquals,S.ne=S.notEquals,S.lessThan=function(e){return this.comp(e)<0},S.lt=S.lessThan,S.lessThanOrEqual=function(e){return this.comp(e)<=0},S.lte=S.lessThanOrEqual,S.le=S.lessThanOrEqual,S.greaterThan=function(e){return this.comp(e)>0},S.gt=S.greaterThan,S.greaterThanOrEqual=function(e){return this.comp(e)>=0},S.gte=S.greaterThanOrEqual,S.ge=S.greaterThanOrEqual,S.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},S.comp=S.compare,S.negate=function(){return!this.unsigned&&this.eq(N)?N:this.not().add(T)},S.neg=S.negate,S.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,d=0,_=0;return d+=(_+=a+(65535&e.low))>>>16,l+=(d+=n+c)>>>16,u+=(l+=r+s)>>>16,u+=t+o,p((d&=65535)<<16|(_&=65535),(u&=65535)<<16|(l&=65535),this.unsigned)},S.subtract=function(e){return i(e)||(e=h(e)),this.add(e.neg())},S.sub=S.subtract,S.multiply=function(e){if(this.isZero())return E;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 E;if(this.eq(N))return e.isOdd()?N:E;if(e.eq(N))return this.isOdd()?N:E;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,d=65535&e.low,_=0,y=0,f=0,T=0;return f+=(T+=o*d)>>>16,y+=(f+=a*d)>>>16,f&=65535,y+=(f+=o*l)>>>16,_+=(y+=n*d)>>>16,y&=65535,_+=(y+=a*l)>>>16,y&=65535,_+=(y+=o*u)>>>16,_+=t*d+n*l+a*u+o*s,p((f&=65535)<<16|(T&=65535),(_&=65535)<<16|(y&=65535),this.unsigned)},S.mul=S.multiply,S.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?f:E;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return f;if(e.gt(this.shru(1)))return g;a=f}else{if(this.eq(N))return e.eq(T)||e.eq(A)?N:e.eq(N)?T:(t=this.shr(1).div(e).shl(1)).eq(E)?e.isNegative()?T:A:(n=this.sub(e.mul(t)),a=t.add(n.div(e)));else if(e.eq(N))return this.unsigned?f:E;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=E}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),d=l.mul(e);d.isNegative()||d.gt(n);)d=(l=c(t-=s,this.unsigned)).mul(e);l.isZero()&&(l=T),a=a.add(l),n=n.sub(d)}return a},S.div=S.divide,S.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))},S.mod=S.modulo,S.rem=S.modulo,S.not=function(){return p(~this.low,~this.high,this.unsigned)},S.and=function(e){return i(e)||(e=h(e)),p(this.low&e.low,this.high&e.high,this.unsigned)},S.or=function(e){return i(e)||(e=h(e)),p(this.low|e.low,this.high|e.high,this.unsigned)},S.xor=function(e){return i(e)||(e=h(e)),p(this.low^e.low,this.high^e.high,this.unsigned)},S.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)},S.shr=S.shiftRight,S.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)},S.shru=S.shiftRightUnsigned,S.shr_u=S.shiftRightUnsigned,S.toSigned=function(){return this.unsigned?p(this.low,this.high,!1):this},S.toUnsigned=function(){return this.unsigned?this:p(this.low,this.high,!0)},S.toBytes=function(e){return e?this.toBytesLE():this.toBytesBE()},S.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]},S.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(14);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(7))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0});var n=r(6),i=r(0),a=r(5),o=r(1),s=r(2);function c(e,t){var r,n;return e.options.isWasm64?(r=e.precomputeExpression(t,a.Type.usize64),(_BinaryenExpressionGetId(r)!=o.ExpressionId.Const||_BinaryenExpressionGetType(r)!=o.NativeType.I64||0!=_BinaryenConstGetValueI64High(r)||(n=_BinaryenConstGetValueI64Low(r))<0)&&(e.error(i.DiagnosticCode.Operation_not_supported,t.range),n=-1)):(r=e.precomputeExpression(t,a.Type.usize32),(_BinaryenExpressionGetId(r)!=o.ExpressionId.Const||_BinaryenExpressionGetType(r)!=o.NativeType.I32||(n=_BinaryenConstGetValueI32(r))<0)&&(e.error(i.DiagnosticCode.Operation_not_supported,t.range),n=-1)),n}function p(e,t,r){var n=e.module,i=n.createUnreachable(),a=e.program.elements.get("abort"),o=e.program.types.get("string");if(a&&a.kind==s.ElementKind.FUNCTION_PROTOTYPE&&o){var c=a.resolve();c&&e.compileFunction(c)&&(assert(c.parameters&&4==c.parameters.length),i=n.createBlock(null,[e.makeCall(c,[null!=t?e.compileExpression(t,o):e.options.usizeType.toNativeZero(n),e.compileStaticString(r.range.source.normalizedPath),n.createI32(r.range.line),n.createI32(r.range.column)]),i]))}return i}t.compileGetConstant=function(e,t,r){switch(t.internalName){case"NaN":return e.currentType==a.Type.f32?e.module.createF32(NaN):(e.currentType=a.Type.f64,e.module.createF64(NaN));case"Infinity":return e.currentType==a.Type.f32?e.module.createF32(1/0):(e.currentType=a.Type.f64,e.module.createF64(1/0));case"HEAP_BASE":return e.currentType=e.options.usizeType,e.module.createGetGlobal("HEAP_BASE",e.currentType.toNativeType())}return e.error(i.DiagnosticCode.Operation_not_supported,r.range),e.module.createUnreachable()},t.compileCall=function(e,t,r,s,u,l){var h,d,_,y,m,E,f,T,g=e.module;switch(t.internalName){case"isNaN":if(e.currentType=a.Type.bool,1!=s.length)return r&&1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(e.currentType.kind){case 11:m=e.currentFunction.getAndFreeTempLocal(a.Type.f32),y=g.createBinary(o.BinaryOp.NeF32,g.createTeeLocal(m.index,h),g.createGetLocal(m.index,o.NativeType.F32));break;case 12:m=e.currentFunction.getAndFreeTempLocal(a.Type.f64),y=g.createBinary(o.BinaryOp.NeF64,g.createTeeLocal(m.index,h),g.createGetLocal(m.index,o.NativeType.F64));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break;default:y=g.createI32(0)}return e.currentType=a.Type.bool,y;case"isFinite":if(e.currentType=a.Type.bool,1!=s.length)return r&&1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.createUnreachable();if(r){if(1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(e.currentType.kind){case 11:m=e.currentFunction.getAndFreeTempLocal(a.Type.f32),y=g.createSelect(g.createBinary(o.BinaryOp.NeF32,g.createUnary(o.UnaryOp.AbsF32,g.createTeeLocal(m.index,h)),g.createF32(1/0)),g.createI32(0),g.createBinary(o.BinaryOp.EqF32,g.createGetLocal(m.index,o.NativeType.F32),g.createGetLocal(m.index,o.NativeType.F32)));break;case 12:m=e.currentFunction.getAndFreeTempLocal(a.Type.f64),y=g.createSelect(g.createBinary(o.BinaryOp.NeF64,g.createUnary(o.UnaryOp.AbsF64,g.createTeeLocal(m.index,h)),g.createF64(1/0)),g.createI32(0),g.createBinary(o.BinaryOp.EqF64,g.createGetLocal(m.index,o.NativeType.F64),g.createGetLocal(m.index,o.NativeType.F64)));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break;default:y=g.createI32(1)}return e.currentType=a.Type.bool,y;case"clz":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.i32,0);switch(e.currentType.kind){default:y=g.createUnary(o.UnaryOp.ClzI32,h);break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}case 4:y=g.createUnary(e.options.isWasm64?o.UnaryOp.ClzI64:o.UnaryOp.ClzI32,h);break;case 3:case 8:y=g.createUnary(o.UnaryOp.ClzI64,h);break;case 11:case 12:case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"ctz":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.i32,0);switch(e.currentType.kind){default:y=g.createUnary(o.UnaryOp.CtzI32,h);break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}case 4:y=g.createUnary(e.options.isWasm64?o.UnaryOp.CtzI64:o.UnaryOp.CtzI32,h);break;case 3:case 8:y=g.createUnary(o.UnaryOp.CtzI64,h);break;case 11:case 12:case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"popcnt":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.i32,0);switch(e.currentType.kind){default:y=g.createUnary(o.UnaryOp.PopcntI32,h);break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}case 4:y=g.createUnary(e.options.isWasm64?o.UnaryOp.PopcntI64:o.UnaryOp.PopcntI32,h);break;case 3:case 8:y=g.createUnary(o.UnaryOp.PopcntI64,h);break;case 11:case 12:case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"rotl":if(2!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"2",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.i32,0);switch(d=e.compileExpression(s[1],e.currentType),e.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=n.makeSmallIntegerWrap(g.createBinary(o.BinaryOp.RotlI32,h,d),e.currentType,g);case 2:case 7:y=g.createBinary(o.BinaryOp.RotlI32,h,d);break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}case 4:y=g.createBinary(e.options.isWasm64?o.BinaryOp.RotlI64:o.BinaryOp.RotlI32,h,d);break;case 3:case 8:y=g.createBinary(o.BinaryOp.RotlI64,h,d);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"rotr":if(2!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"2",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.i32,0);switch(d=e.compileExpression(s[1],e.currentType),e.currentType.kind){case 0:case 1:case 5:case 6:case 10:y=n.makeSmallIntegerWrap(g.createBinary(o.BinaryOp.RotrI32,h,d),e.currentType,g);break;case 2:case 7:y=g.createBinary(o.BinaryOp.RotrI32,h,d);break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}case 4:y=g.createBinary(e.options.isWasm64?o.BinaryOp.RotrI64:o.BinaryOp.RotrI32,h,d);break;case 3:case 8:y=g.createBinary(o.BinaryOp.RotrI64,h,d);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"abs":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(e.currentType.kind){case 0:case 1:case 2:m=e.currentFunction.getAndFreeTempLocal(a.Type.i32),y=g.createSelect(g.createTeeLocal(m.index,h),g.createBinary(o.BinaryOp.SubI32,g.createI32(0),g.createGetLocal(m.index,o.NativeType.I32)),g.createBinary(o.BinaryOp.GtI32,g.createGetLocal(m.index,o.NativeType.I32),g.createI32(0)));break;case 4:m=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),y=g.createSelect(g.createTeeLocal(m.index,h),g.createBinary(e.options.isWasm64?o.BinaryOp.SubI64:o.BinaryOp.SubI32,e.options.usizeType.toNativeZero(g),g.createGetLocal(m.index,e.options.nativeSizeType)),g.createBinary(e.options.isWasm64?o.BinaryOp.GtI64:o.BinaryOp.GtI32,g.createGetLocal(m.index,e.options.nativeSizeType),e.options.usizeType.toNativeZero(g)));break;case 3:m=e.currentFunction.getAndFreeTempLocal(a.Type.i64),y=g.createSelect(g.createTeeLocal(m.index,h),g.createBinary(o.BinaryOp.SubI64,g.createI64(0,0),g.createGetLocal(m.index,o.NativeType.I64)),g.createBinary(o.BinaryOp.GtI64,g.createGetLocal(m.index,o.NativeType.I64),g.createI64(0,0)));break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}case 5:case 6:case 7:case 8:case 10:y=h;break;case 11:y=g.createUnary(o.UnaryOp.AbsF32,h);break;case 12:y=g.createUnary(o.UnaryOp.AbsF64,h);break;case 13:y=g.createUnreachable();break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"max":if(2!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"2",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(d=e.compileExpression(s[1],e.currentType),e.currentType.kind){case 0:case 1:case 2:m=e.currentFunction.getTempLocal(a.Type.i32),E=e.currentFunction.getAndFreeTempLocal(a.Type.i32),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(o.BinaryOp.GtI32,g.createGetLocal(m.index,o.NativeType.I32),g.createGetLocal(E.index,o.NativeType.I32)));break;case 5:case 6:case 7:case 10:m=e.currentFunction.getTempLocal(a.Type.i32),E=e.currentFunction.getAndFreeTempLocal(a.Type.i32),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(o.BinaryOp.GtU32,g.createGetLocal(m.index,o.NativeType.I32),g.createGetLocal(E.index,o.NativeType.I32)));break;case 3:m=e.currentFunction.getTempLocal(a.Type.i64),E=e.currentFunction.getAndFreeTempLocal(a.Type.i64),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(o.BinaryOp.GtI64,g.createGetLocal(m.index,o.NativeType.I64),g.createGetLocal(E.index,o.NativeType.I64)));break;case 8:m=e.currentFunction.getTempLocal(a.Type.i64),E=e.currentFunction.getAndFreeTempLocal(a.Type.i64),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(o.BinaryOp.GtU64,g.createGetLocal(m.index,o.NativeType.I64),g.createGetLocal(E.index,o.NativeType.I64)));break;case 4:m=e.currentFunction.getTempLocal(e.options.usizeType),E=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(e.options.isWasm64?o.BinaryOp.GtI64:o.BinaryOp.GtI32,g.createGetLocal(m.index,e.options.nativeSizeType),g.createGetLocal(E.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}m=e.currentFunction.getTempLocal(e.options.usizeType),E=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(e.options.isWasm64?o.BinaryOp.GtU64:o.BinaryOp.GtU32,g.createGetLocal(m.index,e.options.nativeSizeType),g.createGetLocal(E.index,e.options.nativeSizeType)));break;case 11:y=g.createBinary(o.BinaryOp.MaxF32,h,d);break;case 12:y=g.createBinary(o.BinaryOp.MaxF64,h,d);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"min":if(2!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"2",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(d=e.compileExpression(s[1],e.currentType),e.currentType.kind){case 0:case 1:case 2:m=e.currentFunction.getTempLocal(a.Type.i32),E=e.currentFunction.getAndFreeTempLocal(a.Type.i32),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(o.BinaryOp.LtI32,g.createGetLocal(m.index,o.NativeType.I32),g.createGetLocal(E.index,o.NativeType.I32)));break;case 5:case 6:case 7:case 10:m=e.currentFunction.getTempLocal(a.Type.i32),E=e.currentFunction.getAndFreeTempLocal(a.Type.i32),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(o.BinaryOp.LtU32,g.createGetLocal(m.index,o.NativeType.I32),g.createGetLocal(E.index,o.NativeType.I32)));break;case 3:m=e.currentFunction.getTempLocal(a.Type.i64),E=e.currentFunction.getAndFreeTempLocal(a.Type.i64),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(o.BinaryOp.LtI64,g.createGetLocal(m.index,o.NativeType.I64),g.createGetLocal(E.index,o.NativeType.I64)));break;case 8:m=e.currentFunction.getTempLocal(a.Type.i64),E=e.currentFunction.getAndFreeTempLocal(a.Type.i64),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(o.BinaryOp.LtU64,g.createGetLocal(m.index,o.NativeType.I64),g.createGetLocal(E.index,o.NativeType.I64)));break;case 4:m=e.currentFunction.getTempLocal(e.options.usizeType),E=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(e.options.isWasm64?o.BinaryOp.LtI64:o.BinaryOp.LtI32,g.createGetLocal(m.index,e.options.nativeSizeType),g.createGetLocal(E.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}m=e.currentFunction.getTempLocal(e.options.usizeType),E=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(m),y=g.createSelect(g.createTeeLocal(m.index,h),g.createTeeLocal(E.index,d),g.createBinary(e.options.isWasm64?o.BinaryOp.LtU64:o.BinaryOp.LtU32,g.createGetLocal(m.index,e.options.nativeSizeType),g.createGetLocal(E.index,e.options.nativeSizeType)));break;case 11:y=g.createBinary(o.BinaryOp.MinF32,h,d);break;case 12:y=g.createBinary(o.BinaryOp.MinF64,h,d);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"ceil":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(e.currentType.kind){case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}default:y=h;break;case 11:y=g.createUnary(o.UnaryOp.CeilF32,h);break;case 12:y=g.createUnary(o.UnaryOp.CeilF64,h);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"floor":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(e.currentType.kind){case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}default:y=h;break;case 11:y=g.createUnary(o.UnaryOp.FloorF32,h);break;case 12:y=g.createUnary(o.UnaryOp.FloorF64,h);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"copysign":if(2!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"2",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(d=e.compileExpression(s[1],e.currentType),e.currentType.kind){case 11:y=g.createBinary(o.BinaryOp.CopysignF32,h,d);break;case 12:y=g.createBinary(o.BinaryOp.CopysignF64,h,d);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"nearest":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(e.currentType.kind){case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}default:y=h;break;case 11:y=g.createUnary(o.UnaryOp.NearestF32,h);break;case 12:y=g.createUnary(o.UnaryOp.NearestF64,h);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"reinterpret":if(1!=s.length)return r&&1==r.length||(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0")),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.createUnreachable();if(!r||1!=r.length)return r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0"),g.createUnreachable();switch(r[0].kind){case 2:case 7:h=e.compileExpression(s[0],a.Type.f32),y=g.createUnary(o.UnaryOp.ReinterpretF32,h);break;case 3:case 8:h=e.compileExpression(s[0],a.Type.f64),y=g.createUnary(o.UnaryOp.ReinterpretF64,h);break;case 9:if(r[0].isReference)return e.error(i.DiagnosticCode.Operation_not_supported,l.range),e.currentType=r[0],g.createUnreachable();case 4:h=e.compileExpression(s[0],e.options.isWasm64?a.Type.f64:a.Type.f32),y=g.createUnary(e.options.isWasm64?o.UnaryOp.ReinterpretF64:o.UnaryOp.ReinterpretF32,h);break;case 11:h=e.compileExpression(s[0],a.Type.u32),y=g.createUnary(o.UnaryOp.ReinterpretI32,h);break;case 12:h=e.compileExpression(s[0],a.Type.u64),y=g.createUnary(o.UnaryOp.ReinterpretI64,h);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return e.currentType=r[0],y;case"sqrt":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(e.currentType.kind){case 11:y=g.createUnary(o.UnaryOp.SqrtF32,h);break;case 12:y=g.createUnary(o.UnaryOp.SqrtF64,h);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"trunc":if(1!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),g.createUnreachable();if(r&&r.length){if(e.currentType=r[0],1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(e.currentType.kind){case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable();break}default:y=h;break;case 11:y=g.createUnary(o.UnaryOp.TruncF32,h);break;case 12:y=g.createUnary(o.UnaryOp.TruncF64,h);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"load":return s.length<1||s.length>2?(r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0"),s.length<1?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,l.range,"1",s.length.toString(10)):e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"2",s.length.toString(10)),g.createUnreachable()):r&&1==r.length?(h=e.compileExpression(s[0],e.options.usizeType),(T=2==s.length?c(e,s[1]):0)<0?g.createUnreachable():(e.currentType=r[0],g.createLoad(r[0].byteSize,r[0].is(5),h,r[0].is(4)&&u.is(4)&&u.size>r[0].size?(e.currentType=u).toNativeType():(e.currentType=r[0]).toNativeType(),T))):(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0"),g.createUnreachable());case"store":return e.currentType=a.Type.void,s.length<2||s.length>3?(r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0"),s.length<2?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,l.range,"2",s.length.toString(10)):e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"3",s.length.toString(10)),g.createUnreachable()):r&&1==r.length?(h=e.compileExpression(s[0],e.options.usizeType),d=e.compileExpression(s[1],r[0],r[0].is(4)?0:1),e.currentType.is(4)&&r[0].is(4)&&r[0].size>e.currentType.size?(d=e.convertExpression(d,e.currentType,r[0],1,s[1]),f=r[0]):f=e.currentType,(T=3==s.length?c(e,s[2]):0)<0?g.createUnreachable():(e.currentType=a.Type.void,g.createStore(r[0].byteSize,h,d,f.toNativeType(),T))):(e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0"),g.createUnreachable());case"sizeof":return e.currentType=e.options.usizeType,0!=s.length?(r&&1==r.length||e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0"),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"0",s.length.toString(10)),g.createUnreachable()):r?1!=r.length?(e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),g.createUnreachable()):y=e.options.isWasm64?g.createI64(r[0].byteSize,0):g.createI32(r[0].byteSize):(e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1","0"),g.createUnreachable());case"select":if(3!=s.length)return r&&(r.length&&(e.currentType=r[0]),1!=r.length&&e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10))),e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"3",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.i32,0);switch(d=e.compileExpression(s[1],f=e.currentType),_=e.compileExpression(s[2],a.Type.bool),e.currentType=f,e.currentType.kind){default:y=g.createSelect(h,d,_);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=g.createUnreachable()}return y;case"unreachable":return 0!=s.length&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"0",s.length.toString(10)),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),g.createUnreachable();case"current_memory":return e.currentType=a.Type.i32,0!=s.length&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"0",s.length.toString(10)),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),g.createHost(o.HostOp.CurrentMemory);case"grow_memory":return e.currentType=a.Type.i32,1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"0",s.length.toString(10)),h=g.createUnreachable()):h=e.compileExpression(s[0],a.Type.i32),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),g.createHost(o.HostOp.GrowMemory,null,[h]);case"move_memory":if(r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),3!=s.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"3",s.length.toString(10)),e.currentType=a.Type.void,g.createUnreachable();throw h=e.compileExpression(s[0],e.options.usizeType),d=e.compileExpression(s[1],e.options.usizeType),_=e.compileExpression(s[2],e.options.usizeType),e.currentType=a.Type.void,new Error("not implemented");case"set_memory":if(r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),3!=s.length)return e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"3",s.length.toString(10)),e.currentType=a.Type.void,g.createUnreachable();throw h=e.compileExpression(s[0],e.options.usizeType),d=e.compileExpression(s[1],a.Type.u32),_=e.compileExpression(s[2],e.options.usizeType),e.currentType=a.Type.void,new Error("not implemented");case"changetype":return r&&1==r.length?9!=r[0].kind?(e.error(i.DiagnosticCode.Operation_not_supported,l.range),e.currentType=r[0],g.createUnreachable()):1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=r[0],g.createUnreachable()):(h=e.compileExpression(s[0],e.options.usizeType,0),e.currentType=r[0],9!=e.currentType.kind?(e.error(i.DiagnosticCode.Operation_not_supported,l.range),g.createUnreachable()):h):(r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0"),g.createUnreachable());case"assert":if(s.length<1||s.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,l.range,"1",r.length.toString(10))),s.length<1?e.error(i.DiagnosticCode.Expected_at_least_0_arguments_but_got_1,l.range,"1",s.length.toString(10)):s.length>2&&e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"2",s.length.toString(10)),g.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,l.range,"1",r.length.toString(10)),g.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpressionRetainType(s[0],a.Type.i32);if(f=e.currentType,e.currentType=f.nonNullableType,e.options.noAssert)return u==a.Type.void?(e.currentType=a.Type.void,g.createNop()):h;var A=p(e,2==s.length?s[1]:null,l);if(e.currentType=f.nonNullableType,u==a.Type.void){switch(e.currentType.kind){default:y=g.createIf(g.createUnary(o.UnaryOp.EqzI32,h),A);break;case 3:case 8:y=g.createIf(g.createUnary(o.UnaryOp.EqzI64,h),A);break;case 4:case 9:y=g.createIf(g.createUnary(e.options.isWasm64?o.UnaryOp.EqzI64:o.UnaryOp.EqzI32,h),A);break;case 11:y=g.createIf(g.createBinary(o.BinaryOp.EqF32,h,g.createF32(0)),A);break;case 12:y=g.createIf(g.createBinary(o.BinaryOp.EqF64,h,g.createF64(0)),A);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=A}e.currentType=a.Type.void}else switch(e.currentType.kind){default:m=e.currentFunction.getAndFreeTempLocal(a.Type.i32),y=g.createIf(g.createUnary(o.UnaryOp.EqzI32,g.createTeeLocal(m.index,h)),A,g.createGetLocal(m.index,o.NativeType.I32));break;case 3:case 8:m=e.currentFunction.getAndFreeTempLocal(a.Type.i64),y=g.createIf(g.createUnary(o.UnaryOp.EqzI64,g.createTeeLocal(m.index,h)),A,g.createGetLocal(m.index,o.NativeType.I64));break;case 4:case 9:m=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),y=g.createIf(g.createUnary(e.options.isWasm64?o.UnaryOp.EqzI64:o.UnaryOp.EqzI32,g.createTeeLocal(m.index,h)),A,g.createGetLocal(m.index,e.options.nativeSizeType));break;case 11:m=e.currentFunction.getAndFreeTempLocal(a.Type.f32),y=g.createIf(g.createBinary(o.BinaryOp.EqF32,g.createTeeLocal(m.index,h),g.createF32(0)),A,g.createGetLocal(m.index,o.NativeType.F32));break;case 12:m=e.currentFunction.getAndFreeTempLocal(a.Type.f64),y=g.createIf(g.createBinary(o.BinaryOp.EqF64,g.createTeeLocal(m.index,h),g.createF64(0)),A,g.createGetLocal(m.index,o.NativeType.F64));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=A}return y;case"i8":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.i8,g.createUnreachable()):e.compileExpression(s[0],a.Type.i8,2);case"i16":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.i16,g.createUnreachable()):e.compileExpression(s[0],a.Type.i16,2);case"i32":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.i32,g.createUnreachable()):e.compileExpression(s[0],a.Type.i32,2);case"i64":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.i64,g.createUnreachable()):e.compileExpression(s[0],a.Type.i64,2);case"isize":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=e.options.isWasm64?a.Type.isize64:a.Type.isize32,g.createUnreachable()):e.compileExpression(s[0],e.options.isWasm64?a.Type.isize64:a.Type.isize32,2);case"u8":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.u8,g.createUnreachable()):e.compileExpression(s[0],a.Type.u8,2);case"u16":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.u16,g.createUnreachable()):e.compileExpression(s[0],a.Type.u16,2);case"u32":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.u32,g.createUnreachable()):e.compileExpression(s[0],a.Type.u32,2);case"u64":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.u64,g.createUnreachable()):e.compileExpression(s[0],a.Type.u64,2);case"usize":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=e.options.usizeType,g.createUnreachable()):e.compileExpression(s[0],e.options.usizeType,2);case"bool":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.bool,g.createUnreachable()):e.compileExpression(s[0],a.Type.bool,2);case"f32":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.f32,g.createUnreachable()):e.compileExpression(s[0],a.Type.f32,2);case"f64":return r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),1!=s.length?(e.error(i.DiagnosticCode.Expected_0_arguments_but_got_1,l.range,"1",s.length.toString(10)),e.currentType=a.Type.f64,g.createUnreachable()):e.compileExpression(s[0],a.Type.f64,2)}return e.error(i.DiagnosticCode.Operation_not_supported,l.range),g.createUnreachable()},t.compileAllocate=function(e,t,r){var n=t.program,a=n.elements.get(e.options.allocateImpl);if(a)if(a.kind==s.ElementKind.FUNCTION_PROTOTYPE){var o=a.resolve();if(o)if(!o.is(s.ElementFlags.GENERIC)&&o.returnType==e.options.usizeType&&o.parameters&&1==o.parameters.length&&o.parameters[0].type==e.options.usizeType){if(e.compileFunction(o))return e.makeCall(o,[e.options.isWasm64?e.module.createI64(t.currentMemoryOffset):e.module.createI32(t.currentMemoryOffset)])}else n.error(i.DiagnosticCode.Implementation_0_must_match_the_signature_1,r.range,e.options.allocateImpl,"(size: usize): usize")}else n.error(i.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,r.range,a.internalName);else n.error(i.DiagnosticCode.Cannot_find_name_0,r.range,e.options.allocateImpl);return e.module.createUnreachable()},t.compileAbort=p},function(t,r){t.exports=e},function(e,t,r){(function(e){const t=e.Binaryen||r(17);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(1).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(7))},function(e,t,r){(function(e){var t="undefined"!=typeof window&&window||void 0!==e&&e||self;function r(){Error.captureStackTrace?Error.captureStackTrace(this,r):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}function n(e){this.message=e||"assertion failed",Error.captureStackTrace?Error.captureStackTrace(this,n):this.stack=this.name+": "+this.message+"\n"+(new Error).stack}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_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_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},r.prototype=Object.create(Error.prototype),r.prototype.name="UnreachableError",r.prototype.message="unreachable",t.unreachable=function(){throw new r},n.prototype=Object.create(Error.prototype),n.prototype.name="AssertionError",t.assert=function(e,t){if(e)return e;throw new n(t)},t.changetype=function(e){return e},t.parseI32=function(e,t){return 0|parseInt(e,void 0)},String.fromCharCodes=function(e){return String.fromCharCode.apply(String,e)},String.fromCodePoints=function(e){return String.fromCodePoint.apply(String,e)}}).call(this,r(7))},function(e,t,r){"use strict";Object.defineProperty(t,"__esModule",{value:!0}),r(19),r(18),r(15)},function(e,t,r){r(20),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 79824d7e..036f791d 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/diagnostics.ts","webpack://assemblyscript/./src/module.ts","webpack://assemblyscript/./src/program.ts","webpack://assemblyscript/./src/tokenizer.ts","webpack://assemblyscript/./src/ast.ts","webpack://assemblyscript/./src/types.ts","webpack://assemblyscript/./src/compiler.ts","webpack://assemblyscript/(webpack)/buildin/global.js","webpack://assemblyscript/./src/util/path.ts","webpack://assemblyscript/./src/util/charcode.ts","webpack://assemblyscript/./src/diagnosticMessages.generated.ts","webpack://assemblyscript/./src/parser.ts","webpack://assemblyscript/./src/decompiler.ts","webpack://assemblyscript/./src/index.ts","webpack://assemblyscript/./node_modules/long/src/long.js","webpack://assemblyscript/./src/glue/js/i64.js","webpack://assemblyscript/./src/builtins.ts","webpack://assemblyscript/external \"binaryen\"","webpack://assemblyscript/./src/glue/js/binaryen.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__17__","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","DiagnosticCategory","diagnosticMessages_generated_1","charcode_1","diagnosticMessages_generated_2","diagnosticCategoryToString","category","INFO","WARNING","ERROR","DiagnosticCode","diagnosticCodeToString","colorBlue","colorYellow","colorRed","colorReset","diagnosticCategoryToColor","DiagnosticMessage","code","message","range","create","arg0","arg1","arg2","replace","createInfo","createWarning","createError","withRange","toString","source","normalizedPath","start","end","formatDiagnosticContext","useColors","text","len","length","isLineBreak","charCodeAt","sb","substring","push","join","formatDiagnosticMessage","showContext","context","line","column","DiagnosticEmitter","diagnostics","Array","emitDiagnostic","error","info","warning","NativeType","ExpressionId","compiler_1","_BinaryenTypeNone","_BinaryenTypeInt32","_BinaryenTypeInt64","_BinaryenTypeFloat32","_BinaryenTypeFloat64","_BinaryenTypeUnreachable","_BinaryenTypeAuto","_BinaryenInvalidId","_BinaryenBlockId","_BinaryenIfId","_BinaryenLoopId","_BinaryenBreakId","_BinaryenSwitchId","_BinaryenCallId","_BinaryenCallImportId","_BinaryenCallIndirectId","_BinaryenGetLocalId","_BinaryenSetLocalId","_BinaryenGetGlobalId","_BinaryenSetGlobalId","_BinaryenLoadId","_BinaryenStoreId","_BinaryenConstId","_BinaryenUnaryId","_BinaryenBinaryId","_BinaryenSelectId","_BinaryenDropId","_BinaryenReturnId","_BinaryenHostId","_BinaryenNopId","_BinaryenUnreachableId","_BinaryenAtomicCmpxchgId","_BinaryenAtomicRMWId","_BinaryenAtomicWaitId","_BinaryenAtomicWakeId","UnaryOp","_BinaryenClzInt32","_BinaryenCtzInt32","_BinaryenPopcntInt32","_BinaryenNegFloat32","_BinaryenAbsFloat32","_BinaryenCeilFloat32","_BinaryenFloorFloat32","_BinaryenTruncFloat32","_BinaryenNearestFloat32","_BinaryenSqrtFloat32","_BinaryenEqZInt32","_BinaryenClzInt64","_BinaryenCtzInt64","_BinaryenPopcntInt64","_BinaryenNegFloat64","_BinaryenAbsFloat64","_BinaryenCeilFloat64","_BinaryenFloorFloat64","_BinaryenTruncFloat64","_BinaryenNearestFloat64","_BinaryenSqrtFloat64","_BinaryenEqZInt64","_BinaryenExtendSInt32","_BinaryenExtendUInt32","_BinaryenWrapInt64","_BinaryenTruncSFloat32ToInt32","_BinaryenTruncSFloat32ToInt64","_BinaryenTruncUFloat32ToInt32","_BinaryenTruncUFloat32ToInt64","_BinaryenTruncSFloat64ToInt32","_BinaryenTruncSFloat64ToInt64","_BinaryenTruncUFloat64ToInt32","_BinaryenTruncUFloat64ToInt64","_BinaryenReinterpretFloat32","_BinaryenReinterpretFloat64","_BinaryenConvertSInt32ToFloat32","_BinaryenConvertSInt32ToFloat64","_BinaryenConvertUInt32ToFloat32","_BinaryenConvertUInt32ToFloat64","_BinaryenConvertSInt64ToFloat32","_BinaryenConvertSInt64ToFloat64","_BinaryenConvertUInt64ToFloat32","_BinaryenConvertUInt64ToFloat64","_BinaryenPromoteFloat32","_BinaryenDemoteFloat64","_BinaryenReinterpretInt32","_BinaryenReinterpretInt64","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","ref","_BinaryenModuleCreate","out","allocate_memory","createFrom","cArr","allocU8Array","_BinaryenModuleRead","free_memory","changetype","addFunctionType","result","paramTypes","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","index","type","_BinaryenGetLocal","createTeeLocal","_BinaryenTeeLocal","createGetGlobal","_BinaryenGetGlobal","createLoad","bytes","signed","ptr","_BinaryenLoad","createStore","_BinaryenStore","createAtomicLoad","_BinaryenAtomicLoad","createAtomicStore","_BinaryenAtomicStore","createAtomicRMW","_BinaryenAtomicRMW","createAtomicCmpxchg","expected","replacement","_BinaryenAtomicCmpxchg","createAtomicWait","timeout","expectedType","_BinaryenAtomicWait","createAtomicWake","wakeCount","_BinaryenAtomicWake","createSetLocal","_BinaryenSetLocal","createSetGlobal","_BinaryenSetGlobal","createBlock","label","children","None","_BinaryenBlock","createBreak","condition","_BinaryenBreak","createDrop","expression","_BinaryenDrop","createLoop","body","_BinaryenLoop","createIf","ifTrue","ifFalse","_BinaryenIf","createNop","_BinaryenNop","createReturn","_BinaryenReturn","createSelect","_BinaryenSelect","createSwitch","names","defaultName","strs","k","_BinaryenSwitch","createCall","target","returnType","_BinaryenCall","createCallImport","_BinaryenCallImport","createUnreachable","_BinaryenUnreachable","addGlobal","mutable","initializer","_BinaryenAddGlobal","addFunction","varTypes","_BinaryenAddFunction","removeFunction","_BinaryenRemoveFunction","addFunctionExport","internalName","externalName","cStr1","cStr2","_BinaryenAddFunctionExport","addTableExport","_BinaryenAddTableExport","addMemoryExport","_BinaryenAddMemoryExport","addGlobalExport","_BinaryenAddGlobalExport","removeExport","_BinaryenRemoveExport","addFunctionImport","externalModuleName","externalBaseName","functionType","cStr3","_BinaryenAddFunctionImport","addTableImport","_BinaryenAddTableImport","addMemoryImport","_BinaryenAddMemoryImport","addGlobalImport","globalType","_BinaryenAddGlobalImport","removeImport","_BinaryenRemoveImport","setMemory","initial","maximum","segments","exportName","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","ret","Binary","output","readBuffer","sourceMap","readString","toText","Error","toAsmjs","dispose","_BinaryenModuleDispose","createRelooper","Relooper","cloneExpression","noSideEffects","maxDepth","i32","MAX_VALUE","nested1","nested2","_BinaryenExpressionGetId","Const","_BinaryenExpressionGetType","I32","_BinaryenConstGetValueI32","I64","_BinaryenConstGetValueI64Low","_BinaryenConstGetValueI64High","F32","_BinaryenConstGetValueF32","F64","_BinaryenConstGetValueF64","GetLocal","_BinaryenGetLocalGetIndex","GetGlobal","globalName","_BinaryenGetGlobalGetName","Load","_BinaryenLoadGetPtr","_BinaryenLoadIsAtomic","_BinaryenLoadGetBytes","_BinaryenLoadGetOffset","_BinaryenLoadIsSigned","_BinaryenLoadGetAlign","Unary","_BinaryenUnaryGetValue","_BinaryenUnaryGetOp","_BinaryenBinaryGetLeft","_BinaryenBinaryGetRight","_BinaryenBinaryGetOp","addDebugInfoFile","_BinaryenModuleAddDebugInfoFileName","getDebugInfoFile","_BinaryenModuleGetDebugInfoFileName","setDebugLocation","fileIndex","lineNumber","columnNumber","_BinaryenFunctionSetDebugLocation","MAX_MEMORY_WASM32","relooper","_RelooperCreate","createStub","addBlock","_RelooperAddBlock","addBranch","from","to","_RelooperAddBranch","addBlockWithSwitch","_RelooperAddBlockWithSwitch","addBranchForSwitch","indexes","_RelooperAddBranchForSwitch","renderAndDispose","entry","labelHelper","_RelooperRenderAndDispose","u8s","idx","store","i32s","val","str","u","stringLengthUTF8","load","Uint8Array","cp","u1","u2","u3","u4","arr","String","fromCodePoints","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","noTypesYet","Map","Program","_super","_this","diagnosticsOffset","elements","types","typeAliases","sources","__extends","initialize","options","Type","i8","i16","i64","isizeType","u8","u16","u32","u64","usizeType","bool","f32","f64","void","element","queuedExports","queuedImports","queuedDerivedClasses","statements","j","statement","kind","NodeKind","CLASSDECLARATION","initializeClass","ENUMDECLARATION","initializeEnum","EXPORT","initializeExports","FUNCTIONDECLARATION","initializeFunction","IMPORT","initializeImports","INTERFACEDECLARATION","initializeInterface","NAMESPACEDECLARATION","initializeNamespace","TYPEDECLARATION","initializeTypeAlias","VARIABLE","initializeVariables","queuedImport","tryResolveImport","referencedName","set","splice","referencedNameAlt","Module_0_has_no_exported_member_1","declaration","parent","path","queuedExports_1","__values","queuedExports_1_1","next","done","_a","__read","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","isBuiltin","hasDecorator","decorators","ElementFlags","BUILTIN","isLibrary","is","EXPORTED","SOURCE","GLOBAL","has","Duplicate_identifier_0","namespace","fileLevelInternalName","ClassPrototype","isUnmanaged","implementsTypes","Structs_cannot_implement_interfaces","Range","members","Export_declaration_conflicts_with_exported_declaration_of_0","memberDeclarations","memberDeclaration","FIELDDECLARATION","initializeField","METHODDECLARATION","isGetter","hasModifier","ModifierKind","GET","modifiers","SET","initializeAccessor","initializeMethod","programLevelInternalName","instance","resolve","classPrototype","STATIC","staticField","Global","instanceMembers","instanceField","FieldPrototype","CONSTRUCTOR","FunctionPrototype","constructorPrototype","Multiple_constructor_implementations_are_not_allowed","checkOperators","decorator","decoratorKind","Operation_not_supported","numArgs","arguments","firstArg","LITERAL","literalKind","fnIndexedGet","simpleName","fnIndexedSet","fnConcat","fnEquals","String_literal_expected","Expected_0_arguments_but_got_1","propertyName","internalPropertyName","propertyElement","PROPERTY","getterPrototype","setterPrototype","Property","staticName","staticPrototype","instanceName","instancePrototype","enm","Enum","values","initializeEnumValue","EnumValue","initializeExport","internalPath","identifier","referencedElement","seen","Set","add","declarations","initializeImport","namespaceName","indexPart","endsWith","InterfacePrototype","queuedExtendingClasses","parentNamespace","Namespace","alias","global","resolveType","node","contextualTypeArguments","reportNotFound","localName","resolveUsingTypeArguments","typeArguments","paramType","instanceKey","typesToString","placeholderType","resolveTypeArguments","typeParameters","typeArgumentNodes","alternativeReportNode","parameterCount","argumentCount","Expected_0_type_arguments_but_got_1","atEnd","contextualFunction","contextualEnum","ENUMVALUE","resolvedElement","ResolvedElement","flow","getScopedLocal","resolvePropertyAccess","propertyAccess","targetExpression","resolveExpression","targetType","LOCAL","FIELD","classType","Property_0_does_not_exist_on_type_1","CLASS","withTarget","base","resolveElementAccess","elementAccess","indexedGet","indexedGetName","FUNCTION_PROTOTYPE","Index_signature_is_missing_in_type_0","PARENTHESIZED","ASSERTION","toType","BINARY","THIS","instanceMethodOf","_this_cannot_be_referenced_in_current_location","SUPER","_super_can_only_be_referenced_in_a_derived_class","IDENTIFIER","PROPERTYACCESS","ELEMENTACCESS","CALL","Element","program","flags","NONE","flag","NAMESPACE","modifierKind","IMPORTED","DECLARE","DECLARED","ENUM","CONST","CONSTANT","constantValue","enum","ConstantValueKind","VariableLikeElement","apply","constantValueKind","withConstantIntegerValue","lo","hi","constantIntegerValue","i64_new","INLINED","withConstantFloatValue","constantFloatValue","LET","SCOPED","READONLY","PUBLIC","PRIVATE","PROTECTED","Parameter","Local","instances","classTypeArguments","GETTER","SETTER","ABSTRACT","isGeneric","GENERIC","INSTANCE","functionTypeArguments","inheritedTypeArguments","inheritedTypeArguments_1","inheritedTypeArguments_1_1","inheritedName","inheritedType","classTypeParameters","functionTypeParameters","parameters","typeNode","parameterTypes","parameterDeclaration","parameterType","classInstance","Function","resolvePartial","partialPrototype","reportNode","resolvedTypeArguments","resolveBuiltinTypeArguments","resolvedType","FUNCTION","locals","additionalLocals","breakContext","debugLocations","functionTableIndex","nextBreakId","breakStack","tempI32s","tempI64s","tempF32s","tempF64s","localIndex","_b","_c","parameter","parameterName","Flow","addLocal","local","getTempLocal","temps","toNativeType","pop","freeTempLocal","getAndFreeTempLocal","enterBreakContext","id","leaveBreakContext","finalize","debugLocation","debugInfoRef","debugInfoIndex","isAssignableTo","toTypeString","FIELD_PROTOTYPE","Field","memoryOffset","UNMANAGED","inheritedTypeArguments_2","inheritedTypeArguments_2_1","baseClass","baseClassType","Structs_cannot_extend_classes_and_vice_versa","Class","currentMemoryOffset","_d","inheritedMember","partialConstructor","constructorInstance","_f","_g","fieldDeclaration","fieldType","fieldInstance","byteSize","methodPrototype","instanceProperty","asClass","baseName","baseType","current","INTERFACE_PROTOTYPE","Interface","INTERFACE","FlowFlags","scopedLocals","currentFunction","parentFlow","continueLabel","breakLabel","enterBranchOrScope","branchFlow","leaveBranchOrScope","scopedLocal","addScopedLocal","Token","fromKeyword","AS","ASYNC","AWAIT","BREAK","CASE","CATCH","CONTINUE","DEBUGGER","DEFAULT","DELETE","DO","ELSE","EXTENDS","FALSE","FINALLY","FOR","FROM","IF","IMPLEMENTS","IN","INSTANCEOF","IS","KEYOF","MODULE","NEW","NULL","OF","PACKAGE","RETURN","SWITCH","THROW","TRUE","TRY","TYPE","TYPEOF","VAR","VOID","WHILE","WITH","YIELD","INVALID","isAlsoIdentifier","token","operatorToString","DOT_DOT_DOT","COMMA","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","markedPos","markedToken","markedTokenPos","nextToken","nextTokenOnNewLine","preferIdentifier","unsafeNext","maxTokenLength","STRINGLITERAL","OPENPAREN","CLOSEPAREN","isDecimalDigit","FLOATLITERAL","DOT","closed","_0_expected","testInteger","INTEGERLITERAL","COLON","SEMICOLON","EQUALS_GREATERTHAN","QUESTION","OPENBRACKET","CLOSEBRACKET","OPENBRACE","CLOSEBRACE","AT","isIdentifierStart","isKeywordCharacter","posBefore","isIdentifierPart","keywordText","keywordToken","isWhiteSpace","Invalid_character","ENDOFFILE","peek","checkOnNewLine","maxCompoundLength","tokenBefore","tokenPosBefore","skip","mark","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","program_1","tokenizer_1","path_1","Node","createType","isNullable","TypeNode","createIdentifierExpression","IdentifierExpression","createArrayLiteralExpression","ArrayLiteralExpression","elementExpressions","nodes","setParentOpt","createAssertionExpression","assertionKind","AssertionExpression","createBinaryExpression","operator","BinaryExpression","createCallExpression","typeArgs","args","CallExpression","setParent","createCommaExpression","expressions","CommaExpression","createConstructorExpression","ConstructorExpression","createElementAccessExpression","ElementAccessExpression","elementExpression","createFalseExpression","FalseExpression","createFloatLiteralExpression","FloatLiteralExpression","createFunctionExpression","isArrow","FunctionArrowExpression","FunctionExpression","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","stmt","BlockStatement","createBreakStatement","BreakStatement","createClassDeclaration","ClassDeclaration","createContinueStatement","ContinueStatement","createDecorator","Decorator","createDoStatement","DoStatement","createEmptyStatement","EmptyStatement","createEnumDeclaration","EnumDeclaration","createEnumValueDeclaration","EnumValueDeclaration","createExportStatement","ExportStatement","normalize","startsWith","mangleInternalPath","createExportImportStatement","ExportImportStatement","createExportMember","elem","ExportMember","createExpressionStatement","ExpressionStatement","createIfStatement","IfStatement","createImportStatement","decls","ImportStatement","createImportStatementWithWildcard","createImportDeclaration","ImportDeclaration","createInterfaceDeclaration","InterfaceDeclaration","createFieldDeclaration","FieldDeclaration","createForStatement","incrementor","ForStatement","createTypeParameter","TypeParameter","createParameter","parameterKind","createFunctionDeclaration","FunctionDeclaration","createMethodDeclaration","MethodDeclaration","createModifier","Modifier","createNamespaceDeclaration","NamespaceDeclaration","createReturnStatement","ReturnStatement","createSwitchStatement","cases","SwitchStatement","createSwitchCase","SwitchCase","createThrowStatement","ThrowStatement","createTryStatement","catchVariable","catchStatements","finallyStatements","TryStatement","createTypeDeclaration","TypeDeclaration","createVariableStatement","VariableStatement","createVariableDeclaration","VariableDeclaration","createWhileStatement","WhileStatement","TYPEPARAMETER","Expression","LiteralKind","LiteralExpression","AssertionKind","FUNCTIONARROW","TERNARY","UnaryExpression","UNARYPOSTFIX","UNARYPREFIX","SourceKind","Statement","Source","tokenizer","sourceKind","ENTRY","LIBRARY","DeclarationStatement","cachedProgramLevelInternalName","cachedFileLevelInternalName","mangleInternalName","isTopLevelExport","needsExplicitExport","VariableLikeDeclarationStatement","BLOCK","DecoratorKind","DECORATOR","EMPTY","ENUMVALUEDECLARATION","EXPORTIMPORT","EXPORTMEMBER","EXPRESSION","IMPORTDECLARATION","ParameterKind","PARAMETER","MODIFIER","SWITCHCASE","VARIABLEDECLARATION","reusableModifiers","createModifiers","getModifier","getFirstDecorator","asGlobal","setReusableModifiers","addModifier","modifier","TypeKind","TypeFlags","size","nullableType","ceil","nonNullableType","computeSmallIntegerShift","computeSmallIntegerMask","asFunction","asNullable","isReference","signednessIsImportant","currentClass","targetClass","targetFunction","commonCompatible","kindOnly","toNativeZero","toNativeOne","toNativeNegOne","toSignatureString","isize32","isize64","usize32","usize64","typesToNativeTypes","builtins_1","Options","WASM32","noTreeShaking","noAssert","noMemory","importMemory","memoryBase","allocateImpl","freeImpl","ConversionKind","Compiler","startFunctionBody","currentEnum","currentType","memorySegments","stringSegments","functionTable","files","max","compile","startFunctionPrototype","startFunctionInstance","START","startFunction","isEntry","compileSource","typeRef","i64_align","isWasm64","pages","i64_shr_u","entries","compileSourceByPath","normalizedPathWithoutExtension","File_0_not_found","compileClassDeclaration","compileEnumDeclaration","compileFunctionDeclaration","compileNamespaceDeclaration","variableInit","compileVariableStatement","compileExportStatement","previousFunction","compileStatement","compileGlobalDeclaration","compileGlobal","COMPILED","initExpr","Type_expected","compileExpression","Type_0_is_not_assignable_to_type_1","nativeType","initializeInStart","compileInlineConstant","precomputeExpressionRef","Compiling_constant_with_non_constant_initializer_as_mutable","setExpr","isTopLevel","compileEnum","previousValue","initInStart","valueDeclaration","AddI32","Cannot_export_a_mutable_global","compileFunctionUsingTypeArguments","compileFunction","An_implementation_cannot_be_declared_in_ambient_contexts","Function_implementation_is_missing_or_not_immediately_following_the_declaration","allBranchesReturn","A_function_whose_declared_type_is_not_void_must_return_a_value","numParameters","numParametersInclThis","paramIndex","nativeResultType","nativeParamTypes","signatureNameParts","compileInterfaceDeclaration","compileNamespace","ns","compileClassUsingTypeArguments","internalExportName","functionInstance","functionDeclaration","globalDeclaration","compileClass","addMemorySegment","alignment","addFunctionTableEntry","compileBlockStatement","compileBreakStatement","compileContinueStatement","compileDoStatement","compileEmptyStatement","compileExpressionStatement","compileForStatement","compileIfStatement","compileReturnStatement","compileSwitchStatement","compileThrowStatement","compileTryStatement","compileWhileStatement","addDebugLocation","compileStatements","stmts","stmtReturns","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","makeIsTrueish","alwaysReturns","ifTrueReturns","ifFalseReturns","tempLocal","breaks","breakIndex","defaultIndex","case_","EqI32","currentBlock","fallsThrough","nextLabel","isKnownGlobal","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","funcRef","_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","leftType","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","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","valueExpression","elementType","setterInstance","Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property","resolvedIndexedSet","valueWithCorrectType","tee","targetExpr","globalNativeType","isReadonly","elementNativeType","makeCall","getterInstance","resolvedIndexedGet","indexedSet","indexedSetName","elementExpr","Index_signature_in_type_0_only_permits_reading","functionPrototype","compileCall","isFunction","Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures","numArguments","numArgumentsInclThis","argumentIndex","argumentExpressions","thisArg","operandIndex","Expected_at_least_0_arguments_but_got_1","exprs","retainConstantType","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","Int32Array","Float32Array","Float64Array","thisExpr","compileAllocate","field","nativeSizeType","Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature","nativeOne","setValue","getValue","NegF32","NegF64","makeIsFalseish","EqzI32","EqzI64","g","eval","e","window","separator","ipos","dirname","origin","CharCode","lookupInUnicodeMap","unicodeIdentifierStart","unicodeIdentifierPart","map","mid","Parser","backlog","seenlog","parseFile","indexOf","tn","parseTopLevelStatement","isNamespaceMember","parseDecorator","Line_break_not_permitted_here","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","startPos","innerType","Identifier_expected","nullable","bracketStart","bracketRange","parseArguments","isDeclare","parseVariableDeclaration","parentModifiers","parentDecorators","Initializers_are_not_allowed_in_ambient_contexts","parseExpression","parseEnumValue","parseReturn","parseTypeParameters","Type_parameter_list_cannot_be_empty","typeParameter","parseTypeParameter","parseParameters","seenRest","seenOptional","reportedRest","param","parseParameter","A_rest_parameter_must_be_last_in_a_parameter_list","A_required_parameter_cannot_follow_an_optional_parameter","OPTIONAL","REST","isRest","isOptional","startRange","A_rest_parameter_cannot_be_optional","A_rest_parameter_cannot_have_an_initializer","Parameter_cannot_have_question_mark_and_initializer","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","parseFunctionExpressionCommon","parseClassMember","parentIsDeclare","isConstructor","Type_parameters_cannot_appear_on_a_constructor_declaration","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","parseWhileStatement","parseExpressionStatement","elseStatement","parseSwitchCase","_case_or_default_expected","parseExpressionStart","determinePrecedenceStart","The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access","again","regexpPattern","Expression_expected","tryParseTypeArgumentsBeforeArguments","precedence","nextPrecedence","determinePrecedence","commaExprs","isRightAssociative","propertyCall","Precedence","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","i64_to_string","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","formatDiagnostic","parser_1","parser","nextDiagnostic","isInfo","isWarning","isError","createOptions","setTarget","setNoTreeShaking","setNoAssert","setNoMemory","setImportMemory","setSourceMap","setMemoryBase","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","evaluateConstantOffset","compiler","compileAbort","abort","abortPrototype","abortInstance","NaN","Infinity","tempLocal0","tempLocal1","Type_0_is_not_generic","cls","Implementation_0_must_match_the_signature_1","binaryen","Binaryen","key","_malloc","_free","move_memory","dest","src","_memmove","HEAPU8","previousPrint","print","x","_BinaryenModulePrint","_BinaryenModulePrintAsmjs","globalScope","UnreachableError","captureStackTrace","stack","AssertionError","defineProperties","writable","EPSILON","clz32","abs","sqrt","trunc","isTrueish","undefined","fromCodePoint"],"mappings":"CAAA,SAAAA,EAAAC,GACA,iBAAAC,SAAA,iBAAAC,OACAA,OAAAD,QAAAD,EAAAG,QAAA,aACA,mBAAAC,eAAAC,IACAD,QAAA,YAAAJ,GACA,iBAAAC,QACAA,QAAA,eAAAD,EAAAG,QAAA,aAEAJ,EAAA,eAAAC,EAAAD,EAAA,UARA,CASC,oBAAAO,UAAAC,KAAA,SAAAC,GACD,mBCTA,IAAAC,KAGA,SAAAC,EAAAC,GAGA,GAAAF,EAAAE,GACA,OAAAF,EAAAE,GAAAV,QAGA,IAAAC,EAAAO,EAAAE,IACAC,EAAAD,EACAE,GAAA,EACAZ,YAUA,OANAa,EAAAH,GAAAI,KAAAb,EAAAD,QAAAC,IAAAD,QAAAS,GAGAR,EAAAW,GAAA,EAGAX,EAAAD,QA2CA,OAtCAS,EAAAM,EAAAF,EAGAJ,EAAAO,EAAAR,EAGAC,EAAAQ,EAAA,SAAAjB,EAAAkB,EAAAC,GACAV,EAAAW,EAAApB,EAAAkB,IACAG,OAAAC,eAAAtB,EAAAkB,GACAK,cAAA,EACAC,YAAA,EACAC,IAAAN,KAMAV,EAAAiB,EAAA,SAAA1B,GACAqB,OAAAC,eAAAtB,EAAA,cAAiD2B,OAAA,KAIjDlB,EAAAmB,EAAA,SAAA3B,GACA,IAAAkB,EAAAlB,KAAA4B,WACA,WAA2B,OAAA5B,EAAA,SAC3B,WAAiC,OAAAA,GAEjC,OADAQ,EAAAQ,EAAAE,EAAA,IAAAA,GACAA,GAIAV,EAAAW,EAAA,SAAAU,EAAAC,GAAsD,OAAAV,OAAAW,UAAAC,eAAAnB,KAAAgB,EAAAC,IAGtDtB,EAAAyB,EAAA,GAIAzB,IAAA0B,EAAA,oFC/DA,IAcYC,EAdZC,EAAA5B,EAAA,IAKA6B,EAAA7B,EAAA,GAIA8B,EAAA9B,EAAA,IAWA,SAAA+B,EAA2CC,GACzC,OAAQA,GACN,KAAKL,EAAmBM,KAAM,MAAO,OACrC,KAAKN,EAAmBO,QAAS,MAAO,UACxC,KAAKP,EAAmBQ,MAAO,MAAO,QACtC,QAAS,MAAO,IAflB5C,EAAA6C,eAAAN,EAAAM,eACA7C,EAAA8C,uBAAAP,EAAAO,uBAGF,SAAYV,GACVA,IAAA,eACAA,IAAA,qBACAA,IAAA,iBAHF,CAAYA,EAAApC,EAAAoC,qBAAApC,EAAAoC,wBAMZpC,EAAAwC,6BASA,IAAMO,EAAoB,QACpBC,EAAsB,QACtBC,EAAmB,QACnBC,EAAqB,OAE3B,SAAAC,EAA0CV,GACxC,OAAQA,GACN,KAAKL,EAAmBM,KAAM,OAAOK,EACrC,KAAKX,EAAmBO,QAAS,OAAOK,EACxC,KAAKZ,EAAmBQ,MAAO,OAAOK,EACtC,QAAS,MAAO,IALpBjD,EAAAmD,4BASA,IAAAC,EAAA,WAOE,SAAAA,EAAYC,EAAWZ,EAA8Ba,GAFrDhD,KAAAiD,MAAsB,KAGpBjD,KAAK+C,KAAOA,EACZ/C,KAAKmC,SAAWA,EAChBnC,KAAKgD,QAAUA,EAsEnB,OAnESF,EAAAI,OAAP,SACEH,EACAZ,EACAgB,EACAC,EACAC,QAFA,IAAAF,MAAA,WACA,IAAAC,MAAA,WACA,IAAAC,MAAA,MAEA,IAAIL,EAAUjB,EAAAS,uBAAuBO,GAIrC,OAHY,MAARI,IAAcH,EAAUA,EAAQM,QAAQ,MAAOH,IACvC,MAARC,IAAcJ,EAAUA,EAAQM,QAAQ,MAAOF,IACvC,MAARC,IAAcL,EAAUA,EAAQM,QAAQ,MAAOD,IAC5C,IAAIP,EAAkBC,EAAMZ,EAAUa,IAGxCF,EAAAS,WAAP,SACER,EACAI,EACAC,GAEA,YAHA,IAAAD,MAAA,WACA,IAAAC,MAAA,MAEON,EAAkBI,OAAOH,EAAMjB,EAAmBM,KAAMe,EAAMC,IAGhEN,EAAAU,cAAP,SACET,EACAI,EACAC,GAEA,YAHA,IAAAD,MAAA,WACA,IAAAC,MAAA,MAEON,EAAkBI,OAAOH,EAAMjB,EAAmBO,QAASc,EAAMC,IAGnEN,EAAAW,YAAP,SACEV,EACAI,EACAC,GAEA,YAHA,IAAAD,MAAA,WACA,IAAAC,MAAA,MAEON,EAAkBI,OAAOH,EAAMjB,EAAmBQ,MAAOa,EAAMC,IAGxEN,EAAApB,UAAAgC,UAAA,SAAUT,GAER,OADAjD,KAAKiD,MAAQA,EACNjD,MAGT8C,EAAApB,UAAAiC,SAAA,WACE,OAAI3D,KAAKiD,MAELf,EAA2BlC,KAAKmC,UAChC,IACAnC,KAAK+C,KAAKY,SAAS,IACnB,MACA3D,KAAKgD,QACL,QACAhD,KAAKiD,MAAMW,OAAOC,eAClB,MACA7D,KAAKiD,MAAMa,MAAMH,SAAS,IAC1B,IACA3D,KAAKiD,MAAMc,IAAIJ,SAAS,IAI1BzB,EAA2BlC,KAAKmC,UAChC,IACAnC,KAAK+C,KAAKY,SAAS,IACnB,KACA3D,KAAKgD,SAGXF,EAhFA,GA0HA,SAAAkB,EAAwCf,EAAcgB,QAAA,IAAAA,OAAA,GAKpD,IAJA,IAAIC,EAAOjB,EAAMW,OAAOM,KACpBC,EAAMD,EAAKE,OACXN,EAAQb,EAAMa,MACdC,EAAMd,EAAMc,IACTD,EAAQ,IAAM9B,EAAAqC,YAAYH,EAAKI,WAAWR,EAAQ,KACvDA,IAEF,KAAOC,EAAMI,IAAQnC,EAAAqC,YAAYH,EAAKI,WAAWP,KAC/CA,IAOF,IALA,IAAIQ,GACF,MACAL,EAAKM,UAAUV,EAAOC,GACtB,OAEKD,EAAQb,EAAMa,OACnBS,EAAGE,KAAK,KACRX,IAGF,GADIG,GAAWM,EAAGE,KAAK9B,GACnBM,EAAMa,OAASb,EAAMc,IACvBQ,EAAGE,KAAK,UAER,KAAOX,IAAUb,EAAMc,KACrBQ,EAAGE,KAAK,KAIZ,OADIR,GAAWM,EAAGE,KAAK7B,GAChB2B,EAAGG,KAAK,IAvJJhF,EAAAoD,oBAkFbpD,EAAAiF,wBAAA,SACE3B,EACAiB,EACAW,QADA,IAAAX,OAAA,QACA,IAAAW,OAAA,GAGA,IAAIC,EAAU,GACV7B,EAAQC,OAAS2B,IACnBC,EAAUb,EAAwBhB,EAAQC,MAAOgB,IAInD,IAAIM,KAUJ,GATIN,GAAWM,EAAGE,KAAK5B,EAA0BG,EAAQb,WACzDoC,EAAGE,KAAKvC,EAA2Bc,EAAQb,WACvC8B,GAAWM,EAAGE,KAAK7B,GACvB2B,EAAGE,KAAKzB,EAAQD,KAAO,IAAO,MAAQ,OACtCwB,EAAGE,KAAKzB,EAAQD,KAAKY,SAAS,KAC9BY,EAAGE,KAAK,MACRF,EAAGE,KAAKzB,EAAQA,SAGZA,EAAQC,MAAO,CACjB,IAAIA,EAAQD,EAAQC,MAChB2B,IACFL,EAAGE,KAAK,MACRF,EAAGE,KAAKI,IAEVN,EAAGE,KAAK,MACRF,EAAGE,KAAK,QACRF,EAAGE,KAAKxB,EAAMW,OAAOC,gBACrBU,EAAGE,KAAK,KACRF,EAAGE,KAAKxB,EAAM6B,KAAKnB,SAAS,KAC5BY,EAAGE,KAAK,KACRF,EAAGE,KAAKxB,EAAM8B,OAAOpB,SAAS,KAC9BY,EAAGE,KAAK,KAEV,OAAOF,EAAGG,KAAK,KAGjBhF,EAAAsE,0BAgCA,IAAAgB,EAAA,WAKE,SAAAA,EAAYC,QAAA,IAAAA,MAAA,MACVjF,KAAKiF,YAAcA,GAAiD,IAAIC,MA8C5E,OA3CEF,EAAAtD,UAAAyD,eAAA,SACEpC,EACAZ,EACAc,EACAE,EACAC,EACAC,QAFA,IAAAF,MAAA,WACA,IAAAC,MAAA,WACA,IAAAC,MAAA,MAEA,IAAIL,EAAUF,EAAkBI,OAAOH,EAAMZ,EAAUgB,EAAMC,EAAMC,GAAMK,UAAUT,GACnFjD,KAAKiF,YAAYR,KAAKzB,IAKxBgC,EAAAtD,UAAA0D,MAAA,SACErC,EACAE,EACAE,EACAC,EACAC,QAFA,IAAAF,MAAA,WACA,IAAAC,MAAA,WACA,IAAAC,MAAA,MAEArD,KAAKmF,eAAepC,EAAMjB,EAAmBQ,MAAOW,EAAOE,EAAMC,EAAMC,IAGzE2B,EAAAtD,UAAA2D,KAAA,SACEtC,EACAE,EACAE,EACAC,EACAC,QAFA,IAAAF,MAAA,WACA,IAAAC,MAAA,WACA,IAAAC,MAAA,MAEArD,KAAKmF,eAAepC,EAAMjB,EAAmBM,KAAMa,EAAOE,EAAMC,EAAMC,IAGxE2B,EAAAtD,UAAA4D,QAAA,SACEvC,EACAE,EACAE,EACAC,EACAC,QAFA,IAAAF,MAAA,WACA,IAAAC,MAAA,WACA,IAAAC,MAAA,MAEArD,KAAKmF,eAAepC,EAAMjB,EAAmBO,QAASY,EAAOE,EAAMC,EAAMC,IAE7E2B,EApDA,GAAsBtF,EAAAsF,mGCzMtB,IAaYO,EAUAC,EAvBZC,EAAAtF,EAAA,IAaA,SAAYoF,GACVA,IAAA,KAAOG,qBAAmB,OAC1BH,IAAA,IAAMI,sBAAoB,MAC1BJ,IAAA,IAAMK,sBAAoB,MAC1BL,IAAA,IAAMM,wBAAsB,MAC5BN,IAAA,IAAOO,wBAAsB,MAC7BP,IAAA,YAAcQ,4BAA0B,cACxCR,IAAA,KAAOS,qBAAmB,OAP5B,CAAYT,EAAA7F,EAAA6F,aAAA7F,EAAA6F,gBAUZ,SAAYC,GACVA,IAAA,QAAUS,sBAAoB,UAC9BT,IAAA,MAAQU,oBAAkB,QAC1BV,IAAA,GAAKW,iBAAe,KACpBX,IAAA,KAAOY,mBAAiB,OACxBZ,IAAA,MAAQa,oBAAkB,QAC1Bb,IAAA,OAASc,qBAAmB,SAC5Bd,IAAA,KAAOe,mBAAiB,OACxBf,IAAA,WAAagB,yBAAuB,aACpChB,IAAA,aAAeiB,2BAAyB,eACxCjB,IAAA,SAAWkB,uBAAqB,WAChClB,IAAA,SAAWmB,uBAAqB,WAChCnB,IAAA,UAAYoB,wBAAsB,YAClCpB,IAAA,UAAYqB,wBAAsB,YAClCrB,IAAA,KAAOsB,mBAAiB,OACxBtB,IAAA,MAAQuB,oBAAkB,QAC1BvB,IAAA,MAAQwB,oBAAkB,QAC1BxB,IAAA,MAAQyB,oBAAkB,QAC1BzB,IAAA,OAAS0B,qBAAmB,SAC5B1B,IAAA,OAAS2B,qBAAmB,SAC5B3B,IAAA,KAAO4B,mBAAiB,OACxB5B,IAAA,OAAS6B,qBAAmB,SAC5B7B,IAAA,KAAO8B,mBAAiB,OACxB9B,IAAA,IAAM+B,kBAAgB,MACtB/B,IAAA,YAAcgC,0BAAwB,cACtChC,IAAA,cAAgBiC,4BAA0B,gBAC1CjC,IAAA,UAAYkC,wBAAsB,YAClClC,IAAA,WAAamC,yBAAuB,aACpCnC,IAAA,WAAaoC,yBAAuB,aA5BtC,CAAYpC,EAAA9F,EAAA8F,eAAA9F,EAAA8F,kBA+BZ,SAAYqC,GACVA,IAAA,OAASC,qBAAmB,SAC5BD,IAAA,OAASE,qBAAmB,SAC5BF,IAAA,UAAYG,wBAAsB,YAClCH,IAAA,OAASI,uBAAqB,SAC9BJ,IAAA,OAASK,uBAAqB,SAC9BL,IAAA,QAAUM,wBAAsB,UAChCN,IAAA,SAAWO,yBAAuB,WAClCP,IAAA,SAAWQ,yBAAuB,WAClCR,IAAA,WAAaS,2BAAyB,aACtCT,IAAA,QAAUU,wBAAsB,UAChCV,IAAA,OAASW,qBAAmB,SAC5BX,IAAA,OAASY,qBAAmB,SAC5BZ,IAAA,OAASa,qBAAmB,SAC5Bb,IAAA,UAAYc,wBAAsB,YAClCd,IAAA,OAASe,uBAAqB,SAC9Bf,IAAA,OAASgB,uBAAqB,SAC9BhB,IAAA,QAAUiB,wBAAsB,UAChCjB,IAAA,SAAWkB,yBAAuB,WAClClB,IAAA,SAAWmB,yBAAuB,WAClCnB,IAAA,WAAaoB,2BAAyB,aACtCpB,IAAA,QAAUqB,wBAAsB,UAChCrB,IAAA,OAASsB,qBAAmB,SAC5BtB,IAAA,UAAYuB,yBAAuB,YACnCvB,IAAA,UAAYwB,yBAAuB,YACnCxB,IAAA,QAAUyB,sBAAoB,UAC9BzB,IAAA,cAAgB0B,iCAA+B,gBAC/C1B,IAAA,cAAgB2B,iCAA+B,gBAC/C3B,IAAA,cAAgB4B,iCAA+B,gBAC/C5B,IAAA,cAAgB6B,iCAA+B,gBAC/C7B,IAAA,cAAgB8B,iCAA+B,gBAC/C9B,IAAA,cAAgB+B,iCAA+B,gBAC/C/B,IAAA,cAAgBgC,iCAA+B,gBAC/ChC,IAAA,cAAgBiC,iCAA+B,gBAC/CjC,IAAA,eAAiBkC,+BAA6B,iBAC9ClC,IAAA,eAAiBmC,+BAA6B,iBAC9CnC,IAAA,gBAAkBoC,mCAAiC,kBACnDpC,IAAA,gBAAkBqC,mCAAiC,kBACnDrC,IAAA,gBAAkBsC,mCAAiC,kBACnDtC,IAAA,gBAAkBuC,mCAAiC,kBACnDvC,IAAA,gBAAkBwC,mCAAiC,kBACnDxC,IAAA,gBAAkByC,mCAAiC,kBACnDzC,IAAA,gBAAkB0C,mCAAiC,kBACnD1C,IAAA,gBAAkB2C,mCAAiC,kBACnD3C,IAAA,WAAa4C,2BAAyB,aACtC5C,IAAA,UAAY6C,0BAAwB,YACpC7C,IAAA,eAAiB8C,6BAA2B,iBAC5C9C,IAAA,eAAiB+C,6BAA2B,iBA/C9C,CAAYlL,EAAAmI,UAAAnI,EAAAmI,aAmEZ,SAAYgD,GACVA,IAAA,OAASC,qBAAmB,SAC5BD,IAAA,OAASE,qBAAmB,SAC5BF,IAAA,OAASG,qBAAmB,SAC5BH,IAAA,OAASI,sBAAoB,SAC7BJ,IAAA,OAASK,sBAAoB,SAC7BL,IAAA,OAASM,sBAAoB,SAC7BN,IAAA,OAASO,sBAAoB,SAC7BP,IAAA,OAASQ,qBAAmB,SAC5BR,IAAA,MAAQS,oBAAkB,QAC1BT,IAAA,OAASU,qBAAmB,SAC5BV,IAAA,OAASW,qBAAmB,SAC5BX,IAAA,OAASY,sBAAoB,SAC7BZ,IAAA,OAASa,sBAAoB,SAC7Bb,IAAA,QAAUc,sBAAoB,UAC9Bd,IAAA,QAAUe,sBAAoB,UAC9Bf,IAAA,MAAQgB,oBAAkB,QAC1BhB,IAAA,MAAQiB,oBAAkB,QAC1BjB,IAAA,MAAQkB,qBAAmB,QAC3BlB,IAAA,MAAQmB,qBAAmB,QAC3BnB,IAAA,MAAQoB,qBAAmB,QAC3BpB,IAAA,MAAQqB,qBAAmB,QAC3BrB,IAAA,MAAQsB,qBAAmB,QAC3BtB,IAAA,MAAQuB,qBAAmB,QAC3BvB,IAAA,MAAQwB,qBAAmB,QAC3BxB,IAAA,MAAQyB,qBAAmB,QAC3BzB,IAAA,OAAS0B,qBAAmB,SAC5B1B,IAAA,OAAS2B,qBAAmB,SAC5B3B,IAAA,OAAS4B,qBAAmB,SAC5B5B,IAAA,OAAS6B,sBAAoB,SAC7B7B,IAAA,OAAS8B,sBAAoB,SAC7B9B,IAAA,OAAS+B,sBAAoB,SAC7B/B,IAAA,OAASgC,sBAAoB,SAC7BhC,IAAA,OAASiC,qBAAmB,SAC5BjC,IAAA,MAAQkC,oBAAkB,QAC1BlC,IAAA,OAASmC,qBAAmB,SAC5BnC,IAAA,OAASoC,qBAAmB,SAC5BpC,IAAA,OAASqC,sBAAoB,SAC7BrC,IAAA,OAASsC,sBAAoB,SAC7BtC,IAAA,QAAUuC,sBAAoB,UAC9BvC,IAAA,QAAUwC,sBAAoB,UAC9BxC,IAAA,MAAQyC,oBAAkB,QAC1BzC,IAAA,MAAQ0C,oBAAkB,QAC1B1C,IAAA,MAAQ2C,qBAAmB,QAC3B3C,IAAA,MAAQ4C,qBAAmB,QAC3B5C,IAAA,MAAQ6C,qBAAmB,QAC3B7C,IAAA,MAAQ8C,qBAAmB,QAC3B9C,IAAA,MAAQ+C,qBAAmB,QAC3B/C,IAAA,MAAQgD,qBAAmB,QAC3BhD,IAAA,MAAQiD,qBAAmB,QAC3BjD,IAAA,MAAQkD,qBAAmB,QAC3BlD,IAAA,OAASmD,uBAAqB,SAC9BnD,IAAA,OAASoD,uBAAqB,SAC9BpD,IAAA,OAASqD,uBAAqB,SAC9BrD,IAAA,OAASsD,uBAAqB,SAC9BtD,IAAA,YAAcuD,4BAA0B,cACxCvD,IAAA,OAASwD,uBAAqB,SAC9BxD,IAAA,OAASyD,uBAAqB,SAC9BzD,IAAA,MAAQ0D,sBAAoB,QAC5B1D,IAAA,MAAQ2D,sBAAoB,QAC5B3D,IAAA,MAAQ4D,sBAAoB,QAC5B5D,IAAA,MAAQ6D,sBAAoB,QAC5B7D,IAAA,MAAQ8D,sBAAoB,QAC5B9D,IAAA,MAAQ+D,sBAAoB,QAC5B/D,IAAA,OAASgE,uBAAqB,SAC9BhE,IAAA,OAASiE,uBAAqB,SAC9BjE,IAAA,OAASkE,uBAAqB,SAC9BlE,IAAA,OAASmE,uBAAqB,SAC9BnE,IAAA,YAAcoE,4BAA0B,cACxCpE,IAAA,OAASqE,uBAAqB,SAC9BrE,IAAA,OAASsE,uBAAqB,SAC9BtE,IAAA,MAAQuE,sBAAoB,QAC5BvE,IAAA,MAAQwE,sBAAoB,QAC5BxE,IAAA,MAAQyE,sBAAoB,QAC5BzE,IAAA,MAAQ0E,sBAAoB,QAC5B1E,IAAA,MAAQ2E,sBAAoB,QAC5B3E,IAAA,MAAQ4E,sBAAoB,QA5E9B,CAAY/P,EAAAmL,WAAAnL,EAAAmL,cA+EZ,SAAY6E,GACVA,IAAA,SAAWC,qBAAmB,WAC9BD,IAAA,cAAgBE,0BAAwB,gBACxCF,IAAA,WAAaG,uBAAqB,aAClCH,IAAA,WAAaI,uBAAqB,aAJpC,CAAYpQ,EAAAgQ,SAAAhQ,EAAAgQ,YAWZ,SAAYK,GACVA,IAAA,IAAMC,yBAAuB,MAC7BD,IAAA,IAAME,yBAAuB,MAC7BF,IAAA,IAAMG,yBAAuB,MAC7BH,IAAA,GAAKI,wBAAsB,KAC3BJ,IAAA,IAAMK,yBAAuB,MAC7BL,IAAA,KAAOM,0BAAwB,OANjC,CAAY3Q,EAAAqQ,cAAArQ,EAAAqQ,iBASZ,IAAAO,EAAA,oBAAAA,KAWA,OANSA,EAAApN,OAAP,SAAcqN,EAAoBC,GAChC,IAAIC,EAAU,IAAIH,EAGlB,OAFAG,EAAQF,OAASA,EACjBE,EAAQD,OAASA,EACVC,GAEXH,EAXA,GAAa5Q,EAAA4Q,gBAab,IAAAI,EAAA,WA2BE,SAAAA,KAyvBF,OA5wBSA,EAAAxN,OAAP,WACE,IAAIvD,EAAS,IAAI+Q,EAGjB,OAFA/Q,EAAOgR,IAAMC,wBACbjR,EAAOkR,IAAMC,gBAAgB,IACtBnR,GAGF+Q,EAAAK,WAAP,SAAkBR,GAChB,IAAIS,EAAOC,EAAaV,GACxB,IACE,IAAI5Q,EAAS,IAAI+Q,EAGhB,OAFD/Q,EAAOgR,IAAMO,oBAAoBF,EAAMT,EAAOnM,QAC9CzE,EAAOkR,IAAMC,gBAAgB,IACrBnR,UAERwR,YAAYC,WAAkBJ,MAQlCN,EAAAhP,UAAA2P,gBAAA,SACEzQ,EACA0Q,EACAC,GAEA,IAAIC,EAAOC,EAAY7Q,GACnBoQ,EAAOU,EAAcH,GACzB,IACE,OAAOI,yBAAyB3R,KAAK2Q,IAAKa,EAAMF,EAAQN,EAAMO,EAAWnN,gBAEzE+M,YAAYH,GACZG,YAAYK,KAIhBd,EAAAhP,UAAAkQ,2BAAA,SACEN,EACAC,GAEA,IAAIP,EAAOU,EAAcH,GACzB,IACE,OAAOM,oCAAoC7R,KAAK2Q,IAAKW,EAAQN,EAAMO,EAAWnN,gBAE9E+M,YAAYH,KAMhBN,EAAAhP,UAAAoQ,UAAA,SAAUzQ,GACR,IAAIwP,EAAM7Q,KAAK6Q,IAEf,OADAkB,sBAAsBlB,EAAKxP,GACpB2Q,eAAehS,KAAK2Q,IAAKE,IAGlCH,EAAAhP,UAAAuQ,UAAA,SAAUC,EAAeC,QAAA,IAAAA,MAAA,GACvB,IAAItB,EAAM7Q,KAAK6Q,IAEf,OADAuB,sBAAsBvB,EAAKqB,EAAUC,GAC9BH,eAAehS,KAAK2Q,IAAKE,IAGlCH,EAAAhP,UAAA2Q,UAAA,SAAUhR,GACR,IAAIwP,EAAM7Q,KAAK6Q,IAEf,OADAyB,wBAAwBzB,EAAKxP,GACtB2Q,eAAehS,KAAK2Q,IAAKE,IAGlCH,EAAAhP,UAAA6Q,UAAA,SAAUlR,GACR,IAAIwP,EAAM7Q,KAAK6Q,IAEf,OADA2B,wBAAwB3B,EAAKxP,GACtB2Q,eAAehS,KAAK2Q,IAAKE,IAKlCH,EAAAhP,UAAA+Q,YAAA,SACEC,EACAC,GAEA,OAAOC,eAAe5S,KAAK2Q,IAAK+B,EAAIC,IAGtCjC,EAAAhP,UAAAmR,aAAA,SACEH,EACAI,EACAC,GAEA,OAAOC,gBAAgBhT,KAAK2Q,IAAK+B,EAAII,EAAMC,IAG7CrC,EAAAhP,UAAAuR,WAAA,SACEP,EACA9R,EACAsS,QADA,IAAAtS,MAAA,WACA,IAAAsS,MAAA,MAEA,IAAI1B,EAAOC,EAAY7Q,GACnBoQ,EAAOU,EAAcwB,GACzB,IACE,OAAOC,cAAcnT,KAAK2Q,IAAK+B,EAAIlB,EAAMR,EAAMkC,EAA6BA,EAAU9O,OAAS,WAE/F+M,YAAYH,GACZG,YAAYK,KAIhBd,EAAAhP,UAAA0R,eAAA,SACEC,EACAC,GAEA,OAAOC,kBAAkBvT,KAAK2Q,IAAK0C,EAAOC,IAG5C5C,EAAAhP,UAAA8R,eAAA,SACEH,EACAhS,GAEA,OAAOoS,kBAAkBzT,KAAK2Q,IAAK0C,EAAOhS,IAG5CqP,EAAAhP,UAAAgS,gBAAA,SACE9S,EACA0S,GAEA,IAAI9B,EAAOC,EAAY7Q,GACvB,IACE,OAAO+S,mBAAmB3T,KAAK2Q,IAAKa,EAAM8B,WAE1CnC,YAAYK,KAIhBd,EAAAhP,UAAAkS,WAAA,SACEC,EACAC,EACAC,EACAT,EACA9C,GAEA,YAFA,IAAAA,MAAA,GAEOwD,cAAchU,KAAK2Q,IAAKkD,EAAOC,EAAS,EAAI,EAAGtD,EAA6BqD,EAAOP,EAAMS,IAGlGrD,EAAAhP,UAAAuS,YAAA,SACEJ,EACAE,EACA1S,EACAiS,EACA9C,GAEA,YAFA,IAAAA,MAAA,GAEO0D,eAAelU,KAAK2Q,IAAKkD,EAAOrD,EAA6BqD,EAAOE,EAAK1S,EAAOiS,IAGzF5C,EAAAhP,UAAAyS,iBAAA,SACEN,EACAE,EACAT,EACA9C,GAEA,YAFA,IAAAA,MAAA,GAEO4D,oBAAoBpU,KAAK2Q,IAAKkD,EAAOrD,EAAQ8C,EAAMS,IAG5DrD,EAAAhP,UAAA2S,kBAAA,SACER,EACAE,EACA1S,EACAiS,EACA9C,GAEA,YAFA,IAAAA,MAAA,GAEO8D,qBAAqBtU,KAAK2Q,IAAKkD,EAAOrD,EAAQuD,EAAK1S,EAAOiS,IAGnE5C,EAAAhP,UAAA6S,gBAAA,SACE7B,EACAmB,EACArD,EACAuD,EACA1S,EACAiS,GAEA,OAAOkB,mBAAmBxU,KAAK2Q,IAAK+B,EAAImB,EAAOrD,EAAQuD,EAAK1S,EAAOiS,IAGrE5C,EAAAhP,UAAA+S,oBAAA,SACEZ,EACArD,EACAuD,EACAW,EACAC,EACArB,GAEA,OAAOsB,uBAAuB5U,KAAK2Q,IAAKkD,EAAOrD,EAAQuD,EAAKW,EAAUC,EAAarB,IAGrF5C,EAAAhP,UAAAmT,iBAAA,SACEd,EACAW,EACAI,EACAC,GAEA,OAAOC,oBAAoBhV,KAAK2Q,IAAKoD,EAAKW,EAAUI,EAASC,IAG/DrE,EAAAhP,UAAAuT,iBAAA,SACElB,EACAmB,GAEA,OAAOC,oBAAoBnV,KAAK2Q,IAAKoD,EAAKmB,IAK5CxE,EAAAhP,UAAA0T,eAAA,SACE/B,EACAhS,GAEA,OAAOgU,kBAAkBrV,KAAK2Q,IAAK0C,EAAOhS,IAG5CqP,EAAAhP,UAAA4T,gBAAA,SACE1U,EACAS,GAEA,IAAImQ,EAAOC,EAAY7Q,GACvB,IACE,OAAO2U,mBAAmBvV,KAAK2Q,IAAKa,EAAMnQ,WAE1C8P,YAAYK,KAIhBd,EAAAhP,UAAA8T,YAAA,SACEC,EACAC,EACApC,QAAA,IAAAA,MAAmB/N,EAAWoQ,MAE9B,IAAInE,EAAOC,EAAYgE,GACnBzE,EAAOU,EAAcgE,GACzB,IACE,OAAOE,eAAe5V,KAAK2Q,IAAKa,EAAMR,EAAM0E,EAAStR,OAAQkP,WAE7DnC,YAAYH,GACZG,YAAYK,KAIhBd,EAAAhP,UAAAmU,YAAA,SACEJ,EACAK,EACAzU,QADA,IAAAyU,MAAA,QACA,IAAAzU,MAAA,GAEA,IAAImQ,EAAOC,EAAYgE,GACvB,IACE,OAAOM,eAAe/V,KAAK2Q,IAAKa,EAAMsE,EAAWzU,WAEjD8P,YAAYK,KAIhBd,EAAAhP,UAAAsU,WAAA,SACEC,GAEA,OAAOC,cAAclW,KAAK2Q,IAAKsF,IAGjCvF,EAAAhP,UAAAyU,WAAA,SACEV,EACAW,GAEA,IAAI5E,EAAOC,EAAYgE,GACvB,IACE,OAAOY,cAAcrW,KAAK2Q,IAAKa,EAAM4E,WAErCjF,YAAYK,KAIhBd,EAAAhP,UAAA4U,SAAA,SACER,EACAS,EACAC,GAEA,YAFA,IAAAA,MAAA,GAEOC,YAAYzW,KAAK2Q,IAAKmF,EAAWS,EAAQC,IAGlD9F,EAAAhP,UAAAgV,UAAA,WACE,OAAOC,aAAa3W,KAAK2Q,MAG3BD,EAAAhP,UAAAkV,aAAA,SACEX,GAEA,YAFA,IAAAA,MAAA,GAEOY,gBAAgB7W,KAAK2Q,IAAKsF,IAGnCvF,EAAAhP,UAAAoV,aAAA,SACEP,EACAC,EACAV,GAEA,OAAOiB,gBAAgB/W,KAAK2Q,IAAKmF,EAAWS,EAAQC,IAGtD9F,EAAAhP,UAAAsV,aAAA,SACEC,EACAC,EACApB,EACAzU,QAAA,IAAAA,MAAA,GAGA,IADA,IAAI8V,EAAO,IAAIjS,MAAa+R,EAAM7S,QACzB/D,EAAI,EAAG+W,EAASH,EAAM7S,OAAQ/D,EAAI+W,IAAK/W,EAC9C8W,EAAK9W,GAAKoR,EAAYwF,EAAM5W,IAE9B,IAAI2Q,EAAOU,EAAcyF,GACrB3F,EAAOC,EAAYyF,GACvB,IACE,OAAOG,gBAAgBrX,KAAK2Q,IAAKK,EAAMoG,EAAG5F,EAAMsE,EAAWzU,WAI3D,IAFA8P,YAAYK,GACZL,YAAYH,GACP3Q,EAAI+W,EAAI,EAAG/W,GAAK,IAAKA,EAAG8Q,YAAYgG,EAAK9W,MAIlDqQ,EAAAhP,UAAA4V,WAAA,SACEC,EACArE,EACAsE,GAEA,IAAIhG,EAAOC,EAAY8F,GACnBvG,EAAOU,EAAcwB,GACzB,IACE,OAAOuE,cAAczX,KAAK2Q,IAAKa,EAAMR,EAAMkC,GAAYA,EAAS9O,QAAU,EAAGoT,WAE7ErG,YAAYH,GACZG,YAAYK,KAIhBd,EAAAhP,UAAAgW,iBAAA,SACEH,EACArE,EACAsE,GAEA,IAAIhG,EAAOC,EAAY8F,GACnBvG,EAAOU,EAAcwB,GACzB,IACE,OAAOyE,oBAAoB3X,KAAK2Q,IAAKa,EAAMR,EAAMkC,GAAYA,EAAS9O,QAAU,EAAGoT,WAEnFrG,YAAYH,GACZG,YAAYK,KAIhBd,EAAAhP,UAAAkW,kBAAA,WACE,OAAOC,qBAAqB7X,KAAK2Q,MAKnCD,EAAAhP,UAAAoW,UAAA,SACElX,EACA0S,EACAyE,EACAC,GAEA,IAAIxG,EAAOC,EAAY7Q,GACvB,IACE,OAAOqX,mBAAmBjY,KAAK2Q,IAAKa,EAAM8B,EAAMyE,EAAU,EAAI,EAAGC,WAEjE7G,YAAYK,KAIhBd,EAAAhP,UAAAwW,YAAA,SACEtX,EACA0S,EACA6E,EACA/B,GAEA,IAAI5E,EAAOC,EAAY7Q,GACnBoQ,EAAOU,EAAcyG,GACzB,IACE,OAAOC,qBAAqBpY,KAAK2Q,IAAKa,EAAM8B,EAAMtC,EAAMmH,EAAS/T,OAAQgS,WAEzEjF,YAAYH,GACZG,YAAYK,KAIhBd,EAAAhP,UAAA2W,eAAA,SAAezX,GACb,IAAI4Q,EAAOC,EAAY7Q,GACvB,IACE0X,wBAAwBtY,KAAK2Q,IAAKa,WAElCL,YAAYK,KAIhBd,EAAAhP,UAAA6W,kBAAA,SACEC,EACAC,GAEA,IAAIC,EAAQjH,EAAY+G,GACpBG,EAAQlH,EAAYgH,GACxB,IACE,OAAOG,2BAA2B5Y,KAAK2Q,IAAK+H,EAAOC,WAEnDxH,YAAYwH,GACZxH,YAAYuH,KAIhBhI,EAAAhP,UAAAmX,eAAA,SACEL,EACAC,GAEA,IAAIC,EAAQjH,EAAY+G,GACpBG,EAAQlH,EAAYgH,GACxB,IACE,OAAOK,wBAAwB9Y,KAAK2Q,IAAK+H,EAAOC,WAEhDxH,YAAYwH,GACZxH,YAAYuH,KAIhBhI,EAAAhP,UAAAqX,gBAAA,SACEP,EACAC,GAEA,IAAIC,EAAQjH,EAAY+G,GACpBG,EAAQlH,EAAYgH,GACxB,IACE,OAAOO,yBAAyBhZ,KAAK2Q,IAAK+H,EAAOC,WAEjDxH,YAAYwH,GACZxH,YAAYuH,KAIhBhI,EAAAhP,UAAAuX,gBAAA,SACET,EACAC,GAEA,IAAIC,EAAQjH,EAAY+G,GACpBG,EAAQlH,EAAYgH,GACxB,IACE,OAAOS,yBAAyBlZ,KAAK2Q,IAAK+H,EAAOC,WAEjDxH,YAAYwH,GACZxH,YAAYuH,KAIhBhI,EAAAhP,UAAAyX,aAAA,SAAaV,GACX,IAAIjH,EAAOC,EAAYgH,GACvB,IACEW,sBAAsBpZ,KAAK2Q,IAAKa,WAEhCL,YAAYK,KAIhBd,EAAAhP,UAAA2X,kBAAA,SACEb,EACAc,EACAC,EACAC,GAEA,IAAId,EAAQjH,EAAY+G,GACpBG,EAAQlH,EAAY6H,GACpBG,EAAQhI,EAAY8H,GACxB,IACE,OAAOG,2BAA2B1Z,KAAK2Q,IAAK+H,EAAOC,EAAOc,EAAOD,WAEjErI,YAAYsI,GACZtI,YAAYwH,GACZxH,YAAYuH,KAIhBhI,EAAAhP,UAAAiY,eAAA,SACEnB,EACAc,EACAC,GAEA,IAAIb,EAAQjH,EAAY+G,GACpBG,EAAQlH,EAAY6H,GACpBG,EAAQhI,EAAY8H,GACxB,IACE,OAAOK,wBAAwB5Z,KAAK2Q,IAAK+H,EAAOC,EAAOc,WAEvDtI,YAAYsI,GACZtI,YAAYwH,GACZxH,YAAYuH,KAIhBhI,EAAAhP,UAAAmY,gBAAA,SACErB,EACAc,EACAC,GAEA,IAAIb,EAAQjH,EAAY+G,GACpBG,EAAQlH,EAAY6H,GACpBG,EAAQhI,EAAY8H,GACxB,IACE,OAAOO,yBAAyB9Z,KAAK2Q,IAAK+H,EAAOC,EAAOc,WAExDtI,YAAYsI,GACZtI,YAAYwH,GACZxH,YAAYuH,KAIhBhI,EAAAhP,UAAAqY,gBAAA,SACEvB,EACAc,EACAC,EACAS,GAEA,IAAItB,EAAQjH,EAAY+G,GACpBG,EAAQlH,EAAY6H,GACpBG,EAAQhI,EAAY8H,GACxB,IACE,OAAOU,yBAAyBja,KAAK2Q,IAAK+H,EAAOC,EAAOc,EAAOO,WAE/D7I,YAAYsI,GACZtI,YAAYwH,GACZxH,YAAYuH,KAIhBhI,EAAAhP,UAAAwY,aAAA,SAAa1B,GACX,IAAIhH,EAAOC,EAAY+G,GACvB,IACE2B,sBAAsBna,KAAK2Q,IAAKa,WAEhCL,YAAYK,KAIhBd,EAAAhP,UAAA0Y,UAAA,SACEC,EACAC,EACAC,EACAhD,EACAiD,QAAA,IAAAA,MAAA,MAOA,IALA,IAAIhJ,EAAOC,EAAY+I,GACnBpD,EAAImD,EAASnW,OACbqW,EAAO,IAAIvV,MAAakS,GACxBsD,EAAO,IAAIxV,MAAqBkS,GAChCuD,EAAO,IAAIzV,MAAakS,GACnB/W,EAAI,EAAGA,EAAI+W,IAAK/W,EAAG,CAC1B,IAAIkQ,EAASgK,EAASla,GAAGkQ,OACrBC,EAAS+J,EAASla,GAAGmQ,OACzBiK,EAAKpa,GAAK4Q,EAAaV,GACvBmK,EAAKra,GAAKkX,GAAU9R,EAAAmV,OAAOC,OACvB7a,KAAKiS,UAAU6I,QAAQtK,GAASuK,SAASvK,IACzCxQ,KAAK8R,UAAUgJ,QAAQtK,IAC3BmK,EAAKta,GAAKkQ,EAAOnM,OAEnB,IAAI4W,EAAQtJ,EAAc+I,GACtBQ,EAAQvJ,EAAcgJ,GACtBQ,EAAQxJ,EAAciJ,GAC1B,IACEQ,mBAAmBnb,KAAK2Q,IAAK0J,EAASC,EAAS9I,EAAMwJ,EAAOC,EAAOC,EAAO9D,WAK1E,IAHAjG,YAAY+J,GACZ/J,YAAY8J,GACZ9J,YAAY6J,GACP3a,EAAI+W,EAAI,EAAG/W,GAAK,IAAKA,EAAG8Q,YAAYsJ,EAAKpa,IAC9C8Q,YAAYK,KAIhBd,EAAAhP,UAAA0Z,iBAAA,SAAiBC,GACf,IAAIrK,EAAOU,EAAc2J,GACzB,IACEC,0BAA0Btb,KAAK2Q,IAAKK,EAAMqK,EAAMjX,gBAEhD+M,YAAYH,KAIhBN,EAAAhP,UAAA6Z,SAAA,SAASC,GACPC,kBAAkBzb,KAAK2Q,IAAK6K,IAG9B9K,EAAAhP,UAAAga,iBAAA,SAAiBC,QAAA,IAAAA,MAAA,GACfC,0BAA0BD,IAG5BjL,EAAAhP,UAAAma,eAAA,SAAeF,QAAA,IAAAA,MAAA,GACbG,wBAAwBH,IAG1BjL,EAAAhP,UAAAqa,aAAA,SAAaC,QAAA,IAAAA,OAAA,GACXC,sBAAsBD,IAGxBtL,EAAAhP,UAAAwa,SAAA,SAASV,QAAA,IAAAA,MAAA,GACHA,EACFW,0BAA0BX,EAAMxb,KAAK2Q,KAErCyL,wBAAwBpc,KAAK2Q,MAIjCD,EAAAhP,UAAA2a,UAAA,SAAUC,EAAkBd,QAAA,IAAAA,MAAA,GAG1B,IAFA,IAAIpE,EAAIkF,EAAOlY,OACX6S,EAAQ,IAAI/R,MAAakS,GACpB/W,EAAI,EAAGA,EAAI+W,IAAK/W,EACvB4W,EAAM5W,GAAKoR,EAAY6K,EAAOjc,IAEhC,IAAI2Q,EAAOU,EAAcuF,GACzB,IACMuE,EACFe,2BAA2Bf,EAAMxb,KAAK2Q,IAAKK,EAAMoG,GAEjDoF,yBAAyBxc,KAAK2Q,IAAKK,EAAMoG,WAI3C,IADAjG,YAAYH,GACL3Q,GAAK,IAAKA,EAAG8Q,YAAY8F,EAAM5W,MAI1CqQ,EAAAhP,UAAA+a,SAAA,WACE,OAA4C,GAArCC,wBAAwB1c,KAAK2Q,MAGtCD,EAAAhP,UAAAib,UAAA,WACEC,yBAAyB5c,KAAK2Q,MAGhCD,EAAAhP,UAAAmb,SAAA,SAASC,GACP,IAAIjM,EAAM7Q,KAAK6Q,IACXW,EAAOC,EAAYqL,GACnBC,EAAmB,EACnBC,EAAsB,EAC1B,IACEC,gCAAgCpM,EAAK7Q,KAAK2Q,IAAKa,GAC/CuL,EAAeG,EAAQrM,GACvB,IAAIsM,EAAeD,EAAQrM,EAAM,GACjCmM,EAAeE,EAAQrM,EAAM,GAC7B,IAAIuM,EAAM,IAAIC,EAGd,OAFAD,EAAIE,OAASC,EAAWR,EAAWI,GACnCC,EAAII,UAAYC,EAAWT,GACpBI,UAEH5L,GAAML,YAAYK,GAClBuL,GAAW5L,YAAY4L,GACvBC,GAAc7L,YAAY6L,KAIlCtM,EAAAhP,UAAAgc,OAAA,WACE,MAAM,IAAIC,MAAM,oBAGlBjN,EAAAhP,UAAAkc,QAAA,WACE,MAAM,IAAID,MAAM,oBAGlBjN,EAAAhP,UAAAmc,QAAA,WACO7d,KAAK2Q,MACVmN,uBAAuB9d,KAAK2Q,KAC5BQ,YAAYnR,KAAK6Q,OAGnBH,EAAAhP,UAAAqc,eAAA,WACE,OAAOC,EAAS9a,OAAOlD,OAGzB0Q,EAAAhP,UAAAuc,gBAAA,SAAgBtL,EACduL,EACAC,GAEA,QAHA,IAAAD,OAAA,QACA,IAAAC,MAAgBC,IAAIC,WAEhBF,EAAW,EAAG,OAAO,EAGzB,IAAIG,EACAC,EAEJ,OALAJ,GAAY,EAKJK,yBAAyB7L,IAE/B,KAAKnN,EAAaiZ,MAChB,OAAQC,2BAA2B/L,IACjC,KAAKpN,EAAWoZ,IACd,OAAO3e,KAAK8R,UAAU8M,0BAA0BjM,IAClD,KAAKpN,EAAWsZ,IACd,OAAO7e,KAAKiS,UACV6M,6BAA6BnM,GAC7BoM,8BAA8BpM,IAElC,KAAKpN,EAAWyZ,IACd,OAAOhf,KAAKqS,UAAU4M,0BAA0BtM,IAClD,KAAKpN,EAAW2Z,IACd,OAAOlf,KAAKuS,UAAU4M,0BAA0BxM,IAClD,QACE,MAAM,IAAIgL,MAAM,0BAGtB,KAAKnY,EAAa4Z,SAChB,OAAO7L,kBAAkBvT,KAAK2Q,IAC5B0O,0BAA0B1M,GAC1B+L,2BAA2B/L,IAG/B,KAAKnN,EAAa8Z,UAChB,IAAIC,EAAaC,0BAA0B7M,GAC3C,IAAK4M,EAAY,MACjB,OAAO5L,mBAAmB3T,KAAK2Q,IAAK4O,EAAYb,2BAA2B/L,IAE7E,KAAKnN,EAAaia,KAChB,KAAMnB,EAAUte,KAAKie,gBAAgByB,oBAAoB/M,GAAOuL,EAAeC,IAC7E,MAEF,OAAOwB,sBAAsBhN,GACzByB,oBAAoBpU,KAAK2Q,IACvBiP,sBAAsBjN,GACtBkN,uBAAuBlN,GACvB+L,2BAA2B/L,GAC3B2L,GAEFtK,cAAchU,KAAK2Q,IACjBiP,sBAAsBjN,GACtBmN,sBAAsBnN,GAAQ,EAAI,EAClCkN,uBAAuBlN,GACtBoN,sBAAsBpN,GACtB+L,2BAA2B/L,GAC3B2L,GAGT,KAAK9Y,EAAawa,MAChB,KAAM1B,EAAUte,KAAKie,gBAAgBgC,uBAAuBtN,GAAOuL,EAAeC,IAChF,MAEF,OAAOvL,eAAe5S,KAAK2Q,IAAKuP,oBAAoBvN,GAAO2L,GAE7D,KAAK9Y,EAAa6X,OAChB,KAAMiB,EAAUte,KAAKie,gBAAgBkC,uBAAuBxN,GAAOuL,EAAeC,IAChF,MAEF,KAAMI,EAAUve,KAAKie,gBAAgBmC,wBAAwBzN,GAAOuL,EAAeC,IACjF,MAEF,OAAOnL,gBAAgBhT,KAAK2Q,IAAK0P,qBAAqB1N,GAAO2L,EAASC,GAE1E,OAAO,GAKT7N,EAAAhP,UAAA4e,iBAAA,SAAiB1f,GACf,IAAI4Q,EAAOC,EAAY7Q,GACvB,IACE,OAAO2f,oCAAoCvgB,KAAK2Q,IAAKa,WAErDL,YAAYK,KAIhBd,EAAAhP,UAAA8e,iBAAA,SAAiBnN,GACf,OAAOoK,EAAWgD,oCAAoCzgB,KAAK2Q,IAAK0C,KAGlE3C,EAAAhP,UAAAgf,iBAAA,SACElF,EACA7I,EACAgO,EACAC,EACAC,GAEAC,kCAAkCtF,EAAM7I,EAAMgO,EAAWC,EAAYC,IA7wBvDnQ,EAAAqQ,kBAA2B,MA+wB7CrQ,EApxBA,GAAahR,EAAAgR,SAsxBb,IAAAsN,EAAA,WAmBE,SAAAA,KA0BF,OAxCSA,EAAA9a,OAAP,SAAcvD,GACZ,IAAIqhB,EAAW,IAAIhD,EAGjB,OAFFgD,EAASrhB,OAASA,EAClBqhB,EAASrQ,IAAMsQ,kBACND,GAGJhD,EAAAkD,WAAP,SAAkBvhB,GAChB,IAAIqhB,EAAW,IAAIhD,EAGnB,OAFAgD,EAASrhB,OAASA,EAClBqhB,EAASrQ,IAAM,EACRqQ,GAKThD,EAAAtc,UAAAyf,SAAA,SAASpe,GACP,OAAOqe,kBAAkBphB,KAAK2Q,IAAK5N,IAGrCib,EAAAtc,UAAA2f,UAAA,SAAUC,EAAwBC,EAAsBzL,EAA8B/S,QAA9B,IAAA+S,MAAA,QAA8B,IAAA/S,MAAA,GACpFye,mBAAmBF,EAAMC,EAAIzL,EAAW/S,IAG1Cib,EAAAtc,UAAA+f,mBAAA,SAAmB1e,EAAqB+S,GACtC,OAAO4L,4BAA4B1hB,KAAK2Q,IAAK5N,EAAM+S,IAGrDkI,EAAAtc,UAAAigB,mBAAA,SAAmBL,EAAwBC,EAAsBK,EAAgB7e,QAAA,IAAAA,MAAA,GAC/E,IAAIiO,EAAOU,EAAckQ,GACzB,IACEC,4BAA4BP,EAAMC,EAAIvQ,EAAM4Q,EAAQxd,OAAQrB,WAE5DoO,YAAYH,KAIhBgN,EAAAtc,UAAAogB,iBAAA,SAAiBC,EAAyBC,GACxC,OAAOC,0BAA0BjiB,KAAK2Q,IAAKoR,EAAOC,EAAahiB,KAAKL,OAAOgR,MAE/EqN,EA7CA,GAkDA,SAAA/M,EAAsBiR,GACpB,IAAKA,EAAK,OAAO,EAGjB,IAFA,IAAInO,EAAMjD,gBAAgBoR,EAAI9d,QAC1B+d,EAAMpO,EACD1T,EAAI,EAAG+W,EAAI8K,EAAI9d,OAAQ/D,EAAI+W,IAAK/W,EACvC+hB,MAAUD,IAAOD,EAAI7hB,IAEvB,OAAO0T,EAGT,SAAArC,EAAuB2Q,GACrB,IAAKA,EAAM,OAAO,EAGlB,IAFA,IAAItO,EAAMjD,gBAAgBuR,EAAKje,QAAU,GACrC+d,EAAMpO,EACD1T,EAAI,EAAG+W,EAAIiL,EAAKje,OAAQ/D,EAAI+W,IAAK/W,EAAG,CAC3C,IAAIiiB,EAAMD,EAAKhiB,GAEf+hB,MAAUD,EAAyB,IAAdG,GACrBF,MAAUD,EAAM,EAAKG,GAAS,EAAK,KACnCF,MAAUD,EAAM,EAAKG,GAAQ,GAAM,KACnCF,MAAUD,EAAM,EAAKG,IAAQ,IAC7BH,GAAO,EAET,OAAOpO,EA2BT,SAAAtC,EAAqB8Q,GACnB,GAAW,MAAPA,EAAa,OAAO,EAGxB,IAFA,IAAIxO,EAAMjD,gBA1BZ,SAA0ByR,GAExB,IADA,IAAIpe,EAAM,EACD9D,EAAI,EAAG+W,EAAImL,EAAIne,OAAQ/D,EAAI+W,IAAK/W,EAAG,CAC1C,IAAImiB,EAAID,EAAIje,WAAWjE,GACnBmiB,GAAK,OAAUA,GAAK,OAAUniB,EAAI,EAAI+W,IACxCoL,EAAI,QAAgB,KAAJA,IAAc,IAA6B,KAAtBD,EAAIje,aAAajE,IAEpDmiB,GAAK,MACLre,EAEFA,GADSqe,GAAK,KACP,EACEA,GAAK,MACP,EACEA,GAAK,QACP,EACEA,GAAK,SACP,EAEA,EAGX,OAAOre,EAKmBse,CAAiBF,GAAO,GAC9CJ,EAAMpO,EACD1T,EAAI,EAAG+W,EAAImL,EAAIne,OAAQ/D,EAAI+W,IAAK/W,EAAG,CAC1C,IAAImiB,EAAID,EAAIje,WAAWjE,GACnBmiB,GAAK,OAAUA,GAAK,OAAUniB,EAAI,EAAI+W,IACxCoL,EAAI,QAAgB,KAAJA,IAAc,IAA6B,KAAtBD,EAAIje,aAAajE,IAEpDmiB,GAAK,IACPJ,MAAUD,IAAOK,GACRA,GAAK,MACdJ,MAAUD,IAAQ,IAASK,IAAM,GACjCJ,MAAUD,IAAQ,IAAqB,GAAZK,IAClBA,GAAK,OACdJ,MAAUD,IAAQ,IAASK,IAAM,IACjCJ,MAAUD,IAAQ,IAASK,IAAO,EAAK,IACvCJ,MAAUD,IAAQ,IAAqB,GAAZK,IAClBA,GAAK,SACdJ,MAAUD,IAAQ,IAASK,IAAM,IACjCJ,MAAUD,IAAQ,IAASK,IAAM,GAAM,IACvCJ,MAAUD,IAAQ,IAASK,IAAO,EAAK,IACvCJ,MAAUD,IAAQ,IAAqB,GAAZK,IAClBA,GAAK,UACdJ,MAAUD,IAAQ,IAASK,IAAM,IACjCJ,MAAUD,IAAQ,IAASK,IAAM,GAAM,IACvCJ,MAAUD,IAAQ,IAASK,IAAM,GAAM,IACvCJ,MAAUD,IAAQ,IAASK,IAAO,EAAK,IACvCJ,MAAUD,IAAQ,IAAqB,GAAZK,KAE3BJ,MAAUD,IAAQ,IAASK,IAAM,IACjCJ,MAAUD,IAAQ,IAASK,IAAM,GAAM,IACvCJ,MAAUD,IAAQ,IAASK,IAAM,GAAM,IACvCJ,MAAUD,IAAQ,IAASK,IAAM,GAAM,IACvCJ,MAAUD,IAAQ,IAASK,IAAO,EAAK,IACvCJ,MAAUD,IAAQ,IAAqB,GAAZK,IAI/B,OADAJ,MAAUD,EAAK,GACRpO,EAGT,SAAAmJ,EAAwBnJ,GACtB,OACG2O,KAAS3O,GACT2O,KAAS3O,EAAM,IAAO,EACtB2O,KAAS3O,EAAM,IAAM,GACrB2O,KAAS3O,EAAM,IAAM,GAI1B,SAAAwJ,EAA2BxJ,EAAY3P,GAErC,IADA,IAAIgZ,EAAM,IAAIuF,WAAWve,GAChB/D,EAAW,EAAGA,EAAI+D,IAAU/D,EACnC+c,EAAI/c,GAAKqiB,KAAS3O,EAAM1T,GAE1B,OAAO+c,EAGT,SAAAK,EAA2B1J,GACzB,IAAKA,EAAK,OAAO,KAKjB,IAJA,IAEI6O,EACAC,EAASC,EAASC,EAASC,EAH3BC,EAAM,IAAI/d,MAIP0d,EAAKF,KAAS3O,MACR,IAAL6O,GAINC,EAAuB,GAAlBH,KAAS3O,KACK,MAAT,IAAL6O,IAILE,EAAuB,GAAlBJ,KAAS3O,KACK,MAAT,IAAL6O,GACHA,GAAY,GAALA,IAAY,GAAOC,GAAM,EAAKC,GAErCC,EAAuB,GAAlBL,KAAS3O,KACK,MAAT,IAAL6O,GACHA,GAAY,EAALA,IAAW,GAAOC,GAAM,GAAOC,GAAM,EAAKC,GAEjDC,EAAuB,GAAlBN,KAAS3O,KAEZ6O,EADiB,MAAT,IAALA,IACS,EAALA,IAAW,GAAOC,GAAM,GAAOC,GAAM,GAAOC,GAAM,EAAKC,GAGlD,EAALJ,IAAW,GAAOC,GAAM,GAAOC,GAAM,GAAOC,GAAM,GAAOC,GAAM,EAD/C,GAAlBN,KAAS3O,QAflBkP,EAAIxe,MAAY,GAALme,IAAY,EAAKC,IAL5BI,EAAIxe,KAAKme,GAkCb,OAAOM,OAAOC,eAAeF,GAzMlBvjB,EAAAse,WA8Ibte,EAAAwd,UASAxd,EAAA6d,aAQA7d,EAAA+d,aA8CA,IAAAJ,EAAA,WAKA,OALA,43BCxsCA,IAAA+F,EAAAjjB,EAAA,GAMAkjB,EAAAljB,EAAA,GAKAmjB,EAAAnjB,EAAA,GA2CAojB,EAAApjB,EAAA,GAOaT,EAAA8jB,eAAiB,IAEjB9jB,EAAA+jB,aAAe,KAEf/jB,EAAAgkB,cAAgB,OAEhBhkB,EAAAikB,cAAgB,OAEhBjkB,EAAAkkB,mBAAqB,IAErBlkB,EAAAmkB,iBAAmB,IAEnBnkB,EAAAokB,cAAgB,QAEhBpkB,EAAAqkB,eAAiBrkB,EAAAokB,cAAgBpkB,EAAA8jB,eAE9C,IAAAQ,EAAA,WAIA,OAJA,gBAMAC,EAAA,WAKA,OALA,gBAOMC,EAAa,IAAIC,IAGvBC,EAAA,SAAAC,GAkBE,SAAAD,EAAYnf,QAAA,IAAAA,MAAA,MAAZ,IAAAqf,EACED,EAAA7jB,KAAAR,KAAMiF,IAAYjF,YAdpBskB,EAAAC,kBAAyB,EAIzBD,EAAAE,SAAgC,IAAIL,IAEpCG,EAAAG,MAA0BP,EAE1BI,EAAAI,YAAoC,IAAIP,IAExCG,EAAA5kB,QAA+B,IAAIykB,IAKjCG,EAAKK,aAukDT,OA3lD6BC,EAAAR,EAAAC,GAwB3BD,EAAA1iB,UAAAmjB,WAAA,SAAWC,GACT9kB,KAAK8kB,QAAUA,EAEf9kB,KAAKykB,MAAQ,IAAIN,MACd,KAAMd,EAAA0B,KAAKC,KACX,MAAO3B,EAAA0B,KAAKE,MACZ,MAAO5B,EAAA0B,KAAK3G,MACZ,MAAOiF,EAAA0B,KAAKG,MACZ,QAASJ,EAAQK,YACjB,KAAM9B,EAAA0B,KAAKK,KACX,MAAO/B,EAAA0B,KAAKM,MACZ,MAAOhC,EAAA0B,KAAKO,MACZ,MAAOjC,EAAA0B,KAAKQ,MACZ,QAAST,EAAQU,YACjB,OAAQnC,EAAA0B,KAAKU,OACb,MAAOpC,EAAA0B,KAAKW,MACZ,MAAOrC,EAAA0B,KAAKY,MACZ,OAAQtC,EAAA0B,KAAKa,OACb,SAAUvC,EAAA0B,KAAKY,MACf,UAAWtC,EAAA0B,KAAKU,QAQnB,IALA,IAgEII,MAhEAC,EAAgB,IAAI3B,IACpB4B,EAAgB,IAAI7gB,MACpB8gB,EAAuB,IAAI9gB,MAGtB7E,EAAI,EAAG+W,EAAIpX,KAAK2kB,QAAQvgB,OAAQ/D,EAAI+W,IAAK/W,EAGhD,IAFA,IACI4lB,EADSjmB,KAAK2kB,QAAQtkB,GACF4lB,WACfC,EAAI,EAAG5lB,EAAI2lB,EAAW7hB,OAAQ8hB,EAAI5lB,IAAK4lB,EAAG,CACjD,IAAIC,EAAYF,EAAWC,GAC3B,OAAQC,EAAUC,MAEhB,KAAK9C,EAAA+C,SAASC,iBACZtmB,KAAKumB,gBACeJ,EAClBH,GAEF,MAEF,KAAK1C,EAAA+C,SAASG,gBACZxmB,KAAKymB,eAAgCN,GACrC,MAEF,KAAK7C,EAAA+C,SAASK,OACZ1mB,KAAK2mB,kBACcR,EACjBL,GAEF,MAEF,KAAKxC,EAAA+C,SAASO,oBACZ5mB,KAAK6mB,mBAAwCV,GAC7C,MAEF,KAAK7C,EAAA+C,SAASS,OACZ9mB,KAAK+mB,kBACcZ,EACjBL,EACAC,GAEF,MAEF,KAAKzC,EAAA+C,SAASW,qBACZhnB,KAAKinB,oBAA0Cd,GAC/C,MAEF,KAAK7C,EAAA+C,SAASa,qBACZlnB,KAAKmnB,oBACmBhB,EACtBH,GAEF,MAEF,KAAK1C,EAAA+C,SAASe,gBACZpnB,KAAKqnB,oBAAqClB,GAC1C,MAEF,KAAK7C,EAAA+C,SAASiB,SACZtnB,KAAKunB,oBAAuCpB,IAUpD,IAAK9lB,EAAI,EAAGA,EAAI0lB,EAAc3hB,QAAS,CACrC,IAAIojB,EAAezB,EAAc1lB,IACjCwlB,EAAU7lB,KAAKynB,iBACbD,EAAaE,eACb5B,KAGA9lB,KAAKwkB,SAASmD,IAAIH,EAAahP,aAAcqN,GAC7CE,EAAc6B,OAAOvnB,EAAG,KAExBwlB,EAAU7lB,KAAKynB,iBACbD,EAAaK,kBACb/B,KAGA9lB,KAAKwkB,SAASmD,IAAIH,EAAahP,aAAcqN,GAC7CE,EAAc6B,OAAOvnB,EAAG,KAExBL,KAAKoF,MACHge,EAAA7gB,eAAeulB,kCACfN,EAAaO,YAAY9kB,MACPukB,EAAaO,YAAYC,OAAQC,KAAK5mB,MACxDmmB,EAAaO,YAAYtP,aAAavU,QAEtC7D,OAMR,IAAuC,IAAA6nB,EAAAC,EAAArC,GAAasC,EAAAF,EAAAG,QAAAD,EAAAE,KAAAF,EAAAF,EAAAG,OAAA,CAA3C,IAAAE,EAAAC,EAAAJ,EAAA/mB,MAAA,GAACmZ,EAAA+N,EAAA,GAAYE,EAAAF,EAAA,GAChBG,EAAqCD,EACzC,EAAG,CACD,IAAIC,EAAcC,WAoBX,EAGF9C,EAAU7lB,KAAKwkB,SAASrjB,IAAIunB,EAAchB,mBAE1C7B,EAAU7lB,KAAKwkB,SAASrjB,IAAIunB,EAAcE,OAAOhoB,KAAKsD,OAEvDlE,KAAK6oB,yBACHrO,EACAqL,EACA6C,EAAcE,OAAOnQ,cAGvBzY,KAAKoF,MACHge,EAAA7gB,eAAeumB,mBACfL,EAAaG,OAAO3lB,MAAOwlB,EAAaG,OAAOhoB,KAAKsD,MAGxD,MArCA,GAAI2hB,EAAU7lB,KAAKN,QAAQyB,IAAIunB,EAAchB,gBAAiB,CAC5D1nB,KAAK6oB,yBACHrO,EACAqL,EACA6C,EAAcE,OAAOnQ,cAEvB,OAEFiQ,EAAgB5C,EAAc3kB,IAAIunB,EAAchB,kBAE9C1nB,KAAKoF,MACHge,EAAA7gB,eAAeulB,kCACfW,EAAaG,OAAOnQ,aAAaxV,MAEdwlB,EAAaG,OAAOZ,OACrCC,KAAM5mB,MACRonB,EAAaG,OAAOnQ,aAAavU,YAuBhCwkB,qGAIX,IAAKroB,EAAI,EAAG+W,EAAI4O,EAAqB5hB,OAAQ/D,EAAI+W,IAAK/W,EAAG,CACvD,IAAI0oB,EAAqB/C,EAAqB3lB,GAAG0nB,YAC7CiB,EAAcC,OAAOF,EAAmBG,aACxCC,EAAWnpB,KAAKopB,kBAAkBJ,EAAYpoB,KAAM,MACxD,GAAIuoB,EAAU,CACZ,GAAIA,EAAStD,QAAQO,MAAQiD,EAAYC,gBAAiB,CACxDtpB,KAAKoF,MACHge,EAAA7gB,eAAegnB,sCACfP,EAAY/lB,OAEd,SAEF+iB,EAAqB3lB,GAAGmpB,cACNL,EAAStD,WAOzBzB,EAAA1iB,UAAA+lB,iBAAR,SACEC,EACA5B,GAGA,IADA,IAAID,IACD,CACD,GAAIA,EAAU7lB,KAAKN,QAAQyB,IAAIumB,GAC7B,OAAO7B,EAET,IAAI4C,EAAe3C,EAAc3kB,IAAIumB,GACrC,IAAKe,EAAc,OAAO,KAC1B,IAAIA,EAAaE,WAIjB,OAAO3oB,KAAKwkB,SAASrjB,IAAIsnB,EAAaf,gBAHpCA,EAAiBe,EAAaf,iBAO5BtD,EAAA1iB,UAAA+nB,wBAAR,SACE5D,EACAkC,GAEA,IAAI2B,EAAkBpG,EAAAqG,aAAa,UAAW5B,EAAY6B,YACtDF,GACF7D,EAAQ8B,IAAIkC,EAAaC,UAGzBxG,EAAAqG,aAAa,SAAU5B,EAAY6B,aAEjC7B,EAAY9kB,MAAMW,OAAOmmB,WACzBlE,EAAQmE,GAAGH,EAAaI,YAEtBhB,OAAOlB,EAAYC,QAAQ5B,MAAQ9C,EAAA+C,SAAS6D,QAEpCnC,EAAYC,OAAQ5B,MAAQ9C,EAAA+C,SAASiB,UAC3C2B,OAAclB,EAAYC,OAAQA,QAAQ5B,MAAQ9C,EAAA+C,SAAS6D,WAIjErE,EAAQ8B,IAAIkC,EAAaM,QACrBnqB,KAAKwkB,SAAS4F,IAAIrC,EAAYnnB,KAAKsD,MACrClE,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACftC,EAAYnnB,KAAKqC,MAAO4iB,EAAQrN,eAGlCxY,KAAKwkB,SAASmD,IAAII,EAAYnnB,KAAKsD,KAAM2hB,GACzC7lB,KAAKN,QAAQioB,IAAII,EAAYnnB,KAAKsD,KAAM2hB,GACpC6D,IACF7D,EAAQrN,aAAeuP,EAAYnnB,KAAKsD,SAMxCkgB,EAAA1iB,UAAA6kB,gBAAR,SACEwB,EACA/B,EACAsE,QAAA,IAAAA,MAAA,MAEA,IAAI9R,EAAeuP,EAAYwC,sBAC/B,GAAIvqB,KAAKwkB,SAAS4F,IAAI5R,GACpBxY,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACftC,EAAYnnB,KAAKqC,MAAOuV,OAH5B,CAOA,IAAI9W,EAAY,IAAI8oB,EAClBxqB,KACA+nB,EAAYnnB,KAAKsD,KACjBsU,EACAuP,GAOF,GALArmB,EAAU4oB,UAAYA,EACtBtqB,KAAKwkB,SAASmD,IAAInP,EAAc9W,GAEhC1B,KAAKypB,wBAAwB/nB,EAAWqmB,GAEpCzE,EAAAqG,aAAa,YAAa5B,EAAY6B,YACxCloB,EAAU+oB,aAAc,EACpB1C,EAAY2C,iBAAmB3C,EAAY2C,gBAAgBtmB,QAC7DpE,KAAKoF,MACHge,EAAA7gB,eAAeooB,oCACfrH,EAAAsH,MAAMlmB,KACJqjB,EAAYnnB,KAAKqC,MACjB8kB,EAAY2C,gBAAgB3C,EAAY2C,gBAAgBtmB,OAAS,GAC9DnB,aAIJ,GAAI8kB,EAAY2C,gBAAgBtmB,OACrC,MAAM,IAAIuZ,MAAM,mBASlB,GALIoK,EAAYmB,aACdlD,EAAqBvhB,KAAK/C,GAIxB4oB,EAAW,CACb,GAAIA,EAAUO,SACZ,GAAIP,EAAUO,QAAQT,IAAIrC,EAAYnnB,KAAKsD,MAKzC,YAJAlE,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACftC,EAAYnnB,KAAKqC,MAAOuV,QAK5B8R,EAAUO,QAAU,IAAI1G,IAE1BmG,EAAUO,QAAQlD,IAAII,EAAYnnB,KAAKsD,KAAMxC,QAGxC,GAAIA,EAAUsoB,GAAGH,EAAaI,UAAW,CAC9C,GAAIjqB,KAAKN,QAAQ0qB,IAAI5R,GAKnB,YAJAxY,KAAKoF,MACHge,EAAA7gB,eAAeuoB,4DACf/C,EAAYnnB,KAAKqC,MAAOuV,GAI5BxY,KAAKN,QAAQioB,IAAInP,EAAc9W,GAKjC,IADA,IAAIqpB,EAAqBhD,EAAY8C,QAC5BxqB,EAAI,EAAG+W,EAAI2T,EAAmB3mB,OAAQ/D,EAAI+W,IAAK/W,EAAG,CACzD,IAAI2qB,EAAoBD,EAAmB1qB,GAC3C,OAAQ2qB,EAAkB5E,MAExB,KAAK9C,EAAA+C,SAAS4E,iBACZjrB,KAAKkrB,gBAAkCF,EAAmBtpB,GAC1D,MAEF,KAAK4hB,EAAA+C,SAAS8E,kBACZ,IAAIC,EAAW9H,EAAA+H,YACb/H,EAAAgI,aAAaC,IACbP,EAAkBQ,WAGlBJ,GACA9H,EAAA+H,YAAY/H,EAAAgI,aAAaG,IAAKT,EAAkBQ,WAEhDxrB,KAAK0rB,mBACgBV,EACnBtpB,EACA0pB,GAGFprB,KAAK2rB,iBACgBX,EACnBtpB,GAGJ,MAEF,QACE,MAAM,IAAIic,MAAM,0BAKtB,GACEjc,EAAUsoB,GAAGH,EAAaM,SACD,UAAzBpC,EAAYnnB,KAAKsD,KAEjB,GAAKlE,KAAKykB,MAAM2F,IAAI,UAMlBpqB,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACftC,EAAYnnB,KAAKqC,MAAO8kB,EAAY6D,8BART,CAC7B,IAAIC,EAAWnqB,EAAUoqB,QAAQ,MAC7BD,GACF7rB,KAAKykB,MAAMkD,IAAI,SAAUkE,EAASvY,SAWlC8Q,EAAA1iB,UAAAwpB,gBAAR,SACEnD,EACAgE,GAEA,IAAInrB,EAAOmnB,EAAYnnB,KAAKsD,KACxBsU,EAAeuP,EAAYwC,sBAG/B,GAAIjH,EAAA+H,YAAY/H,EAAAgI,aAAaU,OAAQjE,EAAYyD,WAAY,CAC3D,GAAIxrB,KAAKwkB,SAAS4F,IAAI5R,GAKpB,YAJAxY,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACftC,EAAYnnB,KAAKqC,MAAOuV,GAI5B,GAAIuT,EAAelB,SACjB,GAAIkB,EAAelB,QAAQT,IAAIxpB,GAK7B,YAJAZ,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACftC,EAAYnnB,KAAKqC,MAAOuV,QAK5BuT,EAAelB,QAAU,IAAI1G,IAE/B,IAAI8H,EAAc,IAAIC,EACpBlsB,KAAMY,EAAM4X,EAAcuP,EAAa1E,EAAA0B,KAAKa,MAE9CmG,EAAelB,QAAQlD,IAAI/mB,EAAMqrB,GACjCjsB,KAAKwkB,SAASmD,IAAInP,EAAcyT,OAG3B,CACL,GAAIF,EAAeI,iBACjB,GAAIJ,EAAeI,gBAAgB/B,IAAIxpB,GAKrC,YAJAZ,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACftC,EAAYnnB,KAAKqC,MAAOuV,QAK5BuT,EAAeI,gBAAkB,IAAIhI,IAEvC,IAAIiI,EAAgB,IAAIC,EACtBN,EACAnrB,EAAM4X,EACNuP,GAEFgE,EAAeI,gBAAgBxE,IAAI/mB,EAAMwrB,KAIrChI,EAAA1iB,UAAAiqB,iBAAR,SACE5D,EACAgE,GAEA,IAAInrB,EAAOmnB,EAAYnnB,KAAKsD,KACxBsU,EAAeuP,EAAYwC,sBAC3B7oB,EAAsC,KAG1C,GAAI4hB,EAAA+H,YAAY/H,EAAAgI,aAAaU,OAAQjE,EAAYyD,WAAY,CAG3D,GAFAvC,OAAOlB,EAAYnnB,KAAKwlB,MAAQ9C,EAAA+C,SAASiG,aAErCtsB,KAAKwkB,SAAS4F,IAAI5R,GAKpB,YAJAxY,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBAAwBtC,EAAYnnB,KAAKqC,MACxDuV,GAIJ,GAAIuT,EAAelB,SACjB,GAAIkB,EAAelB,QAAQT,IAAIxpB,GAK7B,YAJAZ,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACftC,EAAYnnB,KAAKqC,MAAOuV,QAK5BuT,EAAelB,QAAU,IAAI1G,IAE/BziB,EAAY,IAAI6qB,EACdvsB,KACAY,EAAM4X,EACNuP,EACA,MAEFgE,EAAelB,QAAQlD,IAAI/mB,EAAMc,GACjC1B,KAAKwkB,SAASmD,IAAInP,EAAc9W,OAG3B,CACL,GAAIqqB,EAAeI,iBACjB,GAAIJ,EAAeI,gBAAgB/B,IAAIxpB,GAKrC,YAJAZ,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACftC,EAAYnnB,KAAKqC,MAAOuV,QAK5BuT,EAAeI,gBAAkB,IAAIhI,IAEvCziB,EAAY,IAAI6qB,EACdvsB,KACAY,EAAM4X,EACNuP,EACAgE,GAKEhE,EAAYnnB,KAAKwlB,MAAQ9C,EAAA+C,SAASiG,YAChCP,EAAeS,qBACjBxsB,KAAKoF,MACHge,EAAA7gB,eAAekqB,qDACf1E,EAAYnnB,KAAKqC,QAGnBvB,EAAUimB,IAAIkC,EAAayC,aAC3BP,EAAeS,qBAAuB9qB,GAGxCqqB,EAAeI,gBAAgBxE,IAAI/mB,EAAMc,GAI7C1B,KAAK0sB,eAAe3E,EAAY6B,WAAYloB,EAAWqqB,IAGjD3H,EAAA1iB,UAAAgrB,eAAR,SACE9C,EACAloB,EACAqqB,GAMA,GAAInC,EACF,IAAK,IAAIvpB,EAAI,EAAG+W,EAAIwS,EAAWxlB,OAAQ/D,EAAI+W,IAAK/W,EAAG,CACjD,IAAIssB,EAAY/C,EAAWvpB,GAC3B,GAA2B,GAAvBssB,EAAUC,cAAyC,CACrD,IAAKlrB,EAAW,CACd1B,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACfF,EAAU1pB,OAEZ,SAEF,IAAI6pB,EAAUH,EAAUI,WAAaJ,EAAUI,UAAU3oB,QAAU,EACnE,GAAe,GAAX0oB,EAAc,CAChB,IAAIE,EAA0BL,EAAUI,UAAW,GACnD,GACEC,EAAS5G,MAAQ9C,EAAA+C,SAAS4G,SACe,GAArBD,EAAUE,YAE9B,OAAkCF,EAAU3rB,OAE1C,IAAK,KACH0qB,EAAeoB,aAAezrB,EAAU0rB,WACxC,MAEF,IAAK,MACHrB,EAAesB,aAAe3rB,EAAU0rB,WACxC,MAEF,IAAK,IACHrB,EAAeuB,SAAW5rB,EAAU0rB,WACpC,MAEF,IAAK,KACHrB,EAAewB,SAAW7rB,EAAU0rB,WACpC,MAEF,QACEptB,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACfG,EAAS/pB,YAIfjD,KAAKoF,MACHge,EAAA7gB,eAAeirB,wBACfR,EAAS/pB,YAIbjD,KAAKoF,MACHge,EAAA7gB,eAAekrB,+BACfd,EAAU1pB,MAAO,IAAK6pB,EAAQnpB,SAAS,SAGX,GAAvBgpB,EAAUC,eAEnB5sB,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACfF,EAAU1pB,SAOZmhB,EAAA1iB,UAAAgqB,mBAAR,SACE3D,EACAgE,EACAX,GAEA,IAAIsC,EAAe3F,EAAYnnB,KAAKsD,KAChCypB,EAAuB5F,EAAYwC,sBAEnCqD,EAAkB5tB,KAAKwkB,SAASrjB,IAAIwsB,GACxC,GAAIC,GACF,GACEA,EAAgBxH,MAAQiD,EAAYwE,WACnCzC,EACcwC,EAAiBE,gBACjBF,EAAiBG,iBAOhC,YAJA/tB,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACftC,EAAYnnB,KAAKqC,MAAO0qB,QAK5BC,EAAkB,IAAII,EACpBhuB,KACA0tB,EAAcC,EACd5B,GAIJ,IAAInrB,GAAQwqB,EAAW1rB,EAAAgkB,cAAgBhkB,EAAAikB,eAAiB+J,EAGxD,GAAIpK,EAAA+H,YAAY/H,EAAAgI,aAAaU,OAAQjE,EAAYyD,WAAY,CAC3D,IAAIyC,EAAalC,EAAevT,aAAe9Y,EAAAmkB,iBAAmBjjB,EAClE,GAAIZ,KAAKwkB,SAAS4F,IAAI6D,GAKpB,YAJAjuB,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACftC,EAAYnnB,KAAKqC,MAAOgrB,GAI5B,IAAIC,EAAkB,IAAI3B,EACxBvsB,KACAY,EAAMqtB,EACNlG,EACA,MAEEqD,EACSwC,EAAiBE,gBAAkBI,EAEnCN,EAAiBG,gBAAkBG,EAE3CnC,EAAelB,UAClBkB,EAAelB,QAAU,IAAI1G,KAE/B4H,EAAelB,QAAQlD,IAAI+F,EAAcE,GACzC5tB,KAAKwkB,SAASmD,IAAIgG,EAAsBC,OAGnC,CACL,IAAIO,EAAepC,EAAevT,aAAe9Y,EAAAkkB,mBAAqBhjB,EACtE,GAAImrB,EAAeI,iBACjB,GAAIJ,EAAeI,gBAAgB/B,IAAIxpB,GAKrC,YAJAZ,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACftC,EAAYnnB,KAAKqC,MAAO0qB,QAK5B5B,EAAeI,gBAAkB,IAAIhI,IAEvC,IAAIiK,EAAoB,IAAI7B,EAC1BvsB,KACAY,EAAMutB,EACNpG,EACAgE,GAEEX,EACSwC,EAAiBE,gBAAkBM,EAEnCR,EAAiBG,gBAAkBK,EAEhDrC,EAAeI,gBAAgBxE,IAAI/mB,EAAMgtB,GACzC5tB,KAAKwkB,SAASmD,IAAIgG,EAAsBC,KAIpCxJ,EAAA1iB,UAAA+kB,eAAR,SACEsB,EACAuC,QAAA,IAAAA,MAAA,MAEA,IAAI9R,EAAeuP,EAAYwC,sBAC/B,GAAIvqB,KAAKwkB,SAAS4F,IAAI5R,GACpBxY,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACftC,EAAYnnB,KAAKqC,MAAOuV,OAH5B,CAOA,IAAI6V,EAAM,IAAIC,EAAKtuB,KAAM+nB,EAAYnnB,KAAKsD,KAAMsU,EAAcuP,GAM9D,GALAsG,EAAI/D,UAAYA,EAChBtqB,KAAKwkB,SAASmD,IAAInP,EAAc6V,GAEhCruB,KAAKypB,wBAAwB4E,EAAKtG,GAE9BuC,EAAW,CACb,GAAIA,EAAUO,SACZ,GAAIP,EAAUO,QAAQT,IAAIrC,EAAYnnB,KAAKsD,MAKzC,YAJAlE,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACftC,EAAYnnB,KAAKqC,MAAOuV,QAK5B8R,EAAUO,QAAU,IAAI1G,IAE1BmG,EAAUO,QAAQlD,IAAII,EAAYnnB,KAAKsD,KAAMmqB,QACxC,GAAIA,EAAIrE,GAAGH,EAAaI,UAAW,CACxC,GAAIjqB,KAAKN,QAAQ0qB,IAAI5R,GAKnB,YAJAxY,KAAKoF,MACHge,EAAA7gB,eAAeuoB,4DACf/C,EAAYnnB,KAAKqC,MAAOuV,GAI5BxY,KAAKN,QAAQioB,IAAInP,EAAc6V,GAIjC,IADA,IAAIE,EAASxG,EAAYwG,OAChBluB,EAAI,EAAG+W,EAAImX,EAAOnqB,OAAQ/D,EAAI+W,IAAK/W,EAC1CL,KAAKwuB,oBAAoBD,EAAOluB,GAAIguB,KAIhCjK,EAAA1iB,UAAA8sB,oBAAR,SACEzG,EACAsG,GAEA,IAAIztB,EAAOmnB,EAAYnnB,KAAKsD,KACxBsU,EAAeuP,EAAYwC,sBAC/B,GAAI8D,EAAIxD,SACN,GAAIwD,EAAIxD,QAAQT,IAAIxpB,GAKlB,YAJAZ,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACftC,EAAYnnB,KAAKqC,MAAOuV,QAK5B6V,EAAIxD,QAAU,IAAI1G,IAEpB,IAAI9iB,EAAQ,IAAIotB,EAAUJ,EAAKruB,KAAMY,EAAM4X,EAAcuP,GACzDsG,EAAIxD,QAAQlD,IAAI/mB,EAAMS,IAGhB+iB,EAAA1iB,UAAAilB,kBAAR,SACER,EACAL,GAGA,IADA,IAAI+E,EAAU1E,EAAU0E,QACfxqB,EAAI,EAAG+W,EAAIyT,EAAQzmB,OAAQ/D,EAAI+W,IAAK/W,EAC3CL,KAAK0uB,iBAAiB7D,EAAQxqB,GAAI8lB,EAAUwI,aAAc7I,IAItD1B,EAAA1iB,UAAAmnB,yBAAR,SACEjoB,EACAilB,EACA+I,GAEA5uB,KAAKN,QAAQioB,IAAI/mB,EAAMilB,GACnB+I,EAAW3rB,MAAMW,OAAOmmB,YACtB/pB,KAAKwkB,SAAS4F,IAAIwE,EAAW1qB,MAC/BlE,KAAKoF,MACHge,EAAA7gB,eAAeuoB,4DACf8D,EAAW3rB,MAAO2rB,EAAW1qB,OAG/B2hB,EAAQrN,aAAeoW,EAAW1qB,KAClClE,KAAKwkB,SAASmD,IAAIiH,EAAW1qB,KAAM2hB,MAKjCzB,EAAA1iB,UAAAgtB,iBAAR,SACE9F,EACA+F,EACA7I,GAEA,IAQI4B,EACAmH,EACApG,EAVAhQ,EAAemQ,EAAO3lB,MAAMW,OAAO+qB,aAAejvB,EAAA8jB,eAAiBoF,EAAOnQ,aAAavU,KAC3F,GAAIlE,KAAKN,QAAQ0qB,IAAI3R,GACnBzY,KAAKoF,MACHge,EAAA7gB,eAAeuoB,4DACflC,EAAOnQ,aAAaxV,MAAOwV,QAS/B,GAAoB,MAAhBkW,EAAsB,CAIxB,GAHAjH,EAAiBkB,EAAO3lB,MAAMW,OAAO+qB,aAAejvB,EAAA8jB,eAAiBoF,EAAOhoB,KAAKsD,KAG7E2qB,EAAoB7uB,KAAKwkB,SAASrjB,IAAIumB,GAMxC,YALA1nB,KAAK6oB,yBACHpQ,EACAoW,EACAjG,EAAOnQ,cAMX,GAAIqN,EAAcsE,IAAI3R,GAKpB,YAJAzY,KAAKoF,MACHge,EAAA7gB,eAAeuoB,4DACflC,EAAOnQ,aAAaxV,MAAOwV,IAI/BgQ,EAAe,IAAIzE,GACN2E,YAAa,EAC1BF,EAAaf,eAAiBA,EAC9Be,EAAaG,OAASA,EACtB9C,EAAc6B,IAAIlP,EAAcgQ,OAG3B,CAKL,GAJAf,EAAiBiH,EAAejvB,EAAA8jB,eAAiBoF,EAAOhoB,KAAKsD,KAG7D2qB,EAAoB7uB,KAAKwkB,SAASrjB,IAAIumB,GAOpC,YALA1nB,KAAK6oB,yBACHpQ,EACAoW,EACAjG,EAAOnQ,cAOX,IADA,IAAIqW,EAAO,IAAIC,IACRtG,EAAe3C,EAAc3kB,IAAIumB,IAAiB,CACvD,IAAIe,EAAaE,WAaV,CAEL,GADAkG,EAAoB7uB,KAAKwkB,SAASrjB,IAAIsnB,EAAaf,gBAOjD,YALA1nB,KAAK6oB,yBACHpQ,EACAoW,EACAjG,EAAOnQ,cAIX,MArBA,GADAoW,EAAoB7uB,KAAKN,QAAQyB,IAAIsnB,EAAaf,gBAOhD,YALA1nB,KAAK6oB,yBACHpQ,EACAoW,EACAjG,EAAOnQ,cAKX,GADAiP,EAAiBe,EAAaf,eAC1BoH,EAAK1E,IAAI3B,GAAe,MAC5BqG,EAAKE,IAAIvG,GAgBb,GAAI3C,EAAcsE,IAAI3R,GAKpB,YAJAzY,KAAKoF,MACHge,EAAA7gB,eAAeuoB,4DACflC,EAAOnQ,aAAaxV,MAAOwV,IAI/BgQ,EAAe,IAAIzE,GACN2E,YAAa,EAC1BF,EAAaf,eAAiBA,EAC9Be,EAAaG,OAASA,EACtB9C,EAAc6B,IAAIlP,EAAcgQ,KAI5BrE,EAAA1iB,UAAAmlB,mBAAR,SACEkB,EACAuC,QAAA,IAAAA,MAAA,MAEA,IAAI9R,EAAeuP,EAAYwC,sBAC/B,GAAIvqB,KAAKwkB,SAAS4F,IAAI5R,GACpBxY,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACftC,EAAYnnB,KAAKqC,MAAOuV,OAH5B,CAOA,IAAI9W,EAAY,IAAI6qB,EAClBvsB,KACA+nB,EAAYnnB,KAAKsD,KAAMsU,EACvBuP,EACA,MAOF,GALArmB,EAAU4oB,UAAYA,EACtBtqB,KAAKwkB,SAASmD,IAAInP,EAAc9W,GAEhC1B,KAAKypB,wBAAwB/nB,EAAWqmB,GAEpCuC,EAAW,CACb,GAAIA,EAAUO,SACZ,GAAIP,EAAUO,QAAQT,IAAIrC,EAAYnnB,KAAKsD,MAKzC,YAJAlE,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACftC,EAAYnnB,KAAKqC,MAAOuV,QAK5B8R,EAAUO,QAAU,IAAI1G,IAE1BmG,EAAUO,QAAQlD,IAAII,EAAYnnB,KAAKsD,KAAMxC,QACxC,GAAIA,EAAUsoB,GAAGH,EAAaI,UAAW,CAC9C,GAAIjqB,KAAKN,QAAQ0qB,IAAI5R,GAKnB,YAJAxY,KAAKoF,MACHge,EAAA7gB,eAAeuoB,4DACf/C,EAAYnnB,KAAKqC,MAAOuV,GAI5BxY,KAAKN,QAAQioB,IAAInP,EAAc9W,MAI3B0iB,EAAA1iB,UAAAqlB,kBAAR,SACEZ,EACAL,EACAC,GAEA,IAAIkJ,EAAe9I,EAAU8I,aAC7B,GAAIA,EACF,IAAK,IAAI5uB,EAAI,EAAG+W,EAAI6X,EAAa7qB,OAAQ/D,EAAI+W,IAAK/W,EAChDL,KAAKkvB,iBACHD,EAAa5uB,GACb8lB,EAAUwI,aACV7I,EAAeC,QAGd,GAAII,EAAUgJ,cAAe,CAClC,IAAI3W,EACF2N,EAAUljB,MAAMW,OAAO+qB,aACvBjvB,EAAA8jB,eACA2C,EAAUgJ,cAAcjrB,KAE1B,GAAIlE,KAAKwkB,SAAS4F,IAAI5R,GAMpB,YALAxY,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACflE,EAAUgJ,cAAclsB,MACxBuV,GAIJxY,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf1G,EAAUljB,SAKRmhB,EAAA1iB,UAAAwtB,iBAAR,SACEnH,EACA4G,EACA7I,EACAC,GAEA,IAAIvN,EAAeuP,EAAYwC,sBAC/B,GAAIvqB,KAAKwkB,SAAS4F,IAAI5R,GACpBxY,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACftC,EAAYnnB,KAAKqC,MAAOuV,OAH5B,CAQA,IAGIqN,EAHA6B,EAAiBiH,EAAejvB,EAAA8jB,eAAiBuE,EAAYtP,aAAavU,KAI9E,GAAI2hB,EAAU7lB,KAAKN,QAAQyB,IAAIumB,GAC7B1nB,KAAKwkB,SAASmD,IAAInP,EAAcqN,OADlC,CAMA,IAAIuJ,EAAY1vB,EAAA8jB,eAAiB,QAC7BgE,EAAe,IAAIvD,EACvBuD,EAAahP,aAAeA,EACxBmW,EAAaU,SAASD,IACxB5H,EAAaE,eAAiBA,EAC9BF,EAAaK,kBACX8G,EAAanqB,UAAU,EAAGmqB,EAAavqB,OAASgrB,EAAUhrB,OAAS,GACnE2jB,EAAYtP,aAAavU,OAG3BsjB,EAAaE,eAAiBA,EAC9BF,EAAaK,kBACX8G,EACAS,EACA1vB,EAAA8jB,eACAuE,EAAYtP,aAAavU,MAG7BsjB,EAAaO,YAAcA,EAC3BhC,EAActhB,KAAK+iB,MAGbpD,EAAA1iB,UAAAulB,oBAAR,SAA4Bc,EAAmCuC,QAAA,IAAAA,MAAA,MAC7D,IAAI9R,EAAeuP,EAAYwC,sBAC/B,GAAIvqB,KAAKwkB,SAAS4F,IAAI5R,GACpBxY,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACftC,EAAYnnB,KAAKqC,MAAOuV,OAH5B,CAOA,IAAI9W,EAAY,IAAI4tB,EAAmBtvB,KAAM+nB,EAAYnnB,KAAKsD,KAAMsU,EAAcuP,GAMlF,GALArmB,EAAU4oB,UAAYA,EACtBtqB,KAAKwkB,SAASmD,IAAInP,EAAc9W,GAEhC1B,KAAKypB,wBAAwB/nB,EAAWqmB,GAEpCuC,EAAW,CACb,GAAIA,EAAUO,SACZ,GAAIP,EAAUO,QAAQT,IAAI1oB,EAAU8W,cAKlC,YAJAxY,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACftC,EAAYnnB,KAAKqC,MAAOuV,QAK5B8R,EAAUO,QAAU,IAAI1G,IAE1BmG,EAAUO,QAAQlD,IAAIjmB,EAAU8W,aAAc9W,QACzC,GAAIA,EAAUsoB,GAAGH,EAAaI,UAAW,CAC9C,GAAIjqB,KAAKN,QAAQ0qB,IAAI5R,GAKnB,YAJAxY,KAAKoF,MACHge,EAAA7gB,eAAeuoB,4DACf/C,EAAYnnB,KAAKqC,MAAOuV,GAI5BxY,KAAKN,QAAQioB,IAAInP,EAAc9W,GAIjC,IADA,IAAIqpB,EAAqBhD,EAAY8C,QAC5BxqB,EAAI,EAAG+W,EAAI2T,EAAmB3mB,OAAQ/D,EAAI+W,IAAK/W,EAAG,CACzD,IAAI2qB,EAAoBD,EAAmB1qB,GAC3C,OAAQ2qB,EAAkB5E,MAExB,KAAK9C,EAAA+C,SAAS4E,iBACZjrB,KAAKkrB,gBAAkCF,EAAmBtpB,GAC1D,MAEF,KAAK4hB,EAAA+C,SAAS8E,kBACZ,IAAIC,EAAW9H,EAAA+H,YAAY/H,EAAAgI,aAAaC,IAAKP,EAAkBQ,WAC3DJ,GAAY9H,EAAA+H,YAAY/H,EAAAgI,aAAaG,IAAKT,EAAkBQ,WAC9DxrB,KAAK0rB,mBAAsCV,EAAmBtpB,EAAW0pB,GAEzEprB,KAAK2rB,iBAAoCX,EAAmBtpB,GAE9D,MAEF,QACE,MAAM,IAAIic,MAAM,iCAKhByG,EAAA1iB,UAAAylB,oBAAR,SACEY,EACAwH,EACAC,QAAA,IAAAA,MAAA,MAEA,IAAIhX,EAAeuP,EAAYwC,sBAE3BD,EAAYtqB,KAAKwkB,SAASrjB,IAAIqX,GAQlC,GAPK8R,KACHA,EAAY,IAAImF,EAAUzvB,KAAM+nB,EAAYnnB,KAAKsD,KAAMsU,EAAcuP,IAC3DuC,UAAYkF,EACtBxvB,KAAKwkB,SAASmD,IAAInP,EAAc8R,GAChCtqB,KAAKypB,wBAAwBa,EAAWvC,IAGtCyH,EAAiB,CACnB,GAAIA,EAAgB3E,SAClB,GAAI2E,EAAgB3E,QAAQT,IAAIrC,EAAYnnB,KAAKsD,MAK/C,YAJAlE,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACftC,EAAYnnB,KAAKqC,MAAOuV,QAK5BgX,EAAgB3E,QAAU,IAAI1G,IAEhCqL,EAAgB3E,QAAQlD,IAAII,EAAYnnB,KAAKsD,KAAMomB,QAC9C,GAAIA,EAAUN,GAAGH,EAAaI,UAAW,CAC9C,GAAIjqB,KAAKN,QAAQ0qB,IAAI5R,GAKnB,YAJAxY,KAAKoF,MACHge,EAAA7gB,eAAeuoB,4DACf/C,EAAYnnB,KAAKqC,MAAOuV,GAI5BxY,KAAKN,QAAQioB,IAAInP,EAAc8R,GAIjC,IADA,IAAIO,EAAU9C,EAAY8C,QACjBxqB,EAAI,EAAG+W,EAAIyT,EAAQzmB,OAAQ/D,EAAI+W,IAAK/W,EAC3C,OAAQwqB,EAAQxqB,GAAG+lB,MAEjB,KAAK9C,EAAA+C,SAASC,iBACZtmB,KAAKumB,gBAAkCsE,EAAQxqB,GAAIkvB,EAAwBjF,GAC3E,MAEF,KAAKhH,EAAA+C,SAASG,gBACZxmB,KAAKymB,eAAgCoE,EAAQxqB,GAAIiqB,GACjD,MAEF,KAAKhH,EAAA+C,SAASO,oBACZ5mB,KAAK6mB,mBAAwCgE,EAAQxqB,GAAIiqB,GACzD,MAEF,KAAKhH,EAAA+C,SAASW,qBACZhnB,KAAKinB,oBAA0C4D,EAAQxqB,GAAIiqB,GAC3D,MAEF,KAAKhH,EAAA+C,SAASa,qBACZlnB,KAAKmnB,oBAA0C0D,EAAQxqB,GAAIkvB,EAAwBjF,GACnF,MAEF,KAAKhH,EAAA+C,SAASe,gBAGZpnB,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACfhC,EAAQxqB,GAAG4C,OAEb,MAEF,KAAKqgB,EAAA+C,SAASiB,SACZtnB,KAAKunB,oBAAuCsD,EAAQxqB,GAAIiqB,GACxD,MAEF,QACE,MAAM,IAAI3M,MAAM,+BAKhByG,EAAA1iB,UAAA2lB,oBAAR,SAA4BU,EAA8BuC,QAAA,IAAAA,MAAA,MAGxD,IAAI1pB,EAAOmnB,EAAYnnB,KAAKsD,KACxBlE,KAAKykB,MAAM2F,IAAIxpB,IAASZ,KAAK0kB,YAAY0F,IAAIxpB,GAC/CZ,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACftC,EAAYnnB,KAAKqC,MAAOrC,GAI5BZ,KAAK0kB,YAAYiD,IAAI/mB,EAAMmnB,EAAY2H,QAGjCtL,EAAA1iB,UAAA6lB,oBAAR,SAA4BpB,EAA8BmE,QAAA,IAAAA,MAAA,MAExD,IADA,IAAI2E,EAAe9I,EAAU8I,aACpB5uB,EAAI,EAAG+W,EAAI6X,EAAa7qB,OAAQ/D,EAAI+W,IAAK/W,EAAG,CACnD,IAAI0nB,EAAckH,EAAa5uB,GAC3BmY,EAAeuP,EAAYwC,sBAC/B,GAAIvqB,KAAKwkB,SAAS4F,IAAI5R,GACpBxY,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACftC,EAAYnnB,KAAKqC,MAAOuV,OAH5B,CAQA,IAAImX,EAAS,IAAIzD,EACflsB,KACA+nB,EAAYnnB,KAAKsD,KACjBsU,EACAuP,EACA1E,EAAA0B,KAAKa,MAOP,GALA+J,EAAOrF,UAAYA,EACnBtqB,KAAKwkB,SAASmD,IAAInP,EAAcmX,GAEhC3vB,KAAKypB,wBAAwBkG,EAAQ5H,GAEjCuC,EAAW,CACb,GAAIA,EAAUO,SACZ,GAAIP,EAAUO,QAAQT,IAAIrC,EAAYnnB,KAAKsD,MAAO,CAChDlE,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACftC,EAAYnnB,KAAKqC,MAAOuV,GAE1B,eAGF8R,EAAUO,QAAU,IAAI1G,IAE1BmG,EAAUO,QAAQlD,IAAII,EAAYnnB,KAAKsD,KAAMyrB,QACpCA,EAAO3F,GAAGH,EAAaI,YAC5BjqB,KAAKN,QAAQ0qB,IAAI5R,GACnBxY,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACftC,EAAYnnB,KAAKqC,MAAOuV,GAG1BxY,KAAKN,QAAQioB,IAAInP,EAAcmX,OAOvCvL,EAAA1iB,UAAAkuB,YAAA,SACEC,EACAC,EACAC,QADA,IAAAD,MAAA,WACA,IAAAC,OAAA,GAEA,IAGIlK,EAHAtG,EAAasQ,EAAKjvB,KAAKsD,KACvB8rB,EAAYH,EAAK5sB,MAAMW,OAAO+qB,aAAejvB,EAAA8jB,eAAiBqM,EAAKjvB,KAAKsD,KAK5E,IAAK2hB,EAAU7lB,KAAKwkB,SAASrjB,IAAI6uB,MAAgBnK,EAAU7lB,KAAKwkB,SAASrjB,IAAIoe,IAC3E,OAAQsG,EAAQO,MACd,KAAKiD,EAAYC,gBACf,IAAIuC,EAA4BhG,EAASoK,0BACvCJ,EAAKK,cACLJ,EACA,MAEF,OAAOjE,EAAWA,EAASvY,KAAO,KAOxC,IAFA,IAuBIA,EAvBA8D,EAAIyY,EAAKK,cAAc9rB,OACvBmN,EAAa,IAAIrM,MAAYkS,GACxB/W,EAAI,EAAGA,EAAI+W,IAAK/W,EAAG,CAC1B,IAAI8vB,EAAYnwB,KAAK4vB,YACnBC,EAAKK,cAAc7vB,GACnByvB,EACAC,GAEF,IAAKI,EAAW,OAAO,KACvB5e,EAAWlR,GAAK8vB,EAGlB,GAAI/Y,EAAG,CACL,IAAIgZ,EAAc/M,EAAAgN,cAAc9e,GAC5B6e,EAAYhsB,SACd4rB,GAAa,IAAMI,EAAc,IACjC7Q,GAAc,IAAM6Q,EAAc,UAE/B,GAAIN,EAAyB,CAClC,IAAIQ,EAAkBR,EAAwB3uB,IAAIoe,GAClD,GAAI+Q,EAAiB,OAAOA,EAM9B,IAAKhd,EAAOtT,KAAKykB,MAAMtjB,IAAI6uB,MAAgB1c,EAAOtT,KAAKykB,MAAMtjB,IAAIoe,IAC/D,OAAOjM,EAIT,IAAIoc,EAAQ1vB,KAAK0kB,YAAYvjB,IAAIoe,GACjC,OAAImQ,IAAUpc,EAAOtT,KAAK4vB,YAAYF,EAAO,KAAMK,IAC1Czc,GAGLyc,GACF/vB,KAAKoF,MACHge,EAAA7gB,eAAeumB,mBACf+G,EAAKjvB,KAAKqC,MAAOsc,GAGd,OAIT6E,EAAA1iB,UAAA6uB,qBAAA,SACEC,EACAC,EACAX,EACAY,QADA,IAAAZ,MAAA,WACA,IAAAY,MAAA,MAEA,IAAIC,EAAiBH,EAAepsB,OAChCwsB,EAAgBH,EAAoBA,EAAkBrsB,OAAS,EACnE,GAAIusB,GAAkBC,EAgBpB,OAfIA,EACF5wB,KAAKoF,MACHge,EAAA7gB,eAAesuB,oCACfvN,EAAAsH,MAAMlmB,KACS+rB,EAAmB,GAAGxtB,MACtBwtB,EAAmBG,EAAgB,GAAG3tB,OAErD0tB,EAAehtB,SAAS,IAAKitB,EAAcjtB,SAAS,KAE7C+sB,GACT1wB,KAAKoF,MACHge,EAAA7gB,eAAesuB,oCACfH,EAAsBztB,MAAM6tB,MAAOH,EAAehtB,SAAS,IAAK,KAG7D,KAGT,IADA,IAAIusB,EAAgB,IAAIhrB,MAAYyrB,GAC3BtwB,EAAI,EAAGA,EAAIswB,IAAkBtwB,EAAG,CACvC,IAAIiT,EAAOtT,KAAK4vB,YACDa,EAAmBpwB,GAChCyvB,GACA,GAEF,IAAKxc,EAAM,OAAO,KAElB4c,EAAc7vB,GAAKiT,EAErB,OAAO4c,GAIT9L,EAAA1iB,UAAA0nB,kBAAA,SACEwF,EACAmC,EACAC,QAAA,IAAAA,MAAA,MAEA,IAEInL,EACAyE,EAHA1pB,EAAOguB,EAAW1qB,KAMtB,GAAI8sB,GAEF,GACEA,EAAenG,UACdhF,EAAUmL,EAAenG,QAAQ1pB,IAAIP,KACtCilB,EAAQO,MAAQiD,EAAY4H,UAG5B,OADKC,IAAiBA,EAAkB,IAAIC,GACrCD,EAAgBvJ,IAAI9B,QAGxB,GAAIkL,EAAoB,CAG7B,GAAIlL,EAAUkL,EAAmBK,KAAKC,eAAezwB,GAEnD,OADKswB,IAAiBA,EAAkB,IAAIC,GACrCD,EAAgBvJ,IAAI9B,GAI7B,GAAIyE,EAAYyG,EAAmBrvB,UAAU4oB,UAC3C,GACE,GAAIzE,EAAU7lB,KAAKwkB,SAASrjB,IAAImpB,EAAU9R,aAAe9Y,EAAAmkB,iBAAmBjjB,GAE1E,OADKswB,IAAiBA,EAAkB,IAAIC,GACrCD,EAAgBvJ,IAAI9B,SAEtByE,EAAYA,EAAUA,WAKnC,OAAIzE,EAAU7lB,KAAKwkB,SAASrjB,IAAIytB,EAAW3rB,MAAMW,OAAO+qB,aAAejvB,EAAA8jB,eAAiB5iB,KACjFswB,IAAiBA,EAAkB,IAAIC,GACrCD,EAAgBvJ,IAAI9B,KAIzBA,EAAU7lB,KAAKwkB,SAASrjB,IAAIP,KACzBswB,IAAiBA,EAAkB,IAAIC,GACrCD,EAAgBvJ,IAAI9B,KAG7B7lB,KAAKoF,MACHge,EAAA7gB,eAAeumB,mBACf8F,EAAW3rB,MAAOrC,GAEb,OAITwjB,EAAA1iB,UAAA4vB,sBAAA,SACEC,EACAR,GAGA,IAAIS,EAAmBD,EAAetb,WAKtC,KAJAib,EAAkBlxB,KAAKyxB,kBACrBD,EACAT,IAEoB,OAAO,KAC7B,IAIIW,EACA9I,EALArR,EAAS2Z,EAAgBrL,QAGzB6H,EAAe6D,EAAe9vB,SAASyC,KAK3C,OAAQqT,EAAO6O,MAEb,KAAKiD,EAAYc,OACjB,KAAKd,EAAYsI,MACjB,KAAKtI,EAAYuI,MACf,KAAMF,EAAmCna,EAAQjE,MAAMue,UAKrD,OAJA7xB,KAAKoF,MACHge,EAAA7gB,eAAeuvB,oCACfP,EAAe9vB,SAASwB,MAAOyqB,EAAcgE,EAAW/tB,YAEnD,KAET4T,EAAgBma,EAAWG,UAC3B,MAEF,KAAKxI,EAAYwE,SACf,IAAIhtB,EAASooB,OAAkB1R,EAAQuW,iBAAiBhC,UACxD,IAAKjrB,EAAQ,OAAO,KACpB,KAAM6wB,EAAa7wB,EAAO2W,YAAYqa,UAKpC,OAJA7xB,KAAKoF,MACHge,EAAA7gB,eAAeuvB,oCACfP,EAAe9vB,SAASwB,MAAOyqB,EAAcgE,EAAW/tB,YAEnD,KAET4T,EAAgBma,EAAWG,UAK/B,OAAQta,EAAO6O,MAEb,KAAKiD,EAAYC,gBACjB,KAAKD,EAAY0I,MACf,OAAG,CACD,GAAIxa,EAAOsT,UAAYjC,EAASrR,EAAOsT,QAAQ1pB,IAAIusB,IACjD,OAAOwD,EAAgBvJ,IAAIiB,GAAQoJ,WAAWza,EAAQia,GAGxD,GAAIja,EAAO6O,MAAQiD,EAAYC,gBAAiB,CAC9C,IAAqB/R,EAAQiS,cAG3B,MAFAjS,EAA0CA,EAAQiS,kBAK/C,IAAIjS,EAAO6O,MAAQiD,EAAY0I,MAOpC,MANA,IAAYxa,EAAQ0a,KAGlB,MAFA1a,EAAwBA,EAAQ0a,MAQtC,MAEF,QACE,GAAI1a,EAAOsT,UAAYjC,EAASrR,EAAOsT,QAAQ1pB,IAAIusB,IACjD,OAAOwD,EAAgBvJ,IAAIiB,GAAQoJ,WAAWza,EAAQia,GAQ5D,OAJAxxB,KAAKoF,MACHge,EAAA7gB,eAAeuvB,oCACfP,EAAe9vB,SAASwB,MAAOyqB,EAAcnW,EAAOiB,cAE/C,MAGT4L,EAAA1iB,UAAAwwB,qBAAA,SACEC,EACApB,GAGA,IAAIS,EAAmBW,EAAclc,WAKrC,KAJAib,EAAkBlxB,KAAKyxB,kBACrBD,EACAT,IAEoB,OAAO,KAC7B,IAAIxZ,EAAS2Z,EAAgBrL,QAC7B,OAAQtO,EAAO6O,MAEb,KAAKiD,EAAYc,OACjB,KAAKd,EAAYsI,MACjB,KAAKtI,EAAYuI,MACf,IAAIte,EAA6BiE,EAAQjE,KACzC,GAAIA,EAAKue,UAAW,CAClB,IACIO,EADAC,GAAkB9a,EAASjE,EAAKue,WAAWnwB,UAAUyrB,aAEzD,GACoB,MAAlBkF,GACA9a,EAAOsT,UACNuH,EAAa7a,EAAOsT,QAAQ1pB,IAAIkxB,KACjCD,EAAWhM,MAAQiD,EAAYiJ,mBAE/B,OAAOpB,EAAgBvJ,IAAIyK,GAAYJ,WAAW1e,EAAKue,UAAWL,IAS1E,OAJAxxB,KAAKoF,MACHge,EAAA7gB,eAAegwB,qCACff,EAAiBvuB,MAAOsU,EAAOiB,cAE1B,MAGT4L,EAAA1iB,UAAA+vB,kBAAA,SACExb,EACA8a,GAIA,IAFA,IAAIc,EAEG5b,EAAWmQ,MAAQ9C,EAAA+C,SAASmM,eACjCvc,EAAuCA,EAAYA,WAGrD,OAAQA,EAAWmQ,MAEjB,KAAK9C,EAAA+C,SAASoM,UACZ,IAAInf,EAAOtT,KAAK4vB,YAAkC3Z,EAAYyc,QAC9D,OAAIpf,IAASue,EAAYve,EAAKue,YACvBX,IAAiBA,EAAkB,IAAIC,GACrCD,EAAgBvJ,IAAIkK,IAEtB,KAET,KAAKvO,EAAA+C,SAASsM,OAEZ,MAAM,IAAIhV,MAAM,mBAElB,KAAK2F,EAAA+C,SAASuM,KACZ,OAAIf,EAAYd,EAAmB8B,mBAC5B3B,IAAiBA,EAAkB,IAAIC,GACrCD,EAAgBvJ,IAAIkK,KAE7B7xB,KAAKoF,MACHge,EAAA7gB,eAAeuwB,+CACf7c,EAAWhT,OAEN,MAET,KAAKqgB,EAAA+C,SAAS0M,MACZ,OAAKlB,EAAYd,EAAmB8B,oBAAsBhB,EAAYA,EAAUI,OACzEf,IAAiBA,EAAkB,IAAIC,GACrCD,EAAgBvJ,IAAIkK,KAE7B7xB,KAAKoF,MACHge,EAAA7gB,eAAeywB,iDACf/c,EAAWhT,OAEN,MAET,KAAKqgB,EAAA+C,SAAS4M,WACZ,OAAOjzB,KAAKopB,kBAAwCnT,EAAY8a,GAElE,KAAKzN,EAAA+C,SAAS6M,eACZ,OAAOlzB,KAAKsxB,sBACgBrb,EAC1B8a,GAGJ,KAAKzN,EAAA+C,SAAS8M,cACZ,OAAOnzB,KAAKkyB,qBACejc,EACzB8a,GAGJ,KAAKzN,EAAA+C,SAAS+M,KACZ,IAAIjK,EAAWnpB,KAAKyxB,kBACDxb,EAAYA,WAC7B8a,GAEF,GAAI5H,EAAU,CACZ,IAAItD,EAAUsD,EAAStD,QACvB,GAAIA,GAAWA,EAAQO,MAAQiD,EAAYiJ,mBAAoB,CAC7D,IAAIzG,EAA+BhG,EAASoK,0BACzBha,EAAYia,cAC7B,KACAja,GAEF,GAAI4V,GAAYA,EAASrU,WAAWqa,UAElC,OADKX,IAAiBA,EAAkB,IAAIC,GACrCD,EAAgBvJ,IAAIkE,EAASrU,WAAWqa,aAUzD,OAJA7xB,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAEN,MAEXmhB,EA3lDA,CAA6BhB,EAAApe,mBAAhBtF,EAAA0kB,UA8lDb,IA0BI8M,EAGQ7H,EAgCAQ,EA7DZsH,EAAA,oBAAAA,KAuBA,OAbEA,EAAAzvB,UAAAimB,IAAA,SAAI9B,GAIF,OAHA7lB,KAAKuX,OAAS,KACdvX,KAAKwxB,iBAAmB,KACxBxxB,KAAK6lB,QAAUA,EACR7lB,MAITmxB,EAAAzvB,UAAAswB,WAAA,SAAWza,EAAiBia,GAG1B,OAFAxxB,KAAKuX,OAASA,EACdvX,KAAKwxB,iBAAmBA,EACjBxxB,MAEXmxB,EAvBA,GAAazxB,EAAAyxB,kBA6Bb,SAAY9H,GAEVA,IAAA,mBAEAA,IAAA,iBAEAA,IAAA,eAEAA,IAAA,yBAEAA,IAAA,2CAEAA,IAAA,uBAEAA,IAAA,qCAEAA,IAAA,iBAEAA,IAAA,6CAEAA,IAAA,yBAEAA,IAAA,sCAEAA,IAAA,kBAEAA,IAAA,wBAEAA,IAAA,0BA5BF,CAAYA,EAAA3pB,EAAA2pB,cAAA3pB,EAAA2pB,iBAgCZ,SAAYQ,GAEVA,IAAA,eAEAA,IAAA,uBAEAA,IAAA,uBAEAA,IAAA,uBAEAA,IAAA,qBAEAA,IAAA,wBAEAA,IAAA,sBAEAA,IAAA,wBAEAA,IAAA,uBAEAA,IAAA,yBAEAA,IAAA,qBAEAA,IAAA,sBAEAA,IAAA,sBAEAA,IAAA,0BAEAA,IAAA,sBAEAA,IAAA,6BAEAA,IAAA,yBAEAA,IAAA,2BAEAA,IAAA,kCAEAA,IAAA,8BAEAA,IAAA,wBAEAA,IAAA,uBA5CF,CAAYA,EAAAnqB,EAAAmqB,eAAAnqB,EAAAmqB,kBAgDZ,IAAAwJ,EAAA,WAkBE,SAAAA,EAAsBC,EAAkBlG,EAAoB5U,GAP5DxY,KAAAuzB,MAAsB1J,EAAa2J,KAEnCxzB,KAAA6qB,QAAsC,KAEtC7qB,KAAAsqB,UAA4B,KAI1BtqB,KAAKszB,QAAUA,EACftzB,KAAKotB,WAAaA,EAClBptB,KAAKwY,aAAeA,EAQxB,OAJE6a,EAAA3xB,UAAAsoB,GAAA,SAAGyJ,GAA4B,OAAQzzB,KAAKuzB,MAAQE,IAASA,GAG7DJ,EAAA3xB,UAAAimB,IAAA,SAAI8L,GAA4BzzB,KAAKuzB,OAASE,GAChDJ,EA7BA,GAAsB3zB,EAAA2zB,UAgCtB,IAAA5D,EAAA,SAAApL,GASE,SAAAoL,EACE6D,EACAlG,EACA5U,EACAuP,GAJF,IAAAzD,EAMED,EAAA7jB,KAAAR,KAAMszB,EAASlG,EAAY5U,IAAaxY,KAExC,GAdFskB,EAAA8B,KAAOiD,EAAYqK,UAajBpP,EAAKyD,YAAcA,EACfzD,EAAKyD,YAAYyD,UACnB,IAAK,IAAInrB,EAAI,EAAG+W,EAAIkN,EAAKyD,YAAYyD,UAAUpnB,OAAQ/D,EAAI+W,IAAK/W,EAC9D,OAAQikB,EAAKyD,YAAYyD,UAAUnrB,GAAGszB,cACpC,KAAKrQ,EAAAgI,aAAaxE,OAAQxC,EAAKqD,IAAIkC,EAAa+J,UAAW,MAC3D,KAAKtQ,EAAAgI,aAAa5E,OAAQpC,EAAKqD,IAAIkC,EAAaI,UAAW,MAC3D,KAAK3G,EAAAgI,aAAauI,QAASvP,EAAKqD,IAAIkC,EAAaiK,UAAW,MAC5D,QAAS,MAAM,IAAInW,MAAM,gCAKnC,OA5B+BiH,EAAA6K,EAAApL,GA4B/BoL,EA5BA,CAA+B4D,GAAlB3zB,EAAA+vB,YA+Bb,IAAAnB,EAAA,SAAAjK,GAQE,SAAAiK,EACEgF,EACAlG,EACA5U,EACAuP,GAJF,IAAAzD,EAMED,EAAA7jB,KAAAR,KAAMszB,EAASlG,EAAY5U,IAAaxY,KAExC,GAdFskB,EAAA8B,KAAOiD,EAAY0K,KAajBzP,EAAKyD,YAAcA,EACfzD,EAAKyD,YAAYyD,UACnB,IAAK,IAAInrB,EAAI,EAAG+W,EAAIkN,EAAKyD,YAAYyD,UAAUpnB,OAAQ/D,EAAI+W,IAAK/W,EAC9D,OAAQikB,EAAKyD,YAAYyD,UAAUnrB,GAAGszB,cACpC,KAAKrQ,EAAAgI,aAAa5E,OAAQpC,EAAKqD,IAAIkC,EAAaI,UAAW,MAC3D,KAAK3G,EAAAgI,aAAaxE,OAAQxC,EAAKqD,IAAIkC,EAAa+J,UAAW,MAC3D,KAAKtQ,EAAAgI,aAAauI,QAASvP,EAAKqD,IAAIkC,EAAaiK,UAAW,MAC5D,KAAKxQ,EAAAgI,aAAa0I,MAAO1P,EAAKqD,IAAIkC,EAAaoK,UAAW,MAC1D,QAAS,MAAM,IAAItW,MAAM,gCAKnC,OA5B0BiH,EAAA0J,EAAAjK,GA4B1BiK,EA5BA,CAA0B+E,GAAb3zB,EAAA4uB,OA+Bb,IAAAG,EAAA,SAAApK,GAWE,SAAAoK,EACEJ,EACAiF,EACAlG,EACA5U,EACAuP,GALF,IAAAzD,EAOED,EAAA7jB,KAAAR,KAAMszB,EAASlG,EAAY5U,IAAaxY,YAhB1CskB,EAAA8B,KAAOiD,EAAY4H,UAOnB3M,EAAA4P,cAAqB,EAUnB5P,EAAK6P,KAAO9F,EACZ/J,EAAKyD,YAAcA,IAEvB,OAtB+BnD,EAAA6J,EAAApK,GAsB/BoK,EAtBA,CAA+B4E,GAAlB3zB,EAAA+uB,YAwBb,SAAkB2F,GAChBA,IAAA,eACAA,IAAA,qBACAA,IAAA,iBAHF,CAAkB10B,EAAA00B,oBAAA10B,EAAA00B,uBAMlB,IAAAC,EAAA,SAAAhQ,GAAA,SAAAgQ,IAAA,IAAA/P,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YASEskB,EAAAiQ,kBAAiB,IAmBnB,OA5ByC3P,EAAAyP,EAAAhQ,GAevCgQ,EAAA3yB,UAAA8yB,yBAAA,SAAyBC,EAASC,GAIhC,OAHA10B,KAAKu0B,kBAAiB,EACtBv0B,KAAK20B,qBAAuBC,QAAQH,EAAIC,GACxC10B,KAAK2nB,IAAIkC,EAAaoK,SAAWpK,EAAagL,SACvC70B,MAGTq0B,EAAA3yB,UAAAozB,uBAAA,SAAuBzzB,GAIrB,OAHArB,KAAKu0B,kBAAiB,EACtBv0B,KAAK+0B,mBAAqB1zB,EAC1BrB,KAAK2nB,IAAIkC,EAAaoK,SAAWpK,EAAagL,SACvC70B,MAEXq0B,EA5BA,CAAyChB,GAA5B3zB,EAAA20B,sBA+Bb,IAAAnI,EAAA,SAAA7H,GAIE,SAAA6H,EACEoH,EACAlG,EACA5U,EACAuP,EACAzU,GALF,IAAAgR,EAOED,EAAA7jB,KAAAR,KAAMszB,EAASlG,EAAY5U,IAAaxY,KAExC,GAXFskB,EAAA8B,KAAOiD,EAAYc,OAUjB7F,EAAKyD,YAAcA,EACfzD,EAAKyD,YAAYyD,UACnB,IAAK,IAAInrB,EAAI,EAAG+W,EAAIkN,EAAKyD,YAAYyD,UAAUpnB,OAAQ/D,EAAI+W,IAAK/W,EAC9D,OAAQikB,EAAKyD,YAAYyD,UAAUnrB,GAAGszB,cAEpC,KAAKrQ,EAAAgI,aAAaxE,OAChBxC,EAAKqD,IAAIkC,EAAa+J,UACtB,MAEF,KAAKtQ,EAAAgI,aAAa5E,OAChBpC,EAAKqD,IAAIkC,EAAaI,UACtB,MAEF,KAAK3G,EAAAgI,aAAa0I,MAChB1P,EAAKqD,IAAIkC,EAAaoK,UACtB,MAEF,KAAK3Q,EAAAgI,aAAa0J,IAChB1Q,EAAKqD,IAAIkC,EAAaoL,QACtB,MAEF,KAAK3R,EAAAgI,aAAauI,QAChBvP,EAAKqD,IAAIkC,EAAaiK,UACtB,MAEF,KAAKxQ,EAAAgI,aAAa4J,SAChB5Q,EAAKqD,IAAIrD,EAAKyD,YAAY/P,YACtB6R,EAAaoK,SAAWpK,EAAaqL,SACrCrL,EAAaqL,UAEjB,MAEF,KAAK5R,EAAAgI,aAAa6J,OAClB,KAAK7R,EAAAgI,aAAa8J,QAClB,KAAK9R,EAAAgI,aAAa+J,UAClB,KAAK/R,EAAAgI,aAAaU,OAChB,MAEF,QACE,MAAM,IAAIrO,MAAM,8BAIxB2G,EAAKhR,KAAOA,IAEhB,OAzD4BsR,EAAAsH,EAAA7H,GAyD5B6H,EAzDA,CAA4BmI,GAAf30B,EAAAwsB,SA4Db,IAAAoJ,EAAA,WAiBA,OALE,SAAY10B,EAAc0S,EAAY0E,QAAA,IAAAA,MAAA,MACpChY,KAAKY,KAAOA,EACZZ,KAAKsT,KAAOA,EACZtT,KAAKgY,YAAcA,GAfvB,GAAatY,EAAA41B,YAoBb,IAAAC,EAAA,SAAAlR,GAOE,SAAAkR,EAAYjC,EAAkBlG,EAAoB/Z,EAAYC,GAA9D,IAAAgR,EACED,EAAA7jB,KAAAR,KAAMszB,EAASlG,EAAYA,IAAWptB,YANxCskB,EAAA8B,KAAOiD,EAAYsI,MAOjBrN,EAAKjR,MAAQA,EACbiR,EAAKhR,KAAOA,IAEhB,OAZ2BsR,EAAA2Q,EAAAlR,GAY3BkR,EAZA,CAA2BlB,GAAd30B,EAAA61B,QAeb,IAAAhJ,EAAA,SAAAlI,GAcE,SAAAkI,EACE+G,EACAlG,EACA5U,EACAuP,EACAgE,QAAA,IAAAA,MAAA,MALF,IAAAzH,EAOED,EAAA7jB,KAAAR,KAAMszB,EAASlG,EAAY5U,IAAaxY,KAExC,GArBFskB,EAAA8B,KAAOiD,EAAYiJ,mBAOnBhO,EAAAkR,UAAkC,IAAIrR,IAEtCG,EAAAmR,mBAAoC,KAWlCnR,EAAKyD,YAAcA,EACfzD,EAAKyD,YAAYyD,UACnB,IAAK,IAAInrB,EAAI,EAAG+W,EAAIkN,EAAKyD,YAAYyD,UAAUpnB,OAAQ/D,EAAI+W,IAAK/W,EAC9D,OAAQikB,EAAKyD,YAAYyD,UAAUnrB,GAAGszB,cAEpC,KAAKrQ,EAAAgI,aAAaxE,OAChBxC,EAAKqD,IAAIkC,EAAa+J,UACtB,MAEF,KAAKtQ,EAAAgI,aAAa5E,OAChBpC,EAAKqD,IAAIkC,EAAaI,UACtB,MAEF,KAAK3G,EAAAgI,aAAauI,QAChBvP,EAAKqD,IAAIkC,EAAaiK,UACtB,MAEF,KAAKxQ,EAAAgI,aAAaC,IAChBjH,EAAKqD,IAAIkC,EAAa6L,QACtB,MAEF,KAAKpS,EAAAgI,aAAaG,IAChBnH,EAAKqD,IAAIkC,EAAa8L,QACtB,MAEF,KAAKrS,EAAAgI,aAAaU,OAClB,KAAK1I,EAAAgI,aAAasK,SAClB,KAAKtS,EAAAgI,aAAa8J,QAClB,KAAK9R,EAAAgI,aAAa+J,UAClB,KAAK/R,EAAAgI,aAAa6J,OAChB,MAEF,QACE,MAAM,IAAIxX,MAAM,8BAIpB2G,EAAKyD,YAAY8N,WACnBvR,EAAKqD,IAAIkC,EAAaiM,UAEpBxR,EAAKyH,eAAiBA,IACxBzH,EAAKqD,IAAIkC,EAAakM,YAqK5B,OApOuCnR,EAAA2H,EAAAlI,GAoErCkI,EAAA7qB,UAAAoqB,QAAA,SACEkK,EACAlG,QADA,IAAAkG,MAAA,WACA,IAAAlG,MAAA,MAEA,IAAIM,EAAc4F,EAAwB3S,EAAAgN,cAAc2F,GAAyB,GAC7EnK,EAAW7rB,KAAKw1B,UAAUr0B,IAAIivB,GAClC,GAAIvE,EAAU,OAAOA,EAErB,IAWIxrB,EAAQ+W,EAXR2Q,EAAc/nB,KAAK+nB,YAGnBkO,EAAyBnG,EAE7B,GADAA,EAA0B,IAAI3L,IAC1B8R,MACF,IAA2C,IAAAC,EAAA/N,EAAA8N,GAAsBE,EAAAD,EAAA7N,QAAA8N,EAAA7N,KAAA6N,EAAAD,EAAA7N,OAAA,CAAxD,IAAAE,EAAAC,EAAA2N,EAAA90B,MAAA,GAAC+0B,EAAA7N,EAAA,GAAe8N,EAAA9N,EAAA,GACvBuH,EAAwBnI,IAAIyO,EAAeC,qGAO/C,GAAIr2B,KAAKy1B,mBAAoB,CAC3B,IAAKz1B,KAAK+rB,eACR,MAAM,IAAIpO,MAAM,yEAElB,IACI2Y,EADoCt2B,KAAK+rB,eAAgBhE,YAClByI,eAC3C,IAAKpZ,EAAIpX,KAAKy1B,mBAAmBrxB,SAAWkyB,EAAoBlyB,OAC9D,MAAM,IAAIuZ,MAAM,gCAElB,IAAKtd,EAAI,EAAGA,EAAI+W,IAAK/W,EACnByvB,EAAwBnI,IAAI2O,EAAoBj2B,GAAGO,KAAKsD,KAAMlE,KAAKy1B,mBAAmBp1B,IAK1F,IAAIk2B,EAAyBxO,EAAYyI,eACzC,GAAIwF,IAA0B5e,EAAI4e,EAAsB5xB,QAAS,CAC/D,IAAKmyB,GAA0Bnf,GAAKmf,EAAuBnyB,OACzD,MAAM,IAAIuZ,MAAM,gCAElB,IAAKtd,EAAI,EAAGA,EAAI+W,IAAK/W,EACnByvB,EAAwBnI,IAAI4O,EAAuBl2B,GAAGO,KAAKsD,KAAM8xB,EAAsB31B,IAM3F+W,EAAI2Q,EAAYyO,WAAWpyB,OAC3B,IAEIqyB,EAFAD,EAAa,IAAItxB,MAAiBkS,GAClCsf,EAAiB,IAAIxxB,MAAYkS,GAErC,IAAK/W,EAAI,EAAGA,EAAI+W,IAAK/W,EAAG,CACtB,IAAIs2B,EAAuB5O,EAAYyO,WAAWn2B,GAClDo2B,EAAWxN,OAAO0N,EAAqBrjB,MACvC,IAAIsjB,EAAgB52B,KAAKszB,QAAQ1D,YAAY6G,EAAU3G,GAAyB,GAChF,IAAI8G,EAIF,OAAO,KAHPJ,EAAWn2B,GAAK,IAAIi1B,EAAUqB,EAAqB/1B,KAAKsD,KAAM0yB,EAAeD,EAAqB3e,aAClG0e,EAAer2B,GAAKu2B,EAMxB,IAAIpe,EAAexY,KAAKwY,aACpB4X,EAAYhsB,SACdoU,GAAgB,IAAM4X,EAAc,KAEtC,IAQI5Y,MARAqf,EAA8B,KAClC,GAAI72B,KAAK+rB,kBACP8K,EAAgB72B,KAAK+rB,eAAeD,QAAQ9rB,KAAKy1B,mBAAoB3F,IACjD,OAAO,KAM7B,GAAI9vB,KAAKgqB,GAAGH,EAAa8L,SAAW31B,KAAKgqB,GAAGH,EAAayC,aACvD9U,EAAa6L,EAAA0B,KAAKa,SACb,CACL6Q,EAAWxN,OAAOlB,EAAYvQ,YAC9B,IAAIlE,EAAOtT,KAAKszB,QAAQ1D,YAAsB6G,EAAU3G,GAAyB,GACjF,IAAIxc,EAGF,OAAO,KAFPkE,EAAalE,EASjB,OAHAuY,EAAW,IAAIiL,EAAS92B,KAAMwY,EAAcwd,EAAuBQ,EAAYhf,EAAYqf,IAClF/G,wBAA0BA,EACnC9vB,KAAKw1B,UAAU7N,IAAIyI,EAAavE,GACzBA,GAITU,EAAA7qB,UAAAq1B,eAAA,SAAetB,GACb,IAAKz1B,KAAK+rB,eACR,MAAM,IAAIpO,MAAM,yEAElB,GAAI8X,GAAsBA,EAAmBrxB,OAAQ,CACnD,IAAI4yB,EAAmB,IAAIzK,EACzBvsB,KAAKszB,QACLtzB,KAAKotB,WACLptB,KAAKwY,aACLxY,KAAK+nB,YACL/nB,KAAK+rB,gBAIP,OAFAiL,EAAiBzD,MAAQvzB,KAAKuzB,MAC9ByD,EAAiBvB,mBAAqBA,EAC/BuB,EAET,OAAOh3B,MAITusB,EAAA7qB,UAAAuuB,0BAAA,SACEQ,EACAX,EACAmH,GAEA,IAAIC,EAAuC,KAC3C,OAAIl3B,KAAKgqB,GAAGH,EAAaiM,WACvB7M,OAA4B,MAArBwH,GAAyD,GAA5BA,EAAkBrsB,QACtD8yB,EAAwBl3B,KAAKszB,QAAQ/C,qBACnCtH,OAAOjpB,KAAK+nB,YAAYyI,gBACxBC,EACAX,EACAmH,IAIGj3B,KAAK8rB,QAAQoL,EAAuBpH,GAFN,MAMvCvD,EAAA7qB,UAAAy1B,4BAAA,SACE1G,EACAX,GAEA7G,OAAOjpB,KAAKgqB,GAAGH,EAAaC,UAC5B,IAAIoN,EAAuC,KAC3C,GAAIzG,EAAmB,CACrB,IAAIrZ,EAAIqZ,EAAkBrsB,OAC1B8yB,EAAwB,IAAIhyB,MAAYkS,GACxC,IAAK,IAAI/W,EAAI,EAAGA,EAAI+W,IAAK/W,EAAG,CAC1B,IAAI+2B,EAAep3B,KAAKszB,QAAQ1D,YAC9Ba,EAAkBpwB,GAClByvB,GACA,GAEF,IAAKsH,EAAc,OAAO,KAC1BF,EAAsB72B,GAAK+2B,GAG/B,OAAOF,GAGT3K,EAAA7qB,UAAAiC,SAAA,WAAqB,OAAO3D,KAAKotB,YACnCb,EApOA,CAAuC8G,GAA1B3zB,EAAA6sB,oBAuOb,IAAAuK,EAAA,SAAAzS,GAmCE,SAAAyS,EACEp1B,EACA8W,EACA0X,EACAsG,EACAhf,EACAqb,QAAA,IAAAA,MAAA,MANF,QAAAvO,EAQED,EAAA7jB,KAAAR,KAAM0B,EAAU4xB,QAAS5xB,EAAU0rB,WAAY5U,IAAaxY,KAO5D,GAhDFskB,EAAA8B,KAAOiD,EAAYgO,SAanB/S,EAAAgT,OAA4B,IAAInT,IAEhCG,EAAAiT,oBAEAjT,EAAAkT,aAA8B,KAM9BlT,EAAAmT,eAAiC,KAEjCnT,EAAA3T,IAAmB,EAEnB2T,EAAAoT,oBAA2B,EAEnBpT,EAAAqT,YAAmB,EACnBrT,EAAAsT,WAA2B,KAwE3BtT,EAAAuT,SAA2B,KAC3BvT,EAAAwT,SAA2B,KAC3BxT,EAAAyT,SAA2B,KAC3BzT,EAAA0T,SAA2B,KA/DjC1T,EAAK5iB,UAAYA,EACjB4iB,EAAK4L,cAAgBA,EACrB5L,EAAKkS,WAAaA,MAClBlS,EAAK9M,WAAaA,EAClB8M,EAAKuO,iBAAmBA,EACxBvO,EAAKiP,MAAQ7xB,EAAU6xB,OACjB7xB,EAAUsoB,GAAGH,EAAaC,WAAYpoB,EAAUsoB,GAAGH,EAAaiK,UAAY,CAChF,IAAImE,EAAa,EACjB,GAAIpF,GAGF,GAFA5J,OAAO3E,EAAK0F,GAAGH,EAAakM,WAC5BzR,EAAKgT,OAAO3P,IAAI,OAAQ,IAAI4N,EAAM7zB,EAAU4xB,QAAS,OAAQ2E,IAAcpF,EAAiBvf,OACxFuf,EAAiB/C,wBAAyB,CACvCxL,EAAKwL,0BACRxL,EAAKwL,wBAA0B,IAAI3L,SAErC,IAA2C,IAAAoE,EAAAJ,EAAA0K,EAAiB/C,yBAAuBoI,EAAA3P,EAAAF,QAAA6P,EAAA5P,KAAA4P,EAAA3P,EAAAF,OAAA,CAA1E,IAAA8P,EAAA3P,EAAA0P,EAAA72B,MAAA,GAAC+0B,EAAA+B,EAAA,GAAe9B,EAAA8B,EAAA,GACvB7T,EAAKwL,wBAAwBnI,IAAIyO,EAAeC,4GAIpDpN,QAAQ3E,EAAK0F,GAAGH,EAAakM,WAE/B,IAAK,IAAI11B,EAAI,EAAG+W,EAAIkN,EAAKkS,WAAWpyB,OAAQ/D,EAAI+W,IAAK/W,EAAG,CACtD,IAAI+3B,EAAY9T,EAAKkS,WAAWn2B,GAC5Bg4B,EAAgBpP,OAAOmP,EAAUx3B,KAAM,2BAC3C0jB,EAAKgT,OAAO3P,IACV0Q,EACA,IAAI9C,EACF7zB,EAAU4xB,QACV+E,EACAJ,IACAG,EAAU9kB,eAKlBgR,EAAK8M,KAAOkH,EAAKp1B,OAAOohB,KA2I5B,OA3N8BM,EAAAkS,EAAAzS,GAoF5ByS,EAAAp1B,UAAA62B,SAAA,SAASjlB,EAAY1S,QAAA,IAAAA,MAAA,MAEnB,IAAIq3B,GAAcj4B,KAAKw2B,WAAax2B,KAAKw2B,WAAWpyB,OAAS,GAAKpE,KAAKu3B,iBAAiBnzB,OACpFpE,KAAKgqB,GAAGH,EAAakM,WAAWkC,IACpC,IAAIO,EAAQ,IAAIjD,EACdv1B,KAAK0B,UAAU4xB,QACf1yB,GAEI,OAASq3B,EAAWt0B,SAAS,IACjCs0B,EACA3kB,GAEF,GAAI1S,EAAM,CACR,GAAIZ,KAAKs3B,OAAOlN,IAAIxpB,GAAO,MAAM,IAAI+c,MAAM,wBAC3C3d,KAAKs3B,OAAO3P,IAAI/mB,EAAM43B,GAGxB,OADAx4B,KAAKu3B,iBAAiB9yB,KAAK6O,GACpBklB,GAST1B,EAAAp1B,UAAA+2B,aAAA,SAAanlB,GACX,IAAIolB,EACJ,OAAQplB,EAAKqlB,gBACX,KAAKpV,EAAAhe,WAAWoZ,IAAK+Z,EAAQ14B,KAAK63B,SAAU,MAC5C,KAAKtU,EAAAhe,WAAWsZ,IAAK6Z,EAAQ14B,KAAK83B,SAAU,MAC5C,KAAKvU,EAAAhe,WAAWyZ,IAAK0Z,EAAQ14B,KAAK+3B,SAAU,MAC5C,KAAKxU,EAAAhe,WAAW2Z,IAAKwZ,EAAQ14B,KAAKg4B,SAAU,MAC5C,QAAS,MAAM,IAAIra,MAAM,0BAE3B,GAAI+a,GAASA,EAAMt0B,OAAQ,CACzB,IAAIgZ,EAAMsb,EAAME,MAEhB,OADAxb,EAAI9J,KAAOA,EACJ8J,EAET,OAAOpd,KAAKu4B,SAASjlB,IAIvBwjB,EAAAp1B,UAAAm3B,cAAA,SAAcL,GACZ,IAAIE,EAEJ,OADAzP,OAAqB,MAAduP,EAAMllB,MACEklB,EAAMllB,KAAMqlB,gBACzB,KAAKpV,EAAAhe,WAAWoZ,IAAK+Z,EAAQ14B,KAAK63B,WAAa73B,KAAK63B,aAAgB,MACpE,KAAKtU,EAAAhe,WAAWsZ,IAAK6Z,EAAQ14B,KAAK83B,WAAa93B,KAAK83B,aAAgB,MACpE,KAAKvU,EAAAhe,WAAWyZ,IAAK0Z,EAAQ14B,KAAK+3B,WAAa/3B,KAAK+3B,aAAgB,MACpE,KAAKxU,EAAAhe,WAAW2Z,IAAKwZ,EAAQ14B,KAAKg4B,WAAah4B,KAAKg4B,aAAgB,MACpE,QAAS,MAAM,IAAIra,MAAM,0BAE3B+a,EAAMj0B,KAAK+zB,IAIb1B,EAAAp1B,UAAAo3B,oBAAA,SAAoBxlB,GAClB,IAAIolB,EACJ,OAAQplB,EAAKqlB,gBACX,KAAKpV,EAAAhe,WAAWoZ,IAAK+Z,EAAQ14B,KAAK63B,WAAa73B,KAAK63B,aAAgB,MACpE,KAAKtU,EAAAhe,WAAWsZ,IAAK6Z,EAAQ14B,KAAK83B,WAAa93B,KAAK83B,aAAgB,MACpE,KAAKvU,EAAAhe,WAAWyZ,IAAK0Z,EAAQ14B,KAAK+3B,WAAa/3B,KAAK+3B,aAAgB,MACpE,KAAKxU,EAAAhe,WAAW2Z,IAAKwZ,EAAQ14B,KAAKg4B,WAAah4B,KAAKg4B,aAAgB,MACpE,QAAS,MAAM,IAAIra,MAAM,0BAE3B,GAAI+a,EAAMt0B,OAAS,EACjB,OAAOs0B,EAAMA,EAAMt0B,OAAS,GAE9B,IAAIo0B,EAAex4B,KAAKu4B,SAASjlB,GAEjC,OADAolB,EAAMj0B,KAAK+zB,GACJA,GAIT1B,EAAAp1B,UAAAq3B,kBAAA,WACE,IAAIC,EAAKh5B,KAAK23B,cAMd,OALK33B,KAAK43B,WAGR53B,KAAK43B,WAAWnzB,KAAKu0B,GAFrBh5B,KAAK43B,YAAeoB,GAIfh5B,KAAKw3B,aAAewB,EAAGr1B,SAAS,KAIzCmzB,EAAAp1B,UAAAu3B,kBAAA,WACEhQ,OAA0B,MAAnBjpB,KAAK43B,YACZ,IAAIxzB,EAAiBpE,KAAK43B,WAAYxzB,OACtC6kB,OAAO7kB,EAAS,GACRpE,KAAK43B,WAAYgB,MACrBx0B,EAAS,EACXpE,KAAKw3B,aAAuBx3B,KAAK43B,WAAYxzB,EAAS,GAAGT,SAAS,KAElE3D,KAAKw3B,aAAe,KACpBx3B,KAAK43B,WAAa,OAKtBd,EAAAp1B,UAAAw3B,SAAA,SAASv5B,EAAgBgR,GAMvB,GALA3Q,KAAK2Q,IAAMA,EACXsY,QAAQjpB,KAAK43B,aAAe53B,KAAK43B,WAAWxzB,QAC5CpE,KAAK43B,WAAa,KAClB53B,KAAKw3B,aAAe,KACpBx3B,KAAK63B,SAAW73B,KAAK83B,SAAW93B,KAAK+3B,SAAW/3B,KAAKg4B,SAAW,KAC5Dh4B,KAAKszB,QAAQxO,QAAQtH,UAAW,CAClC,IAAIia,EAAiBz3B,KAAKy3B,eAC1B,GAAIA,EACF,IAAK,IAAIp3B,EAAI,EAAG+W,EAAIqgB,EAAerzB,OAAQ/D,EAAI+W,IAAK/W,EAAG,CACrD,IAAI84B,EAAgB1B,EAAep3B,GACnCV,EAAO+gB,iBACL/P,EACAwoB,EAAcC,aACdD,EAAcv1B,OAAOy1B,eACrBF,EAAcr0B,KACdq0B,EAAcp0B,SAKtB/E,KAAKy3B,eAAiB,MAIxBX,EAAAp1B,UAAA43B,eAAA,SAAe/hB,GACb,OAAOvX,MAAQuX,GAIjBuf,EAAAp1B,UAAAiC,SAAA,WAAqB,OAAO3D,KAAK0B,UAAU0rB,YAG3C0J,EAAAp1B,UAAA63B,aAAA,WAAyB,MAAM,IAAI5b,MAAM,oBAC3CmZ,EA3NA,CAA8BzD,GAAjB3zB,EAAAo3B,WA8Nb,IAAAzK,EAAA,SAAAhI,GAUE,SAAAgI,EACEN,EACAqB,EACA5U,EACAuP,GAJF,IAAAzD,EAMED,EAAA7jB,KAAAR,KAAM+rB,EAAeuH,QAASlG,EAAY5U,IAAaxY,KAGvD,GAjBFskB,EAAA8B,KAAOiD,EAAYmQ,gBAejBlV,EAAKyH,eAAiBA,EACtBzH,EAAKyD,YAAcA,EACfzD,EAAKyD,YAAYyD,UACnB,IAAK,IAAInrB,EAAI,EAAG+W,EAAIkN,EAAKyD,YAAYyD,UAAUpnB,OAAQ/D,EAAI+W,IAAK/W,EAC9D,OAAQikB,EAAKyD,YAAYyD,UAAUnrB,GAAGszB,cAEpC,KAAKrQ,EAAAgI,aAAa5E,OAChBpC,EAAKqD,IAAIkC,EAAaI,UACtB,MAEF,KAAK3G,EAAAgI,aAAa4J,SAChB5Q,EAAKqD,IAAIkC,EAAaqL,UACtB,MAEF,KAAK5R,EAAAgI,aAAa8J,QAClB,KAAK9R,EAAAgI,aAAa+J,UAClB,KAAK/R,EAAAgI,aAAa6J,OAClB,KAAK7R,EAAAgI,aAAaU,OAChB,MAEF,QACE,MAAM,IAAIrO,MAAM,gCAiB5B,OAvDoCiH,EAAAyH,EAAAhI,GA6ClCtjB,OAAAC,eAAIqrB,EAAA3qB,UAAA,kBAAJ,WACE,OAA+C,IAAvC1B,KAAKuzB,MAAQ1J,EAAaqL,eAEpC,SAAelL,GACTA,EACFhqB,KAAKuzB,OAAS1J,EAAaqL,SAE3Bl1B,KAAKuzB,QAAU1J,EAAaqL,0CAGlC7I,EAvDA,CAAoCgH,GAAvB3zB,EAAA2sB,iBA0Db,IAAAoN,EAAA,SAAApV,GAUE,SAAAoV,EAAY/3B,EAA2B8W,EAAsBlF,GAA7D,IAAAgR,EACED,EAAA7jB,KAAAR,KAAM0B,EAAU4xB,QAAS5xB,EAAU0rB,WAAY5U,IAAaxY,YAT9DskB,EAAA8B,KAAOiD,EAAYuI,MAKnBtN,EAAAoV,cAAqB,EAKnBpV,EAAK5iB,UAAYA,EACjB4iB,EAAKiP,MAAQ7xB,EAAU6xB,MACvBjP,EAAKhR,KAAOA,IAEhB,OAhB2BsR,EAAA6U,EAAApV,GAgB3BoV,EAhBA,CAA2BpF,GAAd30B,EAAA+5B,QAmBb,IAAAzL,EAAA,SAAA3J,GAYE,SAAA2J,EACEsF,EACAlG,EACA5U,EACAwP,GAJF,IAAA1D,EAMED,EAAA7jB,KAAAR,KAAMszB,EAASlG,EAAY5U,IAAaxY,YAhB1CskB,EAAA8B,KAAOiD,EAAYwE,SAKnBvJ,EAAAwJ,gBAA4C,KAE5CxJ,EAAAyJ,gBAA4C,KAU1CzJ,EAAK0D,OAASA,IAElB,OArB8BpD,EAAAoJ,EAAA3J,GAqB9B2J,EArBA,CAA8BqF,GAAjB3zB,EAAAsuB,WAwBb,IAAAxD,EAAA,SAAAnG,GAwBE,SAAAmG,EACE8I,EACAlG,EACA5U,EACAuP,GAJF,IAAAzD,EAMED,EAAA7jB,KAAAR,KAAMszB,EAASlG,EAAY5U,IAAaxY,KAExC,GA9BFskB,EAAA8B,KAAOiD,EAAYC,gBAKnBhF,EAAAkR,UAA+B,IAAIrR,IAEnCG,EAAA6H,gBAA8C,KAE9C7H,EAAAkF,cAAuC,KAEvClF,EAAAkI,qBAAiD,KAGjDlI,EAAA6I,aAA8B,KAE9B7I,EAAA+I,aAA8B,KAE9B/I,EAAAgJ,SAA0B,KAE1BhJ,EAAAiJ,SAA0B,KASxBjJ,EAAKyD,YAAcA,EACfzD,EAAKyD,YAAYyD,UACnB,IAAK,IAAInrB,EAAI,EAAG+W,EAAIkN,EAAKyD,YAAYyD,UAAUpnB,OAAQ/D,EAAI+W,IAAK/W,EAC9D,OAAQikB,EAAKyD,YAAYyD,UAAUnrB,GAAGszB,cACpC,KAAKrQ,EAAAgI,aAAaxE,OAAQxC,EAAKqD,IAAIkC,EAAa+J,UAAW,MAC3D,KAAKtQ,EAAAgI,aAAa5E,OAAQpC,EAAKqD,IAAIkC,EAAaI,UAAW,MAC3D,KAAK3G,EAAAgI,aAAauI,QAASvP,EAAKqD,IAAIkC,EAAaiK,UAAW,MAC5D,QAAS,MAAM,IAAInW,MAAM,8BAI3B2G,EAAKyD,YAAYyI,eAAepsB,QAClCkgB,EAAKqD,IAAIkC,EAAaiM,WAyL5B,OApOoClR,EAAA4F,EAAAnG,GAgDlCtjB,OAAAC,eAAIwpB,EAAA9oB,UAAA,mBAAJ,WACE,OAAgD,IAAxC1B,KAAKuzB,MAAQ1J,EAAa8P,gBAEpC,SAAgB3P,GACVA,EACFhqB,KAAKuzB,OAAS1J,EAAa8P,UAE3B35B,KAAKuzB,QAAU1J,EAAa8P,2CAKhCnP,EAAA9oB,UAAAoqB,QAAA,SACEoE,EACAJ,QAAA,IAAAA,MAAA,MAEA,IAAIM,EAAcF,EAAgB7M,EAAAgN,cAAcH,GAAiB,GAC7DrE,EAAW7rB,KAAKw1B,UAAUr0B,IAAIivB,GAClC,GAAIvE,EAAU,OAAOA,EAGrB,IAAIoK,EAAyBnG,EAE7B,GADAA,EAA0B,IAAI3L,IAC1B8R,MACF,IAA2C,IAAA2D,EAAAzR,EAAA8N,GAAsB4D,EAAAD,EAAAvR,QAAAwR,EAAAvR,KAAAuR,EAAAD,EAAAvR,OAAA,CAAxD,IAAAE,EAAAC,EAAAqR,EAAAx4B,MAAA,GAAC+0B,EAAA7N,EAAA,GAAe8N,EAAA9N,EAAA,GACvBuH,EAAwBnI,IAAIyO,EAAeC,qGAI/C,IAsBIh2B,EAAQ+W,EAtBR2Q,EAAc/nB,KAAK+nB,YACnB+R,EAA0B,KAC9B,GAAI/R,EAAYmB,YAAa,CAC3B,IAAI6Q,EAAgB/5B,KAAKszB,QAAQ1D,YAAY7H,EAAYmB,YAAa,MACtE,IAAK6Q,EAAe,OAAO,KAC3B,KAAMD,EAAYC,EAAclI,WAK9B,OAJA7xB,KAAKszB,QAAQluB,MACXge,EAAA7gB,eAAegnB,sCACfxB,EAAYmB,YAAYjmB,OAEnB,KAET,GAAI62B,EAAUp4B,UAAU+oB,aAAezqB,KAAKyqB,YAK1C,OAJAzqB,KAAKszB,QAAQluB,MACXge,EAAA7gB,eAAey3B,6CACf1W,EAAAsH,MAAMlmB,KAAKqjB,EAAYnnB,KAAKqC,MAAO8kB,EAAYmB,YAAYjmB,QAEtD,KAMX,GAAIitB,EAAe,CACjB,IAAK9Y,EAAI8Y,EAAc9rB,SAAW2jB,EAAYyI,eAAepsB,OAC3D,MAAM,IAAIuZ,MAAM,gCAElB,IAAKtd,EAAI,EAAGA,EAAI+W,IAAK/W,EACnByvB,EAAwBnI,IAAII,EAAYyI,eAAenwB,GAAGO,KAAKsD,KAAMgsB,EAAc7vB,SAEhF,GAAI0nB,EAAYyI,eAAepsB,OACpC,MAAM,IAAIuZ,MAAM,gCAGlB,IAAInF,EAAexY,KAAKwY,aACpB4X,EAAYhsB,SACdoU,GAAgB,IAAM4X,EAAc,MAEtCvE,EAAW,IAAIoO,EAAMj6B,KAAMwY,EAAc0X,EAAe4J,IAC/ChK,wBAA0BA,EACnC9vB,KAAKw1B,UAAU7N,IAAIyI,EAAavE,GAEhC,gBAAI6N,EAAoB,EACxB,GAAII,IACFJ,EAAeI,EAAUI,oBACrBJ,EAAUjP,SAAS,CAChBgB,EAAShB,UAASgB,EAAShB,QAAU,IAAI1G,SAC9C,IAA4B,IAAAgU,EAAAhQ,EAAA2R,EAAUjP,QAAQ0D,UAAQ4L,EAAAhC,EAAA9P,QAAA8R,EAAA7R,KAAA6R,EAAAhC,EAAA9P,OAAA,CAAjD,IAAI+R,EAAeD,EAAA94B,MACtBwqB,EAAShB,QAAQlD,IAAIyS,EAAgBhN,WAAYgN,sGAKvD,GAAIp6B,KAAKwsB,qBAAsB,CAC7B,IAAI6N,EAAqBr6B,KAAKwsB,qBAAqBuK,eAAe7G,GAC9DmK,IACFxO,EAASyO,oBAAsBD,EAAmBvO,WAKtD,GAAI9rB,KAAKmsB,oBACP,IAAmB,IAAAoO,EAAApS,EAAAnoB,KAAKmsB,gBAAgBoC,UAAQiM,EAAAD,EAAAlS,QAAAmS,EAAAlS,KAAAkS,EAAAD,EAAAlS,OAAA,CAA3C,IAAIO,EAAM4R,EAAAn5B,MACb,OAAQunB,EAAOxC,MAEb,KAAKiD,EAAYmQ,gBACV3N,EAAShB,UAASgB,EAAShB,QAAU,IAAI1G,KAC9C,IAAIsW,EAAoC7R,EAAQb,YAChD,IAAK0S,EAAiBnnB,KACpB,MAAM,IAAIqK,MAAM,iBAElB,IAAI+c,EAAY16B,KAAKszB,QAAQ1D,YAC3B6K,EAAiBnnB,KACjBuY,EAASiE,yBAEX,GAAI4K,EAAW,CACb,IAAIC,EAAgB,IAAIlB,EAAsB7Q,EAAyBA,EAAQpQ,aAAckiB,GAC7F,OAAQA,EAAUE,UAChB,KAAK,EAAG,MACR,KAAK,EAAsB,EAAflB,KAAoBA,EAAc,MAC9C,KAAK,EAAsB,EAAfA,IAAkBA,EAAoC,GAAL,EAAfA,IAAuB,MACrE,KAAK,EAAsB,EAAfA,IAAkBA,EAAoC,GAAL,EAAfA,IAAuB,MACrE,QAASzQ,QAAO,GAElB0R,EAAcjB,aAAeA,EAC7BA,GAAgBgB,EAAUE,SAC1B/O,EAAShB,QAAQlD,IAAIiB,EAAOwE,WAAYuN,GAE1C,MAEF,KAAKtR,EAAYiJ,mBACVzG,EAAShB,UAASgB,EAAShB,QAAU,IAAI1G,KAC9C,IAAI0W,EAAsCjS,EAAQmO,eAAe7G,GAC7D2K,GACFhP,EAAShB,QAAQlD,IAAIiB,EAAOwE,WAAYyN,GAE1C,MAEF,KAAKxR,EAAYwE,SACVhC,EAAShB,UAASgB,EAAShB,QAAU,IAAI1G,KAC9C8E,OAAkBL,EAAQkF,iBAC1B,IAAIgN,EAAmB,IAAI9M,EAAShuB,KAAKszB,QAAS1K,EAAOwE,WAAYxE,EAAOpQ,aAAcxY,MAC1F86B,EAAiBhN,gBACgBlF,EAAQkF,gBAAiBiJ,eACtD7G,GAGWtH,EAAQmF,kBACrB+M,EAAiB/M,gBACgBnF,EAAQmF,gBAAiBgJ,eACtD7G,IAINrE,EAAShB,QAAQlD,IAAIiB,EAAOwE,WAAY0N,GACxC,MAEF,QACE,MAAM,IAAInd,MAAM,+HAKxB,OADAkO,EAASqO,oBAAsBR,EACxB7N,GAITrB,EAAA9oB,UAAAuuB,0BAAA,SACEQ,EACAX,EACAY,GAEA,IAAIwG,EAAuC,KAC3C,GAAIl3B,KAAKgqB,GAAGH,EAAaiM,UAQvB,GAPA7M,OAA4B,MAArBwH,GAAyD,GAA5BA,EAAkBrsB,UACtD8yB,EAAwBl3B,KAAKszB,QAAQ/C,qBACnCvwB,KAAK+nB,YAAYyI,eACjBC,EACAX,EACAY,IAE0B,OAAO,UAEnCzH,OAA4B,MAArBwH,IAA8BA,EAAkBrsB,QAEzD,OAAOpE,KAAK8rB,QAAQoL,EAAuBpH,IAG7CtF,EAAA9oB,UAAAiC,SAAA,WACE,OAAO3D,KAAKotB,YAEhB5C,EApOA,CAAoC6I,GAAvB3zB,EAAA8qB,iBAuOb,IAAAyP,EAAA,SAAA5V,GAoBE,SAAA4V,EACEv4B,EACA8W,EACA0X,EACA+B,QADA,IAAA/B,MAAA,WACA,IAAA+B,MAAA,MAJF,IAAA3N,EAMED,EAAA7jB,KAAAR,KAAM0B,EAAU4xB,QAAS5xB,EAAU0rB,WAAY5U,IAAaxY,KAQ5D,GAhCFskB,EAAA8B,KAAOiD,EAAY0I,MAWnBzN,EAAAwL,wBAAmD,KAEnDxL,EAAA4V,oBAA2B,EAE3B5V,EAAAgW,oBAAuC,KAUrChW,EAAK5iB,UAAYA,EACjB4iB,EAAKiP,MAAQ7xB,EAAU6xB,MACvBjP,EAAK4L,cAAgBA,EACrB5L,EAAKhR,KAAO5R,EAAU4xB,QAAQxO,QAAQU,UAAUuV,QAAQzW,GACxDA,EAAK2N,KAAOA,EAGRA,GACEA,EAAKnC,wBAAyB,CAC3BxL,EAAKwL,0BAAyBxL,EAAKwL,wBAA0B,IAAI3L,SACtE,IAAiC,IAAAoE,EAAAJ,EAAA8J,EAAKnC,yBAAuBoI,EAAA3P,EAAAF,QAAA6P,EAAA5P,KAAA4P,EAAA3P,EAAAF,OAAA,CAApD,IAAA8P,EAAA3P,EAAA0P,EAAA72B,MAAA,GAAC25B,EAAA7C,EAAA,GAAU8C,EAAA9C,EAAA,GAClB7T,EAAKwL,wBAAwBnI,IAAIqT,EAAUC,sGAMjD,IACI56B,EAAQ+W,MADR2Q,EAAczD,EAAK5iB,UAAUqmB,YAEjC,GAAIA,EAAa,CACf,IAAIyI,EAAiBzI,EAAYyI,eACjC,GAAIN,EAAe,CACjB,IAAK9Y,EAAI8Y,EAAc9rB,SAAWosB,EAAepsB,OAC/C,MAAM,IAAIuZ,MAAM,gCAElB,GAAIvG,EAEF,IADKkN,EAAKwL,0BAAyBxL,EAAKwL,wBAA0B,IAAI3L,KACjE9jB,EAAI,EAAGA,EAAI+W,IAAK/W,EACnBikB,EAAKwL,wBAAwBnI,IAAI6I,EAAenwB,GAAGO,KAAKsD,KAAMgsB,EAAc7vB,SAG3E,GAAImwB,EAAepsB,OACxB,MAAM,IAAIuZ,MAAM,yCAmBxB,OA9E2BiH,EAAAqV,EAAA5V,GAiEzB4V,EAAAv4B,UAAA43B,eAAA,SAAe/hB,GACb,IAAI2jB,EAAwBl7B,KAC5B,GACE,GAAIk7B,GAAW3jB,EACb,OAAO,QAEF2jB,EAAUA,EAAQjJ,MAC3B,OAAO,GAGTgI,EAAAv4B,UAAAiC,SAAA,WACE,OAAO3D,KAAK0B,UAAU0rB,YAE1B6M,EA9EA,CAA2B5G,GAAd3zB,EAAAu6B,QAiFb,IAAA3K,EAAA,SAAAjL,GAQE,SAAAiL,EACEgE,EACAlG,EACA5U,EACAuP,GAJF,IAAAzD,EAMED,EAAA7jB,KAAAR,KAAMszB,EAASlG,EAAY5U,EAAcuP,IAAY/nB,YAZvDskB,EAAA8B,KAAOiD,EAAY8R,sBAcrB,OAhBwCvW,EAAA0K,EAAAjL,GAgBxCiL,EAhBA,CAAwC9E,GAA3B9qB,EAAA4vB,qBAmBb,IAAA8L,EAAA,SAAA/W,GAUE,SAAA+W,EACE15B,EACA8W,EACA0X,EACA+B,QADA,IAAA/B,eACA,IAAA+B,MAAA,MAJF,IAAA3N,EAMED,EAAA7jB,KAAAR,KAAM0B,EAAW8W,EAAc0X,EAAe+B,IAAKjyB,YAdrDskB,EAAA8B,KAAOiD,EAAYgS,YAgBrB,OAlB+BzW,EAAAwW,EAAA/W,GAkB/B+W,EAlBA,CAA+BnB,GAAlBv6B,EAAA07B,YAqBb,SAAkBE,GAEhBA,IAAA,eAEAA,IAAA,qBAEAA,IAAA,qCAEAA,IAAA,qCAEAA,IAAA,2CAVF,CAAkB57B,EAAA47B,YAAA57B,EAAA47B,eAclB,IAAAhD,EAAA,WA0BE,SAAAA,IAbAt4B,KAAAu7B,aAAyC,KA2F3C,OAxFSjD,EAAAp1B,OAAP,SAAcs4B,GACZ,IAAIC,EAAa,IAAInD,EAMrB,OALAmD,EAAWzT,OAAS,KACpByT,EAAWlI,MAAK,EAChBkI,EAAWD,gBAAkBA,EAC7BC,EAAWC,cAAgB,KAC3BD,EAAWE,WAAa,KACjBF,GAMTnD,EAAA52B,UAAAsoB,GAAA,SAAGyJ,GAAyB,OAAQzzB,KAAKuzB,MAAQE,IAASA,GAG1D6E,EAAA52B,UAAAimB,IAAA,SAAI8L,GAAyBzzB,KAAKuzB,OAASE,GAG3C6E,EAAA52B,UAAAk6B,mBAAA,WACE,IAAIC,EAAa,IAAIvD,EAMrB,OALAuD,EAAW7T,OAAShoB,KACpB67B,EAAWtI,MAAQvzB,KAAKuzB,MACxBsI,EAAWL,gBAAkBx7B,KAAKw7B,gBAClCK,EAAWH,cAAgB17B,KAAK07B,cAChCG,EAAWF,WAAa37B,KAAK27B,WACtBE,GAITvD,EAAA52B,UAAAo6B,mBAAA,WACE,QAAI9T,EAASiB,OAAOjpB,KAAKgoB,QAGzB,GAAIhoB,KAAKu7B,aAAc,KACrB,IAAwB,IAAAhT,EAAAJ,EAAAnoB,KAAKu7B,aAAahN,UAAQ2J,EAAA3P,EAAAF,QAAA6P,EAAA5P,KAAA4P,EAAA3P,EAAAF,OAAA,CAA7C,IAAI0T,EAAW7D,EAAA72B,MAClBrB,KAAKw7B,gBAAgB3C,cAAckD,qGAErC/7B,KAAKu7B,aAAe,KActB,OAVIv7B,KAAKgqB,GAAE,IACThC,EAAOL,IAAG,GAER3nB,KAAKgqB,GAAE,IAA+BhC,EAAO2T,YAAc37B,KAAK27B,YAClE3T,EAAOL,IAAG,GAER3nB,KAAKgqB,GAAE,IAAkChC,EAAO0T,eAAiB17B,KAAK07B,eACxE1T,EAAOL,IAAG,GAGLK,GAITsQ,EAAA52B,UAAAs6B,eAAA,SAAep7B,EAAc0S,EAAY2jB,GACvC,IAAI8E,EAAc/7B,KAAKw7B,gBAAgB/C,aAAanlB,GACpD,GAAKtT,KAAKu7B,cACL,GAAIv7B,KAAKu7B,aAAanR,IAAIxpB,GAK7B,YAJAZ,KAAKw7B,gBAAgBlI,QAAQluB,MAC3Bge,EAAA7gB,eAAe8nB,uBACf4M,EAAWh0B,YAJSjD,KAAKu7B,aAAe,IAAIpX,IAQhDnkB,KAAKu7B,aAAa5T,IAAI/mB,EAAMm7B,IAI9BzD,EAAA52B,UAAA2vB,eAAA,SAAezwB,GACb,IAAI43B,EACA0C,EAAuBl7B,KAC3B,GACE,GAAIk7B,EAAQK,eAAiB/C,EAAQ0C,EAAQK,aAAap6B,IAAIP,IAC5D,OAAO43B,QAEF0C,EAAUA,EAAQlT,QAC3B,OAAOhoB,KAAKw7B,gBAAgBlE,OAAOn2B,IAAIP,IAIzC03B,EAAA52B,UAAAw3B,SAAA,WAIE,OAHAjQ,OAAsB,MAAfjpB,KAAKgoB,OAAgB,mCAC5BhoB,KAAK07B,cAAgB,KACrB17B,KAAK27B,WAAa,KACX37B,KAAKgqB,GAAE,IAElBsO,EAxGA,GAAa54B,EAAA44B,wYC16Fb,IAsBY2D,EAtBZ7Y,EAAAjjB,EAAA,GAUA6B,EAAA7B,EAAA,IAYA,SAAY87B,GAKVA,IAAA,uBACAA,IAAA,WACAA,IAAA,iBACAA,IAAA,iBACAA,IAAA,iBACAA,IAAA,eACAA,IAAA,iBACAA,IAAA,iBACAA,IAAA,iBACAA,IAAA,uBACAA,IAAA,8BACAA,IAAA,wBACAA,IAAA,sBACAA,IAAA,sBACAA,IAAA,oBACAA,IAAA,YACAA,IAAA,gBACAA,IAAA,gBACAA,IAAA,oBACAA,IAAA,sBACAA,IAAA,kBACAA,IAAA,sBACAA,IAAA,cACAA,IAAA,gBACAA,IAAA,wBACAA,IAAA,cACAA,IAAA,YACAA,IAAA,4BACAA,IAAA,oBACAA,IAAA,YACAA,IAAA,4BACAA,IAAA,0BACAA,IAAA,YACAA,IAAA,kBACAA,IAAA,cACAA,IAAA,oBACAA,IAAA,0BACAA,IAAA,cACAA,IAAA,gBACAA,IAAA,YACAA,IAAA,sBACAA,IAAA,sBACAA,IAAA,0BACAA,IAAA,oBACAA,IAAA,wBACAA,IAAA,oBACAA,IAAA,cACAA,IAAA,oBACAA,IAAA,kBACAA,IAAA,oBACAA,IAAA,gBACAA,IAAA,kBACAA,IAAA,gBACAA,IAAA,cACAA,IAAA,gBACAA,IAAA,oBACAA,IAAA,cACAA,IAAA,gBACAA,IAAA,kBACAA,IAAA,gBACAA,IAAA,kBAIAA,IAAA,0BACAA,IAAA,4BACAA,IAAA,0BACAA,IAAA,4BACAA,IAAA,8BACAA,IAAA,gCACAA,IAAA,cACAA,IAAA,8BACAA,IAAA,0BACAA,IAAA,kBACAA,IAAA,wBACAA,IAAA,8BACAA,IAAA,sCACAA,IAAA,4CACAA,IAAA,kCACAA,IAAA,4CACAA,IAAA,gDACAA,IAAA,0DACAA,IAAA,4CACAA,IAAA,gBACAA,IAAA,kBACAA,IAAA,0CACAA,IAAA,wBACAA,IAAA,kBACAA,IAAA,sBACAA,IAAA,0BACAA,IAAA,8BACAA,IAAA,0CACAA,IAAA,sDACAA,IAAA,8EACAA,IAAA,0BACAA,IAAA,cACAA,IAAA,kBACAA,IAAA,8BACAA,IAAA,kBACAA,IAAA,8CACAA,IAAA,sBACAA,IAAA,wBACAA,IAAA,kBACAA,IAAA,qBACAA,IAAA,+BACAA,IAAA,iCACAA,IAAA,uCACAA,IAAA,yDACAA,IAAA,iCACAA,IAAA,qCACAA,IAAA,yDACAA,IAAA,qEACAA,IAAA,6FACAA,IAAA,yCACAA,IAAA,6BACAA,IAAA,iCACAA,IAAA,aAIAA,IAAA,6BACAA,IAAA,mCACAA,IAAA,qCACAA,IAAA,iCAIAA,IAAA,uBACAA,IAAA,2BArIF,CAAYA,EAAAv8B,EAAAu8B,QAAAv8B,EAAAu8B,WAwIZ,SAAiBA,GAECA,EAAAC,YAAhB,SAA4Bh4B,GAC1B,OAAQA,GACN,IAAK,WAAY,OAAO+3B,EAAMrG,SAC9B,IAAK,KAAM,OAAOqG,EAAME,GACxB,IAAK,QAAS,OAAOF,EAAMG,MAC3B,IAAK,QAAS,OAAOH,EAAMI,MAC3B,IAAK,QAAS,OAAOJ,EAAMK,MAC3B,IAAK,OAAQ,OAAOL,EAAMM,KAC1B,IAAK,QAAS,OAAON,EAAMO,MAC3B,IAAK,QAAS,OAAOP,EAAMlK,MAC3B,IAAK,WAAY,OAAOkK,EAAMQ,SAC9B,IAAK,QAAS,OAAOR,EAAMjI,MAC3B,IAAK,cAAe,OAAOiI,EAAM3P,YACjC,IAAK,WAAY,OAAO2P,EAAMS,SAC9B,IAAK,UAAW,OAAOT,EAAMpI,QAC7B,IAAK,UAAW,OAAOoI,EAAMU,QAC7B,IAAK,SAAU,OAAOV,EAAMW,OAC5B,IAAK,KAAM,OAAOX,EAAMY,GACxB,IAAK,OAAQ,OAAOZ,EAAMa,KAC1B,IAAK,OAAQ,OAAOb,EAAMlI,KAC1B,IAAK,SAAU,OAAOkI,EAAMvV,OAC5B,IAAK,UAAW,OAAOuV,EAAMc,QAC7B,IAAK,QAAS,OAAOd,EAAMe,MAC3B,IAAK,UAAW,OAAOf,EAAMgB,QAC7B,IAAK,MAAO,OAAOhB,EAAMiB,IACzB,IAAK,OAAQ,OAAOjB,EAAMkB,KAC1B,IAAK,WAAY,OAAOlB,EAAM5E,SAC9B,IAAK,MAAO,OAAO4E,EAAM1Q,IACzB,IAAK,KAAM,OAAO0Q,EAAMmB,GACxB,IAAK,aAAc,OAAOnB,EAAMoB,WAChC,IAAK,SAAU,OAAOpB,EAAMnV,OAC5B,IAAK,KAAM,OAAOmV,EAAMqB,GACxB,IAAK,aAAc,OAAOrB,EAAMsB,WAChC,IAAK,YAAa,OAAOtB,EAAMZ,UAC/B,IAAK,KAAM,OAAOY,EAAMuB,GACxB,IAAK,QAAS,OAAOvB,EAAMwB,MAC3B,IAAK,MAAO,OAAOxB,EAAMjH,IACzB,IAAK,SAAU,OAAOiH,EAAMyB,OAC5B,IAAK,YAAa,OAAOzB,EAAMvI,UAC/B,IAAK,MAAO,OAAOuI,EAAM0B,IACzB,IAAK,OAAQ,OAAO1B,EAAM2B,KAC1B,IAAK,KAAM,OAAO3B,EAAM4B,GACxB,IAAK,UAAW,OAAO5B,EAAM6B,QAC7B,IAAK,UAAW,OAAO7B,EAAM7G,QAC7B,IAAK,YAAa,OAAO6G,EAAM5G,UAC/B,IAAK,SAAU,OAAO4G,EAAM9G,OAC5B,IAAK,WAAY,OAAO8G,EAAM/G,SAC9B,IAAK,SAAU,OAAO+G,EAAM8B,OAC5B,IAAK,MAAO,OAAO9B,EAAMxQ,IACzB,IAAK,SAAU,OAAOwQ,EAAMjQ,OAC5B,IAAK,QAAS,OAAOiQ,EAAMlJ,MAC3B,IAAK,SAAU,OAAOkJ,EAAM+B,OAC5B,IAAK,OAAQ,OAAO/B,EAAMrJ,KAC1B,IAAK,QAAS,OAAOqJ,EAAMgC,MAC3B,IAAK,OAAQ,OAAOhC,EAAMiC,KAC1B,IAAK,MAAO,OAAOjC,EAAMkC,IACzB,IAAK,OAAQ,OAAOlC,EAAMmC,KAC1B,IAAK,SAAU,OAAOnC,EAAMoC,OAC5B,IAAK,MAAO,OAAOpC,EAAMqC,IACzB,IAAK,OAAQ,OAAOrC,EAAMsC,KAC1B,IAAK,QAAS,OAAOtC,EAAMuC,MAC3B,IAAK,OAAQ,OAAOvC,EAAMwC,KAC1B,IAAK,QAAS,OAAOxC,EAAMyC,MAC3B,QAAS,OAAOzC,EAAM0C,UAIV1C,EAAA2C,iBAAhB,SAAiCC,GAC/B,OAAQA,GACN,KAAK5C,EAAMrG,SACX,KAAKqG,EAAME,GACX,KAAKF,EAAM3P,YACX,KAAK2P,EAAMpI,QACX,KAAKoI,EAAMW,OACX,KAAKX,EAAMkB,KACX,KAAKlB,EAAM1Q,IACX,KAAK0Q,EAAMuB,GACX,KAAKvB,EAAMwB,MACX,KAAKxB,EAAMyB,OACX,KAAKzB,EAAMvI,UACX,KAAKuI,EAAM/G,SACX,KAAK+G,EAAMxQ,IACX,KAAKwQ,EAAMmC,KACT,OAAO,EACT,QACE,OAAO,IAIGnC,EAAA6C,iBAAhB,SAAiCD,GAC/B,OAAQA,GACN,KAAK5C,EAAMW,OAAQ,MAAO,SAC1B,KAAKX,EAAMqB,GAAI,MAAO,KACtB,KAAKrB,EAAMsB,WAAY,MAAO,aAC9B,KAAKtB,EAAM0B,IAAK,MAAO,MACvB,KAAK1B,EAAMoC,OAAQ,MAAO,SAC1B,KAAKpC,EAAMsC,KAAM,MAAO,OACxB,KAAKtC,EAAMyC,MAAO,MAAO,QACzB,KAAKzC,EAAM8C,YAAa,MAAO,MAC/B,KAAK9C,EAAM+C,MAAO,MAAO,IACzB,KAAK/C,EAAMgD,SAAU,MAAO,IAC5B,KAAKhD,EAAMiD,YAAa,MAAO,IAC/B,KAAKjD,EAAMkD,gBAAiB,MAAO,KACnC,KAAKlD,EAAMmD,mBAAoB,MAAO,KACtC,KAAKnD,EAAMoD,cAAe,MAAO,KACjC,KAAKpD,EAAMqD,mBAAoB,MAAO,KACtC,KAAKrD,EAAMsD,qBAAsB,MAAO,MACxC,KAAKtD,EAAMuD,0BAA2B,MAAO,MAC7C,KAAKvD,EAAMwD,KAAM,MAAO,IACxB,KAAKxD,EAAMyD,MAAO,MAAO,IACzB,KAAKzD,EAAM0D,kBAAmB,MAAO,KACrC,KAAK1D,EAAM2D,SAAU,MAAO,IAC5B,KAAK3D,EAAM4D,MAAO,MAAO,IACzB,KAAK5D,EAAM6D,QAAS,MAAO,IAC3B,KAAK7D,EAAM8D,UAAW,MAAO,KAC7B,KAAK9D,EAAM+D,YAAa,MAAO,KAC/B,KAAK/D,EAAMgE,kBAAmB,MAAO,KACrC,KAAKhE,EAAMiE,wBAAyB,MAAO,KAC3C,KAAKjE,EAAMkE,oCAAqC,MAAO,MACvD,KAAKlE,EAAMmE,UAAW,MAAO,IAC7B,KAAKnE,EAAMoE,IAAK,MAAO,IACvB,KAAKpE,EAAMqE,MAAO,MAAO,IACzB,KAAKrE,EAAMsE,YAAa,MAAO,IAC/B,KAAKtE,EAAMuE,MAAO,MAAO,IACzB,KAAKvE,EAAMwE,oBAAqB,MAAO,KACvC,KAAKxE,EAAMyE,QAAS,MAAO,KAC3B,KAAKzE,EAAM0E,OAAQ,MAAO,IAC1B,KAAK1E,EAAM2E,YAAa,MAAO,KAC/B,KAAK3E,EAAM4E,aAAc,MAAO,KAChC,KAAK5E,EAAM6E,gBAAiB,MAAO,KACnC,KAAK7E,EAAM8E,yBAA0B,MAAO,MAC5C,KAAK9E,EAAM+E,aAAc,MAAO,KAChC,KAAK/E,EAAMgF,eAAgB,MAAO,KAClC,KAAKhF,EAAMiF,yBAA0B,MAAO,MAC5C,KAAKjF,EAAMkF,+BAAgC,MAAO,MAClD,KAAKlF,EAAMmF,2CAA4C,MAAO,OAC9D,KAAKnF,EAAMoF,iBAAkB,MAAO,KACpC,KAAKpF,EAAMqF,WAAY,MAAO,KAC9B,KAAKrF,EAAMsF,aAAc,MAAO,KAChC,QAAwB,OAAftY,QAAO,GAAe,KA7IrC,CAAiBgT,EAAAv8B,EAAAu8B,QAAAv8B,EAAAu8B,WAkJjB,IAAArR,EAAA,WAUE,SAAAA,EAAYhnB,EAAgBE,EAAYC,GAgDxC/D,KAAAo5B,aAAsB,EA/CpBp5B,KAAK4D,OAASA,EACd5D,KAAK8D,MAAQA,EACb9D,KAAK+D,IAAMA,EA8Cf,OA3CS6mB,EAAAlmB,KAAP,SAAY88B,EAAUC,GACpB,GAAID,EAAE59B,QAAU69B,EAAE79B,OAAQ,MAAM,IAAI+Z,MAAM,mBAC1C,OAAO,IAAIiN,EAAM4W,EAAE59B,OACjB49B,EAAE19B,MAAQ29B,EAAE39B,MAAQ09B,EAAE19B,MAAQ29B,EAAE39B,MAChC09B,EAAEz9B,IAAM09B,EAAE19B,IAAMy9B,EAAEz9B,IAAM09B,EAAE19B,MAI9BhD,OAAAC,eAAI4pB,EAAAlpB,UAAA,eAAJ,WACE,OAAO,IAAIkpB,EAAM5qB,KAAK4D,OAAQ5D,KAAK8D,MAAO9D,KAAK8D,wCAEjD/C,OAAAC,eAAI4pB,EAAAlpB,UAAA,aAAJ,WACE,OAAO,IAAIkpB,EAAM5qB,KAAK4D,OAAQ5D,KAAK+D,IAAK/D,KAAK+D,sCAG/ChD,OAAAC,eAAI4pB,EAAAlpB,UAAA,YAAJ,WAIE,IAHA,IAAIwC,EAAOlE,KAAK4D,OAAOM,KACnBw9B,EAAM1hC,KAAK8D,MACXgB,EAAO,EACJ48B,KAAQ,GACW,IAApBx9B,EAAKI,WAAWo9B,IAClB58B,IAGJ,OAAOA,mCAGT/D,OAAAC,eAAI4pB,EAAAlpB,UAAA,cAAJ,WAIE,IAHA,IAAIwC,EAAOlE,KAAK4D,OAAOM,KACnBw9B,EAAM1hC,KAAK8D,MACXiB,EAAS,EACN28B,KAAQ,GACW,IAApBx9B,EAAKI,WAAWo9B,IACpB38B,IAEF,OAAOA,mCAGT6lB,EAAAlpB,UAAAiC,SAAA,WACE,OAAO3D,KAAK4D,OAAOM,KAAKM,UAAUxE,KAAK8D,MAAO9D,KAAK+D,MAIvD6mB,EA3DA,GAAalrB,EAAAkrB,QA+Db,IAAA+W,EAAA,SAAAtd,GAgBE,SAAAsd,EAAY/9B,EAAgBqB,QAAA,IAAAA,MAAA,MAA5B,IAAAqf,EACED,EAAA7jB,KAAAR,KAAMiF,IAAYjF,KAdpBskB,EAAAvgB,IAAW,EAEXugB,EAAAod,IAAW,EACXpd,EAAAua,OAAgB,EAChBva,EAAAsd,SAAgB,EAEhBtd,EAAAud,UAAiB,EACjBvd,EAAAwd,aAAsB,EACtBxd,EAAAyd,eAAsB,EAEtBzd,EAAA0d,WAAoB,EACpB1d,EAAA2d,oBAA2B,EAIzB3d,EAAK1gB,OAASA,EACd0gB,EAAKod,IAAM,EACXpd,EAAKvgB,IAAMH,EAAOM,KAAKE,OACvBkgB,EAAKrf,YAAcA,GAA4B,IAAIC,MAEnD,IAAIhB,EAAON,EAAOM,KAWlB,GAPEogB,EAAKod,IAAMpd,EAAKvgB,KACS,OAAzBG,EAAKI,WAAWggB,EAAKod,QAEnBpd,EAAKod,IAKPpd,EAAKod,IAAM,EAAIpd,EAAKvgB,KACK,IAAzBG,EAAKI,WAAWggB,EAAKod,MACQ,IAA7Bx9B,EAAKI,WAAWggB,EAAKod,IAAM,GAG3B,IADApd,EAAKod,KAAO,EAEVpd,EAAKod,IAAMpd,EAAKvgB,KACS,IAAzBG,EAAKI,WAAWggB,EAAKod,QAEnBpd,EAAKod,aA67Bf,OAz+B+B9c,EAAA+c,EAAAtd,GAkD7Bsd,EAAAjgC,UAAA2mB,KAAA,SAAK6Z,GAEH,YAFG,IAAAA,OAAA,GACHliC,KAAKgiC,WAAa,EACXhiC,KAAK6+B,MAAQ7+B,KAAKmiC,WAAWD,IAG9BP,EAAAjgC,UAAAygC,WAAR,SAAmBD,EAAgCE,QAAhC,IAAAF,OAAA,QAAgC,IAAAE,MAAsBhkB,IAAIC,WAE3E,IADA,IAAIna,EAAOlE,KAAK4D,OAAOM,KAChBlE,KAAK0hC,IAAM1hC,KAAK+D,KAAK,CAC1B/D,KAAK4hC,SAAW5hC,KAAK0hC,IACrB,IAAIhhC,EAAIwD,EAAKI,WAAWtE,KAAK0hC,KAC7B,OAAQhhC,GAEN,UAEMV,KAAK0hC,IAAM1hC,KAAK+D,KACO,IAAzBG,EAAKI,WAAWtE,KAAK0hC,QAEnB1hC,KAAK0hC,IAET,MAEF,QACA,OACA,QACA,QACA,UACI1hC,KAAK0hC,IACP,MAEF,QAEE,QADE1hC,KAAK0hC,IAELU,EAAiB,GAAKpiC,KAAK0hC,IAAM1hC,KAAK+D,KACb,IAAzBG,EAAKI,WAAWtE,KAAK0hC,QAEnB1hC,KAAK0hC,IAELU,EAAiB,GAAKpiC,KAAK0hC,IAAM1hC,KAAK+D,KACb,IAAzBG,EAAKI,WAAWtE,KAAK0hC,QAEnB1hC,KAAK0hC,IACAzF,EAAMuD,2BAERvD,EAAMqD,oBAERrD,EAAMsE,YAEf,QACA,QACA,QACE,OAAOtE,EAAMoG,cAEf,QAEE,QADEriC,KAAK0hC,IAELU,EAAiB,GAAKpiC,KAAK0hC,IAAM1hC,KAAK+D,KACb,IAAzBG,EAAKI,WAAWtE,KAAK0hC,QAEnB1hC,KAAK0hC,IACAzF,EAAMgF,gBAERhF,EAAM6D,QAEf,QAEE,KADE9/B,KAAK0hC,IACHU,EAAiB,GAAKpiC,KAAK0hC,IAAM1hC,KAAK+D,IAAK,CAC7C,GAA6B,IAAzBG,EAAKI,WAAWtE,KAAK0hC,KAEvB,QADE1hC,KAAK0hC,IACAzF,EAAMwE,oBAEf,GAA6B,IAAzBv8B,EAAKI,WAAWtE,KAAK0hC,KAEvB,QADE1hC,KAAK0hC,IACAzF,EAAMoF,iBAGjB,OAAOpF,EAAMmE,UAEf,QAEE,QADEpgC,KAAK0hC,IACAzF,EAAMqG,UAEf,QAEE,QADEtiC,KAAK0hC,IACAzF,EAAMsG,WAEf,QAEE,KADEviC,KAAK0hC,IACHU,EAAiB,GAAKpiC,KAAK0hC,IAAM1hC,KAAK+D,IAAK,CAC7C,GAA6B,IAAzBG,EAAKI,WAAWtE,KAAK0hC,KAEvB,QADE1hC,KAAK0hC,IACAzF,EAAM6E,gBAEf,GAA6B,IAAzB58B,EAAKI,WAAWtE,KAAK0hC,KAEvB,QADE1hC,KAAK0hC,IAELU,EAAiB,GAAKpiC,KAAK0hC,IAAM1hC,KAAK+D,KACb,IAAzBG,EAAKI,WAAWtE,KAAK0hC,QAEnB1hC,KAAK0hC,IACAzF,EAAM8E,0BAER9E,EAAM0D,kBAGjB,OAAO1D,EAAM2D,SAEf,QAEE,KADE5/B,KAAK0hC,IACHU,EAAiB,GAAKpiC,KAAK0hC,IAAM1hC,KAAK+D,IAAK,CAC7C,GAA6B,IAAzBG,EAAKI,WAAWtE,KAAK0hC,KAEvB,QADE1hC,KAAK0hC,IACAzF,EAAM8D,UAEf,GAA6B,IAAzB77B,EAAKI,WAAWtE,KAAK0hC,KAEvB,QADE1hC,KAAK0hC,IACAzF,EAAM2E,YAGjB,OAAO3E,EAAMwD,KAEf,QAEE,QADEz/B,KAAK0hC,IACAzF,EAAM+C,MAEf,QAEE,KADEh/B,KAAK0hC,IACHU,EAAiB,GAAKpiC,KAAK0hC,IAAM1hC,KAAK+D,IAAK,CAC7C,GAA6B,IAAzBG,EAAKI,WAAWtE,KAAK0hC,KAEvB,QADE1hC,KAAK0hC,IACAzF,EAAM+D,YAEf,GAA6B,IAAzB97B,EAAKI,WAAWtE,KAAK0hC,KAEvB,QADE1hC,KAAK0hC,IACAzF,EAAM4E,aAGjB,OAAO5E,EAAMyD,MAEf,QAEE,KADE1/B,KAAK0hC,IACHU,EAAiB,GAAKpiC,KAAK0hC,IAAM1hC,KAAK+D,IAAK,CAC7C,GAAI/B,EAAAwgC,eAAet+B,EAAKI,WAAWtE,KAAK0hC,MAEtC,QADE1hC,KAAK0hC,IACAzF,EAAMwG,aAEf,GACEL,EAAiB,GAAKpiC,KAAK0hC,IAAM,EAAI1hC,KAAK+D,KACjB,IAAzBG,EAAKI,WAAWtE,KAAK0hC,MACQ,IAA7Bx9B,EAAKI,WAAWtE,KAAK0hC,IAAM,GAG3B,OADA1hC,KAAK0hC,KAAO,EACLzF,EAAM8C,YAGjB,OAAO9C,EAAMyG,IAEf,QAEE,KADE1iC,KAAK0hC,IACHU,EAAiB,GAAKpiC,KAAK0hC,IAAM1hC,KAAK+D,IAAK,CAC7C,GAA6B,IAAzBG,EAAKI,WAAWtE,KAAK0hC,KAAwB,CAO/C,OAAS1hC,KAAK0hC,IAAM1hC,KAAK+D,MACnB/B,EAAAqC,YAAYH,EAAKI,WAAWtE,KAAK0hC,QAEvC,SAEF,GAA6B,IAAzBx9B,EAAKI,WAAWtE,KAAK0hC,KAA2B,CAElD,IADA,IAAIiB,GAAS,IACJ3iC,KAAK0hC,IAAM1hC,KAAK+D,KAEvB,GACG,KAFHrD,EAAIwD,EAAKI,WAAWtE,KAAK0hC,OAGvB1hC,KAAK0hC,IAAM,EAAI1hC,KAAK+D,KACS,IAA7BG,EAAKI,WAAWtE,KAAK0hC,IAAM,GAC3B,CACA1hC,KAAK0hC,KAAO,EACZiB,GAAS,EACT,MAGCA,GACH3iC,KAAKoF,MACHge,EAAA7gB,eAAeqgC,YACf5iC,KAAKiD,MAAMjD,KAAK0hC,KAAM,MAG1B,SAEF,GAA6B,IAAzBx9B,EAAKI,WAAWtE,KAAK0hC,KAEvB,QADE1hC,KAAK0hC,IACAzF,EAAM+E,aAGjB,OAAO/E,EAAM4D,MAEf,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACE,OAAO7/B,KAAK6iC,cACR5G,EAAM6G,eACN7G,EAAMwG,aAEZ,QAEE,QADEziC,KAAK0hC,IACAzF,EAAM8G,MAEf,QAEE,QADE/iC,KAAK0hC,IACAzF,EAAM+G,UAEf,QAEE,KADEhjC,KAAK0hC,IACHU,EAAiB,GAAKpiC,KAAK0hC,IAAM1hC,KAAK+D,IAAK,CAC7C,GAA6B,IAAzBG,EAAKI,WAAWtE,KAAK0hC,KAEvB,QADE1hC,KAAK0hC,IAELU,EAAiB,GACjBpiC,KAAK0hC,IAAM1hC,KAAK+D,KACS,IAAzBG,EAAKI,WAAWtE,KAAK0hC,QAEnB1hC,KAAK0hC,IACAzF,EAAMiF,0BAERjF,EAAMgE,kBAEf,GAA6B,IAAzB/7B,EAAKI,WAAWtE,KAAK0hC,KAEvB,QADE1hC,KAAK0hC,IACAzF,EAAMkD,gBAGjB,OAAOlD,EAAMgD,SAEf,QAEE,KADEj/B,KAAK0hC,IACHU,EAAiB,GAAKpiC,KAAK0hC,IAAM1hC,KAAK+D,IAAK,CAC7C,GAA6B,IAAzBG,EAAKI,WAAWtE,KAAK0hC,KAEvB,QADE1hC,KAAK0hC,IAELU,EAAiB,GACjBpiC,KAAK0hC,IAAM1hC,KAAK+D,KACS,IAAzBG,EAAKI,WAAWtE,KAAK0hC,QAEnB1hC,KAAK0hC,IACAzF,EAAMsD,sBAERtD,EAAMoD,cAEf,GAA6B,IAAzBn7B,EAAKI,WAAWtE,KAAK0hC,KAEvB,QADE1hC,KAAK0hC,IACAzF,EAAMgH,mBAGjB,OAAOhH,EAAM0E,OAEf,QAEE,KADE3gC,KAAK0hC,IACHU,EAAiB,GAAKpiC,KAAK0hC,IAAM1hC,KAAK+D,IAAK,CAC7C,GAA6B,IAAzBG,EAAKI,WAAWtE,KAAK0hC,KAA8B,CAErD,KADE1hC,KAAK0hC,IACHU,EAAiB,GAAKpiC,KAAK0hC,IAAM1hC,KAAK+D,IAAK,CAC7C,GAA6B,IAAzBG,EAAKI,WAAWtE,KAAK0hC,KAEvB,QADE1hC,KAAK0hC,IAELU,EAAiB,GAAKpiC,KAAK0hC,IAAM1hC,KAAK+D,KACb,IAAzBG,EAAKI,WAAWtE,KAAK0hC,QAEnB1hC,KAAK0hC,IACAzF,EAAMmF,4CAERnF,EAAMkE,oCAEf,GAA6B,IAAzBj8B,EAAKI,WAAWtE,KAAK0hC,KAEvB,QADE1hC,KAAK0hC,IACAzF,EAAMkF,+BAGjB,OAAOlF,EAAMiE,wBAEf,GAA6B,IAAzBh8B,EAAKI,WAAWtE,KAAK0hC,KAEvB,QADE1hC,KAAK0hC,IACAzF,EAAMmD,mBAGjB,OAAOnD,EAAMiD,YAEf,QAEE,QADEl/B,KAAK0hC,IACAzF,EAAMiH,SAEf,QAEE,QADEljC,KAAK0hC,IACAzF,EAAMkH,YAEf,QAEE,QADEnjC,KAAK0hC,IACAzF,EAAMmH,aAEf,QAEE,QADEpjC,KAAK0hC,IAELU,EAAiB,GAAKpiC,KAAK0hC,IAAM1hC,KAAK+D,KACb,IAAzBG,EAAKI,WAAWtE,KAAK0hC,QAEnB1hC,KAAK0hC,IACAzF,EAAMsF,cAERtF,EAAMqE,MAEf,SAEE,QADEtgC,KAAK0hC,IACAzF,EAAMoH,UAEf,SAEE,KADErjC,KAAK0hC,IACHU,EAAiB,GAAKpiC,KAAK0hC,IAAM1hC,KAAK+D,IAAK,CAC7C,GAA6B,KAAzBG,EAAKI,WAAWtE,KAAK0hC,KAEvB,QADE1hC,KAAK0hC,IACAzF,EAAMyE,QAEf,GAA6B,IAAzBx8B,EAAKI,WAAWtE,KAAK0hC,KAEvB,QADE1hC,KAAK0hC,IACAzF,EAAMqF,WAGjB,OAAOrF,EAAMoE,IAEf,SAEE,QADErgC,KAAK0hC,IACAzF,EAAMqH,WAEf,SAEE,QADEtjC,KAAK0hC,IACAzF,EAAMuE,MAEf,QAEE,QADExgC,KAAK0hC,IACAzF,EAAMsH,GAEf,QACE,GAAIvhC,EAAAwhC,kBAAkB9iC,GAAI,CACxB,GAAIsB,EAAAyhC,mBAAmB/iC,GAAI,CAEzB,IADA,IAAIgjC,EAAY1jC,KAAK0hC,MAEjB1hC,KAAK0hC,IAAM1hC,KAAK+D,KAClB/B,EAAA2hC,iBAAiBjjC,EAAIwD,EAAKI,WAAWtE,KAAK0hC,OAE1C,IAAK1/B,EAAAyhC,mBAAmB/iC,GAEtB,OADAV,KAAK0hC,IAAMgC,EACJzH,EAAMhJ,WAGjB,IAAI2Q,EAAc1/B,EAAKM,UAAUk/B,EAAW1jC,KAAK0hC,KAC7CmC,EAAe5H,EAAMC,YAAY0H,GACrC,KACEC,GAAgB5H,EAAM0C,SACpBuD,GAAoBjG,EAAM2C,iBAAiBiF,IAE7C,OAAOA,EAET7jC,KAAK0hC,IAAMgC,EAEb,OAAOzH,EAAMhJ,WACR,GAAIjxB,EAAA8hC,aAAapjC,GAAI,GACxBV,KAAK0hC,IACP,MAOF,OALA1hC,KAAKoF,MACHge,EAAA7gB,eAAewhC,kBACf/jC,KAAKiD,MAAMjD,KAAK0hC,IAAK1hC,KAAK0hC,IAAM,MAEhC1hC,KAAK0hC,IACAzF,EAAM0C,SAGnB,OAAO1C,EAAM+H,WAGfrC,EAAAjgC,UAAAuiC,KAAA,SACEC,EACAhC,EACAiC,QAFA,IAAAD,OAAA,QACA,IAAAhC,OAAA,QACA,IAAAiC,MAAyB/lB,IAAIC,WAE7B,IAAIna,EAAOlE,KAAK4D,OAAOM,KACvB,GAAIlE,KAAKgiC,UAAY,EAAG,CACtB,IAAI0B,EAAY1jC,KAAK0hC,IACjB0C,EAAcpkC,KAAK6+B,MACnBwF,EAAiBrkC,KAAK4hC,SAE1B,GADA5hC,KAAKgiC,UAAYhiC,KAAKmiC,WAAWD,EAAkBiC,GAC/CD,EAEF,IADAlkC,KAAKiiC,oBAAqB,IACjBjiC,KAAK4hC,SAAW8B,GACvB,GAAI1hC,EAAAqC,YAAYH,EAAKI,WAAWtE,KAAK4hC,WAAY,CAC/C5hC,KAAKiiC,oBAAqB,EAC1B,MAINjiC,KAAK0hC,IAAMgC,EACX1jC,KAAK6+B,MAAQuF,EACbpkC,KAAK4hC,SAAWyC,EAElB,OAAOrkC,KAAKgiC,WAGdL,EAAAjgC,UAAA4iC,KAAA,SAAKzF,GACH,IAAI6E,EAAY1jC,KAAK0hC,IACjB0C,EAAcpkC,KAAK6+B,MACnBwF,EAAiBrkC,KAAK4hC,SACtBuC,EAAoB/lB,IAAIC,UAC5B,OAAQwgB,GACN,KAAK5C,EAAMiD,YACTiF,EAAoB,EAIxB,OADAnkC,KAAK6+B,MAAQ7+B,KAAKmiC,WAAWtD,GAAS5C,EAAMhJ,WAAYkR,GACpDnkC,KAAK6+B,OAASA,GAChB7+B,KAAKgiC,WAAa,GACX,IAEPhiC,KAAK0hC,IAAMgC,EACX1jC,KAAK6+B,MAAQuF,EACbpkC,KAAK4hC,SAAWyC,GACT,IAeX1C,EAAAjgC,UAAA6iC,KAAA,WACEvkC,KAAK6hC,UAAY7hC,KAAK0hC,IACtB1hC,KAAK8hC,YAAc9hC,KAAK6+B,MACxB7+B,KAAK+hC,eAAiB/hC,KAAK4hC,UAG7BD,EAAAjgC,UAAA8iC,MAAA,WACExkC,KAAK0hC,IAAM1hC,KAAK6hC,UAChB7hC,KAAK6+B,MAAQ7+B,KAAK8hC,YAClB9hC,KAAK4hC,SAAW5hC,KAAK+hC,eACrB/hC,KAAKgiC,WAAa,GAGpBL,EAAAjgC,UAAAuB,MAAA,SAAMa,EAAiBC,GAOrB,YAPI,IAAAD,OAAc,QAAG,IAAAC,OAAY,GAC7BD,EAAQ,GACVA,EAAQ9D,KAAK4hC,SACb79B,EAAM/D,KAAK0hC,KACF39B,EAAM,IACfA,EAAMD,GAED,IAAI8mB,EAAM5qB,KAAK4D,OAAQE,EAAOC,IAGvC49B,EAAAjgC,UAAA+iC,eAAA,WAGE,IAFA,IAAIvgC,EAAOlE,KAAK4D,OAAOM,KACnBJ,EAAQ9D,KAAK0hC,MAEb1hC,KAAK0hC,IAAM1hC,KAAK+D,KAClB/B,EAAA2hC,iBAAiBz/B,EAAKI,WAAWtE,KAAK0hC,QAExC,OAAOx9B,EAAKM,UAAUV,EAAO9D,KAAK0hC,MAGpCC,EAAAjgC,UAAA+b,WAAA,WAKE,IAJA,IAAIvZ,EAAOlE,KAAK4D,OAAOM,KACnBwgC,EAAQxgC,EAAKI,WAAWtE,KAAK0hC,OAC7B59B,EAAQ9D,KAAK0hC,IACbpwB,EAAS,KACA,CACX,GAAItR,KAAK0hC,KAAO1hC,KAAK+D,IAAK,CACxBuN,GAAUpN,EAAKM,UAAUV,EAAO9D,KAAK0hC,KACrC1hC,KAAKoF,MACHge,EAAA7gB,eAAeoiC,4BACf3kC,KAAKiD,MAAMa,EAAQ,EAAG9D,KAAK+D,MAE7B,MAEF,IAAIrD,EAAIwD,EAAKI,WAAWtE,KAAK0hC,KAC7B,GAAIhhC,GAAKgkC,EAAO,CACdpzB,GAAUpN,EAAKM,UAAUV,EAAO9D,KAAK0hC,OACrC,MAEF,GAAK,IAADhhC,EAAJ,CAMA,GAAIsB,EAAAqC,YAAY3D,GAAI,CAClB4Q,GAAUpN,EAAKM,UAAUV,EAAO9D,KAAK0hC,KACrC1hC,KAAKoF,MACHge,EAAA7gB,eAAeoiC,4BACf3kC,KAAKiD,MAAMa,EAAQ,EAAG9D,KAAK0hC,MAE7B,QAEA1hC,KAAK0hC,SAbLpwB,GAAUpN,EAAKM,UAAUV,EAAO9D,KAAK0hC,KACrCpwB,GAAUtR,KAAK4kC,qBACf9gC,EAAQ9D,KAAK0hC,IAajB,OAAOpwB,GAGTqwB,EAAAjgC,UAAAkjC,mBAAA,WACE,KAAM5kC,KAAK0hC,KAAO1hC,KAAK+D,IAKrB,OAJA/D,KAAKoF,MACHge,EAAA7gB,eAAesiC,uBACf7kC,KAAKiD,MAAMjD,KAAK+D,MAEX,GAGT,IAAIG,EAAOlE,KAAK4D,OAAOM,KACnBxD,EAAIwD,EAAKI,WAAWtE,KAAK0hC,OAC7B,OAAQhhC,GAEN,QACE,MAAO,KAET,QACE,MAAO,KAET,SACE,MAAO,KAET,SACE,MAAO,KAET,SACE,MAAO,KAET,SACE,MAAO,KAET,SACE,MAAO,KAET,QACE,MAAO,IAET,QACE,MAAO,IAET,SACE,OACEV,KAAK0hC,IAAM1hC,KAAK+D,KACS,KAAzBG,EAAKI,WAAWtE,KAAK0hC,QAEnB1hC,KAAK0hC,IACA1hC,KAAK8kC,6BAEP9kC,KAAK+kC,oBAGd,QAEI/kC,KAAK0hC,IAAM1hC,KAAK+D,KACS,IAAzBG,EAAKI,WAAWtE,KAAK0hC,QAEnB1hC,KAAK0hC,IAIX,QACA,UACA,UACE,MAAO,GACT,QACE,OAAOxe,OAAO8hB,aAAatkC,KAIjCihC,EAAAjgC,UAAAujC,kBAAA,WAIE,IAHA,IAAI/gC,EAAOlE,KAAK4D,OAAOM,KACnBJ,EAAQ9D,KAAK0hC,IACbwD,GAAU,IACD,CACX,GAAIllC,KAAK0hC,KAAO1hC,KAAK+D,IAAK,CACxB/D,KAAKoF,MACHge,EAAA7gB,eAAe4iC,wCACfnlC,KAAKiD,MAAMa,EAAO9D,KAAK+D,MAEzB,MAEF,GAA6B,IAAzBG,EAAKI,WAAWtE,KAAK0hC,KAAzB,CAKA,IAAIhhC,EAAIwD,EAAKI,WAAWtE,KAAK0hC,KAC7B,GAAK,IAADhhC,IAAwBwkC,EAAS,MACrC,GAAIljC,EAAAqC,YAAY3D,GAAI,CAClBV,KAAKoF,MACHge,EAAA7gB,eAAe4iC,wCACfnlC,KAAKiD,MAAMa,EAAO9D,KAAK0hC,MAEzB,QAEA1hC,KAAK0hC,IACPwD,GAAU,QAdNllC,KAAK0hC,IACPwD,GAAU,EAed,OAAOhhC,EAAKM,UAAUV,EAAO9D,KAAK0hC,MAGpCC,EAAAjgC,UAAA0jC,gBAAA,WAIE,IAHA,IAAIlhC,EAAOlE,KAAK4D,OAAOM,KACnBJ,EAAQ9D,KAAK0hC,IACbnO,EAAQ,EACLvzB,KAAK0hC,IAAM1hC,KAAK+D,KAAK,CAC1B,IAAIrD,EAASwD,EAAKI,WAAWtE,KAAK0hC,KAClC,IAAK1/B,EAAA2hC,iBAAiBjjC,GAAI,MAI1B,SAHEV,KAAK0hC,IAGChhC,GAEN,SACE6yB,GAAiB,EAARA,GAAa,EAAI,EAC1B,MAEF,SACEA,GAAiB,EAARA,GAAa,EAAI,EAC1B,MAEF,SACEA,GAAiB,EAARA,GAAa,EAAI,EAC1B,MAEF,QACEA,GAAS,GAUf,OANc,GAAVA,GACFvzB,KAAKoF,MACHge,EAAA7gB,eAAe8iC,iCACfrlC,KAAKiD,MAAMa,EAAO9D,KAAK0hC,MAGpBx9B,EAAKM,UAAUV,EAAO9D,KAAK0hC,MAGpCC,EAAAjgC,UAAAmhC,YAAA,WACE,IAAI3+B,EAAOlE,KAAK4D,OAAOM,KACvB,GAA6B,IAAzBA,EAAKI,WAAWtE,KAAK0hC,MAAuB1hC,KAAK0hC,IAAM,EAAI1hC,KAAK+D,IAClE,OAAQG,EAAKI,WAAWtE,KAAK0hC,IAAM,IACjC,QACA,SACA,QACA,QACA,QACA,SACE,OAAO,EAIb,IADA,IAAIA,EAAM1hC,KAAK0hC,IACRA,EAAM1hC,KAAK+D,KAAK,CACrB,IAAIrD,EAAIwD,EAAKI,WAAWo9B,GACxB,GAAK,IAADhhC,GAAsB,IAADA,GAAoB,KAADA,EAC1C,OAAO,EAET,GAAIA,EAAC,IAAkBA,EAAC,GAAgB,MACxCghC,IAEF,OAAO,GAGTC,EAAAjgC,UAAA4jC,YAAA,WACE,IAAIphC,EAAOlE,KAAK4D,OAAOM,KACvB,GAA6B,IAAzBA,EAAKI,WAAWtE,KAAK0hC,MAAuB1hC,KAAK0hC,IAAM,EAAI1hC,KAAK+D,IAAK,CACvE,OAAQG,EAAKI,WAAWtE,KAAK0hC,IAAM,IAEjC,QACA,SAEE,OADA1hC,KAAK0hC,KAAO,EACL1hC,KAAKulC,iBAEd,QACA,QAEE,OADAvlC,KAAK0hC,KAAO,EACL1hC,KAAKwlC,oBAEd,QACA,SAEE,OADAxlC,KAAK0hC,KAAO,EACL1hC,KAAKylC,mBAEhB,GAAIzjC,EAAA0jC,aAAaxhC,EAAKI,WAAWtE,KAAK0hC,IAAM,IAAK,CAC/C,IAAI59B,EAAQ9D,KAAK0hC,MACf1hC,KAAK0hC,IACP,IAAIrgC,EAAQrB,KAAKylC,mBAKjB,OAJAzlC,KAAKoF,MACHge,EAAA7gB,eAAeojC,8CACf3lC,KAAKiD,MAAMa,EAAO9D,KAAK0hC,MAElBrgC,GAGX,OAAOrB,KAAK4lC,sBAGdjE,EAAAjgC,UAAA6jC,eAAA,WAKE,IAJA,IAAIrhC,EAAOlE,KAAK4D,OAAOM,KACnBJ,EAAQ9D,KAAK0hC,IACbrgC,EAAQuzB,QAAQ,EAAG,GACnBiR,EAASjR,QAAQ,GAAI,GAClB50B,KAAK0hC,IAAM1hC,KAAK+D,KAAK,CAC1B,IAAIrD,EAAIwD,EAAKI,WAAWtE,KAAK0hC,KAC7B,GAAIhhC,GAAC,IAAmBA,GAAC,GAEvBW,EAAQykC,QACNC,QAAQ1kC,EAAOwkC,GACfjR,QAAQl0B,EAAC,GAAgB,SAErB,GAAIA,GAAC,IAAkBA,GAAC,GAE9BW,EAAQykC,QACNC,QAAQ1kC,EAAOwkC,GACfjR,QAAQ,GAAKl0B,EAAC,GAAe,QAE1B,MAAIA,GAAC,IAAkBA,GAAC,KAO7B,MALAW,EAAQykC,QACNC,QAAQ1kC,EAAOwkC,GACfjR,QAAQ,GAAKl0B,EAAC,GAAe,MAK/BV,KAAK0hC,IAQT,OANI1hC,KAAK0hC,KAAO59B,GACd9D,KAAKoF,MACHge,EAAA7gB,eAAeyjC,2BACfhmC,KAAKiD,MAAMa,IAGRzC,GAGTsgC,EAAAjgC,UAAAkkC,mBAAA,WAKE,IAJA,IAAI1hC,EAAOlE,KAAK4D,OAAOM,KACnBJ,EAAQ9D,KAAK0hC,IACbrgC,EAAQuzB,QAAQ,EAAG,GACnBqR,EAASrR,QAAQ,GAAI,GAClB50B,KAAK0hC,IAAM1hC,KAAK+D,KAAK,CAC1B,IAAIrD,EAAIwD,EAAKI,WAAWtE,KAAK0hC,KAC7B,KAAIhhC,GAAC,IAAmBA,GAAC,IAOvB,MALAW,EAAQykC,QACNC,QAAQ1kC,EAAO4kC,GACfrR,QAAQl0B,EAAC,GAAgB,MAK3BV,KAAK0hC,IAQT,OANI1hC,KAAK0hC,KAAO59B,GACd9D,KAAKoF,MACHge,EAAA7gB,eAAe2jC,eACflmC,KAAKiD,MAAMa,IAGRzC,GAGTsgC,EAAAjgC,UAAA+jC,iBAAA,WAKE,IAJA,IAAIvhC,EAAOlE,KAAK4D,OAAOM,KACnBJ,EAAQ9D,KAAK0hC,IACbrgC,EAAQuzB,QAAQ,EAAG,GACnBuR,EAAQvR,QAAQ,EAAG,GAChB50B,KAAK0hC,IAAM1hC,KAAK+D,KAAK,CAC1B,IAAIrD,EAAIwD,EAAKI,WAAWtE,KAAK0hC,KAC7B,KAAIhhC,GAAC,IAAmBA,GAAC,IAOvB,MALAW,EAAQykC,QACNC,QAAQ1kC,EAAO8kC,GACfvR,QAAQl0B,EAAC,GAAgB,MAK3BV,KAAK0hC,IAQT,OANI1hC,KAAK0hC,KAAO59B,GACd9D,KAAKoF,MACHge,EAAA7gB,eAAe6jC,qBACfpmC,KAAKiD,MAAMa,IAGRzC,GAGTsgC,EAAAjgC,UAAA8jC,kBAAA,WAME,IALA,IAAIthC,EAAOlE,KAAK4D,OAAOM,KACnBJ,EAAQ9D,KAAK0hC,IACbrgC,EAAQuzB,QAAQ,EAAG,GACnByR,EAAQzR,QAAQ,EAAG,GACnB0R,EAAQ1R,QAAQ,EAAG,GAChB50B,KAAK0hC,IAAM1hC,KAAK+D,KAAK,CAC1B,IAAIrD,EAAIwD,EAAKI,WAAWtE,KAAK0hC,KAC7B,GAAK,IAADhhC,EAEFW,EAAQ0kC,QACN1kC,EACAglC,OAEG,IAAK,IAAD3lC,EAOT,MALAW,EAAQykC,QACNC,QAAQ1kC,EAAOglC,GACfC,KAKFtmC,KAAK0hC,IAQT,OANI1hC,KAAK0hC,KAAO59B,GACd9D,KAAKoF,MACHge,EAAA7gB,eAAegkC,sBACfvmC,KAAKiD,MAAMa,IAGRzC,GAGTsgC,EAAAjgC,UAAA8kC,UAAA,WAGE,IAFA,IAAI1iC,EAAQ9D,KAAK0hC,IACbx9B,EAAOlE,KAAK4D,OAAOM,KAChBlE,KAAK0hC,IAAM1hC,KAAK+D,KAAO/B,EAAAwgC,eAAet+B,EAAKI,WAAWtE,KAAK0hC,SAC9D1hC,KAAK0hC,IAET,GAAI1hC,KAAK0hC,IAAM1hC,KAAK+D,KAAgC,IAAzBG,EAAKI,WAAWtE,KAAK0hC,KAE9C,MADE1hC,KAAK0hC,IACA1hC,KAAK0hC,IAAM1hC,KAAK+D,KAAO/B,EAAAwgC,eAAet+B,EAAKI,WAAWtE,KAAK0hC,SAC9D1hC,KAAK0hC,IAGX,GAAI1hC,KAAK0hC,IAAM1hC,KAAK+D,IAAK,CACvB,IAAIrD,EAAIwD,EAAKI,WAAWtE,KAAK0hC,KAC7B,GAAK,IAADhhC,GAAoB,KAADA,EAUrB,MARIV,KAAK0hC,IAAM1hC,KAAK+D,MACS,IAAzBG,EAAKI,WAAWtE,KAAK0hC,MACI,IAAzBx9B,EAAKI,WAAWtE,KAAK0hC,OAEvB1/B,EAAAwgC,eAAet+B,EAAKI,WAAWtE,KAAK0hC,IAAM,OAExC1hC,KAAK0hC,IAEF1hC,KAAK0hC,IAAM1hC,KAAK+D,KAAO/B,EAAAwgC,eAAet+B,EAAKI,WAAWtE,KAAK0hC,SAC9D1hC,KAAK0hC,IAIb,OAAO+E,WAAWviC,EAAKM,UAAUV,EAAO9D,KAAK0hC,OAG/CC,EAAAjgC,UAAAqjC,kBAAA,WAIE,IAHA,IAAI2B,EAAS,EACTrlC,EAAQ,EACR6C,EAAOlE,KAAK4D,OAAOM,KAChBlE,KAAK0hC,IAAM1hC,KAAK+D,KAAK,CAC1B,IAAIrD,EAAIwD,EAAKI,WAAWtE,KAAK0hC,OAC7B,GAAIhhC,GAAC,IAAmBA,GAAC,GACvBW,EAAgB,GAARA,EAAaX,EAAC,QACjB,GAAIA,GAAC,IAAkBA,GAAC,GAC7BW,EAAgB,GAARA,EAAa,GAAKX,EAAC,OACtB,MAAIA,GAAC,IAAkBA,GAAC,KAO7B,OAJAV,KAAKoF,MACHge,EAAA7gB,eAAeyjC,2BACfhmC,KAAKiD,MAAMjD,KAAK0hC,IAAM,EAAG1hC,KAAK0hC,MAEzB,GANPrgC,EAAgB,GAARA,EAAa,GAAKX,EAAC,GAQ7B,GAAgB,KAAVgmC,EAAa,MAErB,OAAIA,GACF1mC,KAAKoF,MACHge,EAAA7gB,eAAesiC,uBACf7kC,KAAKiD,MAAMjD,KAAK0hC,MAEX,IAEFxe,OAAO8hB,aAAa3jC,IAGrBsgC,EAAAjgC,UAAAojC,0BAAR,WACE,IAAIhhC,EAAQ9D,KAAK0hC,IACbrgC,EAAQrB,KAAKulC,iBACboB,EAAU7rB,QAAQzZ,GAClBulC,GAAU,EAEd3d,QAAQlO,SAAS1Z,IACbslC,EAAU,UACZ3mC,KAAKoF,MACHge,EAAA7gB,eAAeskC,4EACf7mC,KAAKiD,MAAMa,EAAO9D,KAAK0hC,MAEzBkF,GAAU,GAGZ,IAAI1iC,EAAOlE,KAAK4D,OAAOM,KAiBvB,OAhBIlE,KAAK0hC,KAAO1hC,KAAK+D,KACnB/D,KAAKoF,MACHge,EAAA7gB,eAAesiC,uBACf7kC,KAAKiD,MAAMa,EAAO9D,KAAK+D,MAEzB6iC,GAAU,GACwB,KAAzB1iC,EAAKI,WAAWtE,KAAK0hC,OAC5B1hC,KAAK0hC,KAEP1hC,KAAKoF,MACHge,EAAA7gB,eAAeukC,qCACf9mC,KAAKiD,MAAMa,EAAO9D,KAAK0hC,MAEzBkF,GAAU,GAGRA,EAAgB,GACbD,EAAU,MACbzjB,OAAO8hB,aAAa2B,GACpBzjB,OAAO8hB,aAC2B,QAA/B2B,EAAU,OAAS,KAAO,IAC1BA,EAAU,OAAS,KAAY,QAIxChF,EAAAjgC,UAAAqlC,OAAA,aAEFpF,EAz+BA,CAA+Bve,EAAApe,mBAAlBtF,EAAAiiC,6YCnYb,IAAAqF,EAAA7mC,EAAA,GAMA8mC,EAAA9mC,EAAA,GAWST,EAAAu8B,MAVPgL,EAAAhL,MAUcv8B,EAAAkrB,MARdqc,EAAArc,MAGF,IAQYvE,EARZ6gB,EAAA/mC,EAAA,IAQA,SAAYkmB,GAEVA,IAAA,mBAGAA,IAAA,eACAA,IAAA,iCAGAA,IAAA,2BACAA,IAAA,yBACAA,IAAA,mBACAA,IAAA,eACAA,IAAA,iBACAA,IAAA,iCACAA,IAAA,iBACAA,IAAA,wBACAA,IAAA,kCACAA,IAAA,sBACAA,IAAA,cACAA,IAAA,gBACAA,IAAA,kCACAA,IAAA,oCACAA,IAAA,sBACAA,IAAA,kBACAA,IAAA,gBACAA,IAAA,gBACAA,IAAA,8BACAA,IAAA,gCACAA,IAAA,8BAGAA,IAAA,kBACAA,IAAA,kBACAA,IAAA,wBACAA,IAAA,YACAA,IAAA,kBACAA,IAAA,oBACAA,IAAA,gCACAA,IAAA,4BACAA,IAAA,cACAA,IAAA,YACAA,IAAA,oBACAA,IAAA,oBACAA,IAAA,oBACAA,IAAA,kBACAA,IAAA,cACAA,IAAA,wBACAA,IAAA,kBAGAA,IAAA,wCACAA,IAAA,sCACAA,IAAA,gDACAA,IAAA,wCACAA,IAAA,8CACAA,IAAA,0CACAA,IAAA,gDACAA,IAAA,0CACAA,IAAA,gDACAA,IAAA,sCACAA,IAAA,8CAGAA,IAAA,0BACAA,IAAA,gCACAA,IAAA,wBACAA,IAAA,0BACAA,IAAA,4BApEF,CAAYA,EAAA3mB,EAAA2mB,WAAA3mB,EAAA2mB,cAwEZ,IAAA8gB,EAAA,oBAAAA,IAOEnnC,KAAAgoB,OAAsB,KA2yBxB,OAvyBSmf,EAAAC,WAAP,SACExY,EACAsB,EACAmX,EACApkC,GAEA,IAAIqQ,EAAO,IAAIg0B,EAKf,OAJAh0B,EAAKrQ,MAAQA,EACbqQ,EAAK1S,KAAOguB,EACZtb,EAAK4c,cAAgBA,EACrB5c,EAAK+zB,WAAaA,EACX/zB,GAKF6zB,EAAAI,2BAAP,SACE3mC,EACAqC,GAEA,IAAI0P,EAAO,IAAI60B,EAGf,OAFA70B,EAAK1P,MAAQA,EACb0P,EAAKzO,KAAOtD,EACL+R,GAGFw0B,EAAAM,6BAAP,SACEjjB,EACAvhB,GAEA,IAAI0P,EAAO,IAAI+0B,EAGf,OAFA/0B,EAAK1P,MAAQA,EACb0P,EAAKg1B,mBAAqBnjB,EAsnD9B,SAAsBojB,EAAwB5f,GAC5C,IAAK,IAAI3nB,EAAI,EAAG+W,EAAIwwB,EAAMxjC,OAAQ/D,EAAI+W,IAAK/W,EAAG,CAC5C,IAAIwvB,EAAO+X,EAAMvnC,GACbwvB,IAAMA,EAAK7H,OAASA,IAznDY6f,CAAarjB,EAAU7R,GACpDA,GAGFw0B,EAAAW,0BAAP,SACEC,EACA9xB,EACAyc,EACAzvB,GAEA,IAAI0P,EAAO,IAAIq1B,EAKf,OAJAr1B,EAAK1P,MAAQA,EACb0P,EAAKo1B,cAAgBA,EACrBp1B,EAAKsD,WAAaA,EAAYA,EAAW+R,OAASrV,EAClDA,EAAK+f,OAASA,EAAQA,EAAO1K,OAASrV,EAC/BA,GAGFw0B,EAAAc,uBAAP,SACEC,EACAp1B,EACAC,EACA9P,GAEA,IAAI0P,EAAO,IAAIw1B,EAKf,OAJAx1B,EAAK1P,MAAQA,EACb0P,EAAKu1B,SAAWA,EAChBv1B,EAAKG,KAAOA,EAAMA,EAAKkV,OAASrV,EAChCA,EAAKI,MAAQA,EAAOA,EAAMiV,OAASrV,EAC5BA,GAGFw0B,EAAAiB,qBAAP,SACEnyB,EACAoyB,EACAC,EACArlC,GAEA,IAAI0P,EAAO,IAAI41B,EAKf,OAJA51B,EAAK1P,MAAQA,EACb0P,EAAKsD,WAAaA,EAAYA,EAAW+R,OAASrV,EAClDA,EAAKud,cAAgBmY,EAAcA,GAAUG,GAAUH,EAAU11B,GACjEA,EAAKoa,UAAYub,EAAME,GAAUF,EAAM31B,GAChCA,GAGFw0B,EAAAsB,sBAAP,SACEC,EACAzlC,GAEA,IAAI0P,EAAO,IAAIg2B,EAGf,OAFAh2B,EAAK1P,MAAQA,EACb0P,EAAK+1B,YAAcA,EAAaF,GAAUE,EAAa/1B,GAChDA,GAGFw0B,EAAAyB,4BAAP,SACE3lC,GAEA,IAAI0P,EAAO,IAAIk2B,EAEf,OADAl2B,EAAK1P,MAAQA,EACN0P,GAGFw0B,EAAA2B,8BAAP,SACE7yB,EACA4P,EACA5iB,GAEA,IAAI0P,EAAO,IAAIo2B,EAIf,OAHAp2B,EAAK1P,MAAQA,EACb0P,EAAKsD,WAAaA,EAAYA,EAAW+R,OAASrV,EAClDA,EAAKq2B,kBAAoBnjB,EAASA,EAAQmC,OAASrV,EAC5CA,GAGFw0B,EAAA8B,sBAAP,SACEhmC,GAEA,IAAI0P,EAAO,IAAIu2B,EAEf,OADAv2B,EAAK1P,MAAQA,EACN0P,GAGFw0B,EAAAgC,6BAAP,SACE9nC,EACA4B,GAEA,IAAI0P,EAAO,IAAIy2B,EAGf,OAFAz2B,EAAK1P,MAAQA,EACb0P,EAAKtR,MAAQA,EACNsR,GAGFw0B,EAAAkC,yBAAP,SACEthB,EACAuhB,QAAA,IAAAA,OAAA,GAEA,IAAI32B,EAAO22B,EACP,IAAIC,EACJ,IAAIC,EAGR,OAFA72B,EAAK1P,MAAQ8kB,EAAY9kB,MACzB0P,EAAKoV,YAAcA,EACZpV,GAGFw0B,EAAAsC,+BAAP,SACEpoC,EACA4B,GAEA,IAAI0P,EAAO,IAAI+2B,EAGf,OAFA/2B,EAAK1P,MAAQA,EACb0P,EAAKtR,MAAQA,EACNsR,GAGFw0B,EAAAwC,oBAAP,SACE1zB,EACAoyB,EACAC,EACArlC,GAEA,IAAI0P,EAAO,IAAIi3B,EAKf,OAJAj3B,EAAK1P,MAAQA,EACb0P,EAAKsD,WAAaA,EAAYA,EAAW+R,OAASrV,EAClDA,EAAKud,cAAgBmY,EAAcA,GAAUG,GAAUH,EAAU11B,GACjEA,EAAKoa,UAAYub,EAAME,GAAUF,EAAM31B,GAChCA,GAGFw0B,EAAA0C,qBAAP,SACE5mC,GAEA,IAAI0P,EAAO,IAAIm3B,EAEf,OADAn3B,EAAK1P,MAAQA,EACN0P,GAGFw0B,EAAA4C,8BAAP,SACE9zB,EACAhT,GAEA,IAAI0P,EAAO,IAAIq3B,EAGf,OAFAr3B,EAAK1P,MAAQA,EACb0P,EAAKsD,WAAaA,EAAYA,EAAW+R,OAASrV,EAC3CA,GAGFw0B,EAAA8C,+BAAP,SACEh0B,EACAxU,EACAwB,GAEA,IAAI0P,EAAO,IAAIu3B,EAIf,OAHAv3B,EAAK1P,MAAQA,EACb0P,EAAKsD,WAAaA,EAAYA,EAAW+R,OAASrV,EAClDA,EAAKlR,SAAWA,EAAUA,EAASumB,OAASrV,EACrCA,GAGFw0B,EAAAgD,8BAAP,SACEC,EACA7W,EACAtwB,GAEA,IAAI0P,EAAO,IAAI03B,EAIf,OAHA13B,EAAK1P,MAAQA,EACb0P,EAAKy3B,QAAUA,EACfz3B,EAAK23B,aAAe/W,EACb5gB,GAGFw0B,EAAAoD,wBAAP,SACEz0B,EACA00B,EACAC,EACAxnC,GAEA,IAAI0P,EAAO,IAAI+3B,EAKf,OAJA/3B,EAAK1P,MAAQA,EACb0P,EAAKmD,UAAYA,EAAWA,EAAUkS,OAASrV,EAC/CA,EAAK63B,OAASA,EAAQA,EAAOxiB,OAASrV,EACtCA,EAAK83B,OAASA,EAAQA,EAAOziB,OAASrV,EAC/BA,GAGFw0B,EAAAwD,8BAAP,SACEtpC,EACA4B,GAEA,IAAI0P,EAAO,IAAIi4B,EAGf,OAFAj4B,EAAK1P,MAAQA,EACb0P,EAAKtR,MAAQA,EACNsR,GAGFw0B,EAAA0D,sBAAP,SACE5nC,GAEA,IAAI0P,EAAO,IAAIm4B,EAEf,OADAn4B,EAAK1P,MAAQA,EACN0P,GAGFw0B,EAAA4D,qBAAP,SACE9nC,GAEA,IAAI0P,EAAO,IAAIq4B,EAEf,OADAr4B,EAAK1P,MAAQA,EACN0P,GAGFw0B,EAAA8D,qBAAP,SACEhoC,GAEA,IAAI0P,EAAO,IAAIu4B,EAEf,OADAv4B,EAAK1P,MAAQA,EACN0P,GAGFw0B,EAAAgE,6BAAP,SACEjD,EACAkD,EACAnoC,GAEA,IAAI0P,EAAO,IAAI04B,EAIf,OAHA14B,EAAK1P,MAAQA,EACb0P,EAAKu1B,SAAWA,EAChBv1B,EAAKy4B,QAAUA,EAASA,EAAQpjB,OAASrV,EAClCA,GAGFw0B,EAAAmE,4BAAP,SACEpD,EACAkD,EACAnoC,GAEA,IAAI0P,EAAO,IAAI44B,EAIf,OAHA54B,EAAK1P,MAAQA,EACb0P,EAAKu1B,SAAWA,EAChBv1B,EAAKy4B,QAAUA,EAASA,EAAQpjB,OAASrV,EAClCA,GAKFw0B,EAAAqE,qBAAP,SACEvlB,EACAhjB,GAEA,IAAIwoC,EAAO,IAAIC,EAGf,OAFAD,EAAKxoC,MAAQA,EACbwoC,EAAKxlB,WAAaA,EAAYuiB,GAAUviB,EAAYwlB,GAC7CA,GAGFtE,EAAAwE,qBAAP,SACEl2B,EACAxS,GAEA,IAAIwoC,EAAO,IAAIG,EAGf,OAFAH,EAAKxoC,MAAQA,EACbwoC,EAAKh2B,MAAQA,EAAWA,IAAOA,EAAMuS,OAASyjB,GACvCA,GAGFtE,EAAA0E,uBAAP,SACEjd,EACA4B,EACAtH,EACAwB,EACAG,EACAW,EACA5B,EACA3mB,GAEA,IAAIwoC,EAAO,IAAIK,EASf,OARAL,EAAKxoC,MAAQA,EACbwoC,EAAK7qC,KAAOguB,EAAYA,EAAW5G,OAASyjB,EAC5CA,EAAKjb,eAAiBA,EAAgBgY,GAAUhY,EAAgBib,GAChEA,EAAKviB,YAAcA,EAAiBA,IAAaA,EAAYlB,OAASyjB,GACtEA,EAAK/gB,gBAAkBA,EAAiB8d,GAAU9d,EAAiB+gB,GACnEA,EAAK5gB,QAAUA,EAAS2d,GAAU3d,EAAS4gB,GAC3CA,EAAKjgB,UAAYA,EAAeA,GAAWgd,GAAUhd,EAAWigB,GAChEA,EAAK7hB,WAAaA,EAAgBA,GAAY4e,GAAU5e,EAAY6hB,GAC7DA,GAGFtE,EAAA4E,wBAAP,SACEt2B,EACAxS,GAEA,IAAIwoC,EAAO,IAAIO,EAGf,OAFAP,EAAKxoC,MAAQA,EACbwoC,EAAKh2B,MAAQA,EAAWA,IAAOA,EAAMuS,OAASyjB,GACvCA,GAGFtE,EAAA8E,gBAAP,SACEh2B,EACAqyB,EACArlC,GAEA,IAAIwoC,EAAO,IAAIS,EAIf,GAHAT,EAAKxoC,MAAQA,EACbwoC,EAAK7qC,KAAOqV,EAAYA,EAAW+R,OAASyjB,EAC5CA,EAAK1e,UAAYub,EAAUA,GAAME,GAAUF,EAAMmD,GAC7Cx1B,EAAWmQ,MAAQC,EAAS4M,WAC9B,OAA+Bhd,EAAY/R,MACzC,IAAK,SAAUunC,EAAK7e,cAAa,EAAyB,MAC1D,IAAK,WAAY6e,EAAK7e,cAAa,EAA2B,MAC9D,IAAK,YAAa6e,EAAK7e,cAAa,EAA4B,MAChE,IAAK,SAAU6e,EAAK7e,cAAa,EAAyB,MAC1D,QAAS6e,EAAK7e,cAAa,OAG7B6e,EAAK7e,cAAa,EAEpB,OAAO6e,GAGFtE,EAAAgF,kBAAP,SACEhmB,EACArQ,EACA7S,GAEA,IAAIwoC,EAAO,IAAIW,EAIf,OAHAX,EAAKxoC,MAAQA,EACbwoC,EAAKtlB,UAAYA,EAAWA,EAAU6B,OAASyjB,EAC/CA,EAAK31B,UAAYA,EAAWA,EAAUkS,OAASyjB,EACxCA,GAGFtE,EAAAkF,qBAAP,SACEppC,GAEA,IAAIwoC,EAAO,IAAIa,EAEf,OADAb,EAAKxoC,MAAQA,EACNwoC,GAGFtE,EAAAoF,sBAAP,SACE3rC,EACAiqB,EACAW,EACA5B,EACA3mB,GAEA,IAAIwoC,EAAO,IAAIe,EAMf,OALAf,EAAKxoC,MAAQA,EACbwoC,EAAK7qC,KAAOA,EAAMA,EAAKonB,OAASyjB,EAChCA,EAAKld,OAAS1D,EAAS2d,GAAU3d,EAAS4gB,GAC1CA,EAAKjgB,UAAYA,EAAeA,GAAWgd,GAAUhd,EAAWigB,GAChEA,EAAK7hB,WAAaA,EAAgBA,GAAY4e,GAAU5e,EAAY6hB,GAC7DA,GAGFtE,EAAAsF,2BAAP,SACE7rC,EACAS,EACA4B,GAEA,IAAIwoC,EAAO,IAAIiB,GAIf,OAHAjB,EAAKxoC,MAAQA,EACbwoC,EAAK7qC,KAAOA,EAAMA,EAAKonB,OAASyjB,EAChCA,EAAKpqC,MAAQA,EAAWA,IAAOA,EAAM2mB,OAASyjB,GACvCA,GAGFtE,EAAAwF,sBAAP,SACE9hB,EACA5C,EACAuD,EACAvoB,GAEA,IAAIwoC,EAAO,IAAImB,GAIf,GAHAnB,EAAKxoC,MAAQA,EACbwoC,EAAK5gB,QAAUA,EAAS2d,GAAU3d,EAAS4gB,GAC3CA,EAAKxjB,KAAOA,EACRA,EAAM,CACR,IAAIpkB,EAAiBqjC,EAAA2F,UAAc5kB,EAAK5mB,OACpC4mB,EAAK5mB,MAAMyrC,WAAW,KACxBrB,EAAK5nC,eAAiBqjC,EAAApb,QACpBjoB,EACAZ,EAAMW,OAAOC,gBAGf4nC,EAAK5nC,eAAiBA,EAExB4nC,EAAK9c,aAAeoe,GAAmBtB,EAAK5nC,qBAE5C4nC,EAAK5nC,eAAiB,KACtB4nC,EAAK9c,aAAe,KAGtB,OADA8c,EAAKjgB,UAAYA,EAAeA,GAAWgd,GAAUhd,EAAWigB,GACzDA,GAGFtE,EAAA6F,4BAAP,SACEpsC,EACA6X,EACAxV,GAEA,IAAIwoC,EAAO,IAAIwB,GAIf,OAHAxB,EAAKxoC,MAAQA,EACbwoC,EAAK7qC,KAAOA,EAAMA,EAAKonB,OAASyjB,EAChCA,EAAKhzB,aAAeA,EAAcA,EAAauP,OAASyjB,EACjDA,GAGFtE,EAAA+F,mBAAP,SACEtsC,EACA6X,EACAxV,GAEA,IAAIkqC,EAAO,IAAIC,GASf,OARAD,EAAKlqC,MAAQA,EACbkqC,EAAKvsC,KAAOA,EAAMA,EAAKonB,OAASmlB,EAC3B10B,EAGHA,EAAauP,OAASmlB,EAFtB10B,EAAe7X,EAIjBusC,EAAK10B,aAAeA,EACb00B,GAGFhG,EAAAkG,0BAAP,SACEp3B,GAEA,IAAIw1B,EAAO,IAAI6B,GAGf,OAFA7B,EAAKxoC,MAAQgT,EAAWhT,MACxBwoC,EAAKx1B,WAAaA,EAAYA,EAAW+R,OAASyjB,EAC3CA,GAGFtE,EAAAoG,kBAAP,SACEz3B,EACAS,EACAC,EACAvT,GAEA,IAAIwoC,EAAO,IAAI+B,GAKf,OAJA/B,EAAKxoC,MAAQA,EACbwoC,EAAK31B,UAAYA,EAAWA,EAAUkS,OAASyjB,EAC/CA,EAAKl1B,OAASA,EAAQA,EAAOyR,OAASyjB,EACtCA,EAAKj1B,QAAUA,EAAaA,IAASA,EAAQwR,OAASyjB,GAC/CA,GAGFtE,EAAAsG,sBAAP,SACEC,EACAzlB,EACAhlB,GAEA,IAAIwoC,EAAO,IAAIkC,GACflC,EAAKxoC,MAAQA,EACbwoC,EAAKxc,aAAeye,EAAWA,GAAOlF,GAAUkF,EAAOjC,GACvDA,EAAKtc,cAAgB,KACrBsc,EAAKxjB,KAAOA,EACZ,IAAIpkB,EAAiBqjC,EAAA2F,UAAc5kB,EAAK5mB,OAUxC,OATI4mB,EAAK5mB,MAAMyrC,WAAW,KACxBrB,EAAK5nC,eAAiBqjC,EAAApb,QACpBjoB,EACAZ,EAAMW,OAAOC,gBAGf4nC,EAAK5nC,eAAiBA,EAExB4nC,EAAK9c,aAAeoe,GAAmBtB,EAAK5nC,gBACrC4nC,GAGFtE,EAAAyG,kCAAP,SACEhf,EACA3G,EACAhlB,GAEA,IAAIwoC,EAAO,IAAIkC,GAUf,OATAlC,EAAKxoC,MAAQA,EACbwoC,EAAKxc,aAAe,KACpBwc,EAAKtc,cAAgBP,EACrB6c,EAAKxjB,KAAOA,EACZwjB,EAAK5nC,eAAiBqjC,EAAApb,QACpBob,EAAA2F,UAAc5kB,EAAK5mB,OACnB4B,EAAMW,OAAOC,gBAEf4nC,EAAK9c,aAAeoe,GAAmBtB,EAAK5nC,gBACrC4nC,GAGFtE,EAAA0G,wBAAP,SACEp1B,EACA7X,EACAqC,GAEA,IAAIkqC,EAAO,IAAIW,GASf,OARAX,EAAKlqC,MAAQA,EACbkqC,EAAK10B,aAAeA,EAAcA,EAAauP,OAASmlB,EACnDvsC,EAGHA,EAAKonB,OAASmlB,EAFdvsC,EAAO6X,EAIT00B,EAAKvsC,KAAOA,EACLusC,GAGFhG,EAAA4G,2BAAP,SACEntC,EACAsoB,EACA2B,EACAW,EACAvoB,GAEA,IAAIwoC,EAAO,IAAIuC,GAMf,OALAvC,EAAKxoC,MAAQA,EACbwoC,EAAK7qC,KAAOA,EAAMA,EAAKonB,OAASyjB,EAChCA,EAAKviB,YAAcA,EAAiBA,IAAaA,EAAYlB,OAASyjB,GACtEA,EAAK5gB,QAAUA,EAAS2d,GAAU3d,EAAS4gB,GAC3CA,EAAKjgB,UAAYA,EAAeA,GAAWgd,GAAUhd,EAAWigB,GACzDA,GAGFtE,EAAA8G,uBAAP,SACErtC,EACA0S,EACA0E,EACAwT,EACA5B,EACA3mB,GAEA,IAAIwoC,EAAO,IAAIyC,GAOf,OANAzC,EAAKxoC,MAAQA,EACbwoC,EAAK7qC,KAAOA,EAAMA,EAAKonB,OAASyjB,EAChCA,EAAKn4B,KAAOA,EAAUA,IAAMA,EAAK0U,OAASyjB,GAC1CA,EAAKzzB,YAAcA,EAAiBA,IAAaA,EAAYgQ,OAASyjB,GACtEA,EAAKjgB,UAAYA,EAAeA,GAAWgd,GAAUhd,EAAWigB,GAChEA,EAAK7hB,WAAaA,EAAgBA,GAAY4e,GAAU5e,EAAY6hB,GAC7DA,GAGFtE,EAAAgH,mBAAP,SACEn2B,EACAlC,EACAs4B,EACAjoB,EACAljB,GAEA,IAAIwoC,EAAO,IAAI4C,GAMf,OALA5C,EAAKxoC,MAAQA,EACbwoC,EAAKzzB,YAAcA,EAAiBA,IAAaA,EAAYgQ,OAASyjB,GACtEA,EAAK31B,UAAYA,EAAeA,IAAWA,EAAUkS,OAASyjB,GAC9DA,EAAK2C,YAAcA,EAAiBA,IAAaA,EAAYpmB,OAASyjB,GACtEA,EAAKtlB,UAAYA,EAAWA,EAAU6B,OAASyjB,EACxCA,GAGFtE,EAAAmH,oBAAP,SACE1tC,EACAsoB,EACAjmB,GAEA,IAAIkqC,EAAO,IAAIoB,EAIf,OAHApB,EAAKlqC,MAAQA,EACbkqC,EAAKvsC,KAAOA,EAAMA,EAAKonB,OAASmlB,EAChCA,EAAKjkB,YAAcA,EAAiBA,IAAaA,EAAYlB,OAASmlB,GAC/DA,GAGFhG,EAAAqH,gBAAP,SACE5tC,EACA0S,EACA0E,EACAoO,EACAnjB,GAEA,IAAIkqC,EAAO,IAAI7X,GAMf,OALA6X,EAAKlqC,MAAQA,EACbkqC,EAAKvsC,KAAOA,EAAMA,EAAKonB,OAASmlB,EAChCA,EAAK75B,KAAOA,EAAUA,IAAMA,EAAK0U,OAASmlB,GAC1CA,EAAKn1B,YAAcA,EAAiBA,IAAaA,EAAYgQ,OAASmlB,GACtEA,EAAKsB,cAAgBroB,EACd+mB,GAGFhG,EAAAuH,0BAAP,SACE9tC,EACA4vB,EACAgG,EACAhf,EACApB,EACAoV,EACA5B,EACA3mB,GAEA,IAAIwoC,EAAO,IAAIkD,GASf,OARAlD,EAAKxoC,MAAQA,EACbwoC,EAAK7qC,KAAOA,EAAMA,EAAKonB,OAASyjB,EAChCA,EAAKjb,eAAiBA,EAAoBA,GAAgBgY,GAAUhY,EAAgBib,GACpFA,EAAKjV,WAAaA,EAAYgS,GAAUhS,EAAYiV,GACpDA,EAAKj0B,WAAaA,EAAgBA,IAAYA,EAAWwQ,OAASyjB,GAClEA,EAAKr1B,KAAOA,EAAUA,IAAMA,EAAK4R,OAASyjB,GAC1CA,EAAKjgB,UAAYA,EAAeA,GAAWgd,GAAUhd,EAAWigB,GAChEA,EAAK7hB,WAAaA,EAAgBA,GAAY4e,GAAU5e,EAAY6hB,GAC7DA,GAGFtE,EAAAyH,wBAAP,SACEhuC,EACA4vB,EACAgG,EACAhf,EACApB,EACAoV,EACA5B,EACA3mB,GAEA,IAAIwoC,EAAO,IAAIoD,GASf,OARApD,EAAKxoC,MAAQA,EACbwoC,EAAK7qC,KAAOA,EAAMA,EAAKonB,OAASyjB,EAChCA,EAAKjb,eAAiBA,EAAoBA,GAAgBgY,GAAUhY,EAAgBib,GACpFA,EAAKjV,WAAaA,EAAYgS,GAAUhS,EAAYiV,GACpDA,EAAKj0B,WAAaA,EAAgBA,IAAYA,EAAWwQ,OAASyjB,GAClEA,EAAKr1B,KAAOA,EAAUA,IAAMA,EAAK4R,OAASyjB,GAC1CA,EAAKjgB,UAAYA,EAAeA,GAAWgd,GAAUhd,EAAWigB,GAChEA,EAAK7hB,WAAaA,EAAgBA,GAAY4e,GAAU5e,EAAY6hB,GAC7DA,GAGFtE,EAAA2H,eAAP,SAAsB1oB,EAAoBnjB,GACxC,IAAIkqC,EAAO,IAAI4B,GAGf,OAFA5B,EAAKlqC,MAAQA,EACbkqC,EAAKxZ,aAAevN,EACb+mB,GAGFhG,EAAA6H,2BAAP,SACEpuC,EACAiqB,EACAW,EACA5B,EACA3mB,GAEA,IAAIwoC,EAAO,IAAIwD,GAMf,OALAxD,EAAKxoC,MAAQA,EACbwoC,EAAK7qC,KAAOA,EAAMA,EAAKonB,OAASyjB,EAChCA,EAAK5gB,QAAUA,EAAS2d,GAAU3d,EAAS4gB,GAC3CA,EAAKjgB,UAAYA,EAAeA,GAAWgd,GAAUhd,EAAWigB,GAChEA,EAAK7hB,WAAaA,EAAgBA,GAAY4e,GAAU5e,EAAY6hB,GAC7DA,GAGFtE,EAAA+H,sBAAP,SACE7tC,EACA4B,GAEA,IAAIwoC,EAAO,IAAI0D,GAGf,OAFA1D,EAAKxoC,MAAQA,EACbwoC,EAAKpqC,MAAQA,EAAWA,IAAOA,EAAM2mB,OAASyjB,GACvCA,GAGFtE,EAAAiI,sBAAP,SACEt5B,EACAu5B,EACApsC,GAEA,IAAIwoC,EAAO,IAAI6D,GAIf,OAHA7D,EAAKxoC,MAAQA,EACbwoC,EAAK31B,UAAYA,EAAWA,EAAUkS,OAASyjB,EAC/CA,EAAK4D,MAAQA,EAAO7G,GAAU6G,EAAO5D,GAC9BA,GAGFtE,EAAAoI,iBAAP,SACE95B,EACAwQ,EACAhjB,GAEA,IAAIkqC,EAAO,IAAIqC,GAIf,OAHArC,EAAKlqC,MAAQA,EACbkqC,EAAK13B,MAAQA,EAAWA,IAAOA,EAAMuS,OAASmlB,GAC9CA,EAAKlnB,WAAaA,EAAYuiB,GAAUviB,EAAYknB,GAC7CA,GAGFhG,EAAAsI,qBAAP,SACEpuC,EACA4B,GAEA,IAAIwoC,EAAO,IAAIiE,GAGf,OAFAjE,EAAKxoC,MAAQA,EACbwoC,EAAKpqC,MAAQA,EAAOA,EAAM2mB,OAASyjB,EAC5BA,GAGFtE,EAAAwI,mBAAP,SACE1pB,EACA2pB,EACAC,EACAC,EACA7sC,GAEA,IAAIwoC,EAAO,IAAIsE,GASf,OARAtE,EAAKxoC,MAAQA,EACbwoC,EAAKxlB,WAAaA,EAAYuiB,GAAUviB,EAAYwlB,GACpDA,EAAKmE,cAAgBA,EACjBA,IAAeA,EAAc5nB,OAASyjB,GAC1CA,EAAKoE,gBAAkBA,EACnBA,GAAiBrH,GAAUqH,EAAiBpE,GAChDA,EAAKqE,kBAAoBA,EACrBA,GAAmBtH,GAAUsH,EAAmBrE,GAC7CA,GAGFtE,EAAA6I,sBAAP,SACEpvC,EACA8uB,EACAlE,EACA5B,EACA3mB,GAEA,IAAIwoC,EAAO,IAAIwE,GAMf,OALAxE,EAAKxoC,MAAQA,EACbwoC,EAAK7qC,KAAOA,EAAMA,EAAKonB,OAASyjB,EAChCA,EAAK/b,MAAQA,EAAOA,EAAM1H,OAASyjB,EACnCA,EAAKjgB,UAAYA,EAAeA,GAAWgd,GAAUhd,EAAWigB,GAChEA,EAAK7hB,WAAaA,EAAgBA,GAAY4e,GAAU5e,EAAY6hB,GAC7DA,GAGFtE,EAAA+I,wBAAP,SACEjhB,EACAzD,EACA5B,EACA3mB,GAEA,IAAIwoC,EAAO,IAAI0E,GAKf,OAJA1E,EAAKxoC,MAAQA,EACbwoC,EAAKxc,aAAeA,EAAcuZ,GAAUvZ,EAAcwc,GAC1DA,EAAKjgB,UAAYA,EAAeA,GAAWgd,GAAUhd,EAAWigB,GAChEA,EAAK7hB,WAAaA,EAAgBA,GAAY4e,GAAU5e,EAAY6hB,GAC7DA,GAGFtE,EAAAiJ,0BAAP,SACExvC,EACA0S,EACA0E,EACAwT,EACA5B,EACA3mB,GAEA,IAAIkqC,EAAO,IAAIkD,GAOf,OANAlD,EAAKlqC,MAAQA,EACbkqC,EAAKvsC,KAAOA,EAAMA,EAAKonB,OAASmlB,EAChCA,EAAK75B,KAAOA,EAAUA,IAAMA,EAAK0U,OAASmlB,GAC1CA,EAAKn1B,YAAcA,EAAiBA,IAAaA,EAAYgQ,OAASmlB,GACtEA,EAAK3hB,UAAYA,EACjB2hB,EAAKvjB,WAAaA,EACXujB,GAGFhG,EAAAmJ,qBAAP,SACEx6B,EACAqQ,EACAljB,GAEA,IAAIwoC,EAAO,IAAI8E,GAIf,OAHA9E,EAAKxoC,MAAQA,EACbwoC,EAAK31B,UAAYA,EAAWA,EAAUkS,OAASyjB,EAC/CA,EAAKtlB,UAAYA,EAAWA,EAAU6B,OAASyjB,EACxCA,GAEXtE,EAlzBA,GAAsBznC,EAAAynC,OAuzBtB,IAAAG,EAAA,SAAAjjB,GAAA,SAAAijB,IAAA,IAAAhjB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAAS+X,OAQlB,OAT8BxZ,EAAA0iB,EAAAjjB,GAS9BijB,EATA,CAA8BH,GAAjBznC,EAAA4nC,WAYb,IAAAiH,EAAA,SAAAlqB,GAAA,SAAAkqB,IAAA,IAAAjqB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASmqB,gBAMlB,OAPmC5rB,EAAA2pB,EAAAlqB,GAOnCkqB,EAPA,CAAmCpH,GAAtBznC,EAAA6uC,gBAYb,IAAAkC,EAAA,SAAApsB,GAAA,SAAAosB,mDAAgD,OAAP7rB,EAAA6rB,EAAApsB,GAAOosB,EAAhD,CAAyCtJ,GAAnBznC,EAAA+wC,aAGtB,IAAAjJ,EAAA,SAAAnjB,GAAA,SAAAmjB,IAAA,IAAAljB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAAS4M,aAIlB,OAL0CrO,EAAA4iB,EAAAnjB,GAK1CmjB,EALA,CAA0CiJ,GAA7B/wC,EAAA8nC,uBAQb,SAAkBkJ,GAChBA,IAAA,iBACAA,IAAA,qBACAA,IAAA,mBACAA,IAAA,mBACAA,IAAA,iBACAA,IAAA,mBANF,CAAkBhxC,EAAAgxC,cAAAhxC,EAAAgxC,iBAUlB,IAAAC,EAAA,SAAAtsB,GAAA,SAAAssB,IAAA,IAAArsB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAAS4G,UAIlB,OALgDrI,EAAA+rB,EAAAtsB,GAKhDssB,EALA,CAAgDF,GAA1B/wC,EAAAixC,oBAQtB,IAAAjJ,EAAA,SAAArjB,GAAA,SAAAqjB,IAAA,IAAApjB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA4I,YAAW,IAIb,OAL4CtI,EAAA8iB,EAAArjB,GAK5CqjB,EALA,CAA4CiJ,GAA/BjxC,EAAAgoC,yBAQb,SAAkBkJ,GAChBA,IAAA,mBACAA,IAAA,WAFF,CAAkBlxC,EAAAkxC,gBAAAlxC,EAAAkxC,mBAMlB,IAAA5I,EAAA,SAAA3jB,GAAA,SAAA2jB,IAAA,IAAA1jB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASoM,YAQlB,OATyC7N,EAAAojB,EAAA3jB,GASzC2jB,EATA,CAAyCyI,GAA5B/wC,EAAAsoC,sBAYb,IAAAG,EAAA,SAAA9jB,GAAA,SAAA8jB,IAAA,IAAA7jB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASsM,SAQlB,OATsC/N,EAAAujB,EAAA9jB,GAStC8jB,EATA,CAAsCsI,GAAzB/wC,EAAAyoC,mBAYb,IAAAI,EAAA,SAAAlkB,GAAA,SAAAkkB,IAAA,IAAAjkB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAAS+M,OAQlB,OAToCxO,EAAA2jB,EAAAlkB,GASpCkkB,EATA,CAAoCkI,GAAvB/wC,EAAA6oC,iBAYb,IAAAI,EAAA,SAAAtkB,GAAA,SAAAskB,IAAA,IAAArkB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAAS2Y,QAIlB,OALqCpa,EAAA+jB,EAAAtkB,GAKrCskB,EALA,CAAqC8H,GAAxB/wC,EAAAipC,kBAQb,IAAAE,EAAA,SAAAxkB,GAAA,SAAAwkB,IAAA,IAAAvkB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASiG,YAChBhI,EAAApgB,KAAO,gBACT,OAH2C0gB,EAAAikB,EAAAxkB,GAG3CwkB,EAHA,CAA2CrB,GAA9B9nC,EAAAmpC,wBAMb,IAAAE,EAAA,SAAA1kB,GAAA,SAAA0kB,IAAA,IAAAzkB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAAS8M,gBAMlB,OAP6CvO,EAAAmkB,EAAA1kB,GAO7C0kB,EAPA,CAA6C0H,GAAhC/wC,EAAAqpC,0BAUb,IAAAK,EAAA,SAAA/kB,GAAA,SAAA+kB,IAAA,IAAA9kB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA4I,YAAW,IAIb,OAL4CtI,EAAAwkB,EAAA/kB,GAK5C+kB,EALA,CAA4CuH,GAA/BjxC,EAAA0pC,yBAQb,IAAAI,EAAA,SAAAnlB,GAAA,SAAAmlB,IAAA,IAAAllB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASgR,WAIlB,OALwCzS,EAAA4kB,EAAAnlB,GAKxCmlB,EALA,CAAwCiH,GAA3B/wC,EAAA8pC,qBAQb,IAAAD,EAAA,SAAAllB,GAAA,SAAAklB,IAAA,IAAAjlB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASwqB,gBAClB,OAF6CjsB,EAAA2kB,EAAAllB,GAE7CklB,EAFA,CAA6CC,GAAhC9pC,EAAA6pC,0BAKb,IAAAG,EAAA,SAAArlB,GAAA,SAAAqlB,IAAA,IAAAplB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA4I,YAAW,IAIb,OAL8CtI,EAAA8kB,EAAArlB,GAK9CqlB,EALA,CAA8CiH,GAAjCjxC,EAAAgqC,2BAQb,IAAAE,EAAA,SAAAvlB,GAAA,SAAAulB,IAAA,IAAAtlB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASsX,MAClB,OAFmC/Y,EAAAglB,EAAAvlB,GAEnCulB,EAFA,CAAmCrB,GAAtB7oC,EAAAkqC,gBAKb,IAAAE,EAAA,SAAAzlB,GAAA,SAAAylB,IAAA,IAAAxlB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASuX,KAChBtZ,EAAApgB,KAAO,SACT,OAHoC0gB,EAAAklB,EAAAzlB,GAGpCylB,EAHA,CAAoCtC,GAAvB9nC,EAAAoqC,iBAMb,IAAAE,EAAA,SAAA3lB,GAAA,SAAA2lB,IAAA,IAAA1lB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASmM,gBAIlB,OAL6C5N,EAAAolB,EAAA3lB,GAK7C2lB,EALA,CAA6CyG,GAAhC/wC,EAAAsqC,0BAQb,IAAAE,EAAA,SAAA7lB,GAAA,SAAA6lB,IAAA,IAAA5lB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAAS6M,iBAMlB,OAP8CtO,EAAAslB,EAAA7lB,GAO9C6lB,EAPA,CAA8CuG,GAAjC/wC,EAAAwqC,2BAUb,IAAAG,EAAA,SAAAhmB,GAAA,SAAAgmB,IAAA,IAAA/lB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA4I,YAAW,IAMb,OAP6CtI,EAAAylB,EAAAhmB,GAO7CgmB,EAPA,CAA6CsG,GAAhCjxC,EAAA2qC,0BAUb,IAAAK,EAAA,SAAArmB,GAAA,SAAAqmB,IAAA,IAAApmB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASyqB,UAQlB,OATuClsB,EAAA8lB,EAAArmB,GASvCqmB,EATA,CAAuC+F,GAA1B/wC,EAAAgrC,oBAYb,IAAAE,EAAA,SAAAvmB,GAAA,SAAAumB,IAAA,IAAAtmB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA4I,YAAW,IAIb,OAL6CtI,EAAAgmB,EAAAvmB,GAK7CumB,EALA,CAA6C+F,GAAhCjxC,EAAAkrC,0BAQb,IAAAE,EAAA,SAAAzmB,GAAA,SAAAymB,IAAA,IAAAxmB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAAS0M,MAChBzO,EAAApgB,KAAO,UACT,OAHqC0gB,EAAAkmB,EAAAzmB,GAGrCymB,EAHA,CAAqCtD,GAAxB9nC,EAAAorC,kBAMb,IAAAE,EAAA,SAAA3mB,GAAA,SAAA2mB,IAAA,IAAA1mB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASuM,KAChBtO,EAAApgB,KAAO,SACT,OAHoC0gB,EAAAomB,EAAA3mB,GAGpC2mB,EAHA,CAAoCxD,GAAvB9nC,EAAAsrC,iBAMb,IAAAE,EAAA,SAAA7mB,GAAA,SAAA6mB,IAAA,IAAA5mB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAAS6X,KAChB5Z,EAAApgB,KAAO,SACT,OAHoC0gB,EAAAsmB,EAAA7mB,GAGpC6mB,EAHA,CAAoC1D,GAAvB9nC,EAAAwrC,iBAMb,IAAAhC,EAAA,SAAA7kB,GAAA,SAAA6kB,IAAA,IAAA5kB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAAS2W,MAChB1Y,EAAApgB,KAAO,UACT,OAHqC0gB,EAAAskB,EAAA7kB,GAGrC6kB,EAHA,CAAqC1B,GAAxB9nC,EAAAwpC,kBAMb,IAAA6H,EAAA,SAAA1sB,GAAA,SAAA0sB,mDAMA,OAN8CnsB,EAAAmsB,EAAA1sB,GAM9C0sB,EANA,CAA8CN,GAAxB/wC,EAAAqxC,kBAStB,IAAA1F,EAAA,SAAAhnB,GAAA,SAAAgnB,IAAA,IAAA/mB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAAS2qB,eAClB,OAF4CpsB,EAAAymB,EAAAhnB,GAE5CgnB,EAFA,CAA4C0F,GAA/BrxC,EAAA2rC,yBAKb,IAOY/f,EAPZigB,EAAA,SAAAlnB,GAAA,SAAAknB,IAAA,IAAAjnB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAAS4qB,cAClB,OAF2CrsB,EAAA2mB,EAAAlnB,GAE3CknB,EAFA,CAA2CwF,GAA9BrxC,EAAA6rC,wBAOb,SAAYjgB,GACVA,IAAA,iBACAA,IAAA,iBACAA,IAAA,aACAA,IAAA,qBACAA,IAAA,mBACAA,IAAA,mBACAA,IAAA,mBACAA,IAAA,uBACAA,IAAA,mBACAA,IAAA,qBACAA,IAAA,0BACAA,IAAA,wBACAA,IAAA,cACAA,IAAA,cAdF,CAAYA,EAAA5rB,EAAA4rB,eAAA5rB,EAAA4rB,kBAkBZ,IAGY4lB,EAHZC,EAAA,SAAA9sB,GAAA,SAAA8sB,mDAA+C,OAAPvsB,EAAAusB,EAAA9sB,GAAO8sB,EAA/C,CAAwChK,GAAlBznC,EAAAyxC,YAGtB,SAAYD,GAEVA,IAAA,qBAEAA,IAAA,iBAEAA,IAAA,qBANF,CAAYA,EAAAxxC,EAAAwxC,aAAAxxC,EAAAwxC,gBAUZ,IAAAE,EAAA,SAAA/sB,GAoBE,SAAA+sB,EAAYvtC,EAAwBK,EAAckiB,GAAlD,IAAA9B,EACED,EAAA7jB,KAAAR,OAAOA,YApBTskB,EAAA8B,KAAOC,EAAS6D,OAChB5F,EAAA0D,OAAS,KAaT1D,EAAA+sB,UAA8B,KAE9B/sB,EAAA+U,gBAAuB,EAKrB/U,EAAKgtB,WAAalrB,EAClB9B,EAAKzgB,eAAiBA,EACtBygB,EAAKqK,aAAeoe,GAAmBzoB,EAAKzgB,gBAC5CygB,EAAK2B,WAAa,IAAI/gB,MACtBof,EAAKrhB,MAAQ,IAAIgkC,EAAArc,MAAMtG,EAAM,EAAGpgB,EAAKE,QACrCkgB,EAAKpgB,KAAOA,IAOhB,OAlC4B0gB,EAAAwsB,EAAA/sB,GA+B1BtjB,OAAAC,eAAIowC,EAAA1vC,UAAA,eAAJ,WAAsB,OAAO1B,KAAKsxC,YAAcJ,EAAWK,uCAE3DxwC,OAAAC,eAAIowC,EAAA1vC,UAAA,iBAAJ,WAAwB,OAAO1B,KAAKsxC,YAAcJ,EAAWM,yCAC/DJ,EAlCA,CAA4BjK,GAAfznC,EAAA0xC,SAqCb,IAAAK,EAAA,SAAAptB,GAAA,SAAAotB,IAAA,IAAAntB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YAOEskB,EAAAsF,WAAiC,KAEvBtF,EAAAotB,+BAAgD,KAChDptB,EAAAqtB,4BAA6C,OAiEzD,OA3EmD/sB,EAAA6sB,EAAAptB,GAajDtjB,OAAAC,eAAIywC,EAAA/vC,UAAA,gCAAJ,WAIE,OAHK1B,KAAK0xC,iCACR1xC,KAAK0xC,+BAAiCE,GAAmB5xC,MAAM,IAE1DA,KAAK0xC,gEAId3wC,OAAAC,eAAIywC,EAAA/vC,UAAA,6BAAJ,WAIE,OAHK1B,KAAK2xC,8BACR3xC,KAAK2xC,4BAA8BC,GAAmB5xC,MAAM,IAEvDA,KAAK2xC,6DAId5wC,OAAAC,eAAIywC,EAAA/vC,UAAA,kBAAJ,WACE,IAAIsmB,EAAShoB,KAAKgoB,OAClB,QAAKA,MAGDA,EAAO5B,MAAQC,EAASiB,YAAcU,EAASA,EAAOA,UAGnDA,EAAO5B,MAAQC,EAAS6D,yCAIjCnpB,OAAAC,eAAIywC,EAAA/vC,UAAA,wBAAJ,WACE,IAAIsmB,EAAShoB,KAAKgoB,OAClB,SAAKA,GAAWA,EAAO5B,MAAQC,EAASiB,YAAcU,EAASA,EAAOA,WAGlEA,EAAO5B,MAAQC,EAASa,qBAExBmE,GAAYC,EAAa5E,OAAQ1mB,KAAKwrB,YACfxD,EAAQ6pB,iBAG/B7pB,EAAO5B,MAAQC,EAASC,iBAExB+E,GAAYC,EAAaU,OAAQhsB,KAAKwrB,YACnBxD,EAAQ6pB,iBAI7B7pB,EAAO5B,MAAQC,EAAS6D,QACxBmB,GAAYC,EAAa5E,OAAQ1mB,KAAKwrB,6CAK1CimB,EAAA/vC,UAAAowC,oBAAA,SAAoBlpB,GAIlB,OACEA,EAAOhoB,KAAKsD,MAAQ0kB,EAAOnQ,aAAavU,MACxClE,KAAKiD,MAAMW,QAAUglB,EAAO3lB,MAAMW,SACjC5D,KAAK6xC,kBAGZJ,EA3EA,CAAmDN,GAA7BzxC,EAAA+xC,uBA8EtB,IAAAM,EAAA,SAAA1tB,GAAA,SAAA0tB,mDAMA,OAN+DntB,EAAAmtB,EAAA1tB,GAM/D0tB,EANA,CAA+DN,GAAzC/xC,EAAAqyC,mCAStB,IAAArG,EAAA,SAAArnB,GAAA,SAAAqnB,IAAA,IAAApnB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAAS2rB,QAIlB,OALoCptB,EAAA8mB,EAAArnB,GAKpCqnB,EALA,CAAoCyF,GAAvBzxC,EAAAgsC,iBAQb,IAAAE,EAAA,SAAAvnB,GAAA,SAAAunB,IAAA,IAAAtnB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASiW,QAIlB,OALoC1X,EAAAgnB,EAAAvnB,GAKpCunB,EALA,CAAoCuF,GAAvBzxC,EAAAksC,iBAQb,IAAAE,EAAA,SAAAznB,GAAA,SAAAynB,IAAA,IAAAxnB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASC,mBAUlB,OAXsC1B,EAAAknB,EAAAznB,GAWtCynB,EAXA,CAAsC2F,GAAzB/xC,EAAAosC,mBAcb,IAAAE,EAAA,SAAA3nB,GAAA,SAAA2nB,IAAA,IAAA1nB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASoW,WAIlB,OALuC7X,EAAAonB,EAAA3nB,GAKvC2nB,EALA,CAAuCmF,GAA1BzxC,EAAAssC,oBAQb,SAAkBiG,GAChBA,IAAA,mBACAA,IAAA,mBACAA,IAAA,uBACAA,IAAA,yBACAA,IAAA,mBALF,CAAkBvyC,EAAAuyC,gBAAAvyC,EAAAuyC,mBASlB,IAAA/F,EAAA,SAAA7nB,GAAA,SAAA6nB,IAAA,IAAA5nB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAAS6rB,YAQlB,OAT+BttB,EAAAsnB,EAAA7nB,GAS/B6nB,EATA,CAA+BiF,GAAlBzxC,EAAAwsC,YAYb,IAAAE,EAAA,SAAA/nB,GAAA,SAAA+nB,IAAA,IAAA9nB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASwW,KAMlB,OAPiCjY,EAAAwnB,EAAA/nB,GAOjC+nB,EAPA,CAAiC+E,GAApBzxC,EAAA0sC,cAUb,IAAAE,EAAA,SAAAjoB,GAAA,SAAAioB,IAAA,IAAAhoB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAAS8rB,QAClB,OAFoCvtB,EAAA0nB,EAAAjoB,GAEpCioB,EAFA,CAAoC6E,GAAvBzxC,EAAA4sC,iBAKb,IAAAE,EAAA,SAAAnoB,GAAA,SAAAmoB,IAAA,IAAAloB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASG,kBAIlB,OALqC5B,EAAA4nB,EAAAnoB,GAKrCmoB,EALA,CAAqCiF,GAAxB/xC,EAAA8sC,kBAQb,IAAAE,GAAA,SAAAroB,GAAA,SAAAqoB,IAAA,IAAApoB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAAS+rB,qBAChB9tB,EAAAkH,UAAY,OAKd,OAP0C5G,EAAA8nB,EAAAroB,GAO1CqoB,EAPA,CAA0C+E,GAA7B/xC,EAAAgtC,wBAUb,IAAAO,GAAA,SAAA5oB,GAAA,SAAA4oB,IAAA,IAAA3oB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASgsB,eAMlB,OAP2CztB,EAAAqoB,EAAA5oB,GAO3C4oB,EAPA,CAA2C9F,GAA9BznC,EAAAutC,yBAUb,IAAAG,GAAA,SAAA/oB,GAAA,SAAA+oB,IAAA,IAAA9oB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASisB,eAMlB,OAPkC1tB,EAAAwoB,EAAA/oB,GAOlC+oB,EAPA,CAAkCjG,GAArBznC,EAAA0tC,gBAUb,IAAAR,GAAA,SAAAvoB,GAAA,SAAAuoB,IAAA,IAAAtoB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASK,SAYlB,OAbqC9B,EAAAgoB,EAAAvoB,GAarCuoB,EAbA,CAAqCuE,GAAxBzxC,EAAAktC,mBAgBb,IAAAU,GAAA,SAAAjpB,GAAA,SAAAipB,IAAA,IAAAhpB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASksB,aAIlB,OALyC3tB,EAAA0oB,EAAAjpB,GAKzCipB,EALA,CAAyC6D,GAA5BzxC,EAAA4tC,uBAQb,IAAAY,GAAA,SAAA7pB,GAAA,SAAA6pB,IAAA,IAAA5pB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAAS4E,mBAClB,OAFsCrG,EAAAspB,EAAA7pB,GAEtC6pB,EAFA,CAAsC6D,GAAzBryC,EAAAwuC,oBAKb,IAAAG,GAAA,SAAAhqB,GAAA,SAAAgqB,IAAA,IAAA/pB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAAS6W,MAalB,OAdkCtY,EAAAypB,EAAAhqB,GAclCgqB,EAdA,CAAkC8C,GAArBzxC,EAAA2uC,gBAiBb,IAAAM,GAAA,SAAAtqB,GAAA,SAAAsqB,IAAA,IAAArqB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASO,sBAclB,OAfyChC,EAAA+pB,EAAAtqB,GAYvCtjB,OAAAC,eAAI2tC,EAAAjtC,UAAA,iBAAJ,WACE,OAA8B,MAAvB1B,KAAKwwB,gBAA0BxwB,KAAKwwB,eAAepsB,OAAS,mCAEvEuqC,EAfA,CAAyC8C,GAA5B/xC,EAAAivC,uBAkBb,IAAAnB,GAAA,SAAAnpB,GAAA,SAAAmpB,IAAA,IAAAlpB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAAS+W,KAQlB,OATiCxY,EAAA4oB,EAAAnpB,GASjCmpB,EATA,CAAiC2D,GAApBzxC,EAAA8tC,eAYb,IAAAM,GAAA,SAAAzpB,GAAA,SAAAypB,IAAA,IAAAxpB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASmsB,kBAChBluB,EAAAkH,UAAY,OAId,OANuC5G,EAAAkpB,EAAAzpB,GAMvCypB,EANA,CAAuC2D,GAA1B/xC,EAAAouC,qBASb,IAAAH,GAAA,SAAAtpB,GAAA,SAAAspB,IAAA,IAAArpB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASS,SAYlB,OAbqClC,EAAA+oB,EAAAtpB,GAarCspB,EAbA,CAAqCwD,GAAxBzxC,EAAAiuC,mBAgBb,IAAAK,GAAA,SAAA3pB,GAAA,SAAA2pB,IAAA,IAAA1pB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASW,uBAClB,OAF0CpC,EAAAopB,EAAA3pB,GAE1C2pB,EAFA,CAA0ClC,GAA7BpsC,EAAAsuC,wBAKb,IAAAa,GAAA,SAAAxqB,GAAA,SAAAwqB,IAAA,IAAAvqB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAAS8E,oBAClB,OAFuCvG,EAAAiqB,EAAAxqB,GAEvCwqB,EAFA,CAAuCF,IAA1BjvC,EAAAmvC,qBAKb,IAAAI,GAAA,SAAA5qB,GAAA,SAAA4qB,IAAA,IAAA3qB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASa,uBAIlB,OAL0CtC,EAAAqqB,EAAA5qB,GAK1C4qB,EALA,CAA0CwC,GAA7B/xC,EAAAuvC,wBAQb,SAAYwD,GAEVA,IAAA,qBAEAA,IAAA,uBAEAA,IAAA,eANF,CAAY/yC,EAAA+yC,gBAAA/yC,EAAA+yC,mBAUZ,IAAAnd,GAAA,SAAAjR,GAAA,SAAAiR,IAAA,IAAAhR,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASqsB,YAUlB,OAX+B9tB,EAAA0Q,EAAAjR,GAW/BiR,EAXA,CAA+B6R,GAAlBznC,EAAA41B,aAcb,IAAAyZ,GAAA,SAAA1qB,GAAA,SAAA0qB,IAAA,IAAAzqB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASssB,WAIlB,OAL8B/tB,EAAAmqB,EAAA1qB,GAK9B0qB,EALA,CAA8B5H,GAAjBznC,EAAAqvC,YAQb,IAAAI,GAAA,SAAA9qB,GAAA,SAAA8qB,IAAA,IAAA7qB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAAS0X,SAIlB,OALqCnZ,EAAAuqB,EAAA9qB,GAKrC8qB,EALA,CAAqCgC,GAAxBzxC,EAAAyvC,mBAQb,IAAAK,GAAA,SAAAnrB,GAAA,SAAAmrB,IAAA,IAAAlrB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASusB,aAMlB,OAPgChuB,EAAA4qB,EAAAnrB,GAOhCmrB,EAPA,CAAgCrI,GAAnBznC,EAAA8vC,cAUb,IAAAF,GAAA,SAAAjrB,GAAA,SAAAirB,IAAA,IAAAhrB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAAS2X,SAMlB,OAPqCpZ,EAAA0qB,EAAAjrB,GAOrCirB,EAPA,CAAqC6B,GAAxBzxC,EAAA4vC,mBAUb,IAAAI,GAAA,SAAArrB,GAAA,SAAAqrB,IAAA,IAAAprB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAAS4X,QAIlB,OALoCrZ,EAAA8qB,EAAArrB,GAKpCqrB,EALA,CAAoCyB,GAAvBzxC,EAAAgwC,kBAQb,IAAAK,GAAA,SAAA1rB,GAAA,SAAA0rB,IAAA,IAAAzrB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAAS8X,MAUlB,OAXkCvZ,EAAAmrB,EAAA1rB,GAWlC0rB,EAXA,CAAkCoB,GAArBzxC,EAAAqwC,gBAcb,IAAAE,GAAA,SAAA5rB,GAAA,SAAA4rB,IAAA,IAAA3rB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASe,kBAIlB,OALqCxC,EAAAqrB,EAAA5rB,GAKrC4rB,EALA,CAAqCwB,GAAxB/xC,EAAAuwC,mBAQb,IAAAI,GAAA,SAAAhsB,GAAA,SAAAgsB,IAAA,IAAA/rB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASwsB,sBAIlB,OALyCjuB,EAAAyrB,EAAAhsB,GAKzCgsB,EALA,CAAyC0B,GAA5BryC,EAAA2wC,uBAQb,IAAAF,GAAA,SAAA9rB,GAAA,SAAA8rB,IAAA,IAAA7rB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASiB,WAQlB,OATuC1C,EAAAurB,EAAA9rB,GASvC8rB,EATA,CAAuCgB,GAA1BzxC,EAAAywC,qBAYb,IAAAI,GAAA,SAAAlsB,GAAA,SAAAksB,IAAA,IAAAjsB,EAAA,OAAAD,KAAAiQ,MAAAt0B,KAAA+sB,YAAA/sB,YACEskB,EAAA8B,KAAOC,EAASmY,QAMlB,OAPoC5Z,EAAA2rB,EAAAlsB,GAOpCksB,EAPA,CAAoCY,GAAvBzxC,EAAA6wC,kBAUb,IAAIuC,GAAuC,KAO3C,SAAAC,KACE,IAAI31B,EAQJ,OAPyB,MAArB01B,IACF11B,EAAM01B,GACNA,GAAoB,MAEpB11B,KAEFA,EAAIhZ,OAAS,EACNgZ,EAaT,SAAA41B,GAA4B5sB,EAAoBoF,GAC9C,GAAIA,EACF,IAAK,IAAInrB,EAAI,EAAG+W,EAAIoU,EAAUpnB,OAAQ/D,EAAI+W,IAAK/W,EAC7C,GAAImrB,EAAUnrB,GAAGszB,cAAgBvN,EAC/B,OAAOoF,EAAUnrB,GAIvB,OAAO,KAIT,SAAAgrB,GAA4BjF,EAAoBoF,GAC9C,OAAuC,MAAhCwnB,GAAY5sB,EAAMoF,GAI3B,SAAAynB,GAAkCryC,EAAcgpB,GAC9C,GAAIA,EACF,IAAK,IAAIvpB,EAAI,EAAG+W,EAAIwS,EAAWxlB,OAAQ/D,EAAI+W,IAAK/W,EAAG,CACjD,IAAIssB,EAAY/C,EAAWvpB,GACvB4V,EAAa0W,EAAU/rB,KAC3B,GAAIqV,EAAWmQ,MAAQC,EAAS4M,YAAqChd,EAAY/R,MAAQtD,EACvF,OAAO+rB,EAIb,OAAO,KAST,SAAAilB,GAAmC7pB,EAAmCmrB,QAAA,IAAAA,OAAA,GACpE,IAAItyC,EAAOmnB,EAAYnnB,KAAKsD,KACxB8jB,EAASD,EAAYC,OACzB,OAAKA,IAEHD,EAAY3B,MAAQC,EAASwsB,qBAC7B7qB,EAAO5B,MAAQC,EAASiB,WAElBU,EAASA,EAAOA,SAEpBA,EAAO5B,MAAQC,EAASC,iBACnBsrB,GAAqC5pB,EAAQkrB,IAClD7nB,GAAYC,EAAaU,OAAQjE,EAAYyD,WACzCwb,EAAAnjB,iBACAmjB,EAAApjB,oBACFhjB,EAGJonB,EAAO5B,MAAQC,EAASa,sBACxBc,EAAO5B,MAAQC,EAASG,gBAEjBorB,GAAyC5pB,EAAQkrB,GACjDlM,EAAAnjB,iBAAmBjjB,EAErBsyC,EACHtyC,EACAmnB,EAAY9kB,MAAMW,OAAO+qB,aAAeqY,EAAAxjB,eAAiB5iB,EAvBzCA,EA2BtB,SAAAmsC,GAAmC9kB,GAEjC,OADIA,EAAKoH,SAAS,SAAQpH,EAAOA,EAAKzjB,UAAU,EAAGyjB,EAAK7jB,OAAS,IAC1D6jB,EAKT,SAAAugB,GAAmBZ,EAAe5f,GAChC,IAAK,IAAI3nB,EAAI,EAAG+W,EAAIwwB,EAAMxjC,OAAQ/D,EAAI+W,IAAK/W,EACzCunC,EAAMvnC,GAAG2nB,OAASA,EAtGtBtoB,EAAAyzC,qBAAA,SAAqC3nB,GACnCsnB,GAAoBtnB,GAItB9rB,EAAAqzC,mBAeArzC,EAAA0zC,YAAA,SAA4BC,EAAoB7nB,GAG9C,OAFiB,MAAbA,IAAmBA,EAAYunB,MACnCvnB,EAAU/mB,KAAK4uC,GACR7nB,GAIT9rB,EAAAszC,eAYAtzC,EAAA2rB,eAKA3rB,EAAAuzC,qBAcAvzC,EAAAiqB,aAAA,SAA6B/oB,EAAcgpB,GACzC,OAA8C,MAAvCqpB,GAAkBryC,EAAMgpB,IAIjClqB,EAAAkyC,sBA8BAlyC,EAAAqtC,qGC3uDA,IAAAxpB,EAAApjB,EAAA,IAOA,SAAkBmzC,GAGhBA,IAAA,WACAA,IAAA,aACAA,IAAA,aACAA,IAAA,aACAA,IAAA,iBAGAA,IAAA,WACAA,IAAA,aACAA,IAAA,aACAA,IAAA,aACAA,IAAA,iBACAA,IAAA,gBAGAA,IAAA,cACAA,IAAA,cAGAA,IAAA,gBAtBF,CAAkB5zC,EAAA4zC,WAAA5zC,EAAA4zC,cA0BlB,SAAkBC,GAChBA,IAAA,eAEAA,IAAA,mBAEAA,IAAA,uBAEAA,IAAA,qBAEAA,IAAA,iBAEAA,IAAA,gBAEAA,IAAA,kBAEAA,IAAA,gBAEAA,IAAA,mBAEAA,IAAA,2BAEAA,IAAA,yBArBF,CAAkB7zC,EAAA6zC,YAAA7zC,EAAA6zC,eAyBlB,IAAAxuB,EAAA,WAoBE,SAAAA,EAAYqB,EAAgBmN,EAAkBigB,GAL9CxzC,KAAAyzC,aAA4B,KAM1BzzC,KAAKomB,KAAOA,EACZpmB,KAAKuzB,MAAQA,EACbvzB,KAAKwzC,KAAOA,EACZxzC,KAAK46B,SAAgB8Y,KAAeF,EAAO,GAC3CxzC,KAAK6xB,UAAY,KACjB7xB,KAAK2zC,gBAAkB3zC,KAkY3B,OA9XE+kB,EAAArjB,UAAAkyC,yBAAA,SAAyBliB,GACvB,OAAOA,EAAW8hB,KAAOxzC,KAAKwzC,MAIhCzuB,EAAArjB,UAAAmyC,wBAAA,SAAwBniB,GACtB,OAAQ,IAAOA,EAAW8hB,KAAOxzC,KAAKwzC,MAIxCzuB,EAAArjB,UAAAsoB,GAAA,SAAGuJ,GACD,OAAQvzB,KAAKuzB,MAAQA,IAAUA,GAIjCxyB,OAAAC,eAAI+jB,EAAArjB,UAAA,eAAJ,WAAsB,OAAyB,MAAlB1B,KAAK6xB,2CAElC9wB,OAAAC,eAAI+jB,EAAArjB,UAAA,kBAAJ,WAAyB,OAA4B,MAArB1B,KAAKwZ,8CAErCzY,OAAAC,eAAI+jB,EAAArjB,UAAA,mBAAJ,WAA0B,OAAyB,MAAlB1B,KAAK6xB,WAA0C,MAArB7xB,KAAKwZ,8CAGhEuL,EAAArjB,UAAAq5B,QAAA,SAAQlJ,GACN5I,OAAgB,GAATjpB,KAAKomB,OAA2BpmB,KAAK6xB,WAC5C,IAAIzU,EAAM,IAAI2H,EAAK/kB,KAAKomB,MAAmB,IAAbpmB,KAAKuzB,MAAwB,IAAwBvzB,KAAKwzC,MAExF,OADAp2B,EAAIyU,UAAYA,EACTzU,GAIT2H,EAAArjB,UAAAoyC,WAAA,SAAWt6B,GACTyP,OAAgB,GAATjpB,KAAKomB,OAAyBpmB,KAAKwZ,cAC1C,IAAI4D,EAAM,IAAI2H,EAAK/kB,KAAKomB,MAAmB,IAAbpmB,KAAKuzB,MAAwB,IAAwBvzB,KAAKwzC,MAExF,OADAp2B,EAAI5D,aAAeA,EACZ4D,GAIT2H,EAAArjB,UAAAqyC,WAAA,WAQE,OAPA9qB,OAAOjpB,KAAKg0C,aACPh0C,KAAKyzC,eACRxqB,QAAQjpB,KAAKgqB,GAAE,MACfhqB,KAAKyzC,aAAe,IAAI1uB,EAAK/kB,KAAKomB,KAAgB,IAAVpmB,KAAKuzB,MAA4BvzB,KAAKwzC,MAC9ExzC,KAAKyzC,aAAa5hB,UAAY7xB,KAAK6xB,UACnC7xB,KAAKyzC,aAAaj6B,aAAexZ,KAAKwZ,cAEjCxZ,KAAKyzC,cAId1uB,EAAArjB,UAAA43B,eAAA,SAAe/hB,EAAc08B,GAC3B,IAAIC,EACAC,EACA3Y,EACA4Y,EACJ,QAL2B,IAAAH,OAAA,GAKvBj0C,KAAKg0C,aACP,GAAIz8B,EAAOy8B,YACT,GAAIE,EAAel0C,KAAK6xB,WACtB,GAAIsiB,EAAc58B,EAAOsa,UACvB,OAAOqiB,EAAa5a,eAAe6a,QAEhC,IAAI3Y,EAAkBx7B,KAAKwZ,gBAC5B46B,EAAiB78B,EAAOiC,cAC1B,OAAOgiB,EAAgBlC,eAAe8a,QAIvC,IAAK78B,EAAOy8B,YACjB,GAAIh0C,KAAKgqB,GAAE,GACT,GAAIzS,EAAOyS,GAAE,IACX,IAAKiqB,GAAyBj0C,KAAKgqB,GAAE,IAAsBzS,EAAOyS,GAAE,GAClE,OAAOhqB,KAAKwzC,MAAQj8B,EAAOi8B,SAExB,IAAe,IAAXj8B,EAAO6O,KAChB,OAAOpmB,KAAKwzC,MAAQ,GACf,GAAe,IAAXj8B,EAAO6O,KAChB,OAAOpmB,KAAKwzC,MAAQ,QAEjB,GAAIxzC,KAAKgqB,GAAE,IACZzS,EAAOyS,GAAE,GACX,OAAOhqB,KAAKwzC,MAAQj8B,EAAOi8B,KAIjC,OAAO,GAIFzuB,EAAAsvB,iBAAP,SAAwBvhC,EAAYC,EAAakhC,GAC/C,OAAIlhC,EAAMumB,eAAexmB,EAAMmhC,GACtBnhC,EACEA,EAAKwmB,eAAevmB,EAAOkhC,GAC7BlhC,EAEF,MAITgS,EAAArjB,UAAAiC,SAAA,SAAS2wC,GACP,YADO,IAAAA,OAAA,GACCt0C,KAAKomB,MACX,OAAkB,MAAO,KACzB,OAAmB,MAAO,MAC1B,OAAmB,MAAO,MAC1B,OAAmB,MAAO,MAC1B,OAAqB,MAAO,QAC5B,OAAkB,MAAO,KACzB,OAAmB,MAAO,MAC1B,OAAmB,MAAO,MAC1B,OAAmB,MAAO,MAC1B,OACE,OAAIkuB,EAAiB,QACdt0C,KAAK6xB,UACR7xB,KAAK6xB,UAAUluB,WACf3D,KAAKwZ,aACHxZ,KAAKwZ,aAAa+f,eAClB,QACR,QAAoB,MAAO,OAC3B,QAAmB,MAAO,MAC1B,QAAmB,MAAO,MAC1B,QAAoB,MAAO,OAC3B,QAAwB,OAAftQ,QAAO,GAAe,KAOnClE,EAAArjB,UAAAi3B,aAAA,WACE,OAAQ34B,KAAKomB,MAEX,QACE,OAAO7C,EAAAhe,WAAWoZ,IAEpB,OACA,OACE,OAAO4E,EAAAhe,WAAWsZ,IAEpB,OACA,OACE,OAAoB,IAAb7e,KAAKwzC,KAAajwB,EAAAhe,WAAWsZ,IAAM0E,EAAAhe,WAAWoZ,IAEvD,QACE,OAAO4E,EAAAhe,WAAWyZ,IAEpB,QACE,OAAOuE,EAAAhe,WAAW2Z,IAEpB,QACE,OAAOqE,EAAAhe,WAAWoQ,OAKxBoP,EAAArjB,UAAA6yC,aAAA,SAAa50C,GACX,OAAQK,KAAKomB,MAEX,QACE6C,QAAO,GAET,QACE,OAAOtpB,EAAOmS,UAAU,GAE1B,OACA,OACE,GAAiB,IAAb9R,KAAKwzC,KAAY,OAAO7zC,EAAOmS,UAAU,GAG/C,OACA,OACE,OAAOnS,EAAOsS,UAAU,GAE1B,QACE,OAAOtS,EAAO0S,UAAU,GAE1B,QACE,OAAO1S,EAAO4S,UAAU,KAK9BwS,EAAArjB,UAAA8yC,YAAA,SAAY70C,GACV,OAAQK,KAAKomB,MAEX,QACE6C,QAAO,GAET,QACE,OAAOtpB,EAAOmS,UAAU,GAE1B,OACA,OACE,GAAiB,IAAb9R,KAAKwzC,KAAY,OAAO7zC,EAAOmS,UAAU,GAG/C,OACA,OACE,OAAOnS,EAAOsS,UAAU,GAE1B,QACE,OAAOtS,EAAO0S,UAAU,GAE1B,QACE,OAAO1S,EAAO4S,UAAU,KAK9BwS,EAAArjB,UAAA+yC,eAAA,SAAe90C,GACb,OAAQK,KAAKomB,MAEX,QACE6C,QAAO,GAET,QACE,OAAOtpB,EAAOmS,WAAW,GAE3B,OACA,OACE,GAAiB,IAAb9R,KAAKwzC,KAAY,OAAO7zC,EAAOmS,WAAW,GAGhD,OACA,OACE,OAAOnS,EAAOsS,WAAW,GAAI,GAE/B,QACE,OAAOtS,EAAO0S,WAAW,GAE3B,QACE,OAAO1S,EAAO4S,WAAW,KAK/BwS,EAAArjB,UAAAgzC,kBAAA,WACE,OAAQ10C,KAAKomB,MAEX,QACE,MAAO,IAET,OACA,OACE,MAAO,IAET,OACA,OACE,OAAoB,IAAbpmB,KAAKwzC,KAAa,IAAM,IAEjC,QACE,MAAO,IAET,QACE,MAAO,IAET,QACE,MAAO,MAOGzuB,EAAAC,GAAY,IAAID,EAAI,EAClC,IAGmB,GAILA,EAAAE,IAAY,IAAIF,EAAI,EAClC,IAGkB,IAIJA,EAAA3G,IAAY,IAAI2G,EAAI,EAClC,IAEkB,IAIJA,EAAAG,IAAY,IAAIH,EAAI,EAClC,IAGkB,IAIJA,EAAA4vB,QAAgB,IAAI5vB,EAAI,EACtC,IAGkB,IAIJA,EAAA6vB,QAAgB,IAAI7vB,EAAI,EACtC,IAIkB,IAIJA,EAAAK,GAAW,IAAIL,EAAI,EACjC,IAGmB,GAILA,EAAAM,IAAY,IAAIN,EAAI,EAClC,IAGkB,IAIJA,EAAAO,IAAY,IAAIP,EAAI,EAClC,IAEkB,IAIJA,EAAAQ,IAAY,IAAIR,EAAI,EAClC,IAGkB,IAIJA,EAAA8vB,QAAgB,IAAI9vB,EAAI,EACtC,IAGkB,IAIJA,EAAA+vB,QAAgB,IAAI/vB,EAAI,EACtC,IAIkB,IAIJA,EAAAU,KAAa,IAAIV,EAAI,GACnC,IAGmB,GAILA,EAAAW,IAAY,IAAIX,EAAI,GAClC,IAEkB,IAIJA,EAAAY,IAAY,IAAIZ,EAAI,GAClC,IAGkB,IAIJA,EAAAa,KAAa,IAAIb,EAAI,KAAgC,GACvEA,EA5ZA,GAAarlB,EAAAqlB,OA+ZbrlB,EAAAq1C,mBAAA,SAAmCtwB,GAGjC,IAFA,IAAIrN,EAAIqN,EAAMrgB,OACVgZ,EAAM,IAAIlY,MAAkBkS,GACvB/W,EAAI,EAAGA,EAAI+W,IAAK/W,EACvB+c,EAAI/c,GAAKokB,EAAMpkB,GAAGs4B,eAEpB,OAAOvb,GAIT1d,EAAA2wB,cAAA,SAA8B5L,GAC5B,IAAIrN,EAAIqN,EAAMrgB,OACd,IAAKgT,EAAG,MAAO,GAEf,IADA,IAAI7S,EAAK,IAAIW,MAAckS,GAClB/W,EAAI,EAAGA,EAAI+W,IAAK/W,EACvBkE,EAAGlE,GAAKokB,EAAMpkB,GAAGsD,WAEnB,OAAOY,EAAGG,KAAK,skBC/ejB,IAoHYkW,EApHZo6B,EAAA70C,EAAA,IAMAijB,EAAAjjB,EAAA,GAKAojB,EAAApjB,EAAA,GAWA6mC,EAAA7mC,EAAA,GAyBA8mC,EAAA9mC,EAAA,GAIAmjB,EAAAnjB,EAAA,GAwDAkjB,EAAAljB,EAAA,IASA,SAAYya,GAEVA,IAAA,mBAEAA,IAAA,mBAJF,CAAYA,EAAAlb,EAAAkb,SAAAlb,EAAAkb,YAQZ,IAAAq6B,EAAA,oBAAAA,IAGEj1C,KAAAuX,OAAiBqD,EAAOs6B,OAExBl1C,KAAAm1C,eAAsB,EAEtBn1C,KAAAo1C,UAAiB,EAEjBp1C,KAAAq1C,UAAiB,EAEjBr1C,KAAAs1C,cAAqB,EAErBt1C,KAAAu1C,WAAkB,EAElBv1C,KAAAw1C,aAAuB,kBAEvBx1C,KAAAy1C,SAAmB,cAEnBz1C,KAAAwd,WAAkB,EAqBpB,OAlBEzc,OAAAC,eAAIi0C,EAAAvzC,UAAA,gBAAJ,WACE,OAAO1B,KAAKuX,QAAUqD,EAAOC,wCAI/B9Z,OAAAC,eAAIi0C,EAAAvzC,UAAA,iBAAJ,WACE,OAAO1B,KAAKuX,QAAUqD,EAAOC,OAASwI,EAAA0B,KAAK+vB,QAAUzxB,EAAA0B,KAAK8vB,yCAI5D9zC,OAAAC,eAAIi0C,EAAAvzC,UAAA,iBAAJ,WACE,OAAO1B,KAAKuX,QAAUqD,EAAOC,OAASwI,EAAA0B,KAAK6vB,QAAUvxB,EAAA0B,KAAK4vB,yCAI5D5zC,OAAAC,eAAIi0C,EAAAvzC,UAAA,sBAAJ,WACE,OAAO1B,KAAKuX,QAAUqD,EAAOC,OAAS0I,EAAAhe,WAAWsZ,IAAM0E,EAAAhe,WAAWoZ,qCAEtEs2B,EAxCA,GAAav1C,EAAAu1C,UA2Cb,SAAkBS,GAEhBA,IAAA,eAEAA,IAAA,uBAEAA,IAAA,uBANF,CAAkBh2C,EAAAg2C,iBAAAh2C,EAAAg2C,oBAUlB,IAAAC,EAAA,SAAAtxB,GAwCE,SAAAsxB,EAAYriB,EAAkBxO,QAAA,IAAAA,MAAA,MAA9B,IAAAR,EACED,EAAA7jB,KAAAR,KAAMszB,EAAQruB,cAAYjF,YA7B5BskB,EAAAsxB,kBAAqC,IAAI1wC,MAKzCof,EAAAuxB,YAA2B,KAE3BvxB,EAAAwxB,YAAoBzyB,EAAA0B,KAAKa,KAKzBtB,EAAAyxB,eAAkC,IAAI7wC,MAEtCof,EAAA0xB,eAA4C,IAAI7xB,IAGhDG,EAAA2xB,cAA4B,IAAI/wC,MAGhCof,EAAA4xB,MAAqB,IAAInnB,IAUvBzK,EAAKgP,QAAUA,EACfhP,EAAKQ,QAAUA,GAAoB,IAAImwB,EACvC3wB,EAAKoV,aAAe9E,QAClBuhB,IAAI7xB,EAAKQ,QAAQywB,WAAYjxB,EAAKQ,QAAQU,UAAUoV,WAEtDtW,EAAK3kB,OAAS4jB,EAAA7S,OAAOxN,WAozJzB,OAn2J8B0hB,EAAA+wB,EAAAtxB,GAmCrBsxB,EAAAS,QAAP,SAAe9iB,EAAkBxO,GAC/B,YAD+B,IAAAA,MAAA,MACxB,IAAI6wB,EAASriB,EAASxO,GAASsxB,WAexCT,EAAAj0C,UAAA00C,QAAA,WAGEp2C,KAAKszB,QAAQzO,WAAW7kB,KAAK8kB,SAG7B,IAAIuxB,EAAyBptB,OAAOjpB,KAAKszB,QAAQ9O,SAASrjB,IAAI,UAC9D8nB,OAAOotB,EAAuBjwB,MAAQ4gB,EAAA3d,YAAYiJ,oBAClD,IAAIgkB,EAAwB,IAAItP,EAAAlQ,SACXuf,EACnBA,EAAuB79B,aACvB,KACA,KACA6K,EAAA0B,KAAKa,MAEP0wB,EAAsB3uB,IAAIqf,EAAAnd,aAAa0sB,OACvCv2C,KAAKw7B,gBAAkBx7B,KAAKw2C,cAAgBF,EAK5C,IAHA,IAAI3xB,EAAU3kB,KAAKszB,QAAQ3O,QAGlBtkB,EAAI,EAAG+W,EAAIuN,EAAQvgB,OAAQ/D,EAAI+W,IAAK/W,EACvCskB,EAAQtkB,GAAGo2C,SACbz2C,KAAK02C,cAAc/xB,EAAQtkB,IAK/B,GAAIL,KAAK41C,kBAAkBxxC,OAAQ,CACjC,IAEIuM,EAFAgmC,EAAU32C,KAAKL,OAAOiS,2BAA2B2R,EAAAhe,WAAWoQ,SAC3DghC,IAASA,EAAU32C,KAAKL,OAAO0R,gBAAgB,IAAKkS,EAAAhe,WAAWoQ,UAEpE3V,KAAKL,OAAO4b,SACV5K,EAAM3Q,KAAKL,OAAOuY,YAChBlY,KAAKw2C,cAAc90C,UAAU8W,aAC7Bm+B,EACAtzB,EAAA0xB,mBAAmB/0C,KAAKw2C,cAAcjf,kBACtCv3B,KAAKL,OAAO6V,YAAY,KAAMxV,KAAK41C,qBAGvC51C,KAAKw2C,cAActd,SAASl5B,KAAKL,OAAQgR,GAI3C,IAAK3Q,KAAK8kB,QAAQuwB,SAAU,CAC1B,IAAI3b,EAAe15B,KAAK05B,aACxBA,EAAekd,UAAUld,EAAc15B,KAAK8kB,QAAQU,UAAUoV,UAC9D56B,KAAK05B,aAAeA,EAChB15B,KAAK8kB,QAAQ+xB,SACf72C,KAAKL,OAAOmY,UACV,YACAyL,EAAAhe,WAAWsZ,KACX,EACA7e,KAAKL,OAAOsS,UAAU6I,QAAQ4e,GAAe3e,SAAS2e,KAGxD15B,KAAKL,OAAOmY,UACV,YACAyL,EAAAhe,WAAWoZ,KACX,EACA3e,KAAKL,OAAOmS,UAAUgJ,QAAQ4e,KAKlC,IAAIod,EAAQC,UAAUH,UAAUld,EAAc,OAAU9E,QAAQ,GAAI,IACpE50B,KAAKL,OAAOya,UACVU,QAAQg8B,GACRvzB,EAAA7S,OAAOqQ,kBACP/gB,KAAK+1C,eACL/1C,KAAK8kB,QAAQvN,OACb,UAUJ,GALIvX,KAAK8kB,QAAQwwB,cACft1C,KAAKL,OAAOka,gBAAgB,IAAK,MAAO,UAItCzC,EAAIpX,KAAKi2C,cAAc7xC,OAAQ,CACjC,IAAI4yC,EAAU,IAAI9xC,MAAmBkS,GACrC,IAAK/W,EAAI,EAAGA,EAAI+W,IAAK/W,EACnB22C,EAAQ32C,GAAKL,KAAKi2C,cAAc51C,GAAGsQ,IAErC3Q,KAAKL,OAAOyb,iBAAiB47B,GAG/B,OAAOh3C,KAAKL,QAKdg2C,EAAAj0C,UAAAu1C,oBAAA,SAAoBC,EAAwCjgB,GAM1D,IALA,IAGIrzB,EAHA+gB,EAAU3kB,KAAKszB,QAAQ3O,QAIvBjQ,EAAWwiC,EAAiC,MACvC72C,EAAI,EAAG+W,EAAIuN,EAAQvgB,OAAQ/D,EAAI+W,IAAK/W,EAE3C,IADAuD,EAAS+gB,EAAQtkB,IACNwD,gBAAkB6Q,EAE3B,YADA1U,KAAK02C,cAAc9yC,GAOvB,IADA8Q,EAAWwiC,EAAiC,YACvC72C,EAAI,EAAG+W,EAAIuN,EAAQvgB,OAAQ/D,EAAI+W,IAAK/W,EAEvC,IADAuD,EAAS+gB,EAAQtkB,IACNwD,gBAAkB6Q,EAE3B,YADA1U,KAAK02C,cAAc9yC,GAOvB,IADA8Q,EAAWsyB,EAAAjjB,eAAiBmzB,EAAiC,MACxD72C,EAAI,EAAG+W,EAAIuN,EAAQvgB,OAAQ/D,EAAI+W,IAAK/W,EAEvC,IADAuD,EAAS+gB,EAAQtkB,IACNwD,gBAAkB6Q,EAE3B,YADA1U,KAAK02C,cAAc9yC,GAKvB5D,KAAKoF,MACHge,EAAA7gB,eAAe40C,iBACflgB,EAAWh0B,MAAOi0C,IAItBvB,EAAAj0C,UAAAg1C,cAAA,SAAc9yC,GACZ,IAAIsyC,EAAQl2C,KAAKk2C,MACjB,IAAIA,EAAM9rB,IAAIxmB,EAAOC,gBAArB,CACAqyC,EAAMlnB,IAAIprB,EAAOC,gBAOjB,IAJA,IAAIsxC,EAAgBn1C,KAAK8kB,QAAQqwB,cAC7BsB,EAAU7yC,EAAO6yC,QACjBb,EAAoB51C,KAAK41C,kBACzB3vB,EAAariB,EAAOqiB,WACf5lB,EAAI,EAAG+W,EAAI6O,EAAW7hB,OAAQ/D,EAAI+W,IAAK/W,EAAG,CACjD,IAAI8lB,EAAYF,EAAW5lB,GAC3B,OAAQ8lB,EAAUC,MAEhB,KAAK9C,EAAA+C,SAASC,kBAGR6uB,GACCsB,GAAWnzB,EAAA+H,YAAY/H,EAAAgI,aAAa5E,OAA2BP,EAAWqF,cAEzDrF,EAAWqK,eAAepsB,QAE9CpE,KAAKo3C,wBAA0CjxB,MAEjD,MAEF,KAAK7C,EAAA+C,SAASG,iBAEV2uB,GACCsB,GAAWnzB,EAAA+H,YAAY/H,EAAAgI,aAAa5E,OAA0BP,EAAWqF,aAE1ExrB,KAAKq3C,uBAAwClxB,GAE/C,MAEF,KAAK7C,EAAA+C,SAASO,qBAGRuuB,GACCsB,GAAWnzB,EAAA+H,YAAY/H,EAAAgI,aAAa5E,OAA8BP,EAAWqF,cAEzDrF,EAAW0P,WAElC71B,KAAKs3C,2BAAgDnxB,MAEvD,MAEF,KAAK7C,EAAA+C,SAASS,OACZ9mB,KAAKi3C,oBACe9wB,EAAWtiB,eACXsiB,EAAW8B,MAE/B,MAEF,KAAK3E,EAAA+C,SAASa,sBAEViuB,GACCsB,GAAWnzB,EAAA+H,YAAY/H,EAAAgI,aAAa5E,OAA+BP,EAAWqF,aAE/ExrB,KAAKu3C,4BAAkDpxB,GAEzD,MAEF,KAAK7C,EAAA+C,SAASiB,SACZ,IAAIkwB,EAAex3C,KAAKy3C,yBAA4CtxB,GAChEqxB,GAAc5B,EAAkBnxC,KAAK+yC,GACzC,MAEF,KAAKl0B,EAAA+C,SAASK,OACuC,MAA7BP,EAAWtiB,gBAC/B7D,KAAKi3C,oBACuB9wB,EAAWtiB,eACMsiB,EAAW8B,OAGtDktB,GAAiBsB,IACnBz2C,KAAK03C,uBAAwCvxB,GAE/C,MAGF,QACE,IAAIwxB,EAAmB33C,KAAKw7B,gBAC5Bx7B,KAAKw7B,gBAAkBx7B,KAAKw2C,cAC5B,IAAI7jC,EAAO3S,KAAK43C,iBAAiBzxB,GACjCnmB,KAAK41C,kBAAkBnxC,KAAKkO,GAC5B3S,KAAKw7B,gBAAkBmc,MAQ/BhC,EAAAj0C,UAAAm2C,yBAAA,SAAyB9vB,GAEvB,IAAIlC,EAAU7lB,KAAKszB,QAAQ9O,SAASrjB,IAAI4mB,EAAYwC,uBACpD,IAAK1E,GAAWA,EAAQO,MAAQ4gB,EAAA3d,YAAYc,OAAQ,MAAM,IAAIxM,MAAM,mBACpE,OAAK3d,KAAK83C,cAAsBjyB,GACjBA,EADkC,MAInD8vB,EAAAj0C,UAAAo2C,cAAA,SAAcnoB,GACZ,GAAIA,EAAO3F,GAAGgd,EAAAnd,aAAakuB,WAAapoB,EAAO3F,GAAGgd,EAAAnd,aAAaC,SAAU,OAAO,EAChF6F,EAAOhI,IAAIqf,EAAAnd,aAAakuB,UAExB,IAAIhwB,EAAc4H,EAAO5H,YACrBiwB,EAA0B,EAE9B,GAAIroB,EAAOrc,MAAQ+P,EAAA0B,KAAKa,KAGtB,GAAImC,EAAYzU,KAAM,CACpB,IAAI8jB,EAAep3B,KAAKszB,QAAQ1D,YAAY7H,EAAYzU,MACxD,IAAK8jB,EAAc,OAAO,EAC1B,GAAIA,GAAgB/T,EAAA0B,KAAKa,KAKvB,OAJA5lB,KAAKoF,MACHge,EAAA7gB,eAAe01C,cACflwB,EAAYzU,KAAKrQ,QAEZ,EAET0sB,EAAOrc,KAAO8jB,MAGT,KAAIrP,EAAY/P,YAqBrB,OAJAhY,KAAKoF,MACHge,EAAA7gB,eAAe01C,cACflwB,EAAYnnB,KAAKqC,MAAM6tB,QAElB,EAfP,GALAknB,EAAWh4C,KAAKk4C,kBACdnwB,EAAY/P,YACZqL,EAAA0B,KAAKa,KAAI,GAGP5lB,KAAK81C,aAAezyB,EAAA0B,KAAKa,KAK3B,OAJA5lB,KAAKoF,MACHge,EAAA7gB,eAAe41C,mCACfpwB,EAAY/P,YAAY/U,MAAOjD,KAAK81C,YAAYnyC,WAAY,WAEvD,EAETgsB,EAAOrc,KAAOtT,KAAK81C,YAYvB,IAAIsC,EAAazoB,EAAOrc,KAAKqlB,eAG7B,GAAIhJ,EAAO3F,GAAGgd,EAAAnd,aAAaiK,UAGzB,OAAInE,EAAO3F,GAAGgd,EAAAnd,aAAaoK,WACzBj0B,KAAKL,OAAOoa,gBACV4V,EAAOnX,aACPmX,EAAOrF,UACHqF,EAAOrF,UAAU8C,WACjB,MACJuC,EAAOvC,WACPgrB,GAEFzoB,EAAOhI,IAAIqf,EAAAnd,aAAakuB,WACjB,IAIP/3C,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf9E,EAAY9kB,QAGT,GAKT,IAAIo1C,GAAoB,EAGpB1oB,EAAO3F,GAAGgd,EAAAnd,aAAagL,SACzBmjB,EAAWh4C,KAAKs4C,sBAAsB3oB,EAAQA,EAAOrc,MAAM,GAKvDyU,EAAY/P,aACTggC,IACHA,EAAWh4C,KAAKk4C,kBAAkBnwB,EAAY/P,YAAa2X,EAAOrc,OAIhEkL,yBAAyBw5B,IAAaz0B,EAAA/d,aAAaiZ,QAGjDkR,EAAO3F,GAAGgd,EAAAnd,aAAaoK,WACzB+jB,EAAWh4C,KAAKu4C,wBAAwBP,GACpCx5B,yBAAyBw5B,IAAaz0B,EAAA/d,aAAaiZ,QACrDze,KAAKsF,QACH8d,EAAA7gB,eAAei2C,4DACfzwB,EAAY9kB,OAEdo1C,GAAoB,IAGtBA,GAAoB,IAMxBL,EAAWroB,EAAOrc,KAAKihC,aAAav0C,KAAKL,QAI7C,IAAI6Y,EAAemX,EAAOnX,aAE1B,GAAI6/B,EAAmB,CACrBr4C,KAAKL,OAAOmY,UAAUU,EAAc4/B,GAAY,EAAMzoB,EAAOrc,KAAKihC,aAAav0C,KAAKL,SACpF,IAAI84C,EAAUz4C,KAAKL,OAAO2V,gBAAgBkD,EAAcw/B,GACxDh4C,KAAK41C,kBAAkBnxC,KAAKg0C,QAI5B,GAAI9oB,EAAO3F,GAAGgd,EAAAnd,aAAaoK,UAAW,CAEpC,OADevV,2BAA2Bs5B,IAGxC,KAAKz0B,EAAAhe,WAAWoZ,IACdgR,EAAO4E,kBAAiB,EACxB5E,EAAOgF,qBAAuBC,QAAQhW,0BAA0Bo5B,GAAW,GAC3E,MAEF,KAAKz0B,EAAAhe,WAAWsZ,IACd8Q,EAAO4E,kBAAiB,EACxB5E,EAAOgF,qBAAuBC,QAC5B9V,6BAA6Bk5B,GAC7Bj5B,8BAA8Bi5B,IAEhC,MAEF,KAAKz0B,EAAAhe,WAAWyZ,IACd2Q,EAAO4E,kBAAiB,EACxB5E,EAAOoF,mBAAqB9V,0BAA0B+4B,GACtD,MAEF,KAAKz0B,EAAAhe,WAAW2Z,IACdyQ,EAAO4E,kBAAiB,EACxB5E,EAAOoF,mBAAqB5V,0BAA0B64B,GACtD,MAEF,QACE,MAAM,IAAIr6B,MAAM,0BAEpBgS,EAAOhI,IAAIqf,EAAAnd,aAAagL,SACpB9M,EAAY2wB,YACd14C,KAAKL,OAAOmY,UAAUU,EAAc4/B,GAAY,EAAOJ,GAErDjwB,EAAY9kB,MAAMW,OAAO6yC,SAAW1uB,EAAY8pB,kBAClD7xC,KAAKL,OAAOsZ,gBAAgB0W,EAAOnX,aAAcuP,EAAY6D,+BAI/D5rB,KAAKL,OAAOmY,UAAUU,EAAc4/B,GAAazoB,EAAO3F,GAAGgd,EAAAnd,aAAaoK,UAAW+jB,GAGvF,OAAO,GAKTrC,EAAAj0C,UAAA21C,uBAAA,SAAuBtvB,GACrB,IAAIlC,EAAU7lB,KAAKszB,QAAQ9O,SAASrjB,IAAI4mB,EAAYwC,uBACpD,IAAK1E,GAAWA,EAAQO,MAAQ4gB,EAAA3d,YAAY0K,KAAM,MAAM,IAAIpW,MAAM,iBAClE,OAAO3d,KAAK24C,YAAkB9yB,GAAiBA,EAAU,MAG3D8vB,EAAAj0C,UAAAi3C,YAAA,SAAY9yB,GACV,GAAIA,EAAQmE,GAAGgd,EAAAnd,aAAakuB,UAAW,OAAO,EAC9ClyB,EAAQ8B,IAAIqf,EAAAnd,aAAakuB,UAEzB/3C,KAAK61C,YAAchwB,EACnB,QAAI+yB,EAAkC,KACtC,GAAI/yB,EAAQgF,YACV,IAAmB,IAAAtC,EAAAJ,EAAAtC,EAAQgF,QAAQ0D,UAAQ2J,EAAA3P,EAAAF,QAAA6P,EAAA5P,KAAA4P,EAAA3P,EAAAF,OAAA,CAAtC,IAAIO,EAAMsP,EAAA72B,MACb,GAAIunB,EAAOxC,MAAQ4gB,EAAA3d,YAAY4H,UAA/B,CACA,IAcM+mB,EAdFa,GAAc,EACdv2B,EAAiBsG,EACjBkwB,EAAmBx2B,EAAIyF,YAE3B,GADAzF,EAAIqF,IAAIqf,EAAAnd,aAAakuB,UACjBz1B,EAAI0H,GAAGgd,EAAAnd,aAAagL,SAClBhP,EAAQkC,YAAY8pB,kBACtB7xC,KAAKL,OAAOmY,UACVwK,EAAI9J,aACJ+K,EAAAhe,WAAWoZ,KACX,EACA3e,KAAKL,OAAOmS,UAAUwQ,EAAI4R,qBAqC9B,GAhCI4kB,EAAiBz3C,OACnB22C,EAAWh4C,KAAKk4C,kBAA8BY,EAAiBz3C,MAAOgiB,EAAA0B,KAAK3G,KACvEI,yBAAyBw5B,IAAaz0B,EAAA/d,aAAaiZ,QACrDu5B,EAAWh4C,KAAKu4C,wBAAwBP,GACpCx5B,yBAAyBw5B,IAAaz0B,EAAA/d,aAAaiZ,QACjDoH,EAAQmE,GAAGgd,EAAAnd,aAAaoK,WAC1Bj0B,KAAKsF,QACH8d,EAAA7gB,eAAei2C,4DACfM,EAAiB71C,OAGrB41C,GAAc,KAGQ,MAAjBD,EACTZ,EAAWh4C,KAAKL,OAAOmS,UAAU,GACxB8mC,EAAc5uB,GAAGgd,EAAAnd,aAAagL,SACvCmjB,EAAWh4C,KAAKL,OAAOmS,UAAU8mC,EAAc1kB,cAAgB,IAG/D8jB,EAAWh4C,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASkuC,OAC3C/4C,KAAKL,OAAO+T,gBAAgBklC,EAAcpgC,aAAc+K,EAAAhe,WAAWoZ,KACnE3e,KAAKL,OAAOmS,UAAU,IAEpB+T,EAAQmE,GAAGgd,EAAAnd,aAAaoK,WAC1Bj0B,KAAKsF,QACH8d,EAAA7gB,eAAei2C,4DACfM,EAAiB71C,OAGrB41C,GAAc,GAEZA,EAAa,CACf74C,KAAKL,OAAOmY,UACVwK,EAAI9J,aACJ+K,EAAAhe,WAAWoZ,KACX,EACA3e,KAAKL,OAAOmS,UAAU,IAExB,IAAI2mC,EAAUz4C,KAAKL,OAAO2V,gBAAgBgN,EAAI9J,aAAcw/B,GAC5Dh4C,KAAK41C,kBAAkBnxC,KAAKg0C,OACvB,CAEL,GADAz4C,KAAKL,OAAOmY,UAAUwK,EAAI9J,aAAc+K,EAAAhe,WAAWoZ,KAAK,EAAOq5B,GAC3Dt5B,2BAA2Bs5B,IAAaz0B,EAAAhe,WAAWoZ,IAIrD,MAAM,IAAIhB,MAAM,gBAHhB2E,EAAI4R,cAAgBtV,0BAA0Bo5B,GAC9C11B,EAAIqF,IAAIqf,EAAAnd,aAAagL,SAM3B+jB,EAA2Bt2B,EAGvBuD,EAAQkC,YAAY9kB,MAAMW,OAAO6yC,SAAW5wB,EAAQkC,YAAY8pB,mBAC9DjpB,EAAOoB,GAAGgd,EAAAnd,aAAagL,SACzB70B,KAAKL,OAAOsZ,gBAAgB2P,EAAOpQ,aAAcoQ,EAAOpQ,cAC/CsgC,GACT94C,KAAKsF,QACH8d,EAAA7gB,eAAey2C,+BACfF,EAAiB71C,2GAO3B,OADAjD,KAAK61C,YAAc,MACZ,GAMTF,EAAAj0C,UAAA41C,2BAAA,SACEvvB,EACAmI,EACAJ,QAAA,IAAAA,MAAA,MAEA,IAAIjK,EAAU7lB,KAAKszB,QAAQ9O,SAASrjB,IAAI4mB,EAAYwC,uBACpD,IAAK1E,GAAWA,EAAQO,MAAQ4gB,EAAA3d,YAAYiJ,mBAC1C,MAAM,IAAI3U,MAAM,qBAElB,OAAO3d,KAAKi5C,kCACSpzB,EACnBqK,EACAJ,EACoBjK,EAASkC,YAAYnnB,OAK7C+0C,EAAAj0C,UAAAu3C,kCAAA,SACEv3C,EACAwuB,EACAJ,EACAmH,GAEA,IAAIpL,EAAWnqB,EAAUuuB,0BACvBC,EACAJ,EACAmH,GAEF,OAAKpL,GACE7rB,KAAKk5C,gBAAgBrtB,GAAYA,EADlB,MAKxB8pB,EAAAj0C,UAAAw3C,gBAAA,SAAgBrtB,GACd,GAAIA,EAAS7B,GAAGgd,EAAAnd,aAAakuB,UAAW,OAAO,EAE/C9uB,QAAQ4C,EAAS7B,GAAGgd,EAAAnd,aAAaC,UAAmC,SAAvB+B,EAASuB,YAEtD,IAAIrF,EAAc8D,EAASnqB,UAAUqmB,YACrC,GAAI8D,EAAS7B,GAAGgd,EAAAnd,aAAaiK,WAC3B,GAAI/L,EAAY3R,KAKd,OAJApW,KAAKoF,MACHge,EAAA7gB,eAAe42C,yDACfpxB,EAAYnnB,KAAKqC,QAEZ,OAEJ,IAAK8kB,EAAY3R,KAKtB,OAJApW,KAAKoF,MACHge,EAAA7gB,eAAe62C,gFACfrxB,EAAYnnB,KAAKqC,QAEZ,EAIT4oB,EAASlE,IAAIqf,EAAAnd,aAAakuB,UAG1B,IAAItM,EAAsB,EAC1B,IAAK5f,EAAS7B,GAAGgd,EAAAnd,aAAaiK,UAAW,CACvC,IAAI6jB,EAAmB33C,KAAKw7B,gBAC5Bx7B,KAAKw7B,gBAAkB3P,EACvB,IAAIzV,EAAO6S,OAAOlB,EAAY3R,KAAM,2BACpCq1B,EAAOzrC,KAAK43C,iBAAiBxhC,GAE7B,IAAIijC,EAAoBr5C,KAAKw7B,gBAAgBpK,KAAK8H,WAC9CrN,EAASrU,YAAc6L,EAAA0B,KAAKa,MAASyzB,GACvCr5C,KAAKoF,MACHge,EAAA7gB,eAAe+2C,+DACfrwB,OAAOlB,EAAYvQ,WAAY,wBAAwBvU,OAG3DjD,KAAKw7B,gBAAkBmc,EAIzB,IAAI4B,EAAgB1tB,EAAS2K,WAAa3K,EAAS2K,WAAWpyB,OAAS,EACnEo1C,EAAwB3tB,EAASgH,iBAAmB0mB,EAAgB,EAAIA,EACxEE,EAAa,EAEbC,EAAmB7tB,EAASrU,WAAWmhB,eACvCghB,EAAmB,IAAIz0C,MAAkBs0C,GACzCI,EAAqB,IAAI10C,MAAcs0C,EAAwB,GAMnE,GAJI3tB,EAASgH,mBACX8mB,EAAiBF,GAAcz5C,KAAK8kB,QAAQ+xB,SAAWtzB,EAAAhe,WAAWsZ,IAAM0E,EAAAhe,WAAWoZ,IACnFi7B,EAAmBH,KAAgB5tB,EAASgH,iBAAiBvf,KAAKohC,qBAEhE7oB,EAAS2K,WACX,IAAK,IAAIn2B,EAAI,EAAGA,EAAIk5C,IAAiBl5C,EACnCs5C,EAAiBF,GAAc5tB,EAAS2K,WAAWn2B,GAAGiT,KAAKqlB,eAC3DihB,EAAmBH,KAAgB5tB,EAAS2K,WAAWn2B,GAAGiT,KAAKohC,oBAGnEkF,EAAmBH,GAAc5tB,EAASrU,WAAWk9B,oBACrD,IAUI/jC,EAVAgmC,EAAU32C,KAAKL,OAAOiS,2BAA2B8nC,EAAkBC,GAmCvE,OAlCKhD,IACHA,EAAU32C,KAAKL,OAAO0R,gBACpBuoC,EAAmBl1C,KAAK,IACxBg1C,EACAC,IAOFhpC,EADEkb,EAAS7B,GAAGgd,EAAAnd,aAAaiK,UACrB9zB,KAAKL,OAAO0Z,kBAChBwS,EAASrT,aACTqT,EAASnqB,UAAU4oB,UACfuB,EAASnqB,UAAU4oB,UAAU8C,WAC7B,MACJvB,EAASuB,WACTupB,GAGI32C,KAAKL,OAAOuY,YAChB2T,EAASrT,aACTm+B,EACAtzB,EAAA0xB,mBAAmBlpB,EAAS0L,kBAC5BtO,OAAOwiB,IAKP1jB,EAAY9kB,MAAMW,OAAO6yC,SAAW1uB,EAAY8pB,kBAClD7xC,KAAKL,OAAO4Y,kBAAkBsT,EAASrT,aAAcuP,EAAYnnB,KAAKsD,MAGxE2nB,EAASqN,SAASl5B,KAAKL,OAAQgR,IACxB,GAKTglC,EAAAj0C,UAAA61C,4BAAA,SAA4BxvB,GAG1B,IAFA,IAAI8C,EAAU9C,EAAY8C,QACtBsqB,EAAgBn1C,KAAK8kB,QAAQqwB,cACxB90C,EAAI,EAAG+W,EAAIyT,EAAQzmB,OAAQ/D,EAAI+W,IAAK/W,EAAG,CAC9C,IAAIuoB,EAASiC,EAAQxqB,GACrB,OAAQuoB,EAAOxC,MAEb,KAAK9C,EAAA+C,SAASC,kBAGR6uB,IACA7xB,EAAA+H,YAAY/H,EAAAgI,aAAa5E,OAA2BkC,EAAQ4C,YACrC5C,EAAQ4H,eAAepsB,QAEhDpE,KAAKo3C,wBAA0CxuB,MAEjD,MAEF,KAAKtF,EAAA+C,SAASW,sBAGRmuB,IACA7xB,EAAA+H,YAAY/H,EAAAgI,aAAa5E,OAA+BkC,EAAQ4C,YACrC5C,EAAQ4H,eAAepsB,QAEpDpE,KAAK65C,4BAAkDjxB,MAEzD,MAEF,KAAKtF,EAAA+C,SAASG,iBAEV2uB,GACA7xB,EAAA+H,YAAY/H,EAAAgI,aAAa5E,OAA0BkC,EAAQ4C,aAE3DxrB,KAAKq3C,uBAAwCzuB,GAE/C,MAEF,KAAKtF,EAAA+C,SAASO,qBAGRuuB,IACA7xB,EAAA+H,YAAY/H,EAAAgI,aAAa5E,OAA8BkC,EAAQ4C,YAE1C5C,EAAQiN,WAE/B71B,KAAKs3C,2BAAgD1uB,MAEvD,MAEF,KAAKtF,EAAA+C,SAASa,sBAEViuB,GACA7xB,EAAA+H,YAAY/H,EAAAgI,aAAa5E,OAA+BkC,EAAQ4C,aAEhExrB,KAAKu3C,4BAAkD3uB,GAEzD,MAEF,KAAKtF,EAAA+C,SAASiB,SACZ,GACE6tB,GACA7xB,EAAA+H,YAAY/H,EAAAgI,aAAa5E,OAA4BkC,EAAQ4C,WAC7D,CACA,IAAIgsB,EAAex3C,KAAKy3C,yBAA4C7uB,GAAQ,GACxE4uB,GAAcx3C,KAAK41C,kBAAkBnxC,KAAK+yC,GAEhD,MAEF,QACE,MAAM,IAAI75B,MAAM,gCAKxBg4B,EAAAj0C,UAAAo4C,iBAAA,SAAiBC,GACf,GAAKA,EAAGlvB,QAAR,CAEA,QAAIsqB,EAAgBn1C,KAAK8kB,QAAQqwB,kBACjC,IAAoB,IAAA5sB,EAAAJ,EAAA4xB,EAAGlvB,QAAQ0D,UAAQ2J,EAAA3P,EAAAF,QAAA6P,EAAA5P,KAAA4P,EAAA3P,EAAAF,OAAA,CAAlC,IAAIxC,EAAOqS,EAAA72B,MACd,OAAQwkB,EAAQO,MAEd,KAAK4gB,EAAA3d,YAAYC,iBAGX6rB,IACiBtvB,EAASmE,GAAGgd,EAAAnd,aAAaI,WACrBpE,EAASmE,GAAGgd,EAAAnd,aAAaiM,UAEhD91B,KAAKg6C,+BAA+Cn0B,MAEtD,MAEF,KAAKmhB,EAAA3d,YAAY0K,KACf/zB,KAAK24C,YAAkB9yB,GACvB,MAEF,KAAKmhB,EAAA3d,YAAYiJ,oBAGX6iB,IAAqCtvB,EAASmE,GAAGgd,EAAAnd,aAAaI,WACtCpE,EAASmE,GAAGgd,EAAAnd,aAAaiM,UAEnD91B,KAAKi5C,kCACgBpzB,KAEnB,KACoBA,EAASkC,YAAYnnB,MAG7C,MAEF,KAAKomC,EAAA3d,YAAYc,OACfnqB,KAAK83C,cAAsBjyB,GAC3B,MAEF,KAAKmhB,EAAA3d,YAAYqK,UACf1zB,KAAK85C,iBAA4Bj0B,yGAQzC8vB,EAAAj0C,UAAAg2C,uBAAA,SAAuBvxB,GAErB,IADA,IAAI0E,EAAU1E,EAAU0E,QACfxqB,EAAI,EAAG+W,EAAIyT,EAAQzmB,OAAQ/D,EAAI+W,IAAK/W,EAAG,CAC9C,IAAIuoB,EAASiC,EAAQxqB,GACjB45C,EACF9zB,EAAUljB,MAAMW,OAAO+qB,aACvBqY,EAAAxjB,eACAoF,EAAOnQ,aAAavU,KAElB2hB,EAAU7lB,KAAKszB,QAAQ5zB,QAAQyB,IAAI84C,GACvC,GAAKp0B,EAEL,OAAQA,EAAQO,MAEd,KAAK4gB,EAAA3d,YAAYC,gBACOzD,EAASmE,GAAGgd,EAAAnd,aAAaiM,UAC7C91B,KAAKg6C,+BAA+Cn0B,MAEtD,MAEF,KAAKmhB,EAAA3d,YAAY0K,KACf/zB,KAAK24C,YAAkB9yB,GACvB,MAEF,KAAKmhB,EAAA3d,YAAYiJ,mBACf,IACuBzM,EAASmE,GAAGgd,EAAAnd,aAAaiM,UAC9C3P,EAAUljB,MAAMW,OAAO6yC,QACvB,CACA,IAAIyD,EAAmBl6C,KAAKi5C,kCACPpzB,KAEnB,KACoBA,EAASkC,YAAYnnB,MAE3C,GAAIs5C,EAAkB,CACpB,IAAIC,EAAsBD,EAAiBx4C,UAAUqmB,YACjDoyB,GAAuBA,EAAoBrI,oBAAoBlpB,IACjE5oB,KAAKL,OAAO4Y,kBAAkB2hC,EAAiB1hC,aAAcoQ,EAAOnQ,aAAavU,OAIvF,MAEF,KAAK8iC,EAAA3d,YAAYc,OACf,GAAInqB,KAAK83C,cAAsBjyB,IAAYM,EAAUljB,MAAMW,OAAO6yC,QAAS,CACzE,IAAI2D,EAA6Bv0B,EAASkC,YACtCqyB,GAAqBA,EAAkBtI,oBAAoBlpB,KAChD/C,EAASmE,GAAGgd,EAAAnd,aAAagL,SACpC70B,KAAKL,OAAOsZ,gBAAgB4M,EAAQrN,aAAcoQ,EAAOnQ,aAAavU,MAEtElE,KAAKsF,QACH8d,EAAA7gB,eAAey2C,+BACfpwB,EAAO3lB,QAKf,MAEF,KAAK+jC,EAAA3d,YAAYqK,UACf1zB,KAAK85C,iBAA4Bj0B,MAQzC8vB,EAAAj0C,UAAA01C,wBAAA,SACErvB,EACAmI,EACAJ,EACAY,QADA,IAAAZ,MAAA,WACA,IAAAY,MAAA,MAEA,IAAI7K,EAAU7lB,KAAKszB,QAAQ9O,SAASrjB,IAAI4mB,EAAYwC,uBACpD,IAAK1E,GAAWA,EAAQO,MAAQ4gB,EAAA3d,YAAYC,gBAC1C,MAAM,IAAI3L,MAAM,kBAElB3d,KAAKg6C,+BACan0B,EAChBqK,EACAJ,EACAY,IAIJilB,EAAAj0C,UAAAs4C,+BAAA,SACEt4C,EACAwuB,EACAJ,EACAY,QADA,IAAAZ,MAAA,WACA,IAAAY,MAAA,MAEA,IAAI7E,EAAWnqB,EAAUuuB,0BACvBC,EACAJ,EACAY,GAEG7E,GACL7rB,KAAKq6C,aAAaxuB,IAGpB8pB,EAAAj0C,UAAA24C,aAAA,SAAaxuB,GACX,QAAIA,EAAS7B,GAAGgd,EAAAnd,aAAakuB,YAC7BlsB,EAASlE,IAAIqf,EAAAnd,aAAakuB,WACnB,IAGTpC,EAAAj0C,UAAAm4C,4BAAA,SACE9xB,EACAmI,EACAJ,EACAY,GAEA,WAHA,IAAAZ,MAAA,WACA,IAAAY,MAAA,MAEM,IAAI/S,MAAM,oBAMlBg4B,EAAAj0C,UAAA44C,iBAAA,SAAiB/pC,EAAoBgqC,QAAA,IAAAA,MAAA,GACnC,IAAI7gB,EAAekd,UAAU52C,KAAK05B,aAAc6gB,GAC5C9pC,EAAU8S,EAAAjT,cAAcpN,OAAOqN,EAAQmpB,GAG3C,OAFA15B,KAAK+1C,eAAetxC,KAAKgM,GACzBzQ,KAAK05B,aAAeoM,QAAQpM,EAAc9E,QAAQrkB,EAAOnM,OAAQ,IAC1DqM,GAMTklC,EAAAj0C,UAAA84C,sBAAA,SAAsBh/B,GAEpB,GADAyN,OAAOzN,EAAKwO,GAAGgd,EAAAnd,aAAakuB,WACxBv8B,EAAKkc,oBAAsB,EAC7B,OAAOlc,EAAKkc,mBAEd,IAAIrkB,EAAQrT,KAAKi2C,cAAc7xC,OAG/B,OAFApE,KAAKi2C,cAAcxxC,KAAK+W,GACxBA,EAAKkc,mBAAqBrkB,EACnBA,GAKTsiC,EAAAj0C,UAAAk2C,iBAAA,SAAiBzxB,GACf,IAAIxT,EACJ,OAAQwT,EAAUC,MAEhB,KAAK9C,EAAA+C,SAAS2rB,MACZr/B,EAAO3S,KAAKy6C,sBAAsCt0B,GAClD,MAEF,KAAK7C,EAAA+C,SAASiW,MACZ3pB,EAAO3S,KAAK06C,sBAAsCv0B,GAClD,MAEF,KAAK7C,EAAA+C,SAASoW,SACZ9pB,EAAO3S,KAAK26C,yBAA4Cx0B,GACxD,MAEF,KAAK7C,EAAA+C,SAASwW,GACZlqB,EAAO3S,KAAK46C,mBAAgCz0B,GAC5C,MAEF,KAAK7C,EAAA+C,SAAS8rB,MACZx/B,EAAO3S,KAAK66C,sBAAsC10B,GAClD,MAEF,KAAK7C,EAAA+C,SAASksB,WACZ5/B,EAAO3S,KAAK86C,2BAAgD30B,GAC5D,MAEF,KAAK7C,EAAA+C,SAAS6W,IACZvqB,EAAO3S,KAAK+6C,oBAAkC50B,GAC9C,MAEF,KAAK7C,EAAA+C,SAAS+W,GACZzqB,EAAO3S,KAAKg7C,mBAAgC70B,GAC5C,MAEF,KAAK7C,EAAA+C,SAAS0X,OACZprB,EAAO3S,KAAKi7C,uBAAwC90B,GACpD,MAEF,KAAK7C,EAAA+C,SAAS2X,OACZrrB,EAAO3S,KAAKk7C,uBAAwC/0B,GACpD,MAEF,KAAK7C,EAAA+C,SAAS4X,MACZtrB,EAAO3S,KAAKm7C,sBAAsCh1B,GAClD,MAEF,KAAK7C,EAAA+C,SAAS8X,IACZxrB,EAAO3S,KAAKo7C,oBAAkCj1B,GAC9C,MAEF,KAAK7C,EAAA+C,SAASiB,SACZ,IAAIkwB,EAAex3C,KAAKy3C,yBAA4CtxB,GACpExT,EAAO6kC,GAA8Bx3C,KAAKL,OAAO+W,YACjD,MAEF,KAAK4M,EAAA+C,SAASmY,MACZ7rB,EAAO3S,KAAKq7C,sBAAsCl1B,GAClD,MAEF,KAAK7C,EAAA+C,SAASe,gBACZ,GAAIpnB,KAAKw7B,iBAAmBx7B,KAAKw2C,cAC/B,OAAOx2C,KAAKL,OAAO+W,YAIvB,QACE,MAAM,IAAIiH,MAAM,sBAIpB,OADA3d,KAAKs7C,iBAAiB3oC,EAAMwT,EAAUljB,OAC/B0P,GAGTgjC,EAAAj0C,UAAA65C,kBAAA,SAAkBt1B,GAGhB,IAFA,IAAI7O,EAAI6O,EAAW7hB,OACfo3C,EAAQ,IAAIt2C,MAAqBkS,GAC5B/W,EAAI,EAAGA,EAAI+W,IAAK/W,EACvBm7C,EAAMn7C,GAAKL,KAAK43C,iBAAiB3xB,EAAW5lB,IAE9C,OAAOm7C,GAGT7F,EAAAj0C,UAAA+4C,sBAAA,SAAsBt0B,GACpB,IAAIF,EAAaE,EAAUF,WAO3BjmB,KAAKw7B,gBAAgBpK,KAAOpxB,KAAKw7B,gBAAgBpK,KAAKwK,qBAEtD,IAAI6P,EAAOzrC,KAAKL,OAAO6V,YAAY,KAAMxV,KAAKu7C,kBAAkBt1B,GAAa1C,EAAAhe,WAAWoQ,MACpF8lC,EAAcz7C,KAAKw7B,gBAAgBpK,KAAKpH,GAAE,GAO9C,OAJAhqB,KAAKw7B,gBAAgBpK,KAAOpxB,KAAKw7B,gBAAgBpK,KAAK0K,qBAClD2f,GACFz7C,KAAKw7B,gBAAgBpK,KAAKzJ,IAAG,GAExB8jB,GAGTkK,EAAAj0C,UAAAg5C,sBAAA,SAAsBv0B,GACpB,GAAIA,EAAU1Q,MAKZ,OAJAzV,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf1G,EAAU1Q,MAAMxS,OAEXjD,KAAKL,OAAOiY,oBAErB,IAAI+jB,EAAa37B,KAAKw7B,gBAAgBpK,KAAKuK,WAC3C,OAAkB,MAAdA,GACF37B,KAAKoF,MACHge,EAAA7gB,eAAem5C,qFACfv1B,EAAUljB,OAELjD,KAAKL,OAAOiY,sBAErB5X,KAAKw7B,gBAAgBpK,KAAKzJ,IAAG,GACtB3nB,KAAKL,OAAOkW,YAAY8lB,KAGjCga,EAAAj0C,UAAAi5C,yBAAA,SAAyBx0B,GACvB,GAAIA,EAAU1Q,MAKZ,OAJAzV,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf1G,EAAU1Q,MAAMxS,OAEXjD,KAAKL,OAAOiY,oBAGrB,IAAI8jB,EAAgB17B,KAAKw7B,gBAAgBpK,KAAKsK,cAC9C,OAAqB,MAAjBA,GACF17B,KAAKoF,MACHge,EAAA7gB,eAAeo5C,8EACfx1B,EAAUljB,OAELjD,KAAKL,OAAOiY,sBAErB5X,KAAKw7B,gBAAgBpK,KAAKzJ,IAAG,GACtB3nB,KAAKL,OAAOkW,YAAY6lB,KAGjCia,EAAAj0C,UAAAk5C,mBAAA,SAAmBz0B,GAIjB,IAAI1Q,EAAQzV,KAAKw7B,gBAAgBzC,oBAC7B6iB,EAAqB57C,KAAKw7B,gBAAgBpK,KAAKuK,WAC/CkgB,EAAwB77C,KAAKw7B,gBAAgBpK,KAAKsK,cAClDC,EAAa37B,KAAKw7B,gBAAgBpK,KAAKuK,WAAa,SAAWlmB,EAC/DimB,EAAgB17B,KAAKw7B,gBAAgBpK,KAAKsK,cAAgB,YAAcjmB,EAExEW,EAAOpW,KAAK43C,iBAAiBzxB,EAAUA,WAG3CnmB,KAAKw7B,gBAAgBpK,KAAKuK,WAAaigB,EACvC57C,KAAKw7B,gBAAgBpK,KAAKsK,cAAgBmgB,EAE1C,IAAI/lC,EAAYgmC,EACd97C,KAAKk4C,kBAAkB/xB,EAAUrQ,UAAWuN,EAAA0B,KAAK3G,IAAG,GACpDpe,KAAK81C,YACL91C,KAAKL,QAKP,OAFAK,KAAKw7B,gBAAgBvC,oBAEdj5B,KAAKL,OAAO6V,YAAYmmB,GAC7B37B,KAAKL,OAAOwW,WAAWulB,EACrB17B,KAAKL,OAAO6V,YAAY,MACtBY,EACApW,KAAKL,OAAOkW,YAAY6lB,EAAe5lB,IACtCyN,EAAAhe,WAAWoQ,QACf4N,EAAAhe,WAAWoQ,OAGhBggC,EAAAj0C,UAAAm5C,sBAAA,SAAsB10B,GACpB,OAAOnmB,KAAKL,OAAO+W,aAGrBi/B,EAAAj0C,UAAAo5C,2BAAA,SAA2B30B,GACzB,IAAIxT,EAAO3S,KAAKk4C,kBAAkB/xB,EAAUlQ,WAAYoN,EAAA0B,KAAKa,KAAI,GAKjE,OAJI5lB,KAAK81C,aAAezyB,EAAA0B,KAAKa,OAC3BjT,EAAO3S,KAAKL,OAAOqW,WAAWrD,GAC9B3S,KAAK81C,YAAczyB,EAAA0B,KAAKa,MAEnBjT,GAGTgjC,EAAAj0C,UAAAq5C,oBAAA,SAAoB50B,GAIlB,IAAIthB,EAAU7E,KAAKw7B,gBAAgBzC,oBACnC/4B,KAAKw7B,gBAAgBpK,KAAOpxB,KAAKw7B,gBAAgBpK,KAAKwK,qBACtD,IAAID,EAAa37B,KAAKw7B,gBAAgBpK,KAAKuK,WAAa,SAAW92B,EAC/D62B,EAAgB17B,KAAKw7B,gBAAgBpK,KAAKsK,cAAgB,YAAc72B,EAGxEmT,EAAcmO,EAAUnO,YACxBhY,KAAK43C,iBAA4BzxB,EAAUnO,aAC3ChY,KAAKL,OAAO+W,YACZZ,EAAYqQ,EAAUrQ,UACtB9V,KAAKk4C,kBAA8B/xB,EAAUrQ,UAAWuN,EAAA0B,KAAK3G,KAC7Dpe,KAAKL,OAAOmS,UAAU,GACtBs8B,EAAcjoB,EAAUioB,YACxBpuC,KAAKk4C,kBAA8B/xB,EAAUioB,YAAa/qB,EAAA0B,KAAKa,MAC/D5lB,KAAKL,OAAO+W,YACZN,EAAOpW,KAAK43C,iBAAiBzxB,EAAUA,WACvC41B,GAAiB51B,EAAUrQ,WAAa9V,KAAKw7B,gBAAgBpK,KAAKpH,GAAE,GAIxEhqB,KAAKw7B,gBAAgBpK,KAAOpxB,KAAKw7B,gBAAgBpK,KAAK0K,qBACtD97B,KAAKw7B,gBAAgBvC,oBAErB,IAAItmB,EAAO3S,KAAKL,OAAO6V,YAAYmmB,GACjC3jB,EACAhY,KAAKL,OAAOwW,WAAWulB,EAAe17B,KAAKL,OAAO6V,YAAY,MAC5DxV,KAAKL,OAAO2W,SAASR,EAAW9V,KAAKL,OAAO6V,YAAY,MACtDY,EACAg4B,EACApuC,KAAKL,OAAOkW,YAAY6lB,IACvBnY,EAAAhe,WAAWoQ,QACb4N,EAAAhe,WAAWoQ,QACb4N,EAAAhe,WAAWoQ,MAUd,OAPIomC,IACF/7C,KAAKw7B,gBAAgBpK,KAAKzJ,IAAG,GAC7BhV,EAAO3S,KAAKL,OAAO6V,YAAY,MAC7B7C,EACA3S,KAAKL,OAAOiY,uBAGTjF,GAGTgjC,EAAAj0C,UAAAs5C,mBAAA,SAAmB70B,GAGjB,IAAIrQ,EAAYgmC,EACd97C,KAAKk4C,kBAAkB/xB,EAAUrQ,UAAWuN,EAAA0B,KAAK3G,IAAG,GACpDpe,KAAK81C,YACL91C,KAAKL,QAIPK,KAAKw7B,gBAAgBpK,KAAOpxB,KAAKw7B,gBAAgBpK,KAAKwK,qBACtD,IAAIrlB,EAASvW,KAAK43C,iBAAiBzxB,EAAU5P,QACzCylC,EAAgBh8C,KAAKw7B,gBAAgBpK,KAAKpH,GAAE,GAChDhqB,KAAKw7B,gBAAgBpK,KAAOpxB,KAAKw7B,gBAAgBpK,KAAK0K,qBAEtD,IAAItlB,EAAyB,EACzBylC,GAAiB,EAUrB,OATI91B,EAAU3P,UACZxW,KAAKw7B,gBAAgBpK,KAAOpxB,KAAKw7B,gBAAgBpK,KAAKwK,qBACtDplB,EAAUxW,KAAK43C,iBAAiBzxB,EAAU3P,SAC1CylC,EAAiBj8C,KAAKw7B,gBAAgBpK,KAAKpH,GAAE,GAC7ChqB,KAAKw7B,gBAAgBpK,KAAOpxB,KAAKw7B,gBAAgBpK,KAAK0K,sBAEpDkgB,GAAiBC,GACnBj8C,KAAKw7B,gBAAgBpK,KAAKzJ,IAAG,GAExB3nB,KAAKL,OAAO2W,SAASR,EAAWS,EAAQC,IAGjDm/B,EAAAj0C,UAAAu5C,uBAAA,SAAuB90B,GACrB,IAAIlQ,EAA4B,EAQhC,OAPIkQ,EAAU9kB,QACZ4U,EAAajW,KAAKk4C,kBAA8B/xB,EAAU9kB,MAAOrB,KAAKw7B,gBAAgBhkB,aAIxFxX,KAAKw7B,gBAAgBpK,KAAKzJ,IAAG,GAEtB3nB,KAAKL,OAAOiX,aAAaX,IAGlC0/B,EAAAj0C,UAAAw5C,uBAAA,SAAuB/0B,GAGrB,IAAIthB,EAAU7E,KAAKw7B,gBAAgBzC,oBAG/BmjB,EAAYl8C,KAAKw7B,gBAAgB/C,aAAapV,EAAA0B,KAAKO,KACnDlO,EAAI+O,EAAUkpB,MAAMjrC,OAGpB+3C,EAAS,IAAIj3C,MAAqB,EAAIkS,GAC1C+kC,EAAO,GAAKn8C,KAAKL,OAAOyV,eACtB8mC,EAAU7oC,MACVrT,KAAKk4C,kBAAkB/xB,EAAUrQ,UAAWuN,EAAA0B,KAAKO,MAMnD,IAFA,IAAI82B,EAAa,EACbC,GAAgB,EACXh8C,EAAI,EAAGA,EAAI+W,IAAK/W,EAAG,CAC1B,IAAIi8C,EAAQn2B,EAAUkpB,MAAMhvC,GACxBi8C,EAAM7mC,MACR0mC,EAAOC,KAAgBp8C,KAAKL,OAAOkW,YAAY,OAASxV,EAAEsD,SAAS,IAAM,IAAMkB,EAC7E7E,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS0xC,MAChCv8C,KAAKL,OAAOyT,eAAe8oC,EAAU7oC,MAAOkQ,EAAAhe,WAAWoZ,KACvD3e,KAAKk4C,kBAAkBoE,EAAM7mC,MAAO4N,EAAA0B,KAAK3G,OAI7Ci+B,EAAeh8C,EAInBL,KAAKw7B,gBAAgB3C,cAAcqjB,GAGnCC,EAAOC,GAAcp8C,KAAKL,OAAOkW,aAAawmC,GAAgB,EACxD,OAASA,EAAa14C,SAAS,IAC/B,SACA,IAAMkB,GAGZ,IAAI23C,EAAex8C,KAAKL,OAAO6V,YAAY,SAAW3Q,EAASs3C,EAAQ54B,EAAAhe,WAAWoQ,MAC9EomC,GAAgB,EACpB,IAAK17C,EAAI,EAAGA,EAAI+W,IAAK/W,EAAG,CAEtB,IAAIC,GADJg8C,EAAQn2B,EAAUkpB,MAAMhvC,IACV4lB,WAAW7hB,OACrBgS,EAAO,IAAIlR,MAAqB,EAAI5E,GACxC8V,EAAK,GAAKomC,EAGVx8C,KAAKw7B,gBAAgBpK,KAAOpxB,KAAKw7B,gBAAgBpK,KAAKwK,qBAKtD,IAJA,IAAID,EAAa37B,KAAKw7B,gBAAgBpK,KAAKuK,WAAa,SAAW92B,EAE/D43C,EAAep8C,GAAK+W,EAAI,EACxBslC,EAAaD,EAA4B,QAAUp8C,EAAI,GAAGsD,SAAS,IAAM,IAAMkB,EAAnD82B,EACvBzV,EAAI,EAAGA,EAAI5lB,IAAK4lB,EACvB9P,EAAK8P,EAAI,GAAKlmB,KAAK43C,iBAAiB0E,EAAMr2B,WAAWC,IAEjDu2B,GAAgBz8C,KAAKw7B,gBAAgBpK,KAAKpH,GAAE,KAChD+xB,GAAgB,GAIlB/7C,KAAKw7B,gBAAgBpK,KAAOpxB,KAAKw7B,gBAAgBpK,KAAK0K,qBAEtD0gB,EAAex8C,KAAKL,OAAO6V,YAAYknC,EAAWtmC,EAAMmN,EAAAhe,WAAWoQ,MASrE,OAPA3V,KAAKw7B,gBAAgBvC,oBAGjBojB,GAAgB,GAAKN,GACvB/7C,KAAKw7B,gBAAgBpK,KAAKzJ,IAAG,GAGxB60B,GAGT7G,EAAAj0C,UAAAy5C,sBAAA,SAAsBh1B,GASpB,OANAnmB,KAAKw7B,gBAAgBpK,KAAKzJ,IAAG,GAG7B3nB,KAAKw7B,gBAAgBpK,KAAKzJ,IAAG,GAGtB3nB,KAAKL,OAAOiY,qBAGrB+9B,EAAAj0C,UAAA05C,oBAAA,SAAoBj1B,GAClB,MAAM,IAAIxI,MAAM,oBASlBg4B,EAAAj0C,UAAA+1C,yBAAA,SAAyBtxB,EAA8Bw2B,QAAA,IAAAA,OAAA,GACrD,IAAI1tB,EAAe9I,EAAU8I,aAG7B,GAAI0tB,GACF38C,KAAKw7B,iBAAmBx7B,KAAKw2C,eAC7BrwB,EAAU6B,QAAU7B,EAAU6B,OAAO5B,MAAQ9C,EAAA+C,SAAS6D,OACrD,CAMD,IAAK,IAAI7pB,EAAI,EAAG+W,EAAI6X,EAAa7qB,OAAQ/D,EAAI+W,IAAK/W,EAChDL,KAAK63C,yBAAyB5oB,EAAa5uB,IAE7C,OAAO,EAIT,IAAIu8C,EAAe,IAAI13C,MACvB,IAAK7E,EAAI,EAAG+W,EAAI6X,EAAa7qB,OAAQ/D,EAAI+W,IAAK/W,EAAG,CAC/C,IAAI0nB,EAAckH,EAAa5uB,GAC3BO,EAAOmnB,EAAYnnB,KAAKsD,KACxBoP,EAAoB,KACpBupC,EAAsB,EAC1B,GAAI90B,EAAYzU,KAAM,CAKpB,KAJAA,EAAOtT,KAAKszB,QAAQ1D,YAClB7H,EAAYzU,KACZtT,KAAKw7B,gBAAgB1L,0BAEZ,SACP/H,EAAY/P,cACd6kC,EAAO78C,KAAKk4C,kBAAkBnwB,EAAY/P,YAAa1E,QAEpD,KAAIyU,EAAY/P,YAchB,CACLhY,KAAKoF,MACHge,EAAA7gB,eAAe01C,cACflwB,EAAYnnB,KAAKqC,MAAM6tB,OAEzB,SAbA,GALA+rB,EAAO78C,KAAKk4C,kBACVnwB,EAAY/P,YACZqL,EAAA0B,KAAKa,KAAI,GAGP5lB,KAAK81C,aAAezyB,EAAA0B,KAAKa,KAAM,CACjC5lB,KAAKoF,MACHge,EAAA7gB,eAAe41C,mCACfpwB,EAAY9kB,MAAOjD,KAAK81C,YAAYnyC,WAAY,UAElD,SAEF2P,EAAOtT,KAAK81C,YAQd,GAAIxyB,EAAA+H,YAAY/H,EAAAgI,aAAa0I,MAAOjM,EAAYyD,WAC9C,GAAIqxB,EAAM,CAER,GADAA,EAAO78C,KAAKu4C,wBAAwBsE,GAChCr+B,yBAAyBq+B,IAASt5B,EAAA/d,aAAaiZ,MAAO,CACxD,IAAI+Z,EAAQ,IAAIwO,EAAAzR,MAAMv1B,KAAKszB,QAAS1yB,GAAO,EAAG0S,GAC9C,OAAQoL,2BAA2Bm+B,IACjC,KAAKt5B,EAAAhe,WAAWoZ,IACd6Z,EAAQA,EAAMhE,yBAAyB5V,0BAA0Bi+B,GAAO,GACxE,MACF,KAAKt5B,EAAAhe,WAAWsZ,IACd2Z,EAAQA,EAAMhE,yBACZ1V,6BAA6B+9B,GAC7B99B,8BAA8B89B,IAEhC,MACF,KAAKt5B,EAAAhe,WAAWyZ,IACdwZ,EAAQA,EAAM1D,uBAA4B7V,0BAA0B49B,IACpE,MACF,KAAKt5B,EAAAhe,WAAW2Z,IACdsZ,EAAQA,EAAM1D,uBAAuB3V,0BAA0B09B,IAC/D,MACF,QACE,MAAM,IAAIl/B,MAAM,0BAGpB,IAAI4d,EAAev7B,KAAKw7B,gBAAgBpK,KAAKmK,aAC7C,GAAKA,GACA,GAAIA,EAAanR,IAAIxpB,GAKxB,OAJAZ,KAAKoF,MACHge,EAAA7gB,eAAe8nB,uBACftC,EAAYnnB,KAAKqC,MAAOrC,GAEnB,OANU26B,EAAev7B,KAAKw7B,gBAAgBpK,KAAKmK,aAAe,IAAIpX,IAS/E,OADAoX,EAAa5T,IAAI/mB,EAAM43B,GAChB,EAEPx4B,KAAKsF,QACH8d,EAAA7gB,eAAei2C,4DACfzwB,EAAY9kB,YAIhBjD,KAAKoF,MACHge,EAAA7gB,eAAeu6C,wCACf/0B,EAAY9kB,OAIdqgB,EAAA+H,YAAY/H,EAAAgI,aAAa0J,IAAKjN,EAAYyD,WAC5CxrB,KAAKw7B,gBAAgBpK,KAAK4K,eAAep7B,EAAM0S,EAAMyU,EAAYnnB,MAEjEZ,KAAKw7B,gBAAgBjD,SAASjlB,EAAM1S,GAElCi8C,GACFD,EAAan4C,KAAKzE,KAAK+8C,2BAA2Bh1B,EAAYnnB,KAAMi8C,IAGxE,OAAOD,EAAax4C,OACO,GAAvBw4C,EAAax4C,OACXw4C,EAAa,GACb58C,KAAKL,OAAO6V,YAAY,KAAMonC,EAAcr5B,EAAAhe,WAAWoQ,MACzD,GAGNggC,EAAAj0C,UAAA25C,sBAAA,SAAsBl1B,GAGpB,IAAIrQ,EAAYgmC,EACd97C,KAAKk4C,kBAAkB/xB,EAAUrQ,UAAWuN,EAAA0B,KAAK3G,IAAG,GACpDpe,KAAK81C,YACL91C,KAAKL,QAIH8V,EAAQzV,KAAKw7B,gBAAgBzC,oBACjC/4B,KAAKw7B,gBAAgBpK,KAAOpxB,KAAKw7B,gBAAgBpK,KAAKwK,qBACtD,IAAID,EAAa37B,KAAKw7B,gBAAgBpK,KAAKuK,WAAa,SAAWlmB,EAC/DimB,EAAgB17B,KAAKw7B,gBAAgBpK,KAAKsK,cAAgB,YAAcjmB,EAExEW,EAAOpW,KAAK43C,iBAAiBzxB,EAAUA,WAK3CnmB,KAAKw7B,gBAAgBpK,KAAOpxB,KAAKw7B,gBAAgBpK,KAAK0K,qBACtD97B,KAAKw7B,gBAAgBvC,oBAErB,IAAItmB,EAAO3S,KAAKL,OAAO6V,YAAYmmB,GACjC37B,KAAKL,OAAOwW,WAAWulB,EACrB17B,KAAKL,OAAO2W,SAASR,EAAW9V,KAAKL,OAAO6V,YAAY,MACtDY,EACApW,KAAKL,OAAOkW,YAAY6lB,IACvBnY,EAAAhe,WAAWoQ,SAEf4N,EAAAhe,WAAWoQ,MASd,OAAOhD,GAUTgjC,EAAAj0C,UAAA42C,sBAAA,SACEzyB,EACAm3B,EACAC,GAIA,OAFAh0B,OAAOpD,EAAQmE,GAAGgd,EAAAnd,aAAagL,WAG5BooB,GACDp3B,EAAQvS,KAAK0W,GAAE,IACfgzB,EAAehzB,GAAE,IACjBnE,EAAQvS,KAAKkgC,KAAOwJ,EAAexJ,MAC9BxzC,KAAK81C,YAAckH,GAAgB52B,MACnCpmB,KAAK81C,YAAcjwB,EAAQvS,MAAM8S,MAGtC,OACA,OACE,IAAI82B,EAAQr3B,EAAQvS,KAAKsgC,yBAAyBvwB,EAAA0B,KAAK3G,KACvD,OAAOpe,KAAKL,OAAOmS,UACQ,GAAzB+T,EAAQ0O,kBACJzZ,QAAQ+K,EAAQ8O,uBAAyBuoB,GAASA,EAClD,GAGR,OACA,OACA,QACE,IAAIC,EAAOt3B,EAAQvS,KAAKugC,wBAAwBxwB,EAAA0B,KAAK3G,KACrD,OAAOpe,KAAKL,OAAOmS,UACQ,GAAzB+T,EAAQ0O,kBACJzZ,QAAQ+K,EAAQ8O,sBAAwBwoB,EACxC,GAGR,OACA,OACE,OAAOn9C,KAAKL,OAAOmS,UACQ,GAAzB+T,EAAQ0O,kBACJzZ,QAAQ+K,EAAQ8O,sBAChB,GAGR,OACA,OACE,IAAK9O,EAAQyN,QAAQxO,QAAQ+xB,SAC3B,OAAO72C,KAAKL,OAAOmS,UACQ,GAAzB+T,EAAQ0O,kBACJzZ,QAAQ+K,EAAQ8O,sBAChB,GAKV,OACA,OACE,OAAgC,GAAzB9O,EAAQ0O,kBACXv0B,KAAKL,OAAOsS,UACV6I,QAAQ+K,EAAQ8O,sBAChB5Z,SAAS8K,EAAQ8O,uBAEnB30B,KAAKL,OAAOsS,UAAU,GAE5B,QACE,OAAOjS,KAAKL,OAAO0S,UAAgCwT,EAASkP,oBAE9D,QACE,OAAO/0B,KAAKL,OAAO4S,UAAgCsT,EAASkP,oBAE9D,QACE,MAAM,IAAIpX,MAAM,4BAItBg4B,EAAAj0C,UAAAw2C,kBAAA,SACEjiC,EACA+mC,EACAI,EACAC,GAIA,IAAI1qC,EACJ,YANA,IAAAyqC,MAAA,QACA,IAAAC,OAAA,GAEAr9C,KAAK81C,YAAckH,EAGX/mC,EAAWmQ,MAEjB,KAAK9C,EAAA+C,SAASoM,UACZ9f,EAAO3S,KAAKs9C,2BAAgDrnC,EAAY+mC,GACxE,MAEF,KAAK15B,EAAA+C,SAASsM,OACZhgB,EAAO3S,KAAKu9C,wBAA0CtnC,EAAY+mC,EAAgBK,GAClF,MAEF,KAAK/5B,EAAA+C,SAAS+M,KACZzgB,EAAO3S,KAAKw9C,sBAAsCvnC,EAAY+mC,GAC9D,MAEF,KAAK15B,EAAA+C,SAAS2Y,MACZrsB,EAAO3S,KAAKy9C,uBAAwCxnC,EAAY+mC,GAChE,MAEF,KAAK15B,EAAA+C,SAAS8M,cACZxgB,EAAO3S,KAAK09C,+BAAwDznC,EAAY+mC,GAChF,MAEF,KAAK15B,EAAA+C,SAASgR,SACd,KAAK/T,EAAA+C,SAASwqB,cACZl+B,EAAO3S,KAAK29C,0BAA8C1nC,EAAY+mC,GACtE,MAEF,KAAK15B,EAAA+C,SAAS4M,WACd,KAAK3P,EAAA+C,SAAS2W,MACd,KAAK1Z,EAAA+C,SAASuX,KACd,KAAKta,EAAA+C,SAASuM,KACd,KAAKtP,EAAA+C,SAAS6X,KACZvrB,EAAO3S,KAAK49C,4BACY3nC,EACtB+mC,EACc,GAAdI,GAEF,MAEF,KAAK95B,EAAA+C,SAAS4G,QACZta,EAAO3S,KAAK69C,yBAA4C5nC,EAAY+mC,GACpE,MAEF,KAAK15B,EAAA+C,SAASsX,IACZhrB,EAAO3S,KAAK89C,qBAAoC7nC,EAAY+mC,GAC5D,MAEF,KAAK15B,EAAA+C,SAASmM,cACZ7f,EAAO3S,KAAK+9C,+BAAwD9nC,EAAY+mC,GAChF,MAEF,KAAK15B,EAAA+C,SAAS6M,eACZvgB,EAAO3S,KAAKg+C,gCACgB/nC,EAC1B+mC,EACc,GAAdI,GAEF,MAEF,KAAK95B,EAAA+C,SAASyqB,QACZn+B,EAAO3S,KAAKi+C,yBAA4ChoC,EAAY+mC,GACpE,MAEF,KAAK15B,EAAA+C,SAAS2qB,aACZr+B,EAAO3S,KAAKk+C,8BAAsDjoC,EAAY+mC,GAC9E,MAEF,KAAK15B,EAAA+C,SAAS4qB,YACZt+B,EAAO3S,KAAKm+C,6BAAoDloC,EAAY+mC,EAAgBK,GAC5F,MAEF,QACE,MAAM,IAAI1/B,MAAM,uBASpB,OANkB,GAAdy/B,GAAyCp9C,KAAK81C,aAAekH,IAC/DrqC,EAAO3S,KAAKo+C,kBAAkBzrC,EAAM3S,KAAK81C,YAAakH,EAAgBI,EAAgBnnC,GACtFjW,KAAK81C,YAAckH,GAGrBh9C,KAAKs7C,iBAAiB3oC,EAAMsD,EAAWhT,OAChC0P,GAGTgjC,EAAAj0C,UAAA28C,4BAAA,SAA4BpoC,EAAwB+mC,EAAsBK,GACxE,YADwE,IAAAA,OAAA,GACjEr9C,KAAKk4C,kBACVjiC,EACA+mC,GAAkB35B,EAAA0B,KAAKa,KACnBvC,EAAA0B,KAAK3G,IACL4+B,EAAc,EAElBK,IAIJ1H,EAAAj0C,UAAA48C,qBAAA,SACEroC,EACA+mC,EACAI,GAEA,YAFA,IAAAA,MAAA,GAEOp9C,KAAKu4C,wBAAwBv4C,KAAKk4C,kBAAkBjiC,EAAY+mC,EAAgBI,KAGzFzH,EAAAj0C,UAAA62C,wBAAA,SAAwB5lC,GACtB,IAAIylC,EAAap4C,KAAK81C,YAAYnd,eAC9Bge,EAAU32C,KAAKL,OAAOiS,2BAA2BwmC,MAEhDzB,IACHA,EAAU32C,KAAKL,OAAO0R,gBAAgBrR,KAAK81C,YAAYpB,oBAAqB0D,OAG9E,IAAImG,EAAUv+C,KAAKL,OAAOuY,YAAY,eAAgBy+B,KAAahkC,GACnE3S,KAAKL,OAAO0c,WAAY,cAAgBkiC,GACxC,IAAInhC,EAAMohC,yBAAyBD,GAMnC,OALAv+C,KAAKL,OAAO0Y,eAAe,gBAKpB+E,GAGTu4B,EAAAj0C,UAAA08C,kBAAA,SACEzrC,EACA8rC,EACA/rB,EACA0qB,EACAnmB,GAEA,OAAkB,GAAdmmB,GACFn0B,QAAO,EAAO,0BACPtW,GAIQ,IAAb8rC,EAASr4B,MACXpmB,KAAKoF,MACHge,EAAA7gB,eAAe41C,mCACflhB,EAAWh0B,MAAOw7C,EAAS96C,WAAY+uB,EAAO/uB,YAEzC3D,KAAKL,OAAOiY,qBAIN,IAAX8a,EAAOtM,KACFpmB,KAAKL,OAAOqW,WAAWrD,IAGd,GAAdyqC,GAA8CqB,EAASnlB,eAAe5G,IACxE1yB,KAAKoF,MACHge,EAAA7gB,eAAem8C,sDACfznB,EAAWh0B,MAAOw7C,EAAS96C,WAAY+uB,EAAO/uB,YAI9C86C,EAASz0B,GAAE,GAGT0I,EAAO1I,GAAE,GACM,IAAby0B,EAASr4B,KAGI,IAAXsM,EAAOtM,OACTzT,EAAO3S,KAAKL,OAAO8S,YAAY8Q,EAAA1b,QAAQ82C,WAAYhsC,IAMjC,IAAX+f,EAAOtM,OAChBzT,EAAO3S,KAAKL,OAAO8S,YAAY8Q,EAAA1b,QAAQ+2C,UAAWjsC,IAM3C+f,EAAO1I,GAAE,GAGD,IAAby0B,EAASr4B,KACPsM,EAAO1I,GAAE,GACP0I,EAAO1I,GAAE,IACXrX,EAAO3S,KAAKL,OAAO8S,YAAY8Q,EAAA1b,QAAQg3C,cAAelsC,IAEtDA,EAAO3S,KAAKL,OAAO8S,YAAY8Q,EAAA1b,QAAQi3C,cAAensC,GAClD+f,EAAO1I,GAAE,MACXrX,EAAOosC,EAAqBpsC,EAAM+f,EAAQ1yB,KAAKL,UAI/C+yB,EAAO1I,GAAE,IACXrX,EAAO3S,KAAKL,OAAO8S,YAAY8Q,EAAA1b,QAAQm3C,cAAersC,IAEtDA,EAAO3S,KAAKL,OAAO8S,YAAY8Q,EAAA1b,QAAQo3C,cAAetsC,GAClD+f,EAAO1I,GAAE,MACXrX,EAAOosC,EAAqBpsC,EAAM+f,EAAQ1yB,KAAKL,UAOjD+yB,EAAO1I,GAAE,GACP0I,EAAO1I,GAAE,IACXrX,EAAO3S,KAAKL,OAAO8S,YAAY8Q,EAAA1b,QAAQq3C,cAAevsC,IAEtDA,EAAO3S,KAAKL,OAAO8S,YAAY8Q,EAAA1b,QAAQs3C,cAAexsC,GAClD+f,EAAO1I,GAAE,MACXrX,EAAOosC,EAAqBpsC,EAAM+f,EAAQ1yB,KAAKL,UAI/C+yB,EAAO1I,GAAE,IACXrX,EAAO3S,KAAKL,OAAO8S,YAAY8Q,EAAA1b,QAAQu3C,cAAezsC,IAEtDA,EAAO3S,KAAKL,OAAO8S,YAAY8Q,EAAA1b,QAAQw3C,cAAe1sC,GAClD+f,EAAO1I,GAAE,MACXrX,EAAOosC,EAAqBpsC,EAAM+f,EAAQ1yB,KAAKL,WAQvDspB,OAAmB,GAAZyJ,EAAOa,MAAyB,sBACvC5gB,EAAO3S,KAAKL,OAAOqW,WAAWrD,IAIvB8rC,EAASz0B,GAAE,IAAuB0I,EAAO1I,GAAE,GAKhDrX,EAFW,IAAX+f,EAAOtM,KACLq4B,EAASz0B,GAAE,IACNhqB,KAAKL,OAAO8S,YACjBgsC,EAASz0B,GAAE,GACPzG,EAAA1b,QAAQy3C,gBACR/7B,EAAA1b,QAAQ03C,gBACZ5sC,GAGK3S,KAAKL,OAAO8S,YACjBgsC,EAASz0B,GAAE,GACPzG,EAAA1b,QAAQ23C,gBACRj8B,EAAA1b,QAAQ43C,gBACZ9sC,GAMA8rC,EAASz0B,GAAE,IACNhqB,KAAKL,OAAO8S,YACjBgsC,EAASz0B,GAAE,GACPzG,EAAA1b,QAAQ63C,gBACRn8B,EAAA1b,QAAQ83C,gBACZhtC,GAGK3S,KAAKL,OAAO8S,YACjBgsC,EAASz0B,GAAE,GACPzG,EAAA1b,QAAQ+3C,gBACRr8B,EAAA1b,QAAQg4C,gBACZltC,GAOF8rC,EAASz0B,GAAE,IAGR0I,EAAO1I,GAAE,MACZrX,EAAO3S,KAAKL,OAAO8S,YAAY8Q,EAAA1b,QAAQi4C,QAASntC,GAC5C+f,EAAO1I,GAAE,MACXrX,EAAOosC,EAAqBpsC,EAAM+f,EAAQ1yB,KAAKL,UAK1C+yB,EAAO1I,GAAE,IAClBrX,EAAO3S,KAAKL,OAAO8S,YAAYigB,EAAO1I,GAAE,GAAqBzG,EAAA1b,QAAQk4C,UAAYx8B,EAAA1b,QAAQm4C,UAAWrtC,GAIpG+f,EAAO1I,GAAE,MAEPy0B,EAASjL,KAAO9gB,EAAO8gB,MAErBiL,EAASjL,MAAQ9gB,EAAO8gB,MACxBiL,EAASz0B,GAAE,IAAsB0I,EAAO1I,GAAE,MAI9CrX,EAAOosC,EAAqBpsC,EAAM+f,EAAQ1yB,KAAKL,SAMnDK,KAAK81C,YAAcpjB,EACZ/f,IAGTgjC,EAAAj0C,UAAA47C,2BAAA,SAA2BrnC,EAAiC+mC,GAC1D,IAAItqB,EAAS1yB,KAAKszB,QAAQ1D,YACxB3Z,EAAWyc,OACX1yB,KAAKw7B,gBAAgB1L,yBAEvB,OAAK4C,EACE1yB,KAAKk4C,kBAAkBjiC,EAAWA,WAAYyc,EAAM,GADvC1yB,KAAKL,OAAOiY,qBAIlC+9B,EAAAj0C,UAAA67C,wBAAA,SACEtnC,EACA+mC,EACAK,GAGA,IAAIvqC,EACAmtC,EACAltC,EACAmtC,EACAC,EAEArqC,EACAnD,OAVJ,IAAA0qC,OAAA,GAWA,IAAI+C,GAAW,EACXC,GAAoB,EACpBnE,EAA0B,KAE9B,OAAQjmC,EAAWiyB,UAEjB,KAAKjB,EAAAhL,MAAMgD,SAKT,GAJAnsB,EAAO9S,KAAKq+C,4BAA4BpoC,EAAWnD,KAAMkqC,GACzDiD,EAAWjgD,KAAK81C,YAChB/iC,EAAQ/S,KAAKq+C,4BAA4BpoC,EAAWlD,MAAOktC,GAC3DC,EAAYlgD,KAAK81C,cACbqK,EAAa98B,EAAA0B,KAAKsvB,iBAAiB4L,EAAUC,GAAW,IAS1D,OALAlgD,KAAKoF,MACHge,EAAA7gB,eAAe+9C,8CACfrqC,EAAWhT,MAAO,IAAKg9C,EAASt8C,WAAYu8C,EAAUv8C,YAExD3D,KAAK81C,YAAckH,EACZh9C,KAAKL,OAAOiY,oBAGrB,OAXE9E,EAAO9S,KAAKo+C,kBAAkBtrC,EAAMmtC,EAAUE,EAAU,EAA2BlqC,EAAWnD,MAC9FC,EAAQ/S,KAAKo+C,kBAAkBrrC,EAAOmtC,EAAWC,EAAU,EAA2BlqC,EAAWlD,OAU3FotC,EAAW/5B,MAEjB,OACA,OACA,OACEzT,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS01C,MAAOztC,EAAMC,GACtD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS21C,MAAO1tC,EAAMC,GACtD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAAS21C,MACTj9B,EAAA1Y,SAAS01C,MACbztC,EACAC,GAEF,MAEF,OACA,OACA,OACA,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS41C,MAAO3tC,EAAMC,GACtD,MAEF,OAEEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAAS61C,MACTn9B,EAAA1Y,SAAS41C,MACb3tC,EACAC,GAEF,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS61C,MAAO5tC,EAAMC,GACtD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS81C,MAAO7tC,EAAMC,GACtD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS+1C,MAAO9tC,EAAMC,GACtD,MAEF,QAKE,MAJA/S,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAEP,IAAI0a,MAAM,0BAEpB3d,KAAK81C,YAAczyB,EAAA0B,KAAKU,KACxB,MAEF,KAAKwhB,EAAAhL,MAAMiD,YAKT,GAJApsB,EAAO9S,KAAKq+C,4BAA4BpoC,EAAWnD,KAAMkqC,GACzDiD,EAAWjgD,KAAK81C,YAChB/iC,EAAQ/S,KAAKq+C,4BAA4BpoC,EAAWlD,MAAOktC,GAC3DC,EAAYlgD,KAAK81C,cACbqK,EAAa98B,EAAA0B,KAAKsvB,iBAAiB4L,EAAUC,GAAW,IAS1D,OALAlgD,KAAKoF,MACHge,EAAA7gB,eAAe+9C,8CACfrqC,EAAWhT,MAAO,IAAKg9C,EAASt8C,WAAYu8C,EAAUv8C,YAExD3D,KAAK81C,YAAckH,EACZh9C,KAAKL,OAAOiY,oBAGrB,OAXE9E,EAAO9S,KAAKo+C,kBAAkBtrC,EAAMmtC,EAAUE,EAAU,EAA2BlqC,EAAWnD,MAC9FC,EAAQ/S,KAAKo+C,kBAAkBrrC,EAAOmtC,EAAWC,EAAU,EAA2BlqC,EAAWlD,OAU3FotC,EAAW/5B,MAEjB,OACA,OACA,OACEzT,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASg2C,MAAO/tC,EAAMC,GACtD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAASi2C,MACTv9B,EAAA1Y,SAASg2C,MACb/tC,EACAC,GAEF,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASi2C,MAAOhuC,EAAMC,GACtD,MAEF,OACA,OACA,OACA,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASk2C,MAAOjuC,EAAMC,GACtD,MAEF,OAEEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAASm2C,MACTz9B,EAAA1Y,SAASk2C,MACbjuC,EACAC,GAEF,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASm2C,MAAOluC,EAAMC,GACtD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASo2C,MAAOnuC,EAAMC,GACtD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASq2C,MAAOpuC,EAAMC,GACtD,MAEF,QAKE,MAJA/S,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAEP,IAAI0a,MAAM,0BAEpB3d,KAAK81C,YAAczyB,EAAA0B,KAAKU,KACxB,MAEF,KAAKwhB,EAAAhL,MAAMkD,gBAKT,GAJArsB,EAAO9S,KAAKq+C,4BAA4BpoC,EAAWnD,KAAMkqC,GACzDiD,EAAWjgD,KAAK81C,YAChB/iC,EAAQ/S,KAAKq+C,4BAA4BpoC,EAAWlD,MAAOktC,GAC3DC,EAAYlgD,KAAK81C,cACbqK,EAAa98B,EAAA0B,KAAKsvB,iBAAiB4L,EAAUC,GAAW,IAS1D,OALAlgD,KAAKoF,MACHge,EAAA7gB,eAAe+9C,8CACfrqC,EAAWhT,MAAO,KAAMg9C,EAASt8C,WAAYu8C,EAAUv8C,YAEzD3D,KAAK81C,YAAckH,EACZh9C,KAAKL,OAAOiY,oBAGrB,OAXE9E,EAAO9S,KAAKo+C,kBAAkBtrC,EAAMmtC,EAAUE,EAAU,EAA2BlqC,EAAWnD,MAC9FC,EAAQ/S,KAAKo+C,kBAAkBrrC,EAAOmtC,EAAWC,EAAU,EAA2BlqC,EAAWlD,OAU3FotC,EAAW/5B,MAEjB,OACA,OACA,OACEzT,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASs2C,MAAOruC,EAAMC,GACtD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAASu2C,MACT79B,EAAA1Y,SAASs2C,MACbruC,EACAC,GAEF,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASu2C,MAAOtuC,EAAMC,GACtD,MAEF,OACA,OACA,OACA,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASw2C,MAAOvuC,EAAMC,GACtD,MAEF,OAEEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAASy2C,MACT/9B,EAAA1Y,SAASw2C,MACbvuC,EACAC,GAEF,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASy2C,MAAOxuC,EAAMC,GACtD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS02C,MAAOzuC,EAAMC,GACtD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS22C,MAAO1uC,EAAMC,GACtD,MAEF,QAKE,MAJA/S,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAEP,IAAI0a,MAAM,0BAEpB3d,KAAK81C,YAAczyB,EAAA0B,KAAKU,KACxB,MAEF,KAAKwhB,EAAAhL,MAAMmD,mBAKT,GAJAtsB,EAAO9S,KAAKq+C,4BAA4BpoC,EAAWnD,KAAMkqC,GACzDiD,EAAWjgD,KAAK81C,YAChB/iC,EAAQ/S,KAAKq+C,4BAA4BpoC,EAAWlD,MAAOktC,GAC3DC,EAAYlgD,KAAK81C,cACbqK,EAAa98B,EAAA0B,KAAKsvB,iBAAiB4L,EAAUC,GAAW,IAS1D,OALAlgD,KAAKoF,MACHge,EAAA7gB,eAAe+9C,8CACfrqC,EAAWhT,MAAO,KAAMg9C,EAASt8C,WAAYu8C,EAAUv8C,YAEzD3D,KAAK81C,YAAckH,EACZh9C,KAAKL,OAAOiY,oBAGrB,OAXE9E,EAAO9S,KAAKo+C,kBAAkBtrC,EAAMmtC,EAAUE,EAAU,EAA2BlqC,EAAWnD,MAC9FC,EAAQ/S,KAAKo+C,kBAAkBrrC,EAAOmtC,EAAWC,EAAU,EAA2BlqC,EAAWlD,OAU3FotC,EAAW/5B,MAEjB,OACA,OACA,OACEzT,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS42C,MAAO3uC,EAAMC,GACtD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAAS62C,MACTn+B,EAAA1Y,SAAS42C,MACb3uC,EACAC,GAEF,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS62C,MAAO5uC,EAAMC,GACtD,MAEF,OACA,OACA,OACA,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS82C,MAAO7uC,EAAMC,GACtD,MAEF,OAEEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAAS+2C,MACTr+B,EAAA1Y,SAAS82C,MACb7uC,EACAC,GAEF,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS+2C,MAAO9uC,EAAMC,GACtD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASg3C,MAAO/uC,EAAMC,GACtD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASi3C,MAAOhvC,EAAMC,GACtD,MAEF,QAKE,MAJA/S,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAEP,IAAI0a,MAAM,0BAEpB3d,KAAK81C,YAAczyB,EAAA0B,KAAKU,KACxB,MAEF,KAAKwhB,EAAAhL,MAAMsD,qBAEX,KAAK0H,EAAAhL,MAAMoD,cAUT,GAJAvsB,EAAO9S,KAAKq+C,4BAA4BpoC,EAAWnD,KAAMkqC,GACzDiD,EAAWjgD,KAAK81C,YAChB/iC,EAAQ/S,KAAKq+C,4BAA4BpoC,EAAWlD,MAAOktC,GAC3DC,EAAYlgD,KAAK81C,cACbqK,EAAa98B,EAAA0B,KAAKsvB,iBAAiB4L,EAAUC,GAAW,IAS1D,OALAlgD,KAAKoF,MACHge,EAAA7gB,eAAe+9C,8CACfrqC,EAAWhT,MAAOgkC,EAAAhL,MAAM6C,iBAAiB7oB,EAAWiyB,UAAW+X,EAASt8C,WAAYu8C,EAAUv8C,YAEhG3D,KAAK81C,YAAckH,EACZh9C,KAAKL,OAAOiY,oBAGrB,OAXE9E,EAAO9S,KAAKo+C,kBAAkBtrC,EAAMmtC,EAAUE,EAAU,EAA2BlqC,EAAWnD,MAC9FC,EAAQ/S,KAAKo+C,kBAAkBrrC,EAAOmtC,EAAWC,EAAU,EAA2BlqC,EAAWlD,OAU3FotC,EAAW/5B,MAEjB,OACA,OACA,OACA,OACA,OACA,OACA,QACEzT,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS0xC,MAAOzpC,EAAMC,GACtD,MAEF,OAEA,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAASk3C,MACTx+B,EAAA1Y,SAAS0xC,MACbzpC,EACAC,GAEF,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASk3C,MAAOjvC,EAAMC,GACtD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASm3C,MAAOlvC,EAAMC,GACtD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASo3C,MAAOnvC,EAAMC,GACtD,MAEF,QAKE,MAJA/S,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAEP,IAAI0a,MAAM,0BAEpB3d,KAAK81C,YAAczyB,EAAA0B,KAAKU,KACxB,MAEF,KAAKwhB,EAAAhL,MAAMuD,0BAEX,KAAKyH,EAAAhL,MAAMqD,mBAKT,GAJAxsB,EAAO9S,KAAKq+C,4BAA4BpoC,EAAWnD,KAAMkqC,GACzDiD,EAAWjgD,KAAK81C,YAChB/iC,EAAQ/S,KAAKq+C,4BAA4BpoC,EAAWlD,MAAOktC,GAC3DC,EAAYlgD,KAAK81C,cACbqK,EAAa98B,EAAA0B,KAAKsvB,iBAAiB4L,EAAUC,GAAW,IAS1D,OALAlgD,KAAKoF,MACHge,EAAA7gB,eAAe+9C,8CACfrqC,EAAWhT,MAAOgkC,EAAAhL,MAAM6C,iBAAiB7oB,EAAWiyB,UAAW+X,EAASt8C,WAAYu8C,EAAUv8C,YAEhG3D,KAAK81C,YAAckH,EACZh9C,KAAKL,OAAOiY,oBAGrB,OAXE9E,EAAO9S,KAAKo+C,kBAAkBtrC,EAAMmtC,EAAUE,EAAU,EAA2BlqC,EAAWnD,MAC9FC,EAAQ/S,KAAKo+C,kBAAkBrrC,EAAOmtC,EAAWC,EAAU,EAA2BlqC,EAAWlD,OAU3FotC,EAAW/5B,MAEjB,OACA,OACA,OACA,OACA,OACA,OACA,QACEzT,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASq3C,MAAOpvC,EAAMC,GACtD,MAEF,OAEA,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAASs3C,MACT5+B,EAAA1Y,SAASq3C,MACbpvC,EACAC,GAEF,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASs3C,MAAOrvC,EAAMC,GACtD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASu3C,MAAOtvC,EAAMC,GACtD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASw3C,MAAOvvC,EAAMC,GACtD,MAEF,QAKE,MAJA/S,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAEP,IAAI0a,MAAM,0BAEpB3d,KAAK81C,YAAczyB,EAAA0B,KAAKU,KACxB,MAEF,KAAKwhB,EAAAhL,MAAM0E,OACT,OAAO3gC,KAAKsiD,kBAAkBrsC,EAAWnD,KAAMmD,EAAWlD,MAAOiqC,GAEnE,KAAK/V,EAAAhL,MAAM2E,YACTwf,GAAW,EACb,KAAKnZ,EAAAhL,MAAMwD,KAMT,GALA3sB,EAAO9S,KAAKq+C,4BACVpoC,EAAWnD,KACXkqC,GACA,GAEEoD,EACFrtC,EAAQ/S,KAAKk4C,kBACXjiC,EAAWlD,MACX/S,KAAK81C,YAAW,GAEhB,OAEG,CAQL,GAPAmK,EAAWjgD,KAAK81C,YAChB/iC,EAAQ/S,KAAKq+C,4BACXpoC,EAAWlD,MACXktC,GACA,GAEFC,EAAYlgD,KAAK81C,cACbqK,EAAa98B,EAAA0B,KAAKsvB,iBAAiB4L,EAAUC,GAAW,IAS1D,OALAlgD,KAAKoF,MACHge,EAAA7gB,eAAe+9C,8CACfrqC,EAAWhT,MAAO,IAAKg9C,EAASt8C,WAAYu8C,EAAUv8C,YAExD3D,KAAK81C,YAAckH,EACZh9C,KAAKL,OAAOiY,oBARnB9E,EAAO9S,KAAKo+C,kBAAkBtrC,EAAMmtC,EAAUE,EAAU,EAA2BlqC,EAAWnD,MAC9FC,EAAQ/S,KAAKo+C,kBAAkBrrC,EAAOmtC,EAAWC,EAAU,EAA2BlqC,EAAWlD,OAWrG,OAAQ/S,KAAK81C,YAAY1vB,MAEvB,OACA,OACA,OACA,OACA,QACEi6B,GAAoB,EACtB,OACA,OACE1tC,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASkuC,OAAQjmC,EAAMC,GACvD,MAEF,OAEA,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAAS03C,OACTh/B,EAAA1Y,SAASkuC,OACbjmC,EACAC,GAEF,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS03C,OAAQzvC,EAAMC,GACvD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS23C,OAAQ1vC,EAAMC,GACvD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS43C,OAAQ3vC,EAAMC,GACvD,MAEF,QACE,MAAM,IAAI4K,MAAM,0BAEpB,MAEF,KAAKspB,EAAAhL,MAAM4E,aACTuf,GAAW,EACb,KAAKnZ,EAAAhL,MAAMyD,MAMT,GALA5sB,EAAO9S,KAAKq+C,4BACVpoC,EAAWnD,KACXkqC,GACA,GAEEoD,EACFrtC,EAAQ/S,KAAKk4C,kBACXjiC,EAAWlD,MACX/S,KAAK81C,YAAW,GAEhB,OAEG,CAQL,GAPAmK,EAAWjgD,KAAK81C,YAChB/iC,EAAQ/S,KAAKq+C,4BACXpoC,EAAWlD,MACXktC,GACA,GAEFC,EAAYlgD,KAAK81C,cACbqK,EAAa98B,EAAA0B,KAAKsvB,iBAAiB4L,EAAUC,GAAW,IAS1D,OALAlgD,KAAKoF,MACHge,EAAA7gB,eAAe+9C,8CACfrqC,EAAWhT,MAAO,IAAKg9C,EAASt8C,WAAYu8C,EAAUv8C,YAExD3D,KAAK81C,YAAckH,EACZh9C,KAAKL,OAAOiY,oBARnB9E,EAAO9S,KAAKo+C,kBAAkBtrC,EAAMmtC,EAAUE,EAAU,EAA2BlqC,EAAWnD,MAC9FC,EAAQ/S,KAAKo+C,kBAAkBrrC,EAAOmtC,EAAWC,EAAU,EAA2BlqC,EAAWlD,OAWrG,OAAQ/S,KAAK81C,YAAY1vB,MAEvB,OACA,OACA,OACA,OACA,QACEi6B,GAAoB,EACtB,OACA,OACE1tC,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS63C,OAAQ5vC,EAAMC,GACvD,MAEF,OAEA,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAAS83C,OACTp/B,EAAA1Y,SAAS63C,OACb5vC,EACAC,GAEF,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS83C,OAAQ7vC,EAAMC,GACvD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS+3C,OAAQ9vC,EAAMC,GACvD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASg4C,OAAQ/vC,EAAMC,GACvD,MAEF,QAKE,MAJA/S,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAEP,IAAI0a,MAAM,0BAEpB,MAEF,KAAKspB,EAAAhL,MAAM6E,gBACTsf,GAAW,EACb,KAAKnZ,EAAAhL,MAAM2D,SAMT,GALA9sB,EAAO9S,KAAKq+C,4BACVpoC,EAAWnD,KACXkqC,GACA,GAEEoD,EACFrtC,EAAQ/S,KAAKk4C,kBACXjiC,EAAWlD,MACX/S,KAAK81C,YAAW,GAEhB,OAEG,CAQL,GAPAmK,EAAWjgD,KAAK81C,YAChB/iC,EAAQ/S,KAAKq+C,4BACXpoC,EAAWlD,MACXktC,GACA,GAEFC,EAAYlgD,KAAK81C,cACbqK,EAAa98B,EAAA0B,KAAKsvB,iBAAiB4L,EAAUC,GAAW,IAS1D,OALAlgD,KAAKoF,MACHge,EAAA7gB,eAAe+9C,8CACfrqC,EAAWhT,MAAO,IAAKg9C,EAASt8C,WAAYu8C,EAAUv8C,YAExD3D,KAAK81C,YAAckH,EACZh9C,KAAKL,OAAOiY,oBARnB9E,EAAO9S,KAAKo+C,kBAAkBtrC,EAAMmtC,EAAUE,EAAU,EAA2BlqC,EAAWnD,MAC9FC,EAAQ/S,KAAKo+C,kBAAkBrrC,EAAOmtC,EAAWC,EAAU,EAA2BlqC,EAAWlD,OAWrG,OAAQ/S,KAAK81C,YAAY1vB,MAEvB,OACA,OACA,OACA,OACA,QACEi6B,GAAoB,EAEtB,OACA,OACE1tC,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASi4C,OAAQhwC,EAAMC,GACvD,MAEF,OAEA,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAASk4C,OACTx/B,EAAA1Y,SAASi4C,OACbhwC,EACAC,GAEF,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASk4C,OAAQjwC,EAAMC,GACvD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASm4C,OAAQlwC,EAAMC,GACvD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASo4C,OAAQnwC,EAAMC,GACvD,MAEF,QAKE,MAJA/S,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAEP,IAAI0a,MAAM,0BAEpB,MAEF,KAAKspB,EAAAhL,MAAM+E,aACTof,GAAW,EACb,KAAKnZ,EAAAhL,MAAM4D,MAMT,GALA/sB,EAAO9S,KAAKq+C,4BACVpoC,EAAWnD,KACXkqC,GACA,GAEEoD,EACFrtC,EAAQ/S,KAAKk4C,kBACXjiC,EAAWlD,MACX/S,KAAK81C,YAAW,GAEhB,OAEG,CAQL,GAPAmK,EAAWjgD,KAAK81C,YAChB/iC,EAAQ/S,KAAKq+C,4BACXpoC,EAAWlD,MACXktC,GACA,GAEFC,EAAYlgD,KAAK81C,cACbqK,EAAa98B,EAAA0B,KAAKsvB,iBAAiB4L,EAAUC,GAAW,IAS1D,OALAlgD,KAAKoF,MACHge,EAAA7gB,eAAe+9C,8CACfrqC,EAAWhT,MAAO,IAAKg9C,EAASt8C,WAAYu8C,EAAUv8C,YAExD3D,KAAK81C,YAAckH,EACZh9C,KAAKL,OAAOiY,oBARnB9E,EAAO9S,KAAKo+C,kBAAkBtrC,EAAMmtC,EAAUE,EAAU,EAA2BlqC,EAAWnD,MAC9FC,EAAQ/S,KAAKo+C,kBAAkBrrC,EAAOmtC,EAAWC,EAAU,EAA2BlqC,EAAWlD,OAWrG,OAAQ/S,KAAK81C,YAAY1vB,MAEvB,OACA,OACEi6B,GAAoB,EACtB,OACE1tC,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASq4C,OAAQpwC,EAAMC,GACvD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAASs4C,OACT5/B,EAAA1Y,SAASq4C,OACbpwC,EACAC,GAEF,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASs4C,OAAQrwC,EAAMC,GACvD,MAEF,OACA,OACA,QACEstC,GAAoB,EACtB,OACE1tC,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASu4C,OAAQtwC,EAAMC,GACvD,MAEF,OAEEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAASw4C,OACT9/B,EAAA1Y,SAASu4C,OACbtwC,EACAC,GAEF,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASw4C,OAAQvwC,EAAMC,GACvD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASy4C,OAAQxwC,EAAMC,GACvD,MAEF,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS04C,OAAQzwC,EAAMC,GACvD,MAEF,QAKE,MAJA/S,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAEP,IAAI0a,MAAM,0BAEpB,MAEF,KAAKspB,EAAAhL,MAAMgF,eACTmf,GAAW,EACb,KAAKnZ,EAAAhL,MAAM6D,QAMT,GALAhtB,EAAO9S,KAAKq+C,4BACVpoC,EAAWnD,KACXkqC,GACA,GAEEoD,EACFrtC,EAAQ/S,KAAKk4C,kBACXjiC,EAAWlD,MACX/S,KAAK81C,YAAW,GAEhB,OAEG,CAQL,GAPAmK,EAAWjgD,KAAK81C,YAChB/iC,EAAQ/S,KAAKq+C,4BACXpoC,EAAWlD,MACXktC,GACA,GAEFC,EAAYlgD,KAAK81C,cACbqK,EAAa98B,EAAA0B,KAAKsvB,iBAAiB4L,EAAUC,GAAW,IAS1D,OALAlgD,KAAKoF,MACHge,EAAA7gB,eAAe+9C,8CACfrqC,EAAWhT,MAAO,IAAKg9C,EAASt8C,WAAYu8C,EAAUv8C,YAExD3D,KAAK81C,YAAckH,EACZh9C,KAAKL,OAAOiY,oBARnB9E,EAAO9S,KAAKo+C,kBAAkBtrC,EAAMmtC,EAAUE,EAAU,EAA2BlqC,EAAWnD,MAC9FC,EAAQ/S,KAAKo+C,kBAAkBrrC,EAAOmtC,EAAWC,EAAU,EAA2BlqC,EAAWlD,OAWrG,OAAQ/S,KAAK81C,YAAY1vB,MAEvB,OACA,OACA,OACEzT,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS24C,OAAQ1wC,EAAMC,GACvD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAAS44C,OACTlgC,EAAA1Y,SAAS24C,OACb1wC,EACAC,GAEF,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS44C,OAAQ3wC,EAAMC,GACvD,MAEF,OACA,OACA,OACA,QACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS64C,OAAQ5wC,EAAMC,GACvD,MAEF,OAEEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAAS84C,OACTpgC,EAAA1Y,SAAS64C,OACb5wC,EACAC,GAEF,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS84C,OAAQ7wC,EAAMC,GACvD,MAEF,QACA,QAEE/S,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAEb0P,EAAO3S,KAAKL,OAAOiY,oBACnB,MAEF,QAKE,MAJA5X,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAEP,IAAI0a,MAAM,0BAEpB,MAEF,KAAKspB,EAAAhL,MAAMiF,yBACTkf,GAAW,EACb,KAAKnZ,EAAAhL,MAAMgE,kBAaT,OAZAntB,EAAO9S,KAAKq+C,4BACVpoC,EAAWnD,KACXkqC,GACA,GAEFjqC,EAAQ/S,KAAKk4C,kBACXjiC,EAAWlD,MACX/S,KAAK81C,YAAW,GAEhB,GAGM91C,KAAK81C,YAAY1vB,MAEvB,OACA,OACA,OACA,OACA,QACEi6B,GAAoB,EACtB,QACE1tC,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS+4C,OAAQ9wC,EAAMC,GACvD,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASg5C,OAAQ/wC,EAAMC,GACvD,MAEF,OAEA,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAASg5C,OACTtgC,EAAA1Y,SAAS+4C,OACb9wC,EACAC,GAEF,MAEF,QACA,QAKE,OAJA/S,KAAKoF,MACHge,EAAA7gB,eAAeuhD,2CACf7tC,EAAWhT,MAAOgkC,EAAAhL,MAAM6C,iBAAiB7oB,EAAWiyB,UAAWloC,KAAK81C,YAAYnyC,YAE3E3D,KAAKL,OAAOiY,oBAErB,QAKE,MAJA5X,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAEP,IAAI0a,MAAM,0BAEpB,MAEF,KAAKspB,EAAAhL,MAAMkF,+BACTif,GAAW,EACb,KAAKnZ,EAAAhL,MAAMiE,wBAaT,OAZAptB,EAAO9S,KAAKq+C,4BACVpoC,EAAWnD,KACXkqC,GACA,GAEFjqC,EAAQ/S,KAAKk4C,kBACXjiC,EAAWlD,MACX/S,KAAK81C,YAAW,GAEhB,GAGM91C,KAAK81C,YAAY1vB,MAEvB,QAEEzT,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASk5C,OAAQjxC,EAAMC,GACvD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASm5C,OAAQlxC,EAAMC,GACvD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAASm5C,OACTzgC,EAAA1Y,SAASk5C,OACbjxC,EACAC,GAEF,MAEF,OACA,OACA,QAEA,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASo5C,OAAQnxC,EAAMC,GACvD,MAEF,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASq5C,OAAQpxC,EAAMC,GACvD,MAEF,OAEEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAASq5C,OACT3gC,EAAA1Y,SAASo5C,OACbnxC,EACAC,GAEF,MAEF,QACA,QAKE,OAJA/S,KAAKoF,MACHge,EAAA7gB,eAAeuhD,2CACf7tC,EAAWhT,MAAOgkC,EAAAhL,MAAM6C,iBAAiB7oB,EAAWiyB,UAAWloC,KAAK81C,YAAYnyC,YAE3E3D,KAAKL,OAAOiY,oBAErB,QAKE,MAJA5X,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAEP,IAAI0a,MAAM,0BAEpB,MAEF,KAAKspB,EAAAhL,MAAMmF,2CACTgf,GAAW,EACb,KAAKnZ,EAAAhL,MAAMkE,oCAaT,OAZArtB,EAAO9S,KAAKq+C,4BACVpoC,EAAWnD,KACXkqC,GACA,GAEFjqC,EAAQ/S,KAAKk4C,kBACXjiC,EAAWlD,MACX/S,KAAK81C,YAAW,GAEhB,GAGM91C,KAAK81C,YAAY1vB,MAEvB,OACA,OACEi6B,GAAoB,EAEtB,QAEE1tC,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASo5C,OAAQnxC,EAAMC,GACvD,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASq5C,OAAQpxC,EAAMC,GACvD,MAEF,OAEA,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAASq5C,OACT3gC,EAAA1Y,SAASo5C,OACbnxC,EACAC,GAEF,MAEF,QAKE,MAJA/S,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAEP,IAAI0a,MAAM,0BAEpB,MAEF,KAAKspB,EAAAhL,MAAMoF,iBACT+e,GAAW,EACb,KAAKnZ,EAAAhL,MAAMmE,UAMT,GALAttB,EAAO9S,KAAKq+C,4BACVpoC,EAAWnD,KACXkqC,GACA,GAEEoD,EACFrtC,EAAQ/S,KAAKk4C,kBACXjiC,EAAWlD,MACX/S,KAAK81C,YAAW,GAEhB,OAEG,CAQL,GAPAmK,EAAWjgD,KAAK81C,YAChB/iC,EAAQ/S,KAAKq+C,4BACXpoC,EAAWlD,MACXktC,GACA,GAEFC,EAAYlgD,KAAK81C,cACbqK,EAAa98B,EAAA0B,KAAKsvB,iBAAiB4L,EAAUC,GAAW,IAS1D,OALAlgD,KAAKoF,MACHge,EAAA7gB,eAAe+9C,8CACfrqC,EAAWhT,MAAO,IAAKg9C,EAASt8C,WAAYu8C,EAAUv8C,YAExD3D,KAAK81C,YAAckH,EACZh9C,KAAKL,OAAOiY,oBARnB9E,EAAO9S,KAAKo+C,kBAAkBtrC,EAAMmtC,EAAUE,EAAU,EAA2BlqC,EAAWnD,MAC9FC,EAAQ/S,KAAKo+C,kBAAkBrrC,EAAOmtC,EAAWC,EAAU,EAA2BlqC,EAAWlD,OAWrG,OAAQ/S,KAAK81C,YAAY1vB,MAEvB,OACA,OACA,OACA,OACA,QACEi6B,GAAoB,EACtB,QACE1tC,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASs5C,OAAQrxC,EAAMC,GACvD,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASu5C,OAAQtxC,EAAMC,GACvD,MAEF,OAEA,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAASu5C,OACT7gC,EAAA1Y,SAASs5C,OACbrxC,EACAC,GAEF,MAEF,QAKE,MAJA/S,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAEP,IAAI0a,MAAM,0BAEpB,MAEF,KAAKspB,EAAAhL,MAAMqF,WACT8e,GAAW,EACb,KAAKnZ,EAAAhL,MAAMoE,IAMT,GALAvtB,EAAO9S,KAAKq+C,4BACVpoC,EAAWnD,KACXkqC,GACA,GAEEoD,EACFrtC,EAAQ/S,KAAKk4C,kBACXjiC,EAAWlD,MACX/S,KAAK81C,YAAW,GAEhB,OAEG,CAQL,GAPAmK,EAAWjgD,KAAK81C,YAChB/iC,EAAQ/S,KAAKq+C,4BACXpoC,EAAWlD,MACXktC,GACA,GAEFC,EAAYlgD,KAAK81C,cACbqK,EAAa98B,EAAA0B,KAAKsvB,iBAAiB4L,EAAUC,GAAW,IAS1D,OALAlgD,KAAKoF,MACHge,EAAA7gB,eAAe+9C,8CACfrqC,EAAWhT,MAAO,IAAKg9C,EAASt8C,WAAYu8C,EAAUv8C,YAExD3D,KAAK81C,YAAckH,EACZh9C,KAAKL,OAAOiY,oBARnB9E,EAAO9S,KAAKo+C,kBAAkBtrC,EAAMmtC,EAAUE,EAAU,EAA2BlqC,EAAWnD,MAC9FC,EAAQ/S,KAAKo+C,kBAAkBrrC,EAAOmtC,EAAWC,EAAU,EAA2BlqC,EAAWlD,OAWrG,OAAQ/S,KAAK81C,YAAY1vB,MAEvB,OACA,OACA,OACA,OACA,QACEi6B,GAAoB,EACtB,QACE1tC,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASw5C,MAAOvxC,EAAMC,GACtD,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASy5C,MAAOxxC,EAAMC,GACtD,MAEF,OAEA,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAASy5C,MACT/gC,EAAA1Y,SAASw5C,MACbvxC,EACAC,GAEF,MAEF,QAKE,MAJA/S,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAEP,IAAI0a,MAAM,0BAEpB,MAEF,KAAKspB,EAAAhL,MAAMsF,aACT6e,GAAW,EACb,KAAKnZ,EAAAhL,MAAMqE,MAMT,GALAxtB,EAAO9S,KAAKq+C,4BACVpoC,EAAWnD,KACXkqC,GACA,GAEEoD,EACFrtC,EAAQ/S,KAAKk4C,kBACXjiC,EAAWlD,MACX/S,KAAK81C,YAAW,GAEhB,OAEG,CAQL,GAPAmK,EAAWjgD,KAAK81C,YAChB/iC,EAAQ/S,KAAKq+C,4BACXpoC,EAAWlD,MACXktC,GACA,GAEFC,EAAYlgD,KAAK81C,cACbqK,EAAa98B,EAAA0B,KAAKsvB,iBAAiB4L,EAAUC,GAAW,IAS1D,OALAlgD,KAAKoF,MACHge,EAAA7gB,eAAe+9C,8CACfrqC,EAAWhT,MAAO,IAAKg9C,EAASt8C,WAAYu8C,EAAUv8C,YAExD3D,KAAK81C,YAAckH,EACZh9C,KAAKL,OAAOiY,oBARnB9E,EAAO9S,KAAKo+C,kBAAkBtrC,EAAMmtC,EAAUE,EAAU,EAA2BlqC,EAAWnD,MAC9FC,EAAQ/S,KAAKo+C,kBAAkBrrC,EAAOmtC,EAAWC,EAAU,EAA2BlqC,EAAWlD,OAWrG,OAAQ/S,KAAK81C,YAAY1vB,MAEvB,OACA,OACA,OACA,OACA,QACEi6B,GAAoB,EACtB,QACE1tC,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS05C,OAAQzxC,EAAMC,GACvD,MAEF,OACA,OACEJ,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS25C,OAAQ1xC,EAAMC,GACvD,MAEF,OAEA,OACEJ,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAAS25C,OACTjhC,EAAA1Y,SAAS05C,OACbzxC,EACAC,GAEF,MAEF,QAKE,MAJA/S,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAEP,IAAI0a,MAAM,0BAEpB,MAIF,KAAKspB,EAAAhL,MAAMwE,oBACT3tB,EAAO9S,KAAKq+C,4BACVpoC,EAAWnD,KACXkqC,GAEFjqC,EAAQ/S,KAAKk4C,kBACXjiC,EAAWlD,MACX/S,KAAK81C,YAAW,GAEhB,IAIFnjC,EAAO3S,KAAKL,OAAOse,gBAAgBnL,GAAM,EAAM,MAI7CopC,EAAYl8C,KAAKw7B,gBAAgB1C,oBAAoB94B,KAAK81C,aAC1DhjC,EAAO9S,KAAKL,OAAO6T,eAAe0oC,EAAU7oC,MAAOP,IAGrDutC,EAAoBrgD,KAAK81C,YAAY9rB,GAAG,IACxClU,EAAYgmC,EAAchpC,EAAM9S,KAAK81C,YAAa91C,KAAKL,QAIrDgT,EADEA,EACK3S,KAAKL,OAAO2W,SACjBR,EACA/C,EACAJ,GAMK3S,KAAKL,OAAO2W,SACjBR,EACA/C,EACA/S,KAAKL,OAAOyT,eACV6V,OAAOizB,EAAW,yBAAyB7oC,MAC3CrT,KAAK81C,YAAYnd,iBAIvB,MAEF,KAAKsO,EAAAhL,MAAMyE,QACT5tB,EAAO9S,KAAKq+C,4BACVpoC,EAAWnD,KACXkqC,GAEFjqC,EAAQ/S,KAAKk4C,kBACXjiC,EAAWlD,MACX/S,KAAK81C,YAAW,GAEhB,IAIFnjC,EAAO3S,KAAKL,OAAOse,gBAAgBnL,GAAM,EAAM,MAI7CopC,EAAYl8C,KAAKw7B,gBAAgB1C,oBAAoB94B,KAAK81C,aAC1DhjC,EAAO9S,KAAKL,OAAO6T,eAAe0oC,EAAU7oC,MAAOP,IAGrDutC,EAAoBrgD,KAAK81C,YAAY9rB,GAAG,IACxClU,EAAYgmC,EAAchpC,EAAM9S,KAAK81C,YAAa91C,KAAKL,QAIrDgT,EADEA,EACK3S,KAAKL,OAAO2W,SACjBR,EACAnD,EACAI,GAMK/S,KAAKL,OAAO2W,SACjBR,EACA9V,KAAKL,OAAOyT,eACV6V,OAAOizB,EAAW,yBAAyB7oC,MAC3CrT,KAAK81C,YAAYnd,gBAEnB5lB,GAGJ,MAEF,QAKE,MAJA/S,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAEP,IAAI0a,MAAM,mBAMpB,OAJI0iC,GAAqBhD,IACvBp0B,OAAOjpB,KAAK81C,YAAY9rB,GAAG,IAAsC,+BACjErX,EAAOosC,EAAqBpsC,EAAM3S,KAAK81C,YAAa91C,KAAKL,SAEpDygD,EACHpgD,KAAK+8C,2BAA2B9mC,EAAWnD,KAAMH,EAAMqqC,GAAkB35B,EAAA0B,KAAKa,MAC9EjT,GAGNgjC,EAAAj0C,UAAA4gD,kBAAA,SAAkBrsC,EAAwBwuC,EAA6BzH,GACrE,IAAI7zB,EAAWnpB,KAAKszB,QAAQ7B,kBAAkBxb,EAAYjW,KAAKw7B,iBAC/D,IAAKrS,EAAU,OAAOnpB,KAAKL,OAAOiY,oBAGlC,IACI8sC,EADA7+B,EAAUsD,EAAStD,QAEvB,OAAQA,EAAQO,MAEd,KAAK4gB,EAAA3d,YAAYc,OACf,IAAKnqB,KAAK83C,cAAsBjyB,GAC9B,OAAO7lB,KAAKL,OAAOiY,oBAErBqR,OAAgBpD,EAASvS,MAAQ+P,EAAA0B,KAAKa,KAAM,0BAG9C,KAAKohB,EAAA3d,YAAYsI,MACjB,KAAKqV,EAAA3d,YAAYuI,MACf8yB,EAAoC7+B,EAASvS,KAC7C,MAEF,KAAK0zB,EAAA3d,YAAYwE,SACf,IAAIE,EAA6BlI,EAASkI,gBAC1C,GAAIA,EAAiB,CACnB,IAAI42B,EAAiB52B,EAAgBjC,UACrC,IAAK64B,EAAgB,OAAO3kD,KAAKL,OAAOiY,oBACxCqR,OAAO07B,EAAenuB,YAAkD,GAApCmuB,EAAenuB,WAAWpyB,QAC9DsgD,EAA4BC,EAAenuB,WAAY,GAAGljB,KAC1D,MAMF,OAJAtT,KAAKoF,MACHge,EAAA7gB,eAAeqiD,oEACf3uC,EAAWhT,MAAkB4iB,EAASrN,cAEjCxY,KAAKL,OAAOiY,oBAErB,KAAKovB,EAAA3d,YAAYiJ,mBACf,GAAIrc,EAAWmQ,MAAQ9C,EAAA+C,SAAS8M,cAAe,CAC7ClK,OACEE,EAAS5R,QACT4R,EAAS5R,OAAO6O,MAAQ4gB,EAAA3d,YAAY0I,OACpClM,EAAQuH,YAAsBjE,EAAS5R,OAAQ7V,UAAUyrB,cAE3D,IAAI03B,EAAyCh/B,EAASiG,QAAQ,MAC9D,GAAI+4B,EAAoB,CACtBH,EAAcG,EAAmBrtC,WACjC,OAIN,QAKE,OAJAxX,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAENjD,KAAKL,OAAOiY,oBAKvB,OADA5X,KAAK81C,YAAc4O,EACZ1kD,KAAK+8C,2BACV9mC,EACAjW,KAAKk4C,kBAAkBuM,EAAiBC,GACxC1H,GAAkB35B,EAAA0B,KAAKa,OAI3B+vB,EAAAj0C,UAAAq7C,2BAAA,SACE9mC,EACA6uC,EACAC,QAAA,IAAAA,OAAA,GAEA,IAAI57B,EAAWnpB,KAAKszB,QAAQ7B,kBAAkBxb,EAAYjW,KAAKw7B,iBAC/D,IAAKrS,EAAU,OAAOnpB,KAAKL,OAAOiY,oBAElC,IACIskC,EACA8I,EAFAn/B,EAAUsD,EAAStD,QAGvB,OAAQA,EAAQO,MAEd,KAAK4gB,EAAA3d,YAAYsI,MAEf,OADA3xB,KAAK81C,YAAciP,EAAcl/B,EAASvS,KAAO+P,EAAA0B,KAAKa,KAC1CC,EAASmE,GAAGgd,EAAAnd,aAAaoK,WACnCj0B,KAAKoF,MACHge,EAAA7gB,eAAeqiD,oEACf3uC,EAAWhT,MAAe4iB,EAASrN,cAE9BxY,KAAKL,OAAOiY,qBAEdmtC,EACH/kD,KAAKL,OAAO6T,eAAuBqS,EAASxS,MAAOyxC,GACnD9kD,KAAKL,OAAOyV,eAAuByQ,EAASxS,MAAOyxC,GAEzD,KAAK9d,EAAA3d,YAAYc,OACf,IAAKnqB,KAAK83C,cAAsBjyB,GAC9B,OAAO7lB,KAAKL,OAAOiY,oBAIrB,GAFAqR,OAAgBpD,EAASvS,MAAQ+P,EAAA0B,KAAKa,KAAM,0BAC5C5lB,KAAK81C,YAAciP,EAAel/B,EAASvS,KAAO+P,EAAA0B,KAAKa,KAC3CC,EAASmE,GAAGgd,EAAAnd,aAAaoK,UAMnC,OALAj0B,KAAKoF,MACHge,EAAA7gB,eAAeqiD,oEACf3uC,EAAWhT,MACH4iB,EAASrN,cAEZxY,KAAKL,OAAOiY,oBAErB,IAAKmtC,EACH,OAAO/kD,KAAKL,OAAO2V,gBAAyBuQ,EAASrN,aAAcssC,GAErE,IAAIG,EAA4Bp/B,EAASvS,KAAKqlB,eAC9C,OAAO34B,KAAKL,OAAO6V,YAAY,MAC7BxV,KAAKL,OAAO2V,gBAAyBuQ,EAASrN,aAAcssC,GAC5D9kD,KAAKL,OAAO+T,gBAAyBmS,EAASrN,aAAcysC,IAC3DA,GAEL,KAAKje,EAAA3d,YAAYuI,MACf,GAAY/L,EAASnkB,UAAUwjD,WAK7B,OAJAllD,KAAKoF,MACHge,EAAA7gB,eAAeqiD,oEACf3uC,EAAWhT,MAAe4iB,EAASrN,cAE9BxY,KAAKL,OAAOiY,oBAErBqR,OAAoC,MAA7BE,EAASqI,iBAA0B,8BAC1CwzB,EAAahlD,KAAKk4C,kBACJ/uB,EAASqI,iBACrBxxB,KAAK8kB,QAAQ+xB,SACTxzB,EAAA0B,KAAK+vB,QACLzxB,EAAA0B,KAAK8vB,QAAO,GAGlB5rB,OAAOjpB,KAAK81C,YAAYjkB,UAAW,uBACnC7xB,KAAK81C,YAAciP,EAAcl/B,EAASvS,KAAO+P,EAAA0B,KAAKa,KACtD,IAAIu/B,EAA4Bt/B,EAASvS,KAAKqlB,eAC9C,OAAKosB,GASL7I,EAAYl8C,KAAKw7B,gBAAgB1C,oBAA4BjT,EAASvS,MAE/DtT,KAAKL,OAAO6V,YAAY,MAC7BxV,KAAKL,OAAOyV,eAAe8mC,EAAU7oC,MAAOyxC,GAC5C9kD,KAAKL,OAAOsU,YACF4R,EAASvS,KAAKkgC,MAAQ,EAC9BwR,EACAhlD,KAAKL,OAAOyT,eAAe8oC,EAAU7oC,MAAO8xC,GAC5CA,EACQt/B,EAAS6T,cAEnB15B,KAAKL,OAAOyT,eAAe8oC,EAAU7oC,MAAO8xC,IAC3CA,IApBMnlD,KAAKL,OAAOsU,YACT4R,EAASvS,KAAKkgC,MAAQ,EAC9BwR,EACAF,EACAK,EACQt/B,EAAS6T,cAiBvB,KAAKsN,EAAA3d,YAAYwE,SACf,IAAIE,EAA6BlI,EAASkI,gBAC1C,GAAIA,EAAiB,CACnB,IAAI42B,EAAiB52B,EAAgBjC,UACrC,GAAI64B,EAAgB,CAElB,GADA17B,OAAO07B,EAAenuB,YAAkD,GAApCmuB,EAAenuB,WAAWpyB,SACzD2gD,EACH,OAAIJ,EAAe36B,GAAGgd,EAAAnd,aAAakM,WACjC9M,OAAoC,MAA7BE,EAASqI,kBAChBwzB,EAAahlD,KAAKk4C,kBACJ/uB,EAASqI,iBACrBxxB,KAAK8kB,QAAQ+xB,SACTxzB,EAAA0B,KAAK+vB,QACLzxB,EAAA0B,KAAK8vB,QAAO,GAGlB5rB,OAAOjpB,KAAK81C,YAAYjkB,WACxB7xB,KAAK81C,YAAczyB,EAAA0B,KAAKa,KACjB5lB,KAAKolD,SAAST,GAAkBK,EAAYF,MAEnD9kD,KAAK81C,YAAczyB,EAAA0B,KAAKa,KACjB5lB,KAAKolD,SAAST,GAAkBG,KAG3C,IAAIh3B,EAA6BjI,EAASiI,gBAC1C7E,OAA0B,MAAnB6E,GACP,IAAIu3B,EAAqCv3B,EAAiBhC,UAC1D,GAAIu5B,EAEF,OADAp8B,QAAQo8B,EAAe7uB,aAAe6uB,EAAe7uB,WAAWpyB,QAC5DugD,EAAe36B,GAAGgd,EAAAnd,aAAakM,WACjC9M,OAAoC,MAA7BE,EAASqI,kBAChBwzB,EAAahlD,KAAKk4C,kBACJ/uB,EAASqI,iBACrBxxB,KAAK8kB,QAAQ+xB,SACTxzB,EAAA0B,KAAK+vB,QACLzxB,EAAA0B,KAAK8vB,QAAO,GAGlB5rB,OAAOjpB,KAAK81C,YAAYjkB,WACxBqqB,EAAYl8C,KAAKw7B,gBAAgB1C,oBAAoBusB,EAAe7tC,YAC7DxX,KAAKL,OAAO6V,YAAY,MAC7BxV,KAAKolD,SAAST,GACZ3kD,KAAKL,OAAO6T,eAAe0oC,EAAU7oC,MAAO2xC,GAAaF,IAE3D9kD,KAAKolD,SAASC,GACZrlD,KAAKL,OAAOyT,eAAe8oC,EAAU7oC,MAAO6oC,EAAU5oC,KAAKqlB,oBAE3D34B,KAAK81C,YAAcuP,EAAe7tC,YAAYmhB,iBAE3C34B,KAAKL,OAAO6V,YAAY,MAC7BxV,KAAKolD,SAAST,GAAkBG,IAChC9kD,KAAKolD,SAASC,KACZrlD,KAAK81C,YAAcuP,EAAe7tC,YAAYmhB,sBAKxD34B,KAAKoF,MACHge,EAAA7gB,eAAeqiD,oEACf3uC,EAAWhT,MAAkB4iB,EAASrN,cAG1C,OAAOxY,KAAKL,OAAOiY,oBAErB,KAAKovB,EAAA3d,YAAYiJ,mBACf,GAAIrc,EAAWmQ,MAAQ9C,EAAA+C,SAAS8M,cAAe,CAC7ClK,OAAOE,EAAS5R,QAAU4R,EAAS5R,OAAO6O,MAAQ4gB,EAAA3d,YAAY0I,OAC9D,IAAIuzB,EAAyCz/B,EAASiG,UACtD,IAAKw5B,EAAoB,OAAOtlD,KAAKL,OAAOiY,oBAC5C,IACI2tC,EADAC,EAAyBr8B,EAAS5R,OAAQ7V,UAAU2rB,aAExD,GACoB,MAAlBm4B,GACQr8B,EAAS5R,OAAQsT,UACxB06B,EAA2Cp8B,EAAS5R,OAAQsT,QAAS1pB,IAAIqkD,KAC1ED,EAAWn/B,MAAQ4gB,EAAA3d,YAAYiJ,mBAC/B,CACA,IAAIuyB,EAAyCU,EAAYz5B,UACzD,IAAK+4B,EAAoB,OAAO7kD,KAAKL,OAAOiY,oBAC5CotC,EAAahlD,KAAKk4C,kBACJ/uB,EAASqI,iBACrBxxB,KAAK8kB,QAAQ+xB,SACTxzB,EAAA0B,KAAK+vB,QACLzxB,EAAA0B,KAAK8vB,QAAO,GAGlB5rB,OAAOjpB,KAAK81C,YAAYjkB,WACxB,IAAI4zB,EAAczlD,KAAKk4C,kBACKjiC,EAAY+yB,kBACtC3lB,EAAA0B,KAAK3G,KAEP,OAAK2mC,GAQL/kD,KAAK81C,YAAcwP,EAAmB9tC,WACtC0kC,EAAYl8C,KAAKw7B,gBAAgB1C,oBAAoB94B,KAAK81C,aACnD91C,KAAKL,OAAO6V,YAAY,MAC7BxV,KAAKolD,SAASP,GACZG,EACAS,EACAzlD,KAAKL,OAAO6T,eAAe0oC,EAAU7oC,MAAOyxC,KAG9C9kD,KAAKL,OAAOyT,eAAe8oC,EAAU7oC,MAAO6oC,EAAU5oC,KAAKqlB,iBAC1D34B,KAAK81C,YAAYnd,kBAjBlB34B,KAAK81C,YAAc+O,EAAmBrtC,WAC/BxX,KAAKolD,SAASP,GACnBG,EACAS,EACAX,KAmBJ,OAJA9kD,KAAKoF,MACHge,EAAA7gB,eAAemjD,+CACfzvC,EAAWhT,MAAekmB,EAAS5R,OAAQiB,cAEtCxY,KAAKL,OAAOiY,qBAS3B,OAJA5X,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAENjD,KAAKL,OAAOiY,qBAGrB+9B,EAAAj0C,UAAA87C,sBAAA,SAAsBvnC,EAA4B+mC,GAChD,IAAI7zB,EAAWnpB,KAAKszB,QAAQ7B,kBAAkBxb,EAAWA,WAAYjW,KAAKw7B,iBAC1E,IAAKrS,EAAU,OAAOnpB,KAAKL,OAAOiY,oBAElC,IACI+tC,EACAzL,EAFAr0B,EAAUsD,EAAStD,QAGvB,OAAQA,EAAQO,MAGd,KAAK4gB,EAAA3d,YAAYiJ,mBAEf,IADAqzB,EAAuC9/B,GACjBmE,GAAGgd,EAAAnd,aAAaC,SAAU,CAC9C,IAAInX,EAAOqiC,EAAA4Q,YACT5lD,KACA2lD,EACAA,EAAkBxuB,4BAChBlhB,EAAWia,cACXlwB,KAAKw7B,gBAAgB1L,yBAEvB7Z,EAAW8W,UACXiwB,EACA/mC,GAEF,OAAKtD,IACH3S,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAENjD,KAAKL,OAAOiY,qBASrB,KALAsiC,EAAmByL,EAAkB11B,0BACnCha,EAAWia,cACXlwB,KAAKw7B,gBAAgB1L,wBACrB7Z,IAEqB,OAAOjW,KAAKL,OAAOiY,oBAE5C,MAIF,KAAKovB,EAAA3d,YAAYsI,MACjB,KAAKqV,EAAA3d,YAAYc,OACjB,KAAK6c,EAAA3d,YAAYuI,MACf,IAA0B/L,EAASvS,KAAKuyC,WAOtC,OAJA7lD,KAAKoF,MACHge,EAAA7gB,eAAeujD,uGACf7vC,EAAWhT,MAA6B4iB,EAASvS,KAAK3P,YAEjD3D,KAAKL,OAAOiY,oBANnBsiC,EAAmDr0B,EAASvS,KAAKkG,aAQnE,MAEF,QAKE,OAJAxZ,KAAKoF,MACHge,EAAA7gB,eAAeujD,uGACf7vC,EAAWhT,MAAO4iB,EAAQrN,cAErBxY,KAAKL,OAAOiY,oBAGvB,IAAImuC,EAAe9vC,EAAW8W,UAAU3oB,OACpC4hD,EAAuB9L,EAAiBrnB,iBACxCkzB,EAAe,EACfA,EACAE,EAAgB,EAEhB3d,EAAO,IAAIpjC,MAAkB8gD,GAC7B9L,EAAiBrnB,mBACnB5J,OAAoC,MAA7BE,EAASqI,kBAChB8W,EAAK2d,KAA+B98B,EAASqI,kBAE/C,IAAK,IAAInxB,EAAI,EAAGA,EAAI0lD,IAAgB1lD,EAClCioC,EAAK2d,KAAmBhwC,EAAW8W,UAAU1sB,GAE/C,OAAOL,KAAK4lD,YAAY1L,EAAkB5R,EAAMryB,IAOlD0/B,EAAAj0C,UAAAkkD,YAAA,SACE1L,EACAgM,EACAjvB,EACAkvB,QAAA,IAAAA,MAAA,GAIA,IAAI3vB,EAAa0jB,EAAiB1jB,WAE9B+iB,EAAgB/iB,EAAaA,EAAWpyB,OAAS,EACjDo1C,EAA6D,MAArCU,EAAiBrnB,iBACzC0mB,EAAgB,EAChBA,EACAyM,EAAuBE,EAAoB9hD,OAC3C2hD,EAAoD,MAArC7L,EAAiBrnB,iBAChCmzB,EAAuB,EACvBA,EAGJ,GAFIG,GAASH,IAETA,EAAuBxM,EAKzB,OAJAx5C,KAAKoF,MACHge,EAAA7gB,eAAekrB,+BACfwJ,EAAWh0B,MAAOs2C,EAAc51C,SAAS,IAAKoiD,EAAapiD,SAAS,KAE/D3D,KAAKL,OAAOiY,oBAErB,IAAI1E,EAAW,IAAIhO,MAAqBs0C,GACpC4M,EAAe,EACfH,EAAgB,EAWpB,GAVI/L,EAAiBrnB,mBAEjB3f,EAASkzC,KADPD,GAGyBnmD,KAAKk4C,kBAC9BgO,EAAoBD,KACpB/L,EAAiBrnB,iBAAiBvf,OAIpCkjB,EACF,KAAO4vB,EAAe5M,IAAyB4M,EAG7C,GAAIJ,EAAuBI,EACzBlzC,EAASkzC,GAAgBpmD,KAAKk4C,kBAC5BgO,EAAoBD,KACpBzvB,EAAW4vB,EAAe7M,EAAgBC,GAAuBlmC,UAI9D,CACL,IAAI0E,EAAcwe,EAAW4vB,EAAe7M,EAAgBC,GAAuBxhC,YACnF,IAAIA,EAgBF,OANAhY,KAAKoF,MACHge,EAAA7gB,eAAe8jD,wCACfpvB,EAAWh0B,OACVmjD,EAAe7M,EAAgBC,GAAuB71C,SAAS,IAChEoiD,EAAapiD,SAAS,KAEjB3D,KAAKL,OAAOiY,oBAfnB1E,EAASkzC,GAAgBpmD,KAAKk4C,kBAC5BlgC,EACAwe,EAAW4vB,EAAe7M,EAAgBC,GAAuBlmC,MAoB3E,OADAtT,KAAK81C,YAAcoE,EAAiB1iC,WAC7BxX,KAAKolD,SAASlL,EAAkBhnC,IAIzCyiC,EAAAj0C,UAAA0jD,SAAA,SAASlL,EAA4BhnC,GACnC,YADmC,IAAAA,MAAA,MAC7BgnC,EAAiBlwB,GAAGgd,EAAAnd,aAAakuB,WAAa/3C,KAAKk5C,gBAAgBgB,GAKrEA,EAAiBlwB,GAAGgd,EAAAnd,aAAaiK,UAC5B9zB,KAAKL,OAAO+X,iBACjBwiC,EAAiB1hC,aACjBtF,EACAgnC,EAAiB1iC,WAAWmhB,gBAKzB34B,KAAKL,OAAO2X,WACjB4iC,EAAiB1hC,aACjBtF,EACAgnC,EAAiB1iC,WAAWmhB,gBAhBrB34B,KAAKL,OAAOiY,qBAoBvB+9B,EAAAj0C,UAAA+7C,uBAAA,SAAuBxnC,EAA6B+mC,GAIlD,IAHA,IAAItU,EAAczyB,EAAWyyB,YACzBtxB,EAAIsxB,EAAYtkC,OAChBkiD,EAAQ,IAAIphD,MAAqBkS,KAC5B/W,EAAI,EAAGA,EAAI+W,IAAK/W,EACvBimD,EAAMjmD,GAAKL,KAAKk4C,kBAAkBxP,EAAYroC,GAAIgjB,EAAA0B,KAAKa,MAGzD,OADA0gC,EAAMjmD,GAAKL,KAAKk4C,kBAAkBxP,EAAYroC,GAAI28C,GAC3Ch9C,KAAKL,OAAO6V,YAAY,KAAM8wC,EAAOtmD,KAAK81C,YAAYnd,iBAG/Dgd,EAAAj0C,UAAAg8C,+BAAA,SAA+BznC,EAAqC+mC,GAClE,IAAI7zB,EAAWnpB,KAAKszB,QAAQpB,qBAAqBjc,EAAYjW,KAAKw7B,iBAClE,IAAKrS,EAAU,OAAOnpB,KAAKL,OAAOiY,oBAClCqR,OACEE,EAAStD,QAAQO,MAAQ4gB,EAAA3d,YAAYiJ,oBACrCnJ,EAAS5R,QACT4R,EAAS5R,OAAO6O,MAAQ4gB,EAAA3d,YAAY0I,OAEtC,IAAIlG,EAA+B1C,EAAStD,QAASiG,QACnD,KACQ3C,EAAS5R,OAAQuY,yBAE3B,OAAKjE,EACE7rB,KAAK4lD,YAAY/5B,GACtB5V,EAAWA,WACXA,EAAW+yB,mBACV/yB,GAJmBjW,KAAKL,OAAOiY,qBAOpC+9B,EAAAj0C,UAAAi8C,0BAAA,SAA0B1nC,EAAgC+mC,GACxD,IAAIj1B,EAAc9R,EAAW8R,YACzBqF,GAAcrF,EAAYnnB,KAAKsD,KAAKE,OACpC2jB,EAAYnnB,KAAKsD,KACjB,aAAe,IAAMlE,KAAKi2C,cAAc7xC,OAAOT,SAAS,IACxDjC,EAAY,IAAIslC,EAAAza,kBAClBvsB,KAAKszB,QACLlG,EACAptB,KAAKw7B,gBAAgBhjB,aAAe,IAAM4U,EAC1CrF,GAEE8D,EAAW7rB,KAAKi5C,kCAAkCv3C,KAAe,KAAMqmB,GAC3E,IAAK8D,EAAU,OAAO7rB,KAAKL,OAAOiY,oBAClC5X,KAAK81C,YAAczyB,EAAA0B,KAAKO,IAAIwuB,WAAWjoB,GAGvC,IAAIxY,EAAQrT,KAAKw6C,sBAAsB3uB,GACvC,OAAIxY,EAAQ,EAAUrT,KAAKL,OAAOiY,oBAC3B5X,KAAKL,OAAOmS,UAAUuB,IAQ/BsiC,EAAAj0C,UAAAk8C,4BAAA,SACE3nC,EACA+mC,EACAuJ,GAGA,OAAQtwC,EAAWmQ,MAEjB,KAAK9C,EAAA+C,SAASuX,KACZ,OAAI59B,KAAK8kB,QAAQ+xB,UACVmG,EAAenrB,YAClB5I,OAA0B,GAAnB+zB,EAAe52B,MACtBpmB,KAAK81C,YAAczyB,EAAA0B,KAAK+vB,SAEnB90C,KAAKL,OAAOsS,UAAU,KAE1B+qC,EAAenrB,YAClB5I,OAA0B,GAAnB+zB,EAAe52B,MACtBpmB,KAAK81C,YAAczyB,EAAA0B,KAAK8vB,SAEnB70C,KAAKL,OAAOmS,UAAU,IAE/B,KAAKwR,EAAA+C,SAAS6X,KAEZ,OADAl+B,KAAK81C,YAAczyB,EAAA0B,KAAKU,KACjBzlB,KAAKL,OAAOmS,UAAU,GAE/B,KAAKwR,EAAA+C,SAAS2W,MAEZ,OADAh9B,KAAK81C,YAAczyB,EAAA0B,KAAKU,KACjBzlB,KAAKL,OAAOmS,UAAU,GAE/B,KAAKwR,EAAA+C,SAASuM,KACZ,OAAI5yB,KAAKw7B,gBAAgB3I,kBACvB7yB,KAAK81C,YAAc91C,KAAKw7B,gBAAgB3I,iBAAiBvf,KAClDtT,KAAKL,OAAOyT,eAAe,EAAGpT,KAAK81C,YAAYnd,kBAExD34B,KAAKoF,MACHge,EAAA7gB,eAAeuwB,+CACf7c,EAAWhT,OAEbjD,KAAK81C,YAAc91C,KAAK8kB,QAAQ+xB,SAAWxzB,EAAA0B,KAAK+vB,QAAUzxB,EAAA0B,KAAK8vB,QACxD70C,KAAKL,OAAOiY,qBAErB,KAAK0L,EAAA+C,SAAS0M,MACZ,OAAI/yB,KAAKw7B,gBAAgB3I,kBAAoB7yB,KAAKw7B,gBAAgB3I,iBAAiBZ,MACjFjyB,KAAK81C,YAAc91C,KAAKw7B,gBAAgB3I,iBAAiBZ,KAAK3e,KACvDtT,KAAKL,OAAOyT,eAAe,EAAGpT,KAAK81C,YAAYnd,kBAExD34B,KAAKoF,MACHge,EAAA7gB,eAAeywB,iDACf/c,EAAWhT,OAEbjD,KAAK81C,YAAc91C,KAAK8kB,QAAQ+xB,SAAWxzB,EAAA0B,KAAK+vB,QAAUzxB,EAAA0B,KAAK8vB,QACxD70C,KAAKL,OAAOiY,qBAIvB,IAAIuR,EAAWnpB,KAAKszB,QAAQlK,kBAC1BnT,EACAjW,KAAKw7B,gBACLx7B,KAAK61C,aAEP,IAAK1sB,EAAU,OAAOnpB,KAAKL,OAAOiY,oBAElC,IAAIiO,EAAUsD,EAAStD,QACvB,OAAQA,EAAQO,MAEd,KAAK4gB,EAAA3d,YAAYsI,MACf,OAAY9L,EAASmE,GAAGgd,EAAAnd,aAAagL,SAC5B70B,KAAKs4C,sBAA6BzyB,EAASm3B,EAAgBuJ,IAEpEt9B,OAAepD,EAASxS,OAAS,GACjCrT,KAAK81C,YAAsBjwB,EAASvS,KAC7BtT,KAAKL,OAAOyT,eAAuByS,EAASxS,MAAOrT,KAAK81C,YAAYnd,iBAE7E,KAAKqO,EAAA3d,YAAYc,OACf,OAAItE,EAAQmE,GAAGgd,EAAAnd,aAAaC,SACnBkrB,EAAAwR,mBAA0BxmD,KAAc6lB,EAAS5P,GAErDjW,KAAK83C,cAAsBjyB,IAGhCoD,OAAgBpD,EAASvS,MAAQ+P,EAAA0B,KAAKa,MACzBC,EAASmE,GAAGgd,EAAAnd,aAAagL,SAC7B70B,KAAKs4C,sBAA8BzyB,EAASm3B,EAAgBuJ,IAErEvmD,KAAK81C,YAAuBjwB,EAASvS,KAC9BtT,KAAKL,OAAO+T,gBAAyBmS,EAASrN,aAAcxY,KAAK81C,YAAYnd,kBAP3E34B,KAAKL,OAAOiY,oBASvB,KAAKovB,EAAA3d,YAAY4H,UACf,OAAKpL,EAAQmE,GAAGgd,EAAAnd,aAAakuB,WAQ7B/3C,KAAK81C,YAAczyB,EAAA0B,KAAK3G,IACRyH,EAASmE,GAAGgd,EAAAnd,aAAagL,SAChC70B,KAAKL,OAAOmS,UAAsB+T,EAASqO,eAE7Cl0B,KAAKL,OAAO+T,gBAA4BmS,EAASrN,aAAc+K,EAAAhe,WAAWoZ,OAX/E3e,KAAKoF,MACHge,EAAA7gB,eAAekkD,+HACfxwC,EAAWhT,OAEbjD,KAAK81C,YAAczyB,EAAA0B,KAAK3G,IACjBpe,KAAKL,OAAOiY,qBAYzB,OAJA5X,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAENjD,KAAKL,OAAOiY,qBAGrB+9B,EAAAj0C,UAAAm8C,yBAAA,SACE5nC,EACA+mC,EACA0J,GAEA,YAFA,IAAAA,OAAA,GAEQzwC,EAAWiX,aAEjB,OACEjE,QAAQy9B,GACR,IAAI70B,EAAYmrB,EAAenrB,UAC/B,OACEA,GACAA,GAAa7xB,KAAKszB,QAAQ9O,SAASrjB,IAAI,UACvC0wB,EAAU3B,eAAmD,GAAlC2B,EAAU3B,cAAc9rB,OAE5CpE,KAAK2mD,mBACV90B,EAAU3B,cAAc,GACCja,EAAY0xB,qBAGzC3nC,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAENjD,KAAKL,OAAOiY,qBAErB,OACE,IAAIgvC,EAAsC3wC,EAAY5U,MAItD,OAHIqlD,IACFE,GAAcA,GAEZ5J,GAAkB35B,EAAA0B,KAAKW,IAClB1lB,KAAKL,OAAO0S,UAAeu0C,IAEpC5mD,KAAK81C,YAAczyB,EAAA0B,KAAKY,IACjB3lB,KAAKL,OAAO4S,UAAUq0C,IAG/B,OACE,IAAIC,EAAsC5wC,EAAY5U,MAOtD,OANIqlD,IACFG,EAAWC,QACTlyB,QAAQ,GACRiyB,IAGI7J,EAAe52B,MAIrB,OACE,GAAI2gC,UAAUF,GACZ,OAAO7mD,KAAKL,OAAOmS,UAAUgJ,QAAQ+rC,IAEvC,MAEF,OACE,GAAIG,WAAWH,GACb,OAAO7mD,KAAKL,OAAOmS,UAAUgJ,QAAQ+rC,IAEvC,MAEF,OACE,GAAII,WAAWJ,GACb,OAAO7mD,KAAKL,OAAOmS,UAAUgJ,QAAQ+rC,IAEvC,MAEF,OACE,GAAIK,UAAUL,GACZ,OAAO7mD,KAAKL,OAAOmS,UAAUgJ,QAAQ+rC,IAEvC,MAEF,OACE,GAAIM,WAAWN,GACb,OAAO7mD,KAAKL,OAAOmS,UAAUgJ,QAAQ+rC,IAEvC,MAEF,OACE,GAAIO,WAAWP,GACb,OAAO7mD,KAAKL,OAAOmS,UAAUgJ,QAAQ+rC,IAEvC,MAEF,QACE,GAAIQ,YAAYR,GACd,OAAO7mD,KAAKL,OAAOmS,UAAUgJ,QAAQ+rC,IAEvC,MAEF,OASA,OACE,IAAK7mD,KAAK8kB,QAAQ+xB,SAAU,CAC1B,GAAIuQ,WAAWP,GACb,OAAO7mD,KAAKL,OAAOmS,UAAUgJ,QAAQ+rC,IAEvC,MAEF,OAAO7mD,KAAKL,OAAOsS,UAAU6I,QAAQ+rC,GAAW9rC,SAAS8rC,IAE3D,OACA,OACE,OAAO7mD,KAAKL,OAAOsS,UAAU6I,QAAQ+rC,GAAW9rC,SAAS8rC,IAE3D,QACE,GAAIS,WAAWT,GACb,OAAO7mD,KAAKL,OAAO0S,UAAUk1C,WAAWV,IAE1C,MAEF,QACE,GAAIW,WAAWX,GACb,OAAO7mD,KAAKL,OAAO4S,UAAUk1C,WAAWZ,IAE1C,MAEF,QACE,MAEF,QACE59B,QAAO,GAMX,OAAIg+B,WAAWJ,IACb7mD,KAAK81C,YAAczyB,EAAA0B,KAAK3G,IACjBpe,KAAKL,OAAOmS,UAAUgJ,QAAQ+rC,MAErC7mD,KAAK81C,YAAczyB,EAAA0B,KAAKG,IACjBllB,KAAKL,OAAOsS,UAAU6I,QAAQ+rC,GAAW9rC,SAAS8rC,KAG7D,OAEE,OADA59B,QAAQy9B,GACD1mD,KAAK0nD,oBAA8CzxC,EAAY5U,OAU1E,OALArB,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAEbjD,KAAK81C,YAAckH,EACZh9C,KAAKL,OAAOiY,qBAGrB+9B,EAAAj0C,UAAAgmD,oBAAA,SAAoBC,GAClB,IAAIC,EAAsC5nD,KAAKg2C,eAAe70C,IAAIwmD,GAClE,IAAKC,EAAe,CAClB,IAAIC,EAAeF,EAAYvjD,OAC3B0jD,EAAe,IAAInlC,WAAW,EAAmB,EAAfklC,GACtCC,EAAa,GAA6B,IAAvBD,EACnBC,EAAa,GAAMD,IAAkB,EAAK,IAC1CC,EAAa,GAAMD,IAAiB,GAAM,IAC1CC,EAAa,GAAMD,IAAiB,GAAM,IAC1C,IAAK,IAAIxnD,EAAI,EAAGA,EAAIwnD,IAAgBxnD,EAClCynD,EAAa,EAAQ,EAAJznD,GAA6C,IAAnCsnD,EAAYrjD,WAAWjE,GAClDynD,EAAa,EAAQ,EAAJznD,GAAUsnD,EAAYrjD,WAAWjE,KAAO,EAAK,IAEhEunD,EAAgB5nD,KAAKs6C,iBAAiBwN,EAAc9nD,KAAK8kB,QAAQU,UAAUoV,UAC3E56B,KAAKg2C,eAAeruB,IAAIggC,EAAaC,GAEvC,IAAIG,EAAeH,EAAcp3C,OAC7Bw3C,EAAahoD,KAAKszB,QAAQ7O,MAAMtjB,IAAI,UAExC,OADAnB,KAAK81C,YAAckS,GAA0BhoD,KAAK8kB,QAAQU,UACtDxlB,KAAK8kB,QAAQ+xB,SACR72C,KAAKL,OAAOsS,UAAU6I,QAAQitC,GAAehtC,SAASgtC,KAE/D9+B,OAAOg+B,WAAWc,IACX/nD,KAAKL,OAAOmS,UAAUgJ,QAAQitC,MAGvCpS,EAAAj0C,UAAAilD,mBAAA,SAAmBjC,EAAmBhc,GAGpC,IAIIna,EAJA05B,GAAW,EACXzU,EAAO9K,EAAYtkC,OAEnBg0C,EAAasM,EAAY/rB,eAE7B,OAAQyf,GAEN,KAAK70B,EAAAhe,WAAWoZ,IACd4P,EAASnd,WAAkB,IAAI82C,WAAW1U,IAC1C,MAEF,KAAKjwB,EAAAhe,WAAWsZ,IACd0P,EAASnd,WAAkB,IAAIlM,MAAWsuC,IAC1C,MAEF,KAAKjwB,EAAAhe,WAAWyZ,IACduP,EAASnd,WAAkB,IAAI+2C,aAAa3U,IAC5C,MAEF,KAAKjwB,EAAAhe,WAAW2Z,IACdqP,EAASnd,WAAkB,IAAIg3C,aAAa5U,IAC5C,MAEF,QACE,MAAM,IAAI71B,MAAM,0BAKpB,IAFA,IACIhL,EADA2zC,EAAQ,IAAIphD,MAAqBsuC,GAE5BnzC,EAAI,EAAGA,EAAImzC,IAAQnzC,EAI1B,GAHAimD,EAAMjmD,GAAKqoC,EAAYroC,GACnBL,KAAKk4C,kBAA8BxP,EAAYroC,GAAIqkD,GACnDA,EAAYnQ,aAAav0C,KAAKL,QAC9BsoD,EAEF,GADAt1C,EAAO3S,KAAKu4C,wBAAwB+N,EAAMjmD,IACtCme,yBAAyB7L,IAAS4Q,EAAA/d,aAAaiZ,MAEjD,OADAwK,OAAOvK,2BAA2B/L,IAASylC,GACnCA,GAEN,KAAK70B,EAAAhe,WAAWoZ,IACdvN,WAAkBmd,GAAQluB,GAAKue,0BAA0BjM,GACzD,MAEF,KAAK4Q,EAAAhe,WAAWsZ,IACdzN,WAAkBmd,GAAQluB,GAAKu0B,QAC7B9V,6BAA6BnM,GAC7BoM,8BAA8BpM,IAEhC,MAEF,KAAK4Q,EAAAhe,WAAWyZ,IACd5N,WAAkBmd,GAAQluB,GAAK4e,0BAA0BtM,GACzD,MAEF,KAAK4Q,EAAAhe,WAAW2Z,IACd9N,WAAkBmd,GAAQluB,GAAK8e,0BAA0BxM,GACzD,MAEF,QACEsW,QAAO,QAIXg/B,GAAW,EAYjB,MAAM,IAAItqC,MAAM,oBAGlBg4B,EAAAj0C,UAAAo8C,qBAAA,SAAqB7nC,EAA2B+mC,GAC9C,QAAI7zB,EAAWnpB,KAAKszB,QAAQ7B,kBAC1Bxb,EAAWA,WACXjW,KAAKw7B,iBAEP,GAAIrS,EACF,GAAIA,EAAStD,QAAQO,MAAQ4gB,EAAA3d,YAAYC,gBAAiB,CACxD,IACIuC,EAD4B1C,EAAStD,QAChBoK,0BACvBha,EAAWia,cACX,KACAja,GAEF,GAAI4V,EAAU,CACZ,IAAIw8B,EAAWrT,EAAAsT,gBAAuBtoD,KAAM6rB,EAAU5V,GAClD2mC,EAAe,IAAI13C,MAGnBg3C,EAAYl8C,KAAKw7B,gBAAgB/C,aAAaz4B,KAAK8kB,QAAQU,WAI/D,GAHAo3B,EAAan4C,KAAKzE,KAAKL,OAAOyV,eAAe8mC,EAAU7oC,MAAOg1C,IAG1Dx8B,EAAShB,YACX,IAAmB,IAAAtC,EAAAJ,EAAA0D,EAAShB,QAAQ0D,UAAQ2J,EAAA3P,EAAAF,QAAA6P,EAAA5P,KAAA4P,EAAA3P,EAAAF,OAAA,CAAvC,IAAIO,EAAMsP,EAAA72B,MACb,GAAIunB,EAAOxC,MAAQ4gB,EAAA3d,YAAYuI,MAAO,CACpC,IAAI22B,EAAe3/B,EACf6R,EAAmB8tB,EAAM7mD,UAAUqmB,YACnCwgC,EAAMv+B,GAAGgd,EAAAnd,aAAaoK,UACxBhL,QAAO,GACEwR,GAAoBA,EAAiBziB,aAC9C4kC,EAAan4C,KAAKzE,KAAKL,OAAOsU,YAAYs0C,EAAMj1C,KAAKsnB,SACnD56B,KAAKL,OAAOyT,eAAe8oC,EAAU7oC,MAAOrT,KAAK8kB,QAAQ0jC,gBACzDxoD,KAAKk4C,kBAAkBzd,EAAiBziB,YAAauwC,EAAMj1C,MAC3Di1C,EAAMj1C,KAAKqlB,eACX4vB,EAAM7uB,kHAQhB,IAAIY,EAAsBzO,EAASyO,oBAanC,OAZIA,GACFsiB,EAAan4C,KAAKzE,KAAK4lD,YAAYtrB,EAAqBrkB,EAAW8W,UAAW9W,EAC5EjW,KAAKL,OAAOyT,eAAe8oC,EAAU7oC,MAAOrT,KAAK8kB,QAAQ0jC,kBAK7D5L,EAAan4C,KAAKzE,KAAKL,OAAOyT,eAAe8oC,EAAU7oC,MAAOrT,KAAK8kB,QAAQ0jC,iBAC3ExoD,KAAKw7B,gBAAgB3C,cAAcqjB,GACnCmM,EAAWroD,KAAKL,OAAO6V,YAAY,KAAMonC,EAAc58C,KAAK8kB,QAAQ0jC,gBAEpExoD,KAAK81C,YAAcjqB,EAASvY,KACrB+0C,QAGTroD,KAAKoF,MACHge,EAAA7gB,eAAekmD,yEACfxyC,EAAWA,WAAWhT,OAI5B,OAAOjD,KAAKL,OAAOiY,qBAGrB+9B,EAAAj0C,UAAAq8C,+BAAA,SAA+B9nC,EAAqC+mC,GAElE,OAAOh9C,KAAKk4C,kBAAkBjiC,EAAWA,WAAY+mC,EAAc,IAQrErH,EAAAj0C,UAAAs8C,gCAAA,SACEzsB,EACAyrB,EACAuJ,GAEA,IAAIp9B,EAAWnpB,KAAKszB,QAAQhC,sBAAsBC,EAAgBvxB,KAAKw7B,iBACvE,IAAKrS,EAAU,OAAOnpB,KAAKL,OAAOiY,oBAElC,IACIotC,EADAn/B,EAAUsD,EAAStD,QAEvB,OAAQA,EAAQO,MAEd,KAAK4gB,EAAA3d,YAAYc,OACf,OAAItE,EAAQmE,GAAGgd,EAAAnd,aAAaC,SACnBkrB,EAAAwR,mBAA0BxmD,KAAc6lB,EAAS0L,GAErDvxB,KAAK83C,cAAsBjyB,IAGhCoD,OAAgBpD,EAASvS,MAAQ+P,EAAA0B,KAAKa,MACzBC,EAASmE,GAAGgd,EAAAnd,aAAagL,SAC7B70B,KAAKs4C,sBAA8BzyB,EAASm3B,EAAgBuJ,IAErEvmD,KAAK81C,YAAuBjwB,EAASvS,KAC9BtT,KAAKL,OAAO+T,gBAAyBmS,EAASrN,aAAcxY,KAAK81C,YAAYnd,kBAP3E34B,KAAKL,OAAOiY,oBASvB,KAAKovB,EAAA3d,YAAY4H,UACf,OAAKjxB,KAAK24C,YAAwB9yB,EAASsO,OAG3Cn0B,KAAK81C,YAAczyB,EAAA0B,KAAK3G,IACRyH,EAASmE,GAAGgd,EAAAnd,aAAagL,SAChC70B,KAAKL,OAAOmS,UAAsB+T,EAASqO,eAE7Cl0B,KAAKL,OAAO+T,gBAA4BmS,EAASrN,aAAc+K,EAAAhe,WAAWoZ,MANxE3e,KAAKL,OAAOiY,oBAQvB,KAAKovB,EAAA3d,YAAYuI,MAUf,OATA3I,OAA0B,MAAnBE,EAAS5R,QAChB0R,OAAoC,MAA7BE,EAASqI,kBAChBvI,OAAepD,EAAS6T,cAAgB,GACxCsrB,EAAahlD,KAAKk4C,kBACJ/uB,EAASqI,iBACrBxxB,KAAK8kB,QAAQU,UAAS,GAGxBxlB,KAAK81C,YAAsBjwB,EAASvS,KAC7BtT,KAAKL,OAAOiU,WACTiS,EAASvS,KAAKkgC,MAAQ,EACtB3tB,EAASvS,KAAK0W,GAAG,GACzBg7B,EACQn/B,EAASvS,KAAKqlB,eACd9S,EAAS6T,cAGrB,KAAKsN,EAAA3d,YAAYwE,SACf,IAAIhtB,EAAoBglB,EAASiI,gBACjC7E,OAAiB,MAAVpoB,GACP,IAAIwkD,EAAqCxkD,EAAQirB,QAAQ,MACzD,OAAKu5B,GACLp8B,QAAQo8B,EAAe7uB,aAAe6uB,EAAe7uB,WAAWpyB,QAChEpE,KAAK81C,YAAcuP,EAAe7tC,WAC9B6tC,EAAer7B,GAAGgd,EAAAnd,aAAakM,WACjCivB,EAAahlD,KAAKk4C,kBACJ/uB,EAASqI,iBACrBxxB,KAAK8kB,QAAQU,UAAS,GAGxBxlB,KAAK81C,YAAcuP,EAAe7tC,WAC3BxX,KAAKolD,SAASC,GAAkBL,KAEhChlD,KAAKolD,SAASC,IAZKrlD,KAAKL,OAAOiY,oBAmB5C,OAJA5X,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf0E,EAAetuB,OAEVjD,KAAKL,OAAOiY,qBAGrB+9B,EAAAj0C,UAAAu8C,yBAAA,SAAyBhoC,EAA+B+mC,GACtD,IAAIlnC,EAAYgmC,EACd97C,KAAKk4C,kBAAkBjiC,EAAWH,UAAWuN,EAAA0B,KAAKO,IAAG,GACrDtlB,KAAK81C,YACL91C,KAAKL,QAEH6qC,EAASxqC,KAAKk4C,kBAAkBjiC,EAAWu0B,OAAQwS,GACnDvS,EAASzqC,KAAKk4C,kBAAkBjiC,EAAWw0B,OAAQuS,GACvD,OAAOh9C,KAAKL,OAAO2W,SAASR,EAAW00B,EAAQC,IAGjDkL,EAAAj0C,UAAAw8C,8BAAA,SAA8BjoC,EAAoC+mC,GAEhE,IASItqC,EACA0lC,EACAsQ,EAyIAC,EApJAC,EAAW5oD,KAAKk4C,kBAClBjiC,EAAWm1B,QACX4R,GAAkB35B,EAAA0B,KAAKa,KACnBvC,EAAA0B,KAAK3G,IACL4+B,EAAc,GAElB,GAMEqD,GAAoB,EAExB,OAAQpqC,EAAWiyB,UAEjB,KAAKjB,EAAAhL,MAAM8D,UACT,GAAI//B,KAAK81C,YAAY9B,YAKnB,OAJAh0C,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAENjD,KAAKL,OAAOiY,oBAErB,OAAQ5X,KAAK81C,YAAY1vB,MAEvB,OACA,OACA,OACA,OACA,QACEi6B,GAAoB,EACtB,QACE3tC,EAAK6Q,EAAA1Y,SAASkuC,OACdX,EAAa70B,EAAAhe,WAAWoZ,IACxB+pC,EAAY1oD,KAAKL,OAAOmS,UAAU,GAClC,MAEF,OAEA,OACEY,EAAK1S,KAAK8kB,QAAQ+xB,SACdtzB,EAAA1Y,SAAS03C,OACTh/B,EAAA1Y,SAASkuC,OACbX,EAAap4C,KAAK8kB,QAAQ+xB,SACtBtzB,EAAAhe,WAAWsZ,IACX0E,EAAAhe,WAAWoZ,IACf+pC,EAAY1oD,KAAK81C,YAAYtB,YAAYx0C,KAAKL,QAC9C,MAEF,OACA,OACE+S,EAAK6Q,EAAA1Y,SAAS03C,OACdnK,EAAa70B,EAAAhe,WAAWsZ,IACxB6pC,EAAY1oD,KAAKL,OAAOsS,UAAU,GAClC,MAEF,QACES,EAAK6Q,EAAA1Y,SAAS23C,OACdpK,EAAa70B,EAAAhe,WAAWyZ,IACxB0pC,EAAY1oD,KAAKL,OAAO0S,UAAU,GAClC,MAEF,QACEK,EAAK6Q,EAAA1Y,SAAS43C,OACdrK,EAAa70B,EAAAhe,WAAW2Z,IACxBwpC,EAAY1oD,KAAKL,OAAO4S,UAAU,GAClC,MAEF,QAKE,MAJAvS,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAEP,IAAI0a,MAAM,0BAEpB,MAEF,KAAKspB,EAAAhL,MAAM+D,YACT,GAAIhgC,KAAK81C,YAAY9B,YAKnB,OAJAh0C,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAENjD,KAAKL,OAAOiY,oBAErB,OAAQ5X,KAAK81C,YAAY1vB,MAEvB,OACA,OACA,OACA,OACA,QACEi6B,GAAoB,EACtB,QACE3tC,EAAK6Q,EAAA1Y,SAAS63C,OACdtK,EAAa70B,EAAAhe,WAAWoZ,IACxB+pC,EAAY1oD,KAAKL,OAAOmS,UAAU,GAClC,MAEF,OAEA,OACEY,EAAK1S,KAAK8kB,QAAQ+xB,SACdtzB,EAAA1Y,SAAS83C,OACTp/B,EAAA1Y,SAAS63C,OACbtK,EAAap4C,KAAK8kB,QAAQ+xB,SACtBtzB,EAAAhe,WAAWsZ,IACX0E,EAAAhe,WAAWoZ,IACf+pC,EAAY1oD,KAAK81C,YAAYtB,YAAYx0C,KAAKL,QAC9C,MAEF,OACA,OACE+S,EAAK6Q,EAAA1Y,SAAS83C,OACdvK,EAAa70B,EAAAhe,WAAWsZ,IACxB6pC,EAAY1oD,KAAKL,OAAOsS,UAAU,GAClC,MAEF,QACES,EAAK6Q,EAAA1Y,SAAS+3C,OACdxK,EAAa70B,EAAAhe,WAAWyZ,IACxB0pC,EAAY1oD,KAAKL,OAAO0S,UAAU,GAClC,MAEF,QACEK,EAAK6Q,EAAA1Y,SAASg4C,OACdzK,EAAa70B,EAAAhe,WAAW2Z,IACxBwpC,EAAY1oD,KAAKL,OAAO4S,UAAU,GAClC,MAEF,QAKE,MAJAvS,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAEP,IAAI0a,MAAM,0BAEpB,MAEF,QAKE,MAJA3d,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAEP,IAAI0a,MAAM,mCAIpB,IAAIu+B,EAA0B,KAyB9B,OAtBIc,GAAkB35B,EAAA0B,KAAKa,KACzB+iC,EAAW3oD,KAAKL,OAAOkT,aAAaH,EAClCk2C,EACAF,IAKFxM,EAAYl8C,KAAKw7B,gBAAgB/C,aAAaz4B,KAAK81C,aACnD6S,EAAW3oD,KAAKL,OAAOkT,aAAaH,EAClC1S,KAAKL,OAAOyT,eAAe8oC,EAAU7oC,MAAO+kC,GAC5CsQ,IAIArI,IACFp3B,OAAOjpB,KAAK81C,YAAY9rB,GAAG,KAC3B2+B,EAAW5J,EAAqB4J,EAAU3oD,KAAK81C,YAAa91C,KAAKL,SAGnEgpD,EAAW3oD,KAAK+8C,2BAA2B9mC,EAAWm1B,QAASud,GAAU,GAErE3L,GAAkB35B,EAAA0B,KAAKa,MACzBqD,QAAQizB,GACDyM,IAGT3oD,KAAK81C,YAAc7sB,OAAOizB,GAAW5oC,KACrCtT,KAAKw7B,gBAAgB3C,cAAqBqjB,GACnCl8C,KAAKL,OAAO6V,YAAY,MAC7BxV,KAAKL,OAAOyV,eAAuB8mC,EAAW7oC,MAAOu1C,GACrDD,EACA3oD,KAAKL,OAAOyT,eAAuB8oC,EAAW7oC,MAAO+kC,IACpDA,KAGLzC,EAAAj0C,UAAAy8C,6BAAA,SACEloC,EACA+mC,EACAK,QAAA,IAAAA,OAAA,GAEA,IAEI1qC,EAFA0tC,GAAoB,EACpBD,GAAW,EAGf,OAAQnqC,EAAWiyB,UAEjB,KAAKjB,EAAAhL,MAAMwD,KACT,GAAIz/B,KAAK81C,YAAY9B,YAKnB,OAJAh0C,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAENjD,KAAKL,OAAOiY,oBAErBjF,EAAO3S,KAAKk4C,kBACVjiC,EAAWm1B,QACX4R,GAAkB35B,EAAA0B,KAAKa,KACnBvC,EAAA0B,KAAK3G,IACL4+B,EAAc,GAElB,GAEFqD,EAAoBrgD,KAAK81C,YAAY9rB,GAAG,IACxC,MAEF,KAAKid,EAAAhL,MAAMyD,MACT,GAAI1/B,KAAK81C,YAAY9B,YAKnB,OAJAh0C,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAENjD,KAAKL,OAAOiY,oBAErB,GAAI3B,EAAWm1B,QAAQhlB,MAAQ9C,EAAA+C,SAAS4G,SACa,GAA/BhX,EAAWm1B,QAASle,aACW,GAA/BjX,EAAWm1B,QAASle,YAcxC,OARAva,EAAO3S,KAAKk4C,kBACVjiC,EAAWm1B,QACX4R,GAAkB35B,EAAA0B,KAAKa,KACnBvC,EAAA0B,KAAK3G,IACL4+B,EAAc,GAElB,GAEMh9C,KAAK81C,YAAY1vB,MAEvB,OACA,OACA,OACA,OACA,QACEi6B,GAAoB,EACtB,QACE1tC,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS63C,OAAQ1iD,KAAKL,OAAOmS,UAAU,GAAIa,GAC3E,MAEF,OACE,GAAI3S,KAAK81C,YAAY9B,YAKnB,OAJAh0C,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAENjD,KAAKL,OAAOiY,oBAEvB,OACEjF,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAAS83C,OACTp/B,EAAA1Y,SAAS63C,OACb1iD,KAAK81C,YAAYvB,aAAav0C,KAAKL,QACnCgT,GAEF,MAEF,OACA,OACEA,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS83C,OAAQ3iD,KAAKL,OAAOsS,UAAU,GAAIU,GAC3E,MAEF,QACEA,EAAO3S,KAAKL,OAAO8S,YAAY8Q,EAAA1b,QAAQghD,OAAQl2C,GAC/C,MAEF,QACEA,EAAO3S,KAAKL,OAAO8S,YAAY8Q,EAAA1b,QAAQihD,OAAQn2C,QAnDnDA,EAAO3S,KAAK69C,yBAA4C5nC,EAAWm1B,QAAS4R,GAAgB,GAC5Fh9C,KAAKs7C,iBAAiB3oC,EAAMsD,EAAWhT,OAsDzC,MAEF,KAAKgkC,EAAAhL,MAAM8D,UACT,GAAI//B,KAAK81C,YAAY9B,YAKnB,OAJAh0C,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAENjD,KAAKL,OAAOiY,oBAYrB,OAVAwoC,GAAW,EACXztC,EAAO3S,KAAKk4C,kBACVjiC,EAAWm1B,QACX4R,GAAkB35B,EAAA0B,KAAKa,KACnBvC,EAAA0B,KAAK3G,IACL4+B,EAAc,GAElB,GAGMh9C,KAAK81C,YAAY1vB,MAEvB,OACA,OACA,OACA,OACA,QACEi6B,GAAoB,EACtB,QACE1tC,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASkuC,OAAQpmC,EAAM3S,KAAKL,OAAOmS,UAAU,IAC7E,MAEF,OACE,GAAI9R,KAAK81C,YAAY9B,YAKnB,OAJAh0C,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAENjD,KAAKL,OAAOiY,oBAGvB,OACEjF,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAAS03C,OACTh/B,EAAA1Y,SAASkuC,OACbpmC,EACA3S,KAAK81C,YAAYtB,YAAYx0C,KAAKL,SAEpC,MAEF,OACA,OACEgT,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS03C,OAAQ5vC,EAAM3S,KAAKL,OAAOsS,UAAU,IAC7E,MAEF,QACEU,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS23C,OAAQ7vC,EAAM3S,KAAKL,OAAO0S,UAAU,IAC7E,MAEF,QACEM,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS43C,OAAQ9vC,EAAM3S,KAAKL,OAAO4S,UAAU,IAGjF,MAEF,KAAK00B,EAAAhL,MAAM+D,YACT,GAAIhgC,KAAK81C,YAAY9B,YAKnB,OAJAh0C,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAENjD,KAAKL,OAAOiY,oBAYrB,OAVAwoC,GAAW,EACXztC,EAAO3S,KAAKk4C,kBACVjiC,EAAWm1B,QACX4R,GAAkB35B,EAAA0B,KAAKa,KACnBvC,EAAA0B,KAAK3G,IACL4+B,EAAc,GAElB,GAGMh9C,KAAK81C,YAAY1vB,MAEvB,OACA,OACA,OACA,OACA,QACEi6B,GAAoB,EAEtB,QACE1tC,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS63C,OAAQ/vC,EAAM3S,KAAKL,OAAOmS,UAAU,IAC7E,MAEF,OACE,GAAI9R,KAAK81C,YAAY9B,YAKnB,OAJAh0C,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAENjD,KAAKL,OAAOiY,oBAGvB,OACEjF,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAAS83C,OACTp/B,EAAA1Y,SAAS63C,OACb/vC,EACA3S,KAAK81C,YAAYtB,YAAYx0C,KAAKL,SAEpC,MAEF,OACA,OACEgT,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS83C,OAAQhwC,EAAM3S,KAAKL,OAAOsS,UAAU,IAC7E,MAEF,QACEU,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS+3C,OAAQjwC,EAAM3S,KAAKL,OAAO0S,UAAU,IAC7E,MAEF,QACEM,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAASg4C,OAAQlwC,EAAM3S,KAAKL,OAAO4S,UAAU,IAGjF,MAEF,KAAK00B,EAAAhL,MAAMsE,YAST5tB,EAAOo2C,EARPp2C,EAAO3S,KAAKk4C,kBACVjiC,EAAWm1B,QACX4R,GAAkB35B,EAAA0B,KAAKa,KACnBvC,EAAA0B,KAAK3G,IACL4+B,EAAc,GAElB,GAE0Bh9C,KAAK81C,YAAa91C,KAAKL,QACnDK,KAAK81C,YAAczyB,EAAA0B,KAAKU,KACxB,MAEF,KAAKwhB,EAAAhL,MAAMuE,MACT,GAAIxgC,KAAK81C,YAAY9B,YAKnB,OAJAh0C,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAENjD,KAAKL,OAAOiY,oBAerB,OAbAjF,EAAO3S,KAAKk4C,kBACVjiC,EAAWm1B,QACX4R,GAAkB35B,EAAA0B,KAAKa,KACnBvC,EAAA0B,KAAK3G,IACL4+B,EAAehzB,GAAE,GACf3G,EAAA0B,KAAKG,IACL83B,EACNA,GAAkB35B,EAAA0B,KAAKa,KACpB,EACA,GACH,GAGM5lB,KAAK81C,YAAY1vB,MAEvB,OACA,OACA,OACA,OACA,QACEi6B,GAAoB,EACtB,QACE1tC,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS05C,OAAQ5xC,EAAM3S,KAAKL,OAAOmS,WAAW,IAC9E,MAEF,OACE,GAAI9R,KAAK81C,YAAY9B,YAKnB,OAJAh0C,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAENjD,KAAKL,OAAOiY,oBAGvB,OACEjF,EAAO3S,KAAKL,OAAOkT,aACjB7S,KAAK8kB,QAAQ+xB,SACTtzB,EAAA1Y,SAAS25C,OACTjhC,EAAA1Y,SAAS05C,OACb5xC,EACA3S,KAAK81C,YAAYrB,eAAez0C,KAAKL,SAEvC,MAEF,OACA,OACEgT,EAAO3S,KAAKL,OAAOkT,aAAa0Q,EAAA1Y,SAAS25C,OAAQ7xC,EAAM3S,KAAKL,OAAOsS,WAAW,GAAI,IAGtF,MAEF,KAAKg1B,EAAAhL,MAAMoC,OAUT,MAJAr+B,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAEP,IAAI0a,MAAM,mBAElB,QAKE,MAJA3d,KAAKoF,MACHge,EAAA7gB,eAAesqB,wBACf5W,EAAWhT,OAEP,IAAI0a,MAAM,2BAMpB,OAJI0iC,GAAqBhD,IACvBp0B,OAAOjpB,KAAK81C,YAAY9rB,GAAG,KAC3BrX,EAAOosC,EAAqBpsC,EAAM3S,KAAK81C,YAAa91C,KAAKL,SAEpDygD,EACHpgD,KAAK+8C,2BAA2B9mC,EAAWm1B,QAASz4B,EAAMqqC,GAAkB35B,EAAA0B,KAAKa,MACjFjT,GAGNgjC,EAAAj0C,UAAA45C,iBAAA,SAAiB3oC,EAAqB1P,GACpC,GAA8B,MAA1BjD,KAAK8kB,QAAQtH,UAAmB,CAClC,IAAI5Z,EAASX,EAAMW,OACfA,EAAOy1B,eAAiB,IAC1Bz1B,EAAOy1B,eAAiBr5B,KAAKL,OAAO2gB,iBAAiB1c,EAAOC,iBAE9DZ,EAAMm2B,aAAezmB,EAChB3S,KAAKw7B,gBAAgB/D,iBAAgBz3B,KAAKw7B,gBAAgB/D,mBAC/Dz3B,KAAKw7B,gBAAgB/D,eAAehzB,KAAKxB,KAG/C0yC,EAn2JA,CAA8BvyB,EAAApe,mBAw2J9B,SAAA+5C,EAAqCpsC,EAAqBW,EAAY3T,GACpE,OAAQ2T,EAAK8S,MAEX,OACEzT,EAAOhT,EAAOkT,aAAa0Q,EAAA1Y,SAASk5C,OAClCpkD,EAAOkT,aAAa0Q,EAAA1Y,SAAS+4C,OAC3BjxC,EACAhT,EAAOmS,UAAU,KAEnBnS,EAAOmS,UAAU,KAEnB,MAEF,OACEa,EAAOhT,EAAOkT,aAAa0Q,EAAA1Y,SAASk5C,OAClCpkD,EAAOkT,aAAa0Q,EAAA1Y,SAAS+4C,OAC3BjxC,EACAhT,EAAOmS,UAAU,KAEnBnS,EAAOmS,UAAU,KAEnB,MAEF,OACEa,EAAOhT,EAAOkT,aAAa0Q,EAAA1Y,SAASs5C,OAClCxxC,EACAhT,EAAOmS,UAAU,MAEnB,MAEF,OACEa,EAAOhT,EAAOkT,aAAa0Q,EAAA1Y,SAASs5C,OAClCxxC,EACAhT,EAAOmS,UAAU,QAEnB,MAEF,QACEa,EAAOhT,EAAOkT,aAAa0Q,EAAA1Y,SAASs5C,OAClCxxC,EACAhT,EAAOmS,UAAU,IAEnB,MAEF,QACE,MAAM,IAAI6L,MAAM,0BAEpB,OAAOhL,EAIT,SAAAo2C,EAA+Bp2C,EAAqBW,EAAY3T,GAC9D,OAAQ2T,EAAK8S,MAEX,QACEzT,EAAOhT,EAAO8S,YAAY8Q,EAAA1b,QAAQmhD,OAAQr2C,GAC1C,MAEF,OACA,OACEA,EAAOhT,EAAO8S,YAAY8Q,EAAA1b,QAAQohD,OAAQt2C,GAC1C,MAEF,OAEA,OACEA,EAAOhT,EAAO8S,YAAyB,IAAba,EAAKkgC,KAAajwB,EAAA1b,QAAQohD,OAAS1lC,EAAA1b,QAAQmhD,OAAQr2C,GAC7E,MAEF,QACEA,EAAOhT,EAAOkT,aAAa0Q,EAAA1Y,SAASm3C,MAAOrvC,EAAMhT,EAAO0S,UAAU,IAClE,MAEF,QACEM,EAAOhT,EAAOkT,aAAa0Q,EAAA1Y,SAASo3C,MAAOtvC,EAAMhT,EAAO4S,UAAU,IAClE,MAEF,QACE,MAAM,IAAIoL,MAAM,0BAEpB,OAAOhL,EAIT,SAAAmpC,EACEnpC,EACAW,EACA3T,GAEA,OAAQ2T,EAAK8S,MAEX,OACA,OACEzT,EAAOhT,EAAOkT,aAAa0Q,EAAA1Y,SAASs3C,MAAOxvC,EAAMhT,EAAOsS,UAAU,IAClE,MAEF,OAEA,OACmB,IAAbqB,EAAKkgC,OACP7gC,EAAOhT,EAAOkT,aAAa0Q,EAAA1Y,SAASs3C,MAAOxvC,EAAMhT,EAAOsS,UAAU,KAEpE,MAEF,QACEU,EAAOhT,EAAOkT,aAAa0Q,EAAA1Y,SAASu3C,MAAOzvC,EAAMhT,EAAO0S,UAAU,IAClE,MAEF,QACEM,EAAOhT,EAAOkT,aAAa0Q,EAAA1Y,SAASw3C,MAAO1vC,EAAMhT,EAAO4S,UAAU,IAClE,MAEF,QACE,MAAM,IAAIoL,MAAM,0BAEpB,OAAOhL,EA39JIjT,EAAAi2C,WAw2Jbj2C,EAAAq/C,uBAmDAr/C,EAAAqpD,iBAiCArpD,EAAAo8C,+BC7mKA,IAAAoN,EAGAA,EAAA,WACA,OAAAlpD,KADA,GAIA,IAEAkpD,KAAApyB,SAAA,cAAAA,KAAA,EAAAqyB,MAAA,QACC,MAAAC,GAED,iBAAAC,SAAAH,EAAAG,QAOA1pD,EAAAD,QAAAwpD,iFCfA,IAAMI,EAAS,GAMf,SAAAzc,EAA0B5kB,GAKxB,IAJA,IAiBI6I,EAjBA4Q,EAAM,EACNv9B,EAAM8jB,EAAK7jB,OAGRs9B,EAAM,EAAIv9B,GACK,IAApB8jB,EAAK3jB,WAAWo9B,IAChBzZ,EAAK3jB,WAAWo9B,EAAM,IAAM4nB,GAE5B5nB,GAAO,EAUT,KAPIA,EAAM,GAAKv9B,EAAM8jB,EAAK7jB,UACxB6jB,EAAOA,EAAKzjB,UAAUk9B,EAAKv9B,GAC3BA,GAAOu9B,EACPA,EAAM,GAIDA,EAAM,EAAIv9B,GAAK,CAIpB,GAHA2sB,GAAQ,EAIN7I,EAAK3jB,WAAWo9B,IAAQ4nB,GACA,IAAxBrhC,EAAK3jB,WAAWo9B,EAAM,GACtB,CAGA,IADA5Q,EAAQ4Q,EAAM,GAAKv9B,IAEjBu9B,EAAM,EAAIv9B,GACV8jB,EAAK3jB,WAAWo9B,EAAM,IAAM4nB,EAC5B,CACArhC,EAAO6I,EACH7I,EAAKzjB,UAAU,EAAGk9B,GAClBzZ,EAAKzjB,UAAU,EAAGk9B,GAAOzZ,EAAKzjB,UAAUk9B,EAAM,GAClDv9B,GAAO,EACP,SAKF,IADA2sB,EAAQ4Q,EAAM,GAAKv9B,IACkB,IAAxB8jB,EAAK3jB,WAAWo9B,EAAM,IACjCA,EAAM,EAAIv9B,GACc,IAAxB8jB,EAAK3jB,WAAWo9B,EAAM,IACtBzZ,EAAK3jB,WAAWo9B,EAAM,IAAM4nB,EAC5B,CAGA,IADA,IAAIC,EAAO7nB,IACF6nB,GAAQ,GACf,GAAIthC,EAAK3jB,WAAWilD,IAASD,EAAW,CAClC5nB,EAAM6nB,GAAQ,GACS,IAAzBthC,EAAK3jB,WAAWilD,EAAO,IACE,IAAzBthC,EAAK3jB,WAAWilD,EAAO,KAEvBthC,EAAO6I,EACH7I,EAAKzjB,UAAU,EAAG+kD,GAClBthC,EAAKzjB,UAAU,EAAG+kD,GAAQthC,EAAKzjB,UAAUk9B,EAAM,GACnDv9B,GAAOu9B,EAAM,EAAI6nB,EACjB7nB,EAAM6nB,EAAO,GAEf,MAKJ,GAAIA,EAAO,GAAK7nB,EAAM,IACT,GAAPA,GACgB,IAAlBzZ,EAAK3jB,WAAW,IACE,IAAlB2jB,EAAK3jB,WAAW,IAChB,CAEAH,GADA8jB,EAAOA,EAAKzjB,UAAUk9B,EAAM,IACjBt9B,OACX,WAKRs9B,IAEF,OAAOv9B,EAAM,EAAI8jB,EAAO,IAc1B,SAAAuhC,EAAwB3lD,GAEtB,IADA,IAAI69B,EAAM79B,EAAeO,SAChBs9B,EAAM,GACb,GAAI79B,EAAeS,WAAWo9B,IAAQ4nB,EACpC,OAAOzlD,EAAeW,UAAU,EAAGk9B,GAGvC,MAAO,IArGThiC,EAAAmtC,YAoFAntC,EAAAosB,QAAA,SAAwBjoB,EAAwB4lD,GAC9C,OAAI5lD,EAAeipC,WAAW,QACrBjpC,EAEFgpC,EACL2c,EAAQC,GAAUvmC,OAAO8hB,aAAaskB,GAAazlD,IAKvDnE,EAAA8pD,yFCvGA,SAAkBE,GAEhBA,IAAA,eACAA,IAAA,wBACAA,IAAA,oCACAA,IAAA,oCACAA,IAAA,8CACAA,IAAA,yBAEAA,IAAA,kBACAA,IAAA,yCACAA,IAAA,sBACAA,IAAA,sBACAA,IAAA,wBACAA,IAAA,wBACAA,IAAA,wCACAA,IAAA,sCACAA,IAAA,oCACAA,IAAA,gCACAA,IAAA,0CACAA,IAAA,4BACAA,IAAA,4BACAA,IAAA,sCACAA,IAAA,8CACAA,IAAA,2CACAA,IAAA,4CACAA,IAAA,oBAEAA,IAAA,UAEAA,IAAA,YACAA,IAAA,YACAA,IAAA,YACAA,IAAA,YACAA,IAAA,YACAA,IAAA,YACAA,IAAA,YACAA,IAAA,YACAA,IAAA,YACAA,IAAA,YAEAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WACAA,IAAA,WAEAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UACAA,IAAA,UAEAA,IAAA,0BACAA,IAAA,wBACAA,IAAA,YACAA,IAAA,0BACAA,IAAA,wBACAA,IAAA,eACAA,IAAA,kBACAA,IAAA,6BACAA,IAAA,gCACAA,IAAA,4BACAA,IAAA,kBACAA,IAAA,kBACAA,IAAA,oBACAA,IAAA,cACAA,IAAA,8BACAA,IAAA,oBACAA,IAAA,8BACAA,IAAA,8BACAA,IAAA,gBACAA,IAAA,wBACAA,IAAA,kBACAA,IAAA,2BACAA,IAAA,8BACAA,IAAA,0BACAA,IAAA,sBACAA,IAAA,gBACAA,IAAA,wBACAA,IAAA,0BACAA,IAAA,8BACAA,IAAA,kBACAA,IAAA,mBAEAA,IAAA,yBACAA,IAAA,wBACAA,IAAA,qCACAA,IAAA,aACAA,IAAA,8BAnIF,CAAkBhqD,EAAAgqD,WAAAhqD,EAAAgqD,cAuIlBhqD,EAAA2E,YAAA,SAA4B3D,GAC1B,OAAQA,GACN,QACA,QACA,UACA,UACE,OAAO,EACT,QACE,OAAO,IAKbhB,EAAAokC,aAAA,SAA6BpjC,GAC3B,OAAQA,GACN,QACA,OACA,QACA,QACA,SACA,SACA,UACA,UACA,UACA,WACA,WACE,OAAO,EACT,QACE,OAAOA,GAAC,MAAuBA,GAAC,OAKtChB,EAAA8iC,eAAA,SAA+B9hC,GAC7B,OAAOA,GAAC,IAAmBA,GAAC,IAI9BhB,EAAAgmC,aAAA,SAA6BhlC,GAC3B,OAAOA,GAAC,IAAmBA,GAAC,IAI9BhB,EAAA8jC,kBAAA,SAAkC9iC,GAChC,OAAOA,GAAC,IAAkBA,GAAC,IACpBA,GAAC,IAAkBA,GAAC,KACnB,IAADA,GACC,IAADA,GACAA,EAAI,QAiLqBqC,EAjLYrC,GAkL9B,GAAKqC,EAAO,QACnB4mD,EAAmB5mD,EAAa6mD,GAFzC,IAAkC7mD,GA7KlCrD,EAAA+jC,mBAAA,SAAmC/iC,GACjC,OAAOA,GAAC,IAAkBA,GAAC,KAI7BhB,EAAAikC,iBAAA,SAAiCjjC,GAC/B,OAAOA,GAAC,IAAkBA,GAAC,IACpBA,GAAC,IAAkBA,GAAC,KACpBA,GAAC,IAAmBA,GAAC,IACpB,IAADA,GACC,IAADA,GACAA,EAAI,QAuKoBqC,EAvKYrC,GAwK7B,GAAKqC,EAAO,QACnB4mD,EAAmB5mD,EAAa8mD,GAFzC,IAAiC9mD,GAnKjC,IAAM6mD,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,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,M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","file":"assemblyscript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"binaryen\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"binaryen\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"assemblyscript\"] = factory(require(\"binaryen\"));\n\telse\n\t\troot[\"assemblyscript\"] = factory(root[\"binaryen\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE__17__) {\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 = 21);\n","import {\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/charcode\";\r\n\r\nexport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\nexport enum DiagnosticCategory {\r\n INFO,\r\n WARNING,\r\n ERROR\r\n}\r\n\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: return \"\";\r\n }\r\n}\r\n\r\nconst colorBlue: string = \"\\u001b[93m\";\r\nconst colorYellow: string = \"\\u001b[93m\";\r\nconst colorRed: string = \"\\u001b[91m\";\r\nconst colorReset: string = \"\\u001b[0m\";\r\n\r\nexport function diagnosticCategoryToColor(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return colorBlue;\r\n case DiagnosticCategory.WARNING: return colorYellow;\r\n case DiagnosticCategory.ERROR: return colorRed;\r\n default: return \"\";\r\n }\r\n}\r\n\r\nexport class DiagnosticMessage {\r\n\r\n code: i32;\r\n category: DiagnosticCategory;\r\n message: string;\r\n range: Range | null = null;\r\n\r\n 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 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 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 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 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 withRange(range: Range): this {\r\n this.range = range;\r\n return this;\r\n }\r\n\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.start.toString(10) +\r\n \",\" +\r\n this.range.end.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\nexport function formatDiagnosticMessage(\r\n message: DiagnosticMessage,\r\n useColors: bool = false,\r\n showContext: bool = false\r\n): string {\r\n // format context first (uses same string builder)\r\n var context = \"\";\r\n if (message.range && showContext) {\r\n context = formatDiagnosticContext(message.range, useColors);\r\n }\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(colorReset);\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 // range information if available\r\n if (message.range) {\r\n var range = message.range;\r\n if (showContext) {\r\n sb.push(\"\\n\");\r\n sb.push(context);\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\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(colorRed);\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(colorReset);\r\n return sb.join(\"\");\r\n}\r\n\r\nexport abstract class DiagnosticEmitter {\r\n\r\n diagnostics: DiagnosticMessage[];\r\n // silentDiagnostics: bool = false;\r\n\r\n constructor(diagnostics: DiagnosticMessage[] | null = null) {\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n }\r\n\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 ) {\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 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 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 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","import {\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) {\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 static readonly MAX_MEMORY_WASM32: Index = 0xffff;\r\n // TODO: static readonly MAX_MEMORY_WASM64\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 var 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[]\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.length);\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[]\r\n ): FunctionTypeRef {\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenGetFunctionTypeBySignature(this.ref, result, cArr, paramTypes.length);\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 strs = new Array(names.length);\r\n for (var i = 0, k: i32 = names.length; i < k; ++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, k, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n for (i = k - 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 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[],\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.length, 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 (var i = 0; i < k; ++i) {\r\n var buffer = segments[i].buffer;\r\n var 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 (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 k = passes.length;\r\n var names = new Array(k);\r\n for (var i = 0; i < k; ++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, k);\r\n } else {\r\n _BinaryenModuleRunPasses(this.ref, cArr, k);\r\n }\r\n } finally {\r\n free_memory(cArr);\r\n for (; i >= 0; --i) free_memory(names[i]);\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): Binary {\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 var binaryBytes = readInt(out + 4);\r\n sourceMapPtr = readInt(out + 4 * 2);\r\n var ret = new Binary();\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\r\n case ExpressionId.Const:\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32:\r\n return this.createI32(_BinaryenConstGetValueI32(expr));\r\n case NativeType.I64:\r\n return this.createI64(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n case NativeType.F32:\r\n return this.createF32(_BinaryenConstGetValueF32(expr));\r\n case NativeType.F64:\r\n return this.createF64(_BinaryenConstGetValueF64(expr));\r\n default:\r\n throw new Error(\"concrete type expected\");\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 var 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 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 ptr = allocate_memory(u8s.length);\r\n var idx = ptr;\r\n for (var i = 0, k = u8s.length; i < k; ++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 (var i = 0, k = i32s.length; i < k; ++i) {\r\n var 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 (var i = 0, k = str.length; i < k; ++i) {\r\n var 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 (var i = 0, k = str.length; i < k; ++i) {\r\n var 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\nexport function 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\nexport function readBuffer(ptr: usize, length: usize): Uint8Array {\r\n var ret = new Uint8Array(length);\r\n for (var 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\nclass Binary {\r\n /** WebAssembly binary. */\r\n output: Uint8Array;\r\n /** Source map, if generated. */\r\n sourceMap: string | null;\r\n}\r\n","import {\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 typesToString\r\n} from \"./types\";\r\n\r\nimport {\r\n ModifierKind,\r\n Node,\r\n NodeKind,\r\n Source,\r\n Range,\r\n TypeNode,\r\n TypeParameter,\r\n Decorator,\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 hasDecorator,\r\n hasModifier\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\nclass QueuedExport {\r\n isReExport: bool;\r\n referencedName: string;\r\n member: ExportMember;\r\n}\r\n\r\nclass QueuedImport {\r\n internalName: string;\r\n referencedName: string;\r\n referencedNameAlt: string;\r\n declaration: ImportDeclaration;\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 elements: Map = new Map();\r\n /** Types by internal name. */\r\n types: Map = noTypesYet;\r\n /** Declared type aliases. */\r\n typeAliases: Map = new Map();\r\n /** Exports of individual files by exported name. Not global exports. */\r\n exports: 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\r\n this.types = 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 (var i = 0, k = this.sources.length; i < k; ++i) {\r\n var source = this.sources[i];\r\n var statements = source.statements;\r\n for (var j = 0, l = statements.length; j < l; ++j) {\r\n var statement = statements[j];\r\n switch (statement.kind) {\r\n\r\n case NodeKind.CLASSDECLARATION:\r\n this.initializeClass(\r\n statement,\r\n queuedDerivedClasses\r\n );\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(\r\n statement,\r\n queuedExports\r\n );\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(\r\n statement,\r\n queuedExports,\r\n queuedImports\r\n );\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(\r\n statement,\r\n queuedDerivedClasses\r\n );\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 var element: Element | null;\r\n\r\n // queued imports should be resolvable now through traversing exports and\r\n // queued exports\r\n for (i = 0; i < queuedImports.length;) {\r\n var queuedImport = queuedImports[i];\r\n element = this.tryResolveImport(\r\n queuedImport.referencedName,\r\n queuedExports\r\n );\r\n if (element) {\r\n this.elements.set(queuedImport.internalName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n element = this.tryResolveImport(\r\n queuedImport.referencedNameAlt,\r\n queuedExports\r\n );\r\n if (element) {\r\n this.elements.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 (var [exportName, queuedExport] of queuedExports) {\r\n var currentExport: QueuedExport | null = queuedExport; // nullable below\r\n do {\r\n if (currentExport.isReExport) {\r\n if (element = this.exports.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 ((\r\n queuedExport.member.parent\r\n ).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.elements.get(currentExport.referencedName)) ||\r\n // library re-export\r\n (element = this.elements.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 (i = 0, k = queuedDerivedClasses.length; i < k; ++i) {\r\n var derivedDeclaration = queuedDerivedClasses[i].declaration;\r\n var derivedType = assert(derivedDeclaration.extendsType);\r\n var 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 do {\r\n if (element = this.exports.get(referencedName)) {\r\n return element;\r\n }\r\n var 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.elements.get(queuedExport.referencedName);\r\n } while (true);\r\n }\r\n\r\n private checkInternalDecorators(\r\n element: Element,\r\n declaration: DeclarationStatement\r\n ): void {\r\n var isBuiltin: bool = hasDecorator(\"builtin\", declaration.decorators);\r\n if (isBuiltin) {\r\n element.set(ElementFlags.BUILTIN);\r\n }\r\n if (\r\n hasDecorator(\"global\", declaration.decorators) ||\r\n (\r\n declaration.range.source.isLibrary &&\r\n element.is(ElementFlags.EXPORTED) &&\r\n (\r\n assert(declaration.parent).kind == NodeKind.SOURCE ||\r\n (\r\n declaration.parent).kind == NodeKind.VARIABLE &&\r\n assert((declaration.parent).parent).kind == NodeKind.SOURCE\r\n )\r\n )\r\n ) {\r\n element.set(ElementFlags.GLOBAL);\r\n if (this.elements.has(declaration.name.text)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, element.internalName\r\n );\r\n } else {\r\n this.elements.set(declaration.name.text, element);\r\n this.exports.set(declaration.name.text, element);\r\n if (isBuiltin) {\r\n element.internalName = declaration.name.text;\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.elements.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 ClassPrototype(\r\n this,\r\n declaration.name.text,\r\n internalName,\r\n declaration\r\n );\r\n prototype.namespace = namespace;\r\n this.elements.set(internalName, prototype);\r\n\r\n this.checkInternalDecorators(prototype, declaration);\r\n\r\n if (hasDecorator(\"unmanaged\", declaration.decorators)) {\r\n prototype.isUnmanaged = true;\r\n if (declaration.implementsTypes && declaration.implementsTypes.length) {\r\n this.error(\r\n DiagnosticCode.Structs_cannot_implement_interfaces,\r\n Range.join(\r\n declaration.name.range,\r\n declaration.implementsTypes[declaration.implementsTypes.length - 1]\r\n .range\r\n )\r\n );\r\n }\r\n } else if (declaration.implementsTypes.length) {\r\n throw new Error(\"not implemented\");\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(declaration.name.text)) {\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(declaration.name.text, prototype);\r\n\r\n // otherwise add to file-level exports if exported\r\n } else if (prototype.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.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.exports.set(internalName, prototype);\r\n }\r\n\r\n // initialize members\r\n var memberDeclarations = declaration.members;\r\n for (var i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n var 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 var isGetter = hasModifier(\r\n ModifierKind.GET,\r\n memberDeclaration.modifiers\r\n );\r\n if (\r\n isGetter ||\r\n hasModifier(ModifierKind.SET, memberDeclaration.modifiers)\r\n ) {\r\n this.initializeAccessor(\r\n memberDeclaration,\r\n prototype,\r\n isGetter\r\n );\r\n } else {\r\n this.initializeMethod(\r\n memberDeclaration,\r\n prototype\r\n );\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 // check and possibly register string type\r\n if (\r\n prototype.is(ElementFlags.GLOBAL) &&\r\n declaration.name.text == \"String\"\r\n ) {\r\n if (!this.types.has(\"string\")) {\r\n var instance = prototype.resolve(null);\r\n if (instance) {\r\n this.types.set(\"string\", instance.type);\r\n }\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 (hasModifier(ModifierKind.STATIC, declaration.modifiers)) {\r\n if (this.elements.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 var staticField = new Global(\r\n this, name, internalName, declaration, Type.void\r\n );\r\n classPrototype.members.set(name, staticField);\r\n this.elements.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 var instanceField = new FieldPrototype(\r\n classPrototype,\r\n name, 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 name = 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 (hasModifier(ModifierKind.STATIC, declaration.modifiers)) {\r\n assert(declaration.name.kind != NodeKind.CONSTRUCTOR);\r\n\r\n if (this.elements.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(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 prototype = new FunctionPrototype(\r\n this,\r\n name, internalName,\r\n declaration,\r\n null\r\n );\r\n classPrototype.members.set(name, prototype);\r\n this.elements.set(internalName, prototype);\r\n\r\n // instance methods 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 prototype = new FunctionPrototype(\r\n this,\r\n name, 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(ElementFlags.CONSTRUCTOR);\r\n classPrototype.constructorPrototype = prototype;\r\n }\r\n } else {\r\n classPrototype.instanceMembers.set(name, prototype);\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: Decorator[] | null,\r\n prototype: FunctionPrototype,\r\n classPrototype: ClassPrototype\r\n ) {\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 (var i = 0, k = decorators.length; i < k; ++i) {\r\n var 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 var numArgs = decorator.arguments && decorator.arguments.length || 0;\r\n if (numArgs == 1) {\r\n var 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\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 } 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 isGetter: bool\r\n ): void {\r\n var propertyName = declaration.name.text;\r\n var internalPropertyName = declaration.fileLevelInternalName;\r\n\r\n var propertyElement = this.elements.get(internalPropertyName);\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 )\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 propertyName, internalPropertyName,\r\n classPrototype\r\n );\r\n }\r\n\r\n var name = (isGetter ? GETTER_PREFIX : SETTER_PREFIX) + propertyName;\r\n\r\n // static accessors become global functions\r\n if (hasModifier(ModifierKind.STATIC, declaration.modifiers)) {\r\n var staticName = classPrototype.internalName + STATIC_DELIMITER + name;\r\n if (this.elements.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 var staticPrototype = new FunctionPrototype(\r\n this,\r\n name, 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 (!classPrototype.members) {\r\n classPrototype.members = new Map();\r\n }\r\n classPrototype.members.set(propertyName, propertyElement); // check above\r\n this.elements.set(internalPropertyName, propertyElement);\r\n\r\n // instance accessors are remembered until resolved\r\n } else {\r\n var instanceName = classPrototype.internalName + INSTANCE_DELIMITER + name;\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, internalPropertyName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n var instancePrototype = new FunctionPrototype(\r\n this,\r\n name, 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(name, propertyElement);\r\n this.elements.set(internalPropertyName, propertyElement);\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.elements.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 enm = new Enum(this, declaration.name.text, internalName, declaration);\r\n enm.namespace = namespace;\r\n this.elements.set(internalName, enm);\r\n\r\n this.checkInternalDecorators(enm, declaration);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(declaration.name.text)) {\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(declaration.name.text, enm);\r\n } else if (enm.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.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.exports.set(internalName, enm);\r\n }\r\n\r\n var values = declaration.values;\r\n for (var i = 0, k = values.length; i < k; ++i) {\r\n this.initializeEnumValue(values[i], enm);\r\n }\r\n }\r\n\r\n private initializeEnumValue(\r\n declaration: EnumValueDeclaration,\r\n enm: Enum\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n if (enm.members) {\r\n if (enm.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n enm.members = new Map();\r\n }\r\n var value = new EnumValue(enm, this, name, internalName, declaration);\r\n enm.members.set(name, value);\r\n }\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 (var 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.exports.set(name, element);\r\n if (identifier.range.source.isLibrary) { // add global alias\r\n if (this.elements.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.elements.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.exports.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.elements.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.elements.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 var seen = new Set();\r\n while (queuedExport = queuedExports.get(referencedName)) {\r\n if (queuedExport.isReExport) {\r\n referencedElement = this.exports.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.elements.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.elements.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 FunctionPrototype(\r\n this,\r\n declaration.name.text, internalName,\r\n declaration,\r\n null\r\n );\r\n prototype.namespace = namespace;\r\n this.elements.set(internalName, prototype);\r\n\r\n this.checkInternalDecorators(prototype, declaration);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(declaration.name.text)) {\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(declaration.name.text, prototype);\r\n } else if (prototype.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.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.exports.set(internalName, prototype);\r\n }\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 (var 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 var internalName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n statement.namespaceName.text\r\n );\r\n if (this.elements.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.elements.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.exports.get(referencedName)) {\r\n this.elements.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.elements.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.elements.set(internalName, prototype);\r\n\r\n this.checkInternalDecorators(prototype, declaration);\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 } else if (prototype.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.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.exports.set(internalName, prototype);\r\n }\r\n\r\n var memberDeclarations = declaration.members;\r\n for (var i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n var 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 var isGetter = hasModifier(ModifierKind.GET, memberDeclaration.modifiers);\r\n if (isGetter || hasModifier(ModifierKind.SET, memberDeclaration.modifiers)) {\r\n this.initializeAccessor(memberDeclaration, prototype, isGetter);\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 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\r\n var namespace = this.elements.get(internalName);\r\n if (!namespace) {\r\n namespace = new Namespace(this, declaration.name.text, internalName, declaration);\r\n namespace.namespace = parentNamespace;\r\n this.elements.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(declaration.name.text)) {\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(declaration.name.text, namespace);\r\n } else if (namespace.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.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.exports.set(internalName, namespace);\r\n }\r\n\r\n var members = declaration.members;\r\n for (var i = 0, k = members.length; i < k; ++i) {\r\n switch (members[i].kind) {\r\n\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 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.types.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 this.typeAliases.set(name, declaration.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 (var i = 0, k = declarations.length; i < k; ++i) {\r\n var declaration = declarations[i];\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elements.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\r\n var global = new Global(\r\n this,\r\n declaration.name.text,\r\n internalName,\r\n declaration,\r\n Type.void // resolved later on\r\n );\r\n global.namespace = namespace;\r\n this.elements.set(internalName, global);\r\n\r\n this.checkInternalDecorators(global, declaration);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(declaration.name.text)) {\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(declaration.name.text, global);\r\n } else if (global.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.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.exports.set(internalName, global);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Resolves a {@link TypeNode} to a concrete {@link Type}. */\r\n resolveType(\r\n node: TypeNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportNotFound: bool = true\r\n ): Type | null {\r\n var globalName = node.name.text;\r\n var localName = node.range.source.internalPath + PATH_DELIMITER + node.name.text;\r\n\r\n var element: Element | null;\r\n\r\n // check file-global / program-global element\r\n if ((element = this.elements.get(localName)) || (element = this.elements.get(globalName))) {\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE:\r\n var instance = (element).resolveUsingTypeArguments(\r\n node.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 // resolve parameters\r\n var k = node.typeArguments.length;\r\n var paramTypes = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n var paramType = this.resolveType( // reports\r\n node.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 var 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 var placeholderType = contextualTypeArguments.get(globalName);\r\n if (placeholderType) return placeholderType;\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.types.get(localName)) || (type = this.types.get(globalName))) {\r\n return type;\r\n }\r\n\r\n // check type alias\r\n var alias = this.typeAliases.get(globalName);\r\n if (alias && (type = this.resolveType(alias, null, reportNotFound))) {\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 node.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: TypeParameter[],\r\n typeArgumentNodes: TypeNode[] | 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 (var i = 0; i < parameterCount; ++i) {\r\n var 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.elements.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.elements.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.elements.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\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD:\r\n if (!(targetType = (target).type).classType) {\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.classType;\r\n break;\r\n\r\n case ElementKind.PROPERTY:\r\n var getter = assert((target).getterPrototype).resolve(); // reports\r\n if (!getter) return null;\r\n if (!(targetType = getter.returnType).classType) {\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.classType;\r\n break;\r\n }\r\n\r\n // Look up the member within\r\n switch (target.kind) {\r\n\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 cbase 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 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\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD:\r\n var type = (target).type;\r\n if (type.classType) {\r\n var indexedGetName = (target = type.classType).prototype.fnIndexedGet;\r\n var 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.classType, targetExpression);\r\n }\r\n }\r\n break;\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 var classType: Class | null;\r\n\r\n while (expression.kind == NodeKind.PARENTHESIZED) {\r\n expression = (expression).expression;\r\n }\r\n\r\n switch (expression.kind) {\r\n\r\n case NodeKind.ASSERTION:\r\n var type = this.resolveType((expression).toType); // reports\r\n if (type && (classType = type.classType)) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(classType);\r\n }\r\n return null;\r\n\r\n case NodeKind.BINARY:\r\n // TODO: string concatenation, mostly\r\n throw new Error(\"not implemented\");\r\n\r\n case NodeKind.THIS: // -> Class\r\n if (classType = contextualFunction.instanceMethodOf) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(classType);\r\n }\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n return null;\r\n\r\n case NodeKind.SUPER: // -> Class\r\n if ((classType = contextualFunction.instanceMethodOf) && (classType = classType.base)) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(classType);\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 var resolved = this.resolveExpression(\r\n (expression).expression,\r\n contextualFunction\r\n );\r\n if (resolved) {\r\n var element = resolved.element;\r\n if (element && element.kind == ElementKind.FUNCTION_PROTOTYPE) {\r\n var instance = (element).resolveUsingTypeArguments(\r\n (expression).typeArguments,\r\n null,\r\n expression\r\n );\r\n if (instance && instance.returnType.classType) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(instance.returnType.classType);\r\n }\r\n }\r\n }\r\n break;\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\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 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 an {@link Element}. */\r\nexport enum ElementFlags {\r\n /** No flags set. */\r\n NONE = 0,\r\n /** Is compiled. */\r\n COMPILED = 1 << 0,\r\n /** Is an import. */\r\n IMPORTED = 1 << 1,\r\n /** Is an export. */\r\n EXPORTED = 1 << 2,\r\n /** Is built-in. */\r\n BUILTIN = 1 << 3,\r\n /** Is declared. */\r\n DECLARED = 1 << 4,\r\n /** Is generic. */\r\n GENERIC = 1 << 5,\r\n /** Is constant. */\r\n CONSTANT = 1 << 6,\r\n /** Has a constant value and is therefore inlined. */\r\n INLINED = 1 << 7,\r\n /** Is instance member. */\r\n INSTANCE = 1 << 8,\r\n /** Is getter. */\r\n GETTER = 1 << 9,\r\n /** Is setter. */\r\n SETTER = 1 << 10,\r\n /** Is global. */\r\n GLOBAL = 1 << 11,\r\n /** Is read-only. */\r\n READONLY = 1 << 12,\r\n /** Is a public member. */\r\n PUBLIC = 1 << 13,\r\n /** Is a protected member. */\r\n PROTECTED = 1 << 14,\r\n /** Is a private member. */\r\n PRIVATE = 1 << 15,\r\n /** Is an abstract member. */\r\n ABSTRACT = 1 << 16,\r\n /** Is a constructor. */\r\n CONSTRUCTOR = 1 << 17,\r\n /** Is an unmanaged class with limited capabilites. */\r\n UNMANAGED = 1 << 18,\r\n /** Is scoped. */\r\n SCOPED = 1 << 19,\r\n /** Is the start function. */\r\n START = 1 << 20\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 /** Element flags. */\r\n flags: ElementFlags = ElementFlags.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: ElementFlags): bool { return (this.flags & flag) == flag; }\r\n\r\n /** Sets a specific flag or flags. */\r\n set(flag: ElementFlags): 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 if (this.declaration.modifiers) {\r\n for (var i = 0, k = this.declaration.modifiers.length; i < k; ++i) {\r\n switch (this.declaration.modifiers[i].modifierKind) {\r\n case ModifierKind.IMPORT: this.set(ElementFlags.IMPORTED); break;\r\n case ModifierKind.EXPORT: this.set(ElementFlags.EXPORTED); break;\r\n case ModifierKind.DECLARE: this.set(ElementFlags.DECLARED); break;\r\n default: throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\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 if (this.declaration.modifiers) {\r\n for (var i = 0, k = this.declaration.modifiers.length; i < k; ++i) {\r\n switch (this.declaration.modifiers[i].modifierKind) {\r\n case ModifierKind.EXPORT: this.set(ElementFlags.EXPORTED); break;\r\n case ModifierKind.IMPORT: this.set(ElementFlags.IMPORTED); break;\r\n case ModifierKind.DECLARE: this.set(ElementFlags.DECLARED); break;\r\n case ModifierKind.CONST: this.set(ElementFlags.CONSTANT); break;\r\n default: throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\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(ElementFlags.CONSTANT | ElementFlags.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(ElementFlags.CONSTANT | ElementFlags.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 if (this.declaration.modifiers) {\r\n for (var i = 0, k = this.declaration.modifiers.length; i < k; ++i) {\r\n switch (this.declaration.modifiers[i].modifierKind) {\r\n\r\n case ModifierKind.IMPORT:\r\n this.set(ElementFlags.IMPORTED);\r\n break;\r\n\r\n case ModifierKind.EXPORT:\r\n this.set(ElementFlags.EXPORTED);\r\n break;\r\n\r\n case ModifierKind.CONST:\r\n this.set(ElementFlags.CONSTANT);\r\n break;\r\n\r\n case ModifierKind.LET:\r\n this.set(ElementFlags.SCOPED);\r\n break;\r\n\r\n case ModifierKind.DECLARE:\r\n this.set(ElementFlags.DECLARED);\r\n break;\r\n\r\n case ModifierKind.READONLY:\r\n this.set(this.declaration.initializer\r\n ? ElementFlags.CONSTANT | ElementFlags.READONLY\r\n : ElementFlags.READONLY\r\n );\r\n break;\r\n\r\n case ModifierKind.PUBLIC:\r\n case ModifierKind.PRIVATE:\r\n case ModifierKind.PROTECTED:\r\n case ModifierKind.STATIC:\r\n break; // static fields become globals\r\n\r\n default:\r\n throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\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. */\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 if (this.declaration.modifiers) {\r\n for (var i = 0, k = this.declaration.modifiers.length; i < k; ++i) {\r\n switch (this.declaration.modifiers[i].modifierKind) {\r\n\r\n case ModifierKind.IMPORT:\r\n this.set(ElementFlags.IMPORTED);\r\n break;\r\n\r\n case ModifierKind.EXPORT:\r\n this.set(ElementFlags.EXPORTED);\r\n break;\r\n\r\n case ModifierKind.DECLARE:\r\n this.set(ElementFlags.DECLARED);\r\n break;\r\n\r\n case ModifierKind.GET:\r\n this.set(ElementFlags.GETTER);\r\n break;\r\n\r\n case ModifierKind.SET:\r\n this.set(ElementFlags.SETTER);\r\n break;\r\n\r\n case ModifierKind.STATIC:\r\n case ModifierKind.ABSTRACT:\r\n case ModifierKind.PRIVATE:\r\n case ModifierKind.PROTECTED:\r\n case ModifierKind.PUBLIC:\r\n break; // already handled\r\n\r\n default:\r\n throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\r\n if (this.declaration.isGeneric) {\r\n this.set(ElementFlags.GENERIC);\r\n }\r\n if (this.classPrototype = classPrototype) {\r\n this.set(ElementFlags.INSTANCE);\r\n }\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\r\n // inherit contextual type arguments\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (var [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n\r\n var i: i32, k: i32;\r\n\r\n // inherit class type arguments if a partially resolved instance method (classTypeArguments is set)\r\n if (this.classTypeArguments) {\r\n if (!this.classPrototype) {\r\n throw new Error(\"partially resolved instance method must reference its class prototype\");\r\n }\r\n var classDeclaration = (this.classPrototype).declaration;\r\n var classTypeParameters = classDeclaration.typeParameters;\r\n if ((k = this.classTypeArguments.length) != classTypeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n for (i = 0; i < k; ++i) {\r\n contextualTypeArguments.set(classTypeParameters[i].name.text, this.classTypeArguments[i]);\r\n }\r\n }\r\n\r\n // override call specific contextual type arguments\r\n var functionTypeParameters = declaration.typeParameters;\r\n if (functionTypeArguments && (k = functionTypeArguments.length)) {\r\n if (!functionTypeParameters || k != functionTypeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n for (i = 0; i < k; ++i) {\r\n contextualTypeArguments.set(functionTypeParameters[i].name.text, functionTypeArguments[i]);\r\n }\r\n }\r\n\r\n // resolve parameters\r\n // TODO: 'this' type\r\n k = declaration.parameters.length;\r\n var parameters = new Array(k);\r\n var parameterTypes = new Array(k);\r\n var typeNode: TypeNode | null;\r\n for (i = 0; i < k; ++i) {\r\n var parameterDeclaration = declaration.parameters[i];\r\n typeNode = assert(parameterDeclaration.type);\r\n var parameterType = this.program.resolveType(typeNode, contextualTypeArguments, true); // reports\r\n if (parameterType) {\r\n parameters[i] = new Parameter(parameterDeclaration.name.text, parameterType, parameterDeclaration.initializer);\r\n parameterTypes[i] = parameterType;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n var internalName = this.internalName;\r\n if (instanceKey.length) {\r\n internalName += \"<\" + instanceKey + \">\";\r\n }\r\n var classInstance: Class | null = null;\r\n if (this.classPrototype) {\r\n classInstance = this.classPrototype.resolve(this.classTypeArguments, contextualTypeArguments); // reports\r\n if (!classInstance) return null;\r\n }\r\n\r\n // resolve return type\r\n // TODO: 'this' type\r\n var returnType: Type;\r\n if (this.is(ElementFlags.SETTER) || this.is(ElementFlags.CONSTRUCTOR)) {\r\n returnType = Type.void; // not annotated\r\n } else {\r\n typeNode = assert(declaration.returnType);\r\n var type = this.program.resolveType(typeNode, contextualTypeArguments, true); // reports\r\n if (type) {\r\n returnType = type;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n instance = new Function(this, internalName, functionTypeArguments, parameters, returnType, classInstance);\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 if (!this.classPrototype) {\r\n throw new Error(\"partially resolved instance method must reference its class prototype\");\r\n }\r\n if (classTypeArguments && classTypeArguments.length) {\r\n var 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: TypeNode[] | 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(ElementFlags.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: TypeNode[] | null,\r\n contextualTypeArguments: Map | null\r\n ): Type[] | null {\r\n assert(this.is(ElementFlags.BUILTIN));\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (typeArgumentNodes) {\r\n var k = typeArgumentNodes.length;\r\n resolvedTypeArguments = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n var 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 /** Concrete type arguments. */\r\n typeArguments: Type[] | null;\r\n /** Concrete function parameters. Excluding `this` if an instance method. */\r\n parameters: Parameter[] | null;\r\n /** Concrete return type. */\r\n returnType: Type;\r\n /** If an instance method, the concrete class it is a member of. */\r\n instanceMethodOf: Class | 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\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 typeArguments: Type[] | null,\r\n parameters: Parameter[] | null,\r\n returnType: Type,\r\n instanceMethodOf: Class | null = null\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName);\r\n this.prototype = prototype;\r\n this.typeArguments = typeArguments;\r\n this.parameters = parameters || [];\r\n this.returnType = returnType;\r\n this.instanceMethodOf = instanceMethodOf;\r\n this.flags = prototype.flags;\r\n if (!(prototype.is(ElementFlags.BUILTIN) || prototype.is(ElementFlags.DECLARED))) {\r\n var localIndex = 0;\r\n if (instanceMethodOf) {\r\n assert(this.is(ElementFlags.INSTANCE)); // internal error\r\n this.locals.set(\"this\", new Local(prototype.program, \"this\", localIndex++, instanceMethodOf.type));\r\n if (instanceMethodOf.contextualTypeArguments) {\r\n if (!this.contextualTypeArguments) {\r\n this.contextualTypeArguments = new Map();\r\n }\r\n for (var [inheritedName, inheritedType] of instanceMethodOf.contextualTypeArguments) {\r\n this.contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n } else {\r\n assert(!this.is(ElementFlags.INSTANCE)); // internal error\r\n }\r\n for (var i = 0, k = this.parameters.length; i < k; ++i) {\r\n var parameter = this.parameters[i];\r\n var parameterName = assert(parameter.name, \"parameter must be named\"); // not a builtin or declared\r\n this.locals.set(\r\n parameterName,\r\n new Local(\r\n prototype.program,\r\n parameterName,\r\n localIndex++,\r\n parameter.type\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.parameters ? this.parameters.length : 0) + this.additionalLocals.length;\r\n if (this.is(ElementFlags.INSTANCE)) localIndex++; // plus 'this'\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: temps = this.tempI32s; break;\r\n case NativeType.I64: temps = this.tempI64s; break;\r\n case NativeType.F32: temps = this.tempF32s; break;\r\n case NativeType.F64: temps = this.tempF64s; break;\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n if (temps && temps.length) {\r\n var 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: temps = this.tempI32s || (this.tempI32s = []); break;\r\n case NativeType.I64: temps = this.tempI64s || (this.tempI64s = []); break;\r\n case NativeType.F32: temps = this.tempF32s || (this.tempF32s = []); break;\r\n case NativeType.F64: temps = this.tempF64s || (this.tempF64s = []); break;\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: temps = this.tempI32s || (this.tempI32s = []); break;\r\n case NativeType.I64: temps = this.tempI64s || (this.tempI64s = []); break;\r\n case NativeType.F32: temps = this.tempF32s || (this.tempF32s = []); break;\r\n case NativeType.F64: temps = this.tempF64s || (this.tempF64s = []); break;\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 var debugLocations = this.debugLocations;\r\n if (debugLocations) {\r\n for (var i = 0, k = debugLocations.length; i < k; ++i) {\r\n var 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 /** Tests if a value of this function type is assignable to a target of the specified function type. */\r\n isAssignableTo(target: Function): bool {\r\n return this == target; // TODO\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 /** Returns the function type TypeScript representation of this function.*/\r\n toTypeString(): string { throw new Error(\"not implemented\"); }\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 if (this.declaration.modifiers) {\r\n for (var i = 0, k = this.declaration.modifiers.length; i < k; ++i) {\r\n switch (this.declaration.modifiers[i].modifierKind) {\r\n\r\n case ModifierKind.EXPORT:\r\n this.set(ElementFlags.EXPORTED);\r\n break;\r\n\r\n case ModifierKind.READONLY:\r\n this.set(ElementFlags.READONLY);\r\n break;\r\n\r\n case ModifierKind.PRIVATE:\r\n case ModifierKind.PROTECTED:\r\n case ModifierKind.PUBLIC:\r\n case ModifierKind.STATIC:\r\n break; // already handled\r\n\r\n default:\r\n throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Whether the field is read-only or not. */\r\n get isReadonly(): bool {\r\n return (this.flags & ElementFlags.READONLY) != 0;\r\n }\r\n set isReadonly(is: bool) {\r\n if (is) {\r\n this.flags |= ElementFlags.READONLY;\r\n } else {\r\n this.flags &= ~ElementFlags.READONLY;\r\n }\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 if (this.declaration.modifiers) {\r\n for (var i = 0, k = this.declaration.modifiers.length; i < k; ++i) {\r\n switch (this.declaration.modifiers[i].modifierKind) {\r\n case ModifierKind.IMPORT: this.set(ElementFlags.IMPORTED); break;\r\n case ModifierKind.EXPORT: this.set(ElementFlags.EXPORTED); break;\r\n case ModifierKind.DECLARE: this.set(ElementFlags.DECLARED); break;\r\n default: throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\r\n if (this.declaration.typeParameters.length) {\r\n this.set(ElementFlags.GENERIC);\r\n }\r\n }\r\n\r\n /** Whether an unamanaged class or not. */\r\n get isUnmanaged(): bool {\r\n return (this.flags & ElementFlags.UNMANAGED) != 0;\r\n }\r\n set isUnmanaged(is: bool) {\r\n if (is) {\r\n this.flags |= ElementFlags.UNMANAGED;\r\n } else {\r\n this.flags &= ~ElementFlags.UNMANAGED;\r\n }\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 (var [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 var baseClassType = this.program.resolveType(declaration.extendsType, null); // reports\r\n if (!baseClassType) return null;\r\n if (!(baseClass = baseClassType.classType)) {\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.prototype.isUnmanaged != this.isUnmanaged) {\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 (var 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 var 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 (var member of this.instanceMembers.values()) {\r\n switch (member.kind) {\r\n\r\n case ElementKind.FIELD_PROTOTYPE: // fields are layed out in advance\r\n if (!instance.members) instance.members = new Map();\r\n var 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 var fieldType = this.program.resolveType( // reports\r\n fieldDeclaration.type,\r\n instance.contextualTypeArguments\r\n );\r\n if (fieldType) {\r\n var fieldInstance = new Field(member, (member).internalName, fieldType);\r\n switch (fieldType.byteSize) { // align\r\n case 1: break;\r\n case 2: if (memoryOffset & 1) ++memoryOffset; break;\r\n case 4: if (memoryOffset & 3) memoryOffset = (memoryOffset | 3) + 1; break;\r\n case 8: if (memoryOffset & 7) memoryOffset = (memoryOffset | 7) + 1; break;\r\n default: assert(false);\r\n }\r\n fieldInstance.memoryOffset = memoryOffset;\r\n memoryOffset += fieldType.byteSize;\r\n instance.members.set(member.simpleName, fieldInstance);\r\n }\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 var methodPrototype = (member).resolvePartial(typeArguments); // reports\r\n if (methodPrototype) {\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 assert((member).getterPrototype);\r\n var instanceProperty = new Property(this.program, member.simpleName, member.internalName, this);\r\n instanceProperty.getterPrototype = (\r\n ((member).getterPrototype).resolvePartial(\r\n typeArguments\r\n )\r\n );\r\n if ((member).setterPrototype) {\r\n instanceProperty.setterPrototype = (\r\n ((member).setterPrototype).resolvePartial(\r\n typeArguments\r\n )\r\n );\r\n }\r\n instance.members.set(member.simpleName, instanceProperty);\r\n break;\r\n\r\n default:\r\n throw new Error(\"instance member expected\");\r\n }\r\n }\r\n }\r\n instance.currentMemoryOffset = memoryOffset; // sizeof() is its 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: TypeNode[] | 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(ElementFlags.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 (var [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 var 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 /** This branch always returns. */\r\n RETURNS = 1 << 0,\r\n /** This branch possibly throws. */\r\n POSSIBLY_THROWS = 1 << 1,\r\n /** This branch possible breaks. */\r\n POSSIBLY_BREAKS = 1 << 2,\r\n /** This branch possible continues. */\r\n POSSIBLY_CONTINUES = 1 << 3\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\r\n /** Sets the specified flag or flags. */\r\n set(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 branchFlow = new Flow();\r\n branchFlow.parent = this;\r\n branchFlow.flags = this.flags;\r\n branchFlow.currentFunction = this.currentFunction;\r\n branchFlow.continueLabel = this.continueLabel;\r\n branchFlow.breakLabel = this.breakLabel;\r\n return branchFlow;\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 (var 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.POSSIBLY_THROWS)) {\r\n parent.set(FlowFlags.POSSIBLY_THROWS);\r\n }\r\n if (this.is(FlowFlags.POSSIBLY_BREAKS) && parent.breakLabel == this.breakLabel) {\r\n parent.set(FlowFlags.POSSIBLY_BREAKS);\r\n }\r\n if (this.is(FlowFlags.POSSIBLY_CONTINUES) && parent.continueLabel == this.continueLabel) {\r\n parent.set(FlowFlags.POSSIBLY_CONTINUES);\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(): bool {\r\n assert(this.parent == null, \"must be the topmost parent flow\");\r\n this.continueLabel = null;\r\n this.breakLabel = null;\r\n return this.is(FlowFlags.RETURNS);\r\n }\r\n}\r\n","/*\r\n\r\n This is a modified version of TypeScript's scanner that doesn't perform as much bookkeeping, simply\r\n skips over trivia and provides a more general mark/reset mechanism for the parser to utilize on\r\n ambiguous tokens.\r\n\r\n next() advances the token\r\n peek() peeks for the next token\r\n skip(token) skips over a token if possible\r\n mark() marks at current token\r\n reset() resets to marked state\r\n range() gets the range of the current token\r\n\r\n readFloat() on FLOATLITERAL\r\n readIdentifier() on IDENTIFIER\r\n readInteger() on INTEGERLITERAL\r\n readString() on STRINGLITERAL\r\n\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} 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/charcode\";\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 namespace Token {\r\n\r\n export function fromKeyword(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\n export function isAlsoIdentifier(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:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n export function operatorToString(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: assert(false); 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 pos = this.start;\r\n var line = 1;\r\n while (pos-- > 0) {\r\n if (text.charCodeAt(pos) == CharCode.LINEFEED) {\r\n line++;\r\n }\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 pos = this.start;\r\n var column = 0;\r\n while (pos-- > 0) {\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\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 markedPos: i32 = 0;\r\n markedToken: Token = -1;\r\n markedTokenPos: i32 = 0;\r\n\r\n nextToken: Token = -1;\r\n nextTokenOnNewLine: bool = false;\r\n\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 var c = text.charCodeAt(this.pos);\r\n switch (c) {\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 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 ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.SLASH) { // single-line\r\n // TODO: triple-slash?\r\n // if (\r\n // this.pos + 1 < this.end &&\r\n // text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n // ) {\r\n // }\r\n while (++this.pos < this.end) {\r\n if (isLineBreak(text.charCodeAt(this.pos))) break;\r\n }\r\n continue;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) { // multi-line\r\n var 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 }\r\n continue;\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 var 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 var keywordText = text.substring(posBefore, this.pos);\r\n var keywordToken = Token.fromKeyword(keywordText);\r\n if (\r\n keywordToken != Token.INVALID &&\r\n !(preferIdentifier && Token.isAlsoIdentifier(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 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 var posBefore = this.pos;\r\n var tokenBefore = this.token;\r\n var tokenPosBefore = this.tokenPos;\r\n this.nextToken = this.unsafeNext(preferIdentifier, maxCompoundLength);\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 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 // skipUntil(token1: Token, token2: Token = -1): bool {\r\n // var next: Token;\r\n // do {\r\n // if ((next = this.peek()) == Token.ENDOFFILE)\r\n // return false;\r\n // if (next == token1 || next == token2)\r\n // return true;\r\n // this.next();\r\n // } while (true);\r\n // }\r\n\r\n mark(): void {\r\n this.markedPos = this.pos;\r\n this.markedToken = this.token;\r\n this.markedTokenPos = this.tokenPos;\r\n }\r\n\r\n reset(): void {\r\n this.pos = this.markedPos;\r\n this.token = this.markedToken;\r\n this.tokenPos = this.markedTokenPos;\r\n this.nextToken = -1;\r\n }\r\n\r\n range(start: i32 = -1, end: i32 = -1): Range {\r\n if (start < 0) {\r\n start = this.tokenPos;\r\n end = this.pos;\r\n } else if (end < 0) {\r\n end = start;\r\n }\r\n return new Range(this.source, start, end);\r\n }\r\n\r\n readIdentifier(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(text.charCodeAt(this.pos))\r\n );\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readString(): string {\r\n var text = this.source.text;\r\n var quote = text.charCodeAt(this.pos++);\r\n var start = this.pos;\r\n var result = \"\";\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.end)\r\n );\r\n break;\r\n }\r\n var 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\r\n case CharCode._0:\r\n return \"\\0\";\r\n\r\n case CharCode.b:\r\n return \"\\b\";\r\n\r\n case CharCode.t:\r\n return \"\\t\";\r\n\r\n case CharCode.n:\r\n return \"\\n\";\r\n\r\n case CharCode.v:\r\n return \"\\v\";\r\n\r\n case CharCode.f:\r\n return \"\\f\";\r\n\r\n case CharCode.r:\r\n return \"\\r\";\r\n\r\n case CharCode.SINGLEQUOTE:\r\n return \"'\";\r\n\r\n case CharCode.DOUBLEQUOTE:\r\n return \"\\\"\";\r\n\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\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:\r\n return \"\";\r\n default:\r\n 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 var 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 var 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\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 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:\r\n return true;\r\n }\r\n }\r\n var pos = this.pos;\r\n while (pos < this.end) {\r\n var 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\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 if (isOctalDigit(text.charCodeAt(this.pos + 1))) {\r\n var start = this.pos;\r\n ++this.pos;\r\n var 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 var 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 var 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 var 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 var 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 var 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 var 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","import {\r\n PATH_DELIMITER,\r\n STATIC_DELIMITER,\r\n INSTANCE_DELIMITER\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 normalize as normalizePath,\r\n resolve as resolvePath\r\n} from \"./util/path\";\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\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 FUNCTIONARROW,\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 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 // other\r\n DECORATOR,\r\n EXPORTMEMBER,\r\n MODIFIER,\r\n PARAMETER,\r\n SWITCHCASE\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\r\n // types\r\n\r\n static createType(\r\n identifier: IdentifierExpression,\r\n typeArguments: TypeNode[],\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 = identifier;\r\n type.typeArguments = typeArguments;\r\n type.isNullable = isNullable;\r\n return type;\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 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; setParentOpt(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: TypeNode,\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: TypeNode[] | 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 isArrow: bool = false\r\n ): FunctionExpression {\r\n var expr = isArrow\r\n ? new FunctionArrowExpression()\r\n : new FunctionExpression();\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: TypeNode[] | 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: TypeParameter[],\r\n extendsType: TypeNode | null,\r\n implementsTypes: TypeNode[],\r\n members: DeclarationStatement[],\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): ClassDeclaration {\r\n var stmt = new ClassDeclaration();\r\n stmt.range = range;\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.modifiers = modifiers; if (modifiers) setParent(modifiers, 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 createDecorator(\r\n expression: Expression,\r\n args: Expression[] | null,\r\n range: Range\r\n ): Decorator {\r\n var stmt = new Decorator();\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\": stmt.decoratorKind = DecoratorKind.GLOBAL; break;\r\n case \"operator\": stmt.decoratorKind = DecoratorKind.OPERATOR; break;\r\n case \"unmanaged\": stmt.decoratorKind = DecoratorKind.UNMANAGED; break;\r\n case \"offset\": stmt.decoratorKind = DecoratorKind.OFFSET; break;\r\n default: stmt.decoratorKind = DecoratorKind.CUSTOM; break;\r\n }\r\n } else {\r\n stmt.decoratorKind = DecoratorKind.CUSTOM;\r\n }\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 modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): EnumDeclaration {\r\n var stmt = new EnumDeclaration();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.values = members; setParent(members, stmt);\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, 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 range: Range\r\n ): EnumValueDeclaration {\r\n var stmt = new EnumValueDeclaration();\r\n stmt.range = range;\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 modifiers: Modifier[] | null,\r\n range: Range\r\n ): ExportStatement {\r\n var stmt = new ExportStatement();\r\n stmt.range = range;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.path = path;\r\n if (path) {\r\n var 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 stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, stmt);\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\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 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,\r\n members: DeclarationStatement[],\r\n modifiers: Modifier[] | null,\r\n range: Range\r\n ): InterfaceDeclaration {\r\n var stmt = new InterfaceDeclaration();\r\n stmt.range = range;\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 stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, stmt);\r\n return stmt;\r\n }\r\n\r\n static createFieldDeclaration(\r\n name: IdentifierExpression,\r\n type: TypeNode | null,\r\n initializer: Expression | null,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): FieldDeclaration {\r\n var stmt = new FieldDeclaration();\r\n stmt.range = range;\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.modifiers = modifiers; if (modifiers) setParent(modifiers, 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 createTypeParameter(\r\n name: IdentifierExpression,\r\n extendsType: TypeNode | null,\r\n range: Range\r\n ): TypeParameter {\r\n var elem = new TypeParameter();\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: TypeNode | null,\r\n initializer: Expression | null,\r\n kind: ParameterKind,\r\n range: Range\r\n ): Parameter {\r\n var elem = new Parameter();\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 createFunctionDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameter[] | null,\r\n parameters: Parameter[],\r\n returnType: TypeNode | null,\r\n body: Statement | null,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): FunctionDeclaration {\r\n var stmt = new FunctionDeclaration();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.parameters = parameters; setParent(parameters, stmt);\r\n stmt.returnType = returnType; if (returnType) returnType.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, 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: TypeParameter[] | null,\r\n parameters: Parameter[],\r\n returnType: TypeNode | null,\r\n body: Statement | null,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): MethodDeclaration {\r\n var stmt = new MethodDeclaration();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.parameters = parameters; setParent(parameters, stmt);\r\n stmt.returnType = returnType; if (returnType) returnType.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createModifier(kind: ModifierKind, range: Range): Modifier {\r\n var elem = new Modifier();\r\n elem.range = range;\r\n elem.modifierKind = kind;\r\n return elem;\r\n }\r\n\r\n static createNamespaceDeclaration(\r\n name: IdentifierExpression,\r\n members: Statement[],\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): NamespaceDeclaration {\r\n var stmt = new NamespaceDeclaration();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, 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 alias: TypeNode,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): TypeDeclaration {\r\n var stmt = new TypeDeclaration();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.alias = alias; alias.parent = stmt;\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, 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 modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): VariableStatement {\r\n var stmt = new VariableStatement();\r\n stmt.range = range;\r\n stmt.declarations = declarations; setParent(declarations, stmt);\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, 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: TypeNode | null,\r\n initializer: Expression | null,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): VariableDeclaration {\r\n var elem = new VariableDeclaration();\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.modifiers = modifiers; // inherited from parent VariableStatement\r\n elem.decorators = decorators; // inherited\r\n return elem;\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\n/** Represents a type annotation. */\r\nexport class TypeNode extends Node {\r\n kind = NodeKind.TYPE;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Type argument references. */\r\n typeArguments: TypeNode[];\r\n /** Whether nullable or not. */\r\n isNullable: bool;\r\n}\r\n\r\n/** Represents a type parameter. */\r\nexport class TypeParameter 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;\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 const 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 const 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: TypeNode;\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: TypeNode[] | 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 arrow function expression. */\r\nexport class FunctionArrowExpression extends FunctionExpression {\r\n kind = NodeKind.FUNCTIONARROW;\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/** Indicates the specific kind of a modifier. */\r\nexport enum ModifierKind {\r\n ASYNC,\r\n CONST,\r\n LET,\r\n DECLARE,\r\n EXPORT,\r\n IMPORT,\r\n STATIC,\r\n ABSTRACT,\r\n PUBLIC,\r\n PRIVATE,\r\n PROTECTED,\r\n READONLY,\r\n GET,\r\n SET,\r\n}\r\n\r\n/** Base class of all statement nodes. */\r\nexport abstract class Statement extends Node { }\r\n\r\n/** Indicates the specific kind of a source. */\r\nexport enum SourceKind {\r\n /** Default source. Usually imported from an entry file. */\r\n DEFAULT,\r\n /** Entry file. */\r\n ENTRY,\r\n /** Library file. */\r\n LIBRARY\r\n}\r\n\r\n/** A top-level source node. */\r\nexport class Source extends Node {\r\n kind = NodeKind.SOURCE;\r\n parent = null;\r\n\r\n /** Source kind. */\r\n sourceKind: SourceKind;\r\n /** Normalized path. */\r\n normalizedPath: string;\r\n /** Path used internally. */\r\n internalPath: string;\r\n /** Contained statements. */\r\n statements: Statement[];\r\n /** Full source text. */\r\n text: string;\r\n /** Tokenizer reference. */\r\n tokenizer: Tokenizer | null = null;\r\n /** Source map index. */\r\n debugInfoIndex: i32 = -1;\r\n\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 modifiers. */\r\n modifiers: Modifier[] | null;\r\n /** Array of decorators. */\r\n decorators: Decorator[] | 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 (\r\n hasModifier(ModifierKind.EXPORT, this.modifiers) &&\r\n (parent).isTopLevelExport\r\n );\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return (\r\n hasModifier(ModifierKind.STATIC, this.modifiers) &&\r\n (parent).isTopLevelExport\r\n );\r\n }\r\n return (\r\n parent.kind == NodeKind.SOURCE &&\r\n hasModifier(ModifierKind.EXPORT, this.modifiers)\r\n );\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: TypeNode | 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: TypeParameter[];\r\n /** Base class type being extended. */\r\n extendsType: TypeNode | null;\r\n /** Interface types being implemented. */\r\n implementsTypes: TypeNode[];\r\n /** Class member declarations. */\r\n members: DeclarationStatement[];\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/** Built-in decorator kinds. */\r\nexport const enum DecoratorKind {\r\n CUSTOM,\r\n GLOBAL,\r\n OPERATOR,\r\n UNMANAGED,\r\n OFFSET\r\n}\r\n\r\n/** Depresents a decorator. */\r\nexport class Decorator extends Statement {\r\n kind = NodeKind.DECORATOR;\r\n\r\n /** Name expression. */\r\n name: Expression;\r\n /** Argument expressions. */\r\n arguments: Expression[] | null;\r\n /** Built-in kind, if applicable. */\r\n decoratorKind: DecoratorKind;\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 modifiers = null;\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 modifiers. */\r\n modifiers: Modifier[] | null;\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 /** Accepted type parameters. */\r\n typeParameters: TypeParameter[] | null;\r\n /** Accepted parameters. */\r\n parameters: Parameter[];\r\n /** Return type. */\r\n returnType: TypeNode | null;\r\n /** Body statement. Usually a block. */\r\n body: Statement | null;\r\n\r\n get isGeneric(): bool {\r\n return this.typeParameters != null && this.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 modifiers = null;\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 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 Parameter extends Node {\r\n kind = NodeKind.PARAMETER;\r\n\r\n /** Parameter name. */\r\n name: IdentifierExpression;\r\n /** Parameter type. */\r\n type: TypeNode | null;\r\n /** Parameter kind. */\r\n parameterKind: ParameterKind;\r\n /** Initializer expression, if present. */\r\n initializer: Expression | null;\r\n}\r\n\r\n/** Represents a single modifier. */\r\nexport class Modifier extends Node {\r\n kind = NodeKind.MODIFIER;\r\n\r\n /** Specific modifier kind. */\r\n modifierKind: ModifierKind;\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 being aliased. */\r\n alias: TypeNode;\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 /** Array of modifiers. */\r\n modifiers: Modifier[] | null;\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 modifiers. */\r\n modifiers: Modifier[] | null;\r\n /** Array of decorators. */\r\n decorators: Decorator[] | null;\r\n /** Array of member declarations. */\r\n declarations: VariableDeclaration[];\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/** Cached unused modifiers for reuse. */\r\nvar reusableModifiers: Modifier[] | null = null;\r\n\r\nexport function setReusableModifiers(modifiers: Modifier[]): void {\r\n reusableModifiers = modifiers;\r\n}\r\n\r\n/** Creates a new modifiers array. */\r\nexport function createModifiers(): Modifier[] {\r\n var ret: Modifier[];\r\n if (reusableModifiers != null) {\r\n ret = reusableModifiers;\r\n reusableModifiers = null;\r\n } else {\r\n ret = [];\r\n }\r\n ret.length = 0;\r\n return ret;\r\n}\r\n\r\n// Utility\r\n\r\n/** Adds a modifier to a set of modifiers. Creates a new set if `null`. */\r\nexport function addModifier(modifier: Modifier, modifiers: Modifier[] | null): Modifier[] {\r\n if (modifiers == null) modifiers = createModifiers();\r\n modifiers.push(modifier);\r\n return modifiers;\r\n}\r\n\r\n/** Gets a specific modifier from the specified set of modifiers. */\r\nexport function getModifier(kind: ModifierKind, modifiers: Modifier[] | null): Modifier | null {\r\n if (modifiers) {\r\n for (var i = 0, k = modifiers.length; i < k; ++i) {\r\n if (modifiers[i].modifierKind == kind) {\r\n return modifiers[i];\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/** Tests whether a modifier exists in the specified set of modifiers. */\r\nexport function hasModifier(kind: ModifierKind, modifiers: Modifier[] | null): bool {\r\n return getModifier(kind, modifiers) != null;\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: Decorator[] | null): Decorator | null {\r\n if (decorators) {\r\n for (var i = 0, k = decorators.length; i < k; ++i) {\r\n var decorator = decorators[i];\r\n var 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: Decorator[] | 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 hasModifier(ModifierKind.STATIC, declaration.modifiers)\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\nfunction setParent(nodes: Node[], parent: Node): void {\r\n for (var i = 0, k = nodes.length; i < k; ++i) {\r\n nodes[i].parent = parent;\r\n }\r\n}\r\n\r\nfunction setParentOpt(nodes: (Node | null)[], parent: Node): void {\r\n for (var i = 0, k = nodes.length; i < k; ++i) {\r\n var node = nodes[i];\r\n if (node) node.parent = parent;\r\n }\r\n}\r\n","import {\r\n Class,\r\n Function\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 I8,\r\n I16,\r\n I32,\r\n I64,\r\n ISIZE,\r\n\r\n // unsigned integers\r\n U8,\r\n U16,\r\n U32,\r\n U64,\r\n USIZE,\r\n BOOL, // sic\r\n\r\n // floats\r\n F32,\r\n F64,\r\n\r\n // other\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 type, if a class type. */\r\n classType: Class | null;\r\n /** Underlying function type, if a function type. */\r\n functionType: Function | 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.classType = 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 -1 >>> (targetType.size - this.size);\r\n }\r\n\r\n /** Tests if this type has the specified capabilities. */\r\n is(flags: TypeFlags): bool {\r\n return (this.flags & flags) == flags;\r\n }\r\n\r\n /** Tests if this type is a class type. */\r\n get isClass(): bool { return this.classType != null; }\r\n /** Tests if this type is a function type. */\r\n get isFunction(): bool { return this.functionType != null; }\r\n /** Tests if this type is a reference type. */\r\n get isReference(): bool { return this.classType != null || this.functionType != null; }\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.classType);\r\n var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size);\r\n ret.classType = classType;\r\n return ret;\r\n }\r\n\r\n /** Composes a function type from this type and a function. */\r\n asFunction(functionType: Function): Type {\r\n assert(this.kind == TypeKind.U32 && !this.functionType);\r\n var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size);\r\n ret.functionType = functionType;\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.isReference);\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.classType = this.classType; // either a class reference\r\n this.nullableType.functionType = this.functionType; // 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: Function | null;\r\n var targetFunction: Function | null;\r\n if (this.isReference) {\r\n if (target.isReference) {\r\n if (currentClass = this.classType) {\r\n if (targetClass = target.classType) {\r\n return currentClass.isAssignableTo(targetClass);\r\n }\r\n } else if (currentFunction = this.functionType) {\r\n if (targetFunction = target.functionType) {\r\n return currentFunction.isAssignableTo(targetFunction);\r\n }\r\n }\r\n }\r\n } else if (!target.isReference) {\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: return \"u32\";\r\n case TypeKind.U64: return \"u64\";\r\n case TypeKind.USIZE:\r\n if (kindOnly) return \"usize\";\r\n return this.classType\r\n ? this.classType.toString()\r\n : this.functionType\r\n ? this.functionType.toTypeString()\r\n : \"usize\";\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: assert(false); return \"\";\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\r\n default:\r\n return NativeType.I32;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n return NativeType.I64;\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n return this.size == 64 ? NativeType.I64 : NativeType.I32;\r\n\r\n case TypeKind.F32:\r\n return NativeType.F32;\r\n\r\n case TypeKind.F64:\r\n return NativeType.F64;\r\n\r\n case TypeKind.VOID:\r\n 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\r\n case TypeKind.VOID:\r\n assert(false);\r\n\r\n default:\r\n return module.createI32(0);\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n if (this.size != 64) return module.createI32(0);\r\n // fall-through\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n return module.createI64(0);\r\n\r\n case TypeKind.F32:\r\n return module.createF32(0);\r\n\r\n case TypeKind.F64:\r\n 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\r\n case TypeKind.VOID:\r\n assert(false);\r\n\r\n default:\r\n return module.createI32(1);\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n if (this.size != 64) return module.createI32(1);\r\n // fall-through\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n return module.createI64(1);\r\n\r\n case TypeKind.F32:\r\n return module.createF32(1);\r\n\r\n case TypeKind.F64:\r\n 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\r\n case TypeKind.VOID:\r\n assert(false);\r\n\r\n default:\r\n return module.createI32(-1);\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n if (this.size != 64) return module.createI32(-1);\r\n // fall-through\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n return module.createI64(-1, -1);\r\n\r\n case TypeKind.F32:\r\n return module.createF32(-1);\r\n\r\n case TypeKind.F64:\r\n 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\r\n default:\r\n return \"i\";\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n return \"I\";\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n return this.size == 64 ? \"I\" : \"i\";\r\n\r\n case TypeKind.F32:\r\n return \"f\";\r\n\r\n case TypeKind.F64:\r\n return \"F\";\r\n\r\n case TypeKind.VOID:\r\n 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 k = types.length;\r\n var ret = new Array(k);\r\n for (var i = 0; i < k; ++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 k = types.length;\r\n if (!k) return \"\";\r\n var sb = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n sb[i] = types[i].toString();\r\n }\r\n return sb.join(\", \");\r\n}\r\n","import {\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} 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 Global,\r\n Local,\r\n Namespace,\r\n EnumValue,\r\n Property,\r\n VariableLikeElement,\r\n FlowFlags,\r\n ElementFlags,\r\n ConstantValueKind,\r\n Parameter,\r\n\r\n PATH_DELIMITER,\r\n LIBRARY_PREFIX\r\n} from \"./program\";\r\n\r\nimport {\r\n Token\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 ModifierKind,\r\n NamespaceDeclaration,\r\n ReturnStatement,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n VariableDeclaration,\r\n VariableStatement,\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\r\n hasModifier\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags,\r\n\r\n typesToNativeTypes\r\n} from \"./types\";\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 /** Static memory start offset. */\r\n memoryBase: u32 = 0;\r\n /** Memory allocation implementation to use. */\r\n allocateImpl: string = \"allocate_memory\";\r\n /** Memory freeing implementation to use. */\r\n freeImpl: string = \"free_memory\";\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[] = new Array();\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 this.options = options ? options : new Options();\r\n this.memoryOffset = i64_new(\r\n max(this.options.memoryBase, this.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\r\n // initialize lookup maps, built-ins, imports, exports, etc.\r\n this.program.initialize(this.options);\r\n\r\n // set up the start function wrapping top-level statements, of all files.\r\n var startFunctionPrototype = assert(this.program.elements.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 null, // not generic\r\n null, // no parameters\r\n Type.void\r\n );\r\n startFunctionInstance.set(ElementFlags.START);\r\n this.currentFunction = this.startFunction = startFunctionInstance;\r\n\r\n var sources = this.program.sources;\r\n\r\n // compile entry file(s) while traversing to reachable elements\r\n for (var 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 if (this.startFunctionBody.length) {\r\n var typeRef = this.module.getFunctionTypeBySignature(NativeType.None, []);\r\n if (!typeRef) typeRef = this.module.addFunctionType(\"v\", NativeType.None, []);\r\n var ref: FunctionRef;\r\n this.module.setStart(\r\n ref = this.module.addFunction(\r\n this.startFunction.prototype.internalName,\r\n typeRef,\r\n typesToNativeTypes(this.startFunction.additionalLocals),\r\n this.module.createBlock(null, this.startFunctionBody)\r\n )\r\n );\r\n this.startFunction.finalize(this.module, ref);\r\n }\r\n\r\n // set up static memory segments and the heap base pointer\r\n if (!this.options.noMemory) {\r\n var memoryOffset = this.memoryOffset;\r\n memoryOffset = i64_align(memoryOffset, this.options.usizeType.byteSize);\r\n this.memoryOffset = memoryOffset;\r\n if (this.options.isWasm64) {\r\n this.module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I64,\r\n false,\r\n this.module.createI64(i64_low(memoryOffset), i64_high(memoryOffset))\r\n );\r\n } else {\r\n this.module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I32,\r\n false,\r\n this.module.createI32(i64_low(memoryOffset))\r\n );\r\n }\r\n\r\n // determine initial page size\r\n var pages = i64_shr_u(i64_align(memoryOffset, 0x10000), i64_new(16, 0));\r\n this.module.setMemory(\r\n i64_low(pages),\r\n Module.MAX_MEMORY_WASM32, // TODO: not WASM64 compatible yet\r\n this.memorySegments,\r\n this.options.target,\r\n \"memory\"\r\n );\r\n }\r\n\r\n // import memory if requested\r\n if (this.options.importMemory) {\r\n this.module.addMemoryImport(\"0\", \"env\", \"memory\");\r\n }\r\n\r\n // set up function table\r\n if (k = this.functionTable.length) {\r\n var entries = new Array(k);\r\n for (i = 0; i < k; ++i) {\r\n entries[i] = this.functionTable[i].ref;\r\n }\r\n this.module.setFunctionTable(entries);\r\n }\r\n\r\n return this.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 source: Source;\r\n var expected = normalizedPathWithoutExtension + \".ts\";\r\n for (var i = 0, k = sources.length; i < k; ++i) {\r\n 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 (i = 0, k = sources.length; i < k; ++i) {\r\n 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 (i = 0, k = sources.length; i < k; ++i) {\r\n 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 if (files.has(source.normalizedPath)) return;\r\n files.add(source.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 startFunctionBody = this.startFunctionBody;\r\n var statements = source.statements;\r\n for (var i = 0, k = statements.length; i < k; ++i) {\r\n var statement = statements[i];\r\n switch (statement.kind) {\r\n\r\n case NodeKind.CLASSDECLARATION:\r\n if (\r\n (\r\n noTreeShaking ||\r\n (isEntry && hasModifier(ModifierKind.EXPORT, (statement).modifiers))\r\n ) &&\r\n !(statement).typeParameters.length\r\n ) {\r\n this.compileClassDeclaration(statement, []);\r\n }\r\n break;\r\n\r\n case NodeKind.ENUMDECLARATION:\r\n if (\r\n noTreeShaking ||\r\n (isEntry && hasModifier(ModifierKind.EXPORT, (statement).modifiers))\r\n ) {\r\n this.compileEnumDeclaration(statement);\r\n }\r\n break;\r\n\r\n case NodeKind.FUNCTIONDECLARATION:\r\n if (\r\n (\r\n noTreeShaking ||\r\n (isEntry && hasModifier(ModifierKind.EXPORT, (statement).modifiers))\r\n ) &&\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 (\r\n noTreeShaking ||\r\n (isEntry && hasModifier(ModifierKind.EXPORT, (statement).modifiers))\r\n ) {\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 var 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 // otherwise a top-level statement that is part of the start function's body\r\n default:\r\n var previousFunction = this.currentFunction;\r\n this.currentFunction = this.startFunction;\r\n var expr = this.compileStatement(statement);\r\n this.startFunctionBody.push(expr);\r\n this.currentFunction = previousFunction;\r\n break;\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 = this.program.elements.get(declaration.fileLevelInternalName);\r\n if (!element || element.kind != ElementKind.GLOBAL) throw new Error(\"global expected\");\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(ElementFlags.COMPILED) || global.is(ElementFlags.BUILTIN)) return true;\r\n global.set(ElementFlags.COMPILED); // ^ built-ins are compiled on use\r\n\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 var 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\r\n // handle imports\r\n if (global.is(ElementFlags.DECLARED)) {\r\n\r\n // constant global\r\n if (global.is(ElementFlags.CONSTANT)) {\r\n this.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(ElementFlags.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(ElementFlags.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 (global.is(ElementFlags.CONSTANT)) {\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(this.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 this.module.addGlobal(internalName, nativeType, true, global.type.toNativeZero(this.module));\r\n var setExpr = this.module.createSetGlobal(internalName, initExpr);\r\n this.startFunctionBody.push(setExpr);\r\n\r\n } else { // compile as-is\r\n\r\n if (global.is(ElementFlags.CONSTANT)) {\r\n var exprType = _BinaryenExpressionGetType(initExpr);\r\n switch (exprType) {\r\n\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 throw new Error(\"concrete type expected\");\r\n }\r\n global.set(ElementFlags.INLINED); // inline the value from now on\r\n if (declaration.isTopLevel) { // but keep the element if it might be re-exported\r\n this.module.addGlobal(internalName, nativeType, false, initExpr);\r\n }\r\n if (declaration.range.source.isEntry && declaration.isTopLevelExport) {\r\n this.module.addGlobalExport(global.internalName, declaration.programLevelInternalName);\r\n }\r\n\r\n } else /* mutable */ {\r\n this.module.addGlobal(internalName, nativeType, !global.is(ElementFlags.CONSTANT), 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 = this.program.elements.get(declaration.fileLevelInternalName);\r\n if (!element || element.kind != ElementKind.ENUM) throw new Error(\"enum expected\");\r\n return this.compileEnum(element) ? element : null;\r\n }\r\n\r\n compileEnum(element: Enum): bool {\r\n if (element.is(ElementFlags.COMPILED)) return true;\r\n element.set(ElementFlags.COMPILED);\r\n\r\n this.currentEnum = element;\r\n var previousValue: EnumValue | null = null;\r\n if (element.members) {\r\n for (var member of element.members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) continue; // happens if an enum is also a namespace\r\n var initInStart = false;\r\n var val = member;\r\n var valueDeclaration = val.declaration;\r\n val.set(ElementFlags.COMPILED);\r\n if (val.is(ElementFlags.INLINED)) {\r\n if (element.declaration.isTopLevelExport) {\r\n this.module.addGlobal(\r\n val.internalName,\r\n NativeType.I32,\r\n false, // constant\r\n this.module.createI32(val.constantValue)\r\n );\r\n }\r\n } else {\r\n var 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(ElementFlags.CONSTANT)) {\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 = this.module.createI32(0);\r\n } else if (previousValue.is(ElementFlags.INLINED)) {\r\n initExpr = this.module.createI32(previousValue.constantValue + 1);\r\n } else {\r\n // in TypeScript this errors with TS1061, but actually we can do:\r\n initExpr = this.module.createBinary(BinaryOp.AddI32,\r\n this.module.createGetGlobal(previousValue.internalName, NativeType.I32),\r\n this.module.createI32(1)\r\n );\r\n if (element.is(ElementFlags.CONSTANT)) {\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 this.module.addGlobal(\r\n val.internalName,\r\n NativeType.I32,\r\n true, // mutable\r\n this.module.createI32(0)\r\n );\r\n var setExpr = this.module.createSetGlobal(val.internalName, initExpr);\r\n this.startFunctionBody.push(setExpr);\r\n } else {\r\n this.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(ElementFlags.INLINED);\r\n } else {\r\n throw new Error(\"i32 expected\");\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(ElementFlags.INLINED)) {\r\n this.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 = this.program.elements.get(declaration.fileLevelInternalName);\r\n if (!element || element.kind != ElementKind.FUNCTION_PROTOTYPE) {\r\n throw new Error(\"function expected\");\r\n }\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) return null;\r\n return this.compileFunction(instance) ? instance : null;\r\n }\r\n\r\n /** Compiles a readily resolved function instance. */\r\n compileFunction(instance: Function): bool {\r\n if (instance.is(ElementFlags.COMPILED)) return true;\r\n\r\n assert(!instance.is(ElementFlags.BUILTIN) || instance.simpleName == \"abort\");\r\n\r\n var declaration = instance.prototype.declaration;\r\n if (instance.is(ElementFlags.DECLARED)) {\r\n if (declaration.body) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n declaration.name.range\r\n );\r\n return false;\r\n }\r\n } else if (!declaration.body) {\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 return false;\r\n }\r\n\r\n // might trigger compilation of other functions referring to this one\r\n instance.set(ElementFlags.COMPILED);\r\n\r\n // compile statements\r\n var stmt: ExpressionRef = 0;\r\n if (!instance.is(ElementFlags.DECLARED)) {\r\n var previousFunction = this.currentFunction;\r\n this.currentFunction = instance;\r\n var body = assert(declaration.body, \"implementation expected\");\r\n stmt = this.compileStatement(body);\r\n // make sure the top-level branch or all child branches return\r\n var allBranchesReturn = this.currentFunction.flow.finalize();\r\n if (instance.returnType != Type.void && !allBranchesReturn) {\r\n this.error(\r\n DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,\r\n assert(declaration.returnType, \"return type expected\").range\r\n );\r\n }\r\n this.currentFunction = previousFunction;\r\n }\r\n\r\n // create the function type\r\n var numParameters = instance.parameters ? instance.parameters.length : 0;\r\n var numParametersInclThis = instance.instanceMethodOf ? numParameters + 1 : numParameters;\r\n var paramIndex = 0;\r\n\r\n var nativeResultType = instance.returnType.toNativeType();\r\n var nativeParamTypes = new Array(numParametersInclThis);\r\n var signatureNameParts = new Array(numParametersInclThis + 1);\r\n\r\n if (instance.instanceMethodOf) {\r\n nativeParamTypes[paramIndex] = this.options.isWasm64 ? NativeType.I64 : NativeType.I32;\r\n signatureNameParts[paramIndex++] = instance.instanceMethodOf.type.toSignatureString();\r\n }\r\n if (instance.parameters) {\r\n for (var i = 0; i < numParameters; ++i) {\r\n nativeParamTypes[paramIndex] = instance.parameters[i].type.toNativeType();\r\n signatureNameParts[paramIndex++] = instance.parameters[i].type.toSignatureString();\r\n }\r\n }\r\n signatureNameParts[paramIndex] = instance.returnType.toSignatureString();\r\n var typeRef = this.module.getFunctionTypeBySignature(nativeResultType, nativeParamTypes);\r\n if (!typeRef) {\r\n typeRef = this.module.addFunctionType(\r\n signatureNameParts.join(\"\"),\r\n nativeResultType,\r\n nativeParamTypes\r\n );\r\n }\r\n\r\n // create the function\r\n var ref: FunctionRef;\r\n if (instance.is(ElementFlags.DECLARED)) {\r\n ref = this.module.addFunctionImport(\r\n instance.internalName,\r\n instance.prototype.namespace\r\n ? instance.prototype.namespace.simpleName\r\n : \"env\",\r\n instance.simpleName,\r\n typeRef\r\n );\r\n } else {\r\n ref = this.module.addFunction(\r\n instance.internalName,\r\n typeRef,\r\n typesToNativeTypes(instance.additionalLocals),\r\n assert(stmt)\r\n );\r\n }\r\n\r\n // check module export\r\n if (declaration.range.source.isEntry && declaration.isTopLevelExport) {\r\n this.module.addFunctionExport(instance.internalName, declaration.name.text);\r\n }\r\n\r\n instance.finalize(this.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 (var i = 0, k = members.length; i < k; ++i) {\r\n var member = members[i];\r\n switch (member.kind) {\r\n\r\n case NodeKind.CLASSDECLARATION:\r\n if (\r\n (\r\n noTreeShaking ||\r\n hasModifier(ModifierKind.EXPORT, (member).modifiers)\r\n ) && !(member).typeParameters.length\r\n ) {\r\n this.compileClassDeclaration(member, []);\r\n }\r\n break;\r\n\r\n case NodeKind.INTERFACEDECLARATION:\r\n if (\r\n (\r\n noTreeShaking ||\r\n hasModifier(ModifierKind.EXPORT, (member).modifiers)\r\n ) && !(member).typeParameters.length\r\n ) {\r\n this.compileInterfaceDeclaration(member, []);\r\n }\r\n break;\r\n\r\n case NodeKind.ENUMDECLARATION:\r\n if (\r\n noTreeShaking ||\r\n hasModifier(ModifierKind.EXPORT, (member).modifiers)\r\n ) {\r\n this.compileEnumDeclaration(member);\r\n }\r\n break;\r\n\r\n case NodeKind.FUNCTIONDECLARATION:\r\n if (\r\n (\r\n noTreeShaking ||\r\n hasModifier(ModifierKind.EXPORT, (member).modifiers)\r\n ) &&\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 (\r\n noTreeShaking ||\r\n hasModifier(ModifierKind.EXPORT, (member).modifiers)\r\n ) {\r\n this.compileNamespaceDeclaration(member);\r\n }\r\n break;\r\n\r\n case NodeKind.VARIABLE:\r\n if (\r\n noTreeShaking ||\r\n hasModifier(ModifierKind.EXPORT, (member).modifiers)\r\n ) {\r\n var 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 throw new Error(\"namespace member expected\");\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 (var element of ns.members.values()) {\r\n switch (element.kind) {\r\n\r\n case ElementKind.CLASS_PROTOTYPE:\r\n if (\r\n (\r\n noTreeShaking ||\r\n (element).is(ElementFlags.EXPORTED)\r\n ) && !(element).is(ElementFlags.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(ElementFlags.EXPORTED)\r\n ) && !(element).is(ElementFlags.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 // exports\r\n\r\n compileExportStatement(statement: ExportStatement): void {\r\n var members = statement.members;\r\n for (var i = 0, k = members.length; i < k; ++i) {\r\n var member = members[i];\r\n var internalExportName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n member.externalName.text\r\n );\r\n var element = this.program.exports.get(internalExportName);\r\n if (!element) continue; // reported in Program#initialize\r\n\r\n switch (element.kind) {\r\n\r\n case ElementKind.CLASS_PROTOTYPE:\r\n if (!(element).is(ElementFlags.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(ElementFlags.GENERIC) &&\r\n statement.range.source.isEntry\r\n ) {\r\n var functionInstance = this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null,\r\n (element).declaration.name\r\n );\r\n if (functionInstance) {\r\n var functionDeclaration = functionInstance.prototype.declaration;\r\n if (functionDeclaration && functionDeclaration.needsExplicitExport(member)) {\r\n this.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 var globalDeclaration = (element).declaration;\r\n if (globalDeclaration && globalDeclaration.needsExplicitExport(member)) {\r\n if ((element).is(ElementFlags.INLINED)) {\r\n this.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 // 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 = this.program.elements.get(declaration.fileLevelInternalName);\r\n if (!element || element.kind != ElementKind.CLASS_PROTOTYPE) {\r\n throw new Error(\"class expected\");\r\n }\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(ElementFlags.COMPILED)) return true;\r\n instance.set(ElementFlags.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 throw new Error(\"not implemented\");\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 /** Adds a function table entry and returns the assigned index. */\r\n addFunctionTableEntry(func: Function): i32 {\r\n assert(func.is(ElementFlags.COMPILED));\r\n if (func.functionTableIndex >= 0) {\r\n return func.functionTableIndex;\r\n }\r\n var index = this.functionTable.length;\r\n this.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 expr: ExpressionRef;\r\n switch (statement.kind) {\r\n\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 var variableInit = this.compileVariableStatement(statement);\r\n expr = variableInit ? variableInit : this.module.createNop();\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 if (this.currentFunction == this.startFunction) {\r\n return this.module.createNop();\r\n }\r\n // fall-through: must be top-level; function bodies are not guaranteed to be evaluated\r\n\r\n default:\r\n throw new Error(\"statement expected\");\r\n }\r\n\r\n this.addDebugLocation(expr, statement.range);\r\n return expr;\r\n }\r\n\r\n compileStatements(statements: Statement[]): ExpressionRef[] {\r\n var k = statements.length;\r\n var stmts = new Array(k);\r\n for (var i = 0; i < k; ++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 this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n\r\n var stmt = this.module.createBlock(null, this.compileStatements(statements), NativeType.None);\r\n var stmtReturns = this.currentFunction.flow.is(FlowFlags.RETURNS);\r\n\r\n // Switch back to the parent flow\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n if (stmtReturns) {\r\n this.currentFunction.flow.set(FlowFlags.RETURNS);\r\n }\r\n return stmt;\r\n }\r\n\r\n compileBreakStatement(statement: BreakStatement): ExpressionRef {\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 this.module.createUnreachable();\r\n }\r\n var breakLabel = this.currentFunction.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 this.module.createUnreachable();\r\n }\r\n this.currentFunction.flow.set(FlowFlags.POSSIBLY_BREAKS);\r\n return this.module.createBreak(breakLabel);\r\n }\r\n\r\n compileContinueStatement(statement: ContinueStatement): ExpressionRef {\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 this.module.createUnreachable();\r\n }\r\n // Check if 'continue' is allowed here\r\n var continueLabel = this.currentFunction.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 this.module.createUnreachable();\r\n }\r\n this.currentFunction.flow.set(FlowFlags.POSSIBLY_CONTINUES);\r\n return this.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 label = this.currentFunction.enterBreakContext();\r\n var previousBreakLabel = this.currentFunction.flow.breakLabel;\r\n var previousContinueLabel = this.currentFunction.flow.continueLabel;\r\n var breakLabel = this.currentFunction.flow.breakLabel = \"break|\" + label;\r\n var continueLabel = this.currentFunction.flow.continueLabel = \"continue|\" + label;\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 this.currentFunction.flow.breakLabel = previousBreakLabel;\r\n this.currentFunction.flow.continueLabel = previousContinueLabel;\r\n\r\n var condition = makeIsTrueish(\r\n this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE),\r\n this.currentType,\r\n this.module\r\n );\r\n\r\n this.currentFunction.leaveBreakContext();\r\n\r\n return this.module.createBlock(breakLabel, [\r\n this.module.createLoop(continueLabel,\r\n this.module.createBlock(null, [\r\n body,\r\n this.module.createBreak(continueLabel, condition)\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 context = this.currentFunction.enterBreakContext();\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n var breakLabel = this.currentFunction.flow.breakLabel = \"break|\" + context;\r\n var continueLabel = this.currentFunction.flow.continueLabel = \"continue|\" + context;\r\n\r\n // Compile in correct order\r\n var initializer = statement.initializer\r\n ? this.compileStatement(statement.initializer)\r\n : this.module.createNop();\r\n var condition = statement.condition\r\n ? this.compileExpression(statement.condition, Type.i32)\r\n : this.module.createI32(1);\r\n var incrementor = statement.incrementor\r\n ? this.compileExpression(statement.incrementor, Type.void)\r\n : this.module.createNop();\r\n var body = this.compileStatement(statement.statement);\r\n var alwaysReturns = !statement.condition && this.currentFunction.flow.is(FlowFlags.RETURNS);\r\n // TODO: check other always-true conditions as well, not just omitted\r\n\r\n // Switch back to the parent flow\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n this.currentFunction.leaveBreakContext();\r\n\r\n var expr = this.module.createBlock(breakLabel, [\r\n initializer,\r\n this.module.createLoop(continueLabel, this.module.createBlock(null, [\r\n this.module.createIf(condition, this.module.createBlock(null, [\r\n body,\r\n incrementor,\r\n this.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, propagate that and append a hint\r\n if (alwaysReturns) {\r\n this.currentFunction.flow.set(FlowFlags.RETURNS);\r\n expr = this.module.createBlock(null, [\r\n expr,\r\n this.module.createUnreachable()\r\n ]);\r\n }\r\n return expr;\r\n }\r\n\r\n compileIfStatement(statement: IfStatement): ExpressionRef {\r\n\r\n // The condition doesn't initiate a branch yet\r\n var condition = makeIsTrueish(\r\n this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE),\r\n this.currentType,\r\n this.module\r\n );\r\n\r\n // Each arm initiates a branch\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n var ifTrue = this.compileStatement(statement.ifTrue);\r\n var ifTrueReturns = this.currentFunction.flow.is(FlowFlags.RETURNS);\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n\r\n var ifFalse: ExpressionRef = 0;\r\n var ifFalseReturns = false;\r\n if (statement.ifFalse) {\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n ifFalse = this.compileStatement(statement.ifFalse);\r\n ifFalseReturns = this.currentFunction.flow.is(FlowFlags.RETURNS);\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n }\r\n if (ifTrueReturns && ifFalseReturns) { // not necessary to append a hint\r\n this.currentFunction.flow.set(FlowFlags.RETURNS);\r\n }\r\n return this.module.createIf(condition, ifTrue, ifFalse);\r\n }\r\n\r\n compileReturnStatement(statement: ReturnStatement): ExpressionRef {\r\n var expression: ExpressionRef = 0;\r\n if (statement.value) {\r\n expression = this.compileExpression(statement.value, this.currentFunction.returnType);\r\n }\r\n\r\n // Remember that this flow returns\r\n this.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\r\n // Everything within a switch uses the same break context\r\n var context = this.currentFunction.enterBreakContext();\r\n\r\n // introduce a local for evaluating the condition (exactly once)\r\n var tempLocal = this.currentFunction.getTempLocal(Type.u32);\r\n var k = statement.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 + k);\r\n breaks[0] = this.module.createSetLocal( // initializer\r\n tempLocal.index,\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 (var i = 0; i < k; ++i) {\r\n var case_ = statement.cases[i];\r\n if (case_.label) {\r\n breaks[breakIndex++] = this.module.createBreak(\"case\" + i.toString(10) + \"|\" + context,\r\n this.module.createBinary(BinaryOp.EqI32,\r\n this.module.createGetLocal(tempLocal.index, NativeType.I32),\r\n this.compileExpression(case_.label, Type.i32)\r\n )\r\n );\r\n } else {\r\n defaultIndex = i;\r\n }\r\n }\r\n\r\n this.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] = this.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 = this.module.createBlock(\"case0|\" + context, breaks, NativeType.None);\r\n var alwaysReturns = true;\r\n for (i = 0; i < k; ++i) {\r\n case_ = statement.cases[i];\r\n var l = case_.statements.length;\r\n var body = new Array(1 + l);\r\n body[0] = currentBlock;\r\n\r\n // Each switch case initiates a new branch\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n var breakLabel = this.currentFunction.flow.breakLabel = \"break|\" + context;\r\n\r\n var fallsThrough = i != k - 1;\r\n var nextLabel = !fallsThrough ? breakLabel : \"case\" + (i + 1).toString(10) + \"|\" + context;\r\n for (var j = 0; j < l; ++j) {\r\n body[j + 1] = this.compileStatement(case_.statements[j]);\r\n }\r\n if (!(fallsThrough || this.currentFunction.flow.is(FlowFlags.RETURNS))) {\r\n alwaysReturns = false; // ignore fall-throughs\r\n }\r\n\r\n // Switch back to the parent flow\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n\r\n currentBlock = this.module.createBlock(nextLabel, body, NativeType.None);\r\n }\r\n this.currentFunction.leaveBreakContext();\r\n\r\n // If the switch has a default and always returns, propagate that\r\n if (defaultIndex >= 0 && alwaysReturns) {\r\n this.currentFunction.flow.set(FlowFlags.RETURNS);\r\n // Binaryen understands that so we don't need a hint\r\n }\r\n return currentBlock;\r\n }\r\n\r\n compileThrowStatement(statement: ThrowStatement): ExpressionRef {\r\n\r\n // Remember that this branch possibly throws\r\n this.currentFunction.flow.set(FlowFlags.POSSIBLY_THROWS);\r\n\r\n // FIXME: without try-catch it is safe to assume RETURNS as well for now\r\n this.currentFunction.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 throw new Error(\"not implemented\");\r\n // can't yet support something like: try { return ... } finally { ... }\r\n // worthwhile to investigate lowering returns to block results (here)?\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 declarations = statement.declarations;\r\n\r\n // top-level variables and constants become globals\r\n if (isKnownGlobal || (\r\n this.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 (var i = 0, k = declarations.length; i < k; ++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 (i = 0, k = declarations.length; i < k; ++i) {\r\n var declaration = declarations[i];\r\n var name = declaration.name.text;\r\n var type: Type | null = null;\r\n var init: ExpressionRef = 0;\r\n if (declaration.type) {\r\n type = this.program.resolveType( // reports\r\n declaration.type,\r\n this.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 (hasModifier(ModifierKind.CONST, declaration.modifiers)) {\r\n if (init) {\r\n init = this.precomputeExpressionRef(init);\r\n if (_BinaryenExpressionGetId(init) == ExpressionId.Const) {\r\n var local = new Local(this.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 case NativeType.I64:\r\n local = local.withConstantIntegerValue(\r\n _BinaryenConstGetValueI64Low(init),\r\n _BinaryenConstGetValueI64High(init)\r\n );\r\n break;\r\n case NativeType.F32:\r\n local = local.withConstantFloatValue(_BinaryenConstGetValueF32(init));\r\n break;\r\n case NativeType.F64:\r\n local = local.withConstantFloatValue(_BinaryenConstGetValueF64(init));\r\n break;\r\n default:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n // Create a virtual local that doesn't actually exist in WebAssembly\r\n var scopedLocals = this.currentFunction.flow.scopedLocals;\r\n if (!scopedLocals) scopedLocals = this.currentFunction.flow.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 (hasModifier(ModifierKind.LET, declaration.modifiers)) { // here: not top-level\r\n this.currentFunction.flow.addScopedLocal(name, type, declaration.name); // reports\r\n } else {\r\n this.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 compileWhileStatement(statement: WhileStatement): ExpressionRef {\r\n\r\n // The condition does not yet initialize a branch\r\n var condition = makeIsTrueish(\r\n this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE),\r\n this.currentType,\r\n this.module\r\n );\r\n\r\n // Statements initiate a new branch with its own break context\r\n var label = this.currentFunction.enterBreakContext();\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n var breakLabel = this.currentFunction.flow.breakLabel = \"break|\" + label;\r\n var continueLabel = this.currentFunction.flow.continueLabel = \"continue|\" + label;\r\n\r\n var body = this.compileStatement(statement.statement);\r\n var alwaysReturns = false && this.currentFunction.flow.is(FlowFlags.RETURNS);\r\n // TODO: evaluate possible always-true conditions\r\n\r\n // Switch back to the parent flow\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n this.currentFunction.leaveBreakContext();\r\n\r\n var expr = this.module.createBlock(breakLabel, [\r\n this.module.createLoop(continueLabel,\r\n this.module.createIf(condition, this.module.createBlock(null, [\r\n body,\r\n this.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 = this.module.createBlock(null, [\r\n expr,\r\n this.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(ElementFlags.INLINED));\r\n\r\n switch (\r\n !retainType &&\r\n element.type.is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n element.type.size < contextualType.size\r\n ? (this.currentType = contextualType).kind // essentially precomputes a (sign-)extension\r\n : (this.currentType = element.type).kind\r\n ) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n var shift = element.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 var 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 throw new Error(\"concrete type expected\");\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\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 case NodeKind.FUNCTIONARROW:\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(expression, contextualType);\r\n break;\r\n\r\n case NodeKind.PROPERTYACCESS:\r\n expr = this.compilePropertyAccessExpression(\r\n expression,\r\n contextualType,\r\n conversionKind == ConversionKind.NONE // retain type of inlined constants\r\n );\r\n break;\r\n\r\n case NodeKind.TERNARY:\r\n expr = this.compileTernaryExpression(expression, contextualType);\r\n break;\r\n\r\n case NodeKind.UNARYPOSTFIX:\r\n expr = this.compileUnaryPostfixExpression(expression, contextualType);\r\n break;\r\n\r\n case NodeKind.UNARYPREFIX:\r\n expr = this.compileUnaryPrefixExpression(expression, contextualType, wrapSmallIntegers);\r\n break;\r\n\r\n default:\r\n throw new Error(\"expression expected\");\r\n }\r\n\r\n if (conversionKind != ConversionKind.NONE && this.currentType != contextualType) {\r\n expr = this.convertExpression(expr, this.currentType, contextualType, conversionKind, expression);\r\n this.currentType = contextualType;\r\n }\r\n\r\n this.addDebugLocation(expr, expression.range);\r\n return expr;\r\n }\r\n\r\n compileExpressionRetainType(expression: Expression, contextualType: Type, wrapSmallIntegers: bool = true) {\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 nativeType = this.currentType.toNativeType();\r\n var typeRef = this.module.getFunctionTypeBySignature(nativeType, []);\r\n var typeRefAdded = false;\r\n if (!typeRef) {\r\n typeRef = this.module.addFunctionType(this.currentType.toSignatureString(), nativeType, []);\r\n typeRefAdded = true;\r\n }\r\n var funcRef = this.module.addFunction(\"__precompute\", typeRef, [], expr);\r\n this.module.runPasses([ \"precompute\" ], funcRef);\r\n var ret = _BinaryenFunctionGetBody(funcRef);\r\n this.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 if (conversionKind == ConversionKind.NONE) {\r\n assert(false, \"concrete type expected\");\r\n return expr;\r\n }\r\n\r\n // void to any\r\n if (fromType.kind == TypeKind.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 this.module.createUnreachable();\r\n }\r\n\r\n // any to void\r\n if (toType.kind == TypeKind.VOID) {\r\n return this.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 );\r\n }\r\n\r\n if (fromType.is(TypeFlags.FLOAT)) {\r\n\r\n // float to float\r\n if (toType.is(TypeFlags.FLOAT)) {\r\n if (fromType.kind == TypeKind.F32) {\r\n\r\n // f32 to f64\r\n if (toType.kind == TypeKind.F64) {\r\n expr = this.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 = this.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 = this.module.createUnary(UnaryOp.TruncF32ToI64, expr);\r\n } else {\r\n expr = this.module.createUnary(UnaryOp.TruncF32ToI32, expr);\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, this.module);\r\n }\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = this.module.createUnary(UnaryOp.TruncF32ToU64, expr);\r\n } else {\r\n expr = this.module.createUnary(UnaryOp.TruncF32ToU32, expr);\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, this.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 = this.module.createUnary(UnaryOp.TruncF64ToI64, expr);\r\n } else {\r\n expr = this.module.createUnary(UnaryOp.TruncF64ToI32, expr);\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, this.module);\r\n }\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = this.module.createUnary(UnaryOp.TruncF64ToU64, expr);\r\n } else {\r\n expr = this.module.createUnary(UnaryOp.TruncF64ToU32, expr);\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, this.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 = this.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 = this.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 = this.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 = this.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 = this.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 = this.module.createUnary(UnaryOp.WrapI64, expr); // discards upper bits\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, this.module);\r\n }\r\n }\r\n\r\n // i32 to i64\r\n } else if (toType.is(TypeFlags.LONG)) {\r\n expr = this.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, this.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\r\n var left: ExpressionRef;\r\n var leftType: Type;\r\n var right: ExpressionRef;\r\n var rightType: Type;\r\n var commonType: Type | null;\r\n\r\n var condition: 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\r\n case Token.LESSTHAN:\r\n left = this.compileExpressionRetainType(expression.left, contextualType);\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(expression.right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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 this.module.createUnreachable();\r\n }\r\n\r\n switch (commonType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n expr = this.module.createBinary(BinaryOp.LtI32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.LtI64, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtI64\r\n : BinaryOp.LtI32,\r\n left,\r\n right\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 = this.module.createBinary(BinaryOp.LtU32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtU64\r\n : BinaryOp.LtU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.LtU64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.LtF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.LtF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n\r\n case Token.GREATERTHAN:\r\n left = this.compileExpressionRetainType(expression.left, contextualType);\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(expression.right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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 this.module.createUnreachable();\r\n }\r\n\r\n switch (commonType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n expr = this.module.createBinary(BinaryOp.GtI32, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.GtI64, left, right);\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 = this.module.createBinary(BinaryOp.GtU32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtU64\r\n : BinaryOp.GtU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.GtU64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.GtF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.GtF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n\r\n case Token.LESSTHAN_EQUALS:\r\n left = this.compileExpressionRetainType(expression.left, contextualType);\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(expression.right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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 this.module.createUnreachable();\r\n }\r\n\r\n switch (commonType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n expr = this.module.createBinary(BinaryOp.LeI32, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeI64\r\n : BinaryOp.LeI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.LeI64, left, right);\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 = this.module.createBinary(BinaryOp.LeU32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeU64\r\n : BinaryOp.LeU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.LeU64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.LeF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.LeF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n\r\n case Token.GREATERTHAN_EQUALS:\r\n left = this.compileExpressionRetainType(expression.left, contextualType);\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(expression.right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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 this.module.createUnreachable();\r\n }\r\n\r\n switch (commonType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n expr = this.module.createBinary(BinaryOp.GeI32, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeI64\r\n : BinaryOp.GeI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.GeI64, left, right);\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 = this.module.createBinary(BinaryOp.GeU32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeU64\r\n : BinaryOp.GeU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.GeU64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.GeF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.GeF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = Type.bool;\r\n break;\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 left = this.compileExpressionRetainType(expression.left, contextualType);\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(expression.right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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, Token.operatorToString(expression.operator), leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n\r\n switch (commonType.kind) {\r\n\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 = this.module.createBinary(BinaryOp.EqI32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.EqI64\r\n : BinaryOp.EqI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.EqI64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.EqF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.EqF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\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 left = this.compileExpressionRetainType(expression.left, contextualType);\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(expression.right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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, Token.operatorToString(expression.operator), leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n\r\n switch (commonType.kind) {\r\n\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 = this.module.createBinary(BinaryOp.NeI32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.NeI64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.NeF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.NeF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n\r\n case Token.EQUALS:\r\n return this.compileAssignment(expression.left, expression.right, contextualType);\r\n\r\n case Token.PLUS_EQUALS:\r\n compound = true;\r\n case Token.PLUS:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n if (compound) {\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(\r\n expression.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 left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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 this.module.createUnreachable();\r\n }\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n\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 possiblyOverflows = true;\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n expr = this.module.createBinary(BinaryOp.AddI32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.AddI64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.AddF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.AddF64, left, right);\r\n break;\r\n\r\n default:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.MINUS_EQUALS:\r\n compound = true;\r\n case Token.MINUS:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n if (compound) {\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(\r\n expression.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 left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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 this.module.createUnreachable();\r\n }\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n\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 possiblyOverflows = true;\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n expr = this.module.createBinary(BinaryOp.SubI32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.SubI64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.SubF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.SubF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.ASTERISK_EQUALS:\r\n compound = true;\r\n case Token.ASTERISK:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n if (compound) {\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(\r\n expression.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 left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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 this.module.createUnreachable();\r\n }\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n\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 possiblyOverflows = true;\r\n // fall-through\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n expr = this.module.createBinary(BinaryOp.MulI32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.MulI64\r\n : BinaryOp.MulI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.MulI64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.MulF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.MulF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.SLASH_EQUALS:\r\n compound = true;\r\n case Token.SLASH:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n true // TODO: when can division remain unwrapped? does it overflow?\r\n );\r\n if (compound) {\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(\r\n expression.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 left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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 this.module.createUnreachable();\r\n }\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n possiblyOverflows = true;\r\n case TypeKind.I32:\r\n expr = this.module.createBinary(BinaryOp.DivI32, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivI64\r\n : BinaryOp.DivI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.DivI64, left, right);\r\n break;\r\n\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true;\r\n case TypeKind.U32:\r\n expr = this.module.createBinary(BinaryOp.DivU32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivU64\r\n : BinaryOp.DivU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.DivU64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.DivF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.DivF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.PERCENT_EQUALS:\r\n compound = true;\r\n case Token.PERCENT:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n true // TODO: when can remainder remain unwrapped? does it overflow?\r\n );\r\n if (compound) {\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(\r\n expression.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 left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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 this.module.createUnreachable();\r\n }\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n expr = this.module.createBinary(BinaryOp.RemI32, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemI64\r\n : BinaryOp.RemI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.RemI64, left, right);\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 = this.module.createBinary(BinaryOp.RemU32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemU64\r\n : BinaryOp.RemU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.RemU64, left, right);\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 = this.module.createUnreachable();\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n compound = true;\r\n case Token.LESSTHAN_LESSTHAN:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n\r\n switch (this.currentType.kind) {\r\n\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 possiblyOverflows = true;\r\n default:\r\n expr = this.module.createBinary(BinaryOp.ShlI32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.ShlI64, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShlI64\r\n : BinaryOp.ShlI32,\r\n left,\r\n right\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, Token.operatorToString(expression.operator), this.currentType.toString()\r\n );\r\n return this.module.createUnreachable();\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n true // must wrap small integers\r\n );\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n true // ^\r\n );\r\n\r\n switch (this.currentType.kind) {\r\n\r\n default:\r\n // assumes signed shr on signed small integers does not overflow\r\n expr = this.module.createBinary(BinaryOp.ShrI32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.ShrI64, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrI64\r\n : BinaryOp.ShrI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n // assumes unsigned shr on unsigned small integers does not overflow\r\n case TypeKind.U32:\r\n expr = this.module.createBinary(BinaryOp.ShrU32, left, right);\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.ShrU64, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n left,\r\n right\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, Token.operatorToString(expression.operator), this.currentType.toString()\r\n );\r\n return this.module.createUnreachable();\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n true // modifies low bits of small integers if unsigned\r\n );\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n true // ^\r\n );\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n possiblyOverflows = true;\r\n // fall-through\r\n default:\r\n // assumes that unsigned shr on unsigned small integers does not overflow\r\n expr = this.module.createBinary(BinaryOp.ShrU32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.ShrU64, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.AMPERSAND_EQUALS:\r\n compound = true;\r\n case Token.AMPERSAND:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n if (compound) {\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(\r\n expression.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 left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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 this.module.createUnreachable();\r\n }\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n\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 possiblyOverflows = true; // if left or right already did\r\n default:\r\n expr = this.module.createBinary(BinaryOp.AndI32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.AndI64, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AndI64\r\n : BinaryOp.AndI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.BAR_EQUALS:\r\n compound = true;\r\n case Token.BAR:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n if (compound) {\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(\r\n expression.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 left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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 this.module.createUnreachable();\r\n }\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n\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 possiblyOverflows = true; // if left or right already did\r\n default:\r\n expr = this.module.createBinary(BinaryOp.OrI32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.OrI64, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.OrI64\r\n : BinaryOp.OrI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.CARET_EQUALS:\r\n compound = true;\r\n case Token.CARET:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n if (compound) {\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(\r\n expression.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 left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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 this.module.createUnreachable();\r\n }\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n\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 possiblyOverflows = true; // if left or right already did\r\n default:\r\n expr = this.module.createBinary(BinaryOp.XorI32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.XorI64, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n // logical (no overloading)\r\n\r\n case Token.AMPERSAND_AMPERSAND: // left && right\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType\r\n );\r\n right = this.compileExpression(\r\n expression.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(left, 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 left = this.module.createTeeLocal(tempLocal.index, left);\r\n }\r\n\r\n possiblyOverflows = this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER);\r\n condition = makeIsTrueish(left, this.currentType, this.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 condition, // left\r\n right, // ? 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 = this.module.createIf(\r\n condition,\r\n right,\r\n this.module.createGetLocal(\r\n assert(tempLocal, \"tempLocal must be set\").index,\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 left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType\r\n );\r\n right = this.compileExpression(\r\n expression.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(left, 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 left = this.module.createTeeLocal(tempLocal.index, left);\r\n }\r\n\r\n possiblyOverflows = this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER); // if right did\r\n condition = makeIsTrueish(left, this.currentType, this.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 condition, // left\r\n expr, // ? cloned left\r\n right // : right\r\n );\r\n }\r\n\r\n // otherwise make use of the temp. local\r\n else {\r\n expr = this.module.createIf(\r\n condition,\r\n this.module.createGetLocal(\r\n assert(tempLocal, \"tempLocal must be set\").index,\r\n this.currentType.toNativeType()\r\n ),\r\n right\r\n );\r\n }\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"not implemented\");\r\n }\r\n if (possiblyOverflows && wrapSmallIntegers) {\r\n assert(this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER), \"small integer type expected\");\r\n expr = makeSmallIntegerWrap(expr, this.currentType, this.module);\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(expression.left, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n\r\n compileAssignment(expression: Expression, valueExpression: Expression, contextualType: Type): ExpressionRef {\r\n var resolved = this.program.resolveExpression(expression, this.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\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 var setterPrototype = (element).setterPrototype;\r\n if (setterPrototype) {\r\n var setterInstance = setterPrototype.resolve(); // reports\r\n if (!setterInstance) return this.module.createUnreachable();\r\n assert(setterInstance.parameters && setterInstance.parameters.length == 1);\r\n elementType = (setterInstance.parameters)[0].type;\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 assert(\r\n resolved.target &&\r\n resolved.target.kind == ElementKind.CLASS &&\r\n element.simpleName == (resolved.target).prototype.fnIndexedGet\r\n );\r\n var resolvedIndexedSet = (element).resolve(null);\r\n if (resolvedIndexedSet) {\r\n elementType = resolvedIndexedSet.returnType;\r\n break;\r\n }\r\n }\r\n // fall-through\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 // now compile the value and do the assignment\r\n this.currentType = elementType;\r\n return this.compileAssignmentWithValue(\r\n expression,\r\n this.compileExpression(valueExpression, elementType),\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 resolved = this.program.resolveExpression(expression, this.currentFunction); // reports\r\n if (!resolved) return this.module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n var tempLocal: Local;\r\n var targetExpr: ExpressionRef;\r\n switch (element.kind) {\r\n\r\n case ElementKind.LOCAL:\r\n this.currentType = tee ? (element).type : Type.void;\r\n if ((element).is(ElementFlags.CONSTANT)) {\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 return tee\r\n ? this.module.createTeeLocal((element).index, valueWithCorrectType)\r\n : this.module.createSetLocal((element).index, valueWithCorrectType);\r\n\r\n case ElementKind.GLOBAL:\r\n if (!this.compileGlobal(element)) { // reports; not yet compiled if a static field\r\n return this.module.createUnreachable();\r\n }\r\n assert((element).type != Type.void, \"concrete type expected\");\r\n this.currentType = tee ? (element).type : Type.void;\r\n if ((element).is(ElementFlags.CONSTANT)) {\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 this.module.createUnreachable();\r\n }\r\n if (!tee) {\r\n return this.module.createSetGlobal((element).internalName, valueWithCorrectType);\r\n }\r\n var globalNativeType = (element).type.toNativeType();\r\n return this.module.createBlock(null, [ // emulated teeGlobal\r\n this.module.createSetGlobal((element).internalName, valueWithCorrectType),\r\n this.module.createGetGlobal((element).internalName, globalNativeType)\r\n ], globalNativeType);\r\n\r\n case ElementKind.FIELD:\r\n if ((element).prototype.isReadonly) {\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 assert(resolved.targetExpression != null, \"target expression expected\");\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n this.options.isWasm64\r\n ? Type.usize64\r\n : Type.usize32,\r\n ConversionKind.NONE\r\n );\r\n assert(this.currentType.classType, \"class type expected\");\r\n this.currentType = tee ? (element).type : Type.void;\r\n var elementNativeType = (element).type.toNativeType();\r\n if (!tee) {\r\n return this.module.createStore(\r\n (element).type.size >> 3,\r\n targetExpr,\r\n valueWithCorrectType,\r\n elementNativeType,\r\n (element).memoryOffset\r\n );\r\n }\r\n tempLocal = this.currentFunction.getAndFreeTempLocal((element).type);\r\n // TODO: simplify if valueWithCorrectType has no side effects\r\n return this.module.createBlock(null, [\r\n this.module.createSetLocal(tempLocal.index, valueWithCorrectType),\r\n this.module.createStore(\r\n (element).type.size >> 3,\r\n targetExpr,\r\n this.module.createGetLocal(tempLocal.index, elementNativeType),\r\n elementNativeType,\r\n (element).memoryOffset\r\n ),\r\n this.module.createGetLocal(tempLocal.index, elementNativeType)\r\n ], elementNativeType);\r\n\r\n case ElementKind.PROPERTY:\r\n var setterPrototype = (element).setterPrototype;\r\n if (setterPrototype) {\r\n var setterInstance = setterPrototype.resolve(); // reports\r\n if (setterInstance) {\r\n assert(setterInstance.parameters && setterInstance.parameters.length == 1);\r\n if (!tee) {\r\n if (setterInstance.is(ElementFlags.INSTANCE)) {\r\n assert(resolved.targetExpression != null);\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n this.options.isWasm64\r\n ? Type.usize64\r\n : Type.usize32,\r\n ConversionKind.NONE\r\n );\r\n assert(this.currentType.classType);\r\n this.currentType = Type.void;\r\n return this.makeCall(setterInstance, [ targetExpr, valueWithCorrectType ]);\r\n } else {\r\n this.currentType = Type.void;\r\n return this.makeCall(setterInstance, [ valueWithCorrectType ]);\r\n }\r\n }\r\n var getterPrototype = (element).getterPrototype;\r\n assert(getterPrototype != null);\r\n var getterInstance = (getterPrototype).resolve(); // reports\r\n if (getterInstance) {\r\n assert(!getterInstance.parameters || !getterInstance.parameters.length);\r\n if (setterInstance.is(ElementFlags.INSTANCE)) {\r\n assert(resolved.targetExpression != null);\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n this.options.isWasm64\r\n ? Type.usize64\r\n : Type.usize32,\r\n ConversionKind.NONE\r\n );\r\n assert(this.currentType.classType);\r\n tempLocal = this.currentFunction.getAndFreeTempLocal(getterInstance.returnType);\r\n return this.module.createBlock(null, [\r\n this.makeCall(setterInstance, [\r\n this.module.createTeeLocal(tempLocal.index, targetExpr), valueWithCorrectType\r\n ]),\r\n this.makeCall(getterInstance, [\r\n this.module.createGetLocal(tempLocal.index, tempLocal.type.toNativeType())\r\n ])\r\n ], (this.currentType = getterInstance.returnType).toNativeType());\r\n } else {\r\n return this.module.createBlock(null, [\r\n this.makeCall(setterInstance, [ valueWithCorrectType ]),\r\n this.makeCall(getterInstance)\r\n ], (this.currentType = getterInstance.returnType).toNativeType());\r\n }\r\n }\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 this.module.createUnreachable();\r\n\r\n case ElementKind.FUNCTION_PROTOTYPE:\r\n if (expression.kind == NodeKind.ELEMENTACCESS) { // @operator(\"[]\")\r\n assert(resolved.target && resolved.target.kind == ElementKind.CLASS);\r\n var resolvedIndexedGet = (element).resolve();\r\n if (!resolvedIndexedGet) return this.module.createUnreachable();\r\n var indexedSetName = (resolved.target).prototype.fnIndexedSet;\r\n var indexedSet: Element | null;\r\n if (\r\n indexedSetName != null &&\r\n (resolved.target).members &&\r\n (indexedSet = (>(resolved.target).members).get(indexedSetName)) &&\r\n indexedSet.kind == ElementKind.FUNCTION_PROTOTYPE\r\n ) { // @operator(\"[]=\")\r\n var resolvedIndexedSet = (indexedSet).resolve();\r\n if (!resolvedIndexedSet) return this.module.createUnreachable();\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n this.options.isWasm64\r\n ? Type.usize64\r\n : Type.usize32,\r\n ConversionKind.NONE\r\n );\r\n assert(this.currentType.classType);\r\n var elementExpr = this.compileExpression(\r\n (expression).elementExpression,\r\n Type.i32\r\n );\r\n if (!tee) {\r\n this.currentType = resolvedIndexedSet.returnType;\r\n return this.makeCall(resolvedIndexedSet, [\r\n targetExpr,\r\n elementExpr,\r\n valueWithCorrectType\r\n ]);\r\n }\r\n this.currentType = resolvedIndexedGet.returnType;\r\n tempLocal = this.currentFunction.getAndFreeTempLocal(this.currentType);\r\n return this.module.createBlock(null, [\r\n this.makeCall(resolvedIndexedSet, [\r\n targetExpr,\r\n elementExpr,\r\n this.module.createTeeLocal(tempLocal.index, valueWithCorrectType)\r\n ]),\r\n // TODO: could be different from an actual __get (needs 2 temp locals)\r\n this.module.createGetLocal(tempLocal.index, tempLocal.type.toNativeType())\r\n ], this.currentType.toNativeType());\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 this.module.createUnreachable();\r\n }\r\n }\r\n // fall-through\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 compileCallExpression(expression: CallExpression, contextualType: Type): ExpressionRef {\r\n var resolved = this.program.resolveExpression(expression.expression, this.currentFunction); // reports\r\n if (!resolved) return this.module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n var functionPrototype: FunctionPrototype;\r\n var functionInstance: Function | null;\r\n switch (element.kind) {\r\n\r\n // direct function call\r\n case ElementKind.FUNCTION_PROTOTYPE:\r\n functionPrototype = element;\r\n if (functionPrototype.is(ElementFlags.BUILTIN)) {\r\n let expr = compileBuiltinCall( // reports\r\n this,\r\n functionPrototype,\r\n functionPrototype.resolveBuiltinTypeArguments(\r\n expression.typeArguments,\r\n this.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 this.module.createUnreachable();\r\n }\r\n return expr;\r\n } else {\r\n functionInstance = functionPrototype.resolveUsingTypeArguments( // reports\r\n expression.typeArguments,\r\n this.currentFunction.contextualTypeArguments,\r\n expression\r\n );\r\n if (!functionInstance) return this.module.createUnreachable();\r\n }\r\n break;\r\n\r\n // indirect function call\r\n // TODO: currently these are bound to distinct functions, not types.\r\n case ElementKind.LOCAL:\r\n case ElementKind.GLOBAL:\r\n case ElementKind.FIELD:\r\n if ((element).type.isFunction) {\r\n functionInstance = (element).type.functionType;\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 this.module.createUnreachable();\r\n }\r\n break;\r\n\r\n default:\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.internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n var numArguments = expression.arguments.length;\r\n var numArgumentsInclThis = functionInstance.instanceMethodOf\r\n ? numArguments + 1\r\n : numArguments;\r\n var argumentIndex = 0;\r\n\r\n var args = new Array(numArgumentsInclThis);\r\n if (functionInstance.instanceMethodOf) {\r\n assert(resolved.targetExpression != null);\r\n args[argumentIndex++] = resolved.targetExpression;\r\n }\r\n for (var i = 0; i < numArguments; ++i) {\r\n args[argumentIndex++] = expression.arguments[i];\r\n }\r\n return this.compileCall(functionInstance, args, expression);\r\n }\r\n\r\n /**\r\n * Compiles a call to a function. If an instance method, `this` is the first element in\r\n * `argumentExpressions` or can be specified explicitly as the last argument.\r\n */\r\n compileCall(\r\n functionInstance: Function,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n\r\n // validate and compile arguments\r\n var parameters = functionInstance.parameters;\r\n\r\n var numParameters = parameters ? parameters.length : 0;\r\n var numParametersInclThis = functionInstance.instanceMethodOf != null\r\n ? numParameters + 1\r\n : numParameters;\r\n var numArgumentsInclThis = argumentExpressions.length;\r\n var numArguments = functionInstance.instanceMethodOf != null\r\n ? numArgumentsInclThis - 1\r\n : numArgumentsInclThis;\r\n if (thisArg) numArgumentsInclThis++;\r\n\r\n if (numArgumentsInclThis > numParametersInclThis) { // too many arguments\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, numParameters.toString(10), numArguments.toString(10)\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n var operands = new Array(numParametersInclThis);\r\n var operandIndex = 0;\r\n var argumentIndex = 0;\r\n if (functionInstance.instanceMethodOf) {\r\n if (thisArg) {\r\n operands[operandIndex++] = thisArg;\r\n } else {\r\n operands[operandIndex++] = this.compileExpression(\r\n argumentExpressions[argumentIndex++],\r\n functionInstance.instanceMethodOf.type\r\n );\r\n }\r\n }\r\n if (parameters) {\r\n for (; operandIndex < numParametersInclThis; ++operandIndex) {\r\n\r\n // argument has been provided\r\n if (numArgumentsInclThis > operandIndex) {\r\n operands[operandIndex] = this.compileExpression(\r\n argumentExpressions[argumentIndex++],\r\n parameters[operandIndex + numParameters - numParametersInclThis].type\r\n );\r\n\r\n // argument has been omitted\r\n } else {\r\n var initializer = parameters[operandIndex + numParameters - numParametersInclThis].initializer;\r\n if (initializer) { // fall back to provided initializer\r\n operands[operandIndex] = this.compileExpression(\r\n initializer,\r\n parameters[operandIndex + numParameters - numParametersInclThis].type\r\n );\r\n // FIXME: here, the initializer is compiled in the caller's scope.\r\n // a solution could be to use a stub for each possible overload, calling the\r\n // full function with optional arguments being part of the stub's body.\r\n\r\n } else { // too few arguments\r\n this.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range,\r\n (operandIndex + numParameters - numParametersInclThis).toString(10),\r\n numArguments.toString(10)\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.currentType = functionInstance.returnType;\r\n return this.makeCall(functionInstance, operands);\r\n }\r\n\r\n /** Makes a call operation as is. */\r\n makeCall(functionInstance: Function, operands: ExpressionRef[] | null = null): ExpressionRef {\r\n if (!(functionInstance.is(ElementFlags.COMPILED) || this.compileFunction(functionInstance))) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n // imported function\r\n if (functionInstance.is(ElementFlags.DECLARED)) {\r\n return this.module.createCallImport(\r\n functionInstance.internalName,\r\n operands,\r\n functionInstance.returnType.toNativeType()\r\n );\r\n }\r\n\r\n // internal function\r\n return this.module.createCall(\r\n functionInstance.internalName,\r\n operands,\r\n functionInstance.returnType.toNativeType()\r\n );\r\n }\r\n\r\n compileCommaExpression(expression: CommaExpression, contextualType: Type): ExpressionRef {\r\n var expressions = expression.expressions;\r\n var k = expressions.length;\r\n var exprs = new Array(k--);\r\n for (var i = 0; i < k; ++i) {\r\n exprs[i] = this.compileExpression(expressions[i], Type.void); // drop all\r\n }\r\n exprs[i] = this.compileExpression(expressions[i], 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 assert(\r\n resolved.element.kind == ElementKind.FUNCTION_PROTOTYPE &&\r\n resolved.target &&\r\n resolved.target.kind == ElementKind.CLASS\r\n );\r\n var instance = (resolved.element).resolve(\r\n null,\r\n (resolved.target).contextualTypeArguments\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n return this.compileCall(instance, [\r\n expression.expression,\r\n expression.elementExpression\r\n ], expression);\r\n }\r\n\r\n compileFunctionExpression(expression: FunctionExpression, contextualType: Type): ExpressionRef {\r\n var declaration = expression.declaration;\r\n var simpleName = (declaration.name.text.length\r\n ? declaration.name.text\r\n : \"anonymous\") + \"|\" + this.functionTable.length.toString(10);\r\n var prototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n this.currentFunction.internalName + \"~\" + simpleName,\r\n declaration\r\n );\r\n var instance = this.compileFunctionUsingTypeArguments(prototype, [], null, declaration);\r\n if (!instance) return this.module.createUnreachable();\r\n this.currentType = Type.u32.asFunction(instance);\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.addFunctionTableEntry(instance);\r\n if (index < 0) return this.module.createUnreachable();\r\n return 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 // check special keywords first\r\n switch (expression.kind) {\r\n\r\n case NodeKind.NULL:\r\n if (this.options.isWasm64) {\r\n if (!contextualType.classType) {\r\n assert(contextualType.kind == TypeKind.USIZE);\r\n this.currentType = Type.usize64;\r\n }\r\n return this.module.createI64(0);\r\n }\r\n if (!contextualType.classType) {\r\n assert(contextualType.kind == TypeKind.USIZE);\r\n this.currentType = Type.usize32;\r\n }\r\n return this.module.createI32(0);\r\n\r\n case NodeKind.TRUE:\r\n this.currentType = Type.bool;\r\n return this.module.createI32(1);\r\n\r\n case NodeKind.FALSE:\r\n this.currentType = Type.bool;\r\n return this.module.createI32(0);\r\n\r\n case NodeKind.THIS:\r\n if (this.currentFunction.instanceMethodOf) {\r\n this.currentType = this.currentFunction.instanceMethodOf.type;\r\n return this.module.createGetLocal(0, this.currentType.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.isWasm64 ? Type.usize64 : Type.usize32;\r\n return this.module.createUnreachable();\r\n\r\n case NodeKind.SUPER:\r\n if (this.currentFunction.instanceMethodOf && this.currentFunction.instanceMethodOf.base) {\r\n this.currentType = this.currentFunction.instanceMethodOf.base.type;\r\n return this.module.createGetLocal(0, this.currentType.toNativeType());\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.isWasm64 ? Type.usize64 : Type.usize32;\r\n return this.module.createUnreachable();\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 this.module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n switch (element.kind) {\r\n\r\n case ElementKind.LOCAL:\r\n if ((element).is(ElementFlags.INLINED)) {\r\n return this.compileInlineConstant(element, contextualType, retainConstantType);\r\n }\r\n assert((element).index >= 0);\r\n this.currentType = (element).type;\r\n return this.module.createGetLocal((element).index, this.currentType.toNativeType());\r\n\r\n case ElementKind.GLOBAL:\r\n if (element.is(ElementFlags.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 assert((element).type != Type.void);\r\n if ((element).is(ElementFlags.INLINED)) {\r\n return this.compileInlineConstant(element, contextualType, retainConstantType);\r\n }\r\n this.currentType = (element).type;\r\n return this.module.createGetGlobal((element).internalName, this.currentType.toNativeType());\r\n\r\n case ElementKind.ENUMVALUE: // here: if referenced from within the same enum\r\n if (!element.is(ElementFlags.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(ElementFlags.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 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 switch (expression.literalKind) {\r\n\r\n case LiteralKind.ARRAY:\r\n assert(!implicitNegate);\r\n var classType = contextualType.classType;\r\n if (\r\n classType &&\r\n classType == this.program.elements.get(\"Array\") &&\r\n classType.typeArguments && classType.typeArguments.length == 1\r\n ) {\r\n return this.compileStaticArray(\r\n classType.typeArguments[0],\r\n (expression).elementExpressions\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 case LiteralKind.FLOAT: {\r\n var floatValue = (expression).value;\r\n if (implicitNegate) {\r\n floatValue = -floatValue;\r\n }\r\n if (contextualType == Type.f32) {\r\n return this.module.createF32(floatValue);\r\n }\r\n this.currentType = Type.f64;\r\n return this.module.createF64(floatValue);\r\n }\r\n\r\n case LiteralKind.INTEGER:\r\n var 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)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.I16:\r\n if (i64_is_i16(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.I32:\r\n if (i64_is_i32(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.U8:\r\n if (i64_is_u8(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.U16:\r\n if (i64_is_u16(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.U32:\r\n if (i64_is_u32(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.BOOL:\r\n if (i64_is_bool(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n if (!this.options.isWasm64) {\r\n if (i64_is_u32(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n }\r\n return this.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)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n }\r\n return this.module.createI64(i64_low(intValue), i64_high(intValue));\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n return this.module.createI64(i64_low(intValue), i64_high(intValue));\r\n\r\n case TypeKind.F32:\r\n if (i64_is_f32(intValue)) {\r\n return this.module.createF32(i64_to_f32(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.F64:\r\n if (i64_is_f64(intValue)) {\r\n return this.module.createF64(i64_to_f64(intValue));\r\n }\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 break;\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 this.module.createI32(i64_low(intValue));\r\n } else {\r\n this.currentType = Type.i64;\r\n return this.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 this.module.createUnreachable();\r\n }\r\n\r\n compileStaticString(stringValue: string): ExpressionRef {\r\n var stringSegment: MemorySegment | null = this.stringSegments.get(stringValue);\r\n if (!stringSegment) {\r\n var stringLength = stringValue.length;\r\n var 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 (var 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, this.options.usizeType.byteSize);\r\n this.stringSegments.set(stringValue, stringSegment);\r\n }\r\n var stringOffset = stringSegment.offset;\r\n var stringType = this.program.types.get(\"string\");\r\n this.currentType = stringType ? stringType : this.options.usizeType;\r\n if (this.options.isWasm64) {\r\n return this.module.createI64(i64_low(stringOffset), i64_high(stringOffset));\r\n }\r\n assert(i64_is_i32(stringOffset));\r\n return this.module.createI32(i64_low(stringOffset));\r\n }\r\n\r\n compileStaticArray(elementType: Type, expressions: (Expression | null)[]): ExpressionRef {\r\n // compile as static if all element expressions are precomputable, otherwise\r\n // initialize in place.\r\n var isStatic = true;\r\n var size = expressions.length;\r\n\r\n var nativeType = elementType.toNativeType();\r\n var values: usize;\r\n switch (nativeType) {\r\n\r\n case NativeType.I32:\r\n values = changetype(new Int32Array(size));\r\n break;\r\n\r\n case NativeType.I64:\r\n values = changetype(new Array(size));\r\n break;\r\n\r\n case NativeType.F32:\r\n values = changetype(new Float32Array(size));\r\n break;\r\n\r\n case NativeType.F64:\r\n values = changetype(new Float64Array(size));\r\n break;\r\n\r\n default:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n\r\n var exprs = new Array(size);\r\n var expr: BinaryenExpressionRef;\r\n for (var i = 0; i < size; ++i) {\r\n exprs[i] = expressions[i]\r\n ? this.compileExpression(expressions[i], elementType)\r\n : elementType.toNativeZero(this.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\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 } else {\r\n // TODO: emit a warning if declared 'const'\r\n isStatic = false;\r\n }\r\n }\r\n }\r\n\r\n if (isStatic) {\r\n // TODO: convert to Uint8Array and create the segment\r\n } else {\r\n // TODO: initialize in place\r\n }\r\n // TODO: alternatively, static elements could go into data segments while\r\n // dynamic ones are initialized on top? any benefits? (doesn't seem so)\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n compileNewExpression(expression: NewExpression, contextualType: Type): ExpressionRef {\r\n var resolved = this.program.resolveExpression( // reports\r\n expression.expression,\r\n this.currentFunction\r\n );\r\n if (resolved) {\r\n if (resolved.element.kind == ElementKind.CLASS_PROTOTYPE) {\r\n var prototype = resolved.element;\r\n var instance = prototype.resolveUsingTypeArguments( // reports\r\n expression.typeArguments,\r\n null,\r\n expression\r\n );\r\n if (instance) {\r\n var thisExpr = compileBuiltinAllocate(this, instance, expression);\r\n var initializers = new Array();\r\n\r\n // use a temp local for 'this'\r\n var tempLocal = this.currentFunction.getTempLocal(this.options.usizeType);\r\n initializers.push(this.module.createSetLocal(tempLocal.index, thisExpr));\r\n\r\n // apply field initializers\r\n if (instance.members) {\r\n for (var member of instance.members.values()) {\r\n if (member.kind == ElementKind.FIELD) {\r\n var field = member;\r\n var fieldDeclaration = field.prototype.declaration;\r\n if (field.is(ElementFlags.CONSTANT)) {\r\n assert(false); // there are no built-in fields currently\r\n } else if (fieldDeclaration && fieldDeclaration.initializer) {\r\n initializers.push(this.module.createStore(field.type.byteSize,\r\n this.module.createGetLocal(tempLocal.index, this.options.nativeSizeType),\r\n this.compileExpression(fieldDeclaration.initializer, field.type),\r\n field.type.toNativeType(),\r\n field.memoryOffset\r\n ));\r\n }\r\n }\r\n }\r\n }\r\n\r\n // apply constructor\r\n var constructorInstance = instance.constructorInstance;\r\n if (constructorInstance) {\r\n initializers.push(this.compileCall(constructorInstance, expression.arguments, expression,\r\n this.module.createGetLocal(tempLocal.index, this.options.nativeSizeType)\r\n ));\r\n }\r\n\r\n // return 'this'\r\n initializers.push(this.module.createGetLocal(tempLocal.index, this.options.nativeSizeType));\r\n this.currentFunction.freeTempLocal(tempLocal);\r\n thisExpr = this.module.createBlock(null, initializers, this.options.nativeSizeType);\r\n\r\n this.currentType = instance.type;\r\n return thisExpr;\r\n }\r\n } else {\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 }\r\n }\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileParenthesizedExpression(expression: ParenthesizedExpression, contextualType: Type): ExpressionRef {\r\n // does not change types, just order\r\n return this.compileExpression(expression.expression, contextualType, ConversionKind.NONE);\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 resolved = this.program.resolvePropertyAccess(propertyAccess, this.currentFunction); // reports\r\n if (!resolved) return this.module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n var targetExpr: ExpressionRef;\r\n switch (element.kind) {\r\n\r\n case ElementKind.GLOBAL: // static property\r\n if (element.is(ElementFlags.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 this.module.createUnreachable();\r\n }\r\n assert((element).type != Type.void);\r\n if ((element).is(ElementFlags.INLINED)) {\r\n return this.compileInlineConstant(element, contextualType, retainConstantType);\r\n }\r\n this.currentType = (element).type;\r\n return this.module.createGetGlobal((element).internalName, this.currentType.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(ElementFlags.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.FIELD: // instance field\r\n assert(resolved.target != null);\r\n assert(resolved.targetExpression != null);\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 this.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 var getter = (element).getterPrototype;\r\n assert(getter != null);\r\n var getterInstance = (getter).resolve(null); // reports\r\n if (!getterInstance) return this.module.createUnreachable();\r\n assert(!getterInstance.parameters || !getterInstance.parameters.length);\r\n this.currentType = getterInstance.returnType;\r\n if (getterInstance.is(ElementFlags.INSTANCE)) {\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n this.options.usizeType,\r\n ConversionKind.NONE\r\n );\r\n this.currentType = getterInstance.returnType;\r\n return this.makeCall(getterInstance, [ targetExpr ]);\r\n } else {\r\n return this.makeCall(getterInstance);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n propertyAccess.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileTernaryExpression(expression: TernaryExpression, contextualType: Type): ExpressionRef {\r\n var condition = makeIsTrueish(\r\n this.compileExpression(expression.condition, Type.u32, ConversionKind.NONE),\r\n this.currentType,\r\n this.module\r\n );\r\n var ifThen = this.compileExpression(expression.ifThen, contextualType);\r\n var ifElse = this.compileExpression(expression.ifElse, contextualType);\r\n return this.module.createIf(condition, ifThen, ifElse);\r\n }\r\n\r\n compileUnaryPostfixExpression(expression: UnaryPostfixExpression, contextualType: Type): ExpressionRef {\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\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\r\n case Token.PLUS_PLUS:\r\n if (this.currentType.isReference) {\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 switch (this.currentType.kind) {\r\n\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 possiblyOverflows = true;\r\n default:\r\n op = BinaryOp.AddI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = this.module.createI32(1);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n op = this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32;\r\n nativeType = this.options.isWasm64\r\n ? NativeType.I64\r\n : NativeType.I32;\r\n nativeOne = this.currentType.toNativeOne(this.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 = this.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 = this.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 = this.module.createF64(1);\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.MINUS_MINUS:\r\n if (this.currentType.isReference) {\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 switch (this.currentType.kind) {\r\n\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 possiblyOverflows = true;\r\n default:\r\n op = BinaryOp.SubI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = this.module.createI32(1);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n op = this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32;\r\n nativeType = this.options.isWasm64\r\n ? NativeType.I64\r\n : NativeType.I32;\r\n nativeOne = this.currentType.toNativeOne(this.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 = this.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 = this.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 = this.module.createF64(1);\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"unary postfix operator expected\");\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 = this.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 = this.currentFunction.getTempLocal(this.currentType);\r\n setValue = this.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(this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER));\r\n setValue = makeSmallIntegerWrap(setValue, this.currentType, this.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 this.currentFunction.freeTempLocal(tempLocal);\r\n return this.module.createBlock(null, [\r\n this.module.createSetLocal((tempLocal).index, getValue),\r\n setValue,\r\n this.module.createGetLocal((tempLocal).index, 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 possiblyOverflows = false;\r\n var compound = false;\r\n var expr: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n\r\n case Token.PLUS:\r\n if (this.currentType.isReference) {\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 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 possiblyOverflows = this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER); // if operand already did\r\n break;\r\n\r\n case Token.MINUS:\r\n if (this.currentType.isReference) {\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 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 this.addDebugLocation(expr, expression.range); // compileExpression normally does this\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 switch (this.currentType.kind) {\r\n\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 possiblyOverflows = true; // or if operand already did\r\n default:\r\n expr = this.module.createBinary(BinaryOp.SubI32, this.module.createI32(0), expr);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (this.currentType.isReference) {\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 case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n this.currentType.toNativeZero(this.module),\r\n expr\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.SubI64, this.module.createI64(0), expr);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createUnary(UnaryOp.NegF32, expr);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createUnary(UnaryOp.NegF64, expr);\r\n break;\r\n }\r\n }\r\n break;\r\n\r\n case Token.PLUS_PLUS:\r\n if (this.currentType.isReference) {\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 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\r\n switch (this.currentType.kind) {\r\n\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 possiblyOverflows = true; // or if operand already did\r\n default:\r\n expr = this.module.createBinary(BinaryOp.AddI32, expr, this.module.createI32(1));\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (this.currentType.isReference) {\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 // fall-through\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n expr,\r\n this.currentType.toNativeOne(this.module)\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.AddI64, expr, this.module.createI64(1));\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.AddF32, expr, this.module.createF32(1));\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.AddF64, expr, this.module.createF64(1));\r\n break;\r\n }\r\n break;\r\n\r\n case Token.MINUS_MINUS:\r\n if (this.currentType.isReference) {\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 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\r\n switch (this.currentType.kind) {\r\n\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 possiblyOverflows = true; // or if operand already did\r\n // fall-through\r\n default:\r\n expr = this.module.createBinary(BinaryOp.SubI32, expr, this.module.createI32(1));\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (this.currentType.isReference) {\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 // fall-through\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n expr,\r\n this.currentType.toNativeOne(this.module)\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.SubI64, expr, this.module.createI64(1));\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.SubF32, expr, this.module.createF32(1));\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.SubF64, expr, this.module.createF64(1));\r\n break;\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, this.module);\r\n this.currentType = Type.bool;\r\n break;\r\n\r\n case Token.TILDE:\r\n if (this.currentType.isReference) {\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 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\r\n switch (this.currentType.kind) {\r\n\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 possiblyOverflows = true; // or if operand already did\r\n default:\r\n expr = this.module.createBinary(BinaryOp.XorI32, expr, this.module.createI32(-1));\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (this.currentType.isReference) {\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 // fall-through\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n expr,\r\n this.currentType.toNativeNegOne(this.module)\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.XorI64, expr, this.module.createI64(-1, -1));\r\n break;\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 throw new Error(\"not implemented\");\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"unary operator expected\");\r\n }\r\n if (possiblyOverflows && wrapSmallIntegers) {\r\n assert(this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER));\r\n expr = makeSmallIntegerWrap(expr, this.currentType, this.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 addDebugLocation(expr: ExpressionRef, range: Range): void {\r\n if (this.options.sourceMap != null) {\r\n var source = range.source;\r\n if (source.debugInfoIndex < 0) {\r\n source.debugInfoIndex = this.module.addDebugInfoFile(source.normalizedPath);\r\n }\r\n range.debugInfoRef = expr;\r\n if (!this.currentFunction.debugLocations) this.currentFunction.debugLocations = [];\r\n this.currentFunction.debugLocations.push(range);\r\n }\r\n }\r\n}\r\n\r\n// helpers\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\r\n case TypeKind.I8:\r\n expr = 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 break;\r\n\r\n case TypeKind.I16:\r\n expr = 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 break;\r\n\r\n case TypeKind.U8:\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xff)\r\n );\r\n break;\r\n\r\n case TypeKind.U16:\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xffff)\r\n );\r\n break;\r\n\r\n case TypeKind.BOOL:\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0x1)\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n return expr;\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\r\n default: // any integer up to 32 bits\r\n expr = module.createUnary(UnaryOp.EqzI32, expr);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = module.createUnary(UnaryOp.EqzI64, expr);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: strings\r\n case TypeKind.ISIZE:\r\n expr = module.createUnary(type.size == 64 ? UnaryOp.EqzI64 : UnaryOp.EqzI32, expr);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = module.createBinary(BinaryOp.EqF32, expr, module.createF32(0));\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = module.createBinary(BinaryOp.EqF64, expr, module.createF64(0));\r\n break;\r\n\r\n case TypeKind.VOID:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n return expr;\r\n}\r\n\r\n/** Creates a comparison whether an expression is 'true' in a broader sense. */\r\nexport function makeIsTrueish(\r\n expr: ExpressionRef,\r\n type: Type,\r\n module: Module\r\n): ExpressionRef {\r\n switch (type.kind) {\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = module.createBinary(BinaryOp.NeI64, expr, module.createI64(0));\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: strings\r\n case TypeKind.ISIZE:\r\n if (type.size == 64) {\r\n expr = module.createBinary(BinaryOp.NeI64, expr, module.createI64(0));\r\n }\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = module.createBinary(BinaryOp.NeF32, expr, module.createF32(0));\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = module.createBinary(BinaryOp.NeF64, expr, module.createF64(0));\r\n break;\r\n\r\n case TypeKind.VOID:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n return expr;\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","import {\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 normalize(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 var 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 resolve(normalizedPath: string, origin: string): string {\r\n if (normalizedPath.startsWith(\"std/\")) {\r\n return normalizedPath;\r\n }\r\n return normalize(\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","/** 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 default:\r\n return false;\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 default:\r\n return c >= CharCode.ENQUAD && c <= CharCode.ZEROWIDTHSPACE;\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is a 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 an 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","// code below is generated from diagnosticsMessages.json by scripts/build-diagnostics\n/* tslint:disable:max-line-length */\n\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 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 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 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\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 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 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 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\r\n This is a custom parser specifically written for the AssemblyScript subset. It accepts some of the\r\n most common TypeScript-only patterns that it knows an appropriate error message for but, though it\r\n uses TypeScript's codes for diagnostics, doesn't ultimately aim at full compatibility.\r\n\r\n*/\r\n\r\nimport {\r\n Program,\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} from \"./tokenizer\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n normalize as normalizePath\r\n} from \"./util/path\";\r\n\r\nimport {\r\n\r\n Node,\r\n NodeKind,\r\n Source,\r\n SourceKind,\r\n TypeNode,\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 Decorator,\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 Modifier,\r\n ModifierKind,\r\n NamespaceDeclaration,\r\n Parameter,\r\n ParameterKind,\r\n ReturnStatement,\r\n SwitchCase,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n TypeDeclaration,\r\n TypeParameter,\r\n VariableStatement,\r\n VariableDeclaration,\r\n WhileStatement,\r\n\r\n addModifier,\r\n getModifier,\r\n hasModifier,\r\n setReusableModifiers\r\n\r\n} from \"./ast\";\r\n\r\n/** Parser interface. */\r\nexport class Parser extends DiagnosticEmitter {\r\n\r\n /** Program being created. */\r\n program: Program;\r\n /** 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\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\r\n // check if already parsed\r\n var normalizedPath = normalizePath(path);\r\n for (var i = 0, k = this.program.sources.length; i < k; ++i) {\r\n if (this.program.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 this.program.sources.push(source);\r\n\r\n // tokenize and parse\r\n var tn = new Tokenizer(source, this.program.diagnostics);\r\n source.tokenizer = tn;\r\n while (!tn.skip(Token.ENDOFFILE)) {\r\n var statement = this.parseTopLevelStatement(tn);\r\n if (statement) {\r\n statement.parent = source;\r\n source.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 isNamespaceMember: bool = false\r\n ): Statement | null {\r\n\r\n // check decorators\r\n var decorators: Decorator[] | null = null;\r\n while (tn.skip(Token.AT)) {\r\n var decorator = this.parseDecorator(tn);\r\n if (!decorator) break;\r\n if (!decorators) decorators = [];\r\n decorators.push(decorator);\r\n }\r\n\r\n // check modifiers\r\n var modifiers: Modifier[] | null = null;\r\n if (tn.skip(Token.EXPORT)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.EXPORT, tn.range()), modifiers);\r\n }\r\n if (tn.skip(Token.DECLARE)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.DECLARE, tn.range()), modifiers);\r\n tn.peek(true);\r\n if (tn.nextTokenOnNewLine) {\r\n this.error(\r\n DiagnosticCode.Line_break_not_permitted_here,\r\n tn.range(tn.pos)\r\n ); // recoverable, compatibility\r\n }\r\n }\r\n\r\n // remember where we took off\r\n tn.mark();\r\n\r\n // parse the statement\r\n var statement: Statement | null = null;\r\n var modifier: Modifier | null;\r\n\r\n // handle declarations\r\n switch (tn.next()) {\r\n\r\n case Token.CONST:\r\n modifiers = addModifier(Node.createModifier(ModifierKind.CONST, tn.range()), modifiers);\r\n if (tn.skip(Token.ENUM)) {\r\n statement = this.parseEnum(tn, modifiers, decorators);\r\n break;\r\n }\r\n statement = this.parseVariable(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n case Token.LET:\r\n modifiers = addModifier(Node.createModifier(ModifierKind.LET, tn.range()), modifiers);\r\n // fall-through\r\n\r\n case Token.VAR:\r\n statement = this.parseVariable(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n case Token.ENUM:\r\n statement = this.parseEnum(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n case Token.FUNCTION:\r\n statement = this.parseFunction(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n case Token.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 modifiers = addModifier(\r\n Node.createModifier(ModifierKind.ABSTRACT, tn.range()), modifiers\r\n );\r\n // fall through\r\n\r\n case Token.CLASS:\r\n statement = this.parseClass(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n case Token.NAMESPACE:\r\n statement = this.parseNamespace(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n case Token.IMPORT:\r\n if (modifier = getModifier(ModifierKind.EXPORT, modifiers)) {\r\n statement = this.parseExportImport(tn, modifier.range);\r\n } else {\r\n statement = this.parseImport(tn);\r\n }\r\n if (modifiers) setReusableModifiers(modifiers);\r\n break;\r\n\r\n case Token.TYPE:\r\n statement = this.parseTypeDeclaration(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n default:\r\n\r\n // handle plain exports\r\n if (hasModifier(ModifierKind.EXPORT, modifiers)) {\r\n tn.reset();\r\n statement = this.parseExport(tn, modifiers); // TODO: why exactly does this have modifiers again? 'declare'?\r\n\r\n // handle non-declaration statements\r\n } else {\r\n if (modifiers) {\r\n if (modifier = getModifier(ModifierKind.DECLARE, modifiers)) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n modifier.range, \"declare\"\r\n ); // recoverable\r\n }\r\n setReusableModifiers(modifiers);\r\n }\r\n tn.reset();\r\n if (!isNamespaceMember) {\r\n statement = this.parseStatement(tn, true);\r\n }\r\n }\r\n break;\r\n }\r\n\r\n // check for decorators that weren't consumed\r\n if (decorators) {\r\n for (var 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 return this.backlog.length ? this.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 ): TypeNode | 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: TypeNode;\r\n\r\n // ( ... )\r\n if (acceptParenthesized && token == Token.OPENPAREN) {\r\n var 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\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 // string literal\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 // Name\r\n } else if (token == Token.IDENTIFIER) {\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var parameters = new Array();\r\n var nullable = false;\r\n\r\n // Name\r\n if (tn.skip(Token.LESSTHAN)) {\r\n do {\r\n var 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 var 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 var bracketRange = tn.range(bracketStart, tn.pos);\r\n\r\n // ...[] | null\r\n 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 // statements\r\n\r\n parseDecorator(\r\n tn: Tokenizer\r\n ): Decorator | 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 var name = tn.readIdentifier();\r\n var 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 var 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 modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null\r\n ): VariableStatement | null {\r\n\r\n // at ('const' | 'let' | 'var'): VariableDeclaration (',' VariableDeclaration)* ';'?\r\n\r\n var startPos = modifiers && modifiers.length ? modifiers[0].range.start : tn.tokenPos;\r\n var members = new Array();\r\n var isDeclare = hasModifier(ModifierKind.DECLARE, modifiers);\r\n do {\r\n var member = this.parseVariableDeclaration(tn, isDeclare, modifiers, 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, modifiers, decorators, 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 isDeclare: bool = false,\r\n parentModifiers: Modifier[] | null,\r\n parentDecorators: Decorator[] | 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\r\n var type: TypeNode | 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 (isDeclare) {\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 (hasModifier(ModifierKind.CONST, parentModifiers)) {\r\n if (!hasModifier(ModifierKind.DECLARE, parentModifiers)) {\r\n this.error(\r\n DiagnosticCode._const_declarations_must_be_initialized,\r\n identifier.range\r\n );\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 parentModifiers,\r\n parentDecorators,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n }\r\n\r\n parseEnum(\r\n tn: Tokenizer,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null\r\n ): EnumDeclaration | null {\r\n\r\n // at 'enum': Identifier '{' (EnumValueDeclaration (',' EnumValueDeclaration )*)? '}' ';'?\r\n\r\n var startPos = modifiers && modifiers.length ? modifiers[0].range.start : tn.tokenPos;\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 var member = this.parseEnumValue(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 var ret = Node.createEnumDeclaration(\r\n identifier,\r\n members,\r\n modifiers,\r\n decorators,\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 ): 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 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 ): TypeParameter[] | 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 var 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 ): TypeParameter | null {\r\n\r\n // before: Identifier ('extends' Type)?\r\n\r\n if (tn.next() == Token.IDENTIFIER) {\r\n var identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n var extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n if (!(extendsType = this.parseType(tn))) return null;\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 ): Parameter[] | null {\r\n\r\n // at '(': (Parameter (',' Parameter)*)? ')'\r\n\r\n var parameters = new Array();\r\n var seenRest: Parameter | 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 var 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\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 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 ): Parameter | 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 var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var type: TypeNode | 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 }\r\n var 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 modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null\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 var startPos = modifiers && modifiers.length ? modifiers[0].range.start : tn.tokenPos;\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 identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n\r\n var typeParameters: TypeParameter[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\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 var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n var isSetter = hasModifier(ModifierKind.SET, modifiers);\r\n if (isSetter) {\r\n\r\n if (parameters.length != 1) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,\r\n identifier.range\r\n ); // recoverable\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 identifier.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var isGetter = hasModifier(ModifierKind.GET, modifiers);\r\n if (isGetter && parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n identifier.range\r\n ); // recoverable\r\n }\r\n\r\n var returnType: TypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn, isSetter);\r\n if (!returnType) return null;\r\n\r\n } else if (!isSetter) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range(tn.pos)\r\n ); // recoverable\r\n }\r\n\r\n var isDeclare = hasModifier(ModifierKind.DECLARE, modifiers);\r\n\r\n var body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (isDeclare) {\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 (!isDeclare) {\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 identifier,\r\n typeParameters,\r\n parameters,\r\n returnType,\r\n body,\r\n modifiers,\r\n decorators,\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 identifier: 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 isArrow = false;\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else { // empty name\r\n identifier = Node.createIdentifierExpression(\"\", tn.range(tn.pos, 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 identifier = Node.createIdentifierExpression(\"\", tn.range(tn.tokenPos, tn.tokenPos));\r\n }\r\n\r\n // TODO: type parameters? doesn't seem worth it.\r\n\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n return this.parseFunctionExpressionCommon(tn, identifier, parameters, isArrow, startPos);\r\n }\r\n\r\n private parseFunctionExpressionCommon(\r\n tn: Tokenizer,\r\n identifier: IdentifierExpression,\r\n parameters: Parameter[],\r\n isArrow: bool,\r\n startPos: i32 = -1\r\n ): FunctionExpression | null {\r\n if (startPos < 0) startPos = identifier.range.start;\r\n\r\n var returnType: TypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn);\r\n if (!returnType) return null;\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 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 identifier,\r\n null,\r\n parameters,\r\n returnType,\r\n body,\r\n null,\r\n null,\r\n tn.range(startPos, tn.pos)\r\n );\r\n return Node.createFunctionExpression(declaration, isArrow);\r\n }\r\n\r\n parseClass(\r\n tn: Tokenizer,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null\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 var startPos = decorators && decorators.length\r\n ? decorators[0].range.start\r\n : modifiers && modifiers.length\r\n ? modifiers[0].range.start\r\n : tn.tokenPos;\r\n\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n\r\n var identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n\r\n var typeParameters: TypeParameter[] | null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\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 extendsType = this.parseType(tn);\r\n if (!extendsType) return null;\r\n }\r\n\r\n var implementsTypes = new Array();\r\n if (tn.skip(Token.IMPLEMENTS)) {\r\n do {\r\n var 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\r\n var members = new Array();\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n var isDeclare = hasModifier(ModifierKind.DECLARE, modifiers);\r\n do {\r\n var member = this.parseClassMember(tn, isDeclare);\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 modifiers,\r\n decorators,\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.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseClassMember(\r\n tn: Tokenizer,\r\n parentIsDeclare: bool\r\n ): DeclarationStatement | null {\r\n\r\n // before:\r\n // ('public' | 'private' | 'protected')?\r\n // ('static' | 'abstract')?\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 var decorator = this.parseDecorator(tn);\r\n if (!decorator) break;\r\n decorators.push(decorator);\r\n }\r\n\r\n var modifiers: Modifier[] | null = null;\r\n\r\n if (tn.skip(Token.PUBLIC)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.PUBLIC, tn.range()), modifiers);\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.PRIVATE, tn.range()), modifiers);\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.PROTECTED, tn.range()), modifiers);\r\n }\r\n\r\n if (tn.skip(Token.STATIC)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.STATIC, tn.range()), modifiers);\r\n } else if (tn.skip(Token.ABSTRACT)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.ABSTRACT, tn.range()), modifiers);\r\n }\r\n\r\n if (tn.skip(Token.READONLY)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.READONLY, tn.range()), modifiers);\r\n }\r\n\r\n // check if accessor: ('get' | 'set') ^\\n Identifier\r\n tn.mark();\r\n\r\n var isGetter = false;\r\n var isSetter = false;\r\n\r\n if (isGetter = tn.skip(Token.GET)) {\r\n if (tn.peek(true, true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.GET, tn.range()), modifiers);\r\n } else {\r\n tn.reset();\r\n isGetter = false;\r\n }\r\n\r\n } else if (isSetter = tn.skip(Token.SET)) { // can't be both\r\n if (tn.peek(true, true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.SET, tn.range()), modifiers);\r\n } else {\r\n tn.reset();\r\n isSetter = false;\r\n }\r\n }\r\n\r\n var isConstructor = tn.skip(Token.CONSTRUCTOR);\r\n if (isConstructor || tn.skip(Token.IDENTIFIER)) {\r\n\r\n var identifier = isConstructor\r\n ? Node.createConstructorExpression(tn.range())\r\n : Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n\r\n var typeParameters: TypeParameter[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n }\r\n\r\n // method: '(' Parameters (':' Type)? '{' Statement* '}' ';'?\r\n if (tn.skip(Token.OPENPAREN)) {\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n if (isGetter && parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n identifier.range\r\n );\r\n }\r\n\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 identifier.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 identifier.range\r\n );\r\n }\r\n }\r\n\r\n var returnType: TypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n if (identifier.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, identifier.kind == NodeKind.CONSTRUCTOR || isSetter);\r\n if (!returnType) return null;\r\n } else if (!isSetter && identifier.kind != NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n var body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (parentIsDeclare) {\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 (!parentIsDeclare) {\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 var retMethod = Node.createMethodDeclaration(\r\n identifier,\r\n typeParameters,\r\n parameters,\r\n returnType,\r\n body,\r\n modifiers,\r\n decorators,\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 identifier.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 identifier.range\r\n );\r\n\r\n // field: (':' Type)? ('=' Expression)? ';'?\r\n } else {\r\n var modifier: Modifier | null;\r\n\r\n if (modifier = getModifier(ModifierKind.ABSTRACT, modifiers)) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n modifier.range, \"abstract\"\r\n ); // recoverable\r\n }\r\n\r\n if (modifier = getModifier(ModifierKind.GET, modifiers)) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n modifier.range, \"get\"\r\n ); // recoverable\r\n }\r\n\r\n if (modifier = getModifier(ModifierKind.SET, modifiers)) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n modifier.range, \"set\"\r\n ); // recoverable\r\n }\r\n\r\n var type: TypeNode | 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 var 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 var retField = Node.createFieldDeclaration(\r\n identifier,\r\n type,\r\n initializer,\r\n modifiers,\r\n decorators,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retField;\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 parseNamespace(\r\n tn: Tokenizer,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null\r\n ): NamespaceDeclaration | null {\r\n\r\n // at 'namespace': Identifier '{' (Variable | Function)* '}'\r\n\r\n var startPos = modifiers && modifiers.length ? modifiers[0].range.start : tn.tokenPos;\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.OPENBRACE)) {\r\n var members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n var member = this.parseTopLevelStatement(tn, true);\r\n if (!member) return null;\r\n members.push(member);\r\n }\r\n var ret = Node.createNamespaceDeclaration(\r\n identifier,\r\n members,\r\n modifiers,\r\n decorators,\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 parseExport(\r\n tn: Tokenizer,\r\n modifiers: Modifier[] | null\r\n ): ExportStatement | null {\r\n\r\n // at 'export': '{' ExportMember (',' ExportMember)* }' ('from' StringLiteral)? ';'?\r\n\r\n var startPos = modifiers && modifiers.length ? modifiers[0].range.start : tn.tokenPos;\r\n\r\n if (tn.skip(Token.OPENBRACE)) {\r\n var members = new Array();\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n var 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 var 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 var ret = Node.createExportStatement(members, path, modifiers, 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 var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var 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 var 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 var path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n var 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 var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var 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 startRange: Range\r\n ): ExportImportStatement | null {\r\n\r\n // at 'export' 'import': Identifier ('=' Identifier)? ';'?\r\n\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n var asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var ret = Node.createExportImportStatement(identifier, asIdentifier, Range.join(startRange, tn.range()));\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 tn.mark();\r\n var token = tn.next();\r\n switch (token) {\r\n\r\n case Token.BREAK:\r\n return this.parseBreak(tn);\r\n\r\n case Token.CONST:\r\n return this.parseVariable(tn, [\r\n Node.createModifier(ModifierKind.CONST, tn.range())\r\n ], null);\r\n\r\n case Token.CONTINUE:\r\n return this.parseContinue(tn);\r\n\r\n case Token.DO:\r\n return this.parseDoStatement(tn);\r\n\r\n case Token.FOR:\r\n return this.parseForStatement(tn);\r\n\r\n case Token.IF:\r\n return this.parseIfStatement(tn);\r\n\r\n case Token.LET:\r\n return this.parseVariable(tn, [\r\n Node.createModifier(ModifierKind.LET, tn.range())\r\n ], null);\r\n\r\n case Token.VAR:\r\n return this.parseVariable(tn, null, null);\r\n\r\n case Token.OPENBRACE:\r\n return this.parseBlockStatement(tn, topLevel);\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 return this.parseReturn(tn);\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 return this.parseSwitchStatement(tn);\r\n\r\n case Token.THROW:\r\n return this.parseThrowStatement(tn);\r\n\r\n case Token.TRY:\r\n return this.parseTryStatement(tn);\r\n\r\n case Token.TYPE:\r\n return this.parseTypeDeclaration(tn, null);\r\n\r\n case Token.WHILE:\r\n return this.parseWhileStatement(tn);\r\n\r\n default:\r\n tn.reset();\r\n return this.parseExpressionStatement(tn);\r\n }\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 var statement = this.parseStatement(tn, topLevel);\r\n if (!statement) return null;\r\n statements.push(statement);\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 var condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n var 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\r\n var initializer: Statement | null = null;\r\n\r\n if (tn.skip(Token.LET) || tn.skip(Token.CONST) || tn.skip(Token.VAR)) {\r\n initializer = this.parseVariable(tn, null, null);\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 var 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 var 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 var 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 var condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n var statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n var 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 var 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 var cases = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n var case_ = this.parseSwitchCase(tn);\r\n if (!case_) return null;\r\n cases.push(case_);\r\n }\r\n var 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 var 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 var 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 var catchVariable: IdentifierExpression | null = null;\r\n var catchStatements: Statement[] | null = null;\r\n var 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 var 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 modifiers: Modifier[] | null = null,\r\n decorators: Decorator[] | null = null\r\n ): TypeDeclaration | null {\r\n\r\n // at 'type': Identifier '=' Type ';'?\r\n\r\n var startPos = decorators && decorators.length ? decorators[0].range.start\r\n : modifiers && modifiers.length ? modifiers[0].range.start\r\n : tn.tokenPos;\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n var name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n var type = this.parseType(tn);\r\n if (!type) return null;\r\n var ret = Node.createTypeDeclaration(name, type, modifiers, decorators, 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.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\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 var expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n var statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n var 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 var 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.createIdentifierExpression(\"\", tn.range(startPos, startPos)),\r\n [],\r\n true\r\n );\r\n }\r\n tn.mark();\r\n var 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();\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.QUESTION: // optional parameter\r\n case Token.COLON: // type annotation\r\n tn.reset();\r\n return this.parseFunctionExpression(tn);\r\n\r\n // can be both\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 break;\r\n\r\n // parenthesized expression\r\n default:\r\n again = false;\r\n break;\r\n }\r\n } while (again);\r\n tn.reset();\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 var elementExpressions = new Array();\r\n\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 var 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 var 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 tryParseTypeArgumentsBeforeArguments(\r\n tn: Tokenizer\r\n ): TypeNode[] | null {\r\n\r\n // at '<': Type (',' Type)* '>' '('\r\n\r\n tn.mark();\r\n if (!tn.skip(Token.LESSTHAN)) return null;\r\n var typeArguments = new Array();\r\n do {\r\n var type = this.parseType(tn, true, true);\r\n if (!type) {\r\n tn.reset();\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();\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 var 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\r\n var typeArguments = this.tryParseTypeArgumentsBeforeArguments(tn); // skips '(' on success\r\n // there might be better ways to distinguish a LESSTHAN from a CALL with type arguments\r\n if (typeArguments || tn.skip(Token.OPENPAREN)) {\r\n var 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\r\n switch (token) {\r\n\r\n // AssertionExpression\r\n case Token.AS:\r\n var 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 var 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 var 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 var 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 var 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 return expr;\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\r\n case Token.DOT_DOT_DOT:\r\n return Precedence.SPREAD;\r\n\r\n case Token.YIELD:\r\n return Precedence.YIELD;\r\n\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:\r\n return Precedence.UNARY_PREFIX;\r\n\r\n case Token.NEW:\r\n return Precedence.MEMBERACCESS;\r\n\r\n default:\r\n 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\r\n case Token.COMMA:\r\n return Precedence.COMMA;\r\n\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 return Precedence.ASSIGNMENT;\r\n\r\n case Token.QUESTION:\r\n return Precedence.CONDITIONAL;\r\n\r\n case Token.BAR_BAR:\r\n return Precedence.LOGICAL_OR;\r\n\r\n case Token.AMPERSAND_AMPERSAND:\r\n return Precedence.LOGICAL_AND;\r\n\r\n case Token.BAR:\r\n return Precedence.BITWISE_OR;\r\n\r\n case Token.CARET:\r\n return Precedence.BITWISE_XOR;\r\n\r\n case Token.AMPERSAND:\r\n return Precedence.BITWISE_AND;\r\n\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:\r\n return Precedence.EQUALITY;\r\n\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:\r\n return Precedence.RELATIONAL;\r\n\r\n case Token.LESSTHAN_LESSTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:\r\n return Precedence.SHIFT;\r\n\r\n case Token.PLUS:\r\n case Token.MINUS:\r\n return Precedence.ADDITIVE;\r\n\r\n case Token.ASTERISK:\r\n case Token.SLASH:\r\n case Token.PERCENT:\r\n return Precedence.MULTIPLICATIVE;\r\n\r\n case Token.ASTERISK_ASTERISK:\r\n return Precedence.EXPONENTIATED;\r\n\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS:\r\n return Precedence.UNARY_POSTFIX;\r\n\r\n case Token.DOT:\r\n case Token.NEW:\r\n case Token.OPENBRACKET:\r\n return Precedence.MEMBERACCESS;\r\n\r\n default:\r\n 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\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:\r\n return true;\r\n\r\n default:\r\n return false;\r\n }\r\n}\r\n","import {\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) {\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 (var 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\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\r\n case ExpressionId.Call:\r\n\r\n case ExpressionId.CallImport:\r\n\r\n case ExpressionId.CallIndirect:\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\r\n case ExpressionId.SetGlobal:\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\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 break;\r\n\r\n case ExpressionId.Unary:\r\n switch (_BinaryenUnaryGetOp(expr)) {\r\n\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 break;\r\n\r\n case ExpressionId.Binary: // TODO: precedence\r\n switch (_BinaryenBinaryGetOp(expr)) {\r\n\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 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 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 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\r\n case ExpressionId.AtomicRMW:\r\n\r\n case ExpressionId.AtomicWait:\r\n\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","//////////////////////// Low-level C-Like Compiler API /////////////////////////\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 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\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 `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/** Compiles the sources computed by the parser to a module. */\r\nexport function compile(parser: Parser, options: Options | null = null): Module {\r\n var program = parser.finish();\r\n var compiler = new Compiler(program, options);\r\n return compiler.compile();\r\n}\r\n\r\n/** Decompiles a module to its (low level) source. */\r\nexport function 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/** Prefix indicating a library file. */\r\nexport { LIBRARY_PREFIX } from \"./program\";\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","import {\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 Expression\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 UnaryOp,\r\n BinaryOp,\r\n HostOp,\r\n NativeType,\r\n ExpressionRef,\r\n ExpressionId\r\n} from \"./module\";\r\n\r\nimport {\r\n Global,\r\n FunctionPrototype,\r\n Local,\r\n ElementFlags,\r\n Class,\r\n ElementKind\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\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 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 var tempLocal0: Local,\r\n tempLocal1: Local;\r\n\r\n var type: Type,\r\n offset: i32;\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 // 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\r\n case TypeKind.F32:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.f32);\r\n ret = module.createBinary(BinaryOp.NeF32,\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createGetLocal(tempLocal0.index, NativeType.F32)\r\n );\r\n break;\r\n\r\n case TypeKind.F64:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.f64);\r\n ret = module.createBinary(BinaryOp.NeF64,\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createGetLocal(tempLocal0.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\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.F32:\r\n tempLocal0 = 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(tempLocal0.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(tempLocal0.index, NativeType.F32),\r\n module.createGetLocal(tempLocal0.index, NativeType.F32)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.F64:\r\n tempLocal0 = 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(tempLocal0.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(tempLocal0.index, NativeType.F64),\r\n module.createGetLocal(tempLocal0.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 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\r\n switch (compiler.currentType.kind) {\r\n\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.isReference) {\r\n compiler.error(\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 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 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\r\n switch (compiler.currentType.kind) {\r\n\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.isReference) {\r\n compiler.error(\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 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 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\r\n switch (compiler.currentType.kind) {\r\n\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.isReference) {\r\n compiler.error(\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 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 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\r\n switch (compiler.currentType.kind) {\r\n\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 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.isReference) {\r\n compiler.error(\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 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 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\r\n switch (compiler.currentType.kind) {\r\n\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.isReference) {\r\n compiler.error(\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 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 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\r\n switch (compiler.currentType.kind) {\r\n\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 tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createBinary(BinaryOp.SubI32, // ifFalse\r\n module.createI32(0),\r\n module.createGetLocal(tempLocal0.index, NativeType.I32)\r\n ),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createI32(0)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.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(tempLocal0.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(tempLocal0.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 tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.i64);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createBinary(BinaryOp.SubI64,\r\n module.createI64(0, 0),\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n ),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal0.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.isReference) {\r\n compiler.error(\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 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 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\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(Type.i32);\r\n 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 tempLocal0 = compiler.currentFunction.getTempLocal(Type.i32);\r\n 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 tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64);\r\n 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 tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64);\r\n 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 tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType);\r\n 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.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType);\r\n 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 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\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(Type.i32);\r\n 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 tempLocal0 = compiler.currentFunction.getTempLocal(Type.i32);\r\n 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 tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64);\r\n 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 tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64);\r\n 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 tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType);\r\n 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.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType);\r\n 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 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\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\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 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 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\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\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 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 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\r\n switch (compiler.currentType.kind) {\r\n\r\n // TODO: does an integer version make sense?\r\n\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 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\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\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 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 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\r\n switch (typeArguments[0].kind) {\r\n\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].isReference) {\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 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 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\r\n switch (compiler.currentType.kind) {\r\n\r\n // TODO: integer versions (that return f64 or convert)?\r\n\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 default:\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 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\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\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 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\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 return ret;\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 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 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 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) {\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 ret = compiler.options.isWasm64\r\n ? module.createI64(typeArguments[0].byteSize, 0)\r\n : module.createI32(typeArguments[0].byteSize);\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n return ret;\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 arg1 = compiler.compileExpression(operands[1], type = compiler.currentType);\r\n arg2 = compiler.compileExpression(operands[2], Type.bool);\r\n compiler.currentType = type;\r\n\r\n switch (compiler.currentType.kind) {\r\n\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 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 // 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 // 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 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 var 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\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\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 compiler.currentType = Type.void;\r\n } else {\r\n switch (compiler.currentType.kind) {\r\n\r\n default: // any integer up to 32-bits incl. bool\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI32,\r\n module.createTeeLocal(tempLocal0.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32)\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.i64);\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n module.createTeeLocal(tempLocal0.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64)\r\n );\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n tempLocal0 = 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(tempLocal0.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType)\r\n );\r\n break;\r\n\r\n case TypeKind.F32:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.f32);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createF32(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal0.index, NativeType.F32)\r\n );\r\n break;\r\n\r\n case TypeKind.F64:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.f64);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createF64(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal0.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 return ret;\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 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\n/** Compiles a memory allocation for an instance of the specified class. */\r\nexport function compileAllocate(\r\n compiler: Compiler,\r\n cls: Class,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = cls.program;\r\n var prototype = program.elements.get(compiler.options.allocateImpl);\r\n if (prototype) {\r\n if (prototype.kind == ElementKind.FUNCTION_PROTOTYPE) {\r\n var instance = (prototype).resolve(); // reports\r\n if (instance) {\r\n if (\r\n !instance.is(ElementFlags.GENERIC) &&\r\n instance.returnType == compiler.options.usizeType &&\r\n instance.parameters &&\r\n instance.parameters.length == 1 &&\r\n instance.parameters[0].type == compiler.options.usizeType\r\n ) {\r\n if (compiler.compileFunction(instance)) { // reports\r\n return compiler.makeCall(instance, [\r\n compiler.options.isWasm64\r\n ? compiler.module.createI64(cls.currentMemoryOffset)\r\n : compiler.module.createI32(cls.currentMemoryOffset)\r\n ]);\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.Implementation_0_must_match_the_signature_1,\r\n reportNode.range, compiler.options.allocateImpl, \"(size: usize): usize\"\r\n );\r\n }\r\n }\r\n } else {\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, prototype.internalName\r\n );\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n reportNode.range, compiler.options.allocateImpl\r\n );\r\n }\r\n return compiler.module.createUnreachable();\r\n}\r\n\r\n/** Compiles an abort wired to the conditionally imported 'abort' function. */\r\nexport function compileAbort(\r\n compiler: Compiler,\r\n message: Expression | null,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var module = compiler.module;\r\n var abort: ExpressionRef = module.createUnreachable();\r\n var abortPrototype = compiler.program.elements.get(\"abort\");\r\n var stringType = compiler.program.types.get(\"string\");\r\n if (\r\n abortPrototype &&\r\n abortPrototype.kind == ElementKind.FUNCTION_PROTOTYPE &&\r\n stringType\r\n ) {\r\n var abortInstance = (abortPrototype).resolve(); // reports\r\n if (\r\n abortInstance &&\r\n compiler.compileFunction(abortInstance) // reports\r\n ) {\r\n assert(abortInstance.parameters && abortInstance.parameters.length == 4); // to be sure\r\n abort = module.createBlock(null, [\r\n compiler.makeCall(abortInstance, [\r\n message != null\r\n ? compiler.compileExpression(message, stringType)\r\n : compiler.options.usizeType.toNativeZero(module),\r\n compiler.compileStaticString(reportNode.range.source.normalizedPath),\r\n module.createI32(reportNode.range.line),\r\n module.createI32(reportNode.range.column)\r\n ]),\r\n abort\r\n ]);\r\n }\r\n }\r\n return abort;\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__17__;","// 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\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_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_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","import \"../../../std/portable\";\r\nimport \"./binaryen\";\r\nimport \"./i64\";\r\n"],"sourceRoot":""} \ No newline at end of file +{"version":3,"sources":["webpack://assemblyscript/webpack/universalModuleDefinition","webpack://assemblyscript/webpack/bootstrap","webpack://assemblyscript/./src/diagnostics.ts","webpack://assemblyscript/./src/module.ts","webpack://assemblyscript/./src/program.ts","webpack://assemblyscript/./src/tokenizer.ts","webpack://assemblyscript/./src/ast.ts","webpack://assemblyscript/./src/types.ts","webpack://assemblyscript/./src/compiler.ts","webpack://assemblyscript/(webpack)/buildin/global.js","webpack://assemblyscript/./src/util/path.ts","webpack://assemblyscript/./src/util/charcode.ts","webpack://assemblyscript/./src/diagnosticMessages.generated.ts","webpack://assemblyscript/./src/parser.ts","webpack://assemblyscript/./src/decompiler.ts","webpack://assemblyscript/./src/index.ts","webpack://assemblyscript/./node_modules/long/src/long.js","webpack://assemblyscript/./src/glue/js/i64.js","webpack://assemblyscript/./src/builtins.ts","webpack://assemblyscript/external \"binaryen\"","webpack://assemblyscript/./src/glue/js/binaryen.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__17__","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","DiagnosticCategory","diagnosticMessages_generated_1","charcode_1","diagnosticMessages_generated_2","diagnosticCategoryToString","category","INFO","WARNING","ERROR","DiagnosticCode","diagnosticCodeToString","colorBlue","colorYellow","colorRed","colorReset","diagnosticCategoryToColor","DiagnosticMessage","code","message","range","create","arg0","arg1","arg2","replace","createInfo","createWarning","createError","withRange","toString","source","normalizedPath","start","end","formatDiagnosticContext","useColors","text","len","length","isLineBreak","charCodeAt","sb","substring","push","join","formatDiagnosticMessage","showContext","context","line","column","DiagnosticEmitter","diagnostics","Array","emitDiagnostic","error","info","warning","NativeType","ExpressionId","compiler_1","_BinaryenTypeNone","_BinaryenTypeInt32","_BinaryenTypeInt64","_BinaryenTypeFloat32","_BinaryenTypeFloat64","_BinaryenTypeUnreachable","_BinaryenTypeAuto","_BinaryenInvalidId","_BinaryenBlockId","_BinaryenIfId","_BinaryenLoopId","_BinaryenBreakId","_BinaryenSwitchId","_BinaryenCallId","_BinaryenCallImportId","_BinaryenCallIndirectId","_BinaryenGetLocalId","_BinaryenSetLocalId","_BinaryenGetGlobalId","_BinaryenSetGlobalId","_BinaryenLoadId","_BinaryenStoreId","_BinaryenConstId","_BinaryenUnaryId","_BinaryenBinaryId","_BinaryenSelectId","_BinaryenDropId","_BinaryenReturnId","_BinaryenHostId","_BinaryenNopId","_BinaryenUnreachableId","_BinaryenAtomicCmpxchgId","_BinaryenAtomicRMWId","_BinaryenAtomicWaitId","_BinaryenAtomicWakeId","UnaryOp","_BinaryenClzInt32","_BinaryenCtzInt32","_BinaryenPopcntInt32","_BinaryenNegFloat32","_BinaryenAbsFloat32","_BinaryenCeilFloat32","_BinaryenFloorFloat32","_BinaryenTruncFloat32","_BinaryenNearestFloat32","_BinaryenSqrtFloat32","_BinaryenEqZInt32","_BinaryenClzInt64","_BinaryenCtzInt64","_BinaryenPopcntInt64","_BinaryenNegFloat64","_BinaryenAbsFloat64","_BinaryenCeilFloat64","_BinaryenFloorFloat64","_BinaryenTruncFloat64","_BinaryenNearestFloat64","_BinaryenSqrtFloat64","_BinaryenEqZInt64","_BinaryenExtendSInt32","_BinaryenExtendUInt32","_BinaryenWrapInt64","_BinaryenTruncSFloat32ToInt32","_BinaryenTruncSFloat32ToInt64","_BinaryenTruncUFloat32ToInt32","_BinaryenTruncUFloat32ToInt64","_BinaryenTruncSFloat64ToInt32","_BinaryenTruncSFloat64ToInt64","_BinaryenTruncUFloat64ToInt32","_BinaryenTruncUFloat64ToInt64","_BinaryenReinterpretFloat32","_BinaryenReinterpretFloat64","_BinaryenConvertSInt32ToFloat32","_BinaryenConvertSInt32ToFloat64","_BinaryenConvertUInt32ToFloat32","_BinaryenConvertUInt32ToFloat64","_BinaryenConvertSInt64ToFloat32","_BinaryenConvertSInt64ToFloat64","_BinaryenConvertUInt64ToFloat32","_BinaryenConvertUInt64ToFloat64","_BinaryenPromoteFloat32","_BinaryenDemoteFloat64","_BinaryenReinterpretInt32","_BinaryenReinterpretInt64","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","ref","_BinaryenModuleCreate","out","allocate_memory","createFrom","cArr","allocU8Array","_BinaryenModuleRead","free_memory","changetype","addFunctionType","result","paramTypes","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","index","type","_BinaryenGetLocal","createTeeLocal","_BinaryenTeeLocal","createGetGlobal","_BinaryenGetGlobal","createLoad","bytes","signed","ptr","_BinaryenLoad","createStore","_BinaryenStore","createAtomicLoad","_BinaryenAtomicLoad","createAtomicStore","_BinaryenAtomicStore","createAtomicRMW","_BinaryenAtomicRMW","createAtomicCmpxchg","expected","replacement","_BinaryenAtomicCmpxchg","createAtomicWait","timeout","expectedType","_BinaryenAtomicWait","createAtomicWake","wakeCount","_BinaryenAtomicWake","createSetLocal","_BinaryenSetLocal","createSetGlobal","_BinaryenSetGlobal","createBlock","label","children","None","_BinaryenBlock","createBreak","condition","_BinaryenBreak","createDrop","expression","_BinaryenDrop","createLoop","body","_BinaryenLoop","createIf","ifTrue","ifFalse","_BinaryenIf","createNop","_BinaryenNop","createReturn","_BinaryenReturn","createSelect","_BinaryenSelect","createSwitch","names","defaultName","strs","k","_BinaryenSwitch","createCall","target","returnType","_BinaryenCall","createCallImport","_BinaryenCallImport","createUnreachable","_BinaryenUnreachable","addGlobal","mutable","initializer","_BinaryenAddGlobal","addFunction","varTypes","_BinaryenAddFunction","removeFunction","_BinaryenRemoveFunction","addFunctionExport","internalName","externalName","cStr1","cStr2","_BinaryenAddFunctionExport","addTableExport","_BinaryenAddTableExport","addMemoryExport","_BinaryenAddMemoryExport","addGlobalExport","_BinaryenAddGlobalExport","removeExport","_BinaryenRemoveExport","addFunctionImport","externalModuleName","externalBaseName","functionType","cStr3","_BinaryenAddFunctionImport","addTableImport","_BinaryenAddTableImport","addMemoryImport","_BinaryenAddMemoryImport","addGlobalImport","globalType","_BinaryenAddGlobalImport","removeImport","_BinaryenRemoveImport","setMemory","initial","maximum","segments","exportName","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","ret","Binary","output","readBuffer","sourceMap","readString","toText","Error","toAsmjs","dispose","_BinaryenModuleDispose","createRelooper","Relooper","cloneExpression","noSideEffects","maxDepth","i32","MAX_VALUE","nested1","nested2","_BinaryenExpressionGetId","Const","_BinaryenExpressionGetType","I32","_BinaryenConstGetValueI32","I64","_BinaryenConstGetValueI64Low","_BinaryenConstGetValueI64High","F32","_BinaryenConstGetValueF32","F64","_BinaryenConstGetValueF64","GetLocal","_BinaryenGetLocalGetIndex","GetGlobal","globalName","_BinaryenGetGlobalGetName","Load","_BinaryenLoadGetPtr","_BinaryenLoadIsAtomic","_BinaryenLoadGetBytes","_BinaryenLoadGetOffset","_BinaryenLoadIsSigned","_BinaryenLoadGetAlign","Unary","_BinaryenUnaryGetValue","_BinaryenUnaryGetOp","_BinaryenBinaryGetLeft","_BinaryenBinaryGetRight","_BinaryenBinaryGetOp","addDebugInfoFile","_BinaryenModuleAddDebugInfoFileName","getDebugInfoFile","_BinaryenModuleGetDebugInfoFileName","setDebugLocation","fileIndex","lineNumber","columnNumber","_BinaryenFunctionSetDebugLocation","MAX_MEMORY_WASM32","relooper","_RelooperCreate","createStub","addBlock","_RelooperAddBlock","addBranch","from","to","_RelooperAddBranch","addBlockWithSwitch","_RelooperAddBlockWithSwitch","addBranchForSwitch","indexes","_RelooperAddBranchForSwitch","renderAndDispose","entry","labelHelper","_RelooperRenderAndDispose","u8s","idx","store","i32s","val","str","u","stringLengthUTF8","load","Uint8Array","cp","u1","u2","u3","u4","arr","String","fromCodePoints","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","noTypesYet","Map","Program","_super","_this","diagnosticsOffset","elements","types","typeAliases","sources","__extends","initialize","options","Type","i8","i16","i64","isizeType","u8","u16","u32","u64","usizeType","bool","f32","f64","void","element","queuedExports","queuedImports","queuedDerivedClasses","statements","j","statement","kind","NodeKind","CLASSDECLARATION","initializeClass","ENUMDECLARATION","initializeEnum","EXPORT","initializeExports","FUNCTIONDECLARATION","initializeFunction","IMPORT","initializeImports","INTERFACEDECLARATION","initializeInterface","NAMESPACEDECLARATION","initializeNamespace","TYPEDECLARATION","initializeTypeAlias","VARIABLE","initializeVariables","queuedImport","tryResolveImport","referencedName","set","splice","referencedNameAlt","Module_0_has_no_exported_member_1","declaration","parent","path","queuedExports_1","__values","queuedExports_1_1","next","done","_a","__read","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","isBuiltin","hasDecorator","decorators","ElementFlags","BUILTIN","isLibrary","is","EXPORTED","SOURCE","GLOBAL","has","Duplicate_identifier_0","namespace","fileLevelInternalName","ClassPrototype","isUnmanaged","implementsTypes","Structs_cannot_implement_interfaces","Range","members","Export_declaration_conflicts_with_exported_declaration_of_0","memberDeclarations","memberDeclaration","FIELDDECLARATION","initializeField","METHODDECLARATION","isGetter","hasModifier","ModifierKind","GET","modifiers","SET","initializeAccessor","initializeMethod","programLevelInternalName","instance","resolve","classPrototype","STATIC","staticField","Global","instanceMembers","instanceField","FieldPrototype","CONSTRUCTOR","FunctionPrototype","constructorPrototype","Multiple_constructor_implementations_are_not_allowed","checkOperators","decorator","decoratorKind","Operation_not_supported","numArgs","arguments","firstArg","LITERAL","literalKind","fnIndexedGet","simpleName","fnIndexedSet","fnConcat","fnEquals","String_literal_expected","Expected_0_arguments_but_got_1","propertyName","internalPropertyName","propertyElement","PROPERTY","getterPrototype","setterPrototype","Property","staticName","staticPrototype","instanceName","instancePrototype","enm","Enum","values","initializeEnumValue","EnumValue","initializeExport","internalPath","identifier","referencedElement","seen","Set","add","declarations","initializeImport","namespaceName","indexPart","endsWith","InterfacePrototype","queuedExtendingClasses","parentNamespace","Namespace","alias","global","resolveType","node","contextualTypeArguments","reportNotFound","localName","resolveUsingTypeArguments","typeArguments","paramType","instanceKey","typesToString","placeholderType","resolveTypeArguments","typeParameters","typeArgumentNodes","alternativeReportNode","parameterCount","argumentCount","Expected_0_type_arguments_but_got_1","atEnd","contextualFunction","contextualEnum","ENUMVALUE","resolvedElement","ResolvedElement","flow","getScopedLocal","resolvePropertyAccess","propertyAccess","targetExpression","resolveExpression","targetType","LOCAL","FIELD","classType","Property_0_does_not_exist_on_type_1","CLASS","withTarget","base","resolveElementAccess","elementAccess","indexedGet","indexedGetName","FUNCTION_PROTOTYPE","Index_signature_is_missing_in_type_0","PARENTHESIZED","ASSERTION","toType","BINARY","THIS","instanceMethodOf","_this_cannot_be_referenced_in_current_location","SUPER","_super_can_only_be_referenced_in_a_derived_class","IDENTIFIER","PROPERTYACCESS","ELEMENTACCESS","CALL","Element","program","flags","NONE","flag","NAMESPACE","modifierKind","IMPORTED","DECLARE","DECLARED","ENUM","CONST","CONSTANT","constantValue","enum","ConstantValueKind","VariableLikeElement","apply","constantValueKind","withConstantIntegerValue","lo","hi","constantIntegerValue","i64_new","INLINED","withConstantFloatValue","constantFloatValue","LET","SCOPED","READONLY","PUBLIC","PRIVATE","PROTECTED","Parameter","Local","instances","classTypeArguments","GETTER","SETTER","ABSTRACT","isGeneric","GENERIC","INSTANCE","functionTypeArguments","inheritedTypeArguments","inheritedTypeArguments_1","inheritedTypeArguments_1_1","inheritedName","inheritedType","classTypeParameters","functionTypeParameters","parameters","typeNode","parameterTypes","parameterDeclaration","parameterType","classInstance","Function","resolvePartial","partialPrototype","reportNode","resolvedTypeArguments","resolveBuiltinTypeArguments","resolvedType","FUNCTION","locals","additionalLocals","breakContext","debugLocations","functionTableIndex","nextBreakId","breakStack","tempI32s","tempI64s","tempF32s","tempF64s","localIndex","_b","_c","parameter","parameterName","Flow","addLocal","local","getTempLocal","temps","toNativeType","pop","freeTempLocal","getAndFreeTempLocal","enterBreakContext","id","leaveBreakContext","finalize","debugLocation","debugInfoRef","debugInfoIndex","isAssignableTo","toTypeString","FIELD_PROTOTYPE","Field","memoryOffset","UNMANAGED","inheritedTypeArguments_2","inheritedTypeArguments_2_1","baseClass","baseClassType","Structs_cannot_extend_classes_and_vice_versa","Class","currentMemoryOffset","_d","inheritedMember","partialConstructor","constructorInstance","_f","_g","fieldDeclaration","fieldType","fieldInstance","byteSize","methodPrototype","instanceProperty","asClass","baseName","baseType","current","INTERFACE_PROTOTYPE","Interface","INTERFACE","FlowFlags","scopedLocals","currentFunction","parentFlow","continueLabel","breakLabel","enterBranchOrScope","branchFlow","leaveBranchOrScope","scopedLocal","addScopedLocal","Token","fromKeyword","AS","ASYNC","AWAIT","BREAK","CASE","CATCH","CONTINUE","DEBUGGER","DEFAULT","DELETE","DO","ELSE","EXTENDS","FALSE","FINALLY","FOR","FROM","IF","IMPLEMENTS","IN","INSTANCEOF","IS","KEYOF","MODULE","NEW","NULL","OF","PACKAGE","RETURN","SWITCH","THROW","TRUE","TRY","TYPE","TYPEOF","VAR","VOID","WHILE","WITH","YIELD","INVALID","isAlsoIdentifier","token","operatorToString","DOT_DOT_DOT","COMMA","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","markedPos","markedToken","markedTokenPos","nextToken","nextTokenOnNewLine","preferIdentifier","unsafeNext","maxTokenLength","STRINGLITERAL","OPENPAREN","CLOSEPAREN","isDecimalDigit","FLOATLITERAL","DOT","closed","_0_expected","testInteger","INTEGERLITERAL","COLON","SEMICOLON","EQUALS_GREATERTHAN","QUESTION","OPENBRACKET","CLOSEBRACKET","OPENBRACE","CLOSEBRACE","AT","isIdentifierStart","isKeywordCharacter","posBefore","isIdentifierPart","keywordText","keywordToken","isWhiteSpace","Invalid_character","ENDOFFILE","peek","checkOnNewLine","maxCompoundLength","tokenBefore","tokenPosBefore","skip","mark","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","program_1","tokenizer_1","path_1","Node","createType","isNullable","TypeNode","createIdentifierExpression","IdentifierExpression","createArrayLiteralExpression","ArrayLiteralExpression","elementExpressions","nodes","setParentOpt","createAssertionExpression","assertionKind","AssertionExpression","createBinaryExpression","operator","BinaryExpression","createCallExpression","typeArgs","args","CallExpression","setParent","createCommaExpression","expressions","CommaExpression","createConstructorExpression","ConstructorExpression","createElementAccessExpression","ElementAccessExpression","elementExpression","createFalseExpression","FalseExpression","createFloatLiteralExpression","FloatLiteralExpression","createFunctionExpression","isArrow","FunctionArrowExpression","FunctionExpression","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","stmt","BlockStatement","createBreakStatement","BreakStatement","createClassDeclaration","ClassDeclaration","createContinueStatement","ContinueStatement","createDecorator","Decorator","createDoStatement","DoStatement","createEmptyStatement","EmptyStatement","createEnumDeclaration","EnumDeclaration","createEnumValueDeclaration","EnumValueDeclaration","createExportStatement","ExportStatement","normalize","startsWith","mangleInternalPath","createExportImportStatement","ExportImportStatement","createExportMember","elem","ExportMember","createExpressionStatement","ExpressionStatement","createIfStatement","IfStatement","createImportStatement","decls","ImportStatement","createImportStatementWithWildcard","createImportDeclaration","ImportDeclaration","createInterfaceDeclaration","InterfaceDeclaration","createFieldDeclaration","FieldDeclaration","createForStatement","incrementor","ForStatement","createTypeParameter","TypeParameter","createParameter","parameterKind","createFunctionDeclaration","FunctionDeclaration","createMethodDeclaration","MethodDeclaration","createModifier","Modifier","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","TYPEPARAMETER","Expression","LiteralKind","LiteralExpression","AssertionKind","FUNCTIONARROW","TERNARY","UnaryExpression","UNARYPOSTFIX","UNARYPREFIX","SourceKind","Statement","Source","tokenizer","sourceKind","ENTRY","LIBRARY","DeclarationStatement","cachedProgramLevelInternalName","cachedFileLevelInternalName","mangleInternalName","isTopLevelExport","needsExplicitExport","VariableLikeDeclarationStatement","BLOCK","DecoratorKind","DECORATOR","EMPTY","ENUMVALUEDECLARATION","EXPORTIMPORT","EXPORTMEMBER","EXPRESSION","IMPORTDECLARATION","ParameterKind","PARAMETER","MODIFIER","SWITCHCASE","VARIABLEDECLARATION","reusableModifiers","createModifiers","getModifier","getFirstDecorator","asGlobal","setReusableModifiers","addModifier","modifier","TypeKind","TypeFlags","size","nullableType","ceil","nonNullableType","computeSmallIntegerShift","computeSmallIntegerMask","asFunction","asNullable","isReference","signednessIsImportant","currentClass","targetClass","targetFunction","commonCompatible","kindOnly","toNativeZero","toNativeOne","toNativeNegOne","toSignatureString","isize32","isize64","usize32","usize64","typesToNativeTypes","builtins_1","Options","WASM32","noTreeShaking","noAssert","noMemory","importMemory","memoryBase","allocateImpl","freeImpl","ConversionKind","Compiler","startFunctionBody","currentEnum","currentType","memorySegments","stringSegments","functionTable","files","max","compile","startFunctionPrototype","startFunctionInstance","START","startFunction","isEntry","compileSource","typeRef","i64_align","isWasm64","pages","i64_shr_u","entries","compileSourceByPath","normalizedPathWithoutExtension","File_0_not_found","compileClassDeclaration","compileEnumDeclaration","compileFunctionDeclaration","compileNamespaceDeclaration","variableInit","compileVariableStatement","compileExportStatement","previousFunction","compileStatement","compileGlobalDeclaration","compileGlobal","COMPILED","initExpr","Type_expected","compileExpression","Type_0_is_not_assignable_to_type_1","nativeType","initializeInStart","compileInlineConstant","precomputeExpressionRef","Compiling_constant_with_non_constant_initializer_as_mutable","setExpr","isTopLevel","compileEnum","previousValue","initInStart","valueDeclaration","AddI32","Cannot_export_a_mutable_global","compileFunctionUsingTypeArguments","compileFunction","An_implementation_cannot_be_declared_in_ambient_contexts","Function_implementation_is_missing_or_not_immediately_following_the_declaration","allBranchesReturn","A_function_whose_declared_type_is_not_void_must_return_a_value","numParameters","numParametersInclThis","paramIndex","nativeResultType","nativeParamTypes","signatureNameParts","compileInterfaceDeclaration","compileNamespace","ns","compileClassUsingTypeArguments","internalExportName","functionInstance","functionDeclaration","globalDeclaration","compileClass","addMemorySegment","alignment","addFunctionTableEntry","compileBlockStatement","compileBreakStatement","compileContinueStatement","compileDoStatement","compileEmptyStatement","compileExpressionStatement","compileForStatement","compileIfStatement","compileReturnStatement","compileSwitchStatement","compileThrowStatement","compileTryStatement","compileVoidStatement","compileWhileStatement","addDebugLocation","compileStatements","stmts","stmtReturns","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","makeIsTrueish","alwaysReturns","ifTrueReturns","ifFalseReturns","tempLocal","breaks","breakIndex","defaultIndex","case_","EqI32","currentBlock","fallsThrough","nextLabel","isKnownGlobal","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","funcRef","_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","leftType","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","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","valueExpression","elementType","setterInstance","Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property","resolvedIndexedSet","valueWithCorrectType","tee","targetExpr","globalNativeType","isReadonly","elementNativeType","makeCall","getterInstance","resolvedIndexedGet","indexedSet","indexedSetName","elementExpr","Index_signature_in_type_0_only_permits_reading","functionPrototype","compileCall","isFunction","Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures","numArguments","numArgumentsInclThis","argumentIndex","argumentExpressions","thisArg","operandIndex","Expected_at_least_0_arguments_but_got_1","exprs","retainConstantType","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","Int32Array","Float32Array","Float64Array","thisExpr","compileAllocate","field","nativeSizeType","Cannot_use_new_with_an_expression_whose_type_lacks_a_construct_signature","nativeOne","setValue","getValue","NegF32","NegF64","makeIsFalseish","EqzI32","EqzI64","g","eval","e","window","separator","ipos","dirname","origin","CharCode","lookupInUnicodeMap","unicodeIdentifierStart","unicodeIdentifierPart","map","mid","Parser","backlog","seenlog","parseFile","indexOf","tn","parseTopLevelStatement","isNamespaceMember","parseDecorator","Line_break_not_permitted_here","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","startPos","innerType","Identifier_expected","nullable","bracketStart","bracketRange","parseArguments","isDeclare","parseVariableDeclaration","parentModifiers","parentDecorators","Initializers_are_not_allowed_in_ambient_contexts","parseExpression","parseEnumValue","parseReturn","parseTypeParameters","Type_parameter_list_cannot_be_empty","typeParameter","parseTypeParameter","parseParameters","seenRest","seenOptional","reportedRest","param","parseParameter","A_rest_parameter_must_be_last_in_a_parameter_list","A_required_parameter_cannot_follow_an_optional_parameter","OPTIONAL","REST","isRest","isOptional","startRange","A_rest_parameter_cannot_be_optional","A_rest_parameter_cannot_have_an_initializer","Parameter_cannot_have_question_mark_and_initializer","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","parseFunctionExpressionCommon","parseClassMember","parentIsDeclare","isConstructor","Type_parameters_cannot_appear_on_a_constructor_declaration","Type_annotation_cannot_appear_on_a_constructor_declaration","A_set_accessor_cannot_have_a_return_type_annotation","retMethod","Constructor_implementation_is_missing","retField","parseExportMember","asIdentifier","skipFrom","parseImportDeclaration","topLevel","parseBreak","parseContinue","parseDoStatement","parseForStatement","parseIfStatement","A_return_statement_can_only_be_used_within_a_function_body","parseSwitchStatement","parseThrowStatement","parseTryStatement","parseVoidStatement","parseWhileStatement","parseExpressionStatement","elseStatement","parseSwitchCase","_case_or_default_expected","parseExpressionStart","determinePrecedenceStart","The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access","again","regexpPattern","Expression_expected","tryParseTypeArgumentsBeforeArguments","precedence","nextPrecedence","determinePrecedence","commaExprs","isRightAssociative","propertyCall","Precedence","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","i64_to_string","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","formatDiagnostic","parser_1","parser","nextDiagnostic","isInfo","isWarning","isError","createOptions","setTarget","setNoTreeShaking","setNoAssert","setNoMemory","setImportMemory","setSourceMap","setMemoryBase","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","evaluateConstantOffset","compiler","compileAbort","abort","abortPrototype","abortInstance","NaN","Infinity","tempLocal0","tempLocal1","Type_0_is_not_generic","cls","Implementation_0_must_match_the_signature_1","binaryen","Binaryen","key","_malloc","_free","move_memory","dest","src","_memmove","HEAPU8","previousPrint","print","x","_BinaryenModulePrint","_BinaryenModulePrintAsmjs","globalScope","UnreachableError","captureStackTrace","stack","AssertionError","defineProperties","writable","EPSILON","clz32","abs","sqrt","trunc","isTrueish","undefined","fromCodePoint"],"mappings":"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,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,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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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__17__) {\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 = 21);\n","import {\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/charcode\";\r\n\r\nexport {\r\n DiagnosticCode,\r\n diagnosticCodeToString\r\n} from \"./diagnosticMessages.generated\";\r\n\r\nexport enum DiagnosticCategory {\r\n INFO,\r\n WARNING,\r\n ERROR\r\n}\r\n\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: return \"\";\r\n }\r\n}\r\n\r\nconst colorBlue: string = \"\\u001b[93m\";\r\nconst colorYellow: string = \"\\u001b[93m\";\r\nconst colorRed: string = \"\\u001b[91m\";\r\nconst colorReset: string = \"\\u001b[0m\";\r\n\r\nexport function diagnosticCategoryToColor(category: DiagnosticCategory): string {\r\n switch (category) {\r\n case DiagnosticCategory.INFO: return colorBlue;\r\n case DiagnosticCategory.WARNING: return colorYellow;\r\n case DiagnosticCategory.ERROR: return colorRed;\r\n default: return \"\";\r\n }\r\n}\r\n\r\nexport class DiagnosticMessage {\r\n\r\n code: i32;\r\n category: DiagnosticCategory;\r\n message: string;\r\n range: Range | null = null;\r\n\r\n 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 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 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 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 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 withRange(range: Range): this {\r\n this.range = range;\r\n return this;\r\n }\r\n\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.start.toString(10) +\r\n \",\" +\r\n this.range.end.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\nexport function formatDiagnosticMessage(\r\n message: DiagnosticMessage,\r\n useColors: bool = false,\r\n showContext: bool = false\r\n): string {\r\n // format context first (uses same string builder)\r\n var context = \"\";\r\n if (message.range && showContext) {\r\n context = formatDiagnosticContext(message.range, useColors);\r\n }\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(colorReset);\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 // range information if available\r\n if (message.range) {\r\n var range = message.range;\r\n if (showContext) {\r\n sb.push(\"\\n\");\r\n sb.push(context);\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\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(colorRed);\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(colorReset);\r\n return sb.join(\"\");\r\n}\r\n\r\nexport abstract class DiagnosticEmitter {\r\n\r\n diagnostics: DiagnosticMessage[];\r\n // silentDiagnostics: bool = false;\r\n\r\n constructor(diagnostics: DiagnosticMessage[] | null = null) {\r\n this.diagnostics = diagnostics ? diagnostics : new Array();\r\n }\r\n\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 ) {\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 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 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 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","import {\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) {\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 static readonly MAX_MEMORY_WASM32: Index = 0xffff;\r\n // TODO: static readonly MAX_MEMORY_WASM64\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 var 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[]\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.length);\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[]\r\n ): FunctionTypeRef {\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenGetFunctionTypeBySignature(this.ref, result, cArr, paramTypes.length);\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 strs = new Array(names.length);\r\n for (var i = 0, k: i32 = names.length; i < k; ++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, k, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n for (i = k - 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 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[],\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.length, 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 (var i = 0; i < k; ++i) {\r\n var buffer = segments[i].buffer;\r\n var 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 (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 k = passes.length;\r\n var names = new Array(k);\r\n for (var i = 0; i < k; ++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, k);\r\n } else {\r\n _BinaryenModuleRunPasses(this.ref, cArr, k);\r\n }\r\n } finally {\r\n free_memory(cArr);\r\n for (; i >= 0; --i) free_memory(names[i]);\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): Binary {\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 var binaryBytes = readInt(out + 4);\r\n sourceMapPtr = readInt(out + 4 * 2);\r\n var ret = new Binary();\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\r\n case ExpressionId.Const:\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32:\r\n return this.createI32(_BinaryenConstGetValueI32(expr));\r\n case NativeType.I64:\r\n return this.createI64(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n case NativeType.F32:\r\n return this.createF32(_BinaryenConstGetValueF32(expr));\r\n case NativeType.F64:\r\n return this.createF64(_BinaryenConstGetValueF64(expr));\r\n default:\r\n throw new Error(\"concrete type expected\");\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 var 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 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 ptr = allocate_memory(u8s.length);\r\n var idx = ptr;\r\n for (var i = 0, k = u8s.length; i < k; ++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 (var i = 0, k = i32s.length; i < k; ++i) {\r\n var 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 (var i = 0, k = str.length; i < k; ++i) {\r\n var 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 (var i = 0, k = str.length; i < k; ++i) {\r\n var 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\nexport function 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\nexport function readBuffer(ptr: usize, length: usize): Uint8Array {\r\n var ret = new Uint8Array(length);\r\n for (var 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\nclass Binary {\r\n /** WebAssembly binary. */\r\n output: Uint8Array;\r\n /** Source map, if generated. */\r\n sourceMap: string | null;\r\n}\r\n","import {\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 typesToString\r\n} from \"./types\";\r\n\r\nimport {\r\n ModifierKind,\r\n Node,\r\n NodeKind,\r\n Source,\r\n Range,\r\n TypeNode,\r\n TypeParameter,\r\n Decorator,\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 hasDecorator,\r\n hasModifier\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\nclass QueuedExport {\r\n isReExport: bool;\r\n referencedName: string;\r\n member: ExportMember;\r\n}\r\n\r\nclass QueuedImport {\r\n internalName: string;\r\n referencedName: string;\r\n referencedNameAlt: string;\r\n declaration: ImportDeclaration;\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 elements: Map = new Map();\r\n /** Types by internal name. */\r\n types: Map = noTypesYet;\r\n /** Declared type aliases. */\r\n typeAliases: Map = new Map();\r\n /** Exports of individual files by exported name. Not global exports. */\r\n exports: 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\r\n this.types = 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 (var i = 0, k = this.sources.length; i < k; ++i) {\r\n var source = this.sources[i];\r\n var statements = source.statements;\r\n for (var j = 0, l = statements.length; j < l; ++j) {\r\n var statement = statements[j];\r\n switch (statement.kind) {\r\n\r\n case NodeKind.CLASSDECLARATION:\r\n this.initializeClass(\r\n statement,\r\n queuedDerivedClasses\r\n );\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(\r\n statement,\r\n queuedExports\r\n );\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(\r\n statement,\r\n queuedExports,\r\n queuedImports\r\n );\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(\r\n statement,\r\n queuedDerivedClasses\r\n );\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 var element: Element | null;\r\n\r\n // queued imports should be resolvable now through traversing exports and\r\n // queued exports\r\n for (i = 0; i < queuedImports.length;) {\r\n var queuedImport = queuedImports[i];\r\n element = this.tryResolveImport(\r\n queuedImport.referencedName,\r\n queuedExports\r\n );\r\n if (element) {\r\n this.elements.set(queuedImport.internalName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n element = this.tryResolveImport(\r\n queuedImport.referencedNameAlt,\r\n queuedExports\r\n );\r\n if (element) {\r\n this.elements.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 (var [exportName, queuedExport] of queuedExports) {\r\n var currentExport: QueuedExport | null = queuedExport; // nullable below\r\n do {\r\n if (currentExport.isReExport) {\r\n if (element = this.exports.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 ((\r\n queuedExport.member.parent\r\n ).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.elements.get(currentExport.referencedName)) ||\r\n // library re-export\r\n (element = this.elements.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 (i = 0, k = queuedDerivedClasses.length; i < k; ++i) {\r\n var derivedDeclaration = queuedDerivedClasses[i].declaration;\r\n var derivedType = assert(derivedDeclaration.extendsType);\r\n var 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 do {\r\n if (element = this.exports.get(referencedName)) {\r\n return element;\r\n }\r\n var 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.elements.get(queuedExport.referencedName);\r\n } while (true);\r\n }\r\n\r\n private checkInternalDecorators(\r\n element: Element,\r\n declaration: DeclarationStatement\r\n ): void {\r\n var isBuiltin: bool = hasDecorator(\"builtin\", declaration.decorators);\r\n if (isBuiltin) {\r\n element.set(ElementFlags.BUILTIN);\r\n }\r\n if (\r\n hasDecorator(\"global\", declaration.decorators) ||\r\n (\r\n declaration.range.source.isLibrary &&\r\n element.is(ElementFlags.EXPORTED) &&\r\n (\r\n assert(declaration.parent).kind == NodeKind.SOURCE ||\r\n (\r\n declaration.parent).kind == NodeKind.VARIABLE &&\r\n assert((declaration.parent).parent).kind == NodeKind.SOURCE\r\n )\r\n )\r\n ) {\r\n element.set(ElementFlags.GLOBAL);\r\n if (this.elements.has(declaration.name.text)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, element.internalName\r\n );\r\n } else {\r\n this.elements.set(declaration.name.text, element);\r\n this.exports.set(declaration.name.text, element);\r\n if (isBuiltin) {\r\n element.internalName = declaration.name.text;\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.elements.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 ClassPrototype(\r\n this,\r\n declaration.name.text,\r\n internalName,\r\n declaration\r\n );\r\n prototype.namespace = namespace;\r\n this.elements.set(internalName, prototype);\r\n\r\n this.checkInternalDecorators(prototype, declaration);\r\n\r\n if (hasDecorator(\"unmanaged\", declaration.decorators)) {\r\n prototype.isUnmanaged = true;\r\n if (declaration.implementsTypes && declaration.implementsTypes.length) {\r\n this.error(\r\n DiagnosticCode.Structs_cannot_implement_interfaces,\r\n Range.join(\r\n declaration.name.range,\r\n declaration.implementsTypes[declaration.implementsTypes.length - 1]\r\n .range\r\n )\r\n );\r\n }\r\n } else if (declaration.implementsTypes.length) {\r\n throw new Error(\"not implemented\");\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(declaration.name.text)) {\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(declaration.name.text, prototype);\r\n\r\n // otherwise add to file-level exports if exported\r\n } else if (prototype.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.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.exports.set(internalName, prototype);\r\n }\r\n\r\n // initialize members\r\n var memberDeclarations = declaration.members;\r\n for (var i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n var 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 var isGetter = hasModifier(\r\n ModifierKind.GET,\r\n memberDeclaration.modifiers\r\n );\r\n if (\r\n isGetter ||\r\n hasModifier(ModifierKind.SET, memberDeclaration.modifiers)\r\n ) {\r\n this.initializeAccessor(\r\n memberDeclaration,\r\n prototype,\r\n isGetter\r\n );\r\n } else {\r\n this.initializeMethod(\r\n memberDeclaration,\r\n prototype\r\n );\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 // check and possibly register string type\r\n if (\r\n prototype.is(ElementFlags.GLOBAL) &&\r\n declaration.name.text == \"String\"\r\n ) {\r\n if (!this.types.has(\"string\")) {\r\n var instance = prototype.resolve(null);\r\n if (instance) {\r\n this.types.set(\"string\", instance.type);\r\n }\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 (hasModifier(ModifierKind.STATIC, declaration.modifiers)) {\r\n if (this.elements.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 var staticField = new Global(\r\n this, name, internalName, declaration, Type.void\r\n );\r\n classPrototype.members.set(name, staticField);\r\n this.elements.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 var instanceField = new FieldPrototype(\r\n classPrototype,\r\n name, 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 name = 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 (hasModifier(ModifierKind.STATIC, declaration.modifiers)) {\r\n assert(declaration.name.kind != NodeKind.CONSTRUCTOR);\r\n\r\n if (this.elements.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(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 prototype = new FunctionPrototype(\r\n this,\r\n name, internalName,\r\n declaration,\r\n null\r\n );\r\n classPrototype.members.set(name, prototype);\r\n this.elements.set(internalName, prototype);\r\n\r\n // instance methods 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 prototype = new FunctionPrototype(\r\n this,\r\n name, 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(ElementFlags.CONSTRUCTOR);\r\n classPrototype.constructorPrototype = prototype;\r\n }\r\n } else {\r\n classPrototype.instanceMembers.set(name, prototype);\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: Decorator[] | null,\r\n prototype: FunctionPrototype,\r\n classPrototype: ClassPrototype\r\n ) {\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 (var i = 0, k = decorators.length; i < k; ++i) {\r\n var 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 var numArgs = decorator.arguments && decorator.arguments.length || 0;\r\n if (numArgs == 1) {\r\n var 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\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 } 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 isGetter: bool\r\n ): void {\r\n var propertyName = declaration.name.text;\r\n var internalPropertyName = declaration.fileLevelInternalName;\r\n\r\n var propertyElement = this.elements.get(internalPropertyName);\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 )\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 propertyName, internalPropertyName,\r\n classPrototype\r\n );\r\n }\r\n\r\n var name = (isGetter ? GETTER_PREFIX : SETTER_PREFIX) + propertyName;\r\n\r\n // static accessors become global functions\r\n if (hasModifier(ModifierKind.STATIC, declaration.modifiers)) {\r\n var staticName = classPrototype.internalName + STATIC_DELIMITER + name;\r\n if (this.elements.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 var staticPrototype = new FunctionPrototype(\r\n this,\r\n name, 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 (!classPrototype.members) {\r\n classPrototype.members = new Map();\r\n }\r\n classPrototype.members.set(propertyName, propertyElement); // check above\r\n this.elements.set(internalPropertyName, propertyElement);\r\n\r\n // instance accessors are remembered until resolved\r\n } else {\r\n var instanceName = classPrototype.internalName + INSTANCE_DELIMITER + name;\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, internalPropertyName\r\n );\r\n return;\r\n }\r\n } else {\r\n classPrototype.instanceMembers = new Map();\r\n }\r\n var instancePrototype = new FunctionPrototype(\r\n this,\r\n name, 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(name, propertyElement);\r\n this.elements.set(internalPropertyName, propertyElement);\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.elements.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 enm = new Enum(this, declaration.name.text, internalName, declaration);\r\n enm.namespace = namespace;\r\n this.elements.set(internalName, enm);\r\n\r\n this.checkInternalDecorators(enm, declaration);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(declaration.name.text)) {\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(declaration.name.text, enm);\r\n } else if (enm.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.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.exports.set(internalName, enm);\r\n }\r\n\r\n var values = declaration.values;\r\n for (var i = 0, k = values.length; i < k; ++i) {\r\n this.initializeEnumValue(values[i], enm);\r\n }\r\n }\r\n\r\n private initializeEnumValue(\r\n declaration: EnumValueDeclaration,\r\n enm: Enum\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n if (enm.members) {\r\n if (enm.members.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, internalName\r\n );\r\n return;\r\n }\r\n } else {\r\n enm.members = new Map();\r\n }\r\n var value = new EnumValue(enm, this, name, internalName, declaration);\r\n enm.members.set(name, value);\r\n }\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 (var 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.exports.set(name, element);\r\n if (identifier.range.source.isLibrary) { // add global alias\r\n if (this.elements.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.elements.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.exports.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.elements.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.elements.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 var seen = new Set();\r\n while (queuedExport = queuedExports.get(referencedName)) {\r\n if (queuedExport.isReExport) {\r\n referencedElement = this.exports.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.elements.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.elements.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 FunctionPrototype(\r\n this,\r\n declaration.name.text, internalName,\r\n declaration,\r\n null\r\n );\r\n prototype.namespace = namespace;\r\n this.elements.set(internalName, prototype);\r\n\r\n this.checkInternalDecorators(prototype, declaration);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(declaration.name.text)) {\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(declaration.name.text, prototype);\r\n } else if (prototype.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.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.exports.set(internalName, prototype);\r\n }\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 (var 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 var internalName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n statement.namespaceName.text\r\n );\r\n if (this.elements.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.elements.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.exports.get(referencedName)) {\r\n this.elements.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.elements.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.elements.set(internalName, prototype);\r\n\r\n this.checkInternalDecorators(prototype, declaration);\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 } else if (prototype.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.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.exports.set(internalName, prototype);\r\n }\r\n\r\n var memberDeclarations = declaration.members;\r\n for (var i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n var 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 var isGetter = hasModifier(ModifierKind.GET, memberDeclaration.modifiers);\r\n if (isGetter || hasModifier(ModifierKind.SET, memberDeclaration.modifiers)) {\r\n this.initializeAccessor(memberDeclaration, prototype, isGetter);\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 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\r\n var namespace = this.elements.get(internalName);\r\n if (!namespace) {\r\n namespace = new Namespace(this, declaration.name.text, internalName, declaration);\r\n namespace.namespace = parentNamespace;\r\n this.elements.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(declaration.name.text)) {\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(declaration.name.text, namespace);\r\n } else if (namespace.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.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.exports.set(internalName, namespace);\r\n }\r\n\r\n var members = declaration.members;\r\n for (var i = 0, k = members.length; i < k; ++i) {\r\n switch (members[i].kind) {\r\n\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 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.types.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 this.typeAliases.set(name, declaration.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 (var i = 0, k = declarations.length; i < k; ++i) {\r\n var declaration = declarations[i];\r\n var internalName = declaration.fileLevelInternalName;\r\n if (this.elements.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\r\n var global = new Global(\r\n this,\r\n declaration.name.text,\r\n internalName,\r\n declaration,\r\n Type.void // resolved later on\r\n );\r\n global.namespace = namespace;\r\n this.elements.set(internalName, global);\r\n\r\n this.checkInternalDecorators(global, declaration);\r\n\r\n if (namespace) {\r\n if (namespace.members) {\r\n if (namespace.members.has(declaration.name.text)) {\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(declaration.name.text, global);\r\n } else if (global.is(ElementFlags.EXPORTED)) {\r\n if (this.exports.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.exports.set(internalName, global);\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Resolves a {@link TypeNode} to a concrete {@link Type}. */\r\n resolveType(\r\n node: TypeNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportNotFound: bool = true\r\n ): Type | null {\r\n var globalName = node.name.text;\r\n var localName = node.range.source.internalPath + PATH_DELIMITER + node.name.text;\r\n\r\n var element: Element | null;\r\n\r\n // check file-global / program-global element\r\n if ((element = this.elements.get(localName)) || (element = this.elements.get(globalName))) {\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE:\r\n var instance = (element).resolveUsingTypeArguments(\r\n node.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 // resolve parameters\r\n var k = node.typeArguments.length;\r\n var paramTypes = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n var paramType = this.resolveType( // reports\r\n node.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 var 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 var placeholderType = contextualTypeArguments.get(globalName);\r\n if (placeholderType) return placeholderType;\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.types.get(localName)) || (type = this.types.get(globalName))) {\r\n return type;\r\n }\r\n\r\n // check type alias\r\n var alias = this.typeAliases.get(globalName);\r\n if (alias && (type = this.resolveType(alias, null, reportNotFound))) {\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 node.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: TypeParameter[],\r\n typeArgumentNodes: TypeNode[] | 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 (var i = 0; i < parameterCount; ++i) {\r\n var 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.elements.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.elements.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.elements.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\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD:\r\n if (!(targetType = (target).type).classType) {\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.classType;\r\n break;\r\n\r\n case ElementKind.PROPERTY:\r\n var getter = assert((target).getterPrototype).resolve(); // reports\r\n if (!getter) return null;\r\n if (!(targetType = getter.returnType).classType) {\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.classType;\r\n break;\r\n }\r\n\r\n // Look up the member within\r\n switch (target.kind) {\r\n\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 cbase 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 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\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD:\r\n var type = (target).type;\r\n if (type.classType) {\r\n var indexedGetName = (target = type.classType).prototype.fnIndexedGet;\r\n var 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.classType, targetExpression);\r\n }\r\n }\r\n break;\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 var classType: Class | null;\r\n\r\n while (expression.kind == NodeKind.PARENTHESIZED) {\r\n expression = (expression).expression;\r\n }\r\n\r\n switch (expression.kind) {\r\n\r\n case NodeKind.ASSERTION:\r\n var type = this.resolveType((expression).toType); // reports\r\n if (type && (classType = type.classType)) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(classType);\r\n }\r\n return null;\r\n\r\n case NodeKind.BINARY:\r\n // TODO: string concatenation, mostly\r\n throw new Error(\"not implemented\");\r\n\r\n case NodeKind.THIS: // -> Class\r\n if (classType = contextualFunction.instanceMethodOf) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(classType);\r\n }\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n return null;\r\n\r\n case NodeKind.SUPER: // -> Class\r\n if ((classType = contextualFunction.instanceMethodOf) && (classType = classType.base)) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(classType);\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 var resolved = this.resolveExpression(\r\n (expression).expression,\r\n contextualFunction\r\n );\r\n if (resolved) {\r\n var element = resolved.element;\r\n if (element && element.kind == ElementKind.FUNCTION_PROTOTYPE) {\r\n var instance = (element).resolveUsingTypeArguments(\r\n (expression).typeArguments,\r\n null,\r\n expression\r\n );\r\n if (instance && instance.returnType.classType) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(instance.returnType.classType);\r\n }\r\n }\r\n }\r\n break;\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\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 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 an {@link Element}. */\r\nexport enum ElementFlags {\r\n /** No flags set. */\r\n NONE = 0,\r\n /** Is compiled. */\r\n COMPILED = 1 << 0,\r\n /** Is an import. */\r\n IMPORTED = 1 << 1,\r\n /** Is an export. */\r\n EXPORTED = 1 << 2,\r\n /** Is built-in. */\r\n BUILTIN = 1 << 3,\r\n /** Is declared. */\r\n DECLARED = 1 << 4,\r\n /** Is generic. */\r\n GENERIC = 1 << 5,\r\n /** Is constant. */\r\n CONSTANT = 1 << 6,\r\n /** Has a constant value and is therefore inlined. */\r\n INLINED = 1 << 7,\r\n /** Is instance member. */\r\n INSTANCE = 1 << 8,\r\n /** Is getter. */\r\n GETTER = 1 << 9,\r\n /** Is setter. */\r\n SETTER = 1 << 10,\r\n /** Is global. */\r\n GLOBAL = 1 << 11,\r\n /** Is read-only. */\r\n READONLY = 1 << 12,\r\n /** Is a public member. */\r\n PUBLIC = 1 << 13,\r\n /** Is a protected member. */\r\n PROTECTED = 1 << 14,\r\n /** Is a private member. */\r\n PRIVATE = 1 << 15,\r\n /** Is an abstract member. */\r\n ABSTRACT = 1 << 16,\r\n /** Is a constructor. */\r\n CONSTRUCTOR = 1 << 17,\r\n /** Is an unmanaged class with limited capabilites. */\r\n UNMANAGED = 1 << 18,\r\n /** Is scoped. */\r\n SCOPED = 1 << 19,\r\n /** Is the start function. */\r\n START = 1 << 20\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 /** Element flags. */\r\n flags: ElementFlags = ElementFlags.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: ElementFlags): bool { return (this.flags & flag) == flag; }\r\n\r\n /** Sets a specific flag or flags. */\r\n set(flag: ElementFlags): 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 if (this.declaration.modifiers) {\r\n for (var i = 0, k = this.declaration.modifiers.length; i < k; ++i) {\r\n switch (this.declaration.modifiers[i].modifierKind) {\r\n case ModifierKind.IMPORT: this.set(ElementFlags.IMPORTED); break;\r\n case ModifierKind.EXPORT: this.set(ElementFlags.EXPORTED); break;\r\n case ModifierKind.DECLARE: this.set(ElementFlags.DECLARED); break;\r\n default: throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\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 if (this.declaration.modifiers) {\r\n for (var i = 0, k = this.declaration.modifiers.length; i < k; ++i) {\r\n switch (this.declaration.modifiers[i].modifierKind) {\r\n case ModifierKind.EXPORT: this.set(ElementFlags.EXPORTED); break;\r\n case ModifierKind.IMPORT: this.set(ElementFlags.IMPORTED); break;\r\n case ModifierKind.DECLARE: this.set(ElementFlags.DECLARED); break;\r\n case ModifierKind.CONST: this.set(ElementFlags.CONSTANT); break;\r\n default: throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\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(ElementFlags.CONSTANT | ElementFlags.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(ElementFlags.CONSTANT | ElementFlags.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 if (this.declaration.modifiers) {\r\n for (var i = 0, k = this.declaration.modifiers.length; i < k; ++i) {\r\n switch (this.declaration.modifiers[i].modifierKind) {\r\n\r\n case ModifierKind.IMPORT:\r\n this.set(ElementFlags.IMPORTED);\r\n break;\r\n\r\n case ModifierKind.EXPORT:\r\n this.set(ElementFlags.EXPORTED);\r\n break;\r\n\r\n case ModifierKind.CONST:\r\n this.set(ElementFlags.CONSTANT);\r\n break;\r\n\r\n case ModifierKind.LET:\r\n this.set(ElementFlags.SCOPED);\r\n break;\r\n\r\n case ModifierKind.DECLARE:\r\n this.set(ElementFlags.DECLARED);\r\n break;\r\n\r\n case ModifierKind.READONLY:\r\n this.set(this.declaration.initializer\r\n ? ElementFlags.CONSTANT | ElementFlags.READONLY\r\n : ElementFlags.READONLY\r\n );\r\n break;\r\n\r\n case ModifierKind.PUBLIC:\r\n case ModifierKind.PRIVATE:\r\n case ModifierKind.PROTECTED:\r\n case ModifierKind.STATIC:\r\n break; // static fields become globals\r\n\r\n default:\r\n throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\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. */\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 if (this.declaration.modifiers) {\r\n for (var i = 0, k = this.declaration.modifiers.length; i < k; ++i) {\r\n switch (this.declaration.modifiers[i].modifierKind) {\r\n\r\n case ModifierKind.IMPORT:\r\n this.set(ElementFlags.IMPORTED);\r\n break;\r\n\r\n case ModifierKind.EXPORT:\r\n this.set(ElementFlags.EXPORTED);\r\n break;\r\n\r\n case ModifierKind.DECLARE:\r\n this.set(ElementFlags.DECLARED);\r\n break;\r\n\r\n case ModifierKind.GET:\r\n this.set(ElementFlags.GETTER);\r\n break;\r\n\r\n case ModifierKind.SET:\r\n this.set(ElementFlags.SETTER);\r\n break;\r\n\r\n case ModifierKind.STATIC:\r\n case ModifierKind.ABSTRACT:\r\n case ModifierKind.PRIVATE:\r\n case ModifierKind.PROTECTED:\r\n case ModifierKind.PUBLIC:\r\n break; // already handled\r\n\r\n default:\r\n throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\r\n if (this.declaration.isGeneric) {\r\n this.set(ElementFlags.GENERIC);\r\n }\r\n if (this.classPrototype = classPrototype) {\r\n this.set(ElementFlags.INSTANCE);\r\n }\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\r\n // inherit contextual type arguments\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (var [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n\r\n var i: i32, k: i32;\r\n\r\n // inherit class type arguments if a partially resolved instance method (classTypeArguments is set)\r\n if (this.classTypeArguments) {\r\n if (!this.classPrototype) {\r\n throw new Error(\"partially resolved instance method must reference its class prototype\");\r\n }\r\n var classDeclaration = (this.classPrototype).declaration;\r\n var classTypeParameters = classDeclaration.typeParameters;\r\n if ((k = this.classTypeArguments.length) != classTypeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n for (i = 0; i < k; ++i) {\r\n contextualTypeArguments.set(classTypeParameters[i].name.text, this.classTypeArguments[i]);\r\n }\r\n }\r\n\r\n // override call specific contextual type arguments\r\n var functionTypeParameters = declaration.typeParameters;\r\n if (functionTypeArguments && (k = functionTypeArguments.length)) {\r\n if (!functionTypeParameters || k != functionTypeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n for (i = 0; i < k; ++i) {\r\n contextualTypeArguments.set(functionTypeParameters[i].name.text, functionTypeArguments[i]);\r\n }\r\n }\r\n\r\n // resolve parameters\r\n // TODO: 'this' type\r\n k = declaration.parameters.length;\r\n var parameters = new Array(k);\r\n var parameterTypes = new Array(k);\r\n var typeNode: TypeNode | null;\r\n for (i = 0; i < k; ++i) {\r\n var parameterDeclaration = declaration.parameters[i];\r\n typeNode = assert(parameterDeclaration.type);\r\n var parameterType = this.program.resolveType(typeNode, contextualTypeArguments, true); // reports\r\n if (parameterType) {\r\n parameters[i] = new Parameter(parameterDeclaration.name.text, parameterType, parameterDeclaration.initializer);\r\n parameterTypes[i] = parameterType;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n var internalName = this.internalName;\r\n if (instanceKey.length) {\r\n internalName += \"<\" + instanceKey + \">\";\r\n }\r\n var classInstance: Class | null = null;\r\n if (this.classPrototype) {\r\n classInstance = this.classPrototype.resolve(this.classTypeArguments, contextualTypeArguments); // reports\r\n if (!classInstance) return null;\r\n }\r\n\r\n // resolve return type\r\n // TODO: 'this' type\r\n var returnType: Type;\r\n if (this.is(ElementFlags.SETTER) || this.is(ElementFlags.CONSTRUCTOR)) {\r\n returnType = Type.void; // not annotated\r\n } else {\r\n typeNode = assert(declaration.returnType);\r\n var type = this.program.resolveType(typeNode, contextualTypeArguments, true); // reports\r\n if (type) {\r\n returnType = type;\r\n } else {\r\n return null;\r\n }\r\n }\r\n\r\n instance = new Function(this, internalName, functionTypeArguments, parameters, returnType, classInstance);\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 if (!this.classPrototype) {\r\n throw new Error(\"partially resolved instance method must reference its class prototype\");\r\n }\r\n if (classTypeArguments && classTypeArguments.length) {\r\n var 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: TypeNode[] | 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(ElementFlags.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: TypeNode[] | null,\r\n contextualTypeArguments: Map | null\r\n ): Type[] | null {\r\n assert(this.is(ElementFlags.BUILTIN));\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (typeArgumentNodes) {\r\n var k = typeArgumentNodes.length;\r\n resolvedTypeArguments = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n var 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 /** Concrete type arguments. */\r\n typeArguments: Type[] | null;\r\n /** Concrete function parameters. Excluding `this` if an instance method. */\r\n parameters: Parameter[] | null;\r\n /** Concrete return type. */\r\n returnType: Type;\r\n /** If an instance method, the concrete class it is a member of. */\r\n instanceMethodOf: Class | 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\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 typeArguments: Type[] | null,\r\n parameters: Parameter[] | null,\r\n returnType: Type,\r\n instanceMethodOf: Class | null = null\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName);\r\n this.prototype = prototype;\r\n this.typeArguments = typeArguments;\r\n this.parameters = parameters || [];\r\n this.returnType = returnType;\r\n this.instanceMethodOf = instanceMethodOf;\r\n this.flags = prototype.flags;\r\n if (!(prototype.is(ElementFlags.BUILTIN) || prototype.is(ElementFlags.DECLARED))) {\r\n var localIndex = 0;\r\n if (instanceMethodOf) {\r\n assert(this.is(ElementFlags.INSTANCE)); // internal error\r\n this.locals.set(\"this\", new Local(prototype.program, \"this\", localIndex++, instanceMethodOf.type));\r\n if (instanceMethodOf.contextualTypeArguments) {\r\n if (!this.contextualTypeArguments) {\r\n this.contextualTypeArguments = new Map();\r\n }\r\n for (var [inheritedName, inheritedType] of instanceMethodOf.contextualTypeArguments) {\r\n this.contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n } else {\r\n assert(!this.is(ElementFlags.INSTANCE)); // internal error\r\n }\r\n for (var i = 0, k = this.parameters.length; i < k; ++i) {\r\n var parameter = this.parameters[i];\r\n var parameterName = assert(parameter.name, \"parameter must be named\"); // not a builtin or declared\r\n this.locals.set(\r\n parameterName,\r\n new Local(\r\n prototype.program,\r\n parameterName,\r\n localIndex++,\r\n parameter.type\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.parameters ? this.parameters.length : 0) + this.additionalLocals.length;\r\n if (this.is(ElementFlags.INSTANCE)) localIndex++; // plus 'this'\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: temps = this.tempI32s; break;\r\n case NativeType.I64: temps = this.tempI64s; break;\r\n case NativeType.F32: temps = this.tempF32s; break;\r\n case NativeType.F64: temps = this.tempF64s; break;\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n if (temps && temps.length) {\r\n var 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: temps = this.tempI32s || (this.tempI32s = []); break;\r\n case NativeType.I64: temps = this.tempI64s || (this.tempI64s = []); break;\r\n case NativeType.F32: temps = this.tempF32s || (this.tempF32s = []); break;\r\n case NativeType.F64: temps = this.tempF64s || (this.tempF64s = []); break;\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: temps = this.tempI32s || (this.tempI32s = []); break;\r\n case NativeType.I64: temps = this.tempI64s || (this.tempI64s = []); break;\r\n case NativeType.F32: temps = this.tempF32s || (this.tempF32s = []); break;\r\n case NativeType.F64: temps = this.tempF64s || (this.tempF64s = []); break;\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 var debugLocations = this.debugLocations;\r\n if (debugLocations) {\r\n for (var i = 0, k = debugLocations.length; i < k; ++i) {\r\n var 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 /** Tests if a value of this function type is assignable to a target of the specified function type. */\r\n isAssignableTo(target: Function): bool {\r\n return this == target; // TODO\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 /** Returns the function type TypeScript representation of this function.*/\r\n toTypeString(): string { throw new Error(\"not implemented\"); }\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 if (this.declaration.modifiers) {\r\n for (var i = 0, k = this.declaration.modifiers.length; i < k; ++i) {\r\n switch (this.declaration.modifiers[i].modifierKind) {\r\n\r\n case ModifierKind.EXPORT:\r\n this.set(ElementFlags.EXPORTED);\r\n break;\r\n\r\n case ModifierKind.READONLY:\r\n this.set(ElementFlags.READONLY);\r\n break;\r\n\r\n case ModifierKind.PRIVATE:\r\n case ModifierKind.PROTECTED:\r\n case ModifierKind.PUBLIC:\r\n case ModifierKind.STATIC:\r\n break; // already handled\r\n\r\n default:\r\n throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n /** Whether the field is read-only or not. */\r\n get isReadonly(): bool {\r\n return (this.flags & ElementFlags.READONLY) != 0;\r\n }\r\n set isReadonly(is: bool) {\r\n if (is) {\r\n this.flags |= ElementFlags.READONLY;\r\n } else {\r\n this.flags &= ~ElementFlags.READONLY;\r\n }\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 if (this.declaration.modifiers) {\r\n for (var i = 0, k = this.declaration.modifiers.length; i < k; ++i) {\r\n switch (this.declaration.modifiers[i].modifierKind) {\r\n case ModifierKind.IMPORT: this.set(ElementFlags.IMPORTED); break;\r\n case ModifierKind.EXPORT: this.set(ElementFlags.EXPORTED); break;\r\n case ModifierKind.DECLARE: this.set(ElementFlags.DECLARED); break;\r\n default: throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\r\n if (this.declaration.typeParameters.length) {\r\n this.set(ElementFlags.GENERIC);\r\n }\r\n }\r\n\r\n /** Whether an unamanaged class or not. */\r\n get isUnmanaged(): bool {\r\n return (this.flags & ElementFlags.UNMANAGED) != 0;\r\n }\r\n set isUnmanaged(is: bool) {\r\n if (is) {\r\n this.flags |= ElementFlags.UNMANAGED;\r\n } else {\r\n this.flags &= ~ElementFlags.UNMANAGED;\r\n }\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 (var [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 var baseClassType = this.program.resolveType(declaration.extendsType, null); // reports\r\n if (!baseClassType) return null;\r\n if (!(baseClass = baseClassType.classType)) {\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.prototype.isUnmanaged != this.isUnmanaged) {\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 (var 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 var 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 (var member of this.instanceMembers.values()) {\r\n switch (member.kind) {\r\n\r\n case ElementKind.FIELD_PROTOTYPE: // fields are layed out in advance\r\n if (!instance.members) instance.members = new Map();\r\n var 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 var fieldType = this.program.resolveType( // reports\r\n fieldDeclaration.type,\r\n instance.contextualTypeArguments\r\n );\r\n if (fieldType) {\r\n var fieldInstance = new Field(member, (member).internalName, fieldType);\r\n switch (fieldType.byteSize) { // align\r\n case 1: break;\r\n case 2: if (memoryOffset & 1) ++memoryOffset; break;\r\n case 4: if (memoryOffset & 3) memoryOffset = (memoryOffset | 3) + 1; break;\r\n case 8: if (memoryOffset & 7) memoryOffset = (memoryOffset | 7) + 1; break;\r\n default: assert(false);\r\n }\r\n fieldInstance.memoryOffset = memoryOffset;\r\n memoryOffset += fieldType.byteSize;\r\n instance.members.set(member.simpleName, fieldInstance);\r\n }\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 var methodPrototype = (member).resolvePartial(typeArguments); // reports\r\n if (methodPrototype) {\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 assert((member).getterPrototype);\r\n var instanceProperty = new Property(this.program, member.simpleName, member.internalName, this);\r\n instanceProperty.getterPrototype = (\r\n ((member).getterPrototype).resolvePartial(\r\n typeArguments\r\n )\r\n );\r\n if ((member).setterPrototype) {\r\n instanceProperty.setterPrototype = (\r\n ((member).setterPrototype).resolvePartial(\r\n typeArguments\r\n )\r\n );\r\n }\r\n instance.members.set(member.simpleName, instanceProperty);\r\n break;\r\n\r\n default:\r\n throw new Error(\"instance member expected\");\r\n }\r\n }\r\n }\r\n instance.currentMemoryOffset = memoryOffset; // sizeof() is its 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: TypeNode[] | 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(ElementFlags.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 (var [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 var 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 /** This branch always returns. */\r\n RETURNS = 1 << 0,\r\n /** This branch possibly throws. */\r\n POSSIBLY_THROWS = 1 << 1,\r\n /** This branch possible breaks. */\r\n POSSIBLY_BREAKS = 1 << 2,\r\n /** This branch possible continues. */\r\n POSSIBLY_CONTINUES = 1 << 3\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\r\n /** Sets the specified flag or flags. */\r\n set(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 branchFlow = new Flow();\r\n branchFlow.parent = this;\r\n branchFlow.flags = this.flags;\r\n branchFlow.currentFunction = this.currentFunction;\r\n branchFlow.continueLabel = this.continueLabel;\r\n branchFlow.breakLabel = this.breakLabel;\r\n return branchFlow;\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 (var 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.POSSIBLY_THROWS)) {\r\n parent.set(FlowFlags.POSSIBLY_THROWS);\r\n }\r\n if (this.is(FlowFlags.POSSIBLY_BREAKS) && parent.breakLabel == this.breakLabel) {\r\n parent.set(FlowFlags.POSSIBLY_BREAKS);\r\n }\r\n if (this.is(FlowFlags.POSSIBLY_CONTINUES) && parent.continueLabel == this.continueLabel) {\r\n parent.set(FlowFlags.POSSIBLY_CONTINUES);\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(): bool {\r\n assert(this.parent == null, \"must be the topmost parent flow\");\r\n this.continueLabel = null;\r\n this.breakLabel = null;\r\n return this.is(FlowFlags.RETURNS);\r\n }\r\n}\r\n","/*\r\n\r\n This is a modified version of TypeScript's scanner that doesn't perform as much bookkeeping, simply\r\n skips over trivia and provides a more general mark/reset mechanism for the parser to utilize on\r\n ambiguous tokens.\r\n\r\n next() advances the token\r\n peek() peeks for the next token\r\n skip(token) skips over a token if possible\r\n mark() marks at current token\r\n reset() resets to marked state\r\n range() gets the range of the current token\r\n\r\n readFloat() on FLOATLITERAL\r\n readIdentifier() on IDENTIFIER\r\n readInteger() on INTEGERLITERAL\r\n readString() on STRINGLITERAL\r\n\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} 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/charcode\";\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 namespace Token {\r\n\r\n export function fromKeyword(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\n export function isAlsoIdentifier(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:\r\n return true;\r\n default:\r\n return false;\r\n }\r\n }\r\n\r\n export function operatorToString(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: assert(false); 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 pos = this.start;\r\n var line = 1;\r\n while (pos-- > 0) {\r\n if (text.charCodeAt(pos) == CharCode.LINEFEED) {\r\n line++;\r\n }\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 pos = this.start;\r\n var column = 0;\r\n while (pos-- > 0) {\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\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 markedPos: i32 = 0;\r\n markedToken: Token = -1;\r\n markedTokenPos: i32 = 0;\r\n\r\n nextToken: Token = -1;\r\n nextTokenOnNewLine: bool = false;\r\n\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 var c = text.charCodeAt(this.pos);\r\n switch (c) {\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 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 ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.SLASH) { // single-line\r\n // TODO: triple-slash?\r\n // if (\r\n // this.pos + 1 < this.end &&\r\n // text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n // ) {\r\n // }\r\n while (++this.pos < this.end) {\r\n if (isLineBreak(text.charCodeAt(this.pos))) break;\r\n }\r\n continue;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) { // multi-line\r\n var 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 }\r\n continue;\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 var 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 var keywordText = text.substring(posBefore, this.pos);\r\n var keywordToken = Token.fromKeyword(keywordText);\r\n if (\r\n keywordToken != Token.INVALID &&\r\n !(preferIdentifier && Token.isAlsoIdentifier(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 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 var posBefore = this.pos;\r\n var tokenBefore = this.token;\r\n var tokenPosBefore = this.tokenPos;\r\n this.nextToken = this.unsafeNext(preferIdentifier, maxCompoundLength);\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 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 // skipUntil(token1: Token, token2: Token = -1): bool {\r\n // var next: Token;\r\n // do {\r\n // if ((next = this.peek()) == Token.ENDOFFILE)\r\n // return false;\r\n // if (next == token1 || next == token2)\r\n // return true;\r\n // this.next();\r\n // } while (true);\r\n // }\r\n\r\n mark(): void {\r\n this.markedPos = this.pos;\r\n this.markedToken = this.token;\r\n this.markedTokenPos = this.tokenPos;\r\n }\r\n\r\n reset(): void {\r\n this.pos = this.markedPos;\r\n this.token = this.markedToken;\r\n this.tokenPos = this.markedTokenPos;\r\n this.nextToken = -1;\r\n }\r\n\r\n range(start: i32 = -1, end: i32 = -1): Range {\r\n if (start < 0) {\r\n start = this.tokenPos;\r\n end = this.pos;\r\n } else if (end < 0) {\r\n end = start;\r\n }\r\n return new Range(this.source, start, end);\r\n }\r\n\r\n readIdentifier(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(text.charCodeAt(this.pos))\r\n );\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readString(): string {\r\n var text = this.source.text;\r\n var quote = text.charCodeAt(this.pos++);\r\n var start = this.pos;\r\n var result = \"\";\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.end)\r\n );\r\n break;\r\n }\r\n var 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\r\n case CharCode._0:\r\n return \"\\0\";\r\n\r\n case CharCode.b:\r\n return \"\\b\";\r\n\r\n case CharCode.t:\r\n return \"\\t\";\r\n\r\n case CharCode.n:\r\n return \"\\n\";\r\n\r\n case CharCode.v:\r\n return \"\\v\";\r\n\r\n case CharCode.f:\r\n return \"\\f\";\r\n\r\n case CharCode.r:\r\n return \"\\r\";\r\n\r\n case CharCode.SINGLEQUOTE:\r\n return \"'\";\r\n\r\n case CharCode.DOUBLEQUOTE:\r\n return \"\\\"\";\r\n\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\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:\r\n return \"\";\r\n default:\r\n 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 var 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 var 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\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 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:\r\n return true;\r\n }\r\n }\r\n var pos = this.pos;\r\n while (pos < this.end) {\r\n var 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\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 if (isOctalDigit(text.charCodeAt(this.pos + 1))) {\r\n var start = this.pos;\r\n ++this.pos;\r\n var 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 var 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 var 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 var 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 var 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 var 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 var 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","import {\r\n PATH_DELIMITER,\r\n STATIC_DELIMITER,\r\n INSTANCE_DELIMITER\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 normalize as normalizePath,\r\n resolve as resolvePath\r\n} from \"./util/path\";\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\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 FUNCTIONARROW,\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 // other\r\n DECORATOR,\r\n EXPORTMEMBER,\r\n MODIFIER,\r\n PARAMETER,\r\n SWITCHCASE\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\r\n // types\r\n\r\n static createType(\r\n identifier: IdentifierExpression,\r\n typeArguments: TypeNode[],\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 = identifier;\r\n type.typeArguments = typeArguments;\r\n type.isNullable = isNullable;\r\n return type;\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 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; setParentOpt(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: TypeNode,\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: TypeNode[] | 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 isArrow: bool = false\r\n ): FunctionExpression {\r\n var expr = isArrow\r\n ? new FunctionArrowExpression()\r\n : new FunctionExpression();\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: TypeNode[] | 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: TypeParameter[],\r\n extendsType: TypeNode | null,\r\n implementsTypes: TypeNode[],\r\n members: DeclarationStatement[],\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): ClassDeclaration {\r\n var stmt = new ClassDeclaration();\r\n stmt.range = range;\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.modifiers = modifiers; if (modifiers) setParent(modifiers, 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 createDecorator(\r\n expression: Expression,\r\n args: Expression[] | null,\r\n range: Range\r\n ): Decorator {\r\n var stmt = new Decorator();\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\": stmt.decoratorKind = DecoratorKind.GLOBAL; break;\r\n case \"operator\": stmt.decoratorKind = DecoratorKind.OPERATOR; break;\r\n case \"unmanaged\": stmt.decoratorKind = DecoratorKind.UNMANAGED; break;\r\n case \"offset\": stmt.decoratorKind = DecoratorKind.OFFSET; break;\r\n default: stmt.decoratorKind = DecoratorKind.CUSTOM; break;\r\n }\r\n } else {\r\n stmt.decoratorKind = DecoratorKind.CUSTOM;\r\n }\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 modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): EnumDeclaration {\r\n var stmt = new EnumDeclaration();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.values = members; setParent(members, stmt);\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, 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 range: Range\r\n ): EnumValueDeclaration {\r\n var stmt = new EnumValueDeclaration();\r\n stmt.range = range;\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 modifiers: Modifier[] | null,\r\n range: Range\r\n ): ExportStatement {\r\n var stmt = new ExportStatement();\r\n stmt.range = range;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.path = path;\r\n if (path) {\r\n var 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 stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, stmt);\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\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 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,\r\n members: DeclarationStatement[],\r\n modifiers: Modifier[] | null,\r\n range: Range\r\n ): InterfaceDeclaration {\r\n var stmt = new InterfaceDeclaration();\r\n stmt.range = range;\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 stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, stmt);\r\n return stmt;\r\n }\r\n\r\n static createFieldDeclaration(\r\n name: IdentifierExpression,\r\n type: TypeNode | null,\r\n initializer: Expression | null,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): FieldDeclaration {\r\n var stmt = new FieldDeclaration();\r\n stmt.range = range;\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.modifiers = modifiers; if (modifiers) setParent(modifiers, 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 createTypeParameter(\r\n name: IdentifierExpression,\r\n extendsType: TypeNode | null,\r\n range: Range\r\n ): TypeParameter {\r\n var elem = new TypeParameter();\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: TypeNode | null,\r\n initializer: Expression | null,\r\n kind: ParameterKind,\r\n range: Range\r\n ): Parameter {\r\n var elem = new Parameter();\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 createFunctionDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameter[] | null,\r\n parameters: Parameter[],\r\n returnType: TypeNode | null,\r\n body: Statement | null,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): FunctionDeclaration {\r\n var stmt = new FunctionDeclaration();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.parameters = parameters; setParent(parameters, stmt);\r\n stmt.returnType = returnType; if (returnType) returnType.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, 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: TypeParameter[] | null,\r\n parameters: Parameter[],\r\n returnType: TypeNode | null,\r\n body: Statement | null,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): MethodDeclaration {\r\n var stmt = new MethodDeclaration();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.parameters = parameters; setParent(parameters, stmt);\r\n stmt.returnType = returnType; if (returnType) returnType.parent = stmt;\r\n stmt.body = body; if (body) body.parent = stmt;\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, stmt);\r\n stmt.decorators = decorators; if (decorators) setParent(decorators, stmt);\r\n return stmt;\r\n }\r\n\r\n static createModifier(kind: ModifierKind, range: Range): Modifier {\r\n var elem = new Modifier();\r\n elem.range = range;\r\n elem.modifierKind = kind;\r\n return elem;\r\n }\r\n\r\n static createNamespaceDeclaration(\r\n name: IdentifierExpression,\r\n members: Statement[],\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): NamespaceDeclaration {\r\n var stmt = new NamespaceDeclaration();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.members = members; setParent(members, stmt);\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, 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 alias: TypeNode,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): TypeDeclaration {\r\n var stmt = new TypeDeclaration();\r\n stmt.range = range;\r\n stmt.name = name; name.parent = stmt;\r\n stmt.alias = alias; alias.parent = stmt;\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, 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 modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): VariableStatement {\r\n var stmt = new VariableStatement();\r\n stmt.range = range;\r\n stmt.declarations = declarations; setParent(declarations, stmt);\r\n stmt.modifiers = modifiers; if (modifiers) setParent(modifiers, 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: TypeNode | null,\r\n initializer: Expression | null,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null,\r\n range: Range\r\n ): VariableDeclaration {\r\n var elem = new VariableDeclaration();\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.modifiers = modifiers; // inherited from parent VariableStatement\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\n/** Represents a type annotation. */\r\nexport class TypeNode extends Node {\r\n kind = NodeKind.TYPE;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Type argument references. */\r\n typeArguments: TypeNode[];\r\n /** Whether nullable or not. */\r\n isNullable: bool;\r\n}\r\n\r\n/** Represents a type parameter. */\r\nexport class TypeParameter 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;\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 const 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 const 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: TypeNode;\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: TypeNode[] | 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 arrow function expression. */\r\nexport class FunctionArrowExpression extends FunctionExpression {\r\n kind = NodeKind.FUNCTIONARROW;\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/** Indicates the specific kind of a modifier. */\r\nexport enum ModifierKind {\r\n ASYNC,\r\n CONST,\r\n LET,\r\n DECLARE,\r\n EXPORT,\r\n IMPORT,\r\n STATIC,\r\n ABSTRACT,\r\n PUBLIC,\r\n PRIVATE,\r\n PROTECTED,\r\n READONLY,\r\n GET,\r\n SET,\r\n}\r\n\r\n/** Base class of all statement nodes. */\r\nexport abstract class Statement extends Node { }\r\n\r\n/** Indicates the specific kind of a source. */\r\nexport enum SourceKind {\r\n /** Default source. Usually imported from an entry file. */\r\n DEFAULT,\r\n /** Entry file. */\r\n ENTRY,\r\n /** Library file. */\r\n LIBRARY\r\n}\r\n\r\n/** A top-level source node. */\r\nexport class Source extends Node {\r\n kind = NodeKind.SOURCE;\r\n parent = null;\r\n\r\n /** Source kind. */\r\n sourceKind: SourceKind;\r\n /** Normalized path. */\r\n normalizedPath: string;\r\n /** Path used internally. */\r\n internalPath: string;\r\n /** Contained statements. */\r\n statements: Statement[];\r\n /** Full source text. */\r\n text: string;\r\n /** Tokenizer reference. */\r\n tokenizer: Tokenizer | null = null;\r\n /** Source map index. */\r\n debugInfoIndex: i32 = -1;\r\n\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 modifiers. */\r\n modifiers: Modifier[] | null;\r\n /** Array of decorators. */\r\n decorators: Decorator[] | 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 (\r\n hasModifier(ModifierKind.EXPORT, this.modifiers) &&\r\n (parent).isTopLevelExport\r\n );\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return (\r\n hasModifier(ModifierKind.STATIC, this.modifiers) &&\r\n (parent).isTopLevelExport\r\n );\r\n }\r\n return (\r\n parent.kind == NodeKind.SOURCE &&\r\n hasModifier(ModifierKind.EXPORT, this.modifiers)\r\n );\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: TypeNode | 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: TypeParameter[];\r\n /** Base class type being extended. */\r\n extendsType: TypeNode | null;\r\n /** Interface types being implemented. */\r\n implementsTypes: TypeNode[];\r\n /** Class member declarations. */\r\n members: DeclarationStatement[];\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/** Built-in decorator kinds. */\r\nexport const enum DecoratorKind {\r\n CUSTOM,\r\n GLOBAL,\r\n OPERATOR,\r\n UNMANAGED,\r\n OFFSET\r\n}\r\n\r\n/** Depresents a decorator. */\r\nexport class Decorator extends Statement {\r\n kind = NodeKind.DECORATOR;\r\n\r\n /** Name expression. */\r\n name: Expression;\r\n /** Argument expressions. */\r\n arguments: Expression[] | null;\r\n /** Built-in kind, if applicable. */\r\n decoratorKind: DecoratorKind;\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 modifiers = null;\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 modifiers. */\r\n modifiers: Modifier[] | null;\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 /** Accepted type parameters. */\r\n typeParameters: TypeParameter[] | null;\r\n /** Accepted parameters. */\r\n parameters: Parameter[];\r\n /** Return type. */\r\n returnType: TypeNode | null;\r\n /** Body statement. Usually a block. */\r\n body: Statement | null;\r\n\r\n get isGeneric(): bool {\r\n return this.typeParameters != null && this.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 modifiers = null;\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 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 Parameter extends Node {\r\n kind = NodeKind.PARAMETER;\r\n\r\n /** Parameter name. */\r\n name: IdentifierExpression;\r\n /** Parameter type. */\r\n type: TypeNode | null;\r\n /** Parameter kind. */\r\n parameterKind: ParameterKind;\r\n /** Initializer expression, if present. */\r\n initializer: Expression | null;\r\n}\r\n\r\n/** Represents a single modifier. */\r\nexport class Modifier extends Node {\r\n kind = NodeKind.MODIFIER;\r\n\r\n /** Specific modifier kind. */\r\n modifierKind: ModifierKind;\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 being aliased. */\r\n alias: TypeNode;\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 /** Array of modifiers. */\r\n modifiers: Modifier[] | null;\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 modifiers. */\r\n modifiers: Modifier[] | null;\r\n /** Array of decorators. */\r\n decorators: Decorator[] | 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/** Cached unused modifiers for reuse. */\r\nvar reusableModifiers: Modifier[] | null = null;\r\n\r\nexport function setReusableModifiers(modifiers: Modifier[]): void {\r\n reusableModifiers = modifiers;\r\n}\r\n\r\n/** Creates a new modifiers array. */\r\nexport function createModifiers(): Modifier[] {\r\n var ret: Modifier[];\r\n if (reusableModifiers != null) {\r\n ret = reusableModifiers;\r\n reusableModifiers = null;\r\n } else {\r\n ret = [];\r\n }\r\n ret.length = 0;\r\n return ret;\r\n}\r\n\r\n// Utility\r\n\r\n/** Adds a modifier to a set of modifiers. Creates a new set if `null`. */\r\nexport function addModifier(modifier: Modifier, modifiers: Modifier[] | null): Modifier[] {\r\n if (modifiers == null) modifiers = createModifiers();\r\n modifiers.push(modifier);\r\n return modifiers;\r\n}\r\n\r\n/** Gets a specific modifier from the specified set of modifiers. */\r\nexport function getModifier(kind: ModifierKind, modifiers: Modifier[] | null): Modifier | null {\r\n if (modifiers) {\r\n for (var i = 0, k = modifiers.length; i < k; ++i) {\r\n if (modifiers[i].modifierKind == kind) {\r\n return modifiers[i];\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/** Tests whether a modifier exists in the specified set of modifiers. */\r\nexport function hasModifier(kind: ModifierKind, modifiers: Modifier[] | null): bool {\r\n return getModifier(kind, modifiers) != null;\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: Decorator[] | null): Decorator | null {\r\n if (decorators) {\r\n for (var i = 0, k = decorators.length; i < k; ++i) {\r\n var decorator = decorators[i];\r\n var 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: Decorator[] | 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 hasModifier(ModifierKind.STATIC, declaration.modifiers)\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\nfunction setParent(nodes: Node[], parent: Node): void {\r\n for (var i = 0, k = nodes.length; i < k; ++i) {\r\n nodes[i].parent = parent;\r\n }\r\n}\r\n\r\nfunction setParentOpt(nodes: (Node | null)[], parent: Node): void {\r\n for (var i = 0, k = nodes.length; i < k; ++i) {\r\n var node = nodes[i];\r\n if (node) node.parent = parent;\r\n }\r\n}\r\n","import {\r\n Class,\r\n Function\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 I8,\r\n I16,\r\n I32,\r\n I64,\r\n ISIZE,\r\n\r\n // unsigned integers\r\n U8,\r\n U16,\r\n U32,\r\n U64,\r\n USIZE,\r\n BOOL, // sic\r\n\r\n // floats\r\n F32,\r\n F64,\r\n\r\n // other\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 type, if a class type. */\r\n classType: Class | null;\r\n /** Underlying function type, if a function type. */\r\n functionType: Function | 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.classType = 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 -1 >>> (targetType.size - this.size);\r\n }\r\n\r\n /** Tests if this type has the specified capabilities. */\r\n is(flags: TypeFlags): bool {\r\n return (this.flags & flags) == flags;\r\n }\r\n\r\n /** Tests if this type is a class type. */\r\n get isClass(): bool { return this.classType != null; }\r\n /** Tests if this type is a function type. */\r\n get isFunction(): bool { return this.functionType != null; }\r\n /** Tests if this type is a reference type. */\r\n get isReference(): bool { return this.classType != null || this.functionType != null; }\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.classType);\r\n var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size);\r\n ret.classType = classType;\r\n return ret;\r\n }\r\n\r\n /** Composes a function type from this type and a function. */\r\n asFunction(functionType: Function): Type {\r\n assert(this.kind == TypeKind.U32 && !this.functionType);\r\n var ret = new Type(this.kind, this.flags & ~TypeFlags.VALUE | TypeFlags.REFERENCE, this.size);\r\n ret.functionType = functionType;\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.isReference);\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.classType = this.classType; // either a class reference\r\n this.nullableType.functionType = this.functionType; // 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: Function | null;\r\n var targetFunction: Function | null;\r\n if (this.isReference) {\r\n if (target.isReference) {\r\n if (currentClass = this.classType) {\r\n if (targetClass = target.classType) {\r\n return currentClass.isAssignableTo(targetClass);\r\n }\r\n } else if (currentFunction = this.functionType) {\r\n if (targetFunction = target.functionType) {\r\n return currentFunction.isAssignableTo(targetFunction);\r\n }\r\n }\r\n }\r\n } else if (!target.isReference) {\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: return \"u32\";\r\n case TypeKind.U64: return \"u64\";\r\n case TypeKind.USIZE:\r\n if (kindOnly) return \"usize\";\r\n return this.classType\r\n ? this.classType.toString()\r\n : this.functionType\r\n ? this.functionType.toTypeString()\r\n : \"usize\";\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: assert(false); return \"\";\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\r\n default:\r\n return NativeType.I32;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n return NativeType.I64;\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n return this.size == 64 ? NativeType.I64 : NativeType.I32;\r\n\r\n case TypeKind.F32:\r\n return NativeType.F32;\r\n\r\n case TypeKind.F64:\r\n return NativeType.F64;\r\n\r\n case TypeKind.VOID:\r\n 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\r\n case TypeKind.VOID:\r\n assert(false);\r\n\r\n default:\r\n return module.createI32(0);\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n if (this.size != 64) return module.createI32(0);\r\n // fall-through\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n return module.createI64(0);\r\n\r\n case TypeKind.F32:\r\n return module.createF32(0);\r\n\r\n case TypeKind.F64:\r\n 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\r\n case TypeKind.VOID:\r\n assert(false);\r\n\r\n default:\r\n return module.createI32(1);\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n if (this.size != 64) return module.createI32(1);\r\n // fall-through\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n return module.createI64(1);\r\n\r\n case TypeKind.F32:\r\n return module.createF32(1);\r\n\r\n case TypeKind.F64:\r\n 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\r\n case TypeKind.VOID:\r\n assert(false);\r\n\r\n default:\r\n return module.createI32(-1);\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n if (this.size != 64) return module.createI32(-1);\r\n // fall-through\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n return module.createI64(-1, -1);\r\n\r\n case TypeKind.F32:\r\n return module.createF32(-1);\r\n\r\n case TypeKind.F64:\r\n 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\r\n default:\r\n return \"i\";\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n return \"I\";\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n return this.size == 64 ? \"I\" : \"i\";\r\n\r\n case TypeKind.F32:\r\n return \"f\";\r\n\r\n case TypeKind.F64:\r\n return \"F\";\r\n\r\n case TypeKind.VOID:\r\n 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 k = types.length;\r\n var ret = new Array(k);\r\n for (var i = 0; i < k; ++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 k = types.length;\r\n if (!k) return \"\";\r\n var sb = new Array(k);\r\n for (var i = 0; i < k; ++i) {\r\n sb[i] = types[i].toString();\r\n }\r\n return sb.join(\", \");\r\n}\r\n","import {\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} 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 Global,\r\n Local,\r\n Namespace,\r\n EnumValue,\r\n Property,\r\n VariableLikeElement,\r\n FlowFlags,\r\n ElementFlags,\r\n ConstantValueKind,\r\n Parameter,\r\n\r\n PATH_DELIMITER,\r\n LIBRARY_PREFIX\r\n} from \"./program\";\r\n\r\nimport {\r\n Token\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 ModifierKind,\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\r\n hasModifier\r\n} from \"./ast\";\r\n\r\nimport {\r\n Type,\r\n TypeKind,\r\n TypeFlags,\r\n\r\n typesToNativeTypes\r\n} from \"./types\";\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 /** Static memory start offset. */\r\n memoryBase: u32 = 0;\r\n /** Memory allocation implementation to use. */\r\n allocateImpl: string = \"allocate_memory\";\r\n /** Memory freeing implementation to use. */\r\n freeImpl: string = \"free_memory\";\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[] = new Array();\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 this.options = options ? options : new Options();\r\n this.memoryOffset = i64_new(\r\n max(this.options.memoryBase, this.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\r\n // initialize lookup maps, built-ins, imports, exports, etc.\r\n this.program.initialize(this.options);\r\n\r\n // set up the start function wrapping top-level statements, of all files.\r\n var startFunctionPrototype = assert(this.program.elements.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 null, // not generic\r\n null, // no parameters\r\n Type.void\r\n );\r\n startFunctionInstance.set(ElementFlags.START);\r\n this.currentFunction = this.startFunction = startFunctionInstance;\r\n\r\n var sources = this.program.sources;\r\n\r\n // compile entry file(s) while traversing to reachable elements\r\n for (var 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 if (this.startFunctionBody.length) {\r\n var typeRef = this.module.getFunctionTypeBySignature(NativeType.None, []);\r\n if (!typeRef) typeRef = this.module.addFunctionType(\"v\", NativeType.None, []);\r\n var ref: FunctionRef;\r\n this.module.setStart(\r\n ref = this.module.addFunction(\r\n this.startFunction.prototype.internalName,\r\n typeRef,\r\n typesToNativeTypes(this.startFunction.additionalLocals),\r\n this.module.createBlock(null, this.startFunctionBody)\r\n )\r\n );\r\n this.startFunction.finalize(this.module, ref);\r\n }\r\n\r\n // set up static memory segments and the heap base pointer\r\n if (!this.options.noMemory) {\r\n var memoryOffset = this.memoryOffset;\r\n memoryOffset = i64_align(memoryOffset, this.options.usizeType.byteSize);\r\n this.memoryOffset = memoryOffset;\r\n if (this.options.isWasm64) {\r\n this.module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I64,\r\n false,\r\n this.module.createI64(i64_low(memoryOffset), i64_high(memoryOffset))\r\n );\r\n } else {\r\n this.module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I32,\r\n false,\r\n this.module.createI32(i64_low(memoryOffset))\r\n );\r\n }\r\n\r\n // determine initial page size\r\n var pages = i64_shr_u(i64_align(memoryOffset, 0x10000), i64_new(16, 0));\r\n this.module.setMemory(\r\n i64_low(pages),\r\n Module.MAX_MEMORY_WASM32, // TODO: not WASM64 compatible yet\r\n this.memorySegments,\r\n this.options.target,\r\n \"memory\"\r\n );\r\n }\r\n\r\n // import memory if requested\r\n if (this.options.importMemory) {\r\n this.module.addMemoryImport(\"0\", \"env\", \"memory\");\r\n }\r\n\r\n // set up function table\r\n if (k = this.functionTable.length) {\r\n var entries = new Array(k);\r\n for (i = 0; i < k; ++i) {\r\n entries[i] = this.functionTable[i].ref;\r\n }\r\n this.module.setFunctionTable(entries);\r\n }\r\n\r\n return this.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 source: Source;\r\n var expected = normalizedPathWithoutExtension + \".ts\";\r\n for (var i = 0, k = sources.length; i < k; ++i) {\r\n 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 (i = 0, k = sources.length; i < k; ++i) {\r\n 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 (i = 0, k = sources.length; i < k; ++i) {\r\n 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 if (files.has(source.normalizedPath)) return;\r\n files.add(source.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 startFunctionBody = this.startFunctionBody;\r\n var statements = source.statements;\r\n for (var i = 0, k = statements.length; i < k; ++i) {\r\n var statement = statements[i];\r\n switch (statement.kind) {\r\n\r\n case NodeKind.CLASSDECLARATION:\r\n if (\r\n (\r\n noTreeShaking ||\r\n (isEntry && hasModifier(ModifierKind.EXPORT, (statement).modifiers))\r\n ) &&\r\n !(statement).typeParameters.length\r\n ) {\r\n this.compileClassDeclaration(statement, []);\r\n }\r\n break;\r\n\r\n case NodeKind.ENUMDECLARATION:\r\n if (\r\n noTreeShaking ||\r\n (isEntry && hasModifier(ModifierKind.EXPORT, (statement).modifiers))\r\n ) {\r\n this.compileEnumDeclaration(statement);\r\n }\r\n break;\r\n\r\n case NodeKind.FUNCTIONDECLARATION:\r\n if (\r\n (\r\n noTreeShaking ||\r\n (isEntry && hasModifier(ModifierKind.EXPORT, (statement).modifiers))\r\n ) &&\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 (\r\n noTreeShaking ||\r\n (isEntry && hasModifier(ModifierKind.EXPORT, (statement).modifiers))\r\n ) {\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 var 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 // otherwise a top-level statement that is part of the start function's body\r\n default:\r\n var previousFunction = this.currentFunction;\r\n this.currentFunction = this.startFunction;\r\n var expr = this.compileStatement(statement);\r\n this.startFunctionBody.push(expr);\r\n this.currentFunction = previousFunction;\r\n break;\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 = this.program.elements.get(declaration.fileLevelInternalName);\r\n if (!element || element.kind != ElementKind.GLOBAL) throw new Error(\"global expected\");\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(ElementFlags.COMPILED) || global.is(ElementFlags.BUILTIN)) return true;\r\n global.set(ElementFlags.COMPILED); // ^ built-ins are compiled on use\r\n\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 var 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\r\n // handle imports\r\n if (global.is(ElementFlags.DECLARED)) {\r\n\r\n // constant global\r\n if (global.is(ElementFlags.CONSTANT)) {\r\n this.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(ElementFlags.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(ElementFlags.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 (global.is(ElementFlags.CONSTANT)) {\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(this.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 this.module.addGlobal(internalName, nativeType, true, global.type.toNativeZero(this.module));\r\n var setExpr = this.module.createSetGlobal(internalName, initExpr);\r\n this.startFunctionBody.push(setExpr);\r\n\r\n } else { // compile as-is\r\n\r\n if (global.is(ElementFlags.CONSTANT)) {\r\n var exprType = _BinaryenExpressionGetType(initExpr);\r\n switch (exprType) {\r\n\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 throw new Error(\"concrete type expected\");\r\n }\r\n global.set(ElementFlags.INLINED); // inline the value from now on\r\n if (declaration.isTopLevel) { // but keep the element if it might be re-exported\r\n this.module.addGlobal(internalName, nativeType, false, initExpr);\r\n }\r\n if (declaration.range.source.isEntry && declaration.isTopLevelExport) {\r\n this.module.addGlobalExport(global.internalName, declaration.programLevelInternalName);\r\n }\r\n\r\n } else /* mutable */ {\r\n this.module.addGlobal(internalName, nativeType, !global.is(ElementFlags.CONSTANT), 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 = this.program.elements.get(declaration.fileLevelInternalName);\r\n if (!element || element.kind != ElementKind.ENUM) throw new Error(\"enum expected\");\r\n return this.compileEnum(element) ? element : null;\r\n }\r\n\r\n compileEnum(element: Enum): bool {\r\n if (element.is(ElementFlags.COMPILED)) return true;\r\n element.set(ElementFlags.COMPILED);\r\n\r\n this.currentEnum = element;\r\n var previousValue: EnumValue | null = null;\r\n if (element.members) {\r\n for (var member of element.members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) continue; // happens if an enum is also a namespace\r\n var initInStart = false;\r\n var val = member;\r\n var valueDeclaration = val.declaration;\r\n val.set(ElementFlags.COMPILED);\r\n if (val.is(ElementFlags.INLINED)) {\r\n if (element.declaration.isTopLevelExport) {\r\n this.module.addGlobal(\r\n val.internalName,\r\n NativeType.I32,\r\n false, // constant\r\n this.module.createI32(val.constantValue)\r\n );\r\n }\r\n } else {\r\n var 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(ElementFlags.CONSTANT)) {\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 = this.module.createI32(0);\r\n } else if (previousValue.is(ElementFlags.INLINED)) {\r\n initExpr = this.module.createI32(previousValue.constantValue + 1);\r\n } else {\r\n // in TypeScript this errors with TS1061, but actually we can do:\r\n initExpr = this.module.createBinary(BinaryOp.AddI32,\r\n this.module.createGetGlobal(previousValue.internalName, NativeType.I32),\r\n this.module.createI32(1)\r\n );\r\n if (element.is(ElementFlags.CONSTANT)) {\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 this.module.addGlobal(\r\n val.internalName,\r\n NativeType.I32,\r\n true, // mutable\r\n this.module.createI32(0)\r\n );\r\n var setExpr = this.module.createSetGlobal(val.internalName, initExpr);\r\n this.startFunctionBody.push(setExpr);\r\n } else {\r\n this.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(ElementFlags.INLINED);\r\n } else {\r\n throw new Error(\"i32 expected\");\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(ElementFlags.INLINED)) {\r\n this.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 = this.program.elements.get(declaration.fileLevelInternalName);\r\n if (!element || element.kind != ElementKind.FUNCTION_PROTOTYPE) {\r\n throw new Error(\"function expected\");\r\n }\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) return null;\r\n return this.compileFunction(instance) ? instance : null;\r\n }\r\n\r\n /** Compiles a readily resolved function instance. */\r\n compileFunction(instance: Function): bool {\r\n if (instance.is(ElementFlags.COMPILED)) return true;\r\n\r\n assert(!instance.is(ElementFlags.BUILTIN) || instance.simpleName == \"abort\");\r\n\r\n var declaration = instance.prototype.declaration;\r\n if (instance.is(ElementFlags.DECLARED)) {\r\n if (declaration.body) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n declaration.name.range\r\n );\r\n return false;\r\n }\r\n } else if (!declaration.body) {\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 return false;\r\n }\r\n\r\n // might trigger compilation of other functions referring to this one\r\n instance.set(ElementFlags.COMPILED);\r\n\r\n // compile statements\r\n var stmt: ExpressionRef = 0;\r\n if (!instance.is(ElementFlags.DECLARED)) {\r\n var previousFunction = this.currentFunction;\r\n this.currentFunction = instance;\r\n var body = assert(declaration.body, \"implementation expected\");\r\n stmt = this.compileStatement(body);\r\n // make sure the top-level branch or all child branches return\r\n var allBranchesReturn = this.currentFunction.flow.finalize();\r\n if (instance.returnType != Type.void && !allBranchesReturn) {\r\n this.error(\r\n DiagnosticCode.A_function_whose_declared_type_is_not_void_must_return_a_value,\r\n assert(declaration.returnType, \"return type expected\").range\r\n );\r\n }\r\n this.currentFunction = previousFunction;\r\n }\r\n\r\n // create the function type\r\n var numParameters = instance.parameters ? instance.parameters.length : 0;\r\n var numParametersInclThis = instance.instanceMethodOf ? numParameters + 1 : numParameters;\r\n var paramIndex = 0;\r\n\r\n var nativeResultType = instance.returnType.toNativeType();\r\n var nativeParamTypes = new Array(numParametersInclThis);\r\n var signatureNameParts = new Array(numParametersInclThis + 1);\r\n\r\n if (instance.instanceMethodOf) {\r\n nativeParamTypes[paramIndex] = this.options.isWasm64 ? NativeType.I64 : NativeType.I32;\r\n signatureNameParts[paramIndex++] = instance.instanceMethodOf.type.toSignatureString();\r\n }\r\n if (instance.parameters) {\r\n for (var i = 0; i < numParameters; ++i) {\r\n nativeParamTypes[paramIndex] = instance.parameters[i].type.toNativeType();\r\n signatureNameParts[paramIndex++] = instance.parameters[i].type.toSignatureString();\r\n }\r\n }\r\n signatureNameParts[paramIndex] = instance.returnType.toSignatureString();\r\n var typeRef = this.module.getFunctionTypeBySignature(nativeResultType, nativeParamTypes);\r\n if (!typeRef) {\r\n typeRef = this.module.addFunctionType(\r\n signatureNameParts.join(\"\"),\r\n nativeResultType,\r\n nativeParamTypes\r\n );\r\n }\r\n\r\n // create the function\r\n var ref: FunctionRef;\r\n if (instance.is(ElementFlags.DECLARED)) {\r\n ref = this.module.addFunctionImport(\r\n instance.internalName,\r\n instance.prototype.namespace\r\n ? instance.prototype.namespace.simpleName\r\n : \"env\",\r\n instance.simpleName,\r\n typeRef\r\n );\r\n } else {\r\n ref = this.module.addFunction(\r\n instance.internalName,\r\n typeRef,\r\n typesToNativeTypes(instance.additionalLocals),\r\n assert(stmt)\r\n );\r\n }\r\n\r\n // check module export\r\n if (declaration.range.source.isEntry && declaration.isTopLevelExport) {\r\n this.module.addFunctionExport(instance.internalName, declaration.name.text);\r\n }\r\n\r\n instance.finalize(this.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 (var i = 0, k = members.length; i < k; ++i) {\r\n var member = members[i];\r\n switch (member.kind) {\r\n\r\n case NodeKind.CLASSDECLARATION:\r\n if (\r\n (\r\n noTreeShaking ||\r\n hasModifier(ModifierKind.EXPORT, (member).modifiers)\r\n ) && !(member).typeParameters.length\r\n ) {\r\n this.compileClassDeclaration(member, []);\r\n }\r\n break;\r\n\r\n case NodeKind.INTERFACEDECLARATION:\r\n if (\r\n (\r\n noTreeShaking ||\r\n hasModifier(ModifierKind.EXPORT, (member).modifiers)\r\n ) && !(member).typeParameters.length\r\n ) {\r\n this.compileInterfaceDeclaration(member, []);\r\n }\r\n break;\r\n\r\n case NodeKind.ENUMDECLARATION:\r\n if (\r\n noTreeShaking ||\r\n hasModifier(ModifierKind.EXPORT, (member).modifiers)\r\n ) {\r\n this.compileEnumDeclaration(member);\r\n }\r\n break;\r\n\r\n case NodeKind.FUNCTIONDECLARATION:\r\n if (\r\n (\r\n noTreeShaking ||\r\n hasModifier(ModifierKind.EXPORT, (member).modifiers)\r\n ) &&\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 (\r\n noTreeShaking ||\r\n hasModifier(ModifierKind.EXPORT, (member).modifiers)\r\n ) {\r\n this.compileNamespaceDeclaration(member);\r\n }\r\n break;\r\n\r\n case NodeKind.VARIABLE:\r\n if (\r\n noTreeShaking ||\r\n hasModifier(ModifierKind.EXPORT, (member).modifiers)\r\n ) {\r\n var 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 throw new Error(\"namespace member expected\");\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 (var element of ns.members.values()) {\r\n switch (element.kind) {\r\n\r\n case ElementKind.CLASS_PROTOTYPE:\r\n if (\r\n (\r\n noTreeShaking ||\r\n (element).is(ElementFlags.EXPORTED)\r\n ) && !(element).is(ElementFlags.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(ElementFlags.EXPORTED)\r\n ) && !(element).is(ElementFlags.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 // exports\r\n\r\n compileExportStatement(statement: ExportStatement): void {\r\n var members = statement.members;\r\n for (var i = 0, k = members.length; i < k; ++i) {\r\n var member = members[i];\r\n var internalExportName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n member.externalName.text\r\n );\r\n var element = this.program.exports.get(internalExportName);\r\n if (!element) continue; // reported in Program#initialize\r\n\r\n switch (element.kind) {\r\n\r\n case ElementKind.CLASS_PROTOTYPE:\r\n if (!(element).is(ElementFlags.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(ElementFlags.GENERIC) &&\r\n statement.range.source.isEntry\r\n ) {\r\n var functionInstance = this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null,\r\n (element).declaration.name\r\n );\r\n if (functionInstance) {\r\n var functionDeclaration = functionInstance.prototype.declaration;\r\n if (functionDeclaration && functionDeclaration.needsExplicitExport(member)) {\r\n this.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 var globalDeclaration = (element).declaration;\r\n if (globalDeclaration && globalDeclaration.needsExplicitExport(member)) {\r\n if ((element).is(ElementFlags.INLINED)) {\r\n this.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 // 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 = this.program.elements.get(declaration.fileLevelInternalName);\r\n if (!element || element.kind != ElementKind.CLASS_PROTOTYPE) {\r\n throw new Error(\"class expected\");\r\n }\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(ElementFlags.COMPILED)) return true;\r\n instance.set(ElementFlags.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 throw new Error(\"not implemented\");\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 /** Adds a function table entry and returns the assigned index. */\r\n addFunctionTableEntry(func: Function): i32 {\r\n assert(func.is(ElementFlags.COMPILED));\r\n if (func.functionTableIndex >= 0) {\r\n return func.functionTableIndex;\r\n }\r\n var index = this.functionTable.length;\r\n this.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 expr: ExpressionRef;\r\n switch (statement.kind) {\r\n\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 let initializer = this.compileVariableStatement(statement);\r\n expr = initializer ? initializer : this.module.createNop();\r\n break;\r\n }\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 if (this.currentFunction == this.startFunction) {\r\n return this.module.createNop();\r\n }\r\n // fall-through: must be top-level; function bodies are not guaranteed to be evaluated\r\n\r\n default:\r\n throw new Error(\"statement expected\");\r\n }\r\n\r\n this.addDebugLocation(expr, statement.range);\r\n return expr;\r\n }\r\n\r\n compileStatements(statements: Statement[]): ExpressionRef[] {\r\n var k = statements.length;\r\n var stmts = new Array(k);\r\n for (var i = 0; i < k; ++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 this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n\r\n var stmt = this.module.createBlock(null, this.compileStatements(statements), NativeType.None);\r\n var stmtReturns = this.currentFunction.flow.is(FlowFlags.RETURNS);\r\n\r\n // Switch back to the parent flow\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n if (stmtReturns) {\r\n this.currentFunction.flow.set(FlowFlags.RETURNS);\r\n }\r\n return stmt;\r\n }\r\n\r\n compileBreakStatement(statement: BreakStatement): ExpressionRef {\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 this.module.createUnreachable();\r\n }\r\n var breakLabel = this.currentFunction.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 this.module.createUnreachable();\r\n }\r\n this.currentFunction.flow.set(FlowFlags.POSSIBLY_BREAKS);\r\n return this.module.createBreak(breakLabel);\r\n }\r\n\r\n compileContinueStatement(statement: ContinueStatement): ExpressionRef {\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 this.module.createUnreachable();\r\n }\r\n // Check if 'continue' is allowed here\r\n var continueLabel = this.currentFunction.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 this.module.createUnreachable();\r\n }\r\n this.currentFunction.flow.set(FlowFlags.POSSIBLY_CONTINUES);\r\n return this.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 label = this.currentFunction.enterBreakContext();\r\n var previousBreakLabel = this.currentFunction.flow.breakLabel;\r\n var previousContinueLabel = this.currentFunction.flow.continueLabel;\r\n var breakLabel = this.currentFunction.flow.breakLabel = \"break|\" + label;\r\n var continueLabel = this.currentFunction.flow.continueLabel = \"continue|\" + label;\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 this.currentFunction.flow.breakLabel = previousBreakLabel;\r\n this.currentFunction.flow.continueLabel = previousContinueLabel;\r\n\r\n var condition = makeIsTrueish(\r\n this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE),\r\n this.currentType,\r\n this.module\r\n );\r\n\r\n this.currentFunction.leaveBreakContext();\r\n\r\n return this.module.createBlock(breakLabel, [\r\n this.module.createLoop(continueLabel,\r\n this.module.createBlock(null, [\r\n body,\r\n this.module.createBreak(continueLabel, condition)\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 context = this.currentFunction.enterBreakContext();\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n var breakLabel = this.currentFunction.flow.breakLabel = \"break|\" + context;\r\n var continueLabel = this.currentFunction.flow.continueLabel = \"continue|\" + context;\r\n\r\n // Compile in correct order\r\n var initializer = statement.initializer\r\n ? this.compileStatement(statement.initializer)\r\n : this.module.createNop();\r\n var condition = statement.condition\r\n ? this.compileExpression(statement.condition, Type.i32)\r\n : this.module.createI32(1);\r\n var incrementor = statement.incrementor\r\n ? this.compileExpression(statement.incrementor, Type.void)\r\n : this.module.createNop();\r\n var body = this.compileStatement(statement.statement);\r\n var alwaysReturns = !statement.condition && this.currentFunction.flow.is(FlowFlags.RETURNS);\r\n // TODO: check other always-true conditions as well, not just omitted\r\n\r\n // Switch back to the parent flow\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n this.currentFunction.leaveBreakContext();\r\n\r\n var expr = this.module.createBlock(breakLabel, [\r\n initializer,\r\n this.module.createLoop(continueLabel, this.module.createBlock(null, [\r\n this.module.createIf(condition, this.module.createBlock(null, [\r\n body,\r\n incrementor,\r\n this.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, propagate that and append a hint\r\n if (alwaysReturns) {\r\n this.currentFunction.flow.set(FlowFlags.RETURNS);\r\n expr = this.module.createBlock(null, [\r\n expr,\r\n this.module.createUnreachable()\r\n ]);\r\n }\r\n return expr;\r\n }\r\n\r\n compileIfStatement(statement: IfStatement): ExpressionRef {\r\n\r\n // The condition doesn't initiate a branch yet\r\n var condition = makeIsTrueish(\r\n this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE),\r\n this.currentType,\r\n this.module\r\n );\r\n\r\n // Each arm initiates a branch\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n var ifTrue = this.compileStatement(statement.ifTrue);\r\n var ifTrueReturns = this.currentFunction.flow.is(FlowFlags.RETURNS);\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n\r\n var ifFalse: ExpressionRef = 0;\r\n var ifFalseReturns = false;\r\n if (statement.ifFalse) {\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n ifFalse = this.compileStatement(statement.ifFalse);\r\n ifFalseReturns = this.currentFunction.flow.is(FlowFlags.RETURNS);\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n }\r\n if (ifTrueReturns && ifFalseReturns) { // not necessary to append a hint\r\n this.currentFunction.flow.set(FlowFlags.RETURNS);\r\n }\r\n return this.module.createIf(condition, ifTrue, ifFalse);\r\n }\r\n\r\n compileReturnStatement(statement: ReturnStatement): ExpressionRef {\r\n var expression: ExpressionRef = 0;\r\n if (statement.value) {\r\n expression = this.compileExpression(statement.value, this.currentFunction.returnType);\r\n }\r\n\r\n // Remember that this flow returns\r\n this.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\r\n // Everything within a switch uses the same break context\r\n var context = this.currentFunction.enterBreakContext();\r\n\r\n // introduce a local for evaluating the condition (exactly once)\r\n var tempLocal = this.currentFunction.getTempLocal(Type.u32);\r\n var k = statement.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 + k);\r\n breaks[0] = this.module.createSetLocal( // initializer\r\n tempLocal.index,\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 (var i = 0; i < k; ++i) {\r\n var case_ = statement.cases[i];\r\n if (case_.label) {\r\n breaks[breakIndex++] = this.module.createBreak(\"case\" + i.toString(10) + \"|\" + context,\r\n this.module.createBinary(BinaryOp.EqI32,\r\n this.module.createGetLocal(tempLocal.index, NativeType.I32),\r\n this.compileExpression(case_.label, Type.i32)\r\n )\r\n );\r\n } else {\r\n defaultIndex = i;\r\n }\r\n }\r\n\r\n this.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] = this.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 = this.module.createBlock(\"case0|\" + context, breaks, NativeType.None);\r\n var alwaysReturns = true;\r\n for (i = 0; i < k; ++i) {\r\n case_ = statement.cases[i];\r\n var l = case_.statements.length;\r\n var body = new Array(1 + l);\r\n body[0] = currentBlock;\r\n\r\n // Each switch case initiates a new branch\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n var breakLabel = this.currentFunction.flow.breakLabel = \"break|\" + context;\r\n\r\n var fallsThrough = i != k - 1;\r\n var nextLabel = !fallsThrough ? breakLabel : \"case\" + (i + 1).toString(10) + \"|\" + context;\r\n for (var j = 0; j < l; ++j) {\r\n body[j + 1] = this.compileStatement(case_.statements[j]);\r\n }\r\n if (!(fallsThrough || this.currentFunction.flow.is(FlowFlags.RETURNS))) {\r\n alwaysReturns = false; // ignore fall-throughs\r\n }\r\n\r\n // Switch back to the parent flow\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n\r\n currentBlock = this.module.createBlock(nextLabel, body, NativeType.None);\r\n }\r\n this.currentFunction.leaveBreakContext();\r\n\r\n // If the switch has a default and always returns, propagate that\r\n if (defaultIndex >= 0 && alwaysReturns) {\r\n this.currentFunction.flow.set(FlowFlags.RETURNS);\r\n // Binaryen understands that so we don't need a hint\r\n }\r\n return currentBlock;\r\n }\r\n\r\n compileThrowStatement(statement: ThrowStatement): ExpressionRef {\r\n\r\n // Remember that this branch possibly throws\r\n this.currentFunction.flow.set(FlowFlags.POSSIBLY_THROWS);\r\n\r\n // FIXME: without try-catch it is safe to assume RETURNS as well for now\r\n this.currentFunction.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 throw new Error(\"not implemented\");\r\n // can't yet support something like: try { return ... } finally { ... }\r\n // worthwhile to investigate lowering returns to block results (here)?\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 declarations = statement.declarations;\r\n\r\n // top-level variables and constants become globals\r\n if (isKnownGlobal || (\r\n this.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 (var i = 0, k = declarations.length; i < k; ++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 (i = 0, k = declarations.length; i < k; ++i) {\r\n var declaration = declarations[i];\r\n var name = declaration.name.text;\r\n var type: Type | null = null;\r\n var init: ExpressionRef = 0;\r\n if (declaration.type) {\r\n type = this.program.resolveType( // reports\r\n declaration.type,\r\n this.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 (hasModifier(ModifierKind.CONST, declaration.modifiers)) {\r\n if (init) {\r\n init = this.precomputeExpressionRef(init);\r\n if (_BinaryenExpressionGetId(init) == ExpressionId.Const) {\r\n var local = new Local(this.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 case NativeType.I64:\r\n local = local.withConstantIntegerValue(\r\n _BinaryenConstGetValueI64Low(init),\r\n _BinaryenConstGetValueI64High(init)\r\n );\r\n break;\r\n case NativeType.F32:\r\n local = local.withConstantFloatValue(_BinaryenConstGetValueF32(init));\r\n break;\r\n case NativeType.F64:\r\n local = local.withConstantFloatValue(_BinaryenConstGetValueF64(init));\r\n break;\r\n default:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n // Create a virtual local that doesn't actually exist in WebAssembly\r\n var scopedLocals = this.currentFunction.flow.scopedLocals;\r\n if (!scopedLocals) scopedLocals = this.currentFunction.flow.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 (hasModifier(ModifierKind.LET, declaration.modifiers)) { // here: not top-level\r\n this.currentFunction.flow.addScopedLocal(name, type, declaration.name); // reports\r\n } else {\r\n this.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\r\n // The condition does not yet initialize a branch\r\n var condition = makeIsTrueish(\r\n this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE),\r\n this.currentType,\r\n this.module\r\n );\r\n\r\n // Statements initiate a new branch with its own break context\r\n var label = this.currentFunction.enterBreakContext();\r\n this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope();\r\n var breakLabel = this.currentFunction.flow.breakLabel = \"break|\" + label;\r\n var continueLabel = this.currentFunction.flow.continueLabel = \"continue|\" + label;\r\n\r\n var body = this.compileStatement(statement.statement);\r\n var alwaysReturns = false && this.currentFunction.flow.is(FlowFlags.RETURNS);\r\n // TODO: evaluate possible always-true conditions\r\n\r\n // Switch back to the parent flow\r\n this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope();\r\n this.currentFunction.leaveBreakContext();\r\n\r\n var expr = this.module.createBlock(breakLabel, [\r\n this.module.createLoop(continueLabel,\r\n this.module.createIf(condition, this.module.createBlock(null, [\r\n body,\r\n this.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 = this.module.createBlock(null, [\r\n expr,\r\n this.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(ElementFlags.INLINED));\r\n\r\n switch (\r\n !retainType &&\r\n element.type.is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n element.type.size < contextualType.size\r\n ? (this.currentType = contextualType).kind // essentially precomputes a (sign-)extension\r\n : (this.currentType = element.type).kind\r\n ) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n var shift = element.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 var 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 throw new Error(\"concrete type expected\");\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\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 case NodeKind.FUNCTIONARROW:\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 throw new Error(\"expression expected\");\r\n }\r\n\r\n if (conversionKind != ConversionKind.NONE && this.currentType != contextualType) {\r\n expr = this.convertExpression(expr, this.currentType, contextualType, conversionKind, expression);\r\n this.currentType = contextualType;\r\n }\r\n\r\n this.addDebugLocation(expr, expression.range);\r\n return expr;\r\n }\r\n\r\n compileExpressionRetainType(expression: Expression, contextualType: Type, wrapSmallIntegers: bool = true) {\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 nativeType = this.currentType.toNativeType();\r\n var typeRef = this.module.getFunctionTypeBySignature(nativeType, []);\r\n var typeRefAdded = false;\r\n if (!typeRef) {\r\n typeRef = this.module.addFunctionType(this.currentType.toSignatureString(), nativeType, []);\r\n typeRefAdded = true;\r\n }\r\n var funcRef = this.module.addFunction(\"__precompute\", typeRef, [], expr);\r\n this.module.runPasses([ \"precompute\" ], funcRef);\r\n var ret = _BinaryenFunctionGetBody(funcRef);\r\n this.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 if (conversionKind == ConversionKind.NONE) {\r\n assert(false, \"concrete type expected\");\r\n return expr;\r\n }\r\n\r\n // void to any\r\n if (fromType.kind == TypeKind.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 this.module.createUnreachable();\r\n }\r\n\r\n // any to void\r\n if (toType.kind == TypeKind.VOID) {\r\n return this.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 );\r\n }\r\n\r\n if (fromType.is(TypeFlags.FLOAT)) {\r\n\r\n // float to float\r\n if (toType.is(TypeFlags.FLOAT)) {\r\n if (fromType.kind == TypeKind.F32) {\r\n\r\n // f32 to f64\r\n if (toType.kind == TypeKind.F64) {\r\n expr = this.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 = this.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 = this.module.createUnary(UnaryOp.TruncF32ToI64, expr);\r\n } else {\r\n expr = this.module.createUnary(UnaryOp.TruncF32ToI32, expr);\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, this.module);\r\n }\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = this.module.createUnary(UnaryOp.TruncF32ToU64, expr);\r\n } else {\r\n expr = this.module.createUnary(UnaryOp.TruncF32ToU32, expr);\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, this.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 = this.module.createUnary(UnaryOp.TruncF64ToI64, expr);\r\n } else {\r\n expr = this.module.createUnary(UnaryOp.TruncF64ToI32, expr);\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, this.module);\r\n }\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = this.module.createUnary(UnaryOp.TruncF64ToU64, expr);\r\n } else {\r\n expr = this.module.createUnary(UnaryOp.TruncF64ToU32, expr);\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, this.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 = this.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 = this.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 = this.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 = this.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 = this.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 = this.module.createUnary(UnaryOp.WrapI64, expr); // discards upper bits\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, this.module);\r\n }\r\n }\r\n\r\n // i32 to i64\r\n } else if (toType.is(TypeFlags.LONG)) {\r\n expr = this.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, this.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\r\n var left: ExpressionRef;\r\n var leftType: Type;\r\n var right: ExpressionRef;\r\n var rightType: Type;\r\n var commonType: Type | null;\r\n\r\n var condition: 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\r\n case Token.LESSTHAN:\r\n left = this.compileExpressionRetainType(expression.left, contextualType);\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(expression.right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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 this.module.createUnreachable();\r\n }\r\n\r\n switch (commonType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n expr = this.module.createBinary(BinaryOp.LtI32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.LtI64, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtI64\r\n : BinaryOp.LtI32,\r\n left,\r\n right\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 = this.module.createBinary(BinaryOp.LtU32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtU64\r\n : BinaryOp.LtU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.LtU64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.LtF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.LtF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n\r\n case Token.GREATERTHAN:\r\n left = this.compileExpressionRetainType(expression.left, contextualType);\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(expression.right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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 this.module.createUnreachable();\r\n }\r\n\r\n switch (commonType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n expr = this.module.createBinary(BinaryOp.GtI32, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.GtI64, left, right);\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 = this.module.createBinary(BinaryOp.GtU32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtU64\r\n : BinaryOp.GtU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.GtU64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.GtF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.GtF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n\r\n case Token.LESSTHAN_EQUALS:\r\n left = this.compileExpressionRetainType(expression.left, contextualType);\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(expression.right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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 this.module.createUnreachable();\r\n }\r\n\r\n switch (commonType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n expr = this.module.createBinary(BinaryOp.LeI32, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeI64\r\n : BinaryOp.LeI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.LeI64, left, right);\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 = this.module.createBinary(BinaryOp.LeU32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeU64\r\n : BinaryOp.LeU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.LeU64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.LeF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.LeF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n\r\n case Token.GREATERTHAN_EQUALS:\r\n left = this.compileExpressionRetainType(expression.left, contextualType);\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(expression.right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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 this.module.createUnreachable();\r\n }\r\n\r\n switch (commonType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n expr = this.module.createBinary(BinaryOp.GeI32, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeI64\r\n : BinaryOp.GeI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.GeI64, left, right);\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 = this.module.createBinary(BinaryOp.GeU32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeU64\r\n : BinaryOp.GeU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.GeU64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.GeF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.GeF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = Type.bool;\r\n break;\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 left = this.compileExpressionRetainType(expression.left, contextualType);\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(expression.right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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, Token.operatorToString(expression.operator), leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n\r\n switch (commonType.kind) {\r\n\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 = this.module.createBinary(BinaryOp.EqI32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.EqI64\r\n : BinaryOp.EqI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.EqI64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.EqF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.EqF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\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 left = this.compileExpressionRetainType(expression.left, contextualType);\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(expression.right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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, Token.operatorToString(expression.operator), leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return this.module.createUnreachable();\r\n }\r\n\r\n switch (commonType.kind) {\r\n\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 = this.module.createBinary(BinaryOp.NeI32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.NeI64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.NeF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.NeF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n\r\n case Token.EQUALS:\r\n return this.compileAssignment(expression.left, expression.right, contextualType);\r\n\r\n case Token.PLUS_EQUALS:\r\n compound = true;\r\n case Token.PLUS:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n if (compound) {\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(\r\n expression.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 left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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 this.module.createUnreachable();\r\n }\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n\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 possiblyOverflows = true;\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n expr = this.module.createBinary(BinaryOp.AddI32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.AddI64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.AddF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.AddF64, left, right);\r\n break;\r\n\r\n default:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.MINUS_EQUALS:\r\n compound = true;\r\n case Token.MINUS:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n if (compound) {\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(\r\n expression.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 left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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 this.module.createUnreachable();\r\n }\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n\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 possiblyOverflows = true;\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n expr = this.module.createBinary(BinaryOp.SubI32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.SubI64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.SubF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.SubF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.ASTERISK_EQUALS:\r\n compound = true;\r\n case Token.ASTERISK:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n if (compound) {\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(\r\n expression.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 left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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 this.module.createUnreachable();\r\n }\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n\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 possiblyOverflows = true;\r\n // fall-through\r\n case TypeKind.I32:\r\n case TypeKind.U32:\r\n expr = this.module.createBinary(BinaryOp.MulI32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.MulI64\r\n : BinaryOp.MulI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.MulI64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.MulF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.MulF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.SLASH_EQUALS:\r\n compound = true;\r\n case Token.SLASH:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n true // TODO: when can division remain unwrapped? does it overflow?\r\n );\r\n if (compound) {\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(\r\n expression.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 left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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 this.module.createUnreachable();\r\n }\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n possiblyOverflows = true;\r\n case TypeKind.I32:\r\n expr = this.module.createBinary(BinaryOp.DivI32, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivI64\r\n : BinaryOp.DivI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.DivI64, left, right);\r\n break;\r\n\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n possiblyOverflows = true;\r\n case TypeKind.U32:\r\n expr = this.module.createBinary(BinaryOp.DivU32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivU64\r\n : BinaryOp.DivU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.DivU64, left, right);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.DivF32, left, right);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.DivF64, left, right);\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.PERCENT_EQUALS:\r\n compound = true;\r\n case Token.PERCENT:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n true // TODO: when can remainder remain unwrapped? does it overflow?\r\n );\r\n if (compound) {\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(\r\n expression.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 left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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 this.module.createUnreachable();\r\n }\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n expr = this.module.createBinary(BinaryOp.RemI32, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemI64\r\n : BinaryOp.RemI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.RemI64, left, right);\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 = this.module.createBinary(BinaryOp.RemU32, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemU64\r\n : BinaryOp.RemU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.RemU64, left, right);\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 = this.module.createUnreachable();\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n compound = true;\r\n case Token.LESSTHAN_LESSTHAN:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n\r\n switch (this.currentType.kind) {\r\n\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 possiblyOverflows = true;\r\n default:\r\n expr = this.module.createBinary(BinaryOp.ShlI32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.ShlI64, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShlI64\r\n : BinaryOp.ShlI32,\r\n left,\r\n right\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, Token.operatorToString(expression.operator), this.currentType.toString()\r\n );\r\n return this.module.createUnreachable();\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n true // must wrap small integers\r\n );\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n true // ^\r\n );\r\n\r\n switch (this.currentType.kind) {\r\n\r\n default:\r\n // assumes signed shr on signed small integers does not overflow\r\n expr = this.module.createBinary(BinaryOp.ShrI32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n expr = this.module.createBinary(BinaryOp.ShrI64, left, right);\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrI64\r\n : BinaryOp.ShrI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL:\r\n // assumes unsigned shr on unsigned small integers does not overflow\r\n case TypeKind.U32:\r\n expr = this.module.createBinary(BinaryOp.ShrU32, left, right);\r\n break;\r\n\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.ShrU64, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n left,\r\n right\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, Token.operatorToString(expression.operator), this.currentType.toString()\r\n );\r\n return this.module.createUnreachable();\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n true // modifies low bits of small integers if unsigned\r\n );\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n true // ^\r\n );\r\n\r\n switch (this.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n possiblyOverflows = true;\r\n // fall-through\r\n default:\r\n // assumes that unsigned shr on unsigned small integers does not overflow\r\n expr = this.module.createBinary(BinaryOp.ShrU32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.ShrU64, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.AMPERSAND_EQUALS:\r\n compound = true;\r\n case Token.AMPERSAND:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n if (compound) {\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(\r\n expression.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 left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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 this.module.createUnreachable();\r\n }\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n\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 possiblyOverflows = true; // if left or right already did\r\n default:\r\n expr = this.module.createBinary(BinaryOp.AndI32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.AndI64, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AndI64\r\n : BinaryOp.AndI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.BAR_EQUALS:\r\n compound = true;\r\n case Token.BAR:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n if (compound) {\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(\r\n expression.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 left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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 this.module.createUnreachable();\r\n }\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n\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 possiblyOverflows = true; // if left or right already did\r\n default:\r\n expr = this.module.createBinary(BinaryOp.OrI32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.OrI64, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.OrI64\r\n : BinaryOp.OrI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.CARET_EQUALS:\r\n compound = true;\r\n case Token.CARET:\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n if (compound) {\r\n right = this.compileExpression(\r\n expression.right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n right = this.compileExpressionRetainType(\r\n expression.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 left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left);\r\n right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.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 this.module.createUnreachable();\r\n }\r\n }\r\n\r\n switch (this.currentType.kind) {\r\n\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 possiblyOverflows = true; // if left or right already did\r\n default:\r\n expr = this.module.createBinary(BinaryOp.XorI32, left, right);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.XorI64, left, right);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n left,\r\n right\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n // logical (no overloading)\r\n\r\n case Token.AMPERSAND_AMPERSAND: // left && right\r\n left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType\r\n );\r\n right = this.compileExpression(\r\n expression.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(left, 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 left = this.module.createTeeLocal(tempLocal.index, left);\r\n }\r\n\r\n possiblyOverflows = this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER);\r\n condition = makeIsTrueish(left, this.currentType, this.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 condition, // left\r\n right, // ? 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 = this.module.createIf(\r\n condition,\r\n right,\r\n this.module.createGetLocal(\r\n assert(tempLocal, \"tempLocal must be set\").index,\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 left = this.compileExpressionRetainType(\r\n expression.left,\r\n contextualType\r\n );\r\n right = this.compileExpression(\r\n expression.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(left, 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 left = this.module.createTeeLocal(tempLocal.index, left);\r\n }\r\n\r\n possiblyOverflows = this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER); // if right did\r\n condition = makeIsTrueish(left, this.currentType, this.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 condition, // left\r\n expr, // ? cloned left\r\n right // : right\r\n );\r\n }\r\n\r\n // otherwise make use of the temp. local\r\n else {\r\n expr = this.module.createIf(\r\n condition,\r\n this.module.createGetLocal(\r\n assert(tempLocal, \"tempLocal must be set\").index,\r\n this.currentType.toNativeType()\r\n ),\r\n right\r\n );\r\n }\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"not implemented\");\r\n }\r\n if (possiblyOverflows && wrapSmallIntegers) {\r\n assert(this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER), \"small integer type expected\");\r\n expr = makeSmallIntegerWrap(expr, this.currentType, this.module);\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(expression.left, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n\r\n compileAssignment(expression: Expression, valueExpression: Expression, contextualType: Type): ExpressionRef {\r\n var resolved = this.program.resolveExpression(expression, this.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\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 var setterPrototype = (element).setterPrototype;\r\n if (setterPrototype) {\r\n var setterInstance = setterPrototype.resolve(); // reports\r\n if (!setterInstance) return this.module.createUnreachable();\r\n assert(setterInstance.parameters && setterInstance.parameters.length == 1);\r\n elementType = (setterInstance.parameters)[0].type;\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 assert(\r\n resolved.target &&\r\n resolved.target.kind == ElementKind.CLASS &&\r\n element.simpleName == (resolved.target).prototype.fnIndexedGet\r\n );\r\n var resolvedIndexedSet = (element).resolve(null);\r\n if (resolvedIndexedSet) {\r\n elementType = resolvedIndexedSet.returnType;\r\n break;\r\n }\r\n }\r\n // fall-through\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 // now compile the value and do the assignment\r\n this.currentType = elementType;\r\n return this.compileAssignmentWithValue(\r\n expression,\r\n this.compileExpression(valueExpression, elementType),\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 resolved = this.program.resolveExpression(expression, this.currentFunction); // reports\r\n if (!resolved) return this.module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n var tempLocal: Local;\r\n var targetExpr: ExpressionRef;\r\n switch (element.kind) {\r\n\r\n case ElementKind.LOCAL:\r\n this.currentType = tee ? (element).type : Type.void;\r\n if ((element).is(ElementFlags.CONSTANT)) {\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 return tee\r\n ? this.module.createTeeLocal((element).index, valueWithCorrectType)\r\n : this.module.createSetLocal((element).index, valueWithCorrectType);\r\n\r\n case ElementKind.GLOBAL:\r\n if (!this.compileGlobal(element)) { // reports; not yet compiled if a static field\r\n return this.module.createUnreachable();\r\n }\r\n assert((element).type != Type.void, \"concrete type expected\");\r\n this.currentType = tee ? (element).type : Type.void;\r\n if ((element).is(ElementFlags.CONSTANT)) {\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 this.module.createUnreachable();\r\n }\r\n if (!tee) {\r\n return this.module.createSetGlobal((element).internalName, valueWithCorrectType);\r\n }\r\n var globalNativeType = (element).type.toNativeType();\r\n return this.module.createBlock(null, [ // emulated teeGlobal\r\n this.module.createSetGlobal((element).internalName, valueWithCorrectType),\r\n this.module.createGetGlobal((element).internalName, globalNativeType)\r\n ], globalNativeType);\r\n\r\n case ElementKind.FIELD:\r\n if ((element).prototype.isReadonly) {\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 assert(resolved.targetExpression != null, \"target expression expected\");\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n this.options.isWasm64\r\n ? Type.usize64\r\n : Type.usize32,\r\n ConversionKind.NONE\r\n );\r\n assert(this.currentType.classType, \"class type expected\");\r\n this.currentType = tee ? (element).type : Type.void;\r\n var elementNativeType = (element).type.toNativeType();\r\n if (!tee) {\r\n return this.module.createStore(\r\n (element).type.size >> 3,\r\n targetExpr,\r\n valueWithCorrectType,\r\n elementNativeType,\r\n (element).memoryOffset\r\n );\r\n }\r\n tempLocal = this.currentFunction.getAndFreeTempLocal((element).type);\r\n // TODO: simplify if valueWithCorrectType has no side effects\r\n return this.module.createBlock(null, [\r\n this.module.createSetLocal(tempLocal.index, valueWithCorrectType),\r\n this.module.createStore(\r\n (element).type.size >> 3,\r\n targetExpr,\r\n this.module.createGetLocal(tempLocal.index, elementNativeType),\r\n elementNativeType,\r\n (element).memoryOffset\r\n ),\r\n this.module.createGetLocal(tempLocal.index, elementNativeType)\r\n ], elementNativeType);\r\n\r\n case ElementKind.PROPERTY:\r\n var setterPrototype = (element).setterPrototype;\r\n if (setterPrototype) {\r\n var setterInstance = setterPrototype.resolve(); // reports\r\n if (setterInstance) {\r\n assert(setterInstance.parameters && setterInstance.parameters.length == 1);\r\n if (!tee) {\r\n if (setterInstance.is(ElementFlags.INSTANCE)) {\r\n assert(resolved.targetExpression != null);\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n this.options.isWasm64\r\n ? Type.usize64\r\n : Type.usize32,\r\n ConversionKind.NONE\r\n );\r\n assert(this.currentType.classType);\r\n this.currentType = Type.void;\r\n return this.makeCall(setterInstance, [ targetExpr, valueWithCorrectType ]);\r\n } else {\r\n this.currentType = Type.void;\r\n return this.makeCall(setterInstance, [ valueWithCorrectType ]);\r\n }\r\n }\r\n var getterPrototype = (element).getterPrototype;\r\n assert(getterPrototype != null);\r\n var getterInstance = (getterPrototype).resolve(); // reports\r\n if (getterInstance) {\r\n assert(!getterInstance.parameters || !getterInstance.parameters.length);\r\n if (setterInstance.is(ElementFlags.INSTANCE)) {\r\n assert(resolved.targetExpression != null);\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n this.options.isWasm64\r\n ? Type.usize64\r\n : Type.usize32,\r\n ConversionKind.NONE\r\n );\r\n assert(this.currentType.classType);\r\n tempLocal = this.currentFunction.getAndFreeTempLocal(getterInstance.returnType);\r\n return this.module.createBlock(null, [\r\n this.makeCall(setterInstance, [\r\n this.module.createTeeLocal(tempLocal.index, targetExpr), valueWithCorrectType\r\n ]),\r\n this.makeCall(getterInstance, [\r\n this.module.createGetLocal(tempLocal.index, tempLocal.type.toNativeType())\r\n ])\r\n ], (this.currentType = getterInstance.returnType).toNativeType());\r\n } else {\r\n return this.module.createBlock(null, [\r\n this.makeCall(setterInstance, [ valueWithCorrectType ]),\r\n this.makeCall(getterInstance)\r\n ], (this.currentType = getterInstance.returnType).toNativeType());\r\n }\r\n }\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 this.module.createUnreachable();\r\n\r\n case ElementKind.FUNCTION_PROTOTYPE:\r\n if (expression.kind == NodeKind.ELEMENTACCESS) { // @operator(\"[]\")\r\n assert(resolved.target && resolved.target.kind == ElementKind.CLASS);\r\n var resolvedIndexedGet = (element).resolve();\r\n if (!resolvedIndexedGet) return this.module.createUnreachable();\r\n var indexedSetName = (resolved.target).prototype.fnIndexedSet;\r\n var indexedSet: Element | null;\r\n if (\r\n indexedSetName != null &&\r\n (resolved.target).members &&\r\n (indexedSet = (>(resolved.target).members).get(indexedSetName)) &&\r\n indexedSet.kind == ElementKind.FUNCTION_PROTOTYPE\r\n ) { // @operator(\"[]=\")\r\n var resolvedIndexedSet = (indexedSet).resolve();\r\n if (!resolvedIndexedSet) return this.module.createUnreachable();\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n this.options.isWasm64\r\n ? Type.usize64\r\n : Type.usize32,\r\n ConversionKind.NONE\r\n );\r\n assert(this.currentType.classType);\r\n var elementExpr = this.compileExpression(\r\n (expression).elementExpression,\r\n Type.i32\r\n );\r\n if (!tee) {\r\n this.currentType = resolvedIndexedSet.returnType;\r\n return this.makeCall(resolvedIndexedSet, [\r\n targetExpr,\r\n elementExpr,\r\n valueWithCorrectType\r\n ]);\r\n }\r\n this.currentType = resolvedIndexedGet.returnType;\r\n tempLocal = this.currentFunction.getAndFreeTempLocal(this.currentType);\r\n return this.module.createBlock(null, [\r\n this.makeCall(resolvedIndexedSet, [\r\n targetExpr,\r\n elementExpr,\r\n this.module.createTeeLocal(tempLocal.index, valueWithCorrectType)\r\n ]),\r\n // TODO: could be different from an actual __get (needs 2 temp locals)\r\n this.module.createGetLocal(tempLocal.index, tempLocal.type.toNativeType())\r\n ], this.currentType.toNativeType());\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 this.module.createUnreachable();\r\n }\r\n }\r\n // fall-through\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 compileCallExpression(expression: CallExpression, contextualType: Type): ExpressionRef {\r\n var resolved = this.program.resolveExpression(expression.expression, this.currentFunction); // reports\r\n if (!resolved) return this.module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n var functionPrototype: FunctionPrototype;\r\n var functionInstance: Function | null;\r\n switch (element.kind) {\r\n\r\n // direct function call\r\n case ElementKind.FUNCTION_PROTOTYPE:\r\n functionPrototype = element;\r\n if (functionPrototype.is(ElementFlags.BUILTIN)) {\r\n let expr = compileBuiltinCall( // reports\r\n this,\r\n functionPrototype,\r\n functionPrototype.resolveBuiltinTypeArguments(\r\n expression.typeArguments,\r\n this.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 this.module.createUnreachable();\r\n }\r\n return expr;\r\n } else {\r\n functionInstance = functionPrototype.resolveUsingTypeArguments( // reports\r\n expression.typeArguments,\r\n this.currentFunction.contextualTypeArguments,\r\n expression\r\n );\r\n if (!functionInstance) return this.module.createUnreachable();\r\n }\r\n break;\r\n\r\n // indirect function call\r\n // TODO: currently these are bound to distinct functions, not types.\r\n case ElementKind.LOCAL:\r\n case ElementKind.GLOBAL:\r\n case ElementKind.FIELD:\r\n if ((element).type.isFunction) {\r\n functionInstance = (element).type.functionType;\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 this.module.createUnreachable();\r\n }\r\n break;\r\n\r\n default:\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.internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n var numArguments = expression.arguments.length;\r\n var numArgumentsInclThis = functionInstance.instanceMethodOf\r\n ? numArguments + 1\r\n : numArguments;\r\n var argumentIndex = 0;\r\n\r\n var args = new Array(numArgumentsInclThis);\r\n if (functionInstance.instanceMethodOf) {\r\n assert(resolved.targetExpression != null);\r\n args[argumentIndex++] = resolved.targetExpression;\r\n }\r\n for (var i = 0; i < numArguments; ++i) {\r\n args[argumentIndex++] = expression.arguments[i];\r\n }\r\n return this.compileCall(functionInstance, args, expression);\r\n }\r\n\r\n /**\r\n * Compiles a call to a function. If an instance method, `this` is the first element in\r\n * `argumentExpressions` or can be specified explicitly as the last argument.\r\n */\r\n compileCall(\r\n functionInstance: Function,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n\r\n // validate and compile arguments\r\n var parameters = functionInstance.parameters;\r\n\r\n var numParameters = parameters ? parameters.length : 0;\r\n var numParametersInclThis = functionInstance.instanceMethodOf != null\r\n ? numParameters + 1\r\n : numParameters;\r\n var numArgumentsInclThis = argumentExpressions.length;\r\n var numArguments = functionInstance.instanceMethodOf != null\r\n ? numArgumentsInclThis - 1\r\n : numArgumentsInclThis;\r\n if (thisArg) numArgumentsInclThis++;\r\n\r\n if (numArgumentsInclThis > numParametersInclThis) { // too many arguments\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, numParameters.toString(10), numArguments.toString(10)\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n var operands = new Array(numParametersInclThis);\r\n var operandIndex = 0;\r\n var argumentIndex = 0;\r\n if (functionInstance.instanceMethodOf) {\r\n if (thisArg) {\r\n operands[operandIndex++] = thisArg;\r\n } else {\r\n operands[operandIndex++] = this.compileExpression(\r\n argumentExpressions[argumentIndex++],\r\n functionInstance.instanceMethodOf.type\r\n );\r\n }\r\n }\r\n if (parameters) {\r\n for (; operandIndex < numParametersInclThis; ++operandIndex) {\r\n\r\n // argument has been provided\r\n if (numArgumentsInclThis > operandIndex) {\r\n operands[operandIndex] = this.compileExpression(\r\n argumentExpressions[argumentIndex++],\r\n parameters[operandIndex + numParameters - numParametersInclThis].type\r\n );\r\n\r\n // argument has been omitted\r\n } else {\r\n var initializer = parameters[operandIndex + numParameters - numParametersInclThis].initializer;\r\n if (initializer) { // fall back to provided initializer\r\n operands[operandIndex] = this.compileExpression(\r\n initializer,\r\n parameters[operandIndex + numParameters - numParametersInclThis].type\r\n );\r\n // FIXME: here, the initializer is compiled in the caller's scope.\r\n // a solution could be to use a stub for each possible overload, calling the\r\n // full function with optional arguments being part of the stub's body.\r\n\r\n } else { // too few arguments\r\n this.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range,\r\n (operandIndex + numParameters - numParametersInclThis).toString(10),\r\n numArguments.toString(10)\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n }\r\n }\r\n\r\n this.currentType = functionInstance.returnType;\r\n return this.makeCall(functionInstance, operands);\r\n }\r\n\r\n /** Makes a call operation as is. */\r\n makeCall(functionInstance: Function, operands: ExpressionRef[] | null = null): ExpressionRef {\r\n if (!(functionInstance.is(ElementFlags.COMPILED) || this.compileFunction(functionInstance))) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n // imported function\r\n if (functionInstance.is(ElementFlags.DECLARED)) {\r\n return this.module.createCallImport(\r\n functionInstance.internalName,\r\n operands,\r\n functionInstance.returnType.toNativeType()\r\n );\r\n }\r\n\r\n // internal function\r\n return this.module.createCall(\r\n functionInstance.internalName,\r\n operands,\r\n functionInstance.returnType.toNativeType()\r\n );\r\n }\r\n\r\n compileCommaExpression(expression: CommaExpression, contextualType: Type): ExpressionRef {\r\n var expressions = expression.expressions;\r\n var k = expressions.length;\r\n var exprs = new Array(k--);\r\n for (var i = 0; i < k; ++i) {\r\n exprs[i] = this.compileExpression(expressions[i], Type.void); // drop all\r\n }\r\n exprs[i] = this.compileExpression(expressions[i], 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 assert(\r\n resolved.element.kind == ElementKind.FUNCTION_PROTOTYPE &&\r\n resolved.target &&\r\n resolved.target.kind == ElementKind.CLASS\r\n );\r\n var instance = (resolved.element).resolve(\r\n null,\r\n (resolved.target).contextualTypeArguments\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n return this.compileCall(instance, [\r\n expression.expression,\r\n expression.elementExpression\r\n ], expression);\r\n }\r\n\r\n compileFunctionExpression(expression: FunctionExpression, contextualType: Type): ExpressionRef {\r\n var declaration = expression.declaration;\r\n var simpleName = (declaration.name.text.length\r\n ? declaration.name.text\r\n : \"anonymous\") + \"|\" + this.functionTable.length.toString(10);\r\n var prototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n this.currentFunction.internalName + \"~\" + simpleName,\r\n declaration\r\n );\r\n var instance = this.compileFunctionUsingTypeArguments(prototype, [], null, declaration);\r\n if (!instance) return this.module.createUnreachable();\r\n this.currentType = Type.u32.asFunction(instance);\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.addFunctionTableEntry(instance);\r\n if (index < 0) return this.module.createUnreachable();\r\n return 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 // check special keywords first\r\n switch (expression.kind) {\r\n\r\n case NodeKind.NULL:\r\n if (this.options.isWasm64) {\r\n if (!contextualType.classType) {\r\n assert(contextualType.kind == TypeKind.USIZE);\r\n this.currentType = Type.usize64;\r\n }\r\n return this.module.createI64(0);\r\n }\r\n if (!contextualType.classType) {\r\n assert(contextualType.kind == TypeKind.USIZE);\r\n this.currentType = Type.usize32;\r\n }\r\n return this.module.createI32(0);\r\n\r\n case NodeKind.TRUE:\r\n this.currentType = Type.bool;\r\n return this.module.createI32(1);\r\n\r\n case NodeKind.FALSE:\r\n this.currentType = Type.bool;\r\n return this.module.createI32(0);\r\n\r\n case NodeKind.THIS:\r\n if (this.currentFunction.instanceMethodOf) {\r\n this.currentType = this.currentFunction.instanceMethodOf.type;\r\n return this.module.createGetLocal(0, this.currentType.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.isWasm64 ? Type.usize64 : Type.usize32;\r\n return this.module.createUnreachable();\r\n\r\n case NodeKind.SUPER:\r\n if (this.currentFunction.instanceMethodOf && this.currentFunction.instanceMethodOf.base) {\r\n this.currentType = this.currentFunction.instanceMethodOf.base.type;\r\n return this.module.createGetLocal(0, this.currentType.toNativeType());\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.isWasm64 ? Type.usize64 : Type.usize32;\r\n return this.module.createUnreachable();\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 this.module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n switch (element.kind) {\r\n\r\n case ElementKind.LOCAL:\r\n if ((element).is(ElementFlags.INLINED)) {\r\n return this.compileInlineConstant(element, contextualType, retainConstantType);\r\n }\r\n assert((element).index >= 0);\r\n this.currentType = (element).type;\r\n return this.module.createGetLocal((element).index, this.currentType.toNativeType());\r\n\r\n case ElementKind.GLOBAL:\r\n if (element.is(ElementFlags.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 assert((element).type != Type.void);\r\n if ((element).is(ElementFlags.INLINED)) {\r\n return this.compileInlineConstant(element, contextualType, retainConstantType);\r\n }\r\n this.currentType = (element).type;\r\n return this.module.createGetGlobal((element).internalName, this.currentType.toNativeType());\r\n\r\n case ElementKind.ENUMVALUE: // here: if referenced from within the same enum\r\n if (!element.is(ElementFlags.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(ElementFlags.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 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 switch (expression.literalKind) {\r\n\r\n case LiteralKind.ARRAY:\r\n assert(!implicitNegate);\r\n var classType = contextualType.classType;\r\n if (\r\n classType &&\r\n classType == this.program.elements.get(\"Array\") &&\r\n classType.typeArguments && classType.typeArguments.length == 1\r\n ) {\r\n return this.compileStaticArray(\r\n classType.typeArguments[0],\r\n (expression).elementExpressions\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 case LiteralKind.FLOAT: {\r\n var floatValue = (expression).value;\r\n if (implicitNegate) {\r\n floatValue = -floatValue;\r\n }\r\n if (contextualType == Type.f32) {\r\n return this.module.createF32(floatValue);\r\n }\r\n this.currentType = Type.f64;\r\n return this.module.createF64(floatValue);\r\n }\r\n\r\n case LiteralKind.INTEGER:\r\n var 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)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.I16:\r\n if (i64_is_i16(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.I32:\r\n if (i64_is_i32(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.U8:\r\n if (i64_is_u8(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.U16:\r\n if (i64_is_u16(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.U32:\r\n if (i64_is_u32(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.BOOL:\r\n if (i64_is_bool(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n if (!this.options.isWasm64) {\r\n if (i64_is_u32(intValue)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n }\r\n return this.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)) {\r\n return this.module.createI32(i64_low(intValue));\r\n }\r\n break;\r\n }\r\n return this.module.createI64(i64_low(intValue), i64_high(intValue));\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n return this.module.createI64(i64_low(intValue), i64_high(intValue));\r\n\r\n case TypeKind.F32:\r\n if (i64_is_f32(intValue)) {\r\n return this.module.createF32(i64_to_f32(intValue));\r\n }\r\n break;\r\n\r\n case TypeKind.F64:\r\n if (i64_is_f64(intValue)) {\r\n return this.module.createF64(i64_to_f64(intValue));\r\n }\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 break;\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 this.module.createI32(i64_low(intValue));\r\n } else {\r\n this.currentType = Type.i64;\r\n return this.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 this.module.createUnreachable();\r\n }\r\n\r\n compileStaticString(stringValue: string): ExpressionRef {\r\n var stringSegment: MemorySegment | null = this.stringSegments.get(stringValue);\r\n if (!stringSegment) {\r\n var stringLength = stringValue.length;\r\n var 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 (var 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, this.options.usizeType.byteSize);\r\n this.stringSegments.set(stringValue, stringSegment);\r\n }\r\n var stringOffset = stringSegment.offset;\r\n var stringType = this.program.types.get(\"string\");\r\n this.currentType = stringType ? stringType : this.options.usizeType;\r\n if (this.options.isWasm64) {\r\n return this.module.createI64(i64_low(stringOffset), i64_high(stringOffset));\r\n }\r\n assert(i64_is_i32(stringOffset));\r\n return this.module.createI32(i64_low(stringOffset));\r\n }\r\n\r\n compileStaticArray(elementType: Type, expressions: (Expression | null)[]): ExpressionRef {\r\n // compile as static if all element expressions are precomputable, otherwise\r\n // initialize in place.\r\n var isStatic = true;\r\n var size = expressions.length;\r\n\r\n var nativeType = elementType.toNativeType();\r\n var values: usize;\r\n switch (nativeType) {\r\n\r\n case NativeType.I32:\r\n values = changetype(new Int32Array(size));\r\n break;\r\n\r\n case NativeType.I64:\r\n values = changetype(new Array(size));\r\n break;\r\n\r\n case NativeType.F32:\r\n values = changetype(new Float32Array(size));\r\n break;\r\n\r\n case NativeType.F64:\r\n values = changetype(new Float64Array(size));\r\n break;\r\n\r\n default:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n\r\n var exprs = new Array(size);\r\n var expr: BinaryenExpressionRef;\r\n for (var i = 0; i < size; ++i) {\r\n exprs[i] = expressions[i]\r\n ? this.compileExpression(expressions[i], elementType)\r\n : elementType.toNativeZero(this.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\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 } else {\r\n // TODO: emit a warning if declared 'const'\r\n isStatic = false;\r\n }\r\n }\r\n }\r\n\r\n if (isStatic) {\r\n // TODO: convert to Uint8Array and create the segment\r\n } else {\r\n // TODO: initialize in place\r\n }\r\n // TODO: alternatively, static elements could go into data segments while\r\n // dynamic ones are initialized on top? any benefits? (doesn't seem so)\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n compileNewExpression(expression: NewExpression, contextualType: Type): ExpressionRef {\r\n var resolved = this.program.resolveExpression( // reports\r\n expression.expression,\r\n this.currentFunction\r\n );\r\n if (resolved) {\r\n if (resolved.element.kind == ElementKind.CLASS_PROTOTYPE) {\r\n var prototype = resolved.element;\r\n var instance = prototype.resolveUsingTypeArguments( // reports\r\n expression.typeArguments,\r\n null,\r\n expression\r\n );\r\n if (instance) {\r\n var thisExpr = compileBuiltinAllocate(this, instance, expression);\r\n var initializers = new Array();\r\n\r\n // use a temp local for 'this'\r\n var tempLocal = this.currentFunction.getTempLocal(this.options.usizeType);\r\n initializers.push(this.module.createSetLocal(tempLocal.index, thisExpr));\r\n\r\n // apply field initializers\r\n if (instance.members) {\r\n for (var member of instance.members.values()) {\r\n if (member.kind == ElementKind.FIELD) {\r\n var field = member;\r\n var fieldDeclaration = field.prototype.declaration;\r\n if (field.is(ElementFlags.CONSTANT)) {\r\n assert(false); // there are no built-in fields currently\r\n } else if (fieldDeclaration && fieldDeclaration.initializer) {\r\n initializers.push(this.module.createStore(field.type.byteSize,\r\n this.module.createGetLocal(tempLocal.index, this.options.nativeSizeType),\r\n this.compileExpression(fieldDeclaration.initializer, field.type),\r\n field.type.toNativeType(),\r\n field.memoryOffset\r\n ));\r\n }\r\n }\r\n }\r\n }\r\n\r\n // apply constructor\r\n var constructorInstance = instance.constructorInstance;\r\n if (constructorInstance) {\r\n initializers.push(this.compileCall(constructorInstance, expression.arguments, expression,\r\n this.module.createGetLocal(tempLocal.index, this.options.nativeSizeType)\r\n ));\r\n }\r\n\r\n // return 'this'\r\n initializers.push(this.module.createGetLocal(tempLocal.index, this.options.nativeSizeType));\r\n this.currentFunction.freeTempLocal(tempLocal);\r\n thisExpr = this.module.createBlock(null, initializers, this.options.nativeSizeType);\r\n\r\n this.currentType = instance.type;\r\n return thisExpr;\r\n }\r\n } else {\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 }\r\n }\r\n return this.module.createUnreachable();\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 resolved = this.program.resolvePropertyAccess(propertyAccess, this.currentFunction); // reports\r\n if (!resolved) return this.module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n var targetExpr: ExpressionRef;\r\n switch (element.kind) {\r\n\r\n case ElementKind.GLOBAL: // static property\r\n if (element.is(ElementFlags.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 this.module.createUnreachable();\r\n }\r\n assert((element).type != Type.void);\r\n if ((element).is(ElementFlags.INLINED)) {\r\n return this.compileInlineConstant(element, contextualType, retainConstantType);\r\n }\r\n this.currentType = (element).type;\r\n return this.module.createGetGlobal((element).internalName, this.currentType.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(ElementFlags.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.FIELD: // instance field\r\n assert(resolved.target != null);\r\n assert(resolved.targetExpression != null);\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 this.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 var getter = (element).getterPrototype;\r\n assert(getter != null);\r\n var getterInstance = (getter).resolve(null); // reports\r\n if (!getterInstance) return this.module.createUnreachable();\r\n assert(!getterInstance.parameters || !getterInstance.parameters.length);\r\n this.currentType = getterInstance.returnType;\r\n if (getterInstance.is(ElementFlags.INSTANCE)) {\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n this.options.usizeType,\r\n ConversionKind.NONE\r\n );\r\n this.currentType = getterInstance.returnType;\r\n return this.makeCall(getterInstance, [ targetExpr ]);\r\n } else {\r\n return this.makeCall(getterInstance);\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n propertyAccess.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileTernaryExpression(expression: TernaryExpression, contextualType: Type): ExpressionRef {\r\n var condition = makeIsTrueish(\r\n this.compileExpression(expression.condition, Type.u32, ConversionKind.NONE),\r\n this.currentType,\r\n this.module\r\n );\r\n var ifThen = this.compileExpression(expression.ifThen, contextualType);\r\n var ifElse = this.compileExpression(expression.ifElse, contextualType);\r\n return this.module.createIf(condition, ifThen, ifElse);\r\n }\r\n\r\n compileUnaryPostfixExpression(expression: UnaryPostfixExpression, contextualType: Type): ExpressionRef {\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\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\r\n case Token.PLUS_PLUS:\r\n if (this.currentType.isReference) {\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 switch (this.currentType.kind) {\r\n\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 possiblyOverflows = true;\r\n default:\r\n op = BinaryOp.AddI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = this.module.createI32(1);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n op = this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32;\r\n nativeType = this.options.isWasm64\r\n ? NativeType.I64\r\n : NativeType.I32;\r\n nativeOne = this.currentType.toNativeOne(this.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 = this.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 = this.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 = this.module.createF64(1);\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n case Token.MINUS_MINUS:\r\n if (this.currentType.isReference) {\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 switch (this.currentType.kind) {\r\n\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 possiblyOverflows = true;\r\n default:\r\n op = BinaryOp.SubI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = this.module.createI32(1);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: check operator overload\r\n case TypeKind.ISIZE:\r\n op = this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32;\r\n nativeType = this.options.isWasm64\r\n ? NativeType.I64\r\n : NativeType.I32;\r\n nativeOne = this.currentType.toNativeOne(this.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 = this.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 = this.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 = this.module.createF64(1);\r\n break;\r\n\r\n case TypeKind.VOID:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"concrete type expected\");\r\n }\r\n break;\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"unary postfix operator expected\");\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 = this.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 = this.currentFunction.getTempLocal(this.currentType);\r\n setValue = this.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(this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER));\r\n setValue = makeSmallIntegerWrap(setValue, this.currentType, this.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 this.currentFunction.freeTempLocal(tempLocal);\r\n return this.module.createBlock(null, [\r\n this.module.createSetLocal((tempLocal).index, getValue),\r\n setValue,\r\n this.module.createGetLocal((tempLocal).index, 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 possiblyOverflows = false;\r\n var compound = false;\r\n var expr: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n\r\n case Token.PLUS:\r\n if (this.currentType.isReference) {\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 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 possiblyOverflows = this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER); // if operand already did\r\n break;\r\n\r\n case Token.MINUS:\r\n if (this.currentType.isReference) {\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 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 this.addDebugLocation(expr, expression.range); // compileExpression normally does this\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 switch (this.currentType.kind) {\r\n\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 possiblyOverflows = true; // or if operand already did\r\n default:\r\n expr = this.module.createBinary(BinaryOp.SubI32, this.module.createI32(0), expr);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (this.currentType.isReference) {\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 case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n this.currentType.toNativeZero(this.module),\r\n expr\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.SubI64, this.module.createI64(0), expr);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createUnary(UnaryOp.NegF32, expr);\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createUnary(UnaryOp.NegF64, expr);\r\n break;\r\n }\r\n }\r\n break;\r\n\r\n case Token.PLUS_PLUS:\r\n if (this.currentType.isReference) {\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 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\r\n switch (this.currentType.kind) {\r\n\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 possiblyOverflows = true; // or if operand already did\r\n default:\r\n expr = this.module.createBinary(BinaryOp.AddI32, expr, this.module.createI32(1));\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (this.currentType.isReference) {\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 // fall-through\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n expr,\r\n this.currentType.toNativeOne(this.module)\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.AddI64, expr, this.module.createI64(1));\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.AddF32, expr, this.module.createF32(1));\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.AddF64, expr, this.module.createF64(1));\r\n break;\r\n }\r\n break;\r\n\r\n case Token.MINUS_MINUS:\r\n if (this.currentType.isReference) {\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 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\r\n switch (this.currentType.kind) {\r\n\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 possiblyOverflows = true; // or if operand already did\r\n // fall-through\r\n default:\r\n expr = this.module.createBinary(BinaryOp.SubI32, expr, this.module.createI32(1));\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (this.currentType.isReference) {\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 // fall-through\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n expr,\r\n this.currentType.toNativeOne(this.module)\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.SubI64, expr, this.module.createI64(1));\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = this.module.createBinary(BinaryOp.SubF32, expr, this.module.createF32(1));\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = this.module.createBinary(BinaryOp.SubF64, expr, this.module.createF64(1));\r\n break;\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, this.module);\r\n this.currentType = Type.bool;\r\n break;\r\n\r\n case Token.TILDE:\r\n if (this.currentType.isReference) {\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 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\r\n switch (this.currentType.kind) {\r\n\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 possiblyOverflows = true; // or if operand already did\r\n default:\r\n expr = this.module.createBinary(BinaryOp.XorI32, expr, this.module.createI32(-1));\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n if (this.currentType.isReference) {\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 // fall-through\r\n case TypeKind.ISIZE:\r\n expr = this.module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n expr,\r\n this.currentType.toNativeNegOne(this.module)\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = this.module.createBinary(BinaryOp.XorI64, expr, this.module.createI64(-1, -1));\r\n break;\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 throw new Error(\"not implemented\");\r\n\r\n default:\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n throw new Error(\"unary operator expected\");\r\n }\r\n if (possiblyOverflows && wrapSmallIntegers) {\r\n assert(this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER));\r\n expr = makeSmallIntegerWrap(expr, this.currentType, this.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 addDebugLocation(expr: ExpressionRef, range: Range): void {\r\n if (this.options.sourceMap != null) {\r\n var source = range.source;\r\n if (source.debugInfoIndex < 0) {\r\n source.debugInfoIndex = this.module.addDebugInfoFile(source.normalizedPath);\r\n }\r\n range.debugInfoRef = expr;\r\n if (!this.currentFunction.debugLocations) this.currentFunction.debugLocations = [];\r\n this.currentFunction.debugLocations.push(range);\r\n }\r\n }\r\n}\r\n\r\n// helpers\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\r\n case TypeKind.I8:\r\n expr = 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 break;\r\n\r\n case TypeKind.I16:\r\n expr = 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 break;\r\n\r\n case TypeKind.U8:\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xff)\r\n );\r\n break;\r\n\r\n case TypeKind.U16:\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xffff)\r\n );\r\n break;\r\n\r\n case TypeKind.BOOL:\r\n expr = module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0x1)\r\n );\r\n break;\r\n\r\n case TypeKind.VOID:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n return expr;\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\r\n default: // any integer up to 32 bits\r\n expr = module.createUnary(UnaryOp.EqzI32, expr);\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = module.createUnary(UnaryOp.EqzI64, expr);\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: strings\r\n case TypeKind.ISIZE:\r\n expr = module.createUnary(type.size == 64 ? UnaryOp.EqzI64 : UnaryOp.EqzI32, expr);\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = module.createBinary(BinaryOp.EqF32, expr, module.createF32(0));\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = module.createBinary(BinaryOp.EqF64, expr, module.createF64(0));\r\n break;\r\n\r\n case TypeKind.VOID:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n return expr;\r\n}\r\n\r\n/** Creates a comparison whether an expression is 'true' in a broader sense. */\r\nexport function makeIsTrueish(\r\n expr: ExpressionRef,\r\n type: Type,\r\n module: Module\r\n): ExpressionRef {\r\n switch (type.kind) {\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n expr = module.createBinary(BinaryOp.NeI64, expr, module.createI64(0));\r\n break;\r\n\r\n case TypeKind.USIZE:\r\n // TODO: strings\r\n case TypeKind.ISIZE:\r\n if (type.size == 64) {\r\n expr = module.createBinary(BinaryOp.NeI64, expr, module.createI64(0));\r\n }\r\n break;\r\n\r\n case TypeKind.F32:\r\n expr = module.createBinary(BinaryOp.NeF32, expr, module.createF32(0));\r\n break;\r\n\r\n case TypeKind.F64:\r\n expr = module.createBinary(BinaryOp.NeF64, expr, module.createF64(0));\r\n break;\r\n\r\n case TypeKind.VOID:\r\n throw new Error(\"concrete type expected\");\r\n }\r\n return expr;\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","import {\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 normalize(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 var 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 resolve(normalizedPath: string, origin: string): string {\r\n if (normalizedPath.startsWith(\"std/\")) {\r\n return normalizedPath;\r\n }\r\n return normalize(\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","/** 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 default:\r\n return false;\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 default:\r\n return c >= CharCode.ENQUAD && c <= CharCode.ZEROWIDTHSPACE;\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is a 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 an 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","// code below is generated from diagnosticsMessages.json by scripts/build-diagnostics\n/* tslint:disable:max-line-length */\n\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 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 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 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\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 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 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 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\r\n This is a custom parser specifically written for the AssemblyScript subset. It accepts some of the\r\n most common TypeScript-only patterns that it knows an appropriate error message for but, though it\r\n uses TypeScript's codes for diagnostics, doesn't ultimately aim at full compatibility.\r\n\r\n*/\r\n\r\nimport {\r\n Program,\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} from \"./tokenizer\";\r\n\r\nimport {\r\n DiagnosticCode,\r\n DiagnosticEmitter\r\n} from \"./diagnostics\";\r\n\r\nimport {\r\n normalize as normalizePath\r\n} from \"./util/path\";\r\n\r\nimport {\r\n\r\n Node,\r\n NodeKind,\r\n Source,\r\n SourceKind,\r\n TypeNode,\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 Decorator,\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 Modifier,\r\n ModifierKind,\r\n NamespaceDeclaration,\r\n Parameter,\r\n ParameterKind,\r\n ReturnStatement,\r\n SwitchCase,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n TypeDeclaration,\r\n TypeParameter,\r\n VariableStatement,\r\n VariableDeclaration,\r\n VoidStatement,\r\n WhileStatement,\r\n\r\n addModifier,\r\n getModifier,\r\n hasModifier,\r\n setReusableModifiers\r\n\r\n} from \"./ast\";\r\n\r\n/** Parser interface. */\r\nexport class Parser extends DiagnosticEmitter {\r\n\r\n /** Program being created. */\r\n program: Program;\r\n /** 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\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\r\n // check if already parsed\r\n var normalizedPath = normalizePath(path);\r\n for (var i = 0, k = this.program.sources.length; i < k; ++i) {\r\n if (this.program.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 this.program.sources.push(source);\r\n\r\n // tokenize and parse\r\n var tn = new Tokenizer(source, this.program.diagnostics);\r\n source.tokenizer = tn;\r\n while (!tn.skip(Token.ENDOFFILE)) {\r\n var statement = this.parseTopLevelStatement(tn);\r\n if (statement) {\r\n statement.parent = source;\r\n source.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 isNamespaceMember: bool = false\r\n ): Statement | null {\r\n\r\n // check decorators\r\n var decorators: Decorator[] | null = null;\r\n while (tn.skip(Token.AT)) {\r\n var decorator = this.parseDecorator(tn);\r\n if (!decorator) break;\r\n if (!decorators) decorators = [];\r\n decorators.push(decorator);\r\n }\r\n\r\n // check modifiers\r\n var modifiers: Modifier[] | null = null;\r\n if (tn.skip(Token.EXPORT)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.EXPORT, tn.range()), modifiers);\r\n }\r\n if (tn.skip(Token.DECLARE)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.DECLARE, tn.range()), modifiers);\r\n tn.peek(true);\r\n if (tn.nextTokenOnNewLine) {\r\n this.error(\r\n DiagnosticCode.Line_break_not_permitted_here,\r\n tn.range(tn.pos)\r\n ); // recoverable, compatibility\r\n }\r\n }\r\n\r\n // remember where we took off\r\n tn.mark();\r\n\r\n // parse the statement\r\n var statement: Statement | null = null;\r\n var modifier: Modifier | null;\r\n\r\n // handle declarations\r\n switch (tn.next()) {\r\n\r\n case Token.CONST:\r\n modifiers = addModifier(Node.createModifier(ModifierKind.CONST, tn.range()), modifiers);\r\n if (tn.skip(Token.ENUM)) {\r\n statement = this.parseEnum(tn, modifiers, decorators);\r\n break;\r\n }\r\n statement = this.parseVariable(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n case Token.LET:\r\n modifiers = addModifier(Node.createModifier(ModifierKind.LET, tn.range()), modifiers);\r\n // fall-through\r\n\r\n case Token.VAR:\r\n statement = this.parseVariable(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n case Token.ENUM:\r\n statement = this.parseEnum(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n case Token.FUNCTION:\r\n statement = this.parseFunction(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n case Token.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 modifiers = addModifier(\r\n Node.createModifier(ModifierKind.ABSTRACT, tn.range()), modifiers\r\n );\r\n // fall through\r\n\r\n case Token.CLASS:\r\n statement = this.parseClass(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n case Token.NAMESPACE:\r\n statement = this.parseNamespace(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n case Token.IMPORT:\r\n if (modifier = getModifier(ModifierKind.EXPORT, modifiers)) {\r\n statement = this.parseExportImport(tn, modifier.range);\r\n } else {\r\n statement = this.parseImport(tn);\r\n }\r\n if (modifiers) setReusableModifiers(modifiers);\r\n break;\r\n\r\n case Token.TYPE:\r\n statement = this.parseTypeDeclaration(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n\r\n default:\r\n\r\n // handle plain exports\r\n if (hasModifier(ModifierKind.EXPORT, modifiers)) {\r\n tn.reset();\r\n statement = this.parseExport(tn, modifiers); // TODO: why exactly does this have modifiers again? 'declare'?\r\n\r\n // handle non-declaration statements\r\n } else {\r\n if (modifiers) {\r\n if (modifier = getModifier(ModifierKind.DECLARE, modifiers)) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n modifier.range, \"declare\"\r\n ); // recoverable\r\n }\r\n setReusableModifiers(modifiers);\r\n }\r\n tn.reset();\r\n if (!isNamespaceMember) {\r\n statement = this.parseStatement(tn, true);\r\n }\r\n }\r\n break;\r\n }\r\n\r\n // check for decorators that weren't consumed\r\n if (decorators) {\r\n for (var 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 return this.backlog.length ? this.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 ): TypeNode | 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: TypeNode;\r\n\r\n // ( ... )\r\n if (acceptParenthesized && token == Token.OPENPAREN) {\r\n var 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\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 // string literal\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 // Name\r\n } else if (token == Token.IDENTIFIER) {\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var parameters = new Array();\r\n var nullable = false;\r\n\r\n // Name\r\n if (tn.skip(Token.LESSTHAN)) {\r\n do {\r\n var 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 var 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 var bracketRange = tn.range(bracketStart, tn.pos);\r\n\r\n // ...[] | null\r\n 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 // statements\r\n\r\n parseDecorator(\r\n tn: Tokenizer\r\n ): Decorator | 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 var name = tn.readIdentifier();\r\n var 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 var 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 modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null\r\n ): VariableStatement | null {\r\n\r\n // at ('const' | 'let' | 'var'): VariableDeclaration (',' VariableDeclaration)* ';'?\r\n\r\n var startPos = modifiers && modifiers.length ? modifiers[0].range.start : tn.tokenPos;\r\n var members = new Array();\r\n var isDeclare = hasModifier(ModifierKind.DECLARE, modifiers);\r\n do {\r\n var member = this.parseVariableDeclaration(tn, isDeclare, modifiers, 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, modifiers, decorators, 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 isDeclare: bool = false,\r\n parentModifiers: Modifier[] | null,\r\n parentDecorators: Decorator[] | 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\r\n var type: TypeNode | 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 (isDeclare) {\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 (hasModifier(ModifierKind.CONST, parentModifiers)) {\r\n if (!hasModifier(ModifierKind.DECLARE, parentModifiers)) {\r\n this.error(\r\n DiagnosticCode._const_declarations_must_be_initialized,\r\n identifier.range\r\n );\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 parentModifiers,\r\n parentDecorators,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n }\r\n\r\n parseEnum(\r\n tn: Tokenizer,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null\r\n ): EnumDeclaration | null {\r\n\r\n // at 'enum': Identifier '{' (EnumValueDeclaration (',' EnumValueDeclaration )*)? '}' ';'?\r\n\r\n var startPos = modifiers && modifiers.length ? modifiers[0].range.start : tn.tokenPos;\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 var member = this.parseEnumValue(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 var ret = Node.createEnumDeclaration(\r\n identifier,\r\n members,\r\n modifiers,\r\n decorators,\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 ): 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 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 ): TypeParameter[] | 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 var 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 ): TypeParameter | null {\r\n\r\n // before: Identifier ('extends' Type)?\r\n\r\n if (tn.next() == Token.IDENTIFIER) {\r\n var identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n var extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n if (!(extendsType = this.parseType(tn))) return null;\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 ): Parameter[] | null {\r\n\r\n // at '(': (Parameter (',' Parameter)*)? ')'\r\n\r\n var parameters = new Array();\r\n var seenRest: Parameter | 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 var 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\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 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 ): Parameter | 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 var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var type: TypeNode | 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 }\r\n var 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 modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null\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 var startPos = modifiers && modifiers.length ? modifiers[0].range.start : tn.tokenPos;\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 identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n\r\n var typeParameters: TypeParameter[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\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 var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n var isSetter = hasModifier(ModifierKind.SET, modifiers);\r\n if (isSetter) {\r\n\r\n if (parameters.length != 1) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,\r\n identifier.range\r\n ); // recoverable\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 identifier.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var isGetter = hasModifier(ModifierKind.GET, modifiers);\r\n if (isGetter && parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n identifier.range\r\n ); // recoverable\r\n }\r\n\r\n var returnType: TypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn, isSetter);\r\n if (!returnType) return null;\r\n\r\n } else if (!isSetter) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range(tn.pos)\r\n ); // recoverable\r\n }\r\n\r\n var isDeclare = hasModifier(ModifierKind.DECLARE, modifiers);\r\n\r\n var body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (isDeclare) {\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 (!isDeclare) {\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 identifier,\r\n typeParameters,\r\n parameters,\r\n returnType,\r\n body,\r\n modifiers,\r\n decorators,\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 identifier: 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 isArrow = false;\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else { // empty name\r\n identifier = Node.createIdentifierExpression(\"\", tn.range(tn.pos, 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 identifier = Node.createIdentifierExpression(\"\", tn.range(tn.tokenPos, tn.tokenPos));\r\n }\r\n\r\n // TODO: type parameters? doesn't seem worth it.\r\n\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n return this.parseFunctionExpressionCommon(tn, identifier, parameters, isArrow, startPos);\r\n }\r\n\r\n private parseFunctionExpressionCommon(\r\n tn: Tokenizer,\r\n identifier: IdentifierExpression,\r\n parameters: Parameter[],\r\n isArrow: bool,\r\n startPos: i32 = -1\r\n ): FunctionExpression | null {\r\n if (startPos < 0) startPos = identifier.range.start;\r\n\r\n var returnType: TypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn);\r\n if (!returnType) return null;\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 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 identifier,\r\n null,\r\n parameters,\r\n returnType,\r\n body,\r\n null,\r\n null,\r\n tn.range(startPos, tn.pos)\r\n );\r\n return Node.createFunctionExpression(declaration, isArrow);\r\n }\r\n\r\n parseClass(\r\n tn: Tokenizer,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null\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 var startPos = decorators && decorators.length\r\n ? decorators[0].range.start\r\n : modifiers && modifiers.length\r\n ? modifiers[0].range.start\r\n : tn.tokenPos;\r\n\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n\r\n var identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n\r\n var typeParameters: TypeParameter[] | null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\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 extendsType = this.parseType(tn);\r\n if (!extendsType) return null;\r\n }\r\n\r\n var implementsTypes = new Array();\r\n if (tn.skip(Token.IMPLEMENTS)) {\r\n do {\r\n var 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\r\n var members = new Array();\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n var isDeclare = hasModifier(ModifierKind.DECLARE, modifiers);\r\n do {\r\n var member = this.parseClassMember(tn, isDeclare);\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 modifiers,\r\n decorators,\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.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseClassMember(\r\n tn: Tokenizer,\r\n parentIsDeclare: bool\r\n ): DeclarationStatement | null {\r\n\r\n // before:\r\n // ('public' | 'private' | 'protected')?\r\n // ('static' | 'abstract')?\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 var decorator = this.parseDecorator(tn);\r\n if (!decorator) break;\r\n decorators.push(decorator);\r\n }\r\n\r\n var modifiers: Modifier[] | null = null;\r\n\r\n if (tn.skip(Token.PUBLIC)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.PUBLIC, tn.range()), modifiers);\r\n } else if (tn.skip(Token.PRIVATE)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.PRIVATE, tn.range()), modifiers);\r\n } else if (tn.skip(Token.PROTECTED)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.PROTECTED, tn.range()), modifiers);\r\n }\r\n\r\n if (tn.skip(Token.STATIC)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.STATIC, tn.range()), modifiers);\r\n } else if (tn.skip(Token.ABSTRACT)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.ABSTRACT, tn.range()), modifiers);\r\n }\r\n\r\n if (tn.skip(Token.READONLY)) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.READONLY, tn.range()), modifiers);\r\n }\r\n\r\n // check if accessor: ('get' | 'set') ^\\n Identifier\r\n tn.mark();\r\n\r\n var isGetter = false;\r\n var isSetter = false;\r\n\r\n if (isGetter = tn.skip(Token.GET)) {\r\n if (tn.peek(true, true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.GET, tn.range()), modifiers);\r\n } else {\r\n tn.reset();\r\n isGetter = false;\r\n }\r\n\r\n } else if (isSetter = tn.skip(Token.SET)) { // can't be both\r\n if (tn.peek(true, true) == Token.IDENTIFIER && !tn.nextTokenOnNewLine) {\r\n modifiers = addModifier(Node.createModifier(ModifierKind.SET, tn.range()), modifiers);\r\n } else {\r\n tn.reset();\r\n isSetter = false;\r\n }\r\n }\r\n\r\n var isConstructor = tn.skip(Token.CONSTRUCTOR);\r\n if (isConstructor || tn.skip(Token.IDENTIFIER)) {\r\n\r\n var identifier = isConstructor\r\n ? Node.createConstructorExpression(tn.range())\r\n : Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n\r\n var typeParameters: TypeParameter[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n if (isConstructor) {\r\n this.error(\r\n DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n }\r\n\r\n // method: '(' Parameters (':' Type)? '{' Statement* '}' ';'?\r\n if (tn.skip(Token.OPENPAREN)) {\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n if (isGetter && parameters.length) {\r\n this.error(\r\n DiagnosticCode.A_get_accessor_cannot_have_parameters,\r\n identifier.range\r\n );\r\n }\r\n\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 identifier.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 identifier.range\r\n );\r\n }\r\n }\r\n\r\n var returnType: TypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n if (identifier.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, identifier.kind == NodeKind.CONSTRUCTOR || isSetter);\r\n if (!returnType) return null;\r\n } else if (!isSetter && identifier.kind != NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n\r\n var body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (parentIsDeclare) {\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 (!parentIsDeclare) {\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 var retMethod = Node.createMethodDeclaration(\r\n identifier,\r\n typeParameters,\r\n parameters,\r\n returnType,\r\n body,\r\n modifiers,\r\n decorators,\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 identifier.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 identifier.range\r\n );\r\n\r\n // field: (':' Type)? ('=' Expression)? ';'?\r\n } else {\r\n var modifier: Modifier | null;\r\n\r\n if (modifier = getModifier(ModifierKind.ABSTRACT, modifiers)) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n modifier.range, \"abstract\"\r\n ); // recoverable\r\n }\r\n\r\n if (modifier = getModifier(ModifierKind.GET, modifiers)) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n modifier.range, \"get\"\r\n ); // recoverable\r\n }\r\n\r\n if (modifier = getModifier(ModifierKind.SET, modifiers)) {\r\n this.error(\r\n DiagnosticCode._0_modifier_cannot_be_used_here,\r\n modifier.range, \"set\"\r\n ); // recoverable\r\n }\r\n\r\n var type: TypeNode | 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 var 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 var retField = Node.createFieldDeclaration(\r\n identifier,\r\n type,\r\n initializer,\r\n modifiers,\r\n decorators,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return retField;\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 parseNamespace(\r\n tn: Tokenizer,\r\n modifiers: Modifier[] | null,\r\n decorators: Decorator[] | null\r\n ): NamespaceDeclaration | null {\r\n\r\n // at 'namespace': Identifier '{' (Variable | Function)* '}'\r\n\r\n var startPos = modifiers && modifiers.length ? modifiers[0].range.start : tn.tokenPos;\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.OPENBRACE)) {\r\n var members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n var member = this.parseTopLevelStatement(tn, true);\r\n if (!member) return null;\r\n members.push(member);\r\n }\r\n var ret = Node.createNamespaceDeclaration(\r\n identifier,\r\n members,\r\n modifiers,\r\n decorators,\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 parseExport(\r\n tn: Tokenizer,\r\n modifiers: Modifier[] | null\r\n ): ExportStatement | null {\r\n\r\n // at 'export': '{' ExportMember (',' ExportMember)* }' ('from' StringLiteral)? ';'?\r\n\r\n var startPos = modifiers && modifiers.length ? modifiers[0].range.start : tn.tokenPos;\r\n\r\n if (tn.skip(Token.OPENBRACE)) {\r\n var members = new Array();\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n var 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 var 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 var ret = Node.createExportStatement(members, path, modifiers, 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 var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var 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 var 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 var path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n var 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 var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var 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 startRange: Range\r\n ): ExportImportStatement | null {\r\n\r\n // at 'export' 'import': Identifier ('=' Identifier)? ';'?\r\n\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n var asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var ret = Node.createExportImportStatement(identifier, asIdentifier, Range.join(startRange, tn.range()));\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 tn.mark();\r\n var token = tn.next();\r\n switch (token) {\r\n\r\n case Token.BREAK:\r\n return this.parseBreak(tn);\r\n\r\n case Token.CONST:\r\n return this.parseVariable(tn, [\r\n Node.createModifier(ModifierKind.CONST, tn.range())\r\n ], null);\r\n\r\n case Token.CONTINUE:\r\n return this.parseContinue(tn);\r\n\r\n case Token.DO:\r\n return this.parseDoStatement(tn);\r\n\r\n case Token.FOR:\r\n return this.parseForStatement(tn);\r\n\r\n case Token.IF:\r\n return this.parseIfStatement(tn);\r\n\r\n case Token.LET:\r\n return this.parseVariable(tn, [\r\n Node.createModifier(ModifierKind.LET, tn.range())\r\n ], null);\r\n\r\n case Token.VAR:\r\n return this.parseVariable(tn, null, null);\r\n\r\n case Token.OPENBRACE:\r\n return this.parseBlockStatement(tn, topLevel);\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 return this.parseReturn(tn);\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 return this.parseSwitchStatement(tn);\r\n\r\n case Token.THROW:\r\n return this.parseThrowStatement(tn);\r\n\r\n case Token.TRY:\r\n return this.parseTryStatement(tn);\r\n\r\n case Token.TYPE:\r\n return this.parseTypeDeclaration(tn, null);\r\n\r\n case Token.VOID:\r\n return this.parseVoidStatement(tn);\r\n\r\n case Token.WHILE:\r\n return this.parseWhileStatement(tn);\r\n\r\n default:\r\n tn.reset();\r\n return this.parseExpressionStatement(tn);\r\n }\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 var statement = this.parseStatement(tn, topLevel);\r\n if (!statement) return null;\r\n statements.push(statement);\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 var condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n var 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\r\n var initializer: Statement | null = null;\r\n\r\n if (tn.skip(Token.LET) || tn.skip(Token.CONST) || tn.skip(Token.VAR)) {\r\n initializer = this.parseVariable(tn, null, null);\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 var 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 var 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 var 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 var condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n var statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n var 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 var 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 var cases = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n var case_ = this.parseSwitchCase(tn);\r\n if (!case_) return null;\r\n cases.push(case_);\r\n }\r\n var 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 var 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 var 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 var catchVariable: IdentifierExpression | null = null;\r\n var catchStatements: Statement[] | null = null;\r\n var 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 var 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 modifiers: Modifier[] | null = null,\r\n decorators: Decorator[] | null = null\r\n ): TypeDeclaration | null {\r\n\r\n // at 'type': Identifier '=' Type ';'?\r\n\r\n var startPos = decorators && decorators.length ? decorators[0].range.start\r\n : modifiers && modifiers.length ? modifiers[0].range.start\r\n : tn.tokenPos;\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n var name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n var type = this.parseType(tn);\r\n if (!type) return null;\r\n var ret = Node.createTypeDeclaration(name, type, modifiers, decorators, 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.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 var expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n var statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n var 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 var 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.createIdentifierExpression(\"\", tn.range(startPos, startPos)),\r\n [],\r\n true\r\n );\r\n }\r\n tn.mark();\r\n var 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();\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.QUESTION: // optional parameter\r\n case Token.COLON: // type annotation\r\n tn.reset();\r\n return this.parseFunctionExpression(tn);\r\n\r\n // can be both\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 break;\r\n\r\n // parenthesized expression\r\n default:\r\n again = false;\r\n break;\r\n }\r\n } while (again);\r\n tn.reset();\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 var elementExpressions = new Array();\r\n\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 var 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 var 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 tryParseTypeArgumentsBeforeArguments(\r\n tn: Tokenizer\r\n ): TypeNode[] | null {\r\n\r\n // at '<': Type (',' Type)* '>' '('\r\n\r\n tn.mark();\r\n if (!tn.skip(Token.LESSTHAN)) return null;\r\n var typeArguments = new Array();\r\n do {\r\n var type = this.parseType(tn, true, true);\r\n if (!type) {\r\n tn.reset();\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();\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 var 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\r\n var typeArguments = this.tryParseTypeArgumentsBeforeArguments(tn); // skips '(' on success\r\n // there might be better ways to distinguish a LESSTHAN from a CALL with type arguments\r\n if (typeArguments || tn.skip(Token.OPENPAREN)) {\r\n var 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\r\n switch (token) {\r\n\r\n // AssertionExpression\r\n case Token.AS:\r\n var 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 var 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 var 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 var 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 var 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 return expr;\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\r\n case Token.DOT_DOT_DOT:\r\n return Precedence.SPREAD;\r\n\r\n case Token.YIELD:\r\n return Precedence.YIELD;\r\n\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:\r\n return Precedence.UNARY_PREFIX;\r\n\r\n case Token.NEW:\r\n return Precedence.MEMBERACCESS;\r\n\r\n default:\r\n 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\r\n case Token.COMMA:\r\n return Precedence.COMMA;\r\n\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 return Precedence.ASSIGNMENT;\r\n\r\n case Token.QUESTION:\r\n return Precedence.CONDITIONAL;\r\n\r\n case Token.BAR_BAR:\r\n return Precedence.LOGICAL_OR;\r\n\r\n case Token.AMPERSAND_AMPERSAND:\r\n return Precedence.LOGICAL_AND;\r\n\r\n case Token.BAR:\r\n return Precedence.BITWISE_OR;\r\n\r\n case Token.CARET:\r\n return Precedence.BITWISE_XOR;\r\n\r\n case Token.AMPERSAND:\r\n return Precedence.BITWISE_AND;\r\n\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:\r\n return Precedence.EQUALITY;\r\n\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:\r\n return Precedence.RELATIONAL;\r\n\r\n case Token.LESSTHAN_LESSTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:\r\n return Precedence.SHIFT;\r\n\r\n case Token.PLUS:\r\n case Token.MINUS:\r\n return Precedence.ADDITIVE;\r\n\r\n case Token.ASTERISK:\r\n case Token.SLASH:\r\n case Token.PERCENT:\r\n return Precedence.MULTIPLICATIVE;\r\n\r\n case Token.ASTERISK_ASTERISK:\r\n return Precedence.EXPONENTIATED;\r\n\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS:\r\n return Precedence.UNARY_POSTFIX;\r\n\r\n case Token.DOT:\r\n case Token.NEW:\r\n case Token.OPENBRACKET:\r\n return Precedence.MEMBERACCESS;\r\n\r\n default:\r\n 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\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:\r\n return true;\r\n\r\n default:\r\n return false;\r\n }\r\n}\r\n","import {\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) {\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 (var 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\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\r\n case ExpressionId.Call:\r\n\r\n case ExpressionId.CallImport:\r\n\r\n case ExpressionId.CallIndirect:\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\r\n case ExpressionId.SetGlobal:\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\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 break;\r\n\r\n case ExpressionId.Unary:\r\n switch (_BinaryenUnaryGetOp(expr)) {\r\n\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 break;\r\n\r\n case ExpressionId.Binary: // TODO: precedence\r\n switch (_BinaryenBinaryGetOp(expr)) {\r\n\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 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 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 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\r\n case ExpressionId.AtomicRMW:\r\n\r\n case ExpressionId.AtomicWait:\r\n\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","//////////////////////// Low-level C-Like Compiler API /////////////////////////\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 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\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 `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/** Compiles the sources computed by the parser to a module. */\r\nexport function compile(parser: Parser, options: Options | null = null): Module {\r\n var program = parser.finish();\r\n var compiler = new Compiler(program, options);\r\n return compiler.compile();\r\n}\r\n\r\n/** Decompiles a module to its (low level) source. */\r\nexport function 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/** Prefix indicating a library file. */\r\nexport { LIBRARY_PREFIX } from \"./program\";\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","import {\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 Expression\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 UnaryOp,\r\n BinaryOp,\r\n HostOp,\r\n NativeType,\r\n ExpressionRef,\r\n ExpressionId\r\n} from \"./module\";\r\n\r\nimport {\r\n Global,\r\n FunctionPrototype,\r\n Local,\r\n ElementFlags,\r\n Class,\r\n ElementKind\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\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 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 var tempLocal0: Local,\r\n tempLocal1: Local;\r\n\r\n var type: Type,\r\n offset: i32;\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 // 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\r\n case TypeKind.F32:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.f32);\r\n ret = module.createBinary(BinaryOp.NeF32,\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createGetLocal(tempLocal0.index, NativeType.F32)\r\n );\r\n break;\r\n\r\n case TypeKind.F64:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.f64);\r\n ret = module.createBinary(BinaryOp.NeF64,\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createGetLocal(tempLocal0.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\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.F32:\r\n tempLocal0 = 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(tempLocal0.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(tempLocal0.index, NativeType.F32),\r\n module.createGetLocal(tempLocal0.index, NativeType.F32)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.F64:\r\n tempLocal0 = 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(tempLocal0.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(tempLocal0.index, NativeType.F64),\r\n module.createGetLocal(tempLocal0.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 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\r\n switch (compiler.currentType.kind) {\r\n\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.isReference) {\r\n compiler.error(\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 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 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\r\n switch (compiler.currentType.kind) {\r\n\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.isReference) {\r\n compiler.error(\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 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 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\r\n switch (compiler.currentType.kind) {\r\n\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.isReference) {\r\n compiler.error(\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 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 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\r\n switch (compiler.currentType.kind) {\r\n\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 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.isReference) {\r\n compiler.error(\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 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 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\r\n switch (compiler.currentType.kind) {\r\n\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.isReference) {\r\n compiler.error(\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 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 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\r\n switch (compiler.currentType.kind) {\r\n\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 tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createBinary(BinaryOp.SubI32, // ifFalse\r\n module.createI32(0),\r\n module.createGetLocal(tempLocal0.index, NativeType.I32)\r\n ),\r\n module.createBinary(BinaryOp.GtI32,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32),\r\n module.createI32(0)\r\n )\r\n );\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(compiler.options.usizeType);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.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(tempLocal0.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(tempLocal0.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 tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.i64);\r\n ret = module.createSelect(\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createBinary(BinaryOp.SubI64,\r\n module.createI64(0, 0),\r\n module.createGetLocal(tempLocal0.index, NativeType.I64),\r\n ),\r\n module.createBinary(BinaryOp.GtI64,\r\n module.createGetLocal(tempLocal0.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.isReference) {\r\n compiler.error(\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 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 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\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(Type.i32);\r\n 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 tempLocal0 = compiler.currentFunction.getTempLocal(Type.i32);\r\n 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 tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64);\r\n 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 tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64);\r\n 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 tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType);\r\n 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.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType);\r\n 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 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\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n tempLocal0 = compiler.currentFunction.getTempLocal(Type.i32);\r\n 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 tempLocal0 = compiler.currentFunction.getTempLocal(Type.i32);\r\n 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 tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64);\r\n 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 tempLocal0 = compiler.currentFunction.getTempLocal(Type.i64);\r\n 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 tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType);\r\n 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.isReference) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n tempLocal0 = compiler.currentFunction.getTempLocal(compiler.options.usizeType);\r\n 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 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\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\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 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 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\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\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 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 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\r\n switch (compiler.currentType.kind) {\r\n\r\n // TODO: does an integer version make sense?\r\n\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 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\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\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 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 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\r\n switch (typeArguments[0].kind) {\r\n\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].isReference) {\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 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 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\r\n switch (compiler.currentType.kind) {\r\n\r\n // TODO: integer versions (that return f64 or convert)?\r\n\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 default:\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 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\r\n switch (compiler.currentType.kind) {\r\n\r\n case TypeKind.USIZE:\r\n if (compiler.currentType.isReference) {\r\n compiler.error(\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 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\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 return ret;\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 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 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 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) {\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 ret = compiler.options.isWasm64\r\n ? module.createI64(typeArguments[0].byteSize, 0)\r\n : module.createI32(typeArguments[0].byteSize);\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n return ret;\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 arg1 = compiler.compileExpression(operands[1], type = compiler.currentType);\r\n arg2 = compiler.compileExpression(operands[2], Type.bool);\r\n compiler.currentType = type;\r\n\r\n switch (compiler.currentType.kind) {\r\n\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 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 // 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 // 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 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 var 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\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\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 compiler.currentType = Type.void;\r\n } else {\r\n switch (compiler.currentType.kind) {\r\n\r\n default: // any integer up to 32-bits incl. bool\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.i32);\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI32,\r\n module.createTeeLocal(tempLocal0.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal0.index, NativeType.I32)\r\n );\r\n break;\r\n\r\n case TypeKind.I64:\r\n case TypeKind.U64:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.i64);\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n module.createTeeLocal(tempLocal0.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal0.index, NativeType.I64)\r\n );\r\n break;\r\n\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE:\r\n tempLocal0 = 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(tempLocal0.index, arg0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal0.index, compiler.options.nativeSizeType)\r\n );\r\n break;\r\n\r\n case TypeKind.F32:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.f32);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createF32(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal0.index, NativeType.F32)\r\n );\r\n break;\r\n\r\n case TypeKind.F64:\r\n tempLocal0 = compiler.currentFunction.getAndFreeTempLocal(Type.f64);\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n module.createTeeLocal(tempLocal0.index, arg0),\r\n module.createF64(0)\r\n ),\r\n abort,\r\n module.createGetLocal(tempLocal0.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 return ret;\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 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\n/** Compiles a memory allocation for an instance of the specified class. */\r\nexport function compileAllocate(\r\n compiler: Compiler,\r\n cls: Class,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var program = cls.program;\r\n var prototype = program.elements.get(compiler.options.allocateImpl);\r\n if (prototype) {\r\n if (prototype.kind == ElementKind.FUNCTION_PROTOTYPE) {\r\n var instance = (prototype).resolve(); // reports\r\n if (instance) {\r\n if (\r\n !instance.is(ElementFlags.GENERIC) &&\r\n instance.returnType == compiler.options.usizeType &&\r\n instance.parameters &&\r\n instance.parameters.length == 1 &&\r\n instance.parameters[0].type == compiler.options.usizeType\r\n ) {\r\n if (compiler.compileFunction(instance)) { // reports\r\n return compiler.makeCall(instance, [\r\n compiler.options.isWasm64\r\n ? compiler.module.createI64(cls.currentMemoryOffset)\r\n : compiler.module.createI32(cls.currentMemoryOffset)\r\n ]);\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.Implementation_0_must_match_the_signature_1,\r\n reportNode.range, compiler.options.allocateImpl, \"(size: usize): usize\"\r\n );\r\n }\r\n }\r\n } else {\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, prototype.internalName\r\n );\r\n }\r\n } else {\r\n program.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n reportNode.range, compiler.options.allocateImpl\r\n );\r\n }\r\n return compiler.module.createUnreachable();\r\n}\r\n\r\n/** Compiles an abort wired to the conditionally imported 'abort' function. */\r\nexport function compileAbort(\r\n compiler: Compiler,\r\n message: Expression | null,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var module = compiler.module;\r\n var abort: ExpressionRef = module.createUnreachable();\r\n var abortPrototype = compiler.program.elements.get(\"abort\");\r\n var stringType = compiler.program.types.get(\"string\");\r\n if (\r\n abortPrototype &&\r\n abortPrototype.kind == ElementKind.FUNCTION_PROTOTYPE &&\r\n stringType\r\n ) {\r\n var abortInstance = (abortPrototype).resolve(); // reports\r\n if (\r\n abortInstance &&\r\n compiler.compileFunction(abortInstance) // reports\r\n ) {\r\n assert(abortInstance.parameters && abortInstance.parameters.length == 4); // to be sure\r\n abort = module.createBlock(null, [\r\n compiler.makeCall(abortInstance, [\r\n message != null\r\n ? compiler.compileExpression(message, stringType)\r\n : compiler.options.usizeType.toNativeZero(module),\r\n compiler.compileStaticString(reportNode.range.source.normalizedPath),\r\n module.createI32(reportNode.range.line),\r\n module.createI32(reportNode.range.column)\r\n ]),\r\n abort\r\n ]);\r\n }\r\n }\r\n return abort;\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__17__;","// 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\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_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_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","import \"../../../std/portable\";\r\nimport \"./binaryen\";\r\nimport \"./i64\";\r\n"],"sourceRoot":""} \ No newline at end of file diff --git a/src/ast.ts b/src/ast.ts index fe7c92b8..dda09f0a 100644 --- a/src/ast.ts +++ b/src/ast.ts @@ -66,6 +66,7 @@ export enum NodeKind { THROW, TRY, VARIABLE, + VOID, WHILE, // declaration statements @@ -897,6 +898,16 @@ export abstract class Node { return elem; } + static createVoidStatement( + expression: Expression, + range: Range + ): VoidStatement { + var stmt = new VoidStatement(); + stmt.range = range; + stmt.expression = expression; + return stmt; + } + static createWhileStatement( condition: Expression, statement: Statement, @@ -1668,6 +1679,14 @@ export class VariableStatement extends Statement { declarations: VariableDeclaration[]; } +/** Represents a void statement dropping an expression's value. */ +export class VoidStatement extends Statement { + kind = NodeKind.VOID; + + /** Expression being dropped. */ + expression: Expression; +} + /** Represents a `while` statement. */ export class WhileStatement extends Statement { kind = NodeKind.WHILE; diff --git a/src/compiler.ts b/src/compiler.ts index 2f331848..d6aad028 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -79,6 +79,7 @@ import { TryStatement, VariableDeclaration, VariableStatement, + VoidStatement, WhileStatement, Expression, @@ -1195,9 +1196,14 @@ export class Compiler extends DiagnosticEmitter { expr = this.compileTryStatement(statement); break; - case NodeKind.VARIABLE: - var variableInit = this.compileVariableStatement(statement); - expr = variableInit ? variableInit : this.module.createNop(); + case NodeKind.VARIABLE: { + let initializer = this.compileVariableStatement(statement); + expr = initializer ? initializer : this.module.createNop(); + break; + } + + case NodeKind.VOID: + expr = this.compileVoidStatement(statement); break; case NodeKind.WHILE: @@ -1646,6 +1652,10 @@ export class Compiler extends DiagnosticEmitter { : 0; } + compileVoidStatement(statement: VoidStatement): ExpressionRef { + return this.compileExpression(statement.expression, Type.void, ConversionKind.EXPLICIT, false); + } + compileWhileStatement(statement: WhileStatement): ExpressionRef { // The condition does not yet initialize a branch @@ -1826,7 +1836,11 @@ export class Compiler extends DiagnosticEmitter { break; case NodeKind.PARENTHESIZED: - expr = this.compileParenthesizedExpression(expression, contextualType); + expr = this.compileParenthesizedExpression( + expression, + contextualType, + wrapSmallIntegers + ); break; case NodeKind.PROPERTYACCESS: @@ -4507,9 +4521,18 @@ export class Compiler extends DiagnosticEmitter { return this.module.createUnreachable(); } - compileParenthesizedExpression(expression: ParenthesizedExpression, contextualType: Type): ExpressionRef { + compileParenthesizedExpression( + expression: ParenthesizedExpression, + contextualType: Type, + wrapSmallIntegers: bool = true + ): ExpressionRef { // does not change types, just order - return this.compileExpression(expression.expression, contextualType, ConversionKind.NONE); + return this.compileExpression( + expression.expression, + contextualType, + ConversionKind.NONE, + wrapSmallIntegers + ); } /** diff --git a/src/parser.ts b/src/parser.ts index fbd6b687..a0cdb181 100644 --- a/src/parser.ts +++ b/src/parser.ts @@ -75,6 +75,7 @@ import { TypeParameter, VariableStatement, VariableDeclaration, + VoidStatement, WhileStatement, addModifier, @@ -1724,6 +1725,9 @@ export class Parser extends DiagnosticEmitter { case Token.TYPE: return this.parseTypeDeclaration(tn, null); + case Token.VOID: + return this.parseVoidStatement(tn); + case Token.WHILE: return this.parseWhileStatement(tn); @@ -2196,6 +2200,20 @@ export class Parser extends DiagnosticEmitter { return null; } + parseVoidStatement( + tn: Tokenizer + ): VoidStatement | null { + + // at 'void': Expression ';'? + + var startPos = tn.tokenPos; + var expression = this.parseExpression(tn, Precedence.GROUPING); + if (!expression) return null; + var ret = Node.createVoidStatement(expression, tn.range(startPos, tn.pos)); + tn.skip(Token.SEMICOLON); + return ret; + } + parseWhileStatement( tn: Tokenizer ): WhileStatement | null { @@ -2209,7 +2227,7 @@ export class Parser extends DiagnosticEmitter { if (tn.skip(Token.CLOSEPAREN)) { var statement = this.parseStatement(tn); if (!statement) return null; - var ret = Node.createWhileStatement(expression, statement, tn.range(startPos, tn.pos)); + var ret = Node.createWhileStatement(expression, statement, tn.range(startPos, tn.pos)); tn.skip(Token.SEMICOLON); return ret; } else { diff --git a/tests/compiler/std/polyfills.optimized.wat b/tests/compiler/std/polyfills.optimized.wat index 4677fbc6..dbc24103 100644 --- a/tests/compiler/std/polyfills.optimized.wat +++ b/tests/compiler/std/polyfills.optimized.wat @@ -153,21 +153,12 @@ (i32.shr_s (i32.shl (i32.or - (i32.shr_s + (i32.and (i32.shl - (i32.and - (i32.shr_s - (i32.shl - (get_local $0) - (i32.const 24) - ) - (i32.const 16) - ) - (i32.const -256) - ) - (i32.const 16) + (get_local $0) + (i32.const 8) ) - (i32.const 16) + (i32.const -256) ) (i32.and (i32.shr_s diff --git a/tests/compiler/std/polyfills.untouched.wat b/tests/compiler/std/polyfills.untouched.wat index e1a995bb..34e74721 100644 --- a/tests/compiler/std/polyfills.untouched.wat +++ b/tests/compiler/std/polyfills.untouched.wat @@ -75,40 +75,28 @@ (i32.or (i32.or (i32.and - (i32.and - (i32.and - (i32.shl - (get_local $0) - (i32.const 8) - ) - (i32.const 65535) - ) - (i32.const 65280) + (i32.shl + (get_local $0) + (i32.const 8) ) - (i32.const 65535) + (i32.const 65280) ) (i32.and - (i32.and - (i32.shr_u - (get_local $0) - (i32.const 8) - ) - (i32.const 255) + (i32.shr_u + (get_local $0) + (i32.const 8) ) - (i32.const 65535) + (i32.const 255) ) ) (i32.and + (get_local $0) (i32.and - (get_local $0) - (i32.and - (i32.wrap/i64 - (i64.const 4294901760) - ) - (i32.const 65535) + (i32.wrap/i64 + (i64.const 4294901760) ) + (i32.const 65535) ) - (i32.const 65535) ) ) (i32.const 65535) @@ -352,62 +340,38 @@ (i32.shl (i32.or (i32.or - (i32.shr_s + (i32.and (i32.shl - (i32.and - (i32.shr_s - (i32.shl - (i32.shl - (get_local $0) - (i32.const 8) - ) - (i32.const 16) - ) - (i32.const 16) - ) - (i32.shr_s - (i32.shl - (i32.const 65280) - (i32.const 16) - ) - (i32.const 16) - ) - ) - (i32.const 16) - ) - (i32.const 16) - ) - (i32.shr_s - (i32.shl - (i32.and - (i32.shr_s - (get_local $0) - (i32.const 8) - ) - (i32.const 255) - ) - (i32.const 16) - ) - (i32.const 16) - ) - ) - (i32.shr_s - (i32.shl - (i32.and (get_local $0) - (i32.shr_s - (i32.shl - (i32.wrap/i64 - (i64.const 4294901760) - ) - (i32.const 16) - ) + (i32.const 8) + ) + (i32.shr_s + (i32.shl + (i32.const 65280) (i32.const 16) ) + (i32.const 16) + ) + ) + (i32.and + (i32.shr_s + (get_local $0) + (i32.const 8) + ) + (i32.const 255) + ) + ) + (i32.and + (get_local $0) + (i32.shr_s + (i32.shl + (i32.wrap/i64 + (i64.const 4294901760) + ) + (i32.const 16) ) (i32.const 16) ) - (i32.const 16) ) ) (i32.const 16) diff --git a/tests/compiler/void.optimized.wat b/tests/compiler/void.optimized.wat new file mode 100644 index 00000000..95fed2f0 --- /dev/null +++ b/tests/compiler/void.optimized.wat @@ -0,0 +1,15 @@ +(module + (type $i (func (result i32))) + (type $v (func)) + (memory $0 1) + (export "memory" (memory $0)) + (start $start) + (func $void/anInt (; 0 ;) (type $i) (result i32) + (i32.const 2) + ) + (func $start (; 1 ;) (type $v) + (drop + (call $void/anInt) + ) + ) +) diff --git a/tests/compiler/void.ts b/tests/compiler/void.ts new file mode 100644 index 00000000..84eba1d1 --- /dev/null +++ b/tests/compiler/void.ts @@ -0,0 +1,12 @@ +void 1; + +function anInt(): i32 { + return 2; +} + +void anInt(); + +var u8Val1: u8 = 1; +var u8Val2: u8 = 255; + +void (u8Val1 + u8Val2); // can remain unwrapped diff --git a/tests/compiler/void.untouched.wat b/tests/compiler/void.untouched.wat new file mode 100644 index 00000000..74838ed8 --- /dev/null +++ b/tests/compiler/void.untouched.wat @@ -0,0 +1,29 @@ +(module + (type $i (func (result i32))) + (type $v (func)) + (global $void/u8Val1 (mut i32) (i32.const 1)) + (global $void/u8Val2 (mut i32) (i32.const 255)) + (global $HEAP_BASE i32 (i32.const 4)) + (memory $0 1) + (export "memory" (memory $0)) + (start $start) + (func $void/anInt (; 0 ;) (type $i) (result i32) + (return + (i32.const 2) + ) + ) + (func $start (; 1 ;) (type $v) + (drop + (i32.const 1) + ) + (drop + (call $void/anInt) + ) + (drop + (i32.add + (get_global $void/u8Val1) + (get_global $void/u8Val2) + ) + ) + ) +)