From 507482adb290c73dedb5cccccb64bf03e07ec5a5 Mon Sep 17 00:00:00 2001 From: dcodeIO Date: Wed, 14 Mar 2018 00:27:35 +0100 Subject: [PATCH] Pull more (possibly) repeated loads to locals --- dist/assemblyscript.js | 2 +- dist/assemblyscript.js.map | 2 +- lib/lint/package.json | 1 + package-lock.json | 1294 +++++------------- package.json | 8 +- src/compiler.ts | 1889 ++++++++++++++------------ src/types.ts | 19 +- tests/allocators/arena/untouched.wat | 5 +- tests/allocators/buddy/untouched.wat | 2 +- tests/allocators/tlsf/optimized.wat | 38 +- tests/allocators/tlsf/untouched.wat | 148 +- 11 files changed, 1500 insertions(+), 1908 deletions(-) diff --git a/dist/assemblyscript.js b/dist/assemblyscript.js index 2149ed75..ed0eb143 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;--o)free_memory(a[o])}},e.prototype.createCall=function(e,t,r){var n=l(e),i=u(t);try{return _BinaryenCall(this.ref,n,i,t&&t.length||0,r)}finally{free_memory(i),free_memory(n)}},e.prototype.createCallImport=function(e,t,r){var n=l(e),i=u(t);try{return _BinaryenCallImport(this.ref,n,i,t&&t.length||0,r)}finally{free_memory(i),free_memory(n)}},e.prototype.createCallIndirect=function(e,t,r){var n=u(t),i=l(r);try{return _BinaryenCallIndirect(this.ref,e,n,t&&t.length||0,i)}finally{free_memory(i),free_memory(n)}},e.prototype.createUnreachable=function(){return _BinaryenUnreachable(this.ref)},e.prototype.addGlobal=function(e,t,r,n){var i=l(e);try{return _BinaryenAddGlobal(this.ref,i,t,r?1:0,n)}finally{free_memory(i)}},e.prototype.addFunction=function(e,t,r,n){var i=l(e),a=u(r);try{return _BinaryenAddFunction(this.ref,i,t,a,r?r.length:0,n)}finally{free_memory(a),free_memory(i)}},e.prototype.removeFunction=function(e){var t=l(e);try{_BinaryenRemoveFunction(this.ref,t)}finally{free_memory(t)}},e.prototype.addFunctionExport=function(e,t){var r=l(e),n=l(t);try{return _BinaryenAddFunctionExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addTableExport=function(e,t){var r=l(e),n=l(t);try{return _BinaryenAddTableExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addMemoryExport=function(e,t){var r=l(e),n=l(t);try{return _BinaryenAddMemoryExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addGlobalExport=function(e,t){var r=l(e),n=l(t);try{return _BinaryenAddGlobalExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.removeExport=function(e){var t=l(e);try{_BinaryenRemoveExport(this.ref,t)}finally{free_memory(t)}},e.prototype.addFunctionImport=function(e,t,r,n){var i=l(e),a=l(t),o=l(r);try{return _BinaryenAddFunctionImport(this.ref,i,a,o,n)}finally{free_memory(o),free_memory(a),free_memory(i)}},e.prototype.addTableImport=function(e,t,r){var n=l(e),i=l(t),a=l(r);try{return _BinaryenAddTableImport(this.ref,n,i,a)}finally{free_memory(a),free_memory(i),free_memory(n)}},e.prototype.addMemoryImport=function(e,t,r){var n=l(e),i=l(t),a=l(r);try{return _BinaryenAddMemoryImport(this.ref,n,i,a)}finally{free_memory(a),free_memory(i),free_memory(n)}},e.prototype.addGlobalImport=function(e,t,r,n){var i=l(e),a=l(t),o=l(r);try{return _BinaryenAddGlobalImport(this.ref,i,a,o,n)}finally{free_memory(o),free_memory(a),free_memory(i)}},e.prototype.removeImport=function(e){var t=l(e);try{_BinaryenRemoveImport(this.ref,t)}finally{free_memory(t)}},e.prototype.setMemory=function(e,t,r,n,i){void 0===i&&(i=null);for(var o=l(i),s=r.length,c=new Array(s),h=new Array(s),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=e.length,r=allocate_memory(t),n=r,i=0;i>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=function(){return function(){}}(),_=new Map,y=function(e){function r(t){void 0===t&&(t=null);var r=e.call(this,t)||this;return r.diagnosticsOffset=0,r.elements=new Map,r.types=_,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=new Map,i=new Array,u=new Array,l=0,h=this.sources.length;l",l+="<"+A+">")}else if(r){var I=r.get(l);if(I)return I}}return(_=this.types.get(h))||(_=this.types.get(l))?_:(n&&this.error(s.DiagnosticCode.Cannot_find_name_0,o.name.range,l),null)},r.prototype.resolveTypeArguments=function(e,t,r,n){void 0===r&&(r=null),void 0===n&&(n=null);var i=e.length,a=t?t.length:0;if(i!=a)return a?this.error(s.DiagnosticCode.Expected_0_type_arguments_but_got_1,p.Range.join(t[0].range,t[a-1].range),i.toString(10),a.toString(10)):n&&this.error(s.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range.atEnd,i.toString(10),"0"),null;for(var o=new Array(i),c=0;c"),(n=new k(this,G,w,N)).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(g.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(g.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 D(this,A,e,E)).contextualTypeArguments=t,this.instances.set(r,n);var I,v,N,S,C,b,O=0;if(E&&(O=E.currentMemoryOffset,E.members)){n.members||(n.members=new Map);try{for(var k=a(E.members.values()),x=k.next();!x.done;x=k.next()){var L=x.value;n.members.set(L.simpleName,L)}}catch(e){N={error:e}}finally{try{x&&!x.done&&(S=k.return)&&S.call(k)}finally{if(N)throw N.error}}}if(this.constructorPrototype){var U=this.constructorPrototype.resolvePartial(e);U&&(n.constructorInstance=U.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 f.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 R(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 f.FUNCTION_PROTOTYPE:n.members||(n.members=new Map);var z=P.resolvePartial(e);z&&n.members.set(P.simpleName,z);break;case f.PROPERTY:n.members||(n.members=new Map),assert(P.getterPrototype);var H=new B(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(g.GENERIC)){if(assert(null!=e&&0!=e.length),!(n=this.program.resolveTypeArguments(this.declaration.typeParameters,e,t,r)))return null}else assert(null==e||!e.length);return this.resolve(n,t)},t.prototype.toString=function(){return this.simpleName},t}(T);t.ClassPrototype=U;var D=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=f.CLASS,s.contextualTypeArguments=null,s.currentMemoryOffset=0,s.constructorInstance=null,s.prototype=t,s.flags=t.flags,s.typeArguments=n,s.type=t.program.options.usizeType.asClass(s),s.base=i,i&&i.contextualTypeArguments){s.contextualTypeArguments||(s.contextualTypeArguments=new Map);try{for(var c=a(i.contextualTypeArguments),p=c.next();!p.done;p=c.next()){var u=o(p.value,2),l=u[0],h=u[1];s.contextualTypeArguments.set(l,h)}}catch(e){y={error:e}}finally{try{p&&!p.done&&(m=c.return)&&m.call(c)}finally{if(y)throw y.error}}}var d,_,y,m,g=s.prototype.declaration;if(g){var E=g.typeParameters;if(n){if((_=n.length)!=E.length)throw new Error("type argument count mismatch");if(_)for(s.contextualTypeArguments||(s.contextualTypeArguments=new Map),d=0;d<_;++d)s.contextualTypeArguments.set(E[d].name.text,n[d])}else if(E.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=D;var F=function(e){function t(t,r,n,i){var a=e.call(this,t,r,n,i)||this;return a.kind=f.INTERFACE_PROTOTYPE,a}return i(t,e),t}(U);t.InterfacePrototype=F;var w=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=f.INTERFACE,a}return i(t,e),t}(D);t.Interface=w,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 P=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=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,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.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(){var e;return l?(e=l,l=null):e=new u,e.pos=this.pos,e.token=this.token,e.tokenPos=this.tokenPos,e},t.prototype.discard=function(e){l=e},t.prototype.reset=function(e){this.pos=e.pos,this.token=e.token,this.tokenPos=e.tokenPos,this.nextToken=-1,l=e},t.prototype.range=function(e,t){return void 0===e&&(e=-1),void 0===t&&(t=-1),e<0?(e=this.tokenPos,t=this.pos):t<0&&(t=e),new 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;var u=function(){return function(){}}();t.State=u;var l=null},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.PARAMETER=3]="PARAMETER",e[e.SIGNATURE=4]="SIGNATURE",e[e.IDENTIFIER=5]="IDENTIFIER",e[e.ASSERTION=6]="ASSERTION",e[e.BINARY=7]="BINARY",e[e.CALL=8]="CALL",e[e.COMMA=9]="COMMA",e[e.ELEMENTACCESS=10]="ELEMENTACCESS",e[e.FALSE=11]="FALSE",e[e.FUNCTION=12]="FUNCTION",e[e.FUNCTIONARROW=13]="FUNCTIONARROW",e[e.LITERAL=14]="LITERAL",e[e.NEW=15]="NEW",e[e.NULL=16]="NULL",e[e.PARENTHESIZED=17]="PARENTHESIZED",e[e.PROPERTYACCESS=18]="PROPERTYACCESS",e[e.TERNARY=19]="TERNARY",e[e.SUPER=20]="SUPER",e[e.THIS=21]="THIS",e[e.TRUE=22]="TRUE",e[e.CONSTRUCTOR=23]="CONSTRUCTOR",e[e.UNARYPOSTFIX=24]="UNARYPOSTFIX",e[e.UNARYPREFIX=25]="UNARYPREFIX",e[e.BLOCK=26]="BLOCK",e[e.BREAK=27]="BREAK",e[e.CONTINUE=28]="CONTINUE",e[e.DO=29]="DO",e[e.EMPTY=30]="EMPTY",e[e.EXPORT=31]="EXPORT",e[e.EXPORTIMPORT=32]="EXPORTIMPORT",e[e.EXPRESSION=33]="EXPRESSION",e[e.FOR=34]="FOR",e[e.IF=35]="IF",e[e.IMPORT=36]="IMPORT",e[e.RETURN=37]="RETURN",e[e.SWITCH=38]="SWITCH",e[e.THROW=39]="THROW",e[e.TRY=40]="TRY",e[e.VARIABLE=41]="VARIABLE",e[e.VOID=42]="VOID",e[e.WHILE=43]="WHILE",e[e.CLASSDECLARATION=44]="CLASSDECLARATION",e[e.ENUMDECLARATION=45]="ENUMDECLARATION",e[e.ENUMVALUEDECLARATION=46]="ENUMVALUEDECLARATION",e[e.FIELDDECLARATION=47]="FIELDDECLARATION",e[e.FUNCTIONDECLARATION=48]="FUNCTIONDECLARATION",e[e.IMPORTDECLARATION=49]="IMPORTDECLARATION",e[e.INTERFACEDECLARATION=50]="INTERFACEDECLARATION",e[e.METHODDECLARATION=51]="METHODDECLARATION",e[e.NAMESPACEDECLARATION=52]="NAMESPACEDECLARATION",e[e.TYPEDECLARATION=53]="TYPEDECLARATION",e[e.VARIABLEDECLARATION=54]="VARIABLEDECLARATION",e[e.DECORATOR=55]="DECORATOR",e[e.MODIFIER=56]="MODIFIER",e[e.EXPORTMEMBER=57]="EXPORTMEMBER",e[e.SWITCHCASE=58]="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 l;return i.range=n,i.name=e,e.parent=i,i.typeArguments=t,t&&De(t,i),i.isNullable=r,i},e.createOmittedType=function(t){return e.createType(e.createIdentifierExpression("",t),null,!1,t)},e.createTypeParameter=function(e,t,r){var n=new h;return n.range=r,n.name=e,e.parent=n,n.extendsType=t,t&&(t.parent=n),n},e.createParameter=function(e,t,r,n,i){var a=new d;return a.range=i,a.name=e,e.parent=a,a.type=t,t&&(t.parent=a),a.initializer=r,r&&(r.parent=a),a.parameterKind=n,a},e.createSignature=function(e,t,r,n,i){var a=new _;return a.range=i,a.parameterTypes=e,De(e,a),a.returnType=t,t.parent=a,a.explicitThisType=r,r&&(r.parent=a),a.isNullable=n,a},e.createDecorator=function(e,t,r){var n=new m;if(n.range=r,n.name=e,e.parent=n,n.arguments=t,t&&De(t,n),e.kind==s.IDENTIFIER)switch(e.text){case"global":n.decoratorKind=1;break;case"operator":n.decoratorKind=2;break;case"unmanaged":n.decoratorKind=3;break;case"offset":n.decoratorKind=4;break;default:n.decoratorKind=0}else n.decoratorKind=0;return n},e.createModifier=function(e,t){var r=new f;return r.range=t,r.modifierKind=e,r},e.createIdentifierExpression=function(e,t){var r=new E;return r.range=t,r.text=e,r},e.createEmptyIdentifierExpression=function(e){var t=new E;return t.range=e,t.text="",t},e.createArrayLiteralExpression=function(e,t){var r=new A;return r.range=t,r.elementExpressions=e,function(e,t){for(var r=0,n=e.length;r0},enumerable:!0,configurable:!0}),t}(q);t.ClassDeclaration=J;var ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.CONTINUE,t}return i(t,e),t}(Y);t.ContinueStatement=ee;var te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.DO,t}return i(t,e),t}(Y);t.DoStatement=te;var re=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EMPTY,t}return i(t,e),t}(Y);t.EmptyStatement=re;var ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMDECLARATION,t}return i(t,e),t}(q);t.EnumDeclaration=ne;var ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMVALUEDECLARATION,t.modifiers=null,t}return i(t,e),t}(q);t.EnumValueDeclaration=ie;var ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORTIMPORT,t}return i(t,e),t}(p);t.ExportImportStatement=ae;var oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORTMEMBER,t}return i(t,e),t}(p);t.ExportMember=oe;var se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORT,t}return i(t,e),t}(Y);t.ExportStatement=se;var ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPRESSION,t}return i(t,e),t}(Y);t.ExpressionStatement=ce;var pe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FIELDDECLARATION,t}return i(t,e),t}(j);t.FieldDeclaration=pe;var ue=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FOR,t}return i(t,e),t}(Y);t.ForStatement=ue;var le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FUNCTIONDECLARATION,t}return i(t,e),Object.defineProperty(t.prototype,"isGeneric",{get:function(){var e=this.typeParameters;return null!=e&&e.length>0},enumerable:!0,configurable:!0}),t}(q);t.FunctionDeclaration=le;var he=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IF,t}return i(t,e),t}(Y);t.IfStatement=he;var de=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}(q);t.ImportDeclaration=de;var _e=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORT,t}return i(t,e),t}(Y);t.ImportStatement=_e;var ye=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.INTERFACEDECLARATION,t}return i(t,e),t}(J);t.InterfaceDeclaration=ye;var me=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.METHODDECLARATION,t}return i(t,e),t}(le);t.MethodDeclaration=me;var fe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.NAMESPACEDECLARATION,t}return i(t,e),t}(q);t.NamespaceDeclaration=fe;var ge=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.RETURN,t}return i(t,e),t}(Y);t.ReturnStatement=ge;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 Te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCH,t}return i(t,e),t}(Y);t.SwitchStatement=Te;var Ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.THROW,t}return i(t,e),t}(Y);t.ThrowStatement=Ae;var Ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TRY,t}return i(t,e),t}(Y);t.TryStatement=Ie;var ve=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TYPEDECLARATION,t}return i(t,e),t}(q);t.TypeDeclaration=ve;var Ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLEDECLARATION,t}return i(t,e),t}(j);t.VariableDeclaration=Ne;var Se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLE,t}return i(t,e),t}(Y);t.VariableStatement=Se;var Ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VOID,t}return i(t,e),t}(Y);t.VoidStatement=Ce;var be=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.WHILE,t}return i(t,e),t}(Y);t.WhileStatement=be;var Oe=null;function ke(){var e;return null!=Oe?(e=Oe,Oe=null):e=[],e.length=0,e}function xe(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 e||!this.functionType?"u32":this.functionType.toString(!0);case 8:return"u64";case 9:return e||!this.classType?"usize":this.classType.toString();case 10:return"bool";case 11:return"f32";case 12:return"f64";case 13:return"void";default:return assert(!1),""}},e.prototype.toNativeType=function(){switch(this.kind){default:return n.NativeType.I32;case 3:case 8:return n.NativeType.I64;case 4:case 9:return 64==this.size?n.NativeType.I64:n.NativeType.I32;case 11:return n.NativeType.F32;case 12:return n.NativeType.F64;case 13:return n.NativeType.None}},e.prototype.toNativeZero=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(0);case 4:case 9:if(64!=this.size)return e.createI32(0);case 3:case 8:return e.createI64(0);case 11:return e.createF32(0);case 12:return e.createF64(0)}},e.prototype.toNativeOne=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(1);case 4:case 9:if(64!=this.size)return e.createI32(1);case 3:case 8:return e.createI64(1);case 11:return e.createF32(1);case 12:return e.createF64(1)}},e.prototype.toNativeNegOne=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(-1);case 4:case 9:if(64!=this.size)return e.createI32(-1);case 3:case 8:return e.createI64(-1,-1);case 11:return e.createF32(-1);case 12:return e.createF64(-1)}},e.prototype.toSignatureString=function(){switch(this.kind){default:return"i";case 3:case 8:return"I";case 4:case 9:return 64==this.size?"I":"i";case 11:return"f";case 12:return"F";case 13:return"v"}},e.i8=new e(0,165,8),e.i16=new e(1,165,16),e.i32=new e(2,133,32),e.i64=new e(3,197,64),e.isize32=new e(4,149,32),e.isize64=new e(4,213,64),e.u8=new e(5,166,8),e.u16=new e(6,166,16),e.u32=new e(7,134,32),e.u64=new e(8,198,64),e.usize32=new e(9,150,32),e.usize64=new e(9,214,64),e.bool=new e(10,166,1),e.f32=new e(11,137,32),e.f64=new e(12,201,64),e.void=new e(13,0,0),e}();t.Type=i,t.typesToNativeTypes=function(e){for(var t=e.length,r=new Array(t),n=0;ne?this.parameterNames[e]:s(e)},e.prototype.isAssignableTo=function(e){var t=this.thisType,r=e.thisType;if(t){if(!r||!t.isAssignableTo(r))return!1}else if(r)return!1;if(this.hasRest!=e.hasRest)return!1;var n=this.parameterTypes,i=e.parameterTypes,a=n.length;if(a!=i.length)return!1;for(var o=0;o=p&&l!=u?t.push("?: "):t.push(": "),t.push(i[l].toString());return t.push(") => "),t.push(this.returnType.toString()),t.join("")},e}();t.Signature=a;var o=null;function s(e){o||(o=[]);for(var t=o.length;t=e.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=[],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,r||(r=new _),n.options=r,n.memoryOffset=i64_new(max(r.memoryBase,r.usizeType.byteSize)),n.module=p.Module.create(),n}return i(t,e),t.compile=function(e,r){return void 0===r&&(r=null),new t(e,r).compile()},t.prototype.compile=function(){var e=this.options,t=this.module,r=this.program;r.initialize(e);var n=assert(r.elements.get("start"));assert(n.kind==u.ElementKind.FUNCTION_PROTOTYPE);var i=new u.Function(n,n.internalName,new d.Signature([],d.Type.void));i.set(u.ElementFlags.START),this.startFunction=i,this.currentFunction=i;for(var a=r.sources,o=0,s=a.length;o"),!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)),this.startFunctionBody.push(this.module.createSetGlobal(o,r));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=assert(this.program.elements.get(e.fileLevelInternalName));return assert(t.kind==u.ElementKind.ENUM),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=!1,h=s,_=h.declaration;if(h.set(u.ElementFlags.COMPILED),h.is(u.ElementFlags.INLINED))e.declaration.isTopLevelExport&&this.module.addGlobal(h.internalName,p.NativeType.I32,!1,this.module.createI32(h.constantValue));else{var y=void 0;if(_.value?(y=this.compileExpression(_.value,d.Type.i32),_BinaryenExpressionGetId(y)!=p.ExpressionId.Const&&(y=this.precomputeExpressionRef(y),_BinaryenExpressionGetId(y)!=p.ExpressionId.Const&&(e.is(u.ElementFlags.CONSTANT)&&this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,_.range),l=!0))):null==n?y=this.module.createI32(0):n.is(u.ElementFlags.INLINED)?y=this.module.createI32(n.constantValue+1):(y=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,_.range),l=!0),l)this.module.addGlobal(h.internalName,p.NativeType.I32,!0,this.module.createI32(0)),this.startFunctionBody.push(this.module.createSetGlobal(h.internalName,y));else{if(this.module.addGlobal(h.internalName,p.NativeType.I32,!1,y),_BinaryenExpressionGetType(y)!=p.NativeType.I32)throw new Error("i32 expected");h.constantValue=_BinaryenConstGetValueI32(y),h.set(u.ElementFlags.INLINED)}}n=h,e.declaration.range.source.isEntry&&e.declaration.isTopLevelExport&&(s.is(u.ElementFlags.INLINED)?this.module.addGlobalExport(s.internalName,s.internalName):_&&this.warning(c.DiagnosticCode.Cannot_export_a_mutable_global,_.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=assert(this.program.elements.get(e.fileLevelInternalName));return assert(n.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.compileFunctionUsingTypeArguments(n,t,r,n.declaration.name)},t.prototype.compileFunctionUsingTypeArguments=function(e,t,r,n){var i=e.resolveUsingTypeArguments(t,r,n);return i&&this.compileFunction(i)?i:null},t.prototype.ensureFunctionType=function(e){var t,r=e.parameterTypes.length,n=e.thisType,i=0;n?((t=new Array(1+r))[0]=n.toNativeType(),i=1):t=new Array(r);for(var a=0;a=0)return e.functionTableIndex;var t=this.functionTable.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:(t=this.compileVariableStatement(e))||(t=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 c=this.module.createBlock("case0|"+t,i,p.NativeType.None),u=!0;for(s=0;s=0&&u&&this.currentFunction.flow.set(1),c},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,n=r.length;if(t||this.currentFunction==this.startFunction&&e.parent&&e.parent.kind==h.NodeKind.SOURCE){for(var i=0;i");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=g(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,null);r||(r=this.module.addFunctionType(this.currentType.toSignatureString(),t,null));var n=this.module.addFunction("__precompute",r,null,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,f=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))||(f=this.currentFunction.getAndFreeTempLocal(this.currentType),n=this.module.createTeeLocal(f.index,n)),y=this.currentType.is(36),u=g(n,this.currentType,this.module),h=h?this.module.createIf(u,a,h):this.module.createIf(u,a,this.module.createGetLocal(assert(f,"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))||(f=this.currentFunction.getAndFreeTempLocal(this.currentType),n=this.module.createTeeLocal(f.index,n)),y=this.currentType.is(36),u=g(n,this.currentType,this.module),h=h?this.module.createIf(u,h,a):this.module.createIf(u,this.module.createGetLocal(assert(f,"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();var p=s.signature;assert(1==p.parameterTypes.length),i=p.parameterTypes[0];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&&n.target&&n.target.kind==u.ElementKind.CLASS){if(a.simpleName!=n.target.prototype.fnIndexedGet)return this.error(c.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,n.target.toString()),this.module.createUnreachable();var l=a.resolve(null);if(l){i=l.signature.returnType;break}}default:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}var _=this.compileExpression(t,i);return this.compileAssignmentWithValue(e,_,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=n.element;switch(i.kind){case u.ElementKind.LOCAL:return this.currentType=r?i.type:d.Type.void,i.is(u.ElementFlags.CONSTANT)?(this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),this.module.createUnreachable()):r?this.module.createTeeLocal(i.index,t):this.module.createSetLocal(i.index,t);case u.ElementKind.GLOBAL:if(!this.compileGlobal(i))return this.module.createUnreachable();if(assert(i.type!=d.Type.void,"concrete type expected"),this.currentType=r?i.type:d.Type.void,i.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,i.internalName),this.module.createUnreachable();if(r){var a=i.type.toNativeType();return this.module.createBlock(null,[this.module.createSetGlobal(i.internalName,t),this.module.createGetGlobal(i.internalName,a)],a)}return this.module.createSetGlobal(i.internalName,t);case u.ElementKind.FIELD:if(i.prototype.isReadonly)return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),this.module.createUnreachable();assert(n.isInstanceTarget);var o=this.compileExpression(n.targetExpression,n.target.type);this.currentType=r?i.type:d.Type.void;a=i.type.toNativeType();if(r){var s=this.currentFunction.getAndFreeTempLocal(i.type);return this.module.createBlock(null,[this.module.createSetLocal(s.index,t),this.module.createStore(i.type.size>>3,o,this.module.createGetLocal(s.index,a),a,i.memoryOffset),this.module.createGetLocal(s.index,a)],a)}return this.module.createStore(i.type.size>>3,o,t,a,i.memoryOffset);case u.ElementKind.PROPERTY:var p=i.setterPrototype;if(p){if(!(E=p.resolve()))return this.module.createUnreachable();if(!r){if(E.is(u.ElementFlags.INSTANCE)){assert(n.isInstanceTarget);var l=this.compileExpression(n.targetExpression,n.target.type);return this.makeCallDirect(E,[l,t])}return this.makeCallDirect(E,[t])}var _=i.getterPrototype;if(assert(null!=_),!(m=_.resolve()))return this.module.createUnreachable();var y=m.signature.returnType;if(E.is(u.ElementFlags.INSTANCE)){assert(n.isInstanceTarget);l=this.compileExpression(n.targetExpression,n.target.type),s=this.currentFunction.getAndFreeTempLocal(y);return this.module.createBlock(null,[this.makeCallDirect(E,[this.module.createTeeLocal(s.index,l),t]),this.makeCallDirect(m,[this.module.createGetLocal(s.index,y.toNativeType())])],y.toNativeType())}return this.module.createBlock(null,[this.makeCallDirect(E,[t]),this.makeCallDirect(m)],y.toNativeType())}return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,i.internalName),this.module.createUnreachable();case u.ElementKind.FUNCTION_PROTOTYPE:if(e.kind==h.NodeKind.ELEMENTACCESS){var m;if(assert(n.isInstanceTarget),!(m=i.resolve()))return this.module.createUnreachable();var f=n.target.prototype.fnIndexedSet,g=void 0;if(null!=f&&n.target.members&&(g=n.target.members.get(f))&&g.kind==u.ElementKind.FUNCTION_PROTOTYPE){var E;if(!(E=g.resolve()))return this.module.createUnreachable();var T=n.target.type,A=(o=this.compileExpression(n.targetExpression,T),this.compileExpression(e.elementExpression,d.Type.i32));if(r){var I=this.currentFunction.getTempLocal(T),v=this.currentFunction.getAndFreeTempLocal(this.currentType);y=m.signature.returnType;return this.currentFunction.freeTempLocal(I),this.module.createBlock(null,[this.makeCallDirect(E,[this.module.createTeeLocal(I.index,o),this.module.createTeeLocal(v.index,A),t]),this.makeCallDirect(m,[this.module.createGetLocal(I.index,I.type.toNativeType()),this.module.createGetLocal(v.index,v.type.toNativeType())])],y.toNativeType())}return this.makeCallDirect(E,[o,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:var o=a;if(o.is(u.ElementFlags.BUILTIN)){var l=s.compileCall(this,o,o.resolveBuiltinTypeArguments(e.typeArguments,this.currentFunction.contextualTypeArguments),e.arguments,t,e);return l||(this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable())}var h=o.resolveUsingTypeArguments(e.typeArguments,this.currentFunction.contextualTypeArguments,e);if(!h)return this.module.createUnreachable();var d=0;if(h.is(u.ElementFlags.INSTANCE)){if(assert(r.isInstanceTarget),!(d=this.compileExpression(r.targetExpression,r.target.type)))return this.module.createUnreachable()}else assert(!r.isInstanceTarget);return this.compileCallDirect(h,e.arguments,e,d);case u.ElementKind.LOCAL:if(n=a.type.functionType){i=this.module.createGetLocal(a.index,p.NativeType.I32);break}return this.error(c.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,e.range,a.type.toString()),this.module.createUnreachable();case u.ElementKind.GLOBAL:if(n=a.type.functionType){i=this.module.createGetGlobal(a.internalName,a.type.toNativeType());break}return this.error(c.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,e.range,a.type.toString()),this.module.createUnreachable();case u.ElementKind.FIELD:var _=a.type;if(n=_.functionType){var y=this.compileExpression(assert(r.targetExpression),_);i=this.module.createLoad(4,!1,y,p.NativeType.I32,a.memoryOffset);break}return this.error(c.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,e.range,a.type.toString()),this.module.createUnreachable();case u.ElementKind.FUNCTION_TARGET:n=a.signature,i=this.compileExpression(e.expression,a.type);break;case u.ElementKind.PROPERTY:default:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}return this.compileCallIndirect(n,i,e.arguments,e)},t.prototype.checkCallSignature=function(e,t,r,n){if(r!=(null!=e.thisType))return this.error(c.DiagnosticCode.Operation_not_supported,n.range),!1;var i=e.hasRest;if(i)return this.error(c.DiagnosticCode.Operation_not_supported,n.range),!1;var a=e.requiredParameters,o=e.parameterTypes.length;return to&&!i)||(this.error(c.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,o.toString(),t.toString()),!1)},t.prototype.compileCallDirect=function(e,t,r,n){void 0===n&&(n=0);var i=t.length,a=e.signature;if(!this.checkCallSignature(a,i,0!=n,r))return this.module.createUnreachable();var o=n?i+1:i,s=new Array(o),c=0;n&&(s[0]=n,c=1);for(var p=a.parameterTypes,u=0;u=i),!this.compileFunction(e))return this.module.createUnreachable();if(r=0),this.currentType=l.type,this.module.createGetLocal(l.index,this.currentType.toNativeType()));case u.ElementKind.GLOBAL:return l.is(u.ElementFlags.BUILTIN)?s.compileGetConstant(this,l,e):this.compileGlobal(l)?(assert(l.type!=d.Type.void),l.is(u.ElementFlags.INLINED)?this.compileInlineConstant(l,t,r):(this.currentType=l.type,this.module.createGetGlobal(l.internalName,this.currentType.toNativeType()))):this.module.createUnreachable();case u.ElementKind.ENUMVALUE:return l.is(u.ElementFlags.COMPILED)?(this.currentType=d.Type.i32,l.is(u.ElementFlags.INLINED)?this.module.createI32(l.constantValue):this.module.createGetGlobal(l.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;if(o){var l=o.resolve(null);if(!l)return this.module.createUnreachable();var h=l.signature;return this.checkCallSignature(h,0,l.is(u.ElementFlags.INSTANCE),e)?l.instanceMethodOf?(i=this.compileExpression(n.targetExpression,l.instanceMethodOf.type),this.currentType=h.returnType,this.compileCallDirect(l,[],e,i)):(this.currentType=h.returnType,this.compileCallDirect(l,[],e)):this.module.createUnreachable()}return this.error(c.DiagnosticCode.Property_0_does_not_exist_on_type_1,e.range,a.simpleName,a.parent.toString()),this.module.createUnreachable()}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileTernaryExpression=function(e,t){var r=g(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=f(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(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;default:throw new Error("small integer type expected")}return e}function f(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 g(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=f,t.makeIsTrueish=g},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;_=!0}n=p.Node.createType(h,d,_,e.range(a,e.pos))}for(;e.skip(o.Token.OPENBRACKET);){var m=e.tokenPos;if(!e.skip(o.Token.CLOSEBRACKET))return r||this.error(s.DiagnosticCode._0_expected,e.range(),"]"),null;var f=e.range(m,e.pos);_=!1;if(e.skip(o.Token.BAR)){if(!e.skip(o.Token.NULL))return r||this.error(s.DiagnosticCode._0_expected,e.range(),"null"),null;_=!0}if(n=p.Node.createType(p.Node.createIdentifierExpression("Array",f),[n],_,e.range(a,e.pos)),_)break}return n},t.prototype.tryParseSignature=function(e){var t,r=e.mark(),n=e.tokenPos,i=null,a=null,c=!1;if(e.skip(o.Token.CLOSEPAREN))c=!0,e.discard(r),i=[];else{c=!1;do{var u=p.ParameterKind.DEFAULT;if(e.skip(o.Token.DOT_DOT_DOT)&&(c=!0,e.discard(r),u=p.ParameterKind.REST),e.skip(o.Token.THIS)){if(!e.skip(o.Token.COLON))return e.reset(r),this.tryParseSignatureIsSignature=!1,null;c=!0,e.discard(r);var l=this.parseType(e,!1);if(!l)return null;if(l.kind!=p.NodeKind.TYPE)return this.error(s.DiagnosticCode.Operation_not_supported,l.range),this.tryParseSignatureIsSignature=!0,null;a=l}else{if(!e.skip(o.Token.IDENTIFIER))return c?this.error(s.DiagnosticCode.Identifier_expected,e.range()):e.reset(r),this.tryParseSignatureIsSignature=c,null;var h=p.Node.createIdentifierExpression(e.readIdentifier(),e.range(e.tokenPos,e.pos));if(e.skip(o.Token.QUESTION)&&(c=!0,e.discard(r),u==p.ParameterKind.REST?this.error(s.DiagnosticCode.A_rest_parameter_cannot_be_optional,e.range()):u=p.ParameterKind.OPTIONAL),e.skip(o.Token.COLON)){c=!0,e.discard(r);var d=this.parseType(e);if(!d)return this.tryParseSignatureIsSignature=c,null;var _=new p.ParameterNode;_.parameterKind=u,_.name=h,_.type=d,i?i.push(_):i=[_]}else c&&this.error(s.DiagnosticCode.Type_expected,e.range())}}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(),")"),this.tryParseSignatureIsSignature=c,null}return e.skip(o.Token.EQUALS_GREATERTHAN)?(c=!0,e.discard(r),(t=this.parseType(e))?(this.tryParseSignatureIsSignature=!0,p.Node.createSignature(i||[],t,a,!1,e.range(n,e.pos))):(this.tryParseSignatureIsSignature=c,null)):(c?this.error(s.DiagnosticCode._0_expected,e.range(),"=>"):e.reset(r),this.tryParseSignatureIsSignature=c,null)},t.prototype.parseDecorator=function(e){var t=e.tokenPos;if(e.skip(o.Token.IDENTIFIER)){for(var r=e.readIdentifier(),n=p.Node.createIdentifierExpression(r,e.range(t,e.pos));e.skip(o.Token.DOT);){if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;r=e.readIdentifier(),n=p.Node.createPropertyAccessExpression(n,p.Node.createIdentifierExpression(r,e.range()),e.range(t,e.pos))}var i=void 0;if(!e.skip(o.Token.OPENPAREN))return p.Node.createDecorator(n,null,e.range(t,e.pos));if(i=this.parseArguments(e))return p.Node.createDecorator(n,i,e.range(t,e.pos))}else this.error(s.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseVariable=function(e,t,r){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;if(e.skip(o.Token.EXTENDS)){var n=this.parseType(e);if(!n)return null;if(n.kind!=p.NodeKind.TYPE)return this.error(s.DiagnosticCode.Operation_not_supported,n.range),null;r=n}return p.Node.createTypeParameter(t,r,o.Range.join(t.range,e.range()))}return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseParameters=function(e){var t=new Array,r=null,n=!1,i=!1;if(e.peek()!=o.Token.CLOSEPAREN)do{var a=this.parseParameter(e);if(!a)return null;switch(r&&!i&&(this.error(s.DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,r.name.range),i=!0),a.parameterKind){default:n&&this.error(s.DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,a.name.range);break;case p.ParameterKind.OPTIONAL:n=!0;break;case p.ParameterKind.REST:r=a}t.push(a)}while(e.skip(o.Token.COMMA));return e.skip(o.Token.CLOSEPAREN)?t:(this.error(s.DiagnosticCode._0_expected,e.range(),")"),null)},t.prototype.parseParameter=function(e,t){void 0===t&&(t=!1);var r=!1,n=!1,i=null;if(e.skip(o.Token.DOT_DOT_DOT)&&(r=!0,i=e.range()),e.skip(o.Token.IDENTIFIER)){r||(i=e.range());var a=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),c=null;if((n=e.skip(o.Token.QUESTION))&&r&&this.error(s.DiagnosticCode.A_rest_parameter_cannot_be_optional,a.range),e.skip(o.Token.COLON)&&!(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=-1,c=null;if(e.skip(o.Token.LESSTHAN)&&(a=e.tokenPos,!(c=this.parseTypeParameters(e))))return null;if(!e.skip(o.Token.OPENPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"("),null;a<0&&(a=e.tokenPos);var u=this.parseParameters(e);if(!u)return null;var l=p.hasModifier(p.ModifierKind.SET,t);l&&(1!=u.length&&this.error(s.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,i.range),u.length&&u[0].initializer&&this.error(s.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,i.range)),p.hasModifier(p.ModifierKind.GET,t)&&u.length&&this.error(s.DiagnosticCode.A_get_accessor_cannot_have_parameters,i.range);var h=null;if(e.skip(o.Token.COLON)&&!(h=this.parseType(e,l)))return null;h||(h=p.Node.createOmittedType(e.range(e.pos)),l||this.error(s.DiagnosticCode.Type_expected,h.range));var d=p.Node.createSignature(u,h,null,!1,e.range(a,e.pos)),_=p.hasModifier(p.ModifierKind.DECLARE,t),y=null;if(e.skip(o.Token.OPENBRACE)){if(_&&this.error(s.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,e.range()),!(y=this.parseBlockStatement(e,!1)))return null}else _||this.error(s.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,e.range(e.pos));var m=p.Node.createFunctionDeclaration(i,c,d,y,t,r,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),m},t.prototype.parseFunctionExpression=function(e){var t,r=e.tokenPos,n=!1;if(e.token==o.Token.FUNCTION){if(t=e.skip(o.Token.IDENTIFIER)?p.Node.createIdentifierExpression(e.readIdentifier(),e.range()):p.Node.createEmptyIdentifierExpression(e.range(e.pos)),!e.skip(o.Token.OPENPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"("),null}else n=!0,assert(e.token==o.Token.OPENPAREN),t=p.Node.createEmptyIdentifierExpression(e.range(e.tokenPos));var i=e.pos,a=this.parseParameters(e);return a?this.parseFunctionExpressionCommon(e,t,a,n,r,i):null},t.prototype.parseFunctionExpressionCommon=function(e,t,r,n,i,a){void 0===i&&(i=-1),void 0===a&&(a=-1),i<0&&(i=t.range.start),a<0&&(a=i);var c=null;if(e.skip(o.Token.COLON)){if(!(c=this.parseType(e)))return null}else c=p.Node.createOmittedType(e.range(e.pos)),this.error(s.DiagnosticCode.Type_expected,c.range);if(n&&!e.skip(o.Token.EQUALS_GREATERTHAN))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"=>"),null;var u,l=p.Node.createSignature(r,c,null,!1,e.range(a,e.pos));if(n)u=this.parseStatement(e,!1);else{if(!e.skip(o.Token.OPENBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;u=this.parseBlockStatement(e,!1)}if(!u)return null;var h=p.Node.createFunctionDeclaration(t,null,l,u,null,null,e.range(i,e.pos));return p.Node.createFunctionExpression(h,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=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),a=void 0;if(e.skip(o.Token.LESSTHAN)){if(!(a=this.parseTypeParameters(e)))return null}else a=[];var c=null;if(e.skip(o.Token.EXTENDS)){var u=this.parseType(e);if(!u)return null;if(u.kind!=p.NodeKind.TYPE)return this.error(s.DiagnosticCode.Operation_not_supported,u.range),null;c=u}var l=new Array;if(e.skip(o.Token.IMPLEMENTS))do{var h=this.parseType(e);if(!h)return null;l.push(h)}while(e.skip(o.Token.COMMA));if(e.skip(o.Token.OPENBRACE)){var d=new Array;if(!e.skip(o.Token.CLOSEBRACE)){var _=p.hasModifier(p.ModifierKind.DECLARE,t);do{var y=this.parseClassMember(e,_);if(!y)return null;d.push(y)}while(!e.skip(o.Token.CLOSEBRACE))}return p.Node.createClassDeclaration(i,a,c,l,d,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));var c=e.mark(),u=!1,l=!1;(u=e.skip(o.Token.GET))?e.peek(!0,!0)!=o.Token.IDENTIFIER||e.nextTokenOnNewLine?(e.reset(c),u=!1):a=p.addModifier(p.Node.createModifier(p.ModifierKind.GET,e.range()),a):(l=e.skip(o.Token.SET))&&(e.peek(!0,!0)!=o.Token.IDENTIFIER||e.nextTokenOnNewLine?(e.reset(c),l=!1):a=p.addModifier(p.Node.createModifier(p.ModifierKind.SET,e.range()),a));var h=e.skip(o.Token.CONSTRUCTOR);if(h||e.skip(o.Token.IDENTIFIER)){var d=h?p.Node.createConstructorExpression(e.range()):p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),_=null;if(e.skip(o.Token.LESSTHAN)&&(h&&this.error(s.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,e.range()),!(_=this.parseTypeParameters(e))))return null;if(e.skip(o.Token.OPENPAREN)){var y=e.tokenPos,m=this.parseParameters(e);if(!m)return null;u&&m.length&&this.error(s.DiagnosticCode.A_get_accessor_cannot_have_parameters,d.range),l&&(1!=m.length&&this.error(s.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,d.range),m.length&&m[0].initializer&&this.error(s.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,d.range));var f=null;if(e.skip(o.Token.COLON)){if(d.kind==p.NodeKind.CONSTRUCTOR?this.error(s.DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration,e.range()):l&&this.error(s.DiagnosticCode.A_set_accessor_cannot_have_a_return_type_annotation,e.range()),!(f=this.parseType(e,d.kind==p.NodeKind.CONSTRUCTOR||l)))return null}else f=p.Node.createOmittedType(e.range(e.pos)),l||d.kind==p.NodeKind.CONSTRUCTOR||this.error(s.DiagnosticCode.Type_expected,f.range);var g=p.Node.createSignature(m,f,null,!1,e.range(y,e.pos)),E=null;if(e.skip(o.Token.OPENBRACE)){if(t&&this.error(s.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,e.range()),!(E=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 T=p.Node.createMethodDeclaration(d,_,g,E,a,n,e.range(r,e.pos));return e.skip(o.Token.SEMICOLON),T}if(h)this.error(s.DiagnosticCode.Constructor_implementation_is_missing,d.range);else{if(!u&&!l){var A=void 0;(A=p.getModifier(p.ModifierKind.ABSTRACT,a))&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,A.range,"abstract"),(A=p.getModifier(p.ModifierKind.GET,a))&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,A.range,"get"),(A=p.getModifier(p.ModifierKind.SET,a))&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,A.range,"set");var I=null;if(e.skip(o.Token.COLON)){if(!(I=this.parseType(e)))return null}else this.error(s.DiagnosticCode.Type_expected,e.range());var v=null;if(e.skip(o.Token.EQUALS)&&!(v=this.parseExpression(e)))return null;var N=p.Node.createFieldDeclaration(d,I,v,a,n,e.range(r,e.pos));return e.skip(o.Token.SEMICOLON),N}this.error(s.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,d.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=p.Node.createStringLiteralExpression(e.readString(),e.range()),u=void 0;return n?(assert(!r),u=p.Node.createImportStatementWithWildcard(n,c,e.range(t,e.pos))):u=p.Node.createImportStatement(r,c,e.range(t,e.pos)),this.seenlog.has(u.normalizedPath)||(this.backlog.push(u.normalizedPath),this.seenlog.add(u.normalizedPath)),e.skip(o.Token.SEMICOLON),u}this.error(s.DiagnosticCode.String_literal_expected,e.range())}else this.error(s.DiagnosticCode._0_expected,e.range(),"from");return null},t.prototype.parseImportDeclaration=function(e){if(e.skip(o.Token.IDENTIFIER)){var t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(o.Token.AS)){if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;r=p.Node.createIdentifierExpression(e.readIdentifier(),e.range())}return p.Node.createImportDeclaration(t,r,r?o.Range.join(t.range,r.range):t.range)}return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseExportImport=function(e,t){if(e.skip(o.Token.IDENTIFIER)){var r=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(o.Token.EQUALS)){if(e.skip(o.Token.IDENTIFIER)){var n=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),i=p.Node.createExportImportStatement(n,r,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){void 0===t&&(t=!1);var r=e.mark();switch(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);case o.Token.VOID:return this.parseVoidStatement(e);case o.Token.WHILE:return this.parseWhileStatement(e);default:return e.reset(r),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()),a=null;if(e.skip(o.Token.LESSTHAN)&&!(a=this.parseTypeParameters(e)))return null;if(e.skip(o.Token.EQUALS)){var c=this.parseType(e);if(!c)return null;var u=p.Node.createTypeDeclaration(i,a,c,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.parseVoidStatement=function(e){var t=e.tokenPos,r=this.parseExpression(e,20);if(!r)return null;var n=p.Node.createVoidStatement(r,e.range(t,e.pos));return e.skip(o.Token.SEMICOLON),n},t.prototype.parseWhileStatement=function(e){var t=e.tokenPos;if(e.skip(o.Token.OPENPAREN)){var r=this.parseExpression(e);if(!r)return null;if(e.skip(o.Token.CLOSEPAREN)){var n=this.parseStatement(e);if(!n)return null;var i=p.Node.createWhileStatement(r,n,e.range(t,e.pos));return e.skip(o.Token.SEMICOLON),i}this.error(s.DiagnosticCode._0_expected,e.range(),")")}else this.error(s.DiagnosticCode._0_expected,e.range(),"(");return null},t.prototype.parseExpressionStart=function(e){var t=e.next(!0),r=e.tokenPos,n=null;if(t==o.Token.NULL)return p.Node.createNullExpression(e.range());if(t==o.Token.TRUE)return p.Node.createTrueExpression(e.range());if(t==o.Token.FALSE)return p.Node.createFalseExpression(e.range());var i=function(e){switch(e){case o.Token.DOT_DOT_DOT:return 1;case o.Token.YIELD:return 2;case o.Token.EXCLAMATION:case o.Token.TILDE:case o.Token.PLUS:case o.Token.MINUS:case o.Token.PLUS_PLUS:case o.Token.MINUS_MINUS:case o.Token.TYPEOF:case o.Token.VOID:case o.Token.DELETE:return 16;case o.Token.NEW:return 19;default:return-1}}(t);if(-1!=i){var a=void 0;return t==o.Token.NEW?(a=this.parseExpression(e,18))?a.kind==p.NodeKind.CALL?p.Node.createNewExpression(a.expression,a.typeArguments,a.arguments,e.range(r,e.pos)):(this.error(s.DiagnosticCode.Operation_not_supported,e.range()),null):null:(a=this.parseExpression(e,i))?(t!=o.Token.PLUS_PLUS&&t!=o.Token.MINUS_MINUS||a.kind!=p.NodeKind.IDENTIFIER&&a.kind!=p.NodeKind.ELEMENTACCESS&&a.kind!=p.NodeKind.PROPERTYACCESS&&this.error(s.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,a.range),p.Node.createUnaryPrefixExpression(t,a,e.range(r,e.pos))):null}switch(t){case o.Token.OPENPAREN:if(e.skip(o.Token.CLOSEPAREN))return this.parseFunctionExpressionCommon(e,p.Node.createEmptyIdentifierExpression(e.range(r)),[],!0);var c=e.mark(),u=!0;do{switch(e.next(!0)){case o.Token.DOT_DOT_DOT:return e.reset(c),this.parseFunctionExpression(e);case o.Token.IDENTIFIER:switch(e.readIdentifier(),e.next()){case o.Token.CLOSEPAREN:if(!e.skip(o.Token.EQUALS_GREATERTHAN)){u=!1;break}case o.Token.QUESTION:case o.Token.COLON:return e.reset(c),this.parseFunctionExpression(e);case o.Token.COMMA:break;default:u=!1}break;default:u=!1}}while(u);return e.reset(c),(n=this.parseExpression(e))?e.skip(o.Token.CLOSEPAREN)?p.Node.createParenthesizedExpression(n,e.range(r,e.pos)):(this.error(s.DiagnosticCode._0_expected,e.range(),")"),null):null;case o.Token.OPENBRACKET:var l=new Array;if(!e.skip(o.Token.CLOSEBRACKET)){do{if(e.peek()==o.Token.COMMA)n=null;else if(!(n=this.parseExpression(e,1)))return null;if(l.push(n),e.peek()==o.Token.CLOSEBRACKET)break}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEBRACKET))return this.error(s.DiagnosticCode._0_expected,e.range(),"]"),null}return p.Node.createArrayLiteralExpression(l,e.range(r,e.pos));case o.Token.LESSTHAN:var h=this.parseType(e);return h?e.skip(o.Token.GREATERTHAN)?(n=this.parseExpression(e,18))?p.Node.createAssertionExpression(0,n,h,e.range(r,e.pos)):null:(this.error(s.DiagnosticCode._0_expected,e.range(),">"),null):null;case o.Token.IDENTIFIER:return p.Node.createIdentifierExpression(e.readIdentifier(),e.range(r,e.pos));case o.Token.THIS:return p.Node.createThisExpression(e.range(r,e.pos));case o.Token.CONSTRUCTOR:return p.Node.createConstructorExpression(e.range(r,e.pos));case o.Token.SUPER:return p.Node.createSuperExpression(e.range(r,e.pos));case o.Token.STRINGLITERAL:return p.Node.createStringLiteralExpression(e.readString(),e.range(r,e.pos));case o.Token.INTEGERLITERAL:return p.Node.createIntegerLiteralExpression(e.readInteger(),e.range(r,e.pos));case o.Token.FLOATLITERAL:return p.Node.createFloatLiteralExpression(e.readFloat(),e.range(r,e.pos));case o.Token.SLASH:var d=e.readRegexpPattern();return e.skip(o.Token.SLASH)?p.Node.createRegexpLiteralExpression(d,e.readRegexpFlags(),e.range(r,e.pos)):(this.error(s.DiagnosticCode._0_expected,e.range(),"/"),null);case o.Token.FUNCTION:return this.parseFunctionExpression(e);default:return this.error(s.DiagnosticCode.Expression_expected,e.range()),null}},t.prototype.tryParseTypeArgumentsBeforeArguments=function(e){var t=e.mark();if(!e.skip(o.Token.LESSTHAN))return null;var r=new Array;do{var n=this.parseType(e,!0,!0);if(!n)return e.reset(t),null;r.push(n)}while(e.skip(o.Token.COMMA));return e.skip(o.Token.GREATERTHAN)&&e.skip(o.Token.OPENPAREN)?r:(e.reset(t),null)},t.prototype.parseArguments=function(e){var t=new Array;if(!e.skip(o.Token.CLOSEPAREN)){do{var r=this.parseExpression(e,1);if(!r)return null;t.push(r)}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(),")"),null}return t},t.prototype.parseExpression=function(e,t){void 0===t&&(t=0);var r=this.parseExpressionStart(e);if(!r)return null;for(var n,i,a=r.range.start;(n=this.tryParseTypeArgumentsBeforeArguments(e))||e.skip(o.Token.OPENPAREN);){var c=this.parseArguments(e);if(!c)return null;r=p.Node.createCallExpression(r,n,c,e.range(a,e.pos))}for(var u,d=null;(u=l(i=e.peek()))>=t;)switch(e.next(),i){case o.Token.AS:var _=this.parseType(e);if(!_)return null;r=p.Node.createAssertionExpression(1,r,_,e.range(a,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(a,e.pos));break;case o.Token.PLUS_PLUS:case o.Token.MINUS_MINUS:r.kind!=p.NodeKind.IDENTIFIER&&r.kind!=p.NodeKind.ELEMENTACCESS&&r.kind!=p.NodeKind.PROPERTYACCESS&&this.error(s.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,r.range),r=p.Node.createUnaryPostfixExpression(i,r,e.range(a,e.pos));break;case o.Token.QUESTION:var y=this.parseExpression(e);if(!y)return null;if(!e.skip(o.Token.COLON))return this.error(s.DiagnosticCode._0_expected,e.range(),":"),null;var m=this.parseExpression(e);if(!m)return null;r=p.Node.createTernaryExpression(r,y,m,e.range(a,e.pos));break;case o.Token.COMMA:var f=[r];do{if(!(r=this.parseExpression(e,1)))return null;f.push(r)}while(e.skip(o.Token.COMMA));r=p.Node.createCommaExpression(f,e.range(a,e.pos));break;default:if(!(d=this.parseExpression(e,h(i)?u:u+1)))return null;if(i==o.Token.DOT)if(d.kind==p.NodeKind.IDENTIFIER)r=p.Node.createPropertyAccessExpression(r,d,e.range(a,e.pos));else{if(d.kind!=p.NodeKind.CALL)return this.error(s.DiagnosticCode.Identifier_expected,d.range),null;var g=d;if(g.expression.kind!=p.NodeKind.IDENTIFIER)return this.error(s.DiagnosticCode.Identifier_expected,g.expression.range),null;g.expression=p.Node.createPropertyAccessExpression(r,g.expression,e.range(a,e.pos)),r=g}else r=p.Node.createBinaryExpression(i,r,d,e.range(a,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?g:f;if(t){if(e<0)return g;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 f;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=f,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(E)},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 f;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 f;if(this.eq(N))return e.isOdd()?N:f;if(e.eq(N))return this.isOdd()?N:f;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,g=0,E=0;return g+=(E+=o*d)>>>16,y+=(g+=a*d)>>>16,g&=65535,y+=(g+=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((g&=65535)<<16|(E&=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?g:f;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return g;if(e.gt(this.shru(1)))return T;a=g}else{if(this.eq(N))return e.eq(E)||e.eq(A)?N:e.eq(N)?E:(t=this.shr(1).div(e).shl(1)).eq(f)?e.isNegative()?E:A:(n=this.sub(e.mul(t)),a=t.add(n.div(e)));else if(e.eq(N))return this.unsigned?g:f;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=f}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=E),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.program,i=e.module,c=n.types.get("string");if(!c)return i.createUnreachable();var p=n.elements.get("abort");if(!p||p.kind!=s.ElementKind.FUNCTION_PROTOTYPE)return i.createUnreachable();var u=p.resolve();if(!u||!e.compileFunction(u))return i.createUnreachable();var l=null!=t?e.compileExpression(t,c):c.toNativeZero(i),h=e.compileStaticString(r.range.source.normalizedPath);return e.currentType=a.Type.void,i.createBlock(null,[i.createCallImport(u.internalName,[l,h,i.createI32(r.range.line),i.createI32(r.range.column)],o.NativeType.None),i.createUnreachable()])}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,f,g,E,T=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)),T.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)),T.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=T.createBinary(o.BinaryOp.NeF32,T.createTeeLocal(m.index,h),T.createGetLocal(m.index,o.NativeType.F32));break;case 12:m=e.currentFunction.getAndFreeTempLocal(a.Type.f64),y=T.createBinary(o.BinaryOp.NeF64,T.createTeeLocal(m.index,h),T.createGetLocal(m.index,o.NativeType.F64));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.createUnreachable();break;default:y=T.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)),T.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)),T.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=T.createSelect(T.createBinary(o.BinaryOp.NeF32,T.createUnary(o.UnaryOp.AbsF32,T.createTeeLocal(m.index,h)),T.createF32(1/0)),T.createI32(0),T.createBinary(o.BinaryOp.EqF32,T.createGetLocal(m.index,o.NativeType.F32),T.createGetLocal(m.index,o.NativeType.F32)));break;case 12:m=e.currentFunction.getAndFreeTempLocal(a.Type.f64),y=T.createSelect(T.createBinary(o.BinaryOp.NeF64,T.createUnary(o.UnaryOp.AbsF64,T.createTeeLocal(m.index,h)),T.createF64(1/0)),T.createI32(0),T.createBinary(o.BinaryOp.EqF64,T.createGetLocal(m.index,o.NativeType.F64),T.createGetLocal(m.index,o.NativeType.F64)));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.createUnreachable();break;default:y=T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.i32,0);switch(e.currentType.kind){default:y=T.createUnary(o.UnaryOp.ClzI32,h);break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.createUnreachable();break}case 4:y=T.createUnary(e.options.isWasm64?o.UnaryOp.ClzI64:o.UnaryOp.ClzI32,h);break;case 3:case 8:y=T.createUnary(o.UnaryOp.ClzI64,h);break;case 11:case 12:case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.i32,0);switch(e.currentType.kind){default:y=T.createUnary(o.UnaryOp.CtzI32,h);break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.createUnreachable();break}case 4:y=T.createUnary(e.options.isWasm64?o.UnaryOp.CtzI64:o.UnaryOp.CtzI32,h);break;case 3:case 8:y=T.createUnary(o.UnaryOp.CtzI64,h);break;case 11:case 12:case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.i32,0);switch(e.currentType.kind){default:y=T.createUnary(o.UnaryOp.PopcntI32,h);break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.createUnreachable();break}case 4:y=T.createUnary(e.options.isWasm64?o.UnaryOp.PopcntI64:o.UnaryOp.PopcntI32,h);break;case 3:case 8:y=T.createUnary(o.UnaryOp.PopcntI64,h);break;case 11:case 12:case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.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(T.createBinary(o.BinaryOp.RotlI32,h,d),e.currentType,T);case 2:case 7:y=T.createBinary(o.BinaryOp.RotlI32,h,d);break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.createUnreachable();break}case 4:y=T.createBinary(e.options.isWasm64?o.BinaryOp.RotlI64:o.BinaryOp.RotlI32,h,d);break;case 3:case 8:y=T.createBinary(o.BinaryOp.RotlI64,h,d);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.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(T.createBinary(o.BinaryOp.RotrI32,h,d),e.currentType,T);break;case 2:case 7:y=T.createBinary(o.BinaryOp.RotrI32,h,d);break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.createUnreachable();break}case 4:y=T.createBinary(e.options.isWasm64?o.BinaryOp.RotrI64:o.BinaryOp.RotrI32,h,d);break;case 3:case 8:y=T.createBinary(o.BinaryOp.RotrI64,h,d);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.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=T.createSelect(T.createTeeLocal(m.index,h),T.createBinary(o.BinaryOp.SubI32,T.createI32(0),T.createGetLocal(m.index,o.NativeType.I32)),T.createBinary(o.BinaryOp.GtI32,T.createGetLocal(m.index,o.NativeType.I32),T.createI32(0)));break;case 4:m=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),y=T.createSelect(T.createTeeLocal(m.index,h),T.createBinary(e.options.isWasm64?o.BinaryOp.SubI64:o.BinaryOp.SubI32,e.options.usizeType.toNativeZero(T),T.createGetLocal(m.index,e.options.nativeSizeType)),T.createBinary(e.options.isWasm64?o.BinaryOp.GtI64:o.BinaryOp.GtI32,T.createGetLocal(m.index,e.options.nativeSizeType),e.options.usizeType.toNativeZero(T)));break;case 3:m=e.currentFunction.getAndFreeTempLocal(a.Type.i64),y=T.createSelect(T.createTeeLocal(m.index,h),T.createBinary(o.BinaryOp.SubI64,T.createI64(0,0),T.createGetLocal(m.index,o.NativeType.I64)),T.createBinary(o.BinaryOp.GtI64,T.createGetLocal(m.index,o.NativeType.I64),T.createI64(0,0)));break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.createUnreachable();break}case 5:case 6:case 7:case 8:case 10:y=h;break;case 11:y=T.createUnary(o.UnaryOp.AbsF32,h);break;case 12:y=T.createUnary(o.UnaryOp.AbsF64,h);break;case 13:y=T.createUnreachable();break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.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),f=e.currentFunction.getAndFreeTempLocal(a.Type.i32),e.currentFunction.freeTempLocal(m),y=T.createSelect(T.createTeeLocal(m.index,h),T.createTeeLocal(f.index,d),T.createBinary(o.BinaryOp.GtI32,T.createGetLocal(m.index,o.NativeType.I32),T.createGetLocal(f.index,o.NativeType.I32)));break;case 5:case 6:case 7:case 10:m=e.currentFunction.getTempLocal(a.Type.i32),f=e.currentFunction.getAndFreeTempLocal(a.Type.i32),e.currentFunction.freeTempLocal(m),y=T.createSelect(T.createTeeLocal(m.index,h),T.createTeeLocal(f.index,d),T.createBinary(o.BinaryOp.GtU32,T.createGetLocal(m.index,o.NativeType.I32),T.createGetLocal(f.index,o.NativeType.I32)));break;case 3:m=e.currentFunction.getTempLocal(a.Type.i64),f=e.currentFunction.getAndFreeTempLocal(a.Type.i64),e.currentFunction.freeTempLocal(m),y=T.createSelect(T.createTeeLocal(m.index,h),T.createTeeLocal(f.index,d),T.createBinary(o.BinaryOp.GtI64,T.createGetLocal(m.index,o.NativeType.I64),T.createGetLocal(f.index,o.NativeType.I64)));break;case 8:m=e.currentFunction.getTempLocal(a.Type.i64),f=e.currentFunction.getAndFreeTempLocal(a.Type.i64),e.currentFunction.freeTempLocal(m),y=T.createSelect(T.createTeeLocal(m.index,h),T.createTeeLocal(f.index,d),T.createBinary(o.BinaryOp.GtU64,T.createGetLocal(m.index,o.NativeType.I64),T.createGetLocal(f.index,o.NativeType.I64)));break;case 4:m=e.currentFunction.getTempLocal(e.options.usizeType),f=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(m),y=T.createSelect(T.createTeeLocal(m.index,h),T.createTeeLocal(f.index,d),T.createBinary(e.options.isWasm64?o.BinaryOp.GtI64:o.BinaryOp.GtI32,T.createGetLocal(m.index,e.options.nativeSizeType),T.createGetLocal(f.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.createUnreachable();break}m=e.currentFunction.getTempLocal(e.options.usizeType),f=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(m),y=T.createSelect(T.createTeeLocal(m.index,h),T.createTeeLocal(f.index,d),T.createBinary(e.options.isWasm64?o.BinaryOp.GtU64:o.BinaryOp.GtU32,T.createGetLocal(m.index,e.options.nativeSizeType),T.createGetLocal(f.index,e.options.nativeSizeType)));break;case 11:y=T.createBinary(o.BinaryOp.MaxF32,h,d);break;case 12:y=T.createBinary(o.BinaryOp.MaxF64,h,d);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.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),f=e.currentFunction.getAndFreeTempLocal(a.Type.i32),e.currentFunction.freeTempLocal(m),y=T.createSelect(T.createTeeLocal(m.index,h),T.createTeeLocal(f.index,d),T.createBinary(o.BinaryOp.LtI32,T.createGetLocal(m.index,o.NativeType.I32),T.createGetLocal(f.index,o.NativeType.I32)));break;case 5:case 6:case 7:case 10:m=e.currentFunction.getTempLocal(a.Type.i32),f=e.currentFunction.getAndFreeTempLocal(a.Type.i32),e.currentFunction.freeTempLocal(m),y=T.createSelect(T.createTeeLocal(m.index,h),T.createTeeLocal(f.index,d),T.createBinary(o.BinaryOp.LtU32,T.createGetLocal(m.index,o.NativeType.I32),T.createGetLocal(f.index,o.NativeType.I32)));break;case 3:m=e.currentFunction.getTempLocal(a.Type.i64),f=e.currentFunction.getAndFreeTempLocal(a.Type.i64),e.currentFunction.freeTempLocal(m),y=T.createSelect(T.createTeeLocal(m.index,h),T.createTeeLocal(f.index,d),T.createBinary(o.BinaryOp.LtI64,T.createGetLocal(m.index,o.NativeType.I64),T.createGetLocal(f.index,o.NativeType.I64)));break;case 8:m=e.currentFunction.getTempLocal(a.Type.i64),f=e.currentFunction.getAndFreeTempLocal(a.Type.i64),e.currentFunction.freeTempLocal(m),y=T.createSelect(T.createTeeLocal(m.index,h),T.createTeeLocal(f.index,d),T.createBinary(o.BinaryOp.LtU64,T.createGetLocal(m.index,o.NativeType.I64),T.createGetLocal(f.index,o.NativeType.I64)));break;case 4:m=e.currentFunction.getTempLocal(e.options.usizeType),f=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(m),y=T.createSelect(T.createTeeLocal(m.index,h),T.createTeeLocal(f.index,d),T.createBinary(e.options.isWasm64?o.BinaryOp.LtI64:o.BinaryOp.LtI32,T.createGetLocal(m.index,e.options.nativeSizeType),T.createGetLocal(f.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.createUnreachable();break}m=e.currentFunction.getTempLocal(e.options.usizeType),f=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(m),y=T.createSelect(T.createTeeLocal(m.index,h),T.createTeeLocal(f.index,d),T.createBinary(e.options.isWasm64?o.BinaryOp.LtU64:o.BinaryOp.LtU32,T.createGetLocal(m.index,e.options.nativeSizeType),T.createGetLocal(f.index,e.options.nativeSizeType)));break;case 11:y=T.createBinary(o.BinaryOp.MinF32,h,d);break;case 12:y=T.createBinary(o.BinaryOp.MinF64,h,d);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.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=T.createUnreachable();break}default:y=h;break;case 11:y=T.createUnary(o.UnaryOp.CeilF32,h);break;case 12:y=T.createUnary(o.UnaryOp.CeilF64,h);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.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=T.createUnreachable();break}default:y=h;break;case 11:y=T.createUnary(o.UnaryOp.FloorF32,h);break;case 12:y=T.createUnary(o.UnaryOp.FloorF64,h);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.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=T.createBinary(o.BinaryOp.CopysignF32,h,d);break;case 12:y=T.createBinary(o.BinaryOp.CopysignF64,h,d);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.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=T.createUnreachable();break}default:y=h;break;case 11:y=T.createUnary(o.UnaryOp.NearestF32,h);break;case 12:y=T.createUnary(o.UnaryOp.NearestF64,h);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(!r||1!=r.length)return r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0"),T.createUnreachable();switch(r[0].kind){case 2:case 7:h=e.compileExpression(s[0],a.Type.f32),y=T.createUnary(o.UnaryOp.ReinterpretF32,h);break;case 3:case 8:h=e.compileExpression(s[0],a.Type.f64),y=T.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],T.createUnreachable();case 4:h=e.compileExpression(s[0],e.options.isWasm64?a.Type.f64:a.Type.f32),y=T.createUnary(e.options.isWasm64?o.UnaryOp.ReinterpretF64:o.UnaryOp.ReinterpretF32,h);break;case 11:h=e.compileExpression(s[0],a.Type.u32),y=T.createUnary(o.UnaryOp.ReinterpretI32,h);break;case 12:h=e.compileExpression(s[0],a.Type.u64),y=T.createUnary(o.UnaryOp.ReinterpretI64,h);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.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=T.createUnary(o.UnaryOp.SqrtF32,h);break;case 12:y=T.createUnary(o.UnaryOp.SqrtF64,h);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(r&&r.length){if(e.currentType=r[0],1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.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=T.createUnreachable();break}default:y=h;break;case 11:y=T.createUnary(o.UnaryOp.TruncF32,h);break;case 12:y=T.createUnary(o.UnaryOp.TruncF64,h);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable()):r&&1==r.length?(h=e.compileExpression(s[0],e.options.usizeType),(E=2==s.length?c(e,s[1]):0)<0?T.createUnreachable():(e.currentType=r[0],T.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(),E))):(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"),T.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)),T.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]),g=r[0]):g=e.currentType,(E=3==s.length?c(e,s[2]):0)<0?T.createUnreachable():(e.currentType=a.Type.void,T.createStore(r[0].byteSize,h,d,g.toNativeType(),E))):(e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0"),T.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)),T.createUnreachable()):r?1!=r.length?(e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.createUnreachable()):y=e.options.isWasm64?T.createI64(r[0].byteSize,0):T.createI32(r[0].byteSize):(e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1","0"),T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.i32,0);switch(d=e.compileExpression(s[1],g=e.currentType),_=e.compileExpression(s[2],a.Type.bool),e.currentType=g,e.currentType.kind){default:y=T.createSelect(h,d,_);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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),T.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),T.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=T.createUnreachable()):h=e.compileExpression(s[0],a.Type.i32),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),T.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,T.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,T.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],T.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],T.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),T.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"),T.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)),T.createUnreachable();if(r){if(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpressionRetainType(s[0],a.Type.i32);if(g=e.currentType,e.currentType=g.nonNullableType,e.options.noAssert)return u==a.Type.void?(e.currentType=a.Type.void,T.createNop()):h;var A=p(e,2==s.length?s[1]:null,l);if(e.currentType=g.nonNullableType,u==a.Type.void){switch(e.currentType.kind){default:y=T.createIf(T.createUnary(o.UnaryOp.EqzI32,h),A);break;case 3:case 8:y=T.createIf(T.createUnary(o.UnaryOp.EqzI64,h),A);break;case 4:case 9:y=T.createIf(T.createUnary(e.options.isWasm64?o.UnaryOp.EqzI64:o.UnaryOp.EqzI32,h),A);break;case 11:y=T.createIf(T.createBinary(o.BinaryOp.EqF32,h,T.createF32(0)),A);break;case 12:y=T.createIf(T.createBinary(o.BinaryOp.EqF64,h,T.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=T.createIf(T.createUnary(o.UnaryOp.EqzI32,T.createTeeLocal(m.index,h)),A,T.createGetLocal(m.index,o.NativeType.I32));break;case 3:case 8:m=e.currentFunction.getAndFreeTempLocal(a.Type.i64),y=T.createIf(T.createUnary(o.UnaryOp.EqzI64,T.createTeeLocal(m.index,h)),A,T.createGetLocal(m.index,o.NativeType.I64));break;case 4:case 9:m=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),y=T.createIf(T.createUnary(e.options.isWasm64?o.UnaryOp.EqzI64:o.UnaryOp.EqzI32,T.createTeeLocal(m.index,h)),A,T.createGetLocal(m.index,e.options.nativeSizeType));break;case 11:m=e.currentFunction.getAndFreeTempLocal(a.Type.f32),y=T.createIf(T.createBinary(o.BinaryOp.EqF32,T.createTeeLocal(m.index,h),T.createF32(0)),A,T.createGetLocal(m.index,o.NativeType.F32));break;case 12:m=e.currentFunction.getAndFreeTempLocal(a.Type.f64),y=T.createIf(T.createBinary(o.BinaryOp.EqF64,T.createTeeLocal(m.index,h),T.createF64(0)),A,T.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,T.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,T.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,T.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,T.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,T.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,T.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,T.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,T.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,T.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,T.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,T.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,T.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,T.createUnreachable()):e.compileExpression(s[0],a.Type.f64,2)}return e.error(i.DiagnosticCode.Operation_not_supported,l.range),T.createUnreachable()},t.compileAllocate=function(e,t,r){var n=e.program;assert(t.program==n);var a=e.module,o=e.options,c=n.elements.get(o.allocateImpl);if(!c)return n.error(i.DiagnosticCode.Cannot_find_name_0,r.range,o.allocateImpl),a.createUnreachable();if(c.kind!=s.ElementKind.FUNCTION_PROTOTYPE)return n.error(i.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,r.range,c.internalName),a.createUnreachable();var p=c.resolve();return p&&e.compileFunction(p)?(e.currentType=t.type,a.createCall(p.internalName,[o.isWasm64?a.createI64(t.currentMemoryOffset):a.createI32(t.currentMemoryOffset)],o.nativeSizeType)):a.createUnreachable()},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;--o)free_memory(a[o])}},e.prototype.createCall=function(e,t,r){var n=l(e),i=u(t);try{return _BinaryenCall(this.ref,n,i,t&&t.length||0,r)}finally{free_memory(i),free_memory(n)}},e.prototype.createCallImport=function(e,t,r){var n=l(e),i=u(t);try{return _BinaryenCallImport(this.ref,n,i,t&&t.length||0,r)}finally{free_memory(i),free_memory(n)}},e.prototype.createCallIndirect=function(e,t,r){var n=u(t),i=l(r);try{return _BinaryenCallIndirect(this.ref,e,n,t&&t.length||0,i)}finally{free_memory(i),free_memory(n)}},e.prototype.createUnreachable=function(){return _BinaryenUnreachable(this.ref)},e.prototype.addGlobal=function(e,t,r,n){var i=l(e);try{return _BinaryenAddGlobal(this.ref,i,t,r?1:0,n)}finally{free_memory(i)}},e.prototype.addFunction=function(e,t,r,n){var i=l(e),a=u(r);try{return _BinaryenAddFunction(this.ref,i,t,a,r?r.length:0,n)}finally{free_memory(a),free_memory(i)}},e.prototype.removeFunction=function(e){var t=l(e);try{_BinaryenRemoveFunction(this.ref,t)}finally{free_memory(t)}},e.prototype.addFunctionExport=function(e,t){var r=l(e),n=l(t);try{return _BinaryenAddFunctionExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addTableExport=function(e,t){var r=l(e),n=l(t);try{return _BinaryenAddTableExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addMemoryExport=function(e,t){var r=l(e),n=l(t);try{return _BinaryenAddMemoryExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.addGlobalExport=function(e,t){var r=l(e),n=l(t);try{return _BinaryenAddGlobalExport(this.ref,r,n)}finally{free_memory(n),free_memory(r)}},e.prototype.removeExport=function(e){var t=l(e);try{_BinaryenRemoveExport(this.ref,t)}finally{free_memory(t)}},e.prototype.addFunctionImport=function(e,t,r,n){var i=l(e),a=l(t),o=l(r);try{return _BinaryenAddFunctionImport(this.ref,i,a,o,n)}finally{free_memory(o),free_memory(a),free_memory(i)}},e.prototype.addTableImport=function(e,t,r){var n=l(e),i=l(t),a=l(r);try{return _BinaryenAddTableImport(this.ref,n,i,a)}finally{free_memory(a),free_memory(i),free_memory(n)}},e.prototype.addMemoryImport=function(e,t,r){var n=l(e),i=l(t),a=l(r);try{return _BinaryenAddMemoryImport(this.ref,n,i,a)}finally{free_memory(a),free_memory(i),free_memory(n)}},e.prototype.addGlobalImport=function(e,t,r,n){var i=l(e),a=l(t),o=l(r);try{return _BinaryenAddGlobalImport(this.ref,i,a,o,n)}finally{free_memory(o),free_memory(a),free_memory(i)}},e.prototype.removeImport=function(e){var t=l(e);try{_BinaryenRemoveImport(this.ref,t)}finally{free_memory(t)}},e.prototype.setMemory=function(e,t,r,n,i){void 0===i&&(i=null);for(var o=l(i),s=r.length,c=new Array(s),h=new Array(s),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=e.length,r=allocate_memory(t),n=r,i=0;i>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=function(){return function(){}}(),_=new Map,y=function(e){function r(t){void 0===t&&(t=null);var r=e.call(this,t)||this;return r.diagnosticsOffset=0,r.elements=new Map,r.types=_,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=new Map,i=new Array,u=new Array,l=0,h=this.sources.length;l",l+="<"+A+">")}else if(r){var I=r.get(l);if(I)return I}}return(_=this.types.get(h))||(_=this.types.get(l))?_:(n&&this.error(s.DiagnosticCode.Cannot_find_name_0,o.name.range,l),null)},r.prototype.resolveTypeArguments=function(e,t,r,n){void 0===r&&(r=null),void 0===n&&(n=null);var i=e.length,a=t?t.length:0;if(i!=a)return a?this.error(s.DiagnosticCode.Expected_0_type_arguments_but_got_1,p.Range.join(t[0].range,t[a-1].range),i.toString(10),a.toString(10)):n&&this.error(s.DiagnosticCode.Expected_0_type_arguments_but_got_1,n.range.atEnd,i.toString(10),"0"),null;for(var o=new Array(i),c=0;c"),(n=new k(this,G,P,N)).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(f.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(f.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 D(this,A,e,E)).contextualTypeArguments=t,this.instances.set(r,n);var I,v,N,S,C,b,O=0;if(E&&(O=E.currentMemoryOffset,E.members)){n.members||(n.members=new Map);try{for(var k=a(E.members.values()),x=k.next();!x.done;x=k.next()){var L=x.value;n.members.set(L.simpleName,L)}}catch(e){N={error:e}}finally{try{x&&!x.done&&(S=k.return)&&S.call(k)}finally{if(N)throw N.error}}}if(this.constructorPrototype){var U=this.constructorPrototype.resolvePartial(e);U&&(n.constructorInstance=U.resolve())}if(this.instanceMembers)try{for(var F=a(this.instanceMembers.values()),P=F.next();!P.done;P=F.next()){var w=P.value;switch(w.kind){case m.FIELD_PROTOTYPE:n.members||(n.members=new Map);var M=w.declaration;if(!M.type)throw new Error("type expected");var G=this.program.resolveType(M.type,n.contextualTypeArguments);if(G){var K=new R(w,w.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(w.simpleName,K)}break;case m.FUNCTION_PROTOTYPE:n.members||(n.members=new Map);var z=w.resolvePartial(e);z&&n.members.set(w.simpleName,z);break;case m.PROPERTY:n.members||(n.members=new Map),assert(w.getterPrototype);var H=new B(this.program,w.simpleName,w.internalName,this);H.getterPrototype=w.getterPrototype.resolvePartial(e),w.setterPrototype&&(H.setterPrototype=w.setterPrototype.resolvePartial(e)),n.members.set(w.simpleName,H);break;default:throw new Error("instance member expected")}}}catch(e){C={error:e}}finally{try{P&&!P.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(f.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=U;var D=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&&(g=c.return)&&g.call(c)}finally{if(y)throw y.error}}}var d,_,y,g,f=s.prototype.declaration;if(f){var E=f.typeParameters;if(n){if((_=n.length)!=E.length)throw new Error("type argument count mismatch");if(_)for(s.contextualTypeArguments||(s.contextualTypeArguments=new Map),d=0;d<_;++d)s.contextualTypeArguments.set(E[d].name.text,n[d])}else if(E.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=D;var F=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}(U);t.InterfacePrototype=F;var P=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}(D);t.Interface=P,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 w=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=w},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.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(){var e;return l?(e=l,l=null):e=new u,e.pos=this.pos,e.token=this.token,e.tokenPos=this.tokenPos,e},t.prototype.discard=function(e){l=e},t.prototype.reset=function(e){this.pos=e.pos,this.token=e.token,this.tokenPos=e.tokenPos,this.nextToken=-1,l=e},t.prototype.range=function(e,t){return void 0===e&&(e=-1),void 0===t&&(t=-1),e<0?(e=this.tokenPos,t=this.pos):t<0&&(t=e),new 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;var u=function(){return function(){}}();t.State=u;var l=null},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.PARAMETER=3]="PARAMETER",e[e.SIGNATURE=4]="SIGNATURE",e[e.IDENTIFIER=5]="IDENTIFIER",e[e.ASSERTION=6]="ASSERTION",e[e.BINARY=7]="BINARY",e[e.CALL=8]="CALL",e[e.COMMA=9]="COMMA",e[e.ELEMENTACCESS=10]="ELEMENTACCESS",e[e.FALSE=11]="FALSE",e[e.FUNCTION=12]="FUNCTION",e[e.FUNCTIONARROW=13]="FUNCTIONARROW",e[e.LITERAL=14]="LITERAL",e[e.NEW=15]="NEW",e[e.NULL=16]="NULL",e[e.PARENTHESIZED=17]="PARENTHESIZED",e[e.PROPERTYACCESS=18]="PROPERTYACCESS",e[e.TERNARY=19]="TERNARY",e[e.SUPER=20]="SUPER",e[e.THIS=21]="THIS",e[e.TRUE=22]="TRUE",e[e.CONSTRUCTOR=23]="CONSTRUCTOR",e[e.UNARYPOSTFIX=24]="UNARYPOSTFIX",e[e.UNARYPREFIX=25]="UNARYPREFIX",e[e.BLOCK=26]="BLOCK",e[e.BREAK=27]="BREAK",e[e.CONTINUE=28]="CONTINUE",e[e.DO=29]="DO",e[e.EMPTY=30]="EMPTY",e[e.EXPORT=31]="EXPORT",e[e.EXPORTIMPORT=32]="EXPORTIMPORT",e[e.EXPRESSION=33]="EXPRESSION",e[e.FOR=34]="FOR",e[e.IF=35]="IF",e[e.IMPORT=36]="IMPORT",e[e.RETURN=37]="RETURN",e[e.SWITCH=38]="SWITCH",e[e.THROW=39]="THROW",e[e.TRY=40]="TRY",e[e.VARIABLE=41]="VARIABLE",e[e.VOID=42]="VOID",e[e.WHILE=43]="WHILE",e[e.CLASSDECLARATION=44]="CLASSDECLARATION",e[e.ENUMDECLARATION=45]="ENUMDECLARATION",e[e.ENUMVALUEDECLARATION=46]="ENUMVALUEDECLARATION",e[e.FIELDDECLARATION=47]="FIELDDECLARATION",e[e.FUNCTIONDECLARATION=48]="FUNCTIONDECLARATION",e[e.IMPORTDECLARATION=49]="IMPORTDECLARATION",e[e.INTERFACEDECLARATION=50]="INTERFACEDECLARATION",e[e.METHODDECLARATION=51]="METHODDECLARATION",e[e.NAMESPACEDECLARATION=52]="NAMESPACEDECLARATION",e[e.TYPEDECLARATION=53]="TYPEDECLARATION",e[e.VARIABLEDECLARATION=54]="VARIABLEDECLARATION",e[e.DECORATOR=55]="DECORATOR",e[e.MODIFIER=56]="MODIFIER",e[e.EXPORTMEMBER=57]="EXPORTMEMBER",e[e.SWITCHCASE=58]="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 l;return i.range=n,i.name=e,e.parent=i,i.typeArguments=t,t&&De(t,i),i.isNullable=r,i},e.createOmittedType=function(t){return e.createType(e.createIdentifierExpression("",t),null,!1,t)},e.createTypeParameter=function(e,t,r){var n=new h;return n.range=r,n.name=e,e.parent=n,n.extendsType=t,t&&(t.parent=n),n},e.createParameter=function(e,t,r,n,i){var a=new d;return a.range=i,a.name=e,e.parent=a,a.type=t,t&&(t.parent=a),a.initializer=r,r&&(r.parent=a),a.parameterKind=n,a},e.createSignature=function(e,t,r,n,i){var a=new _;return a.range=i,a.parameterTypes=e,De(e,a),a.returnType=t,t.parent=a,a.explicitThisType=r,r&&(r.parent=a),a.isNullable=n,a},e.createDecorator=function(e,t,r){var n=new g;if(n.range=r,n.name=e,e.parent=n,n.arguments=t,t&&De(t,n),e.kind==s.IDENTIFIER)switch(e.text){case"global":n.decoratorKind=1;break;case"operator":n.decoratorKind=2;break;case"unmanaged":n.decoratorKind=3;break;case"offset":n.decoratorKind=4;break;default:n.decoratorKind=0}else n.decoratorKind=0;return n},e.createModifier=function(e,t){var r=new m;return r.range=t,r.modifierKind=e,r},e.createIdentifierExpression=function(e,t){var r=new E;return r.range=t,r.text=e,r},e.createEmptyIdentifierExpression=function(e){var t=new E;return t.range=e,t.text="",t},e.createArrayLiteralExpression=function(e,t){var r=new A;return r.range=t,r.elementExpressions=e,function(e,t){for(var r=0,n=e.length;r0},enumerable:!0,configurable:!0}),t}(q);t.ClassDeclaration=J;var ee=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.CONTINUE,t}return i(t,e),t}(Y);t.ContinueStatement=ee;var te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.DO,t}return i(t,e),t}(Y);t.DoStatement=te;var re=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EMPTY,t}return i(t,e),t}(Y);t.EmptyStatement=re;var ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMDECLARATION,t}return i(t,e),t}(q);t.EnumDeclaration=ne;var ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.ENUMVALUEDECLARATION,t.modifiers=null,t}return i(t,e),t}(q);t.EnumValueDeclaration=ie;var ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORTIMPORT,t}return i(t,e),t}(p);t.ExportImportStatement=ae;var oe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORTMEMBER,t}return i(t,e),t}(p);t.ExportMember=oe;var se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPORT,t}return i(t,e),t}(Y);t.ExportStatement=se;var ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.EXPRESSION,t}return i(t,e),t}(Y);t.ExpressionStatement=ce;var pe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FIELDDECLARATION,t}return i(t,e),t}(j);t.FieldDeclaration=pe;var ue=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FOR,t}return i(t,e),t}(Y);t.ForStatement=ue;var le=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.FUNCTIONDECLARATION,t}return i(t,e),Object.defineProperty(t.prototype,"isGeneric",{get:function(){var e=this.typeParameters;return null!=e&&e.length>0},enumerable:!0,configurable:!0}),t}(q);t.FunctionDeclaration=le;var he=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IF,t}return i(t,e),t}(Y);t.IfStatement=he;var de=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}(q);t.ImportDeclaration=de;var _e=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.IMPORT,t}return i(t,e),t}(Y);t.ImportStatement=_e;var ye=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.INTERFACEDECLARATION,t}return i(t,e),t}(J);t.InterfaceDeclaration=ye;var ge=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.METHODDECLARATION,t}return i(t,e),t}(le);t.MethodDeclaration=ge;var me=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.NAMESPACEDECLARATION,t}return i(t,e),t}(q);t.NamespaceDeclaration=me;var fe=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.RETURN,t}return i(t,e),t}(Y);t.ReturnStatement=fe;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 Te=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.SWITCH,t}return i(t,e),t}(Y);t.SwitchStatement=Te;var Ae=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.THROW,t}return i(t,e),t}(Y);t.ThrowStatement=Ae;var Ie=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TRY,t}return i(t,e),t}(Y);t.TryStatement=Ie;var ve=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.TYPEDECLARATION,t}return i(t,e),t}(q);t.TypeDeclaration=ve;var Ne=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLEDECLARATION,t}return i(t,e),t}(j);t.VariableDeclaration=Ne;var Se=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VARIABLE,t}return i(t,e),t}(Y);t.VariableStatement=Se;var Ce=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.VOID,t}return i(t,e),t}(Y);t.VoidStatement=Ce;var be=function(e){function t(){var t=null!==e&&e.apply(this,arguments)||this;return t.kind=s.WHILE,t}return i(t,e),t}(Y);t.WhileStatement=be;var Oe=null;function ke(){var e;return null!=Oe?(e=Oe,Oe=null):e=[],e.length=0,e}function xe(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:var t=this.functionType;return e||!t?"u32":t.toString(!0);case 8:return"u64";case 9:var r=this.classType;return e||!r?"usize":r.toString();case 10:return"bool";case 11:return"f32";case 12:return"f64";case 13:return"void";default:return assert(!1),""}},e.prototype.toNativeType=function(){switch(this.kind){default:return n.NativeType.I32;case 3:case 8:return n.NativeType.I64;case 4:case 9:return 64==this.size?n.NativeType.I64:n.NativeType.I32;case 11:return n.NativeType.F32;case 12:return n.NativeType.F64;case 13:return n.NativeType.None}},e.prototype.toNativeZero=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(0);case 4:case 9:if(64!=this.size)return e.createI32(0);case 3:case 8:return e.createI64(0);case 11:return e.createF32(0);case 12:return e.createF64(0)}},e.prototype.toNativeOne=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(1);case 4:case 9:if(64!=this.size)return e.createI32(1);case 3:case 8:return e.createI64(1);case 11:return e.createF32(1);case 12:return e.createF64(1)}},e.prototype.toNativeNegOne=function(e){switch(this.kind){case 13:assert(!1);default:return e.createI32(-1);case 4:case 9:if(64!=this.size)return e.createI32(-1);case 3:case 8:return e.createI64(-1,-1);case 11:return e.createF32(-1);case 12:return e.createF64(-1)}},e.prototype.toSignatureString=function(){switch(this.kind){default:return"i";case 3:case 8:return"I";case 4:case 9:return 64==this.size?"I":"i";case 11:return"f";case 12:return"F";case 13:return"v"}},e.i8=new e(0,165,8),e.i16=new e(1,165,16),e.i32=new e(2,133,32),e.i64=new e(3,197,64),e.isize32=new e(4,149,32),e.isize64=new e(4,213,64),e.u8=new e(5,166,8),e.u16=new e(6,166,16),e.u32=new e(7,134,32),e.u64=new e(8,198,64),e.usize32=new e(9,150,32),e.usize64=new e(9,214,64),e.bool=new e(10,166,1),e.f32=new e(11,137,32),e.f64=new e(12,201,64),e.void=new e(13,0,0),e}();t.Type=i,t.typesToNativeTypes=function(e){for(var t=e.length,r=new Array(t),n=0;ne?t[e]:s(e)},e.prototype.isAssignableTo=function(e){var t=this.thisType,r=e.thisType;if(t){if(!r||!t.isAssignableTo(r))return!1}else if(r)return!1;if(this.hasRest!=e.hasRest)return!1;var n=this.parameterTypes,i=e.parameterTypes,a=n.length;if(a!=i.length)return!1;for(var o=0;o=p&&l!=u?t.push("?: "):t.push(": "),t.push(i[l].toString());return t.push(") => "),t.push(this.returnType.toString()),t.join("")},e}();t.Signature=a;var o=null;function s(e){o||(o=[]);for(var t=o.length;t<=e;++t)o.push("arg$"+t.toString(10));return o[e-1]}t.getGenericParameterName=s},function(e,t,r){"use strict";var n,i=this&&this.__extends||(n=Object.setPrototypeOf||{__proto__:[]}instanceof Array&&function(e,t){e.__proto__=t}||function(e,t){for(var r in t)t.hasOwnProperty(r)&&(e[r]=t[r])},function(e,t){function r(){this.constructor=e}n(e,t),e.prototype=null===t?Object.create(t):(r.prototype=t.prototype,new r)}),a=this&&this.__values||function(e){var t="function"==typeof Symbol&&e[Symbol.iterator],r=0;return t?t.call(e):{next:function(){return e&&r>=e.length&&(e=void 0),{value:e&&e[r++],done:!e}}}};Object.defineProperty(t,"__esModule",{value:!0});var o,s=r(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=[],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,r||(r=new _),n.options=r,n.memoryOffset=i64_new(max(r.memoryBase,r.usizeType.byteSize)),n.module=p.Module.create(),n}return i(t,e),t.compile=function(e,r){return void 0===r&&(r=null),new t(e,r).compile()},t.prototype.compile=function(){var e=this.options,t=this.module,r=this.program;r.initialize(e);var n=assert(r.elements.get("start"));assert(n.kind==u.ElementKind.FUNCTION_PROTOTYPE);var i=new u.Function(n,n.internalName,new d.Signature([],d.Type.void));i.set(u.ElementFlags.START),this.startFunction=i,this.currentFunction=i;for(var a=r.sources,o=0,s=a.length;o"),!1;e.type=this.currentType}var a=e.type.toNativeType();if(e.is(u.ElementFlags.DECLARED))return e.is(u.ElementFlags.CONSTANT)?(t.addGlobalImport(e.internalName,e.namespace?e.namespace.simpleName:"env",e.simpleName,a),e.set(u.ElementFlags.COMPILED),!0):(this.error(c.DiagnosticCode.Operation_not_supported,r.range),!1);var o=!1;e.is(u.ElementFlags.INLINED)?n=this.compileInlineConstant(e,e.type,!0):r.initializer?(n||(n=this.compileExpression(r.initializer,e.type)),_BinaryenExpressionGetId(n)!=p.ExpressionId.Const&&(e.is(u.ElementFlags.CONSTANT)?(n=this.precomputeExpressionRef(n),_BinaryenExpressionGetId(n)!=p.ExpressionId.Const&&(this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,r.range),o=!0)):o=!0)):n=e.type.toNativeZero(t);var s=e.internalName;if(o)t.addGlobal(s,a,!0,e.type.toNativeZero(t)),this.startFunctionBody.push(t.createSetGlobal(s,n));else if(e.is(u.ElementFlags.CONSTANT)){switch(_BinaryenExpressionGetType(n)){case p.NativeType.I32:e.constantValueKind=1,e.constantIntegerValue=i64_new(_BinaryenConstGetValueI32(n),0);break;case p.NativeType.I64:e.constantValueKind=1,e.constantIntegerValue=i64_new(_BinaryenConstGetValueI64Low(n),_BinaryenConstGetValueI64High(n));break;case p.NativeType.F32:e.constantValueKind=2,e.constantFloatValue=_BinaryenConstGetValueF32(n);break;case p.NativeType.F64:e.constantValueKind=2,e.constantFloatValue=_BinaryenConstGetValueF64(n);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.declaration.range),e.constantValueKind=1,e.constantIntegerValue=i64_new(0)}e.set(u.ElementFlags.INLINED),r.isTopLevel&&t.addGlobal(s,a,!1,n),r.range.source.isEntry&&r.isTopLevelExport&&t.addGlobalExport(e.internalName,r.programLevelInternalName)}else t.addGlobal(s,a,!e.is(u.ElementFlags.CONSTANT),n);return!0},t.prototype.compileEnumDeclaration=function(e){var t=assert(this.program.elements.get(e.fileLevelInternalName));return assert(t.kind==u.ElementKind.ENUM),this.compileEnum(t)?t:null},t.prototype.compileEnum=function(e){if(e.is(u.ElementFlags.COMPILED))return!0;e.set(u.ElementFlags.COMPILED);var t=this.module;this.currentEnum=e;var r,n,i=null;if(e.members)try{for(var o=a(e.members.values()),s=o.next();!s.done;s=o.next()){var l=s.value;if(l.kind==u.ElementKind.ENUMVALUE){var h=!1,_=l,y=_.declaration;if(_.set(u.ElementFlags.COMPILED),_.is(u.ElementFlags.INLINED))e.declaration.isTopLevelExport&&t.addGlobal(_.internalName,p.NativeType.I32,!1,t.createI32(_.constantValue));else{var g=void 0;y.value?(g=this.compileExpression(y.value,d.Type.i32),_BinaryenExpressionGetId(g)!=p.ExpressionId.Const&&(g=this.precomputeExpressionRef(g),_BinaryenExpressionGetId(g)!=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==i?g=t.createI32(0):i.is(u.ElementFlags.INLINED)?g=t.createI32(i.constantValue+1):(g=t.createBinary(p.BinaryOp.AddI32,t.createGetGlobal(i.internalName,p.NativeType.I32),t.createI32(1)),e.is(u.ElementFlags.CONSTANT)&&this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,y.range),h=!0),h?(t.addGlobal(_.internalName,p.NativeType.I32,!0,t.createI32(0)),this.startFunctionBody.push(t.createSetGlobal(_.internalName,g))):(t.addGlobal(_.internalName,p.NativeType.I32,!1,g),_BinaryenExpressionGetType(g)==p.NativeType.I32?(_.constantValue=_BinaryenConstGetValueI32(g),_.set(u.ElementFlags.INLINED)):(assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,y.range),_.constantValue=0))}i=_,e.declaration.range.source.isEntry&&e.declaration.isTopLevelExport&&(l.is(u.ElementFlags.INLINED)?t.addGlobalExport(l.internalName,l.internalName):y&&this.warning(c.DiagnosticCode.Cannot_export_a_mutable_global,y.range))}}}catch(e){r={error:e}}finally{try{s&&!s.done&&(n=o.return)&&n.call(o)}finally{if(r)throw r.error}}return this.currentEnum=null,!0},t.prototype.compileFunctionDeclaration=function(e,t,r){void 0===r&&(r=null);var n=assert(this.program.elements.get(e.fileLevelInternalName));return assert(n.kind==u.ElementKind.FUNCTION_PROTOTYPE),this.compileFunctionUsingTypeArguments(n,t,r,n.declaration.name)},t.prototype.compileFunctionUsingTypeArguments=function(e,t,r,n){var i=e.resolveUsingTypeArguments(t,r,n);return i&&this.compileFunction(i)?i:null},t.prototype.ensureFunctionType=function(e){var t,r=e.parameterTypes.length,n=e.thisType,i=0;n?((t=new Array(1+r))[0]=n.toNativeType(),i=1):t=new Array(r);for(var a=0;a=0)return e.functionTableIndex;var t=this.functionTable,r=t.length;return t.push(e),e.functionTableIndex=r,r},t.prototype.compileStatement=function(e){var t,r=this.module;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:(t=this.compileVariableStatement(e))||(t=r.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 r.createNop();default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),t=r.createUnreachable()}return this.options.sourceMap&&g(t,e.range,r,this.currentFunction),t},t.prototype.compileStatements=function(e){for(var t=e.length,r=new Array(t),n=0;n=0?"case"+l.toString(10):"break")+"|"+n);var y=t.createBlock("case0|"+n,c,p.NativeType.None),g=!0;for(h=0;h=0&&g&&r.flow.set(1),y},t.prototype.compileThrowStatement=function(e){var t=this.currentFunction.flow;return t.set(2),t.set(1),this.module.createUnreachable()},t.prototype.compileTryStatement=function(e){return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileVariableStatement=function(e,t){void 0===t&&(t=!1);var r=this.program,n=this.currentFunction,i=e.declarations,a=i.length;if(t||n==this.startFunction&&e.parent&&e.parent.kind==h.NodeKind.SOURCE){for(var o=0;o");continue}y=this.currentType}if(h.hasModifier(h.ModifierKind.CONST,l.modifiers))if(g){if(g=this.precomputeExpressionRef(g),_BinaryenExpressionGetId(g)==p.ExpressionId.Const){var m=new u.Local(r,_,-1,y);switch(_BinaryenExpressionGetType(g)){case p.NativeType.I32:m=m.withConstantIntegerValue(_BinaryenConstGetValueI32(g),0);break;case p.NativeType.I64:m=m.withConstantIntegerValue(_BinaryenConstGetValueI64Low(g),_BinaryenConstGetValueI64High(g));break;case p.NativeType.F32:m=m.withConstantFloatValue(_BinaryenConstGetValueF32(g));break;case p.NativeType.F64:m=m.withConstantFloatValue(_BinaryenConstGetValueF64(g));break;default:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,l.range),this.module.createUnreachable()}var f=n.flow.scopedLocals;if(f){if(f.has(_))return this.error(c.DiagnosticCode.Duplicate_identifier_0,l.name.range,_),0}else n.flow.scopedLocals=f=new Map;return f.set(_,m),0}this.warning(c.DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,l.range)}else this.error(c.DiagnosticCode._const_declarations_must_be_initialized,l.range);h.hasModifier(h.ModifierKind.LET,l.modifiers)?n.flow.addScopedLocal(_,y,l.name):n.addLocal(y,_),g&&s.push(this.compileAssignmentWithValue(l.name,g))}return s.length?1==s.length?s[0]:this.module.createBlock(null,s,p.NativeType.None):0},t.prototype.compileVoidStatement=function(e){return this.compileExpression(e.expression,d.Type.void,2,!1)},t.prototype.compileWhileStatement=function(e){var t=this.module,r=E(this.compileExpression(e.condition,d.Type.i32,0),this.currentType,t),n=this.currentFunction,i=n.enterBreakContext(),a=n.flow.enterBranchOrScope();n.flow=a;var o="break|"+i;a.breakLabel=o;var s="continue|"+i;a.continueLabel=s;var c=this.compileStatement(e.statement);n.flow=a.leaveBranchOrScope(),n.leaveBreakContext();var u=t.createBlock(o,[t.createLoop(s,t.createIf(r,t.createBlock(null,[c,t.createBreak(s)],p.NativeType.None)))],p.NativeType.None);return u},t.prototype.compileInlineConstant=function(e,t,r){assert(e.is(u.ElementFlags.INLINED));var n=e.type;switch(!r&&n.is(4)&&t.is(4)&&n.size>i:0);case 5:case 6:case 10:var a=e.type.computeSmallIntegerMask(d.Type.i32);return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue)&a:0);case 2:case 7:return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 4:case 9:if(!e.program.options.isWasm64)return this.module.createI32(1==e.constantValueKind?i64_low(e.constantIntegerValue):0);case 3:case 8:return 1==e.constantValueKind?this.module.createI64(i64_low(e.constantIntegerValue),i64_high(e.constantIntegerValue)):this.module.createI64(0);case 11:return this.module.createF32(e.constantFloatValue);case 12:return this.module.createF64(e.constantFloatValue);default:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.declaration.range),this.module.createUnreachable()}},t.prototype.compileExpression=function(e,t,r,n){var i;switch(void 0===r&&(r=1),void 0===n&&(n=!0),this.currentType=t,e.kind){case h.NodeKind.ASSERTION:i=this.compileAssertionExpression(e,t);break;case h.NodeKind.BINARY:i=this.compileBinaryExpression(e,t,n);break;case h.NodeKind.CALL:i=this.compileCallExpression(e,t);break;case h.NodeKind.COMMA:i=this.compileCommaExpression(e,t);break;case h.NodeKind.ELEMENTACCESS:i=this.compileElementAccessExpression(e,t);break;case h.NodeKind.FUNCTION: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:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),i=this.module.createUnreachable()}var a=this.currentType;return 0!=r&&a!=t&&(i=this.convertExpression(i,a,t,r,e),this.currentType=t),this.options.sourceMap&&g(i,e.range,this.module,this.currentFunction),i},t.prototype.compileExpressionRetainType=function(e,t,r){return void 0===r&&(r=!0),this.compileExpression(e,t==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.module,r=this.currentType,n=r.toNativeType(),i=t.getFunctionTypeBySignature(n,null);i||(i=t.addFunctionType(r.toSignatureString(),n,null));var a=t.addFunction("__precompute",i,null,e);t.runPasses(["precompute"],a);var o=_BinaryenFunctionGetBody(a);return t.removeFunction("__precompute"),o},t.prototype.convertExpression=function(e,t,r,n,i){assert(0!=n);var a=this.module;return 13==t.kind?(this.error(c.DiagnosticCode.Type_0_is_not_assignable_to_type_1,i.range,t.toString(),r.toString()),a.createUnreachable()):13==r.kind?a.createDrop(e):(1!=n||t.isAssignableTo(r)||this.error(c.DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast,i.range,t.toString(),r.toString()),t.is(8)?r.is(8)?11==t.kind?12==r.kind&&(e=a.createUnary(p.UnaryOp.PromoteF32,e)):11==r.kind&&(e=a.createUnary(p.UnaryOp.DemoteF64,e)):r.is(4)?11==t.kind?r.is(1)?r.is(64)?e=a.createUnary(p.UnaryOp.TruncF32ToI64,e):(e=a.createUnary(p.UnaryOp.TruncF32ToI32,e),r.is(32)&&(e=m(e,r,a))):r.is(64)?e=a.createUnary(p.UnaryOp.TruncF32ToU64,e):(e=a.createUnary(p.UnaryOp.TruncF32ToU32,e),r.is(32)&&(e=m(e,r,a))):r.is(1)?r.is(64)?e=a.createUnary(p.UnaryOp.TruncF64ToI64,e):(e=a.createUnary(p.UnaryOp.TruncF64ToI32,e),r.is(32)&&(e=m(e,r,a))):r.is(64)?e=a.createUnary(p.UnaryOp.TruncF64ToU64,e):(e=a.createUnary(p.UnaryOp.TruncF64ToU32,e),r.is(32)&&(e=m(e,r,a))):(assert(0==r.flags,"void type expected"),e=a.createDrop(e)):t.is(4)&&r.is(8)?e=11==r.kind?t.is(64)?a.createUnary(t.is(1)?p.UnaryOp.ConvertI64ToF32:p.UnaryOp.ConvertU64ToF32,e):a.createUnary(t.is(1)?p.UnaryOp.ConvertI32ToF32:p.UnaryOp.ConvertU32ToF32,e):t.is(64)?a.createUnary(t.is(1)?p.UnaryOp.ConvertI64ToF64:p.UnaryOp.ConvertU64ToF64,e):a.createUnary(t.is(1)?p.UnaryOp.ConvertI32ToF64:p.UnaryOp.ConvertU32ToF64,e):t.is(64)?r.is(64)||(e=a.createUnary(p.UnaryOp.WrapI64,e),r.is(32)&&(e=m(e,r,a))):r.is(64)?e=a.createUnary(r.is(1)?p.UnaryOp.ExtendI32:p.UnaryOp.ExtendU32,e):r.is(32)&&(t.size>r.size||t.size==r.size&&t.is(1)!=r.is(1))&&(e=m(e,r,a)),this.currentType=r,e)},t.prototype.compileAssertionExpression=function(e,t){var r=this.program.resolveType(e.toType,this.currentFunction.contextualTypeArguments);return r?this.compileExpression(e.expression,r,2):this.module.createUnreachable()},t.prototype.compileBinaryExpression=function(e,t,r){void 0===r&&(r=!0);var n,i,a,o,s,u,h,_=this.module,y=e.left,g=e.right,f=!1,T=!1,A=null;switch(e.operator){case l.Token.LESSTHAN:if(n=this.compileExpressionRetainType(y,t),i=this.currentType,a=this.compileExpressionRetainType(g,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,_.createUnreachable();switch(n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,g),s.kind){case 0:case 1:case 2:h=_.createBinary(p.BinaryOp.LtI32,n,a);break;case 3:h=_.createBinary(p.BinaryOp.LtI64,n,a);break;case 4:h=_.createBinary(this.options.isWasm64?p.BinaryOp.LtI64:p.BinaryOp.LtI32,n,a);break;case 5:case 6:case 7:case 10:h=_.createBinary(p.BinaryOp.LtU32,n,a);break;case 9:h=_.createBinary(this.options.isWasm64?p.BinaryOp.LtU64:p.BinaryOp.LtU32,n,a);break;case 8:h=_.createBinary(p.BinaryOp.LtU64,n,a);break;case 11:h=_.createBinary(p.BinaryOp.LtF32,n,a);break;case 12:h=_.createBinary(p.BinaryOp.LtF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=_.createUnreachable()}this.currentType=d.Type.bool;break;case l.Token.GREATERTHAN:if(n=this.compileExpressionRetainType(y,t),i=this.currentType,a=this.compileExpressionRetainType(g,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,_.createUnreachable();switch(n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,g),s.kind){case 0:case 1:case 2:h=_.createBinary(p.BinaryOp.GtI32,n,a);break;case 4:h=_.createBinary(this.options.isWasm64?p.BinaryOp.GtI64:p.BinaryOp.GtI32,n,a);break;case 3:h=_.createBinary(p.BinaryOp.GtI64,n,a);break;case 5:case 6:case 7:case 10:h=_.createBinary(p.BinaryOp.GtU32,n,a);break;case 9:h=_.createBinary(this.options.isWasm64?p.BinaryOp.GtU64:p.BinaryOp.GtU32,n,a);break;case 8:h=_.createBinary(p.BinaryOp.GtU64,n,a);break;case 11:h=_.createBinary(p.BinaryOp.GtF32,n,a);break;case 12:h=_.createBinary(p.BinaryOp.GtF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=_.createUnreachable()}this.currentType=d.Type.bool;break;case l.Token.LESSTHAN_EQUALS:if(n=this.compileExpressionRetainType(y,t),i=this.currentType,a=this.compileExpressionRetainType(g,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,_.createUnreachable();switch(n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,g),s.kind){case 0:case 1:case 2:h=_.createBinary(p.BinaryOp.LeI32,n,a);break;case 4:h=_.createBinary(this.options.isWasm64?p.BinaryOp.LeI64:p.BinaryOp.LeI32,n,a);break;case 3:h=_.createBinary(p.BinaryOp.LeI64,n,a);break;case 5:case 6:case 7:case 10:h=_.createBinary(p.BinaryOp.LeU32,n,a);break;case 9:h=_.createBinary(this.options.isWasm64?p.BinaryOp.LeU64:p.BinaryOp.LeU32,n,a);break;case 8:h=_.createBinary(p.BinaryOp.LeU64,n,a);break;case 11:h=_.createBinary(p.BinaryOp.LeF32,n,a);break;case 12:h=_.createBinary(p.BinaryOp.LeF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=_.createUnreachable()}this.currentType=d.Type.bool;break;case l.Token.GREATERTHAN_EQUALS:if(n=this.compileExpressionRetainType(y,t),i=this.currentType,a=this.compileExpressionRetainType(g,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,_.createUnreachable();switch(n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,g),s.kind){case 0:case 1:case 2:h=_.createBinary(p.BinaryOp.GeI32,n,a);break;case 4:h=_.createBinary(this.options.isWasm64?p.BinaryOp.GeI64:p.BinaryOp.GeI32,n,a);break;case 3:h=_.createBinary(p.BinaryOp.GeI64,n,a);break;case 5:case 6:case 7:case 10:h=_.createBinary(p.BinaryOp.GeU32,n,a);break;case 9:h=_.createBinary(this.options.isWasm64?p.BinaryOp.GeU64:p.BinaryOp.GeU32,n,a);break;case 8:h=_.createBinary(p.BinaryOp.GeU64,n,a);break;case 11:h=_.createBinary(p.BinaryOp.GeF32,n,a);break;case 12:h=_.createBinary(p.BinaryOp.GeF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=_.createUnreachable()}this.currentType=d.Type.bool;break;case l.Token.EQUALS_EQUALS_EQUALS:case l.Token.EQUALS_EQUALS:if(n=this.compileExpressionRetainType(y,t),i=this.currentType,a=this.compileExpressionRetainType(g,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,_.createUnreachable();switch(n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,g),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:h=_.createBinary(p.BinaryOp.EqI32,n,a);break;case 9:case 4:h=_.createBinary(this.options.isWasm64?p.BinaryOp.EqI64:p.BinaryOp.EqI32,n,a);break;case 3:case 8:h=_.createBinary(p.BinaryOp.EqI64,n,a);break;case 11:h=_.createBinary(p.BinaryOp.EqF32,n,a);break;case 12:h=_.createBinary(p.BinaryOp.EqF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=_.createUnreachable()}this.currentType=d.Type.bool;break;case l.Token.EXCLAMATION_EQUALS_EQUALS:case l.Token.EXCLAMATION_EQUALS:if(n=this.compileExpressionRetainType(y,t),i=this.currentType,a=this.compileExpressionRetainType(g,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,_.createUnreachable();switch(n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,g),s.kind){case 0:case 1:case 2:case 5:case 6:case 7:case 10:h=_.createBinary(p.BinaryOp.NeI32,n,a);break;case 9:case 4:h=_.createBinary(this.options.isWasm64?p.BinaryOp.NeI64:p.BinaryOp.NeI32,n,a);break;case 3:case 8:h=_.createBinary(p.BinaryOp.NeI64,n,a);break;case 11:h=_.createBinary(p.BinaryOp.NeF32,n,a);break;case 12:h=_.createBinary(p.BinaryOp.NeF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=_.createUnreachable()}this.currentType=d.Type.bool;break;case l.Token.EQUALS:return this.compileAssignment(y,g,t);case l.Token.PLUS_EQUALS:f=!0;case l.Token.PLUS:if(n=this.compileExpressionRetainType(y,t,!1),f)a=this.compileExpression(g,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(g,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,_.createUnreachable();n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,g)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:T=!0;case 2:case 7:h=_.createBinary(p.BinaryOp.AddI32,n,a);break;case 9:case 4:h=_.createBinary(this.options.isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,n,a);break;case 3:case 8:h=_.createBinary(p.BinaryOp.AddI64,n,a);break;case 11:h=_.createBinary(p.BinaryOp.AddF32,n,a);break;case 12:h=_.createBinary(p.BinaryOp.AddF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=_.createUnreachable()}break;case l.Token.MINUS_EQUALS:f=!0;case l.Token.MINUS:if(n=this.compileExpressionRetainType(y,t,!1),f)a=this.compileExpression(g,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(g,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,_.createUnreachable();n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,g)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:T=!0;case 2:case 7:h=_.createBinary(p.BinaryOp.SubI32,n,a);break;case 9:case 4:h=_.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,n,a);break;case 3:case 8:h=_.createBinary(p.BinaryOp.SubI64,n,a);break;case 11:h=_.createBinary(p.BinaryOp.SubF32,n,a);break;case 12:h=_.createBinary(p.BinaryOp.SubF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=_.createUnreachable()}break;case l.Token.ASTERISK_EQUALS:f=!0;case l.Token.ASTERISK:if(n=this.compileExpressionRetainType(y,t,!1),f)a=this.compileExpression(g,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(g,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,_.createUnreachable();n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,g)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:T=!0;case 2:case 7:h=_.createBinary(p.BinaryOp.MulI32,n,a);break;case 9:case 4:h=_.createBinary(this.options.isWasm64?p.BinaryOp.MulI64:p.BinaryOp.MulI32,n,a);break;case 3:case 8:h=_.createBinary(p.BinaryOp.MulI64,n,a);break;case 11:h=_.createBinary(p.BinaryOp.MulF32,n,a);break;case 12:h=_.createBinary(p.BinaryOp.MulF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=_.createUnreachable()}break;case l.Token.SLASH_EQUALS:f=!0;case l.Token.SLASH:if(n=this.compileExpressionRetainType(y,t,!0),f)a=this.compileExpression(g,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(g,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,_.createUnreachable();n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,g)}switch(this.currentType.kind){case 0:case 1:T=!0;case 2:h=_.createBinary(p.BinaryOp.DivI32,n,a);break;case 4:h=_.createBinary(this.options.isWasm64?p.BinaryOp.DivI64:p.BinaryOp.DivI32,n,a);break;case 3:h=_.createBinary(p.BinaryOp.DivI64,n,a);break;case 5:case 6:case 10:T=!0;case 7:h=_.createBinary(p.BinaryOp.DivU32,n,a);break;case 9:h=_.createBinary(this.options.isWasm64?p.BinaryOp.DivU64:p.BinaryOp.DivU32,n,a);break;case 8:h=_.createBinary(p.BinaryOp.DivU64,n,a);break;case 11:h=_.createBinary(p.BinaryOp.DivF32,n,a);break;case 12:h=_.createBinary(p.BinaryOp.DivF64,n,a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=_.createUnreachable()}break;case l.Token.PERCENT_EQUALS:f=!0;case l.Token.PERCENT:if(n=this.compileExpressionRetainType(y,t,!0),f)a=this.compileExpression(g,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(g,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,_.createUnreachable();n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,g)}switch(this.currentType.kind){case 0:case 1:case 2:h=_.createBinary(p.BinaryOp.RemI32,n,a);break;case 4:h=_.createBinary(this.options.isWasm64?p.BinaryOp.RemI64:p.BinaryOp.RemI32,n,a);break;case 3:h=_.createBinary(p.BinaryOp.RemI64,n,a);break;case 5:case 6:case 7:case 10:h=_.createBinary(p.BinaryOp.RemU32,n,a);break;case 9:h=_.createBinary(this.options.isWasm64?p.BinaryOp.RemU64:p.BinaryOp.RemU32,n,a);break;case 8:h=_.createBinary(p.BinaryOp.RemU64,n,a);break;case 11:case 12:this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=_.createUnreachable();break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=_.createUnreachable()}break;case l.Token.LESSTHAN_LESSTHAN_EQUALS:f=!0;case l.Token.LESSTHAN_LESSTHAN:switch(n=this.compileExpressionRetainType(y,t,!1),a=this.compileExpression(g,this.currentType,1,!1),this.currentType.kind){case 0:case 1:case 5:case 6:case 10:T=!0;default:h=_.createBinary(p.BinaryOp.ShlI32,n,a);break;case 3:case 8:h=_.createBinary(p.BinaryOp.ShlI64,n,a);break;case 9:case 4:h=_.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()),_.createUnreachable();case 13:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=_.createUnreachable()}break;case l.Token.GREATERTHAN_GREATERTHAN_EQUALS:f=!0;case l.Token.GREATERTHAN_GREATERTHAN:switch(n=this.compileExpressionRetainType(y,t,!0),a=this.compileExpression(g,this.currentType,1,!0),this.currentType.kind){default:h=_.createBinary(p.BinaryOp.ShrI32,n,a);break;case 3:h=_.createBinary(p.BinaryOp.ShrI64,n,a);break;case 4:h=_.createBinary(this.options.isWasm64?p.BinaryOp.ShrI64:p.BinaryOp.ShrI32,n,a);break;case 5:case 6:case 10:case 7:h=_.createBinary(p.BinaryOp.ShrU32,n,a);break;case 8:h=_.createBinary(p.BinaryOp.ShrU64,n,a);break;case 9:h=_.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()),_.createUnreachable();case 13:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=_.createUnreachable()}break;case l.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:f=!0;case l.Token.GREATERTHAN_GREATERTHAN_GREATERTHAN:switch(n=this.compileExpressionRetainType(y,t,!0),a=this.compileExpression(g,this.currentType,1,!0),this.currentType.kind){case 0:case 1:T=!0;default:h=_.createBinary(p.BinaryOp.ShrU32,n,a);break;case 3:case 8:h=_.createBinary(p.BinaryOp.ShrU64,n,a);break;case 9:case 4:h=_.createBinary(this.options.isWasm64?p.BinaryOp.ShrU64:p.BinaryOp.ShrU32,n,a);break;case 13:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=_.createUnreachable()}break;case l.Token.AMPERSAND_EQUALS:f=!0;case l.Token.AMPERSAND:if(n=this.compileExpressionRetainType(y,t,!1),f)a=this.compileExpression(g,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(g,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,_.createUnreachable();n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,g)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:T=!0;default:h=_.createBinary(p.BinaryOp.AndI32,n,a);break;case 3:case 8:h=_.createBinary(p.BinaryOp.AndI64,n,a);break;case 9:case 4:h=_.createBinary(this.options.isWasm64?p.BinaryOp.AndI64:p.BinaryOp.AndI32,n,a);break;case 13:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=_.createUnreachable()}break;case l.Token.BAR_EQUALS:f=!0;case l.Token.BAR:if(n=this.compileExpressionRetainType(y,t,!1),f)a=this.compileExpression(g,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(g,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,_.createUnreachable();n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,g)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:T=!0;default:h=_.createBinary(p.BinaryOp.OrI32,n,a);break;case 3:case 8:h=_.createBinary(p.BinaryOp.OrI64,n,a);break;case 9:case 4:h=_.createBinary(this.options.isWasm64?p.BinaryOp.OrI64:p.BinaryOp.OrI32,n,a);break;case 13:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=_.createUnreachable()}break;case l.Token.CARET_EQUALS:f=!0;case l.Token.CARET:if(n=this.compileExpressionRetainType(y,t,!1),f)a=this.compileExpression(g,this.currentType,1,!1);else{if(i=this.currentType,a=this.compileExpressionRetainType(g,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,_.createUnreachable();n=this.convertExpression(n,i,s,1,y),a=this.convertExpression(a,o,s,1,g)}switch(this.currentType.kind){case 0:case 1:case 5:case 6:case 10:T=!0;default:h=_.createBinary(p.BinaryOp.XorI32,n,a);break;case 3:case 8:h=_.createBinary(p.BinaryOp.XorI64,n,a);break;case 9:case 4:h=_.createBinary(this.options.isWasm64?p.BinaryOp.XorI64:p.BinaryOp.XorI32,n,a);break;case 13:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=_.createUnreachable()}break;case l.Token.AMPERSAND_AMPERSAND:n=this.compileExpressionRetainType(y,t),a=this.compileExpression(g,this.currentType,1,!1),(h=_.cloneExpression(n,!0,0))||(A=this.currentFunction.getAndFreeTempLocal(this.currentType),n=_.createTeeLocal(A.index,n)),T=this.currentType.is(36),u=E(n,this.currentType,_),h=h?_.createIf(u,a,h):_.createIf(u,a,_.createGetLocal(assert(A).index,this.currentType.toNativeType()));break;case l.Token.BAR_BAR:n=this.compileExpressionRetainType(y,t),a=this.compileExpression(g,this.currentType,1,!1),(h=this.module.cloneExpression(n,!0,0))||(A=this.currentFunction.getAndFreeTempLocal(this.currentType),n=_.createTeeLocal(A.index,n)),T=this.currentType.is(36),u=E(n,this.currentType,_),h=h?this.module.createIf(u,h,a):_.createIf(u,_.createGetLocal(assert(A).index,this.currentType.toNativeType()),a);break;default:assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),h=this.module.createUnreachable()}return T&&r&&(assert(this.currentType.is(36)),h=m(h,this.currentType,_)),f?this.compileAssignmentWithValue(y,h,t!=d.Type.void):h},t.prototype.compileAssignment=function(e,t,r){var n=this.currentFunction,i=this.program.resolveExpression(e,n);if(!i)return this.module.createUnreachable();var a,o=i.element;switch(o.kind){case u.ElementKind.GLOBAL:if(!this.compileGlobal(o))return this.module.createUnreachable();assert(o.type!=d.Type.void,"concrete type expected");case u.ElementKind.LOCAL:case u.ElementKind.FIELD:a=o.type;break;case u.ElementKind.PROPERTY:var s=o.setterPrototype;if(s){var p=s.resolve();if(!p)return this.module.createUnreachable();assert(1==p.signature.parameterTypes.length),a=p.signature.parameterTypes[0];break}return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,o.internalName),this.module.createUnreachable();case u.ElementKind.FUNCTION_PROTOTYPE:if(e.kind==h.NodeKind.ELEMENTACCESS&&i.target&&i.target.kind==u.ElementKind.CLASS){if(o.simpleName!=i.target.prototype.fnIndexedGet)return this.error(c.DiagnosticCode.Index_signature_is_missing_in_type_0,e.range,i.target.toString()),this.module.createUnreachable();var l=o.resolve(null);if(l){a=l.signature.returnType;break}}default:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()}var _=this.compileExpression(t,a);return this.compileAssignmentWithValue(e,_,r!=d.Type.void)},t.prototype.compileAssignmentWithValue=function(e,t,r){void 0===r&&(r=!1);var n=this.module,i=this.program.resolveExpression(e,this.currentFunction);if(!i)return n.createUnreachable();var a=i.element;switch(a.kind){case u.ElementKind.LOCAL:return this.currentType=r?a.type:d.Type.void,a.is(u.ElementFlags.CONSTANT)?(this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,a.internalName),n.createUnreachable()):r?n.createTeeLocal(a.index,t):n.createSetLocal(a.index,t);case u.ElementKind.GLOBAL:if(!this.compileGlobal(a))return n.createUnreachable();var o=a.type;if(assert(o!=d.Type.void),this.currentType=r?o:d.Type.void,a.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,a.internalName),n.createUnreachable();if(r){var s=o.toNativeType(),p=a.internalName;return n.createBlock(null,[n.createSetGlobal(p,t),n.createGetGlobal(p,s)],s)}return n.createSetGlobal(a.internalName,t);case u.ElementKind.FIELD:if(a.prototype.isReadonly)return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,a.internalName),n.createUnreachable();assert(i.isInstanceTarget);var l=this.compileExpression(i.targetExpression,i.target.type);o=a.type;this.currentType=r?o:d.Type.void;s=o.toNativeType();if(r){var _=this.currentFunction.getAndFreeTempLocal(o).index;return n.createBlock(null,[n.createSetLocal(_,t),n.createStore(o.size>>3,l,n.createGetLocal(_,s),s,a.memoryOffset),n.createGetLocal(_,s)],s)}return n.createStore(o.size>>3,l,t,s,a.memoryOffset);case u.ElementKind.PROPERTY:var y=a.setterPrototype;if(y){if(!(I=y.resolve()))return n.createUnreachable();if(!r){if(I.is(u.ElementFlags.INSTANCE)){assert(i.isInstanceTarget);var g=this.compileExpression(i.targetExpression,i.target.type);return this.makeCallDirect(I,[g,t])}return this.makeCallDirect(I,[t])}var m=a.getterPrototype;if(assert(null!=m),!(E=m.resolve()))return n.createUnreachable();var f=(b=E.signature.returnType).toNativeType();if(I.is(u.ElementFlags.INSTANCE)){assert(i.isInstanceTarget);g=this.compileExpression(i.targetExpression,i.target.type),_=this.currentFunction.getAndFreeTempLocal(b).index;return n.createBlock(null,[this.makeCallDirect(I,[n.createTeeLocal(_,g),t]),this.makeCallDirect(E,[n.createGetLocal(_,f)])],f)}return n.createBlock(null,[this.makeCallDirect(I,[t]),this.makeCallDirect(E)],f)}return this.error(c.DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,e.range,a.internalName),n.createUnreachable();case u.ElementKind.FUNCTION_PROTOTYPE:if(e.kind==h.NodeKind.ELEMENTACCESS){var E;if(assert(i.isInstanceTarget),!(E=a.resolve()))return n.createUnreachable();var T=i.target.prototype.fnIndexedSet,A=void 0;if(null!=T&&i.target.members&&(A=i.target.members.get(T))&&A.kind==u.ElementKind.FUNCTION_PROTOTYPE){var I;if(!(I=A.resolve()))return n.createUnreachable();var v=i.target.type,N=(l=this.compileExpression(i.targetExpression,v),this.compileExpression(e.elementExpression,d.Type.i32));if(r){var S=this.currentFunction.getTempLocal(v),C=this.currentFunction.getAndFreeTempLocal(this.currentType),b=E.signature.returnType;return this.currentFunction.freeTempLocal(S),n.createBlock(null,[this.makeCallDirect(I,[n.createTeeLocal(S.index,l),n.createTeeLocal(C.index,N),t]),this.makeCallDirect(E,[n.createGetLocal(S.index,S.type.toNativeType()),n.createGetLocal(C.index,C.type.toNativeType())])],b.toNativeType())}return this.makeCallDirect(I,[l,N,t])}return this.error(c.DiagnosticCode.Index_signature_in_type_0_only_permits_reading,e.range,i.target.internalName),n.createUnreachable()}}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()},t.prototype.compileCallExpression=function(e,t){var r=this.module,n=this.currentFunction,i=this.program.resolveExpression(e.expression,n);if(!i)return r.createUnreachable();var a,o,l=i.element;switch(l.kind){case u.ElementKind.FUNCTION_PROTOTYPE:var h=l;if(h.is(u.ElementFlags.BUILTIN)){var d=s.compileCall(this,h,h.resolveBuiltinTypeArguments(e.typeArguments,n.contextualTypeArguments),e.arguments,t,e);return d||(this.error(c.DiagnosticCode.Operation_not_supported,e.range),r.createUnreachable())}var _=h.resolveUsingTypeArguments(e.typeArguments,n.contextualTypeArguments,e);if(!_)return r.createUnreachable();var y=0;if(_.is(u.ElementFlags.INSTANCE)){if(assert(i.isInstanceTarget),!(y=this.compileExpression(i.targetExpression,i.target.type)))return r.createUnreachable()}else assert(!i.isInstanceTarget);return this.compileCallDirect(_,e.arguments,e,y);case u.ElementKind.LOCAL:if(a=l.type.functionType){o=r.createGetLocal(l.index,p.NativeType.I32);break}return this.error(c.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,e.range,l.type.toString()),r.createUnreachable();case u.ElementKind.GLOBAL:if(a=l.type.functionType){o=r.createGetGlobal(l.internalName,l.type.toNativeType());break}return this.error(c.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,e.range,l.type.toString()),r.createUnreachable();case u.ElementKind.FIELD:var g=l.type;if(a=g.functionType){var m=this.compileExpression(assert(i.targetExpression),g);o=r.createLoad(4,!1,m,p.NativeType.I32,l.memoryOffset);break}return this.error(c.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,e.range,l.type.toString()),r.createUnreachable();case u.ElementKind.FUNCTION_TARGET:a=l.signature,o=this.compileExpression(e.expression,l.type);break;case u.ElementKind.PROPERTY:default:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),r.createUnreachable()}return this.compileCallIndirect(a,o,e.arguments,e)},t.prototype.checkCallSignature=function(e,t,r,n){if(r!=(null!=e.thisType))return this.error(c.DiagnosticCode.Operation_not_supported,n.range),!1;var i=e.hasRest;if(i)return this.error(c.DiagnosticCode.Operation_not_supported,n.range),!1;var a=e.requiredParameters,o=e.parameterTypes.length;return to&&!i)||(this.error(c.DiagnosticCode.Expected_0_arguments_but_got_1,n.range,o.toString(),t.toString()),!1)},t.prototype.compileCallDirect=function(e,t,r,n){void 0===n&&(n=0);var i=t.length,a=e.signature;if(!this.checkCallSignature(a,i,0!=n,r))return this.module.createUnreachable();var o=n?i+1:i,s=new Array(o),c=0;n&&(s[0]=n,c=1);for(var p=a.parameterTypes,u=0;u=i);var s=this.module;if(!this.compileFunction(e))return s.createUnreachable();if(r=0),this.currentType=m,this.module.createGetLocal(f,m.toNativeType());case u.ElementKind.GLOBAL:if(g.is(u.ElementFlags.BUILTIN))return s.compileGetConstant(this,g,e);if(!this.compileGlobal(g))return this.module.createUnreachable();var E=g.type;return assert(E!=d.Type.void),g.is(u.ElementFlags.INLINED)?this.compileInlineConstant(g,t,r):(this.currentType=E,this.module.createGetGlobal(g.internalName,E.toNativeType()));case u.ElementKind.ENUMVALUE:return g.is(u.ElementFlags.COMPILED)?(this.currentType=d.Type.i32,g.is(u.ElementFlags.INLINED)?this.module.createI32(g.constantValue):this.module.createGetGlobal(g.internalName,p.NativeType.I32)):(this.error(c.DiagnosticCode.A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums,e.range),this.currentType=d.Type.i32,this.module.createUnreachable())}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.module.createUnreachable()},t.prototype.compileLiteralExpression=function(e,t,r){void 0===r&&(r=!1);var n=this.module;switch(e.literalKind){case 4:assert(!r);var i=t.classType;return i&&i==this.program.elements.get("Array")&&i.typeArguments&&1==i.typeArguments.length?this.compileStaticArray(i.typeArguments[0],e.elementExpressions,e):(this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable());case 0:var a=e.value;return r&&(a=-a),t==d.Type.f32?n.createF32(a):(this.currentType=d.Type.f64,n.createF64(a));case 1:var o=e.value;switch(r&&(o=i64_sub(i64_new(0),o)),t.kind){case 0:if(i64_is_i8(o))return n.createI32(i64_low(o));break;case 1:if(i64_is_i16(o))return n.createI32(i64_low(o));break;case 2:if(i64_is_i32(o))return n.createI32(i64_low(o));break;case 5:if(i64_is_u8(o))return n.createI32(i64_low(o));break;case 6:if(i64_is_u16(o))return n.createI32(i64_low(o));break;case 7:if(i64_is_u32(o))return n.createI32(i64_low(o));break;case 10:if(i64_is_bool(o))return n.createI32(i64_low(o));break;case 4:case 9:if(!this.options.isWasm64){if(i64_is_u32(o))return n.createI32(i64_low(o));break}return n.createI64(i64_low(o),i64_high(o));case 3:case 8:return n.createI64(i64_low(o),i64_high(o));case 11:if(i64_is_f32(o))return n.createF32(i64_to_f32(o));break;case 12:if(i64_is_f64(o))return n.createF64(i64_to_f64(o));break;case 13:break;default:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),n.createUnreachable()}return i64_is_i32(o)?(this.currentType=d.Type.i32,n.createI32(i64_low(o))):(this.currentType=d.Type.i64,n.createI64(i64_low(o),i64_high(o)));case 2:return assert(!r),this.compileStaticString(e.value)}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),this.currentType=t,n.createUnreachable()},t.prototype.compileStaticString=function(e){var t=this.module,r=this.options,n=this.stringSegments,i=n.get(e);if(!i){var a=e.length,o=new Uint8Array(4+2*a);o[0]=255&a,o[1]=a>>>8&255,o[2]=a>>>16&255,o[3]=a>>>24&255;for(var s=0;s>>8&255;i=this.addMemorySegment(o,r.usizeType.byteSize),n.set(e,i)}var c=i.offset,p=this.program.types.get("string");return this.currentType=p||r.usizeType,r.isWasm64?t.createI64(i64_low(c),i64_high(c)):(assert(i64_is_i32(c)),t.createI32(i64_low(c)))},t.prototype.compileStaticArray=function(e,t,r){var n,i=!0,a=t.length,o=this.module,s=e.toNativeType();switch(s){case p.NativeType.I32:n=changetype(new Int32Array(a));break;case p.NativeType.I64:n=changetype(new Array(a));break;case p.NativeType.F32:n=changetype(new Float32Array(a));break;case p.NativeType.F64:n=changetype(new Float64Array(a));break;default:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,r.range),o.createUnreachable()}for(var u,l=new Array(a),h=0;h=0),o=this.compileExpression(a.targetExpression,this.options.usizeType,0),this.currentType=l.type,i.createLoad(l.type.size>>3,l.type.is(5),o,l.type.toNativeType(),l.memoryOffset);case u.ElementKind.PROPERTY:var _=l.getterPrototype;if(_){var y=_.resolve(null);if(!y)return i.createUnreachable();var g=y.signature;return this.checkCallSignature(g,0,y.is(u.ElementFlags.INSTANCE),e)?y.instanceMethodOf?(o=this.compileExpression(a.targetExpression,y.instanceMethodOf.type),this.currentType=g.returnType,this.compileCallDirect(y,[],e,o)):(this.currentType=g.returnType,this.compileCallDirect(y,[],e)):i.createUnreachable()}return this.error(c.DiagnosticCode.Property_0_does_not_exist_on_type_1,e.range,l.simpleName,l.parent.toString()),i.createUnreachable()}return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable()},t.prototype.compileTernaryExpression=function(e,t){var r=E(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.module,s=this.currentFunction,u=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,!1),h=this.currentType,_=!1;switch(e.operator){case l.Token.PLUS_PLUS:if(h.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),o.createUnreachable();switch(h.kind){case 0:case 1:case 5:case 6:case 10:_=!0;default:r=p.BinaryOp.AddI32,n=p.NativeType.I32,i=o.createI32(1);break;case 9:case 4:r=(y=this.options).isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,n=y.nativeSizeType,i=h.toNativeOne(o);break;case 3:case 8:r=p.BinaryOp.AddI64,n=p.NativeType.I64,i=o.createI64(1);break;case 11:r=p.BinaryOp.AddF32,n=p.NativeType.F32,i=o.createF32(1);break;case 12:r=p.BinaryOp.AddF64,n=p.NativeType.F64,i=o.createF64(1);break;case 13:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),o.createUnreachable()}break;case l.Token.MINUS_MINUS:if(h.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),o.createUnreachable();switch(h.kind){case 0:case 1:case 5:case 6:case 10:_=!0;default:r=p.BinaryOp.SubI32,n=p.NativeType.I32,i=o.createI32(1);break;case 9:case 4:var y;r=(y=this.options).isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,n=y.nativeSizeType,i=h.toNativeOne(o);break;case 3:case 8:r=p.BinaryOp.SubI64,n=p.NativeType.I64,i=o.createI64(1);break;case 11:r=p.BinaryOp.SubF32,n=p.NativeType.F32,i=o.createF32(1);break;case 12:r=p.BinaryOp.SubF64,n=p.NativeType.F64,i=o.createF64(1);break;case 13:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),o.createUnreachable()}break;default:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),o.createUnreachable()}var g=null;if(t==d.Type.void?a=o.createBinary(r,u,i):(g=s.getTempLocal(h),a=o.createBinary(r,this.module.createGetLocal(g.index,n),i)),_&&(assert(h.is(36)),a=m(a,h,o)),a=this.compileAssignmentWithValue(e.operand,a,!1),t==d.Type.void)return assert(!g),a;this.currentType=assert(g).type,s.freeTempLocal(g);var f=g.index;return o.createBlock(null,[o.createSetLocal(f,u),a,o.createGetLocal(f,n)],n)},t.prototype.compileUnaryPrefixExpression=function(e,t,r){void 0===r&&(r=!0);var n,i=this.module,a=this.currentType,o=!1,s=!1;switch(e.operator){case l.Token.PLUS:if(a.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();n=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,!1),o=(a=this.currentType).is(36);break;case l.Token.MINUS:if(a.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.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),(a=this.currentType).kind){case 0:case 1:case 5:case 6:case 10:o=!0;default:n=i.createBinary(p.BinaryOp.SubI32,i.createI32(0),n);break;case 9:if(a.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();case 4:n=i.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,a.toNativeZero(i),n);break;case 3:case 8:n=i.createBinary(p.BinaryOp.SubI64,i.createI64(0),n);break;case 11:n=i.createUnary(p.UnaryOp.NegF32,n);break;case 12:n=i.createUnary(p.UnaryOp.NegF64,n)}else n=this.compileLiteralExpression(e.operand,t,!0),this.options.sourceMap&&g(n,e.range,i,this.currentFunction),a=this.currentType;break;case l.Token.PLUS_PLUS:if(a.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();switch(s=!0,n=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,!1),(a=this.currentType).kind){case 0:case 1:case 5:case 6:case 10:o=!0;default:n=i.createBinary(p.BinaryOp.AddI32,n,this.module.createI32(1));break;case 9:if(a.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();case 4:n=i.createBinary(this.options.isWasm64?p.BinaryOp.AddI64:p.BinaryOp.AddI32,n,a.toNativeOne(i));break;case 3:case 8:n=i.createBinary(p.BinaryOp.AddI64,n,i.createI64(1));break;case 11:n=i.createBinary(p.BinaryOp.AddF32,n,i.createF32(1));break;case 12:n=i.createBinary(p.BinaryOp.AddF64,n,i.createF64(1))}break;case l.Token.MINUS_MINUS:if(a.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();switch(s=!0,n=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,!1),(a=this.currentType).kind){case 0:case 1:case 5:case 6:case 10:o=!0;default:n=i.createBinary(p.BinaryOp.SubI32,n,i.createI32(1));break;case 9:if(a.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();case 4:n=i.createBinary(this.options.isWasm64?p.BinaryOp.SubI64:p.BinaryOp.SubI32,n,a.toNativeOne(i));break;case 3:case 8:n=i.createBinary(p.BinaryOp.SubI64,n,i.createI64(1));break;case 11:n=i.createBinary(p.BinaryOp.SubF32,n,i.createF32(1));break;case 12:n=i.createBinary(p.BinaryOp.SubF64,n,i.createF64(1))}break;case l.Token.EXCLAMATION:n=f(n=this.compileExpression(e.operand,t==d.Type.void?d.Type.i32:t,0,!0),this.currentType,i),this.currentType=d.Type.bool;break;case l.Token.TILDE:if(a.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.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),(a=this.currentType).kind){case 0:case 1:case 5:case 6:case 10:o=!0;default:n=i.createBinary(p.BinaryOp.XorI32,n,i.createI32(-1));break;case 9:if(a.isReference)return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();case 4:n=i.createBinary(this.options.isWasm64?p.BinaryOp.XorI64:p.BinaryOp.XorI32,n,a.toNativeNegOne(i));break;case 3:case 8:n=i.createBinary(p.BinaryOp.XorI64,n,i.createI64(-1,-1))}break;case l.Token.TYPEOF:return this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable();default:return assert(!1),this.error(c.DiagnosticCode.Operation_not_supported,e.range),i.createUnreachable()}return o&&r&&(assert(a.is(36)),n=m(n,a,i)),s?this.compileAssignmentWithValue(e.operand,n,t!=d.Type.void):n},t}(c.DiagnosticEmitter);function g(e,t,r,n){var i=t.source;i.debugInfoIndex<0&&(i.debugInfoIndex=r.addDebugInfoFile(i.normalizedPath)),t.debugInfoRef=e,n.debugLocations||(n.debugLocations=[]),n.debugLocations.push(t)}function m(e,t,r){switch(t.kind){case 0:return r.createBinary(p.BinaryOp.ShrI32,r.createBinary(p.BinaryOp.ShlI32,e,r.createI32(24)),r.createI32(24));case 1:return r.createBinary(p.BinaryOp.ShrI32,r.createBinary(p.BinaryOp.ShlI32,e,r.createI32(16)),r.createI32(16));case 5:return r.createBinary(p.BinaryOp.AndI32,e,r.createI32(255));case 6:return r.createBinary(p.BinaryOp.AndI32,e,r.createI32(65535));case 10:return r.createBinary(p.BinaryOp.AndI32,e,r.createI32(1));default:return assert(!1),e}}function f(e,t,r){switch(t.kind){default:return r.createUnary(p.UnaryOp.EqzI32,e);case 3:case 8:return r.createUnary(p.UnaryOp.EqzI64,e);case 9:case 4:return r.createUnary(64==t.size?p.UnaryOp.EqzI64:p.UnaryOp.EqzI32,e);case 11:return r.createBinary(p.BinaryOp.EqF32,e,r.createF32(0));case 12:return r.createBinary(p.BinaryOp.EqF64,e,r.createF64(0));case 13:return assert(!1),r.createI32(1)}}function E(e,t,r){switch(t.kind){default:return e;case 3:case 8:return r.createBinary(p.BinaryOp.NeI64,e,r.createI64(0));case 9:case 4:return 64==t.size?r.createBinary(p.BinaryOp.NeI64,e,r.createI64(0)):e;case 11:return r.createBinary(p.BinaryOp.NeF32,e,r.createF32(0));case 12:return r.createBinary(p.BinaryOp.NeF64,e,r.createF64(0));case 13:return assert(!1),r.createI32(0)}}t.Compiler=y,t.makeSmallIntegerWrap=m,t.makeIsFalseish=f,t.makeIsTrueish=E},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;_=!0}n=p.Node.createType(h,d,_,e.range(a,e.pos))}for(;e.skip(o.Token.OPENBRACKET);){var g=e.tokenPos;if(!e.skip(o.Token.CLOSEBRACKET))return r||this.error(s.DiagnosticCode._0_expected,e.range(),"]"),null;var m=e.range(g,e.pos);_=!1;if(e.skip(o.Token.BAR)){if(!e.skip(o.Token.NULL))return r||this.error(s.DiagnosticCode._0_expected,e.range(),"null"),null;_=!0}if(n=p.Node.createType(p.Node.createIdentifierExpression("Array",m),[n],_,e.range(a,e.pos)),_)break}return n},t.prototype.tryParseSignature=function(e){var t,r=e.mark(),n=e.tokenPos,i=null,a=null,c=!1;if(e.skip(o.Token.CLOSEPAREN))c=!0,e.discard(r),i=[];else{c=!1;do{var u=p.ParameterKind.DEFAULT;if(e.skip(o.Token.DOT_DOT_DOT)&&(c=!0,e.discard(r),u=p.ParameterKind.REST),e.skip(o.Token.THIS)){if(!e.skip(o.Token.COLON))return e.reset(r),this.tryParseSignatureIsSignature=!1,null;c=!0,e.discard(r);var l=this.parseType(e,!1);if(!l)return null;if(l.kind!=p.NodeKind.TYPE)return this.error(s.DiagnosticCode.Operation_not_supported,l.range),this.tryParseSignatureIsSignature=!0,null;a=l}else{if(!e.skip(o.Token.IDENTIFIER))return c?this.error(s.DiagnosticCode.Identifier_expected,e.range()):e.reset(r),this.tryParseSignatureIsSignature=c,null;var h=p.Node.createIdentifierExpression(e.readIdentifier(),e.range(e.tokenPos,e.pos));if(e.skip(o.Token.QUESTION)&&(c=!0,e.discard(r),u==p.ParameterKind.REST?this.error(s.DiagnosticCode.A_rest_parameter_cannot_be_optional,e.range()):u=p.ParameterKind.OPTIONAL),e.skip(o.Token.COLON)){c=!0,e.discard(r);var d=this.parseType(e);if(!d)return this.tryParseSignatureIsSignature=c,null;var _=new p.ParameterNode;_.parameterKind=u,_.name=h,_.type=d,i?i.push(_):i=[_]}else c&&this.error(s.DiagnosticCode.Type_expected,e.range())}}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(),")"),this.tryParseSignatureIsSignature=c,null}return e.skip(o.Token.EQUALS_GREATERTHAN)?(c=!0,e.discard(r),(t=this.parseType(e))?(this.tryParseSignatureIsSignature=!0,p.Node.createSignature(i||[],t,a,!1,e.range(n,e.pos))):(this.tryParseSignatureIsSignature=c,null)):(c?this.error(s.DiagnosticCode._0_expected,e.range(),"=>"):e.reset(r),this.tryParseSignatureIsSignature=c,null)},t.prototype.parseDecorator=function(e){var t=e.tokenPos;if(e.skip(o.Token.IDENTIFIER)){for(var r=e.readIdentifier(),n=p.Node.createIdentifierExpression(r,e.range(t,e.pos));e.skip(o.Token.DOT);){if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;r=e.readIdentifier(),n=p.Node.createPropertyAccessExpression(n,p.Node.createIdentifierExpression(r,e.range()),e.range(t,e.pos))}var i=void 0;if(!e.skip(o.Token.OPENPAREN))return p.Node.createDecorator(n,null,e.range(t,e.pos));if(i=this.parseArguments(e))return p.Node.createDecorator(n,i,e.range(t,e.pos))}else this.error(s.DiagnosticCode.Identifier_expected,e.range());return null},t.prototype.parseVariable=function(e,t,r){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;if(e.skip(o.Token.EXTENDS)){var n=this.parseType(e);if(!n)return null;if(n.kind!=p.NodeKind.TYPE)return this.error(s.DiagnosticCode.Operation_not_supported,n.range),null;r=n}return p.Node.createTypeParameter(t,r,o.Range.join(t.range,e.range()))}return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseParameters=function(e){var t=new Array,r=null,n=!1,i=!1;if(e.peek()!=o.Token.CLOSEPAREN)do{var a=this.parseParameter(e);if(!a)return null;switch(r&&!i&&(this.error(s.DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,r.name.range),i=!0),a.parameterKind){default:n&&this.error(s.DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,a.name.range);break;case p.ParameterKind.OPTIONAL:n=!0;break;case p.ParameterKind.REST:r=a}t.push(a)}while(e.skip(o.Token.COMMA));return e.skip(o.Token.CLOSEPAREN)?t:(this.error(s.DiagnosticCode._0_expected,e.range(),")"),null)},t.prototype.parseParameter=function(e,t){void 0===t&&(t=!1);var r=!1,n=!1,i=null;if(e.skip(o.Token.DOT_DOT_DOT)&&(r=!0,i=e.range()),e.skip(o.Token.IDENTIFIER)){r||(i=e.range());var a=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),c=null;if((n=e.skip(o.Token.QUESTION))&&r&&this.error(s.DiagnosticCode.A_rest_parameter_cannot_be_optional,a.range),e.skip(o.Token.COLON)&&!(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=-1,c=null;if(e.skip(o.Token.LESSTHAN)&&(a=e.tokenPos,!(c=this.parseTypeParameters(e))))return null;if(!e.skip(o.Token.OPENPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"("),null;a<0&&(a=e.tokenPos);var u=this.parseParameters(e);if(!u)return null;var l=p.hasModifier(p.ModifierKind.SET,t);l&&(1!=u.length&&this.error(s.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,i.range),u.length&&u[0].initializer&&this.error(s.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,i.range)),p.hasModifier(p.ModifierKind.GET,t)&&u.length&&this.error(s.DiagnosticCode.A_get_accessor_cannot_have_parameters,i.range);var h=null;if(e.skip(o.Token.COLON)&&!(h=this.parseType(e,l)))return null;h||(h=p.Node.createOmittedType(e.range(e.pos)),l||this.error(s.DiagnosticCode.Type_expected,h.range));var d=p.Node.createSignature(u,h,null,!1,e.range(a,e.pos)),_=p.hasModifier(p.ModifierKind.DECLARE,t),y=null;if(e.skip(o.Token.OPENBRACE)){if(_&&this.error(s.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,e.range()),!(y=this.parseBlockStatement(e,!1)))return null}else _||this.error(s.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,e.range(e.pos));var g=p.Node.createFunctionDeclaration(i,c,d,y,t,r,e.range(n,e.pos));return e.skip(o.Token.SEMICOLON),g},t.prototype.parseFunctionExpression=function(e){var t,r=e.tokenPos,n=!1;if(e.token==o.Token.FUNCTION){if(t=e.skip(o.Token.IDENTIFIER)?p.Node.createIdentifierExpression(e.readIdentifier(),e.range()):p.Node.createEmptyIdentifierExpression(e.range(e.pos)),!e.skip(o.Token.OPENPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"("),null}else n=!0,assert(e.token==o.Token.OPENPAREN),t=p.Node.createEmptyIdentifierExpression(e.range(e.tokenPos));var i=e.pos,a=this.parseParameters(e);return a?this.parseFunctionExpressionCommon(e,t,a,n,r,i):null},t.prototype.parseFunctionExpressionCommon=function(e,t,r,n,i,a){void 0===i&&(i=-1),void 0===a&&(a=-1),i<0&&(i=t.range.start),a<0&&(a=i);var c=null;if(e.skip(o.Token.COLON)){if(!(c=this.parseType(e)))return null}else c=p.Node.createOmittedType(e.range(e.pos)),this.error(s.DiagnosticCode.Type_expected,c.range);if(n&&!e.skip(o.Token.EQUALS_GREATERTHAN))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"=>"),null;var u,l=p.Node.createSignature(r,c,null,!1,e.range(a,e.pos));if(n)u=this.parseStatement(e,!1);else{if(!e.skip(o.Token.OPENBRACE))return this.error(s.DiagnosticCode._0_expected,e.range(e.pos),"{"),null;u=this.parseBlockStatement(e,!1)}if(!u)return null;var h=p.Node.createFunctionDeclaration(t,null,l,u,null,null,e.range(i,e.pos));return p.Node.createFunctionExpression(h,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=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),a=void 0;if(e.skip(o.Token.LESSTHAN)){if(!(a=this.parseTypeParameters(e)))return null}else a=[];var c=null;if(e.skip(o.Token.EXTENDS)){var u=this.parseType(e);if(!u)return null;if(u.kind!=p.NodeKind.TYPE)return this.error(s.DiagnosticCode.Operation_not_supported,u.range),null;c=u}var l=new Array;if(e.skip(o.Token.IMPLEMENTS))do{var h=this.parseType(e);if(!h)return null;l.push(h)}while(e.skip(o.Token.COMMA));if(e.skip(o.Token.OPENBRACE)){var d=new Array;if(!e.skip(o.Token.CLOSEBRACE)){var _=p.hasModifier(p.ModifierKind.DECLARE,t);do{var y=this.parseClassMember(e,_);if(!y)return null;d.push(y)}while(!e.skip(o.Token.CLOSEBRACE))}return p.Node.createClassDeclaration(i,a,c,l,d,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));var c=e.mark(),u=!1,l=!1;(u=e.skip(o.Token.GET))?e.peek(!0,!0)!=o.Token.IDENTIFIER||e.nextTokenOnNewLine?(e.reset(c),u=!1):a=p.addModifier(p.Node.createModifier(p.ModifierKind.GET,e.range()),a):(l=e.skip(o.Token.SET))&&(e.peek(!0,!0)!=o.Token.IDENTIFIER||e.nextTokenOnNewLine?(e.reset(c),l=!1):a=p.addModifier(p.Node.createModifier(p.ModifierKind.SET,e.range()),a));var h=e.skip(o.Token.CONSTRUCTOR);if(h||e.skip(o.Token.IDENTIFIER)){var d=h?p.Node.createConstructorExpression(e.range()):p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),_=null;if(e.skip(o.Token.LESSTHAN)&&(h&&this.error(s.DiagnosticCode.Type_parameters_cannot_appear_on_a_constructor_declaration,e.range()),!(_=this.parseTypeParameters(e))))return null;if(e.skip(o.Token.OPENPAREN)){var y=e.tokenPos,g=this.parseParameters(e);if(!g)return null;u&&g.length&&this.error(s.DiagnosticCode.A_get_accessor_cannot_have_parameters,d.range),l&&(1!=g.length&&this.error(s.DiagnosticCode.A_set_accessor_must_have_exactly_one_parameter,d.range),g.length&&g[0].initializer&&this.error(s.DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,d.range));var m=null;if(e.skip(o.Token.COLON)){if(d.kind==p.NodeKind.CONSTRUCTOR?this.error(s.DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration,e.range()):l&&this.error(s.DiagnosticCode.A_set_accessor_cannot_have_a_return_type_annotation,e.range()),!(m=this.parseType(e,d.kind==p.NodeKind.CONSTRUCTOR||l)))return null}else m=p.Node.createOmittedType(e.range(e.pos)),l||d.kind==p.NodeKind.CONSTRUCTOR||this.error(s.DiagnosticCode.Type_expected,m.range);var f=p.Node.createSignature(g,m,null,!1,e.range(y,e.pos)),E=null;if(e.skip(o.Token.OPENBRACE)){if(t&&this.error(s.DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,e.range()),!(E=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 T=p.Node.createMethodDeclaration(d,_,f,E,a,n,e.range(r,e.pos));return e.skip(o.Token.SEMICOLON),T}if(h)this.error(s.DiagnosticCode.Constructor_implementation_is_missing,d.range);else{if(!u&&!l){var A=void 0;(A=p.getModifier(p.ModifierKind.ABSTRACT,a))&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,A.range,"abstract"),(A=p.getModifier(p.ModifierKind.GET,a))&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,A.range,"get"),(A=p.getModifier(p.ModifierKind.SET,a))&&this.error(s.DiagnosticCode._0_modifier_cannot_be_used_here,A.range,"set");var I=null;if(e.skip(o.Token.COLON)){if(!(I=this.parseType(e)))return null}else this.error(s.DiagnosticCode.Type_expected,e.range());var v=null;if(e.skip(o.Token.EQUALS)&&!(v=this.parseExpression(e)))return null;var N=p.Node.createFieldDeclaration(d,I,v,a,n,e.range(r,e.pos));return e.skip(o.Token.SEMICOLON),N}this.error(s.DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,d.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=p.Node.createStringLiteralExpression(e.readString(),e.range()),u=void 0;return n?(assert(!r),u=p.Node.createImportStatementWithWildcard(n,c,e.range(t,e.pos))):u=p.Node.createImportStatement(r,c,e.range(t,e.pos)),this.seenlog.has(u.normalizedPath)||(this.backlog.push(u.normalizedPath),this.seenlog.add(u.normalizedPath)),e.skip(o.Token.SEMICOLON),u}this.error(s.DiagnosticCode.String_literal_expected,e.range())}else this.error(s.DiagnosticCode._0_expected,e.range(),"from");return null},t.prototype.parseImportDeclaration=function(e){if(e.skip(o.Token.IDENTIFIER)){var t=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),r=null;if(e.skip(o.Token.AS)){if(!e.skip(o.Token.IDENTIFIER))return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null;r=p.Node.createIdentifierExpression(e.readIdentifier(),e.range())}return p.Node.createImportDeclaration(t,r,r?o.Range.join(t.range,r.range):t.range)}return this.error(s.DiagnosticCode.Identifier_expected,e.range()),null},t.prototype.parseExportImport=function(e,t){if(e.skip(o.Token.IDENTIFIER)){var r=p.Node.createIdentifierExpression(e.readIdentifier(),e.range());if(e.skip(o.Token.EQUALS)){if(e.skip(o.Token.IDENTIFIER)){var n=p.Node.createIdentifierExpression(e.readIdentifier(),e.range()),i=p.Node.createExportImportStatement(n,r,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){void 0===t&&(t=!1);var r=e.mark();switch(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);case o.Token.VOID:return this.parseVoidStatement(e);case o.Token.WHILE:return this.parseWhileStatement(e);default:return e.reset(r),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()),a=null;if(e.skip(o.Token.LESSTHAN)&&!(a=this.parseTypeParameters(e)))return null;if(e.skip(o.Token.EQUALS)){var c=this.parseType(e);if(!c)return null;var u=p.Node.createTypeDeclaration(i,a,c,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.parseVoidStatement=function(e){var t=e.tokenPos,r=this.parseExpression(e,20);if(!r)return null;var n=p.Node.createVoidStatement(r,e.range(t,e.pos));return e.skip(o.Token.SEMICOLON),n},t.prototype.parseWhileStatement=function(e){var t=e.tokenPos;if(e.skip(o.Token.OPENPAREN)){var r=this.parseExpression(e);if(!r)return null;if(e.skip(o.Token.CLOSEPAREN)){var n=this.parseStatement(e);if(!n)return null;var i=p.Node.createWhileStatement(r,n,e.range(t,e.pos));return e.skip(o.Token.SEMICOLON),i}this.error(s.DiagnosticCode._0_expected,e.range(),")")}else this.error(s.DiagnosticCode._0_expected,e.range(),"(");return null},t.prototype.parseExpressionStart=function(e){var t=e.next(!0),r=e.tokenPos,n=null;if(t==o.Token.NULL)return p.Node.createNullExpression(e.range());if(t==o.Token.TRUE)return p.Node.createTrueExpression(e.range());if(t==o.Token.FALSE)return p.Node.createFalseExpression(e.range());var i=function(e){switch(e){case o.Token.DOT_DOT_DOT:return 1;case o.Token.YIELD:return 2;case o.Token.EXCLAMATION:case o.Token.TILDE:case o.Token.PLUS:case o.Token.MINUS:case o.Token.PLUS_PLUS:case o.Token.MINUS_MINUS:case o.Token.TYPEOF:case o.Token.VOID:case o.Token.DELETE:return 16;case o.Token.NEW:return 19;default:return-1}}(t);if(-1!=i){var a=void 0;return t==o.Token.NEW?(a=this.parseExpression(e,18))?a.kind==p.NodeKind.CALL?p.Node.createNewExpression(a.expression,a.typeArguments,a.arguments,e.range(r,e.pos)):(this.error(s.DiagnosticCode.Operation_not_supported,e.range()),null):null:(a=this.parseExpression(e,i))?(t!=o.Token.PLUS_PLUS&&t!=o.Token.MINUS_MINUS||a.kind!=p.NodeKind.IDENTIFIER&&a.kind!=p.NodeKind.ELEMENTACCESS&&a.kind!=p.NodeKind.PROPERTYACCESS&&this.error(s.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,a.range),p.Node.createUnaryPrefixExpression(t,a,e.range(r,e.pos))):null}switch(t){case o.Token.OPENPAREN:if(e.skip(o.Token.CLOSEPAREN))return this.parseFunctionExpressionCommon(e,p.Node.createEmptyIdentifierExpression(e.range(r)),[],!0);var c=e.mark(),u=!0;do{switch(e.next(!0)){case o.Token.DOT_DOT_DOT:return e.reset(c),this.parseFunctionExpression(e);case o.Token.IDENTIFIER:switch(e.readIdentifier(),e.next()){case o.Token.CLOSEPAREN:if(!e.skip(o.Token.EQUALS_GREATERTHAN)){u=!1;break}case o.Token.QUESTION:case o.Token.COLON:return e.reset(c),this.parseFunctionExpression(e);case o.Token.COMMA:break;default:u=!1}break;default:u=!1}}while(u);return e.reset(c),(n=this.parseExpression(e))?e.skip(o.Token.CLOSEPAREN)?p.Node.createParenthesizedExpression(n,e.range(r,e.pos)):(this.error(s.DiagnosticCode._0_expected,e.range(),")"),null):null;case o.Token.OPENBRACKET:var l=new Array;if(!e.skip(o.Token.CLOSEBRACKET)){do{if(e.peek()==o.Token.COMMA)n=null;else if(!(n=this.parseExpression(e,1)))return null;if(l.push(n),e.peek()==o.Token.CLOSEBRACKET)break}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEBRACKET))return this.error(s.DiagnosticCode._0_expected,e.range(),"]"),null}return p.Node.createArrayLiteralExpression(l,e.range(r,e.pos));case o.Token.LESSTHAN:var h=this.parseType(e);return h?e.skip(o.Token.GREATERTHAN)?(n=this.parseExpression(e,18))?p.Node.createAssertionExpression(0,n,h,e.range(r,e.pos)):null:(this.error(s.DiagnosticCode._0_expected,e.range(),">"),null):null;case o.Token.IDENTIFIER:return p.Node.createIdentifierExpression(e.readIdentifier(),e.range(r,e.pos));case o.Token.THIS:return p.Node.createThisExpression(e.range(r,e.pos));case o.Token.CONSTRUCTOR:return p.Node.createConstructorExpression(e.range(r,e.pos));case o.Token.SUPER:return p.Node.createSuperExpression(e.range(r,e.pos));case o.Token.STRINGLITERAL:return p.Node.createStringLiteralExpression(e.readString(),e.range(r,e.pos));case o.Token.INTEGERLITERAL:return p.Node.createIntegerLiteralExpression(e.readInteger(),e.range(r,e.pos));case o.Token.FLOATLITERAL:return p.Node.createFloatLiteralExpression(e.readFloat(),e.range(r,e.pos));case o.Token.SLASH:var d=e.readRegexpPattern();return e.skip(o.Token.SLASH)?p.Node.createRegexpLiteralExpression(d,e.readRegexpFlags(),e.range(r,e.pos)):(this.error(s.DiagnosticCode._0_expected,e.range(),"/"),null);case o.Token.FUNCTION:return this.parseFunctionExpression(e);default:return this.error(s.DiagnosticCode.Expression_expected,e.range()),null}},t.prototype.tryParseTypeArgumentsBeforeArguments=function(e){var t=e.mark();if(!e.skip(o.Token.LESSTHAN))return null;var r=new Array;do{var n=this.parseType(e,!0,!0);if(!n)return e.reset(t),null;r.push(n)}while(e.skip(o.Token.COMMA));return e.skip(o.Token.GREATERTHAN)&&e.skip(o.Token.OPENPAREN)?r:(e.reset(t),null)},t.prototype.parseArguments=function(e){var t=new Array;if(!e.skip(o.Token.CLOSEPAREN)){do{var r=this.parseExpression(e,1);if(!r)return null;t.push(r)}while(e.skip(o.Token.COMMA));if(!e.skip(o.Token.CLOSEPAREN))return this.error(s.DiagnosticCode._0_expected,e.range(),")"),null}return t},t.prototype.parseExpression=function(e,t){void 0===t&&(t=0);var r=this.parseExpressionStart(e);if(!r)return null;for(var n,i,a=r.range.start;(n=this.tryParseTypeArgumentsBeforeArguments(e))||e.skip(o.Token.OPENPAREN);){var c=this.parseArguments(e);if(!c)return null;r=p.Node.createCallExpression(r,n,c,e.range(a,e.pos))}for(var u,d=null;(u=l(i=e.peek()))>=t;)switch(e.next(),i){case o.Token.AS:var _=this.parseType(e);if(!_)return null;r=p.Node.createAssertionExpression(1,r,_,e.range(a,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(a,e.pos));break;case o.Token.PLUS_PLUS:case o.Token.MINUS_MINUS:r.kind!=p.NodeKind.IDENTIFIER&&r.kind!=p.NodeKind.ELEMENTACCESS&&r.kind!=p.NodeKind.PROPERTYACCESS&&this.error(s.DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,r.range),r=p.Node.createUnaryPostfixExpression(i,r,e.range(a,e.pos));break;case o.Token.QUESTION:var y=this.parseExpression(e);if(!y)return null;if(!e.skip(o.Token.COLON))return this.error(s.DiagnosticCode._0_expected,e.range(),":"),null;var g=this.parseExpression(e);if(!g)return null;r=p.Node.createTernaryExpression(r,y,g,e.range(a,e.pos));break;case o.Token.COMMA:var m=[r];do{if(!(r=this.parseExpression(e,1)))return null;m.push(r)}while(e.skip(o.Token.COMMA));r=p.Node.createCommaExpression(m,e.range(a,e.pos));break;default:if(!(d=this.parseExpression(e,h(i)?u:u+1)))return null;if(i==o.Token.DOT)if(d.kind==p.NodeKind.IDENTIFIER)r=p.Node.createPropertyAccessExpression(r,d,e.range(a,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(a,e.pos)),r=f}else r=p.Node.createBinaryExpression(i,r,d,e.range(a,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:m;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 m;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=m,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(E)},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 m;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 m;if(this.eq(N))return e.isOdd()?N:m;if(e.eq(N))return this.isOdd()?N:m;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(g)&&e.lt(g))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,E=0;return f+=(E+=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|(E&=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:m;if(this.unsigned){if(e.unsigned||(e=e.toUnsigned()),e.gt(this))return f;if(e.gt(this.shru(1)))return T;a=f}else{if(this.eq(N))return e.eq(E)||e.eq(A)?N:e.eq(N)?E:(t=this.shr(1).div(e).shl(1)).eq(m)?e.isNegative()?E:A:(n=this.sub(e.mul(t)),a=t.add(n.div(e)));else if(e.eq(N))return this.unsigned?f:m;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=m}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=E),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.program,i=e.module,c=n.types.get("string");if(!c)return i.createUnreachable();var p=n.elements.get("abort");if(!p||p.kind!=s.ElementKind.FUNCTION_PROTOTYPE)return i.createUnreachable();var u=p.resolve();if(!u||!e.compileFunction(u))return i.createUnreachable();var l=null!=t?e.compileExpression(t,c):c.toNativeZero(i),h=e.compileStaticString(r.range.source.normalizedPath);return e.currentType=a.Type.void,i.createBlock(null,[i.createCallImport(u.internalName,[l,h,i.createI32(r.range.line),i.createI32(r.range.column)],o.NativeType.None),i.createUnreachable()])}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,g,m,f,E,T=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)),T.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)),T.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(e.currentType.kind){case 11:g=e.currentFunction.getAndFreeTempLocal(a.Type.f32),y=T.createBinary(o.BinaryOp.NeF32,T.createTeeLocal(g.index,h),T.createGetLocal(g.index,o.NativeType.F32));break;case 12:g=e.currentFunction.getAndFreeTempLocal(a.Type.f64),y=T.createBinary(o.BinaryOp.NeF64,T.createTeeLocal(g.index,h),T.createGetLocal(g.index,o.NativeType.F64));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.createUnreachable();break;default:y=T.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)),T.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)),T.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.f64,0);switch(e.currentType.kind){case 11:g=e.currentFunction.getAndFreeTempLocal(a.Type.f32),y=T.createSelect(T.createBinary(o.BinaryOp.NeF32,T.createUnary(o.UnaryOp.AbsF32,T.createTeeLocal(g.index,h)),T.createF32(1/0)),T.createI32(0),T.createBinary(o.BinaryOp.EqF32,T.createGetLocal(g.index,o.NativeType.F32),T.createGetLocal(g.index,o.NativeType.F32)));break;case 12:g=e.currentFunction.getAndFreeTempLocal(a.Type.f64),y=T.createSelect(T.createBinary(o.BinaryOp.NeF64,T.createUnary(o.UnaryOp.AbsF64,T.createTeeLocal(g.index,h)),T.createF64(1/0)),T.createI32(0),T.createBinary(o.BinaryOp.EqF64,T.createGetLocal(g.index,o.NativeType.F64),T.createGetLocal(g.index,o.NativeType.F64)));break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.createUnreachable();break;default:y=T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.i32,0);switch(e.currentType.kind){default:y=T.createUnary(o.UnaryOp.ClzI32,h);break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.createUnreachable();break}case 4:y=T.createUnary(e.options.isWasm64?o.UnaryOp.ClzI64:o.UnaryOp.ClzI32,h);break;case 3:case 8:y=T.createUnary(o.UnaryOp.ClzI64,h);break;case 11:case 12:case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.i32,0);switch(e.currentType.kind){default:y=T.createUnary(o.UnaryOp.CtzI32,h);break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.createUnreachable();break}case 4:y=T.createUnary(e.options.isWasm64?o.UnaryOp.CtzI64:o.UnaryOp.CtzI32,h);break;case 3:case 8:y=T.createUnary(o.UnaryOp.CtzI64,h);break;case 11:case 12:case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.createUnreachable();h=e.compileExpression(s[0],r[0])}else h=e.compileExpression(s[0],a.Type.i32,0);switch(e.currentType.kind){default:y=T.createUnary(o.UnaryOp.PopcntI32,h);break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.createUnreachable();break}case 4:y=T.createUnary(e.options.isWasm64?o.UnaryOp.PopcntI64:o.UnaryOp.PopcntI32,h);break;case 3:case 8:y=T.createUnary(o.UnaryOp.PopcntI64,h);break;case 11:case 12:case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.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(T.createBinary(o.BinaryOp.RotlI32,h,d),e.currentType,T);case 2:case 7:y=T.createBinary(o.BinaryOp.RotlI32,h,d);break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.createUnreachable();break}case 4:y=T.createBinary(e.options.isWasm64?o.BinaryOp.RotlI64:o.BinaryOp.RotlI32,h,d);break;case 3:case 8:y=T.createBinary(o.BinaryOp.RotlI64,h,d);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.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(T.createBinary(o.BinaryOp.RotrI32,h,d),e.currentType,T);break;case 2:case 7:y=T.createBinary(o.BinaryOp.RotrI32,h,d);break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.createUnreachable();break}case 4:y=T.createBinary(e.options.isWasm64?o.BinaryOp.RotrI64:o.BinaryOp.RotrI32,h,d);break;case 3:case 8:y=T.createBinary(o.BinaryOp.RotrI64,h,d);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.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:g=e.currentFunction.getAndFreeTempLocal(a.Type.i32),y=T.createSelect(T.createTeeLocal(g.index,h),T.createBinary(o.BinaryOp.SubI32,T.createI32(0),T.createGetLocal(g.index,o.NativeType.I32)),T.createBinary(o.BinaryOp.GtI32,T.createGetLocal(g.index,o.NativeType.I32),T.createI32(0)));break;case 4:g=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),y=T.createSelect(T.createTeeLocal(g.index,h),T.createBinary(e.options.isWasm64?o.BinaryOp.SubI64:o.BinaryOp.SubI32,e.options.usizeType.toNativeZero(T),T.createGetLocal(g.index,e.options.nativeSizeType)),T.createBinary(e.options.isWasm64?o.BinaryOp.GtI64:o.BinaryOp.GtI32,T.createGetLocal(g.index,e.options.nativeSizeType),e.options.usizeType.toNativeZero(T)));break;case 3:g=e.currentFunction.getAndFreeTempLocal(a.Type.i64),y=T.createSelect(T.createTeeLocal(g.index,h),T.createBinary(o.BinaryOp.SubI64,T.createI64(0,0),T.createGetLocal(g.index,o.NativeType.I64)),T.createBinary(o.BinaryOp.GtI64,T.createGetLocal(g.index,o.NativeType.I64),T.createI64(0,0)));break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.createUnreachable();break}case 5:case 6:case 7:case 8:case 10:y=h;break;case 11:y=T.createUnary(o.UnaryOp.AbsF32,h);break;case 12:y=T.createUnary(o.UnaryOp.AbsF64,h);break;case 13:y=T.createUnreachable();break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.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:g=e.currentFunction.getTempLocal(a.Type.i32),m=e.currentFunction.getAndFreeTempLocal(a.Type.i32),e.currentFunction.freeTempLocal(g),y=T.createSelect(T.createTeeLocal(g.index,h),T.createTeeLocal(m.index,d),T.createBinary(o.BinaryOp.GtI32,T.createGetLocal(g.index,o.NativeType.I32),T.createGetLocal(m.index,o.NativeType.I32)));break;case 5:case 6:case 7:case 10:g=e.currentFunction.getTempLocal(a.Type.i32),m=e.currentFunction.getAndFreeTempLocal(a.Type.i32),e.currentFunction.freeTempLocal(g),y=T.createSelect(T.createTeeLocal(g.index,h),T.createTeeLocal(m.index,d),T.createBinary(o.BinaryOp.GtU32,T.createGetLocal(g.index,o.NativeType.I32),T.createGetLocal(m.index,o.NativeType.I32)));break;case 3:g=e.currentFunction.getTempLocal(a.Type.i64),m=e.currentFunction.getAndFreeTempLocal(a.Type.i64),e.currentFunction.freeTempLocal(g),y=T.createSelect(T.createTeeLocal(g.index,h),T.createTeeLocal(m.index,d),T.createBinary(o.BinaryOp.GtI64,T.createGetLocal(g.index,o.NativeType.I64),T.createGetLocal(m.index,o.NativeType.I64)));break;case 8:g=e.currentFunction.getTempLocal(a.Type.i64),m=e.currentFunction.getAndFreeTempLocal(a.Type.i64),e.currentFunction.freeTempLocal(g),y=T.createSelect(T.createTeeLocal(g.index,h),T.createTeeLocal(m.index,d),T.createBinary(o.BinaryOp.GtU64,T.createGetLocal(g.index,o.NativeType.I64),T.createGetLocal(m.index,o.NativeType.I64)));break;case 4:g=e.currentFunction.getTempLocal(e.options.usizeType),m=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(g),y=T.createSelect(T.createTeeLocal(g.index,h),T.createTeeLocal(m.index,d),T.createBinary(e.options.isWasm64?o.BinaryOp.GtI64:o.BinaryOp.GtI32,T.createGetLocal(g.index,e.options.nativeSizeType),T.createGetLocal(m.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.createUnreachable();break}g=e.currentFunction.getTempLocal(e.options.usizeType),m=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(g),y=T.createSelect(T.createTeeLocal(g.index,h),T.createTeeLocal(m.index,d),T.createBinary(e.options.isWasm64?o.BinaryOp.GtU64:o.BinaryOp.GtU32,T.createGetLocal(g.index,e.options.nativeSizeType),T.createGetLocal(m.index,e.options.nativeSizeType)));break;case 11:y=T.createBinary(o.BinaryOp.MaxF32,h,d);break;case 12:y=T.createBinary(o.BinaryOp.MaxF64,h,d);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.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:g=e.currentFunction.getTempLocal(a.Type.i32),m=e.currentFunction.getAndFreeTempLocal(a.Type.i32),e.currentFunction.freeTempLocal(g),y=T.createSelect(T.createTeeLocal(g.index,h),T.createTeeLocal(m.index,d),T.createBinary(o.BinaryOp.LtI32,T.createGetLocal(g.index,o.NativeType.I32),T.createGetLocal(m.index,o.NativeType.I32)));break;case 5:case 6:case 7:case 10:g=e.currentFunction.getTempLocal(a.Type.i32),m=e.currentFunction.getAndFreeTempLocal(a.Type.i32),e.currentFunction.freeTempLocal(g),y=T.createSelect(T.createTeeLocal(g.index,h),T.createTeeLocal(m.index,d),T.createBinary(o.BinaryOp.LtU32,T.createGetLocal(g.index,o.NativeType.I32),T.createGetLocal(m.index,o.NativeType.I32)));break;case 3:g=e.currentFunction.getTempLocal(a.Type.i64),m=e.currentFunction.getAndFreeTempLocal(a.Type.i64),e.currentFunction.freeTempLocal(g),y=T.createSelect(T.createTeeLocal(g.index,h),T.createTeeLocal(m.index,d),T.createBinary(o.BinaryOp.LtI64,T.createGetLocal(g.index,o.NativeType.I64),T.createGetLocal(m.index,o.NativeType.I64)));break;case 8:g=e.currentFunction.getTempLocal(a.Type.i64),m=e.currentFunction.getAndFreeTempLocal(a.Type.i64),e.currentFunction.freeTempLocal(g),y=T.createSelect(T.createTeeLocal(g.index,h),T.createTeeLocal(m.index,d),T.createBinary(o.BinaryOp.LtU64,T.createGetLocal(g.index,o.NativeType.I64),T.createGetLocal(m.index,o.NativeType.I64)));break;case 4:g=e.currentFunction.getTempLocal(e.options.usizeType),m=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(g),y=T.createSelect(T.createTeeLocal(g.index,h),T.createTeeLocal(m.index,d),T.createBinary(e.options.isWasm64?o.BinaryOp.LtI64:o.BinaryOp.LtI32,T.createGetLocal(g.index,e.options.nativeSizeType),T.createGetLocal(m.index,e.options.nativeSizeType)));break;case 9:if(e.currentType.isReference){e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.createUnreachable();break}g=e.currentFunction.getTempLocal(e.options.usizeType),m=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),e.currentFunction.freeTempLocal(g),y=T.createSelect(T.createTeeLocal(g.index,h),T.createTeeLocal(m.index,d),T.createBinary(e.options.isWasm64?o.BinaryOp.LtU64:o.BinaryOp.LtU32,T.createGetLocal(g.index,e.options.nativeSizeType),T.createGetLocal(m.index,e.options.nativeSizeType)));break;case 11:y=T.createBinary(o.BinaryOp.MinF32,h,d);break;case 12:y=T.createBinary(o.BinaryOp.MinF64,h,d);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.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=T.createUnreachable();break}default:y=h;break;case 11:y=T.createUnary(o.UnaryOp.CeilF32,h);break;case 12:y=T.createUnary(o.UnaryOp.CeilF64,h);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.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=T.createUnreachable();break}default:y=h;break;case 11:y=T.createUnary(o.UnaryOp.FloorF32,h);break;case 12:y=T.createUnary(o.UnaryOp.FloorF64,h);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.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=T.createBinary(o.BinaryOp.CopysignF32,h,d);break;case 12:y=T.createBinary(o.BinaryOp.CopysignF64,h,d);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.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=T.createUnreachable();break}default:y=h;break;case 11:y=T.createUnary(o.UnaryOp.NearestF32,h);break;case 12:y=T.createUnary(o.UnaryOp.NearestF64,h);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(!r||1!=r.length)return r&&r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0"),T.createUnreachable();switch(r[0].kind){case 2:case 7:h=e.compileExpression(s[0],a.Type.f32),y=T.createUnary(o.UnaryOp.ReinterpretF32,h);break;case 3:case 8:h=e.compileExpression(s[0],a.Type.f64),y=T.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],T.createUnreachable();case 4:h=e.compileExpression(s[0],e.options.isWasm64?a.Type.f64:a.Type.f32),y=T.createUnary(e.options.isWasm64?o.UnaryOp.ReinterpretF64:o.UnaryOp.ReinterpretF32,h);break;case 11:h=e.compileExpression(s[0],a.Type.u32),y=T.createUnary(o.UnaryOp.ReinterpretI32,h);break;case 12:h=e.compileExpression(s[0],a.Type.u64),y=T.createUnary(o.UnaryOp.ReinterpretI64,h);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.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=T.createUnary(o.UnaryOp.SqrtF32,h);break;case 12:y=T.createUnary(o.UnaryOp.SqrtF64,h);break;default:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable();if(r&&r.length){if(e.currentType=r[0],1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.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=T.createUnreachable();break}default:y=h;break;case 11:y=T.createUnary(o.UnaryOp.TruncF32,h);break;case 12:y=T.createUnary(o.UnaryOp.TruncF64,h);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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)),T.createUnreachable()):r&&1==r.length?(h=e.compileExpression(s[0],e.options.usizeType),(E=2==s.length?c(e,s[1]):0)<0?T.createUnreachable():(e.currentType=r[0],T.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(),E))):(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"),T.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)),T.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,(E=3==s.length?c(e,s[2]):0)<0?T.createUnreachable():(e.currentType=a.Type.void,T.createStore(r[0].byteSize,h,d,f.toNativeType(),E))):(e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r?r.length.toString(10):"0"),T.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)),T.createUnreachable()):r?1!=r.length?(e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.createUnreachable()):y=e.options.isWasm64?T.createI64(r[0].byteSize,0):T.createI32(r[0].byteSize):(e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1","0"),T.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)),T.createUnreachable();if(r){if(1!=r.length)return r.length&&(e.currentType=r[0]),e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.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=T.createSelect(h,d,_);break;case 13:e.error(i.DiagnosticCode.Operation_not_supported,l.range),y=T.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),T.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),T.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=T.createUnreachable()):h=e.compileExpression(s[0],a.Type.i32),r&&e.error(i.DiagnosticCode.Type_0_is_not_generic,l.range,t.internalName),T.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,T.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,T.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],T.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],T.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),T.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"),T.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)),T.createUnreachable();if(r){if(r.length&&(e.currentType=r[0].nonNullableType),1!=r.length)return e.error(i.DiagnosticCode.Expected_0_type_arguments_but_got_1,l.range,"1",r.length.toString(10)),T.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,T.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=T.createIf(T.createUnary(o.UnaryOp.EqzI32,h),A);break;case 3:case 8:y=T.createIf(T.createUnary(o.UnaryOp.EqzI64,h),A);break;case 4:case 9:y=T.createIf(T.createUnary(e.options.isWasm64?o.UnaryOp.EqzI64:o.UnaryOp.EqzI32,h),A);break;case 11:y=T.createIf(T.createBinary(o.BinaryOp.EqF32,h,T.createF32(0)),A);break;case 12:y=T.createIf(T.createBinary(o.BinaryOp.EqF64,h,T.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:g=e.currentFunction.getAndFreeTempLocal(a.Type.i32),y=T.createIf(T.createUnary(o.UnaryOp.EqzI32,T.createTeeLocal(g.index,h)),A,T.createGetLocal(g.index,o.NativeType.I32));break;case 3:case 8:g=e.currentFunction.getAndFreeTempLocal(a.Type.i64),y=T.createIf(T.createUnary(o.UnaryOp.EqzI64,T.createTeeLocal(g.index,h)),A,T.createGetLocal(g.index,o.NativeType.I64));break;case 4:case 9:g=e.currentFunction.getAndFreeTempLocal(e.options.usizeType),y=T.createIf(T.createUnary(e.options.isWasm64?o.UnaryOp.EqzI64:o.UnaryOp.EqzI32,T.createTeeLocal(g.index,h)),A,T.createGetLocal(g.index,e.options.nativeSizeType));break;case 11:g=e.currentFunction.getAndFreeTempLocal(a.Type.f32),y=T.createIf(T.createBinary(o.BinaryOp.EqF32,T.createTeeLocal(g.index,h),T.createF32(0)),A,T.createGetLocal(g.index,o.NativeType.F32));break;case 12:g=e.currentFunction.getAndFreeTempLocal(a.Type.f64),y=T.createIf(T.createBinary(o.BinaryOp.EqF64,T.createTeeLocal(g.index,h),T.createF64(0)),A,T.createGetLocal(g.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,T.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,T.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,T.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,T.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,T.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,T.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,T.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,T.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,T.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,T.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,T.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,T.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,T.createUnreachable()):e.compileExpression(s[0],a.Type.f64,2)}return e.error(i.DiagnosticCode.Operation_not_supported,l.range),T.createUnreachable()},t.compileAllocate=function(e,t,r){var n=e.program;assert(t.program==n);var a=e.module,o=e.options,c=n.elements.get(o.allocateImpl);if(!c)return n.error(i.DiagnosticCode.Cannot_find_name_0,r.range,o.allocateImpl),a.createUnreachable();if(c.kind!=s.ElementKind.FUNCTION_PROTOTYPE)return n.error(i.DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,r.range,c.internalName),a.createUnreachable();var p=c.resolve();return p&&e.compileFunction(p)?(e.currentType=t.type,a.createCall(p.internalName,[o.isWasm64?a.createI64(t.currentMemoryOffset):a.createI32(t.currentMemoryOffset)],o.nativeSizeType)):a.createUnreachable()},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 03a6dfcd..2c163ddd 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","numNames","strs","_BinaryenSwitch","createCall","target","returnType","_BinaryenCall","createCallImport","_BinaryenCallImport","createCallIndirect","typeName","_BinaryenCallIndirect","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","k","segs","offs","sizs","Target","WASM64","i64_low","i64_high","cArr1","cArr2","cArr3","_BinaryenSetMemory","setFunctionTable","funcs","_BinaryenSetFunctionTable","setStart","func","_BinaryenSetStart","setOptimizeLevel","level","_BinaryenSetOptimizeLevel","setShrinkLevel","_BinaryenSetShrinkLevel","setDebugInfo","on","_BinaryenSetDebugInfo","optimize","_BinaryenFunctionOptimize","_BinaryenModuleOptimize","runPasses","passes","_BinaryenFunctionRunPasses","_BinaryenModuleRunPasses","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","numValues","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","TypeAlias","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","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","element","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","typeParameters","global_1","resolveSignature","node","contextualTypeArguments","reportNotFound","explicitThisType","thisType","resolveType","parameterTypeNodes","parameterTypes","numParameters","parameterNames","requiredParameters","hasRest","parameterTypeNode","parameterKind","ParameterKind","DEFAULT","REST","parameterType","returnTypeNode","signature","Signature","SIGNATURE","asFunction","typeNode","localName","resolveUsingTypeArguments","typeArguments","paramType","instanceKey","typesToString","placeholderType","resolveTypeArguments","typeArgumentNodes","alternativeReportNode","parameterCount","argumentCount","Expected_0_type_arguments_but_got_1","atEnd","contextualFunction","contextualEnum","ENUMVALUE","resolvedElement","ResolvedElement","flow","getScopedLocal","resolvePropertyAccess","propertyAccess","targetExpression","resolveExpression","targetType","LOCAL","FIELD","classType","Property_0_does_not_exist_on_type_1","CLASS","withTarget","base","resolveElementAccess","elementAccess","indexedGetName","indexedGet","FUNCTION_PROTOTYPE","Index_signature_is_missing_in_type_0","PARENTHESIZED","ASSERTION","toType","BINARY","THIS","instanceMethodOf","_this_cannot_be_referenced_in_current_location","SUPER","_super_can_only_be_referenced_in_a_derived_class","IDENTIFIER","PROPERTYACCESS","ELEMENTACCESS","CALL","functionTarget","cachedFunctionTarget","FunctionTarget","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","isInstance","inheritedTypeArguments","inheritedTypeArguments_1","inheritedTypeArguments_1_1","inheritedName","inheritedType","classTypeParameters","numClassTypeParameters","numFunctionTypeArguments","signatureNode","functionTypeParameters","classInstance","signatureParameters","signatureParameterCount","parameterDeclaration","Function","resolvePartial","partialPrototype","reportNode","resolvedTypeArguments","resolveBuiltinTypeArguments","resolvedType","FUNCTION","locals","additionalLocals","breakContext","debugLocations","functionTableIndex","trampoline","nextBreakId","breakStack","tempI32s","tempI64s","tempF32s","tempF64s","localIndex","_b","_c","parameterName","getParameterName","Flow","addLocal","local","getTempLocal","temps","toNativeType","pop","freeTempLocal","getAndFreeTempLocal","enterBreakContext","id","leaveBreakContext","finalize","debugLocation","debugInfoRef","debugInfoIndex","FUNCTION_TARGET","toSignatureString","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","isAssignableTo","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","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","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","state","reusableState","State","discard","reset","readIdentifier","quote","Unterminated_string_literal","readEscapeSequence","Unexpected_end_of_text","readExtendedUnicodeEscape","readUnicodeEscape","fromCharCode","readRegexpPattern","escaped","Unterminated_regular_expression_literal","readRegexpFlags","Invalid_regular_expression_flags","readInteger","readHexInteger","readBinaryInteger","readOctalInteger","isOctalDigit","Octal_literals_are_not_allowed_in_strict_mode","readDecimalInteger","i64_16","i64_add","i64_mul","Hexadecimal_digit_expected","i64_10","Digit_expected","i64_8","Octal_digit_expected","i64_2","i64_1","Binary_digit_expected","readFloat","parseFloat","remain","value32","invalid","An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive","Unterminated_Unicode_escape_sequence","finish","program_1","tokenizer_1","path_1","Node","createType","isNullable","TypeNode","setParent","createOmittedType","createIdentifierExpression","createTypeParameter","elem","TypeParameterNode","createParameter","ParameterNode","createSignature","parameters","sig","SignatureNode","createDecorator","args","stmt","DecoratorNode","createModifier","ModifierNode","IdentifierExpression","createEmptyIdentifierExpression","createArrayLiteralExpression","ArrayLiteralExpression","elementExpressions","nodes","setParentIfNotNull","createAssertionExpression","assertionKind","AssertionExpression","createBinaryExpression","operator","BinaryExpression","createCallExpression","typeArgs","CallExpression","createCommaExpression","expressions","CommaExpression","createConstructorExpression","ConstructorExpression","createElementAccessExpression","ElementAccessExpression","elementExpression","createFalseExpression","FalseExpression","createFloatLiteralExpression","FloatLiteralExpression","createFunctionExpression","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","BlockStatement","createBreakStatement","BreakStatement","createClassDeclaration","ClassDeclaration","createContinueStatement","ContinueStatement","createDoStatement","DoStatement","createEmptyStatement","EmptyStatement","createEnumDeclaration","EnumDeclaration","createEnumValueDeclaration","EnumValueDeclaration","createExportStatement","ExportStatement","normalize","startsWith","mangleInternalPath","createExportImportStatement","ExportImportStatement","createExportMember","ExportMember","createExpressionStatement","ExpressionStatement","createIfStatement","IfStatement","createImportStatement","decls","ImportStatement","createImportStatementWithWildcard","createImportDeclaration","ImportDeclaration","createInterfaceDeclaration","InterfaceDeclaration","createFieldDeclaration","FieldDeclaration","createForStatement","incrementor","ForStatement","createFunctionDeclaration","FunctionDeclaration","createMethodDeclaration","MethodDeclaration","createNamespaceDeclaration","NamespaceDeclaration","createReturnStatement","ReturnStatement","createSwitchStatement","cases","SwitchStatement","createSwitchCase","SwitchCase","createThrowStatement","ThrowStatement","createTryStatement","catchVariable","catchStatements","finallyStatements","TryStatement","createTypeDeclaration","TypeDeclaration","createVariableStatement","VariableStatement","createVariableDeclaration","VariableDeclaration","createVoidStatement","VoidStatement","createWhileStatement","WhileStatement","CommonTypeNode","TYPEPARAMETER","PARAMETER","DecoratorKind","DECORATOR","MODIFIER","Expression","LiteralKind","LiteralExpression","AssertionKind","FUNCTIONARROW","TERNARY","UnaryExpression","UNARYPOSTFIX","UNARYPREFIX","SourceKind","Statement","Source","tokenizer","sourceKind","ENTRY","LIBRARY","DeclarationStatement","cachedProgramLevelInternalName","cachedFileLevelInternalName","mangleInternalName","isTopLevelExport","needsExplicitExport","VariableLikeDeclarationStatement","BLOCK","EMPTY","ENUMVALUEDECLARATION","EXPORTIMPORT","EXPORTMEMBER","EXPRESSION","IMPORTDECLARATION","SWITCHCASE","VARIABLEDECLARATION","reusableModifiers","createModifiers","getModifier","getFirstDecorator","asGlobal","setReusableModifiers","addModifier","modifier","TypeKind","TypeFlags","size","nullableType","ceil","nonNullableType","computeSmallIntegerShift","computeSmallIntegerMask","asNullable","isReference","signednessIsImportant","currentClass","targetClass","targetFunction","commonCompatible","kindOnly","toNativeZero","toNativeOne","toNativeNegOne","isize32","isize64","usize32","usize64","typesToNativeTypes","numTypes","getGenericParameterName","thisThisType","targetThisType","thisParameterTypes","targetParameterTypes","thisParameterType","targetParameterType","includeThis","optionalStart","restIndex","cachedGenericParameterNames","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","funcRef","typeRef","ensureFunctionType","i64_align","isWasm64","pages","i64_shr_u","functionTableSize","entries","compileSourceByPath","normalizedPathWithoutExtension","File_0_not_found","classDeclaration","compileClassDeclaration","enumDeclaration","compileEnumDeclaration","functionDeclaration","compileFunctionDeclaration","importStatement","namespaceDeclaration","compileNamespaceDeclaration","variableInit","compileVariableStatement","exportStatement","compileExportStatement","previousFunction","compileStatement","compileGlobalDeclaration","compileGlobal","global","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","isTopLevel","compileEnum","previousValue","initInStart","valueDeclaration","AddI32","Cannot_export_a_mutable_global","compileFunctionUsingTypeArguments","compileFunction","resultType","An_implementation_cannot_be_declared_in_ambient_contexts","Function_implementation_is_missing_or_not_immediately_following_the_declaration","allBranchesReturn","A_function_whose_declared_type_is_not_void_must_return_a_value","compileInterfaceDeclaration","compileNamespace","ns","compileClassUsingTypeArguments","internalExportName","functionInstance","globalDeclaration","compileClass","addMemorySegment","alignment","ensureFunctionTableEntry","compileBlockStatement","compileBreakStatement","compileContinueStatement","compileDoStatement","compileEmptyStatement","compileExpressionStatement","compileForStatement","compileIfStatement","compileReturnStatement","compileSwitchStatement","compileThrowStatement","compileTryStatement","compileVoidStatement","compileWhileStatement","addDebugLocation","compileStatements","numStatements","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","numCases","breaks","breakIndex","defaultIndex","case_","EqI32","currentBlock","fallsThrough","nextLabel","isKnownGlobal","numDeclarations","initializers","init","_const_declarations_must_be_initialized","compileAssignmentWithValue","contextualType","retainType","shift","mask","conversionKind","wrapSmallIntegers","compileAssertionExpression","compileBinaryExpression","compileCallExpression","compileCommaExpression","compileElementAccessExpression","compileFunctionExpression","compileIdentifierExpression","compileLiteralExpression","compileNewExpression","compileParenthesizedExpression","compilePropertyAccessExpression","compileTernaryExpression","compileUnaryPostfixExpression","compileUnaryPrefixExpression","convertExpression","compileExpressionRetainType","precomputeExpression","_BinaryenFunctionGetBody","fromType","Conversion_from_type_0_to_1_requires_an_explicit_cast","PromoteF32","DemoteF64","TruncF32ToI64","TruncF32ToI32","makeSmallIntegerWrap","TruncF32ToU64","TruncF32ToU32","TruncF64ToI64","TruncF64ToI32","TruncF64ToU64","TruncF64ToU32","ConvertI64ToF32","ConvertU64ToF32","ConvertI32ToF32","ConvertU32ToF32","ConvertI64ToF64","ConvertU64ToF64","ConvertI32ToF64","ConvertU32ToF64","WrapI64","ExtendI32","ExtendU32","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","Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property","resolvedIndexedSet","valueExpr","valueWithCorrectType","tee","isReadonly","isInstanceTarget","targetExpr","setterInstance","thisArg","makeCallDirect","getterInstance","setElementName","setElement","elementExpr","tempLocalTarget","tempLocalElement","Index_signature_in_type_0_only_permits_reading","indexArg","compileCall","compileCallDirect","Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures","compileCallIndirect","checkCallSignature","numArguments","hasThis","minimum","Expected_at_least_0_arguments_but_got_1","argumentExpressions","numArgumentsInclThis","ensureTrampoline","original","originalSignature","originalName","originalParameterTypes","originalParameterDeclarations","commonReturnType","commonThisType","minArguments","minOperands","maxArguments","maxOperands","numOptional","forwardedOperands","operandIndex","nativeSizeType","trampolineParameterTypes","trampolineSignature","trampolineName","numOperands","makeCallIndirect","numExpressions","exprs","retainConstantType","superType","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","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","tryParseSignatureIsSignature","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","isNullableSignature","tryParseSignature","Unexpected_token","innerType","Identifier_expected","nullable","parameter","bracketStart","bracketRange","isSignature","t","A_rest_parameter_cannot_be_optional","OPTIONAL","param","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","parseParameter","A_rest_parameter_must_be_last_in_a_parameter_list","A_required_parameter_cannot_follow_an_optional_parameter","isRest","isOptional","startRange","A_rest_parameter_cannot_have_an_initializer","Parameter_cannot_have_question_mark_and_initializer","signatureStart","isSetter","A_set_accessor_must_have_exactly_one_parameter","A_set_accessor_parameter_cannot_have_an_initializer","A_get_accessor_cannot_have_parameters","parseBlockStatement","parseFunctionExpression","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","abortPrototype","abortInstance","messageArg","filenameArg","NaN","Infinity","tempLocal0","tempLocal1","Type_0_is_not_generic","abort","cls","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,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,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,MAA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","file":"assemblyscript.js","sourcesContent":["(function webpackUniversalModuleDefinition(root, factory) {\n\tif(typeof exports === 'object' && typeof module === 'object')\n\t\tmodule.exports = factory(require(\"binaryen\"));\n\telse if(typeof define === 'function' && define.amd)\n\t\tdefine([\"binaryen\"], factory);\n\telse if(typeof exports === 'object')\n\t\texports[\"assemblyscript\"] = factory(require(\"binaryen\"));\n\telse\n\t\troot[\"assemblyscript\"] = factory(root[\"binaryen\"]);\n})(typeof self !== 'undefined' ? self : this, function(__WEBPACK_EXTERNAL_MODULE__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 let 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 ): void {\r\n var message = DiagnosticMessage.create(code, category, arg0, arg1, arg2).withRange(range);\r\n this.diagnostics.push(message);\r\n // console.log(formatDiagnosticMessage(message, true, true) + \"\\n\"); // temporary\r\n // console.log(new Error(\"stack\").stack);\r\n }\r\n\r\n 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): MemorySegment {\r\n var segment = new MemorySegment();\r\n segment.buffer = buffer;\r\n segment.offset = offset;\r\n return segment;\r\n }\r\n}\r\n\r\nexport class Module {\r\n\r\n ref: ModuleRef;\r\n out: usize;\r\n\r\n 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 let module = new Module();\r\n module.ref = _BinaryenModuleRead(cArr, buffer.length);\r\n module.out = allocate_memory(3 * 8); // LLVM C-ABI, max used is 3 * usize\r\n return module;\r\n } finally {\r\n free_memory(changetype(cArr));\r\n }\r\n }\r\n\r\n private constructor() { }\r\n\r\n // types\r\n\r\n addFunctionType(\r\n name: string,\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenAddFunctionType(this.ref, cStr, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n getFunctionTypeBySignature(\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionTypeRef {\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenGetFunctionTypeBySignature(this.ref, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n // constants\r\n\r\n createI32(value: i32): ExpressionRef {\r\n var out = this.out;\r\n _BinaryenLiteralInt32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createI64(valueLow: i32, valueHigh: i32 = 0): ExpressionRef {\r\n var out = this.out;\r\n _BinaryenLiteralInt64(out, valueLow, valueHigh);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF32(value: f32): ExpressionRef {\r\n var out = this.out;\r\n _BinaryenLiteralFloat32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF64(value: f64): ExpressionRef {\r\n var out = this.out;\r\n _BinaryenLiteralFloat64(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n // expressions\r\n\r\n createUnary(\r\n op: UnaryOp,\r\n expr: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenUnary(this.ref, op, expr);\r\n }\r\n\r\n createBinary(\r\n op: BinaryOp,\r\n left: ExpressionRef,\r\n right: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenBinary(this.ref, op, left, right);\r\n }\r\n\r\n createHost(\r\n op: HostOp,\r\n name: string | null = null,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(operands);\r\n try {\r\n return _BinaryenHost(this.ref, op, cStr, cArr, operands ? (operands).length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createGetLocal(\r\n index: i32,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenGetLocal(this.ref, index, type);\r\n }\r\n\r\n createTeeLocal(\r\n index: i32,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenTeeLocal(this.ref, index, value);\r\n }\r\n\r\n createGetGlobal(\r\n name: string,\r\n type: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenGetGlobal(this.ref, cStr, type);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createLoad(\r\n bytes: Index,\r\n signed: bool,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenLoad(this.ref, bytes, signed ? 1 : 0, offset, /* always aligned */ bytes, type, ptr);\r\n }\r\n\r\n createStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenStore(this.ref, bytes, offset, /* always aligned */ bytes, ptr, value, type);\r\n }\r\n\r\n createAtomicLoad(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicLoad(this.ref, bytes, offset, type, ptr);\r\n }\r\n\r\n createAtomicStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicStore(this.ref, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicRMW(\r\n op: AtomicRMWOp,\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicRMW(this.ref, op, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicCmpxchg(\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n replacement: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicCmpxchg(this.ref, bytes, offset, ptr, expected, replacement, type);\r\n }\r\n\r\n createAtomicWait(\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n timeout: ExpressionRef,\r\n expectedType: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWait(this.ref, ptr, expected, timeout, expectedType);\r\n }\r\n\r\n createAtomicWake(\r\n ptr: ExpressionRef,\r\n wakeCount: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWake(this.ref, ptr, wakeCount);\r\n }\r\n\r\n // statements\r\n\r\n createSetLocal(\r\n index: Index,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSetLocal(this.ref, index, value);\r\n }\r\n\r\n createSetGlobal(\r\n name: string,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenSetGlobal(this.ref, cStr, value);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createBlock(\r\n label: string | null,\r\n children: ExpressionRef[],\r\n type: NativeType = NativeType.None\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n var cArr = allocI32Array(children);\r\n try {\r\n return _BinaryenBlock(this.ref, cStr, cArr, children.length, type);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createBreak(\r\n label: string | null,\r\n condition: ExpressionRef = 0,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenBreak(this.ref, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createDrop(\r\n expression: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenDrop(this.ref, expression);\r\n }\r\n\r\n createLoop(\r\n label: string | null,\r\n body: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenLoop(this.ref, cStr, body);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createIf(\r\n condition: ExpressionRef,\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenIf(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createNop(): ExpressionRef {\r\n return _BinaryenNop(this.ref);\r\n }\r\n\r\n createReturn(\r\n expression: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenReturn(this.ref, expression);\r\n }\r\n\r\n createSelect(\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef,\r\n condition: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSelect(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createSwitch(\r\n names: string[],\r\n defaultName: string | null,\r\n condition: ExpressionRef,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numNames = names.length;\r\n var strs = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n strs[i] = allocString(names[i]);\r\n }\r\n var cArr = allocI32Array(strs);\r\n var cStr = allocString(defaultName);\r\n try {\r\n return _BinaryenSwitch(this.ref, cArr, numNames, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n for (let i = numNames - 1; i >= 0; --i) free_memory(strs[i]);\r\n }\r\n }\r\n\r\n createCall(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocI32Array(operands);\r\n try {\r\n return _BinaryenCall(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createCallImport(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocI32Array(operands);\r\n try {\r\n return _BinaryenCallImport(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createCallIndirect(\r\n index: ExpressionRef,\r\n operands: ExpressionRef[] | null,\r\n typeName: string\r\n ): ExpressionRef {\r\n var cArr = allocI32Array(operands);\r\n var cStr = allocString(typeName);\r\n try {\r\n return _BinaryenCallIndirect(this.ref, index, cArr, operands && operands.length || 0, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n createUnreachable(): ExpressionRef {\r\n return _BinaryenUnreachable(this.ref);\r\n }\r\n\r\n // meta\r\n\r\n addGlobal(\r\n name: string,\r\n type: NativeType,\r\n mutable: bool,\r\n initializer: ExpressionRef\r\n ): GlobalRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenAddGlobal(this.ref, cStr, type, mutable ? 1 : 0, initializer);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunction(\r\n name: string,\r\n type: FunctionTypeRef,\r\n varTypes: NativeType[] | null,\r\n body: ExpressionRef\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(varTypes);\r\n try {\r\n return _BinaryenAddFunction(this.ref, cStr, type, cArr, varTypes ? varTypes.length : 0, body);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n removeFunction(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunction(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunctionExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddFunctionExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addTableExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddTableExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addMemoryExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddMemoryExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addGlobalExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddGlobalExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n removeExport(externalName: string): void {\r\n var cStr = allocString(externalName);\r\n try {\r\n _BinaryenRemoveExport(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunctionImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n functionType: FunctionTypeRef\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddFunctionImport(this.ref, cStr1, cStr2, cStr3, functionType);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addTableImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddTableImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addMemoryImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddMemoryImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addGlobalImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n globalType: NativeType\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddGlobalImport(this.ref, cStr1, cStr2, cStr3, globalType);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n removeImport(internalName: string): void {\r\n var cStr = allocString(internalName);\r\n try {\r\n _BinaryenRemoveImport(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n setMemory(\r\n initial: Index,\r\n maximum: Index,\r\n segments: MemorySegment[],\r\n target: Target,\r\n exportName: string | null = null\r\n ): void {\r\n var cStr = allocString(exportName);\r\n var k = segments.length;\r\n var segs = new Array(k);\r\n var offs = new Array(k);\r\n var sizs = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let buffer = segments[i].buffer;\r\n let offset = segments[i].offset;\r\n segs[i] = allocU8Array(buffer);\r\n offs[i] = target == Target.WASM64\r\n ? this.createI64(i64_low(offset), i64_high(offset))\r\n : this.createI32(i64_low(offset));\r\n sizs[i] = buffer.length;\r\n }\r\n var cArr1 = allocI32Array(segs);\r\n var cArr2 = allocI32Array(offs);\r\n var cArr3 = allocI32Array(sizs);\r\n try {\r\n _BinaryenSetMemory(this.ref, initial, maximum, cStr, cArr1, cArr2, cArr3, k);\r\n } finally {\r\n free_memory(cArr3);\r\n free_memory(cArr2);\r\n free_memory(cArr1);\r\n for (let i = k - 1; i >= 0; --i) free_memory(segs[i]);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n setFunctionTable(funcs: FunctionRef[]): void {\r\n var cArr = allocI32Array(funcs);\r\n try {\r\n _BinaryenSetFunctionTable(this.ref, cArr, funcs.length);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n setStart(func: FunctionRef): void {\r\n _BinaryenSetStart(this.ref, func);\r\n }\r\n\r\n setOptimizeLevel(level: i32 = 2): void {\r\n _BinaryenSetOptimizeLevel(level);\r\n }\r\n\r\n setShrinkLevel(level: i32 = 1): void {\r\n _BinaryenSetShrinkLevel(level);\r\n }\r\n\r\n setDebugInfo(on: bool = false): void {\r\n _BinaryenSetDebugInfo(on);\r\n }\r\n\r\n optimize(func: FunctionRef = 0): void {\r\n if (func) {\r\n _BinaryenFunctionOptimize(func, this.ref);\r\n } else {\r\n _BinaryenModuleOptimize(this.ref);\r\n }\r\n }\r\n\r\n runPasses(passes: string[], func: FunctionRef = 0): void {\r\n var numNames = passes.length;\r\n var names = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n names[i] = allocString(passes[i]);\r\n }\r\n var cArr = allocI32Array(names);\r\n try {\r\n if (func) {\r\n _BinaryenFunctionRunPasses(func, this.ref, cArr, numNames);\r\n } else {\r\n _BinaryenModuleRunPasses(this.ref, cArr, numNames);\r\n }\r\n } finally {\r\n free_memory(cArr);\r\n for (let i = numNames; i >= 0; --i) {\r\n free_memory(names[i]);\r\n }\r\n }\r\n }\r\n\r\n validate(): bool {\r\n return _BinaryenModuleValidate(this.ref) == 1;\r\n }\r\n\r\n interpret(): void {\r\n _BinaryenModuleInterpret(this.ref);\r\n }\r\n\r\n toBinary(sourceMapUrl: string | null): 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 let binaryBytes = readInt(out + 4);\r\n sourceMapPtr = readInt(out + 4 * 2);\r\n let 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 case ExpressionId.Const: {\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32: {\r\n return this.createI32(_BinaryenConstGetValueI32(expr));\r\n }\r\n case NativeType.I64: {\r\n return this.createI64(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n }\r\n case NativeType.F32: {\r\n return this.createF32(_BinaryenConstGetValueF32(expr));\r\n }\r\n case NativeType.F64: {\r\n return this.createF64(_BinaryenConstGetValueF64(expr));\r\n }\r\n default: {\r\n throw new Error(\"concrete type expected\");\r\n }\r\n }\r\n }\r\n case ExpressionId.GetLocal: {\r\n return _BinaryenGetLocal(this.ref,\r\n _BinaryenGetLocalGetIndex(expr),\r\n _BinaryenExpressionGetType(expr)\r\n );\r\n }\r\n case ExpressionId.GetGlobal: {\r\n let globalName = _BinaryenGetGlobalGetName(expr);\r\n if (!globalName) break;\r\n return _BinaryenGetGlobal(this.ref, globalName, _BinaryenExpressionGetType(expr));\r\n }\r\n case ExpressionId.Load: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenLoadGetPtr(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenLoadIsAtomic(expr)\r\n ? _BinaryenAtomicLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n : _BinaryenLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadIsSigned(expr) ? 1 : 0,\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenLoadGetAlign(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n );\r\n }\r\n case ExpressionId.Unary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenUnaryGetValue(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenUnary(this.ref, _BinaryenUnaryGetOp(expr), nested1);\r\n }\r\n case ExpressionId.Binary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenBinaryGetLeft(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n if (!(nested2 = this.cloneExpression(_BinaryenBinaryGetRight(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenBinary(this.ref, _BinaryenBinaryGetOp(expr), nested1, nested2);\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n // source map generation\r\n\r\n addDebugInfoFile(name: string): Index {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenModuleAddDebugInfoFileName(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n getDebugInfoFile(index: Index): string | null {\r\n return readString(_BinaryenModuleGetDebugInfoFileName(this.ref, index));\r\n }\r\n\r\n setDebugLocation(\r\n func: FunctionRef,\r\n expr: ExpressionRef,\r\n fileIndex: Index,\r\n lineNumber: Index,\r\n columnNumber: Index\r\n ): void {\r\n _BinaryenFunctionSetDebugLocation(func, expr, fileIndex, lineNumber, columnNumber);\r\n }\r\n}\r\n\r\nexport class Relooper {\r\n\r\n module: Module;\r\n ref: RelooperRef;\r\n\r\n static create(module: Module): Relooper {\r\n var relooper = new Relooper();\r\n relooper.module = module;\r\n relooper.ref = _RelooperCreate();\r\n return relooper;\r\n }\r\n\r\n static createStub(module: Module): Relooper {\r\n var relooper = new Relooper();\r\n relooper.module = module;\r\n relooper.ref = 0;\r\n return relooper;\r\n }\r\n\r\n private constructor() {}\r\n\r\n addBlock(code: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlock(this.ref, code);\r\n }\r\n\r\n addBranch(from: RelooperBlockRef, to: RelooperBlockRef, condition: ExpressionRef = 0, code: ExpressionRef = 0): void {\r\n _RelooperAddBranch(from, to, condition, code);\r\n }\r\n\r\n addBlockWithSwitch(code: ExpressionRef, condition: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlockWithSwitch(this.ref, code, condition);\r\n }\r\n\r\n addBranchForSwitch(from: RelooperBlockRef, to: RelooperBlockRef, indexes: i32[], code: ExpressionRef = 0): void {\r\n var cArr = allocI32Array(indexes);\r\n try {\r\n _RelooperAddBranchForSwitch(from, to, cArr, indexes.length, code);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n renderAndDispose(entry: RelooperBlockRef, labelHelper: Index): ExpressionRef {\r\n return _RelooperRenderAndDispose(this.ref, entry, labelHelper, this.module.ref);\r\n }\r\n}\r\n\r\n// helpers\r\n// can't do stack allocation here: STACKTOP is a global in WASM but a hidden variable in asm.js\r\n\r\nfunction allocU8Array(u8s: Uint8Array | null): usize {\r\n if (!u8s) return 0;\r\n var numValues = u8s.length;\r\n var ptr = allocate_memory(numValues);\r\n var idx = ptr;\r\n for (let i = 0; i < numValues; ++i) {\r\n store(idx++, u8s[i]);\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocI32Array(i32s: i32[] | null): usize {\r\n if (!i32s) return 0;\r\n var ptr = allocate_memory(i32s.length << 2);\r\n var idx = ptr;\r\n for (let i = 0, k = i32s.length; i < k; ++i) {\r\n let val = i32s[i];\r\n // store(idx, val) is not portable\r\n store(idx , ( val & 0xff) as u8);\r\n store(idx + 1, ((val >> 8) & 0xff) as u8);\r\n store(idx + 2, ((val >> 16) & 0xff) as u8);\r\n store(idx + 3, ( val >>> 24 ) as u8);\r\n idx += 4;\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction stringLengthUTF8(str: string): usize {\r\n var len = 0;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n ++len;\r\n } else if (u <= 0x7FF) {\r\n len += 2;\r\n } else if (u <= 0xFFFF) {\r\n len += 3;\r\n } else if (u <= 0x1FFFFF) {\r\n len += 4;\r\n } else if (u <= 0x3FFFFFF) {\r\n len += 5;\r\n } else {\r\n len += 6;\r\n }\r\n }\r\n return len;\r\n}\r\n\r\nfunction allocString(str: string | null): usize {\r\n if (str == null) return 0;\r\n var ptr = allocate_memory(stringLengthUTF8(str) + 1);\r\n var idx = ptr;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n store(idx++, u as u8);\r\n } else if (u <= 0x7FF) {\r\n store(idx++, (0xC0 | (u >>> 6) ) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0xFFFF) {\r\n store(idx++, (0xE0 | (u >>> 12) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x1FFFFF) {\r\n store(idx++, (0xF0 | (u >>> 18) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x3FFFFFF) {\r\n store(idx++, (0xF8 | (u >>> 24) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else {\r\n store(idx++, (0xFC | (u >>> 30) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 24) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n }\r\n }\r\n store(idx, 0);\r\n return ptr;\r\n}\r\n\r\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 (let i: usize = 0; i < length; ++i) {\r\n ret[i] = load(ptr + i);\r\n }\r\n return ret;\r\n}\r\n\r\nexport function readString(ptr: usize): string | null {\r\n if (!ptr) return null;\r\n var arr = new Array();\r\n // the following is based on Emscripten's UTF8ArrayToString\r\n var cp: u32;\r\n var u1: u32, u2: u32, u3: u32, u4: u32, u5: u32;\r\n while (cp = load(ptr++)) {\r\n if (!(cp & 0x80)) {\r\n arr.push(cp);\r\n continue;\r\n }\r\n u1 = load(ptr++) & 63;\r\n if ((cp & 0xE0) == 0xC0) {\r\n arr.push(((cp & 31) << 6) | u1);\r\n continue;\r\n }\r\n u2 = load(ptr++) & 63;\r\n if ((cp & 0xF0) == 0xE0) {\r\n cp = ((cp & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u3 = load(ptr++) & 63;\r\n if ((cp & 0xF8) == 0xF0) {\r\n cp = ((cp & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;\r\n } else {\r\n u4 = load(ptr++) & 63;\r\n if ((cp & 0xFC) == 0xF8) {\r\n cp = ((cp & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;\r\n } else {\r\n u5 = load(ptr++) & 63;\r\n cp = ((cp & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;\r\n }\r\n }\r\n }\r\n // if (cp < 0x10000) {\r\n // arr.push(cp);\r\n // } else {\r\n // var ch = cp - 0x10000;\r\n // arr.push(0xD800 | (ch >> 10));\r\n // arr.push(0xDC00 | (ch & 0x3FF));\r\n // }\r\n }\r\n // return String.fromCharCodes(arr);\r\n return String.fromCodePoints(arr);\r\n}\r\n\r\n/** Result structure of {@link Module#toBinary}. */\r\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 Signature,\r\n\r\n typesToString\r\n} from \"./types\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Source,\r\n Range,\r\n CommonTypeNode,\r\n TypeNode,\r\n TypeParameterNode,\r\n // ParameterNode,\r\n // ParameterKind,\r\n // SignatureNode,\r\n DecoratorNode,\r\n DecoratorKind,\r\n ModifierKind,\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 ParameterKind,\r\n SignatureNode\r\n} from \"./ast\";\r\n\r\nimport {\r\n Module,\r\n NativeType,\r\n FunctionRef,\r\n} from \"./module\";\r\n\r\n/** Path delimiter inserted between file system levels. */\r\nexport const PATH_DELIMITER = \"/\";\r\n/** Substitution used to indicate the parent directory. */\r\nexport const PARENT_SUBST = \"..\";\r\n/** Function name prefix used for getters. */\r\nexport const GETTER_PREFIX = \"get:\";\r\n/** Function name prefix used for setters. */\r\nexport const SETTER_PREFIX = \"set:\";\r\n/** Delimiter used between class names and instance members. */\r\nexport const INSTANCE_DELIMITER = \"#\";\r\n/** Delimiter used between class and namespace names and static members. */\r\nexport const STATIC_DELIMITER = \".\";\r\n/** Substitution used to indicate a library directory. */\r\nexport const LIBRARY_SUBST = \"(lib)\";\r\n/** Library directory prefix. */\r\nexport const LIBRARY_PREFIX = LIBRARY_SUBST + PATH_DELIMITER;\r\n\r\n/** Represents a yet unresolved export. */\r\nclass QueuedExport {\r\n isReExport: bool;\r\n referencedName: string;\r\n member: ExportMember;\r\n}\r\n\r\n/** Represents a yet unresolved import. */\r\nclass QueuedImport {\r\n internalName: string;\r\n referencedName: string;\r\n referencedNameAlt: string;\r\n declaration: ImportDeclaration;\r\n}\r\n\r\n/** Represents a type alias. */\r\nclass TypeAlias {\r\n typeParameters: TypeParameterNode[] | null;\r\n type: CommonTypeNode;\r\n}\r\n\r\nconst noTypesYet = new Map();\r\n\r\n/** Represents an AssemblyScript program. */\r\nexport class Program extends DiagnosticEmitter {\r\n\r\n /** Array of source files. */\r\n sources: Source[];\r\n /** Diagnostic offset used where repeatedly obtaining the next diagnostic. */\r\n diagnosticsOffset: i32 = 0;\r\n /** Compiler options. */\r\n options: Options;\r\n /** Elements by internal name. */\r\n 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 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 (let i = 0, k = this.sources.length; i < k; ++i) {\r\n let source = this.sources[i];\r\n let statements = source.statements;\r\n for (let j = 0, l = statements.length; j < l; ++j) {\r\n let statement = statements[j];\r\n switch (statement.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n this.initializeClass(statement, queuedDerivedClasses);\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n this.initializeEnum(statement);\r\n break;\r\n }\r\n case NodeKind.EXPORT: {\r\n this.initializeExports(statement, queuedExports);\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n this.initializeFunction(statement);\r\n break;\r\n }\r\n case NodeKind.IMPORT: {\r\n this.initializeImports(statement, queuedExports, queuedImports);\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n this.initializeInterface(statement);\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n this.initializeNamespace(statement, queuedDerivedClasses);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n this.initializeTypeAlias(statement);\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n this.initializeVariables(statement);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // queued imports should be resolvable now through traversing exports and queued exports\r\n for (let i = 0; i < queuedImports.length;) {\r\n let queuedImport = queuedImports[i];\r\n let element = this.tryResolveImport(queuedImport.referencedName, queuedExports);\r\n if (element) {\r\n this.elements.set(queuedImport.internalName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n if (element = this.tryResolveImport(queuedImport.referencedNameAlt, queuedExports)) {\r\n this.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 (let [exportName, queuedExport] of queuedExports) {\r\n let currentExport: QueuedExport | null = queuedExport; // nullable below\r\n let element: Element | null;\r\n do {\r\n if (currentExport.isReExport) {\r\n if (element = this.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 ((queuedExport.member.parent).path).value,\r\n queuedExport.member.externalName.text\r\n );\r\n }\r\n } else {\r\n if (\r\n // normal export\r\n (element = this.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 (let i = 0, k = queuedDerivedClasses.length; i < k; ++i) {\r\n let derivedDeclaration = queuedDerivedClasses[i].declaration;\r\n let derivedType = assert(derivedDeclaration.extendsType);\r\n let resolved = this.resolveIdentifier(derivedType.name, null);\r\n if (resolved) {\r\n if (resolved.element.kind != ElementKind.CLASS_PROTOTYPE) {\r\n this.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n derivedType.range\r\n );\r\n continue;\r\n }\r\n queuedDerivedClasses[i].basePrototype = (\r\n resolved.element\r\n );\r\n }\r\n }\r\n }\r\n\r\n /** Tries to resolve an import by traversing exports and queued exports. */\r\n private tryResolveImport(\r\n referencedName: string,\r\n queuedExports: Map\r\n ): Element | null {\r\n var element: Element | null;\r\n do {\r\n if (element = this.exports.get(referencedName)) return element;\r\n let queuedExport = queuedExports.get(referencedName);\r\n if (!queuedExport) return null;\r\n if (queuedExport.isReExport) {\r\n referencedName = queuedExport.referencedName;\r\n continue;\r\n }\r\n return this.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) element.set(ElementFlags.BUILTIN);\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].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 (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n case NodeKind.FIELDDECLARATION: {\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n }\r\n case NodeKind.METHODDECLARATION: {\r\n let 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\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 let instance = prototype.resolve(null);\r\n if (instance) this.types.set(\"string\", instance.type);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, declaration.programLevelInternalName\r\n );\r\n }\r\n }\r\n }\r\n\r\n private initializeField(\r\n declaration: FieldDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n\r\n // static fields become global variables\r\n if (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 let 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 let 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: DecoratorNode[] | null,\r\n prototype: FunctionPrototype,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n // handle operator annotations. operators are either instance methods taking\r\n // a second argument of the instance's type or static methods taking two\r\n // arguments of the instance's type. return values vary depending on the\r\n // operation.\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n if (decorator.decoratorKind == DecoratorKind.OPERATOR) {\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n decorator.range\r\n );\r\n continue;\r\n }\r\n let numArgs = decorator.arguments && decorator.arguments.length || 0;\r\n if (numArgs == 1) {\r\n let firstArg = (decorator.arguments)[0];\r\n if (\r\n firstArg.kind == NodeKind.LITERAL &&\r\n (firstArg).literalKind == LiteralKind.STRING\r\n ) {\r\n switch ((firstArg).value) {\r\n case \"[]\": {\r\n classPrototype.fnIndexedGet = prototype.simpleName;\r\n break;\r\n }\r\n case \"[]=\": {\r\n classPrototype.fnIndexedSet = prototype.simpleName;\r\n break;\r\n }\r\n case \"+\": {\r\n classPrototype.fnConcat = prototype.simpleName;\r\n break;\r\n }\r\n case \"==\": {\r\n classPrototype.fnEquals = prototype.simpleName;\r\n break;\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n firstArg.range\r\n );\r\n }\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n firstArg.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n decorator.range, \"1\", numArgs.toString(0)\r\n );\r\n }\r\n } else if (decorator.decoratorKind != DecoratorKind.CUSTOM) {\r\n // methods support built-in @operator only\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n decorator.range\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n private initializeAccessor(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype,\r\n 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 let 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 let 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 let 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 let 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 (let 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 (let i = 0, k = members.length; i < k; ++i) {\r\n this.initializeExport(members[i], statement.internalPath, queuedExports);\r\n }\r\n }\r\n\r\n private setExportAndCheckLibrary(\r\n name: string,\r\n element: Element,\r\n identifier: IdentifierExpression\r\n ): void {\r\n this.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 let 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 (let i = 0, k = declarations.length; i < k; ++i) {\r\n this.initializeImport(\r\n declarations[i],\r\n statement.internalPath,\r\n queuedExports, queuedImports\r\n );\r\n }\r\n } else if (statement.namespaceName) {\r\n let internalName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n statement.namespaceName.text\r\n );\r\n if (this.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 (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n\r\n case NodeKind.FIELDDECLARATION: {\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n }\r\n case NodeKind.METHODDECLARATION: {\r\n let 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\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 (let i = 0, k = members.length; i < k; ++i) {\r\n switch (members[i].kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n this.initializeClass(members[i], queuedExtendingClasses, namespace);\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n this.initializeEnum(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n this.initializeFunction(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n this.initializeInterface(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n this.initializeNamespace(members[i], queuedExtendingClasses, namespace);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n // this.initializeTypeAlias(members[i], namespace);\r\n // TODO: what about namespaced types?\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n members[i].range\r\n );\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n this.initializeVariables(members[i], namespace);\r\n break;\r\n }\r\n default: {\r\n throw new Error(\"namespace member expected\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n private initializeTypeAlias(declaration: TypeDeclaration, namespace: Element | null = null): void {\r\n // type aliases are program globals\r\n // TODO: what about namespaced types?\r\n var name = declaration.name.text;\r\n if (this.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 var alias = new TypeAlias();\r\n alias.typeParameters = declaration.typeParameters;\r\n alias.type = declaration.type;\r\n this.typeAliases.set(name, alias);\r\n }\r\n\r\n private initializeVariables(statement: VariableStatement, namespace: Element | null = null): void {\r\n var declarations = statement.declarations;\r\n for (let i = 0, k = declarations.length; i < k; ++i) {\r\n let declaration = declarations[i];\r\n let internalName = declaration.fileLevelInternalName;\r\n if (this.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 let 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 SignatureNode} to a concrete {@link Signature}. */\r\n resolveSignature(\r\n node: SignatureNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportNotFound: bool = true\r\n ): Signature | null {\r\n var explicitThisType = node.explicitThisType;\r\n var thisType: Type | null = null;\r\n if (explicitThisType) {\r\n thisType = this.resolveType(\r\n explicitThisType,\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!thisType) return null;\r\n }\r\n var parameterTypeNodes = node.parameterTypes;\r\n var numParameters = parameterTypeNodes.length;\r\n var parameterTypes = new Array(numParameters);\r\n var parameterNames = new Array(numParameters);\r\n var requiredParameters = 0;\r\n var hasRest = false;\r\n for (let i = 0; i < numParameters; ++i) {\r\n let parameterTypeNode = parameterTypeNodes[i];\r\n switch (parameterTypeNode.parameterKind) {\r\n case ParameterKind.DEFAULT: {\r\n requiredParameters = i + 1;\r\n break;\r\n }\r\n case ParameterKind.REST: {\r\n assert(i == numParameters);\r\n hasRest = true;\r\n break;\r\n }\r\n }\r\n let parameterType = this.resolveType(\r\n assert(parameterTypeNode.type),\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!parameterType) return null;\r\n parameterTypes[i] = parameterType;\r\n parameterNames[i] = parameterTypeNode.name.text;\r\n }\r\n var returnTypeNode = node.returnType;\r\n var returnType: Type | null;\r\n if (returnTypeNode) {\r\n returnType = this.resolveType(\r\n returnTypeNode,\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Type.void;\r\n }\r\n var signature = new Signature(parameterTypes, returnType, thisType);\r\n signature.parameterNames = parameterNames;\r\n signature.requiredParameters = requiredParameters;\r\n signature.hasRest = hasRest;\r\n return signature;\r\n }\r\n\r\n /** Resolves a {@link CommonTypeNode} to a concrete {@link Type}. */\r\n resolveType(\r\n node: CommonTypeNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportNotFound: bool = true\r\n ): Type | null {\r\n if (node.kind == NodeKind.SIGNATURE) {\r\n let signature = this.resolveSignature(node, contextualTypeArguments, reportNotFound);\r\n if (!signature) return null;\r\n return Type.u32.asFunction(signature);\r\n }\r\n var typeNode = node;\r\n var simpleName = typeNode.name.text;\r\n var globalName = simpleName;\r\n var localName = typeNode.range.source.internalPath + PATH_DELIMITER + simpleName;\r\n\r\n var element: Element | null;\r\n\r\n // check file-global / program-global element\r\n if ((element = this.elements.get(localName)) || (element = this.elements.get(globalName))) {\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n let instance = (element).resolveUsingTypeArguments(\r\n typeNode.typeArguments,\r\n contextualTypeArguments,\r\n null\r\n ); // reports\r\n return instance ? instance.type : null;\r\n }\r\n }\r\n }\r\n\r\n // check (global) type alias\r\n var alias = this.typeAliases.get(simpleName);\r\n if (alias) return this.resolveType(alias.type, contextualTypeArguments, reportNotFound);\r\n\r\n // resolve parameters\r\n if (typeNode.typeArguments) {\r\n let k = typeNode.typeArguments.length;\r\n let paramTypes = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let paramType = this.resolveType( // reports\r\n typeNode.typeArguments[i],\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!paramType) return null;\r\n paramTypes[i] = paramType;\r\n }\r\n\r\n if (k) { // can't be a placeholder if it has parameters\r\n let instanceKey = typesToString(paramTypes);\r\n if (instanceKey.length) {\r\n localName += \"<\" + instanceKey + \">\";\r\n globalName += \"<\" + instanceKey + \">\";\r\n }\r\n } else if (contextualTypeArguments) {\r\n let placeholderType = contextualTypeArguments.get(globalName);\r\n if (placeholderType) return placeholderType;\r\n }\r\n }\r\n\r\n var type: Type | null;\r\n\r\n // check file-global / program-global type\r\n if ((type = this.types.get(localName)) || (type = this.types.get(globalName))) {\r\n return type;\r\n }\r\n\r\n if (reportNotFound) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n typeNode.name.range, globalName\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /** Resolves an array of type arguments to concrete types. */\r\n resolveTypeArguments(\r\n typeParameters: TypeParameterNode[],\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): Type[] | null {\r\n var parameterCount = typeParameters.length;\r\n var argumentCount = typeArgumentNodes ? typeArgumentNodes.length : 0;\r\n if (parameterCount != argumentCount) {\r\n if (argumentCount) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n Range.join(\r\n (typeArgumentNodes)[0].range,\r\n (typeArgumentNodes)[argumentCount - 1].range\r\n ),\r\n parameterCount.toString(10), argumentCount.toString(10)\r\n );\r\n } else if (alternativeReportNode) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n alternativeReportNode.range.atEnd, parameterCount.toString(10), \"0\"\r\n );\r\n }\r\n return null;\r\n }\r\n var typeArguments = new Array(parameterCount);\r\n for (let i = 0; i < parameterCount; ++i) {\r\n let type = this.resolveType( // reports\r\n (typeArgumentNodes)[i],\r\n contextualTypeArguments,\r\n true\r\n );\r\n if (!type) return null;\r\n // TODO: check extendsType\r\n typeArguments[i] = type;\r\n }\r\n return typeArguments;\r\n }\r\n\r\n /** Resolves an identifier to the element it refers to. */\r\n resolveIdentifier(\r\n identifier: IdentifierExpression,\r\n contextualFunction: Function | null,\r\n contextualEnum: Enum | null = null\r\n ): ResolvedElement | null {\r\n var name = identifier.text;\r\n\r\n var element: Element | null;\r\n var namespace: Element | null;\r\n\r\n // check siblings\r\n if (contextualEnum) {\r\n\r\n if (\r\n contextualEnum.members &&\r\n (element = contextualEnum.members.get(name)) &&\r\n element.kind == ElementKind.ENUMVALUE\r\n ) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\r\n }\r\n\r\n } else if (contextualFunction) {\r\n\r\n // check locals\r\n if (element = contextualFunction.flow.getScopedLocal(name)) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\r\n }\r\n\r\n // search contextual parent namespaces if applicable\r\n if (namespace = contextualFunction.prototype.namespace) {\r\n do {\r\n if (element = this.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 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 let getter = assert((target).getterPrototype).resolve(); // reports\r\n if (!getter) return null;\r\n if (!(targetType = getter.signature.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\r\n // Look up the member within\r\n switch (target.kind) {\r\n case ElementKind.CLASS_PROTOTYPE:\r\n case ElementKind.CLASS: {\r\n do {\r\n if (target.members && (member = target.members.get(propertyName))) {\r\n return resolvedElement.set(member).withTarget(target, targetExpression);\r\n }\r\n // check inherited static members on the base prototype while target is a class prototype\r\n if (target.kind == ElementKind.CLASS_PROTOTYPE) {\r\n if ((target).basePrototype) {\r\n target = (target).basePrototype;\r\n } else {\r\n break;\r\n }\r\n // or inherited instance members on the 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 }\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, target.internalName\r\n );\r\n return null;\r\n }\r\n\r\n resolveElementAccess(\r\n elementAccess: ElementAccessExpression,\r\n contextualFunction: Function\r\n ): ResolvedElement | null {\r\n // start by resolving the lhs target (expression before the last dot)\r\n var targetExpression = elementAccess.expression;\r\n resolvedElement = this.resolveExpression(\r\n targetExpression,\r\n contextualFunction\r\n );\r\n if (!resolvedElement) return null;\r\n var target = resolvedElement.element;\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n let type = (target).type;\r\n if (type.classType) {\r\n let indexedGetName = (target = type.classType).prototype.fnIndexedGet;\r\n let indexedGet: Element | null;\r\n if (\r\n indexedGetName != null &&\r\n target.members &&\r\n (indexedGet = target.members.get(indexedGetName)) &&\r\n indexedGet.kind == ElementKind.FUNCTION_PROTOTYPE\r\n ) {\r\n return resolvedElement.set(indexedGet).withTarget(type.classType, targetExpression);\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n targetExpression.range, target.internalName\r\n );\r\n return null;\r\n }\r\n\r\n resolveExpression(\r\n expression: Expression,\r\n contextualFunction: Function\r\n ): ResolvedElement | null {\r\n while (expression.kind == NodeKind.PARENTHESIZED) {\r\n expression = (expression).expression;\r\n }\r\n switch (expression.kind) {\r\n case NodeKind.ASSERTION: {\r\n let type = this.resolveType((expression).toType); // reports\r\n if (type) {\r\n let classType = type.classType;\r\n if (classType) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(classType);\r\n }\r\n }\r\n return null;\r\n }\r\n case NodeKind.BINARY: { // TODO: string concatenation, mostly\r\n throw new Error(\"not implemented\");\r\n }\r\n case NodeKind.THIS: { // -> Class\r\n let classType = contextualFunction.instanceMethodOf;\r\n if (classType) {\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 let classType = contextualFunction.instanceMethodOf;\r\n if (classType && (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 let resolved = this.resolveExpression(\r\n (expression).expression,\r\n contextualFunction\r\n );\r\n if (resolved) {\r\n let element = resolved.element;\r\n if (element && element.kind == ElementKind.FUNCTION_PROTOTYPE) {\r\n let instance = (element).resolveUsingTypeArguments(\r\n (expression).typeArguments,\r\n null,\r\n expression\r\n );\r\n if (instance) {\r\n let returnType = instance.signature.returnType;\r\n let classType = returnType.classType;\r\n if (classType) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(classType);\r\n } else {\r\n let signature = returnType.functionType;\r\n if (signature) {\r\n let functionTarget = signature.cachedFunctionTarget;\r\n if (!functionTarget) {\r\n functionTarget = new FunctionTarget(this, signature);\r\n signature.cachedFunctionTarget = functionTarget;\r\n }\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(functionTarget);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return null;\r\n }\r\n}\r\n\r\n/** Common result structure returned when calling any of the resolve functions on a {@link Program}. */\r\nexport class ResolvedElement {\r\n\r\n /** The target element, if a property or element access */\r\n target: Element | null;\r\n /** The target element's expression, if a property or element access. */\r\n targetExpression: Expression | null;\r\n /** The element being accessed. */\r\n element: Element;\r\n\r\n /** Clears the target and sets the resolved element. */\r\n set(element: Element): this {\r\n this.target = null;\r\n this.targetExpression = null;\r\n this.element = element;\r\n return this;\r\n }\r\n\r\n /** Sets the resolved target in addition to the previously set element. */\r\n withTarget(target: Element, targetExpression: Expression): this {\r\n this.target = target;\r\n this.targetExpression = targetExpression;\r\n return this;\r\n }\r\n\r\n /** Tests if the target is a valid instance target. */\r\n get isInstanceTarget(): bool {\r\n return (\r\n this.target != null &&\r\n this.target.kind == ElementKind.CLASS &&\r\n this.targetExpression != null\r\n );\r\n }\r\n}\r\n\r\n// Cached result structure instance\r\nvar resolvedElement: ResolvedElement | null;\r\n\r\n/** Indicates the specific kind of an {@link Element}. */\r\nexport enum ElementKind {\r\n /** A {@link Global}. */\r\n GLOBAL,\r\n /** A {@link Local}. */\r\n LOCAL,\r\n /** An {@link Enum}. */\r\n ENUM,\r\n /** An {@link EnumValue}. */\r\n ENUMVALUE,\r\n /** A {@link FunctionPrototype}. */\r\n FUNCTION_PROTOTYPE,\r\n /** A {@link Function}. */\r\n FUNCTION,\r\n /** A {@link FunctionTarget}. */\r\n FUNCTION_TARGET,\r\n /** A {@link ClassPrototype}. */\r\n CLASS_PROTOTYPE,\r\n /** A {@link Class}. */\r\n CLASS,\r\n /** An {@link InterfacePrototype}. */\r\n INTERFACE_PROTOTYPE,\r\n /** An {@link Interface}. */\r\n INTERFACE,\r\n /** A {@link FieldPrototype}. */\r\n FIELD_PROTOTYPE,\r\n /** A {@link Field}. */\r\n FIELD,\r\n /** A {@link Property}. */\r\n PROPERTY,\r\n /** A {@link Namespace}. */\r\n NAMESPACE\r\n}\r\n\r\n/** Indicates traits of 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 var modifiers = declaration.modifiers;\r\n if (modifiers) {\r\n for (let i = 0, k = modifiers.length; i < k; ++i) {\r\n switch (modifiers[i].modifierKind) {\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 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 var modifiers = declaration.modifiers;\r\n if (modifiers) {\r\n for (let i = 0, k = modifiers.length; i < k; ++i) {\r\n switch (modifiers[i].modifierKind) {\r\n case ModifierKind.EXPORT: {\r\n this.set(ElementFlags.EXPORTED);\r\n break;\r\n }\r\n case ModifierKind.IMPORT: {\r\n this.set(ElementFlags.IMPORTED);\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.CONST: {\r\n this.set(ElementFlags.CONSTANT);\r\n break;\r\n }\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 var modifiers = declaration.modifiers;\r\n if (modifiers) {\r\n for (let i = 0, k = modifiers.length; i < k; ++i) {\r\n switch (modifiers[i].modifierKind) {\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: break; // static fields become globals\r\n default: 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. Not set otherwise. */\r\n classTypeArguments: Type[] | null = null;\r\n\r\n /** Constructs a new function prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FunctionDeclaration,\r\n classPrototype: ClassPrototype | null = null\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n var modifiers = declaration.modifiers;\r\n if (modifiers) {\r\n for (let i = 0, k = modifiers.length; i < k; ++i) {\r\n switch (modifiers[i].modifierKind) {\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: break; // already handled\r\n default: 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 var isInstance = this.is(ElementFlags.INSTANCE);\r\n\r\n // inherit contextual type arguments as provided. might be be overridden.\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(\r\n inheritedName,\r\n inheritedType\r\n );\r\n }\r\n }\r\n\r\n // override with class type arguments if a partially resolved instance method\r\n var classTypeArguments = this.classTypeArguments;\r\n if (classTypeArguments) { // set only if partially resolved\r\n let classDeclaration = (assert(this.classPrototype)).declaration;\r\n let classTypeParameters = classDeclaration.typeParameters;\r\n let numClassTypeParameters = classTypeParameters.length;\r\n assert(numClassTypeParameters == classTypeArguments.length);\r\n for (let i = 0; i < numClassTypeParameters; ++i) {\r\n contextualTypeArguments.set(\r\n classTypeParameters[i].name.text,\r\n classTypeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!classTypeArguments);\r\n }\r\n\r\n // override with function specific type arguments\r\n var signatureNode = declaration.signature;\r\n var functionTypeParameters = declaration.typeParameters;\r\n var numFunctionTypeArguments: i32;\r\n if (functionTypeArguments && (numFunctionTypeArguments = functionTypeArguments.length)) {\r\n assert(functionTypeParameters && numFunctionTypeArguments == functionTypeParameters.length);\r\n for (let i = 0; i < numFunctionTypeArguments; ++i) {\r\n contextualTypeArguments.set(\r\n (functionTypeParameters)[i].name.text,\r\n functionTypeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!functionTypeParameters || functionTypeParameters.length == 0);\r\n }\r\n\r\n // resolve class if an instance method\r\n var classInstance: Class | null = null;\r\n var thisType: Type | null = null;\r\n if (isInstance) {\r\n let classPrototype = assert(this.classPrototype);\r\n classInstance = classPrototype.resolve(classTypeArguments, contextualTypeArguments); // reports\r\n if (!classInstance) return null;\r\n thisType = classInstance.type;\r\n } else {\r\n assert(!this.classPrototype);\r\n }\r\n\r\n // resolve signature node\r\n var signatureParameters = signatureNode.parameterTypes;\r\n var signatureParameterCount = signatureParameters.length;\r\n var parameterTypes = new Array(signatureParameterCount);\r\n var parameterNames = new Array(signatureParameterCount);\r\n var requiredParameters = 0;\r\n for (let i = 0; i < signatureParameterCount; ++i) {\r\n let parameterDeclaration = signatureParameters[i];\r\n if (parameterDeclaration.parameterKind == ParameterKind.DEFAULT) {\r\n requiredParameters = i + 1;\r\n }\r\n let typeNode = assert(parameterDeclaration.type);\r\n let parameterType = this.program.resolveType(typeNode, contextualTypeArguments, true); // reports\r\n if (!parameterType) return null;\r\n parameterTypes[i] = parameterType;\r\n parameterNames[i] = parameterDeclaration.name.text;\r\n }\r\n\r\n var returnType: Type;\r\n if (this.is(ElementFlags.SETTER) || this.is(ElementFlags.CONSTRUCTOR)) {\r\n returnType = Type.void; // not annotated\r\n } else {\r\n let typeNode = assert(signatureNode.returnType);\r\n let type = this.program.resolveType(typeNode, contextualTypeArguments, true); // reports\r\n if (!type) return null;\r\n returnType = type;\r\n }\r\n\r\n var signature = new Signature(parameterTypes, returnType, thisType);\r\n signature.parameterNames = parameterNames;\r\n signature.requiredParameters = requiredParameters;\r\n\r\n var internalName = this.internalName;\r\n if (instanceKey.length) internalName += \"<\" + instanceKey + \">\";\r\n instance = new Function(this, internalName, signature, classInstance);\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 let partialPrototype = new FunctionPrototype(\r\n this.program,\r\n this.simpleName,\r\n this.internalName,\r\n this.declaration,\r\n this.classPrototype\r\n );\r\n partialPrototype.flags = this.flags;\r\n partialPrototype.classTypeArguments = classTypeArguments;\r\n return partialPrototype;\r\n }\r\n return this; // no need to clone\r\n }\r\n\r\n /** Resolves the specified type arguments prior to resolving this prototype to an instance. */\r\n resolveUsingTypeArguments(\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n reportNode: Node\r\n ): Function | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (this.is(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: CommonTypeNode[] | 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 let k = typeArgumentNodes.length;\r\n resolvedTypeArguments = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let resolvedType = this.program.resolveType( // reports\r\n typeArgumentNodes[i],\r\n contextualTypeArguments,\r\n true\r\n );\r\n if (!resolvedType) return null;\r\n resolvedTypeArguments[i] = resolvedType;\r\n }\r\n }\r\n return resolvedTypeArguments;\r\n }\r\n\r\n toString(): string { return this.simpleName; }\r\n}\r\n\r\n/** A resolved function. */\r\nexport class Function extends Element {\r\n\r\n kind = ElementKind.FUNCTION;\r\n\r\n /** Prototype reference. */\r\n prototype: FunctionPrototype;\r\n /** Function signature. */\r\n signature: Signature;\r\n /** If 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 /** Trampoline function for calling with omitted arguments. */\r\n trampoline: Function | null = null;\r\n\r\n private nextBreakId: i32 = 0;\r\n private breakStack: i32[] | null = null;\r\n\r\n /** Constructs a new concrete function. */\r\n constructor(\r\n prototype: FunctionPrototype,\r\n internalName: string,\r\n signature: Signature,\r\n instanceMethodOf: Class | null = null\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName);\r\n this.prototype = prototype;\r\n this.signature = signature;\r\n this.instanceMethodOf = instanceMethodOf;\r\n this.flags = prototype.flags;\r\n if (!(prototype.is(ElementFlags.BUILTIN) || prototype.is(ElementFlags.DECLARED))) {\r\n let localIndex = 0;\r\n if (instanceMethodOf) {\r\n assert(this.is(ElementFlags.INSTANCE));\r\n this.locals.set(\r\n \"this\",\r\n new Local(\r\n prototype.program,\r\n \"this\",\r\n localIndex++,\r\n assert(signature.thisType)\r\n )\r\n );\r\n if (instanceMethodOf.contextualTypeArguments) {\r\n if (!this.contextualTypeArguments) {\r\n this.contextualTypeArguments = new Map();\r\n }\r\n for (let [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 let parameterTypes = signature.parameterTypes;\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) {\r\n let parameterType = parameterTypes[i];\r\n let parameterName = signature.getParameterName(i);\r\n this.locals.set(\r\n parameterName,\r\n new Local(\r\n prototype.program,\r\n parameterName,\r\n localIndex++,\r\n parameterType\r\n )\r\n );\r\n }\r\n }\r\n this.flow = Flow.create(this);\r\n }\r\n\r\n /** Adds a local of the specified type, with an optional name. */\r\n addLocal(type: Type, name: string | null = null): Local {\r\n // if it has a name, check previously as this method will throw otherwise\r\n var localIndex = this.signature.parameterTypes.length + this.additionalLocals.length;\r\n if (this.is(ElementFlags.INSTANCE)) ++localIndex;\r\n var local = new Local(\r\n this.prototype.program,\r\n name\r\n ? name\r\n : \"var$\" + localIndex.toString(10),\r\n localIndex,\r\n type\r\n );\r\n if (name) {\r\n if (this.locals.has(name)) throw new Error(\"duplicate local name\");\r\n this.locals.set(name, local);\r\n }\r\n this.additionalLocals.push(type);\r\n return local;\r\n }\r\n\r\n private tempI32s: Local[] | null = null;\r\n private tempI64s: Local[] | null = null;\r\n private tempF32s: Local[] | null = null;\r\n private tempF64s: Local[] | null = null;\r\n\r\n /** Gets a free temporary local of the specified type. */\r\n getTempLocal(type: Type): Local {\r\n var temps: Local[] | null;\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s;\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n if (temps && temps.length) {\r\n let ret = temps.pop();\r\n ret.type = type;\r\n return ret;\r\n }\r\n return this.addLocal(type);\r\n }\r\n\r\n /** Frees the temporary local for reuse. */\r\n freeTempLocal(local: Local): void {\r\n var temps: Local[];\r\n assert(local.type != null); // internal error\r\n switch ((local.type).toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n temps.push(local);\r\n }\r\n\r\n /** Gets and immediately frees a temporary local of the specified type. */\r\n getAndFreeTempLocal(type: Type): Local {\r\n var temps: Local[];\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n if (temps.length > 0) {\r\n return temps[temps.length - 1];\r\n }\r\n var local: Local = this.addLocal(type);\r\n temps.push(local);\r\n return local;\r\n }\r\n\r\n /** Enters a(nother) break context. */\r\n enterBreakContext(): string {\r\n var id = this.nextBreakId++;\r\n if (!this.breakStack) {\r\n this.breakStack = [ id ];\r\n } else {\r\n this.breakStack.push(id);\r\n }\r\n return this.breakContext = id.toString(10);\r\n }\r\n\r\n /** Leaves the current break context. */\r\n leaveBreakContext(): void {\r\n assert(this.breakStack != null);\r\n var length = (this.breakStack).length;\r\n assert(length > 0);\r\n (this.breakStack).pop();\r\n if (length > 1) {\r\n this.breakContext = (this.breakStack)[length - 2].toString(10);\r\n } else {\r\n this.breakContext = null;\r\n this.breakStack = null;\r\n }\r\n }\r\n\r\n /** Finalizes the function once compiled, releasing no longer needed resources. */\r\n finalize(module: Module, ref: FunctionRef): void {\r\n this.ref = ref;\r\n assert(!this.breakStack || !this.breakStack.length); // internal error\r\n this.breakStack = null;\r\n this.breakContext = null;\r\n this.tempI32s = this.tempI64s = this.tempF32s = this.tempF64s = null;\r\n if (this.program.options.sourceMap) {\r\n let debugLocations = this.debugLocations;\r\n if (debugLocations) {\r\n for (let i = 0, k = debugLocations.length; i < k; ++i) {\r\n let debugLocation = debugLocations[i];\r\n module.setDebugLocation(\r\n ref,\r\n debugLocation.debugInfoRef,\r\n debugLocation.source.debugInfoIndex,\r\n debugLocation.line,\r\n debugLocation.column\r\n );\r\n }\r\n }\r\n }\r\n this.debugLocations = null;\r\n }\r\n\r\n /** Returns the TypeScript representation of this function. */\r\n toString(): string { return this.prototype.simpleName; }\r\n}\r\n\r\n/** A resolved function target, that is a function called indirectly by an index and signature. */\r\nexport class FunctionTarget extends Element {\r\n\r\n kind = ElementKind.FUNCTION_TARGET;\r\n\r\n /** Underlying signature. */\r\n signature: Signature;\r\n /** Function type. */\r\n type: Type;\r\n\r\n /** Constructs a new function target. */\r\n constructor(program: Program, signature: Signature) {\r\n super(program, \"\", \"\");\r\n var simpleName = signature.toSignatureString();\r\n this.simpleName = simpleName;\r\n this.internalName = simpleName;\r\n this.signature = signature;\r\n this.type = Type.u32.asFunction(signature);\r\n }\r\n}\r\n\r\n/** A yet unresolved instance field prototype. */\r\nexport class FieldPrototype extends Element {\r\n\r\n kind = ElementKind.FIELD_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: FieldDeclaration;\r\n /** Parent class prototype. */\r\n classPrototype: ClassPrototype;\r\n\r\n /** Constructs a new field prototype. */\r\n constructor(\r\n classPrototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FieldDeclaration\r\n ) {\r\n super(classPrototype.program, simpleName, internalName);\r\n this.classPrototype = classPrototype;\r\n this.declaration = declaration;\r\n var modifiers = declaration.modifiers;\r\n if (modifiers) {\r\n for (let i = 0, k = modifiers.length; i < k; ++i) {\r\n switch (modifiers[i].modifierKind) {\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: break; // already handled\r\n default: 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 var modifiers = declaration.modifiers;\r\n if (modifiers) {\r\n for (let i = 0, k = modifiers.length; i < k; ++i) {\r\n switch (modifiers[i].modifierKind) {\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 default: throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\r\n if (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 (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n\r\n var declaration = this.declaration;\r\n var baseClass: Class | null = null;\r\n if (declaration.extendsType) {\r\n let baseClassType = this.program.resolveType(declaration.extendsType, null); // reports\r\n if (!baseClassType) return null;\r\n if (!(baseClass = baseClassType.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 (let inheritedMember of baseClass.members.values()) {\r\n instance.members.set(inheritedMember.simpleName, inheritedMember);\r\n }\r\n }\r\n }\r\n\r\n if (this.constructorPrototype) {\r\n let partialConstructor = this.constructorPrototype.resolvePartial(typeArguments); // reports\r\n if (partialConstructor) {\r\n instance.constructorInstance = partialConstructor.resolve(); // reports\r\n }\r\n // TODO: ^ doesn't know the return type, hence returns null\r\n }\r\n\r\n if (this.instanceMembers) {\r\n for (let member of this.instanceMembers.values()) {\r\n switch (member.kind) {\r\n case ElementKind.FIELD_PROTOTYPE: { // fields are layed out in advance\r\n if (!instance.members) instance.members = new Map();\r\n let fieldDeclaration = (member).declaration;\r\n if (!fieldDeclaration.type) {\r\n throw new Error(\"type expected\"); // TODO: check if parent class defines a type\r\n }\r\n let fieldType = this.program.resolveType( // reports\r\n fieldDeclaration.type,\r\n instance.contextualTypeArguments\r\n );\r\n if (fieldType) {\r\n let fieldInstance = new Field(member, (member).internalName, fieldType);\r\n switch (fieldType.byteSize) { // align\r\n case 1: break;\r\n case 2: {\r\n if (memoryOffset & 1) ++memoryOffset;\r\n break;\r\n }\r\n case 4: {\r\n if (memoryOffset & 3) memoryOffset = (memoryOffset | 3) + 1;\r\n break;\r\n }\r\n case 8: {\r\n if (memoryOffset & 7) memoryOffset = (memoryOffset | 7) + 1;\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n fieldInstance.memoryOffset = memoryOffset;\r\n memoryOffset += fieldType.byteSize;\r\n instance.members.set(member.simpleName, fieldInstance);\r\n }\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: { // instance methods remain partially resolved prototypes until compiled\r\n if (!instance.members) instance.members = new Map();\r\n let methodPrototype = (member).resolvePartial(typeArguments); // reports\r\n if (methodPrototype) {\r\n 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 let 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: 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: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n alternativeReportNode: Node | null\r\n ): Class | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (this.is(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 (let [baseName, baseType] of base.contextualTypeArguments) {\r\n this.contextualTypeArguments.set(baseName, baseType);\r\n }\r\n }\r\n }\r\n\r\n // apply instance-specific contextual type arguments\r\n var declaration = this.prototype.declaration;\r\n var i: i32, k: i32;\r\n if (declaration) { // irrelevant for built-ins\r\n let typeParameters = declaration.typeParameters;\r\n if (typeArguments) {\r\n if ((k = typeArguments.length) != typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n if (k) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (i = 0; i < k; ++i) {\r\n this.contextualTypeArguments.set(typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n }\r\n } else if (typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n }\r\n }\r\n\r\n /** Tests if a value of this class type is assignable to a target of the specified class type. */\r\n isAssignableTo(target: Class): bool {\r\n var current: Class | null = this;\r\n do {\r\n if (current == target) {\r\n return true;\r\n }\r\n } while (current = current.base);\r\n return false;\r\n }\r\n\r\n toString(): string {\r\n return this.prototype.simpleName;\r\n }\r\n}\r\n\r\n/** A yet unresolved interface. */\r\nexport class InterfacePrototype extends ClassPrototype {\r\n\r\n kind = ElementKind.INTERFACE_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: InterfaceDeclaration; // more specific\r\n\r\n /** Constructs a new interface prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: InterfaceDeclaration\r\n ) {\r\n super(program, simpleName, internalName, declaration);\r\n }\r\n}\r\n\r\n/** A resolved interface. */\r\nexport class Interface extends Class {\r\n\r\n kind = ElementKind.INTERFACE;\r\n\r\n /** Prototype reference. */\r\n prototype: InterfacePrototype; // more specific\r\n /** Base interface, if applcable. */\r\n base: Interface | null; // more specific\r\n\r\n /** Constructs a new interface. */\r\n constructor(\r\n prototype: InterfacePrototype,\r\n internalName: string,\r\n typeArguments: Type[] = [],\r\n base: Interface | null = null\r\n ) {\r\n super(prototype, internalName, typeArguments, base);\r\n }\r\n}\r\n\r\n/** Control flow flags indicating specific conditions. */\r\nexport const enum FlowFlags {\r\n /** No specific conditions. */\r\n NONE = 0,\r\n /** 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 (let scopedLocal of this.scopedLocals.values()) {\r\n this.currentFunction.freeTempLocal(scopedLocal);\r\n }\r\n this.scopedLocals = null;\r\n }\r\n\r\n // Propagate flags to parent\r\n if (this.is(FlowFlags.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: return true;\r\n default: 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: {\r\n assert(false);\r\n return \"\";\r\n }\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 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 let c = text.charCodeAt(this.pos);\r\n switch (c) {\r\n case CharCode.CARRIAGERETURN: {\r\n if (\r\n ++this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n break;\r\n }\r\n case CharCode.LINEFEED:\r\n case CharCode.TAB:\r\n case CharCode.VERTICALTAB:\r\n case CharCode.FORMFEED:\r\n case CharCode.SPACE: {\r\n ++this.pos;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.EXCLAMATION_EQUALS_EQUALS;\r\n }\r\n return Token.EXCLAMATION_EQUALS;\r\n }\r\n return Token.EXCLAMATION;\r\n }\r\n case CharCode.DOUBLEQUOTE:\r\n case CharCode.SINGLEQUOTE:\r\n case CharCode.BACKTICK: { // TODO\r\n return Token.STRINGLITERAL; // expects a call to readString\r\n }\r\n case CharCode.PERCENT: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.PERCENT_EQUALS;\r\n }\r\n return Token.PERCENT;\r\n }\r\n case CharCode.AMPERSAND: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.AMPERSAND) {\r\n ++this.pos;\r\n return Token.AMPERSAND_AMPERSAND;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.AMPERSAND_EQUALS;\r\n }\r\n }\r\n return Token.AMPERSAND;\r\n }\r\n case CharCode.OPENPAREN: {\r\n ++this.pos;\r\n return Token.OPENPAREN;\r\n }\r\n case CharCode.CLOSEPAREN: {\r\n ++this.pos;\r\n return Token.CLOSEPAREN;\r\n }\r\n case CharCode.ASTERISK: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.ASTERISK_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.ASTERISK_ASTERISK_EQUALS;\r\n }\r\n return Token.ASTERISK_ASTERISK;\r\n }\r\n }\r\n return Token.ASTERISK;\r\n }\r\n case CharCode.PLUS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.PLUS) {\r\n ++this.pos;\r\n return Token.PLUS_PLUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.PLUS_EQUALS;\r\n }\r\n }\r\n return Token.PLUS;\r\n }\r\n case CharCode.COMMA: {\r\n ++this.pos;\r\n return Token.COMMA;\r\n }\r\n case CharCode.MINUS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.MINUS) {\r\n ++this.pos;\r\n return Token.MINUS_MINUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.MINUS_EQUALS;\r\n }\r\n }\r\n return Token.MINUS;\r\n }\r\n case CharCode.DOT: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (isDecimalDigit(text.charCodeAt(this.pos))) {\r\n --this.pos;\r\n return Token.FLOATLITERAL; // expects a call to readFloat\r\n }\r\n if (\r\n maxTokenLength > 2 && this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.DOT &&\r\n text.charCodeAt(this.pos + 1) == CharCode.DOT\r\n ) {\r\n this.pos += 2;\r\n return Token.DOT_DOT_DOT;\r\n }\r\n }\r\n return Token.DOT;\r\n }\r\n case CharCode.SLASH: {\r\n ++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 let closed = false;\r\n while (++this.pos < this.end) {\r\n c = text.charCodeAt(this.pos);\r\n if (\r\n c == CharCode.ASTERISK &&\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n ) {\r\n this.pos += 2;\r\n closed = true;\r\n break;\r\n }\r\n }\r\n if (!closed) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n this.range(this.pos), \"*/\"\r\n );\r\n }\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 let posBefore = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(c = text.charCodeAt(this.pos))\r\n ) {\r\n if (!isKeywordCharacter(c)) {\r\n this.pos = posBefore;\r\n return Token.IDENTIFIER;\r\n }\r\n }\r\n let keywordText = text.substring(posBefore, this.pos);\r\n let keywordToken = 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 }\r\n return Token.ENDOFFILE;\r\n }\r\n\r\n peek(\r\n checkOnNewLine: bool = false,\r\n preferIdentifier: bool = false,\r\n maxCompoundLength: i32 = i32.MAX_VALUE\r\n ): Token {\r\n var text = this.source.text;\r\n if (this.nextToken < 0) {\r\n let posBefore = this.pos;\r\n let tokenBefore = this.token;\r\n let tokenPosBefore = this.tokenPos;\r\n this.nextToken = this.unsafeNext(preferIdentifier, maxCompoundLength);\r\n if (checkOnNewLine) {\r\n this.nextTokenOnNewLine = false;\r\n while (--this.tokenPos > posBefore) {\r\n if (isLineBreak(text.charCodeAt(this.tokenPos))) {\r\n this.nextTokenOnNewLine = true;\r\n break;\r\n }\r\n }\r\n }\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n }\r\n return this.nextToken;\r\n }\r\n\r\n skip(token: Token): bool {\r\n var posBefore = this.pos;\r\n var tokenBefore = this.token;\r\n var tokenPosBefore = this.tokenPos;\r\n var maxCompoundLength = i32.MAX_VALUE;\r\n switch (token) {\r\n case Token.GREATERTHAN: { // where parsing type arguments\r\n maxCompoundLength = 1;\r\n break;\r\n }\r\n }\r\n this.token = this.unsafeNext(token == Token.IDENTIFIER, maxCompoundLength);\r\n if (this.token == token) {\r\n this.nextToken = -1;\r\n return true;\r\n } else {\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n return false;\r\n }\r\n }\r\n\r\n // 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(): State {\r\n var state: State;\r\n if (reusableState) {\r\n state = reusableState;\r\n reusableState = null;\r\n } else {\r\n state = new State();\r\n }\r\n state.pos = this.pos;\r\n state.token = this.token;\r\n state.tokenPos = this.tokenPos;\r\n return state;\r\n }\r\n\r\n discard(state: State): void {\r\n reusableState = state;\r\n }\r\n\r\n reset(state: State): void {\r\n this.pos = state.pos;\r\n this.token = state.token;\r\n this.tokenPos = state.tokenPos;\r\n this.nextToken = -1;\r\n reusableState = state;\r\n }\r\n\r\n range(start: i32 = -1, end: i32 = -1): Range {\r\n if (start < 0) {\r\n start = this.tokenPos;\r\n end = this.pos;\r\n } else if (end < 0) {\r\n end = start;\r\n }\r\n return new Range(this.source, start, end);\r\n }\r\n\r\n readIdentifier(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(text.charCodeAt(this.pos))\r\n );\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readString(): string {\r\n var text = this.source.text;\r\n var quote = text.charCodeAt(this.pos++);\r\n var start = this.pos;\r\n var result = \"\";\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.end)\r\n );\r\n break;\r\n }\r\n let c = text.charCodeAt(this.pos);\r\n if (c == quote) {\r\n result += text.substring(start, this.pos++);\r\n break;\r\n }\r\n if (c == CharCode.BACKSLASH) {\r\n result += text.substring(start, this.pos);\r\n result += this.readEscapeSequence();\r\n start = this.pos;\r\n continue;\r\n }\r\n if (isLineBreak(c)) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n return result;\r\n }\r\n\r\n readEscapeSequence(): string {\r\n if (++this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.end)\r\n );\r\n return \"\";\r\n }\r\n\r\n var text = this.source.text;\r\n var c = text.charCodeAt(this.pos++);\r\n switch (c) {\r\n case CharCode._0: return \"\\0\";\r\n case CharCode.b: return \"\\b\";\r\n case CharCode.t: return \"\\t\";\r\n case CharCode.n: return \"\\n\";\r\n case CharCode.v: return \"\\v\";\r\n case CharCode.f: return \"\\f\";\r\n case CharCode.r: return \"\\r\";\r\n case CharCode.SINGLEQUOTE: return \"'\";\r\n case CharCode.DOUBLEQUOTE: return \"\\\"\";\r\n case CharCode.u: {\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.OPENBRACE\r\n ) {\r\n ++this.pos;\r\n return this.readExtendedUnicodeEscape(); // \\u{DDDDDDDD}\r\n }\r\n return this.readUnicodeEscape(); // \\uDDDD\r\n }\r\n case CharCode.CARRIAGERETURN: {\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n // fall through\r\n }\r\n case CharCode.LINEFEED:\r\n case CharCode.LINESEPARATOR:\r\n case CharCode.PARAGRAPHSEPARATOR: return \"\";\r\n default: return String.fromCharCode(c);\r\n }\r\n }\r\n\r\n readRegexpPattern(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var escaped = false;\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.end)\r\n );\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.BACKSLASH) {\r\n ++this.pos;\r\n escaped = true;\r\n continue;\r\n }\r\n let c = text.charCodeAt(this.pos);\r\n if (c == CharCode.SLASH && !escaped) break;\r\n if (isLineBreak(c)) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n escaped = false;\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readRegexpFlags(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var flags = 0;\r\n while (this.pos < this.end) {\r\n let c: i32 = text.charCodeAt(this.pos);\r\n if (!isIdentifierPart(c)) break;\r\n ++this.pos;\r\n\r\n // make sure each supported flag is unique\r\n switch (c) {\r\n case CharCode.g: {\r\n flags |= flags & 1 ? -1 : 1;\r\n break;\r\n }\r\n case CharCode.i: {\r\n flags |= flags & 2 ? -1 : 2;\r\n break;\r\n }\r\n case CharCode.m: {\r\n flags |= flags & 4 ? -1 : 4;\r\n break;\r\n }\r\n default: {\r\n flags = -1;\r\n break;\r\n }\r\n }\r\n }\r\n if (flags == -1) {\r\n this.error(\r\n DiagnosticCode.Invalid_regular_expression_flags,\r\n this.range(start, this.pos)\r\n );\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n testInteger(): bool {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 1 < this.end) {\r\n switch (text.charCodeAt(this.pos + 2)) {\r\n case CharCode.X:\r\n case CharCode.x:\r\n case CharCode.B:\r\n case CharCode.b:\r\n case CharCode.O:\r\n case CharCode.o: return true;\r\n }\r\n }\r\n var pos = this.pos;\r\n while (pos < this.end) {\r\n let c = text.charCodeAt(pos);\r\n if (c == CharCode.DOT || c == CharCode.E || c == CharCode.e) {\r\n return false;\r\n }\r\n if (c < CharCode._0 || c > CharCode._9) break;\r\n pos++;\r\n }\r\n return true;\r\n }\r\n\r\n readInteger(): I64 {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 2 < this.end) {\r\n switch (text.charCodeAt(this.pos + 1)) {\r\n case CharCode.X:\r\n case CharCode.x: {\r\n this.pos += 2;\r\n return this.readHexInteger();\r\n }\r\n case CharCode.B:\r\n case CharCode.b: {\r\n this.pos += 2;\r\n return this.readBinaryInteger();\r\n }\r\n case CharCode.O:\r\n case CharCode.o: {\r\n this.pos += 2;\r\n return this.readOctalInteger();\r\n }\r\n }\r\n if (isOctalDigit(text.charCodeAt(this.pos + 1))) {\r\n let start = this.pos;\r\n ++this.pos;\r\n let value = this.readOctalInteger();\r\n this.error(\r\n DiagnosticCode.Octal_literals_are_not_allowed_in_strict_mode,\r\n this.range(start, this.pos)\r\n );\r\n return value;\r\n }\r\n }\r\n return this.readDecimalInteger();\r\n }\r\n\r\n readHexInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_16 = i64_new(16, 0);\r\n while (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 16 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n // value = value * 16 + 10 + c - CharCode.A;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.A, 0)\r\n );\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n // value = value * 16 + 10 + c - CharCode.a;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.a, 0)\r\n );\r\n } else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(start)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readDecimalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_10 = i64_new(10, 0);\r\n while (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 10 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_10),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Digit_expected,\r\n this.range(start)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readOctalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_8 = i64_new(8, 0);\r\n while (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos);\r\n if (c >= CharCode._0 && c <= CharCode._7) {\r\n // value = value * 8 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_8),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Octal_digit_expected,\r\n this.range(start)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readBinaryInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_2 = i64_new(2, 0);\r\n var i64_1 = i64_new(1, 0);\r\n while (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos);\r\n if (c == CharCode._0) {\r\n // value = value * 2;\r\n value = i64_mul(\r\n value,\r\n i64_2\r\n );\r\n } else if (c == CharCode._1) {\r\n // value = value * 2 + 1;\r\n value = i64_add(\r\n i64_mul(value, i64_2),\r\n i64_1\r\n );\r\n } else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Binary_digit_expected,\r\n this.range(start)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readFloat(): f64 {\r\n var start = this.pos;\r\n var text = this.source.text;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n if (this.pos < this.end && text.charCodeAt(this.pos) == CharCode.DOT) {\r\n ++this.pos;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n if (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos);\r\n if (c == CharCode.E || c == CharCode.e) {\r\n if (\r\n ++this.pos < this.end && (\r\n text.charCodeAt(this.pos) == CharCode.MINUS ||\r\n text.charCodeAt(this.pos) == CharCode.PLUS\r\n ) &&\r\n isDecimalDigit(text.charCodeAt(this.pos + 1))\r\n ) {\r\n ++this.pos;\r\n }\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n }\r\n return parseFloat(text.substring(start, this.pos));\r\n }\r\n\r\n readUnicodeEscape(): string {\r\n var remain = 4;\r\n var value = 0;\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos++);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n value = value * 16 + c - CharCode._0;\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n value = value * 16 + 10 + c - CharCode.A;\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n value = value * 16 + 10 + c - CharCode.a;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(this.pos - 1, this.pos)\r\n );\r\n return \"\";\r\n }\r\n if (--remain == 0) break;\r\n }\r\n if (remain) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.pos)\r\n );\r\n return \"\";\r\n }\r\n return String.fromCharCode(value);\r\n }\r\n\r\n private readExtendedUnicodeEscape(): string {\r\n var start = this.pos;\r\n var value = this.readHexInteger();\r\n var value32 = i64_low(value);\r\n var invalid = false;\r\n\r\n assert(!i64_high(value));\r\n if (value32 > 0x10FFFF) {\r\n this.error(\r\n DiagnosticCode.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n var text = this.source.text;\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(start, this.end)\r\n );\r\n invalid = true;\r\n } else if (text.charCodeAt(this.pos) == CharCode.CLOSEBRACE) {\r\n ++this.pos;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Unterminated_Unicode_escape_sequence,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n if (invalid) return \"\";\r\n return value32 < 65536\r\n ? String.fromCharCode(value32)\r\n : String.fromCharCode(\r\n (((value32 - 65536) / 1024 | 0) + 0xD800) as i32,\r\n ( (value32 - 65536) % 1024 + 0xDC00) as i32\r\n );\r\n }\r\n\r\n finish(): void {\r\n }\r\n}\r\n\r\n/** Tokenizer state as returned by {@link Tokenizer#mark} and consumed by {@link Tokenizer#reset}. */\r\nexport class State {\r\n /** Current position. */\r\n pos: i32;\r\n /** Current token. */\r\n token: Token;\r\n /** Current token's position. */\r\n tokenPos: i32;\r\n}\r\n\r\n// Reusable state object to reduce allocations\r\nvar reusableState: State | null = null;\r\n","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 PARAMETER,\r\n SIGNATURE,\r\n\r\n // expressions\r\n IDENTIFIER,\r\n ASSERTION,\r\n BINARY,\r\n CALL,\r\n COMMA,\r\n ELEMENTACCESS,\r\n FALSE,\r\n FUNCTION,\r\n 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 // special\r\n DECORATOR,\r\n MODIFIER,\r\n EXPORTMEMBER,\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 name: IdentifierExpression,\r\n typeArguments: CommonTypeNode[] | null,\r\n isNullable: bool,\r\n range: Range\r\n ): TypeNode {\r\n var type = new TypeNode();\r\n type.range = range;\r\n type.name = name; name.parent = type;\r\n type.typeArguments = typeArguments; if (typeArguments) setParent(typeArguments, type);\r\n type.isNullable = isNullable;\r\n return type;\r\n }\r\n\r\n static createOmittedType(\r\n range: Range\r\n ): TypeNode {\r\n return Node.createType(\r\n Node.createIdentifierExpression(\"\", range),\r\n null,\r\n false,\r\n range\r\n );\r\n }\r\n\r\n static createTypeParameter(\r\n name: IdentifierExpression,\r\n extendsType: TypeNode | null,\r\n range: Range\r\n ): TypeParameterNode {\r\n var elem = new TypeParameterNode();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n elem.extendsType = extendsType; if (extendsType) extendsType.parent = elem;\r\n return elem;\r\n }\r\n\r\n static createParameter(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n kind: ParameterKind,\r\n range: Range\r\n ): ParameterNode {\r\n var elem = new ParameterNode();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n elem.type = type; if (type) type.parent = elem;\r\n elem.initializer = initializer; if (initializer) initializer.parent = elem;\r\n elem.parameterKind = kind;\r\n return elem;\r\n }\r\n\r\n static createSignature(\r\n parameters: ParameterNode[],\r\n returnType: CommonTypeNode,\r\n explicitThisType: TypeNode | null,\r\n isNullable: bool,\r\n range: Range\r\n ): SignatureNode {\r\n var sig = new SignatureNode();\r\n sig.range = range;\r\n sig.parameterTypes = parameters; setParent(parameters, sig);\r\n sig.returnType = returnType; returnType.parent = sig;\r\n sig.explicitThisType = explicitThisType; if (explicitThisType) explicitThisType.parent = sig;\r\n sig.isNullable = isNullable;\r\n return sig;\r\n }\r\n\r\n // special\r\n\r\n static createDecorator(\r\n expression: Expression,\r\n args: Expression[] | null,\r\n range: Range\r\n ): DecoratorNode {\r\n var stmt = new DecoratorNode();\r\n stmt.range = range;\r\n stmt.name = expression; expression.parent = stmt;\r\n stmt.arguments = args; if (args) setParent(args, stmt);\r\n if (expression.kind == NodeKind.IDENTIFIER) {\r\n switch ((expression).text) {\r\n case \"global\": {\r\n stmt.decoratorKind = DecoratorKind.GLOBAL;\r\n break;\r\n }\r\n case \"operator\": {\r\n stmt.decoratorKind = DecoratorKind.OPERATOR;\r\n break;\r\n }\r\n case \"unmanaged\": {\r\n stmt.decoratorKind = DecoratorKind.UNMANAGED;\r\n break;\r\n }\r\n case \"offset\": {\r\n stmt.decoratorKind = DecoratorKind.OFFSET;\r\n break;\r\n }\r\n default: {\r\n stmt.decoratorKind = DecoratorKind.CUSTOM;\r\n break;\r\n }\r\n }\r\n } else {\r\n stmt.decoratorKind = DecoratorKind.CUSTOM;\r\n }\r\n return stmt;\r\n }\r\n\r\n static createModifier(kind: ModifierKind, range: Range): ModifierNode {\r\n var elem = new ModifierNode();\r\n elem.range = range;\r\n elem.modifierKind = kind;\r\n return elem;\r\n }\r\n\r\n // expressions\r\n\r\n static createIdentifierExpression(\r\n name: string,\r\n range: Range\r\n ): IdentifierExpression {\r\n var expr = new IdentifierExpression();\r\n expr.range = range;\r\n expr.text = name;\r\n return expr;\r\n }\r\n\r\n static createEmptyIdentifierExpression(\r\n range: Range\r\n ): IdentifierExpression {\r\n var expr = new IdentifierExpression();\r\n expr.range = range;\r\n expr.text = \"\";\r\n return expr;\r\n }\r\n\r\n static createArrayLiteralExpression(\r\n elements: (Expression | null)[],\r\n range: Range\r\n ): ArrayLiteralExpression {\r\n var expr = new ArrayLiteralExpression();\r\n expr.range = range;\r\n expr.elementExpressions = elements; setParentIfNotNull(elements, expr);\r\n return expr;\r\n }\r\n\r\n static createAssertionExpression(\r\n assertionKind: AssertionKind,\r\n expression: Expression,\r\n toType: CommonTypeNode,\r\n range: Range\r\n ): AssertionExpression {\r\n var expr = new AssertionExpression();\r\n expr.range = range;\r\n expr.assertionKind = assertionKind;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.toType = toType; toType.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createBinaryExpression(\r\n operator: Token,\r\n left: Expression,\r\n right: Expression,\r\n range: Range\r\n ): BinaryExpression {\r\n var expr = new BinaryExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.left = left; left.parent = expr;\r\n expr.right = right; right.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createCallExpression(\r\n expression: Expression,\r\n typeArgs: CommonTypeNode[] | null,\r\n args: Expression[],\r\n range: Range\r\n ): CallExpression {\r\n var expr = new CallExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.typeArguments = typeArgs; if (typeArgs) setParent(typeArgs, expr);\r\n expr.arguments = args; setParent(args, expr);\r\n return expr;\r\n }\r\n\r\n static createCommaExpression(\r\n expressions: Expression[],\r\n range: Range\r\n ): CommaExpression {\r\n var expr = new CommaExpression();\r\n expr.range = range;\r\n expr.expressions = expressions; setParent(expressions, expr);\r\n return expr;\r\n }\r\n\r\n static createConstructorExpression(\r\n range: Range\r\n ): ConstructorExpression {\r\n var expr = new ConstructorExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createElementAccessExpression(\r\n expression: Expression,\r\n element: Expression,\r\n range: Range\r\n ): ElementAccessExpression {\r\n var expr = new ElementAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.elementExpression = element; element.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createFalseExpression(\r\n range: Range\r\n ): FalseExpression {\r\n var expr = new FalseExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createFloatLiteralExpression(\r\n value: f64,\r\n range: Range\r\n ): FloatLiteralExpression {\r\n var expr = new FloatLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createFunctionExpression(\r\n declaration: FunctionDeclaration,\r\n 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: CommonTypeNode[] | null,\r\n args: Expression[],\r\n range: Range\r\n ): NewExpression {\r\n var expr = new NewExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.typeArguments = typeArgs; if (typeArgs) setParent(typeArgs, expr);\r\n expr.arguments = args; setParent(args, expr);\r\n return expr;\r\n }\r\n\r\n static createNullExpression(\r\n range: Range\r\n ): NullExpression {\r\n var expr = new NullExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createParenthesizedExpression(\r\n expression: Expression,\r\n range: Range\r\n ): ParenthesizedExpression {\r\n var expr = new ParenthesizedExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createPropertyAccessExpression(\r\n expression: Expression,\r\n property: IdentifierExpression,\r\n range: Range\r\n ): PropertyAccessExpression {\r\n var expr = new PropertyAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.property = property; property.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createRegexpLiteralExpression(\r\n pattern: string,\r\n flags: string,\r\n range: Range\r\n ): RegexpLiteralExpression {\r\n var expr = new RegexpLiteralExpression();\r\n expr.range = range;\r\n expr.pattern = pattern;\r\n expr.patternFlags = flags;\r\n return expr;\r\n }\r\n\r\n static createTernaryExpression(\r\n condition: Expression,\r\n ifThen: Expression,\r\n ifElse: Expression,\r\n range: Range\r\n ): TernaryExpression {\r\n var expr = new TernaryExpression();\r\n expr.range = range;\r\n expr.condition = condition; condition.parent = expr;\r\n expr.ifThen = ifThen; ifThen.parent = expr;\r\n expr.ifElse = ifElse; ifElse.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createStringLiteralExpression(\r\n value: string,\r\n range: Range\r\n ): StringLiteralExpression {\r\n var expr = new StringLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createSuperExpression(\r\n range: Range\r\n ): SuperExpression {\r\n var expr = new SuperExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createThisExpression(\r\n range: Range\r\n ): ThisExpression {\r\n var expr = new ThisExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createTrueExpression(\r\n range: Range\r\n ): TrueExpression {\r\n var expr = new TrueExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createUnaryPostfixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPostfixExpression {\r\n var expr = new UnaryPostfixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createUnaryPrefixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPrefixExpression {\r\n var expr = new UnaryPrefixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n // statements\r\n\r\n static createBlockStatement(\r\n statements: Statement[],\r\n range: Range\r\n ): BlockStatement {\r\n var stmt = new BlockStatement();\r\n stmt.range = range;\r\n stmt.statements = statements; setParent(statements, stmt);\r\n return stmt;\r\n }\r\n\r\n static createBreakStatement(\r\n label: IdentifierExpression | null,\r\n range: Range\r\n ): BreakStatement {\r\n var stmt = new BreakStatement();\r\n stmt.range = range;\r\n stmt.label = label; if (label) label.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createClassDeclaration(\r\n identifier: IdentifierExpression,\r\n typeParameters: TypeParameterNode[],\r\n extendsType: TypeNode | null, // can't be a function\r\n implementsTypes: TypeNode[], // can't be a function\r\n members: DeclarationStatement[],\r\n modifiers: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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 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: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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: ModifierNode[] | 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 let normalizedPath = normalizePath(path.value);\r\n if (path.value.startsWith(\".\")) { // relative\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n } else {\r\n stmt.normalizedPath = null;\r\n stmt.internalPath = null;\r\n }\r\n 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, // can't be a function\r\n members: DeclarationStatement[],\r\n modifiers: ModifierNode[] | 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: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n modifiers: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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 createFunctionDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n modifiers: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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.signature = signature; signature.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: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n modifiers: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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.signature = signature; signature.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 createNamespaceDeclaration(\r\n name: IdentifierExpression,\r\n members: Statement[],\r\n modifiers: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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 typeParameters: TypeParameterNode[] | null,\r\n alias: CommonTypeNode,\r\n modifiers: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.type = 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: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n modifiers: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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\nexport abstract class CommonTypeNode extends Node {\r\n // kind varies\r\n\r\n /** Whether nullable or not. */\r\n isNullable: bool;\r\n}\r\n\r\n/** Represents a type annotation. */\r\nexport class TypeNode extends CommonTypeNode {\r\n kind = NodeKind.TYPE;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Type argument references. */\r\n typeArguments: CommonTypeNode[] | null;\r\n}\r\n\r\n/** Represents a type parameter. */\r\nexport class TypeParameterNode extends Node {\r\n kind = NodeKind.TYPEPARAMETER;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Extended type reference, if any. */\r\n extendsType: TypeNode | null; // can't be a function\r\n}\r\n\r\n/** Represents the kind of a parameter. */\r\nexport enum ParameterKind {\r\n /** No specific flags. */\r\n DEFAULT,\r\n /** Is an optional parameter. */\r\n OPTIONAL,\r\n /** Is a rest parameter. */\r\n REST\r\n}\r\n\r\n/** Represents a function parameter. */\r\nexport class ParameterNode extends Node {\r\n kind = NodeKind.PARAMETER;\r\n\r\n /** Parameter kind. */\r\n parameterKind: ParameterKind;\r\n /** Parameter name. */\r\n name: IdentifierExpression;\r\n /** Parameter type. */\r\n type: CommonTypeNode | null;\r\n /** Initializer expression, if present. */\r\n initializer: Expression | null;\r\n}\r\n\r\n/** Represents a function signature. */\r\nexport class SignatureNode extends CommonTypeNode {\r\n kind = NodeKind.SIGNATURE;\r\n\r\n /** Accepted parameters. */\r\n parameterTypes: ParameterNode[];\r\n /** Return type. */\r\n returnType: CommonTypeNode | null;\r\n /** Explicitly provided this type, if any. */\r\n explicitThisType: TypeNode | null; // can't be a function\r\n}\r\n\r\n// special\r\n\r\n/** Built-in decorator kinds. */\r\nexport 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 DecoratorNode extends Node {\r\n kind = NodeKind.DECORATOR;\r\n\r\n /** Built-in kind, if applicable. */\r\n decoratorKind: DecoratorKind;\r\n /** Name expression. */\r\n name: Expression;\r\n /** Argument expressions. */\r\n arguments: Expression[] | null;\r\n}\r\n\r\n/** 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/** Represents a single modifier. */\r\nexport class ModifierNode extends Node {\r\n kind = NodeKind.MODIFIER;\r\n\r\n /** Specific modifier kind. */\r\n modifierKind: ModifierKind;\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: CommonTypeNode;\r\n}\r\n\r\n/** Represents a binary expression. */\r\nexport class BinaryExpression extends Expression {\r\n kind = NodeKind.BINARY;\r\n\r\n /** Operator token. */\r\n operator: Token;\r\n /** Left-hand side expression */\r\n left: Expression;\r\n /** Right-hand side expression. */\r\n right: Expression;\r\n}\r\n\r\n/** Represents a call expression. */\r\nexport class CallExpression extends Expression {\r\n kind = NodeKind.CALL;\r\n\r\n /** Called expression. Usually an identifier or property access expression. */\r\n expression: Expression;\r\n /** Provided type arguments. */\r\n typeArguments: CommonTypeNode[] | null;\r\n /** Provided arguments. */\r\n arguments: Expression[];\r\n}\r\n\r\n/** Represents a comma expression composed of multiple expressions. */\r\nexport class CommaExpression extends Expression {\r\n kind = NodeKind.COMMA;\r\n\r\n /** Sequential expressions. */\r\n expressions: Expression[];\r\n}\r\n\r\n/** Represents a `constructor` expression. */\r\nexport class ConstructorExpression extends IdentifierExpression {\r\n kind = NodeKind.CONSTRUCTOR;\r\n text = \"constructor\";\r\n}\r\n\r\n/** Represents an element access expression, e.g., array access. */\r\nexport class ElementAccessExpression extends Expression {\r\n kind = NodeKind.ELEMENTACCESS;\r\n\r\n /** Expression being accessed. */\r\n expression: Expression;\r\n /** Element of the expression being accessed. */\r\n elementExpression: Expression;\r\n}\r\n\r\n/** Represents a float literal expression. */\r\nexport class FloatLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.FLOAT;\r\n\r\n /** Float value. */\r\n value: f64;\r\n}\r\n\r\n/** Represents a function expression using the 'function' keyword. */\r\nexport class FunctionExpression extends Expression {\r\n kind = NodeKind.FUNCTION;\r\n\r\n /** Inline function declaration. */\r\n declaration: FunctionDeclaration;\r\n}\r\n\r\n/** Represents an 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/** 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: ModifierNode[] | null;\r\n /** Array of decorators. */\r\n decorators: DecoratorNode[] | null = null;\r\n\r\n protected cachedProgramLevelInternalName: string | null = null;\r\n protected cachedFileLevelInternalName: string | null = null;\r\n\r\n /** Gets the mangled program-level internal name of this declaration. */\r\n get programLevelInternalName(): string {\r\n if (!this.cachedProgramLevelInternalName) {\r\n this.cachedProgramLevelInternalName = mangleInternalName(this, true);\r\n }\r\n return this.cachedProgramLevelInternalName;\r\n }\r\n\r\n /** Gets the mangled file-level internal name of this declaration. */\r\n get fileLevelInternalName(): string {\r\n if (!this.cachedFileLevelInternalName) {\r\n this.cachedFileLevelInternalName = mangleInternalName(this, false);\r\n }\r\n return this.cachedFileLevelInternalName;\r\n }\r\n\r\n /** Tests if this is a top-level declaration within its source file. */\r\n get isTopLevel(): bool {\r\n var parent = this.parent;\r\n if (!parent) {\r\n return false;\r\n }\r\n if (parent.kind == NodeKind.VARIABLE && !(parent = parent.parent)) {\r\n return false;\r\n }\r\n return parent.kind == NodeKind.SOURCE;\r\n }\r\n\r\n /** Tests if this declaration is a top-level export within its source file. */\r\n get isTopLevelExport(): bool {\r\n var parent = this.parent;\r\n if (!parent || (parent.kind == NodeKind.VARIABLE && !(parent = parent.parent))) {\r\n return false;\r\n }\r\n if (parent.kind == NodeKind.NAMESPACEDECLARATION) {\r\n return (\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: CommonTypeNode | null;\r\n /** Variable initializer. */\r\n initializer: Expression | null;\r\n}\r\n\r\n/** Represents a block statement. */\r\nexport class BlockStatement extends Statement {\r\n kind = NodeKind.BLOCK;\r\n\r\n /** Contained statements. */\r\n statements: Statement[];\r\n}\r\n\r\n/** Represents a `break` statement. */\r\nexport class BreakStatement extends Statement {\r\n kind = NodeKind.BREAK;\r\n\r\n /** Target label, if applicable. */\r\n label: IdentifierExpression | null;\r\n}\r\n\r\n/** Represents a `class` declaration. */\r\nexport class ClassDeclaration extends DeclarationStatement {\r\n kind = NodeKind.CLASSDECLARATION;\r\n\r\n /** Accepted type parameters. */\r\n typeParameters: TypeParameterNode[];\r\n /** Base class type being extended. */\r\n extendsType: TypeNode | null; // can't be a function\r\n /** Interface types being implemented. */\r\n implementsTypes: TypeNode[]; // can't be a function\r\n /** Class member declarations. */\r\n members: DeclarationStatement[];\r\n\r\n get isGeneric(): bool {\r\n var typeParameters = this.typeParameters;\r\n return typeParameters != null && typeParameters.length > 0;\r\n }\r\n}\r\n\r\n/** Represents a `continue` statement. */\r\nexport class ContinueStatement extends Statement {\r\n kind = NodeKind.CONTINUE;\r\n\r\n /** Target label, if applicable. */\r\n label: IdentifierExpression | null;\r\n}\r\n\r\n/** Represents a `do` statement. */\r\nexport class DoStatement extends Statement {\r\n kind = NodeKind.DO;\r\n\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n /** Condition when to repeat. */\r\n condition: Expression;\r\n}\r\n\r\n/** Represents an empty statement, i.e., a semicolon terminating nothing. */\r\nexport class EmptyStatement extends Statement {\r\n kind = NodeKind.EMPTY;\r\n}\r\n\r\n/** Represents an `enum` declaration. */\r\nexport class EnumDeclaration extends DeclarationStatement {\r\n kind = NodeKind.ENUMDECLARATION;\r\n\r\n /** Enum value declarations. */\r\n values: EnumValueDeclaration[];\r\n}\r\n\r\n/** Represents a value of an `enum` declaration. */\r\nexport class EnumValueDeclaration extends DeclarationStatement {\r\n kind = NodeKind.ENUMVALUEDECLARATION;\r\n 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: ModifierNode[] | 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 /** Type parameters, if any. */\r\n typeParameters: TypeParameterNode[] | null;\r\n /** Function signature. */\r\n signature: SignatureNode;\r\n /** Body statement. Usually a block. */\r\n body: Statement | null;\r\n\r\n get isGeneric(): bool {\r\n var typeParameters = this.typeParameters;\r\n return typeParameters != null && typeParameters.length > 0;\r\n }\r\n}\r\n\r\n/** Represents an `if` statement. */\r\nexport class IfStatement extends Statement {\r\n kind = NodeKind.IF;\r\n\r\n /** Condition. */\r\n condition: Expression;\r\n /** Statement executed when condition is `true`. */\r\n ifTrue: Statement;\r\n /** Statement executed when condition is `false`. */\r\n ifFalse: Statement | null;\r\n}\r\n\r\n/** Represents an `import` declaration part of an {@link ImportStatement}. */\r\nexport class ImportDeclaration extends DeclarationStatement {\r\n kind = NodeKind.IMPORTDECLARATION;\r\n 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 a `return` statement. */\r\nexport class ReturnStatement extends Statement {\r\n kind = NodeKind.RETURN;\r\n\r\n /** Value expression being returned, if present. */\r\n value: Expression | null;\r\n}\r\n\r\n/** Represents a single `case` within a `switch` statement. */\r\nexport class SwitchCase extends Node {\r\n kind = NodeKind.SWITCHCASE;\r\n\r\n /** Label expression. `null` indicates the default case. */\r\n label: Expression | null;\r\n /** Contained statements. */\r\n statements: Statement[];\r\n}\r\n\r\n/** Represents a `switch` statement. */\r\nexport class SwitchStatement extends Statement {\r\n kind = NodeKind.SWITCH;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Contained cases. */\r\n cases: SwitchCase[];\r\n}\r\n\r\n/** Represents a `throw` statement. */\r\nexport class ThrowStatement extends Statement {\r\n kind = NodeKind.THROW;\r\n\r\n /** Value expression being thrown. */\r\n value: Expression;\r\n}\r\n\r\n/** Represents a `try` statement. */\r\nexport class TryStatement extends Statement {\r\n kind = NodeKind.TRY;\r\n\r\n /** Contained statements. */\r\n statements: Statement[];\r\n /** Exception variable name, if a `catch` clause is present. */\r\n catchVariable: IdentifierExpression | null;\r\n /** Statements being executed on catch, if a `catch` clause is present. */\r\n catchStatements: Statement[] | null;\r\n /** Statements being executed afterwards, if a `finally` clause is present. */\r\n finallyStatements: Statement[] | null;\r\n}\r\n\r\n/** Represents a `type` declaration. */\r\nexport class TypeDeclaration extends DeclarationStatement {\r\n kind = NodeKind.TYPEDECLARATION;\r\n\r\n /** Type parameters, if any. */\r\n typeParameters: TypeParameterNode[] | null;\r\n /** Type being aliased. */\r\n type: CommonTypeNode;\r\n}\r\n\r\n/** Represents a variable declaration part of a {@link VariableStatement}. */\r\nexport class VariableDeclaration extends VariableLikeDeclarationStatement {\r\n kind = NodeKind.VARIABLEDECLARATION;\r\n\r\n /** Array of modifiers. */\r\n modifiers: ModifierNode[] | 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: ModifierNode[] | null;\r\n /** Array of decorators. */\r\n decorators: DecoratorNode[] | null;\r\n /** Array of member declarations. */\r\n declarations: VariableDeclaration[];\r\n}\r\n\r\n/** Represents a void statement dropping an expression's value. */\r\nexport class VoidStatement extends Statement {\r\n kind = NodeKind.VOID;\r\n\r\n /** Expression being dropped. */\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a `while` statement. */\r\nexport class WhileStatement extends Statement {\r\n kind = NodeKind.WHILE;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n}\r\n\r\n/** Cached unused modifiers for reuse. */\r\nvar reusableModifiers: ModifierNode[] | null = null;\r\n\r\nexport function setReusableModifiers(modifiers: ModifierNode[]): void {\r\n reusableModifiers = modifiers;\r\n}\r\n\r\n/** Creates a new modifiers array. */\r\nexport function createModifiers(): ModifierNode[] {\r\n var ret: ModifierNode[];\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: ModifierNode, modifiers: ModifierNode[] | null): ModifierNode[] {\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: ModifierNode[] | null): ModifierNode | null {\r\n if (modifiers) {\r\n for (let 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: ModifierNode[] | 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: DecoratorNode[] | null): DecoratorNode | null {\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n let expression = decorator.name;\r\n if (expression.kind == NodeKind.IDENTIFIER && (expression).text == name) {\r\n return decorator;\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/** Tests if a specific decorator is present within the specified decorators. */\r\nexport function hasDecorator(name: string, decorators: DecoratorNode[] | null): bool {\r\n return getFirstDecorator(name, decorators) != null;\r\n}\r\n\r\n/** Mangles a declaration's name to an internal name. */\r\nexport function mangleInternalName(declaration: DeclarationStatement, asGlobal: bool = false): string {\r\n var name = declaration.name.text;\r\n var parent = declaration.parent;\r\n if (!parent) return name;\r\n if (\r\n declaration.kind == NodeKind.VARIABLEDECLARATION &&\r\n parent.kind == NodeKind.VARIABLE\r\n ) { // skip over\r\n if (!(parent = parent.parent)) return name;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return mangleInternalName(parent, asGlobal) + (\r\n 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\n/** Sets the parent node on an array of nodes. */\r\nfunction setParent(nodes: Node[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n nodes[i].parent = parent;\r\n }\r\n}\r\n\r\n/** Sets the parent node on an array of nullable nodes. */\r\nfunction setParentIfNotNull(nodes: (Node | null)[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n let node = nodes[i];\r\n if (node) node.parent = parent;\r\n }\r\n}\r\n","import {\r\n Class,\r\n FunctionTarget\r\n} from \"./program\";\r\n\r\nimport {\r\n NativeType,\r\n ExpressionRef,\r\n Module\r\n} from \"./module\";\r\n\r\n/** Indicates the kind of a type. */\r\nexport const enum TypeKind {\r\n\r\n // signed integers\r\n 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: Signature | null;\r\n /** Respective nullable type, if non-nullable. */\r\n nullableType: Type | null = null;\r\n /** Respective non-nullable type, if nullable. */\r\n nonNullableType: Type;\r\n\r\n /** Constructs a new resolved type. */\r\n constructor(kind: TypeKind, flags: TypeFlags, size: i32) {\r\n this.kind = kind;\r\n this.flags = flags;\r\n this.size = size;\r\n this.byteSize = ceil(size / 8);\r\n this.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 ~0 >>> (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: Signature): 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: Signature | null;\r\n var targetFunction: Signature | 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: {\r\n return kindOnly || !this.functionType\r\n ? \"u32\"\r\n : this.functionType.toString(true);\r\n }\r\n case TypeKind.U64: return \"u64\";\r\n case TypeKind.USIZE: {\r\n return kindOnly || !this.classType\r\n ? \"usize\"\r\n : this.classType.toString();\r\n }\r\n case TypeKind.BOOL: return \"bool\";\r\n case TypeKind.F32: return \"f32\";\r\n case TypeKind.F64: return \"f64\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n // Binaryen specific\r\n\r\n /** Converts this type to its respective native type. */\r\n toNativeType(): NativeType {\r\n switch (this.kind) {\r\n default: return NativeType.I32;\r\n case TypeKind.I64:\r\n case TypeKind.U64: return NativeType.I64;\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: return this.size == 64 ? NativeType.I64 : NativeType.I32;\r\n case TypeKind.F32: return NativeType.F32;\r\n case TypeKind.F64: return NativeType.F64;\r\n case TypeKind.VOID: return NativeType.None;\r\n }\r\n }\r\n\r\n /** Converts this type to its native `0` value. */\r\n toNativeZero(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n case TypeKind.VOID: assert(false);\r\n default: return module.createI32(0);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(0);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(0);\r\n case TypeKind.F32: return module.createF32(0);\r\n case TypeKind.F64: return module.createF64(0);\r\n }\r\n }\r\n\r\n /** Converts this type to its native `1` value. */\r\n toNativeOne(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n case TypeKind.VOID: assert(false);\r\n default: return module.createI32(1);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(1);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(1);\r\n case TypeKind.F32: return module.createF32(1);\r\n case TypeKind.F64: return module.createF64(1);\r\n }\r\n }\r\n\r\n /** Converts this type to its native `-1` value. */\r\n toNativeNegOne(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n case TypeKind.VOID: assert(false);\r\n default: return module.createI32(-1);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(-1);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(-1, -1);\r\n case TypeKind.F32: return module.createF32(-1);\r\n case TypeKind.F64: return module.createF64(-1);\r\n }\r\n }\r\n\r\n /** Converts this type to its signature string. */\r\n toSignatureString(): string {\r\n switch (this.kind) {\r\n default: return \"i\";\r\n case TypeKind.I64:\r\n case TypeKind.U64: return \"I\";\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: return this.size == 64 ? \"I\" : \"i\";\r\n case TypeKind.F32: return \"f\";\r\n case TypeKind.F64: return \"F\";\r\n case TypeKind.VOID: return \"v\";\r\n }\r\n }\r\n\r\n // Types\r\n\r\n /** An 8-bit signed integer. */\r\n static readonly i8: Type = new Type(TypeKind.I8,\r\n TypeFlags.SIGNED |\r\n TypeFlags.SMALL |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 8\r\n );\r\n\r\n /** A 16-bit signed integer. */\r\n static readonly i16: Type = new Type(TypeKind.I16,\r\n TypeFlags.SIGNED |\r\n TypeFlags.SMALL |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 16\r\n );\r\n\r\n /** A 32-bit signed integer. */\r\n static readonly i32: Type = new Type(TypeKind.I32,\r\n TypeFlags.SIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit signed integer. */\r\n static readonly i64: Type = new Type(TypeKind.I64,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 32-bit signed size. WASM32 only. */\r\n static readonly isize32: Type = new Type(TypeKind.ISIZE,\r\n TypeFlags.SIGNED |\r\n TypeFlags.SIZE |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit signed size. WASM64 only. */\r\n static readonly isize64: Type = new Type(TypeKind.ISIZE,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.SIZE |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** An 8-bit unsigned integer. */\r\n static readonly u8: Type = new Type(TypeKind.U8,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SMALL |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 8\r\n );\r\n\r\n /** A 16-bit unsigned integer. */\r\n static readonly u16: Type = new Type(TypeKind.U16,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SMALL |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 16\r\n );\r\n\r\n /** A 32-bit unsigned integer. */\r\n static readonly u32: Type = new Type(TypeKind.U32,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit unsigned integer. */\r\n static readonly u64: Type = new Type(TypeKind.U64,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 32-bit unsigned size. WASM32 only. */\r\n static readonly usize32: Type = new Type(TypeKind.USIZE,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SIZE |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit unsigned size. WASM64 only. */\r\n static readonly usize64: Type = new Type(TypeKind.USIZE,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.SIZE |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 1-bit unsigned integer. */\r\n static readonly bool: Type = new Type(TypeKind.BOOL,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SMALL |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 1\r\n );\r\n\r\n /** A 32-bit float. */\r\n static readonly f32: Type = new Type(TypeKind.F32,\r\n TypeFlags.SIGNED |\r\n TypeFlags.FLOAT |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit float. */\r\n static readonly f64: Type = new Type(TypeKind.F64,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.FLOAT |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** No return type. */\r\n static readonly void: Type = new Type(TypeKind.VOID, TypeFlags.NONE, 0);\r\n}\r\n\r\n/** Converts an array of types to an array of native types. */\r\nexport function typesToNativeTypes(types: Type[]): NativeType[] {\r\n var numTypes = types.length;\r\n var ret = new Array(numTypes);\r\n for (let i = 0; i < numTypes; ++i) {\r\n ret[i] = types[i].toNativeType();\r\n }\r\n return ret;\r\n}\r\n\r\n/** Converts an array of types to its combined string representation. */\r\nexport function typesToString(types: Type[]): string {\r\n var numTypes = types.length;\r\n if (!numTypes) return \"\";\r\n var sb = new Array(numTypes);\r\n for (let i = 0; i < numTypes; ++i) {\r\n sb[i] = types[i].toString();\r\n }\r\n return sb.join(\", \");\r\n}\r\n\r\n/** Represents a fully resolved function signature. */\r\nexport class Signature {\r\n\r\n /** Parameter types, if any, excluding `this`. */\r\n parameterTypes: Type[];\r\n /** Parameter names, if known, excluding `this`. */\r\n parameterNames: string[] | null;\r\n /** Number of required parameters. Other parameters are considered optional. */\r\n requiredParameters: i32;\r\n /** Return type. */\r\n returnType: Type;\r\n /** This type, if an instance signature. */\r\n thisType: Type | null;\r\n /** Whether the last parameter is a rest parameter. */\r\n hasRest: bool;\r\n /** Cached {@link FunctionTarget}. */\r\n cachedFunctionTarget: FunctionTarget | null = null;\r\n\r\n constructor(\r\n parameterTypes: Type[] | null = null,\r\n returnType: Type | null = null,\r\n thisType: Type | null = null\r\n ) {\r\n this.parameterTypes = parameterTypes ? parameterTypes : [];\r\n this.parameterNames = null;\r\n this.requiredParameters = 0;\r\n this.returnType = returnType ? returnType : Type.void;\r\n this.thisType = thisType;\r\n this.hasRest = false;\r\n }\r\n\r\n /** Gets the known or, alternatively, generic parameter name at the specified index. */\r\n getParameterName(index: i32): string {\r\n return this.parameterNames && this.parameterNames.length > index\r\n ? this.parameterNames[index]\r\n : getGenericParameterName(index);\r\n }\r\n\r\n /** Tests if a value of this function type is assignable to a target of the specified function type. */\r\n isAssignableTo(target: Signature): bool {\r\n // TODO: maybe cache results?\r\n\r\n // check `this` type\r\n var thisThisType = this.thisType;\r\n var targetThisType = target.thisType;\r\n if (thisThisType) {\r\n if (!(targetThisType && thisThisType.isAssignableTo(targetThisType))) {\r\n return false;\r\n }\r\n } else if (targetThisType) {\r\n return false;\r\n }\r\n\r\n // check rest parameter\r\n if (this.hasRest != target.hasRest) {\r\n return false; // TODO\r\n }\r\n\r\n // check parameter types\r\n var thisParameterTypes = this.parameterTypes;\r\n var targetParameterTypes = target.parameterTypes;\r\n var numParameters = thisParameterTypes.length;\r\n if (numParameters != targetParameterTypes.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < numParameters; ++i) {\r\n let thisParameterType = thisParameterTypes[i];\r\n let targetParameterType = targetParameterTypes[i];\r\n if (!thisParameterType.isAssignableTo(targetParameterType)) {\r\n return false;\r\n }\r\n }\r\n\r\n // check return type\r\n return this.returnType.isAssignableTo(target.returnType);\r\n }\r\n\r\n /** Converts this signature to a function type string. */\r\n toSignatureString(): string {\r\n var sb = [];\r\n var thisType = this.thisType;\r\n if (thisType) {\r\n sb.push(thisType.toSignatureString());\r\n }\r\n var parameterTypes = this.parameterTypes;\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) {\r\n sb.push(parameterTypes[i].toSignatureString());\r\n }\r\n sb.push(this.returnType.toSignatureString());\r\n return sb.join(\"\");\r\n }\r\n\r\n /** Converts this signature to a string. */\r\n toString(includeThis: bool = false): string {\r\n var sb = new Array();\r\n sb.push(\"(\");\r\n var index = 0;\r\n var thisType = this.thisType;\r\n if (thisType) {\r\n if (includeThis) {\r\n sb.push(\"this: \");\r\n sb.push(thisType.toString());\r\n index = 1;\r\n }\r\n }\r\n var parameters = this.parameterTypes;\r\n var numParameters = parameters.length;\r\n if (numParameters) {\r\n let names = this.parameterNames;\r\n let numNames = names ? names.length : 0;\r\n let optionalStart = this.requiredParameters;\r\n let restIndex = this.hasRest ? numParameters - 1 : -1;\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n if (index) sb.push(\", \");\r\n if (i == restIndex) sb.push(\"...\");\r\n if (i < numNames) {\r\n sb.push((names)[i]);\r\n } else {\r\n sb.push(getGenericParameterName(i));\r\n }\r\n if (i >= optionalStart && i != restIndex) {\r\n sb.push(\"?: \");\r\n } else {\r\n sb.push(\": \");\r\n }\r\n sb.push(parameters[i].toString());\r\n }\r\n }\r\n sb.push(\") => \");\r\n sb.push(this.returnType.toString());\r\n return sb.join(\"\");\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n// Cached generic parameter names used where names are unknown.\r\nvar cachedGenericParameterNames: string[] | null = null;\r\n\r\n/** Gets the cached generic parameter name for the specified index. */\r\nexport function getGenericParameterName(index: i32): string {\r\n if (!cachedGenericParameterNames) cachedGenericParameterNames = [];\r\n for (let i = cachedGenericParameterNames.length; i < index; ++i) {\r\n cachedGenericParameterNames.push(\"arg$\" + i.toString(10));\r\n }\r\n return cachedGenericParameterNames[index];\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 FunctionTypeRef\r\n} from \"./module\";\r\n\r\nimport {\r\n Program,\r\n ClassPrototype,\r\n Class,\r\n Element,\r\n ElementKind,\r\n Enum,\r\n Field,\r\n FunctionPrototype,\r\n Function,\r\n FunctionTarget,\r\n Global,\r\n Local,\r\n Namespace,\r\n EnumValue,\r\n Property,\r\n VariableLikeElement,\r\n FlowFlags,\r\n ElementFlags,\r\n ConstantValueKind,\r\n\r\n PATH_DELIMITER,\r\n LIBRARY_PREFIX\r\n} from \"./program\";\r\n\r\nimport {\r\n Token\r\n} 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 Signature,\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[] = [];\r\n\r\n /** Current function in compilation. */\r\n currentFunction: Function;\r\n /** Current enum in compilation. */\r\n currentEnum: Enum | null = null;\r\n /** Current type in compilation. */\r\n currentType: Type = Type.void;\r\n\r\n /** Counting memory offset. */\r\n memoryOffset: I64;\r\n /** Memory segments being compiled. */\r\n memorySegments: MemorySegment[] = new Array();\r\n /** Map of already compiled static string segments. */\r\n stringSegments: Map = new Map();\r\n\r\n /** Function table being compiled. */\r\n functionTable: Function[] = new Array();\r\n\r\n /** Already processed file names. */\r\n files: Set = new Set();\r\n\r\n /** Compiles a {@link Program} to a {@link Module} using the specified options. */\r\n static compile(program: Program, options: Options | null = null): Module {\r\n return new Compiler(program, options).compile();\r\n }\r\n\r\n /** Constructs a new compiler for a {@link Program} using the specified options. */\r\n constructor(program: Program, options: Options | null = null) {\r\n super(program.diagnostics);\r\n this.program = program;\r\n if (!options) options = new Options();\r\n this.options = options;\r\n this.memoryOffset = i64_new(\r\n max(options.memoryBase, options.usizeType.byteSize) // leave space for `null`\r\n );\r\n this.module = Module.create();\r\n }\r\n\r\n /** Performs compilation of the underlying {@link Program} to a {@link Module}. */\r\n compile(): Module {\r\n var options = this.options;\r\n var module = this.module;\r\n var program = this.program;\r\n\r\n // initialize lookup maps, built-ins, imports, exports, etc.\r\n program.initialize(options);\r\n\r\n // set up the start function wrapping top-level statements, of all files.\r\n var startFunctionPrototype = assert(program.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 new Signature([], Type.void)\r\n );\r\n startFunctionInstance.set(ElementFlags.START);\r\n this.startFunction = startFunctionInstance;\r\n this.currentFunction = startFunctionInstance;\r\n\r\n // compile entry file(s) while traversing to reachable elements\r\n var sources = program.sources;\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n if (sources[i].isEntry) {\r\n this.compileSource(sources[i]);\r\n }\r\n }\r\n\r\n // compile the start function if not empty\r\n var startFunctionBody = this.startFunctionBody;\r\n if (startFunctionBody.length) {\r\n let typeRef = this.ensureFunctionType(startFunctionInstance.signature);\r\n let funcRef: FunctionRef;\r\n module.setStart(\r\n funcRef = module.addFunction(\r\n startFunctionInstance.internalName,\r\n typeRef,\r\n typesToNativeTypes(startFunctionInstance.additionalLocals),\r\n module.createBlock(null, startFunctionBody)\r\n )\r\n );\r\n startFunctionInstance.finalize(module, funcRef);\r\n }\r\n\r\n // set up static memory segments and the heap base pointer\r\n if (!options.noMemory) {\r\n let memoryOffset = this.memoryOffset;\r\n memoryOffset = i64_align(memoryOffset, options.usizeType.byteSize);\r\n this.memoryOffset = memoryOffset;\r\n if (options.isWasm64) {\r\n module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I64,\r\n false,\r\n module.createI64(i64_low(memoryOffset), i64_high(memoryOffset))\r\n );\r\n } else {\r\n module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I32,\r\n false,\r\n module.createI32(i64_low(memoryOffset))\r\n );\r\n }\r\n\r\n // determine initial page size\r\n let pages = i64_shr_u(i64_align(memoryOffset, 0x10000), i64_new(16, 0));\r\n module.setMemory(\r\n i64_low(pages),\r\n Module.MAX_MEMORY_WASM32, // TODO: not WASM64 compatible yet\r\n this.memorySegments,\r\n options.target,\r\n \"memory\"\r\n );\r\n }\r\n\r\n // import memory if requested\r\n if (options.importMemory) {\r\n module.addMemoryImport(\"0\", \"env\", \"memory\");\r\n }\r\n\r\n // set up function table\r\n var functionTable = this.functionTable;\r\n var functionTableSize = functionTable.length;\r\n if (functionTableSize) {\r\n let entries = new Array(functionTableSize);\r\n for (let i = 0; i < functionTableSize; ++i) {\r\n entries[i] = functionTable[i].ref;\r\n }\r\n module.setFunctionTable(entries);\r\n }\r\n\r\n return module;\r\n }\r\n\r\n // sources\r\n\r\n compileSourceByPath(normalizedPathWithoutExtension: string, reportNode: Node): void {\r\n var sources = this.program.sources;\r\n\r\n // try file.ts\r\n var source: Source;\r\n var expected = normalizedPathWithoutExtension + \".ts\";\r\n for (let 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 (let 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 (let 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 var normalizedPath = source.normalizedPath;\r\n if (files.has(normalizedPath)) return;\r\n files.add(normalizedPath);\r\n\r\n // compile top-level statements\r\n var noTreeShaking = this.options.noTreeShaking;\r\n var isEntry = source.isEntry;\r\n var startFunctionBody = this.startFunctionBody;\r\n var statements = source.statements;\r\n for (let i = 0, k = statements.length; i < k; ++i) {\r\n let statement = statements[i];\r\n switch (statement.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n let classDeclaration = statement;\r\n if (\r\n (\r\n noTreeShaking ||\r\n (isEntry && hasModifier(ModifierKind.EXPORT, classDeclaration.modifiers))\r\n ) &&\r\n !classDeclaration.isGeneric\r\n ) {\r\n this.compileClassDeclaration(classDeclaration, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n let enumDeclaration = statement;\r\n if (\r\n noTreeShaking ||\r\n (isEntry && hasModifier(ModifierKind.EXPORT, enumDeclaration.modifiers))\r\n ) {\r\n this.compileEnumDeclaration(enumDeclaration);\r\n }\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n let functionDeclaration = statement;\r\n if (\r\n (\r\n noTreeShaking ||\r\n (isEntry && hasModifier(ModifierKind.EXPORT, functionDeclaration.modifiers))\r\n ) &&\r\n !functionDeclaration.isGeneric\r\n ) {\r\n this.compileFunctionDeclaration(functionDeclaration, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.IMPORT: {\r\n let importStatement = statement;\r\n this.compileSourceByPath(\r\n importStatement.normalizedPath,\r\n importStatement.path\r\n );\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n let namespaceDeclaration = (statement);\r\n if (\r\n noTreeShaking ||\r\n (isEntry && hasModifier(ModifierKind.EXPORT, namespaceDeclaration.modifiers))\r\n ) {\r\n this.compileNamespaceDeclaration(namespaceDeclaration);\r\n }\r\n break;\r\n }\r\n case NodeKind.VARIABLE: { // global, always compiled as initializers might have side effects\r\n let variableInit = this.compileVariableStatement(statement);\r\n if (variableInit) startFunctionBody.push(variableInit);\r\n break;\r\n }\r\n case NodeKind.EXPORT: {\r\n let exportStatement = statement;\r\n if (exportStatement.normalizedPath != null) {\r\n this.compileSourceByPath(\r\n exportStatement.normalizedPath,\r\n exportStatement.path\r\n );\r\n }\r\n if (noTreeShaking || isEntry) {\r\n this.compileExportStatement(exportStatement);\r\n }\r\n break;\r\n }\r\n default: { // otherwise a top-level statement that is part of the start function's body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = this.startFunction;\r\n this.startFunctionBody.push(this.compileStatement(statement));\r\n this.currentFunction = previousFunction;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // globals\r\n\r\n compileGlobalDeclaration(declaration: VariableDeclaration): Global | null {\r\n // look up the initialized program element\r\n var element = assert(this.program.elements.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.GLOBAL);\r\n if (!this.compileGlobal(element)) return null; // reports\r\n return element;\r\n }\r\n\r\n compileGlobal(global: Global): bool {\r\n if (global.is(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 let resolvedType = this.program.resolveType(declaration.type); // reports\r\n if (!resolvedType) return false;\r\n if (resolvedType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.type.range\r\n );\r\n return false;\r\n }\r\n global.type = resolvedType;\r\n\r\n // infer from initializer if not annotated\r\n } else if (declaration.initializer) { // infer type using void/NONE for literal inference\r\n initExpr = this.compileExpression( // reports\r\n declaration.initializer,\r\n Type.void,\r\n ConversionKind.NONE\r\n );\r\n if (this.currentType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.initializer.range, this.currentType.toString(), \"\"\r\n );\r\n return false;\r\n }\r\n global.type = this.currentType;\r\n\r\n // must either be annotated or have an initializer\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.name.range.atEnd\r\n );\r\n return false;\r\n }\r\n }\r\n\r\n var nativeType = global.type.toNativeType();\r\n\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 this.startFunctionBody.push(this.module.createSetGlobal(internalName, initExpr));\r\n\r\n } else { // compile as-is\r\n\r\n if (global.is(ElementFlags.CONSTANT)) {\r\n let exprType = _BinaryenExpressionGetType(initExpr);\r\n switch (exprType) {\r\n case NativeType.I32: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(_BinaryenConstGetValueI32(initExpr), 0);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(\r\n _BinaryenConstGetValueI64Low(initExpr),\r\n _BinaryenConstGetValueI64High(initExpr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = _BinaryenConstGetValueF32(initExpr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = _BinaryenConstGetValueF64(initExpr);\r\n break;\r\n }\r\n default: {\r\n throw new Error(\"concrete type expected\");\r\n }\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 = assert(this.program.elements.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(element)) return null;\r\n return element;\r\n }\r\n\r\n compileEnum(element: Enum): bool {\r\n if (element.is(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 (let member of element.members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) continue; // happens if an enum is also a namespace\r\n let initInStart = false;\r\n let val = member;\r\n let valueDeclaration = val.declaration;\r\n val.set(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 let initExpr: ExpressionRef;\r\n if (valueDeclaration.value) {\r\n initExpr = this.compileExpression(valueDeclaration.value, Type.i32);\r\n if (_BinaryenExpressionGetId(initExpr) != ExpressionId.Const) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (_BinaryenExpressionGetId(initExpr) != ExpressionId.Const) {\r\n if (element.is(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 this.startFunctionBody.push(this.module.createSetGlobal(val.internalName, initExpr));\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 = assert(this.program.elements.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return this.compileFunctionUsingTypeArguments( // reports\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n (element).declaration.name\r\n );\r\n }\r\n\r\n /** Resolves the specified type arguments prior to compiling the resulting function instance. */\r\n compileFunctionUsingTypeArguments(\r\n prototype: FunctionPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null,\r\n reportNode: Node\r\n ): Function | null {\r\n var instance = prototype.resolveUsingTypeArguments( // reports\r\n typeArguments,\r\n contextualTypeArguments,\r\n reportNode\r\n );\r\n if (!(instance && this.compileFunction(instance))) return null;\r\n return instance;\r\n }\r\n\r\n /** Either reuses or creates the function type matching the specified signature. */\r\n private ensureFunctionType(signature: Signature): FunctionTypeRef {\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n var thisType = signature.thisType;\r\n var paramTypes: NativeType[];\r\n var index = 0;\r\n if (thisType) {\r\n paramTypes = new Array(1 + numParameters);\r\n paramTypes[0] = thisType.toNativeType();\r\n index = 1;\r\n } else {\r\n paramTypes = new Array(numParameters);\r\n }\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n paramTypes[index] = signature.parameterTypes[i].toNativeType();\r\n }\r\n var resultType = signature.returnType.toNativeType();\r\n var typeRef = this.module.getFunctionTypeBySignature(resultType, paramTypes);\r\n if (!typeRef) {\r\n typeRef = this.module.addFunctionType(signature.toSignatureString(), resultType, paramTypes);\r\n }\r\n return typeRef;\r\n }\r\n\r\n /** Compiles a readily resolved function instance. */\r\n compileFunction(instance: Function): bool {\r\n if (instance.is(ElementFlags.COMPILED)) return true;\r\n assert(!instance.is(ElementFlags.BUILTIN) || instance.simpleName == \"abort\");\r\n instance.set(ElementFlags.COMPILED);\r\n\r\n // check that modifiers are matching but still compile as-is\r\n var declaration = instance.prototype.declaration;\r\n var body = declaration.body;\r\n if (body) {\r\n if (instance.is(ElementFlags.DECLARED)) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n if (!instance.is(ElementFlags.DECLARED)) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n declaration.name.range\r\n );\r\n }\r\n }\r\n\r\n var ref: FunctionRef;\r\n var typeRef = this.ensureFunctionType(instance.signature);\r\n if (body) {\r\n\r\n // compile body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = instance;\r\n let stmt = this.compileStatement(body);\r\n\r\n // make sure all branches return\r\n let allBranchesReturn = this.currentFunction.flow.finalize();\r\n let returnType = instance.signature.returnType;\r\n if (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.signature.returnType, \"return type expected\").range\r\n );\r\n }\r\n this.currentFunction = previousFunction;\r\n\r\n // create the function\r\n ref = this.module.addFunction(\r\n instance.internalName,\r\n typeRef,\r\n typesToNativeTypes(instance.additionalLocals),\r\n stmt\r\n );\r\n\r\n } else {\r\n instance.set(ElementFlags.IMPORTED);\r\n\r\n // create the function import\r\n let namespace = instance.prototype.namespace;\r\n ref = this.module.addFunctionImport(\r\n instance.internalName,\r\n namespace\r\n ? namespace.simpleName\r\n : \"env\",\r\n instance.simpleName,\r\n typeRef\r\n );\r\n }\r\n\r\n // check module-level export\r\n if (declaration.range.source.isEntry && declaration.isTopLevelExport) {\r\n 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 (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n switch (member.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (\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 let variableInit = this.compileVariableStatement(member, true);\r\n if (variableInit) this.startFunctionBody.push(variableInit);\r\n }\r\n break;\r\n }\r\n default: {\r\n throw new Error(\"namespace member expected\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n compileNamespace(ns: Namespace): void {\r\n if (!ns.members) return;\r\n\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let element of ns.members.values()) {\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking ||\r\n (element).is(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\r\n // exports\r\n\r\n compileExportStatement(statement: ExportStatement): void {\r\n var members = statement.members;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n let internalExportName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n member.externalName.text\r\n );\r\n let element = this.program.exports.get(internalExportName);\r\n if (!element) continue; // reported in Program#initialize\r\n\r\n switch (element.kind) {\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 let functionInstance = this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null,\r\n (element).declaration.name\r\n );\r\n if (functionInstance) {\r\n let functionDeclaration = functionInstance.prototype.declaration;\r\n if (functionDeclaration && functionDeclaration.needsExplicitExport(member)) {\r\n 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 let 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\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 /** Ensures that a table entry exists for the specified function and returns its index. */\r\n ensureFunctionTableEntry(func: Function): i32 {\r\n assert(func.is(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 case NodeKind.BLOCK: {\r\n expr = this.compileBlockStatement(statement);\r\n break;\r\n }\r\n case NodeKind.BREAK: {\r\n expr = this.compileBreakStatement(statement);\r\n break;\r\n }\r\n case NodeKind.CONTINUE: {\r\n expr = this.compileContinueStatement(statement);\r\n break;\r\n }\r\n case NodeKind.DO: {\r\n expr = this.compileDoStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EMPTY: {\r\n expr = this.compileEmptyStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EXPRESSION: {\r\n expr = this.compileExpressionStatement(statement);\r\n break;\r\n }\r\n case NodeKind.FOR: {\r\n expr = this.compileForStatement(statement);\r\n break;\r\n }\r\n case NodeKind.IF: {\r\n expr = this.compileIfStatement(statement);\r\n break;\r\n }\r\n case NodeKind.RETURN: {\r\n expr = this.compileReturnStatement(statement);\r\n break;\r\n }\r\n case NodeKind.SWITCH: {\r\n expr = this.compileSwitchStatement(statement);\r\n break;\r\n }\r\n case NodeKind.THROW: {\r\n expr = this.compileThrowStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TRY: {\r\n expr = this.compileTryStatement(statement);\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n expr = this.compileVariableStatement(statement);\r\n if (!expr) expr = this.module.createNop();\r\n break;\r\n }\r\n case NodeKind.VOID: {\r\n expr = this.compileVoidStatement(statement);\r\n break;\r\n }\r\n case NodeKind.WHILE: {\r\n expr = this.compileWhileStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n // type declarations must be top-level because function bodies are evaluated when\r\n // reachaable only.\r\n if (this.currentFunction == this.startFunction) {\r\n return this.module.createNop();\r\n }\r\n // otherwise fall-through\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 numStatements = statements.length;\r\n var stmts = new Array(numStatements);\r\n for (let i = 0; i < numStatements; ++i) {\r\n stmts[i] = this.compileStatement(statements[i]);\r\n }\r\n return stmts; // array of 0-es in noEmit-mode\r\n }\r\n\r\n compileBlockStatement(statement: BlockStatement): ExpressionRef {\r\n var statements = statement.statements;\r\n\r\n // NOTE that we could optimize this to a NOP if empty or unwrap a single\r\n // statement, but that's not what the source told us to do and left to the\r\n // optimizer.\r\n\r\n // Not actually a branch, but can contain its own scoped variables.\r\n 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(\r\n statement.value,\r\n this.currentFunction.signature.returnType\r\n );\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 numCases = 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 + numCases);\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 (let i = 0; i < numCases; ++i) {\r\n let 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 (let i = 0; i < numCases; ++i) {\r\n let case_ = statement.cases[i];\r\n let l = case_.statements.length;\r\n let 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 let breakLabel = this.currentFunction.flow.breakLabel = \"break|\" + context;\r\n\r\n let fallsThrough = i != numCases - 1;\r\n let nextLabel = !fallsThrough ? breakLabel : \"case\" + (i + 1).toString(10) + \"|\" + context;\r\n for (let j = 0; j < 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 var numDeclarations = declarations.length;\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 (let i = 0; i < numDeclarations; ++i) {\r\n this.compileGlobalDeclaration(declarations[i]);\r\n }\r\n return 0;\r\n }\r\n\r\n // other variables become locals\r\n var initializers = new Array();\r\n for (let i = 0; i < numDeclarations; ++i) {\r\n let declaration = declarations[i];\r\n let name = declaration.name.text;\r\n let type: Type | null = null;\r\n let init: ExpressionRef = 0;\r\n if (declaration.type) {\r\n type = 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 let 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 }\r\n case NativeType.I64: {\r\n local = local.withConstantIntegerValue(\r\n _BinaryenConstGetValueI64Low(init),\r\n _BinaryenConstGetValueI64High(init)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n local = local.withConstantFloatValue(_BinaryenConstGetValueF32(init));\r\n break;\r\n }\r\n case NativeType.F64: {\r\n local = local.withConstantFloatValue(_BinaryenConstGetValueF64(init));\r\n break;\r\n }\r\n default: {\r\n throw new Error(\"concrete type expected\");\r\n }\r\n }\r\n // Create a virtual local that doesn't actually exist in WebAssembly\r\n let 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 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 case TypeKind.I8:\r\n case TypeKind.I16: {\r\n let 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 let mask = element.type.computeSmallIntegerMask(Type.i32);\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue) & mask\r\n : 0\r\n );\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue)\r\n : 0\r\n );\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n if (!element.program.options.isWasm64) {\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue)\r\n : 0\r\n );\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return element.constantValueKind == ConstantValueKind.INTEGER\r\n ? this.module.createI64(\r\n i64_low(element.constantIntegerValue),\r\n i64_high(element.constantIntegerValue)\r\n )\r\n : this.module.createI64(0);\r\n }\r\n case TypeKind.F32: {\r\n return this.module.createF32((element).constantFloatValue);\r\n }\r\n case TypeKind.F64: {\r\n return this.module.createF64((element).constantFloatValue);\r\n }\r\n default: {\r\n throw new Error(\"concrete type expected\");\r\n }\r\n }\r\n }\r\n\r\n compileExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind = ConversionKind.IMPLICIT,\r\n wrapSmallIntegers: bool = true\r\n ): ExpressionRef {\r\n this.currentType = contextualType;\r\n\r\n var expr: ExpressionRef;\r\n switch (expression.kind) {\r\n case NodeKind.ASSERTION: {\r\n expr = this.compileAssertionExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.BINARY: {\r\n expr = this.compileBinaryExpression(expression, contextualType, wrapSmallIntegers);\r\n break;\r\n }\r\n case NodeKind.CALL: {\r\n expr = this.compileCallExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.COMMA: {\r\n expr = this.compileCommaExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.ELEMENTACCESS: {\r\n expr = this.compileElementAccessExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.FUNCTION:\r\n 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\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(\r\n expression: Expression,\r\n contextualType: Type,\r\n wrapSmallIntegers: bool = true\r\n ): ExpressionRef {\r\n return this.compileExpression(\r\n expression,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n wrapSmallIntegers\r\n );\r\n }\r\n\r\n precomputeExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind = ConversionKind.IMPLICIT\r\n ): ExpressionRef {\r\n return this.precomputeExpressionRef(this.compileExpression(expression, contextualType, conversionKind));\r\n }\r\n\r\n precomputeExpressionRef(expr: ExpressionRef): ExpressionRef {\r\n var nativeType = this.currentType.toNativeType();\r\n var typeRef = this.module.getFunctionTypeBySignature(nativeType, null);\r\n var typeRefAdded = false;\r\n if (!typeRef) {\r\n typeRef = this.module.addFunctionType(this.currentType.toSignatureString(), nativeType, null);\r\n typeRefAdded = true;\r\n }\r\n var funcRef = this.module.addFunction(\"__precompute\", typeRef, null, 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 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 switch (commonType.kind) {\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: { // 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 }\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 switch (commonType.kind) {\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: { // 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 }\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 switch (commonType.kind) {\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: { // 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 }\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 switch (commonType.kind) {\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: { // 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 }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n\r\n case Token.EQUALS_EQUALS_EQUALS:\r\n // TODO?\r\n case Token.EQUALS_EQUALS: {\r\n\r\n // NOTE that this favors correctness, in terms of emitting a binary expression, over\r\n // checking for a possible use of unary EQZ. while the most classic of all optimizations,\r\n // that's not what the source told us to do. for reference, `!left` emits unary EQZ.\r\n\r\n 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 switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = this.module.createBinary(BinaryOp.EqI32, left, right);\r\n break;\r\n }\r\n case TypeKind.USIZE: // 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 }\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 switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = this.module.createBinary(BinaryOp.NeI32, left, right);\r\n break;\r\n }\r\n case TypeKind.USIZE: // 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 }\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: 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 switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true;\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = this.module.createBinary(BinaryOp.AddI32, left, right);\r\n break;\r\n }\r\n case TypeKind.USIZE: // 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 }\r\n break;\r\n }\r\n case Token.MINUS_EQUALS: 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 switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true;\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = this.module.createBinary(BinaryOp.SubI32, left, right);\r\n break;\r\n }\r\n case TypeKind.USIZE: // 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 }\r\n break;\r\n }\r\n case Token.ASTERISK_EQUALS: 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 switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true;\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = this.module.createBinary(BinaryOp.MulI32, left, right);\r\n break;\r\n }\r\n case TypeKind.USIZE: // 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 }\r\n break;\r\n }\r\n case Token.SLASH_EQUALS: 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 switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: 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: 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: { // 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 }\r\n break;\r\n }\r\n case Token.PERCENT_EQUALS: 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 switch (this.currentType.kind) {\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: { // 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 }\r\n break;\r\n }\r\n case Token.LESSTHAN_LESSTHAN_EQUALS: 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 switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true;\r\n default: {\r\n expr = 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: // 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 }\r\n break;\r\n }\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS: 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 switch (this.currentType.kind) {\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: // 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: { // 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 }\r\n break;\r\n }\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS: 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 switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: possiblyOverflows = true;\r\n default: {\r\n // assumes that unsigned shr on unsigned small integers does not overflow\r\n expr = 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: // 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 }\r\n break;\r\n }\r\n case Token.AMPERSAND_EQUALS: 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 switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true; // if left or right already did\r\n default: {\r\n expr = 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: // 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 }\r\n break;\r\n }\r\n case Token.BAR_EQUALS: 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 switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true; // if left or right already did\r\n default: {\r\n expr = 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: // 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 }\r\n break;\r\n }\r\n case Token.CARET_EQUALS: 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 switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true; // if left or right already did\r\n default: {\r\n expr = 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: // 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 }\r\n break;\r\n }\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 }\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 case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(element)) { // reports; not yet compiled if a static field compiled as a global\r\n return this.module.createUnreachable();\r\n }\r\n assert((element).type != Type.void, \"concrete type expected\");\r\n // fall-through\r\n }\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n elementType = (element).type;\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let prototype = (element).setterPrototype;\r\n if (prototype) {\r\n let instance = prototype.resolve(); // reports\r\n if (!instance) return this.module.createUnreachable();\r\n let signature = instance.signature;\r\n assert(signature.parameterTypes.length == 1);\r\n elementType = signature.parameterTypes[0];\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, (element).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (expression.kind == NodeKind.ELEMENTACCESS) { // @operator(\"[]\")\r\n if (resolved.target && resolved.target.kind == ElementKind.CLASS) {\r\n if (element.simpleName == (resolved.target).prototype.fnIndexedGet) {\r\n let resolvedIndexedSet = (element).resolve(null); // reports\r\n if (resolvedIndexedSet) {\r\n elementType = resolvedIndexedSet.signature.returnType;\r\n break;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, (resolved.target).toString()\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n }\r\n // fall-through\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n\r\n // compile the value and do the assignment\r\n var valueExpr = this.compileExpression(valueExpression, elementType);\r\n return this.compileAssignmentWithValue(\r\n expression,\r\n valueExpr,\r\n contextualType != Type.void\r\n );\r\n }\r\n\r\n compileAssignmentWithValue(\r\n expression: Expression,\r\n valueWithCorrectType: ExpressionRef,\r\n tee: bool = false\r\n ): ExpressionRef {\r\n var 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 switch (element.kind) {\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)) return this.module.createUnreachable();\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 let nativeType = (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, nativeType)\r\n ], nativeType);\r\n } else {\r\n return this.module.createSetGlobal((element).internalName, valueWithCorrectType);\r\n }\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.isInstanceTarget);\r\n let targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n (resolved.target).type\r\n );\r\n this.currentType = tee ? (element).type : Type.void;\r\n let nativeType = (element).type.toNativeType();\r\n if (tee) {\r\n let 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, nativeType),\r\n nativeType,\r\n (element).memoryOffset\r\n ),\r\n this.module.createGetLocal(tempLocal.index, nativeType)\r\n ], nativeType);\r\n } else {\r\n return this.module.createStore(\r\n (element).type.size >> 3,\r\n targetExpr,\r\n valueWithCorrectType,\r\n nativeType,\r\n (element).memoryOffset\r\n );\r\n }\r\n }\r\n case ElementKind.PROPERTY: {\r\n let setterPrototype = (element).setterPrototype;\r\n if (setterPrototype) {\r\n let setterInstance = setterPrototype.resolve(); // reports\r\n if (!setterInstance) return this.module.createUnreachable();\r\n\r\n // call just the setter if the return value isn't of interest\r\n if (!tee) {\r\n if (setterInstance.is(ElementFlags.INSTANCE)) {\r\n assert(resolved.isInstanceTarget);\r\n let thisArg = this.compileExpression(\r\n resolved.targetExpression,\r\n (resolved.target).type\r\n );\r\n return this.makeCallDirect(setterInstance, [ thisArg, valueWithCorrectType ]);\r\n } else {\r\n return this.makeCallDirect(setterInstance, [ valueWithCorrectType ]);\r\n }\r\n }\r\n\r\n // otherwise call the setter first, then the getter\r\n let getterPrototype = (element).getterPrototype;\r\n assert(getterPrototype != null); // must have one if there is a setter\r\n let getterInstance = (getterPrototype).resolve(); // reports\r\n if (!getterInstance) return this.module.createUnreachable();\r\n let returnType = getterInstance.signature.returnType;\r\n if (setterInstance.is(ElementFlags.INSTANCE)) {\r\n assert(resolved.isInstanceTarget);\r\n let thisArg = this.compileExpression(\r\n resolved.targetExpression,\r\n (resolved.target).type\r\n );\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(returnType);\r\n return this.module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ // set and remember the target\r\n this.module.createTeeLocal(tempLocal.index, thisArg),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(getterInstance, [ // get from remembered target\r\n this.module.createGetLocal(tempLocal.index, returnType.toNativeType())\r\n ])\r\n ], returnType.toNativeType());\r\n } else {\r\n // note that this must be performed here because `resolved` is shared\r\n return this.module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ valueWithCorrectType ]),\r\n this.makeCallDirect(getterInstance)\r\n ], returnType.toNativeType());\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: { // @operator(\"[]\") ?\r\n if (expression.kind == NodeKind.ELEMENTACCESS) {\r\n assert(resolved.isInstanceTarget);\r\n let getterInstance = (element).resolve(); // reports\r\n if (!getterInstance) return this.module.createUnreachable();\r\n // obtain @operator(\"[]=\")\r\n let setElementName = (resolved.target).prototype.fnIndexedSet;\r\n let setElement: Element | null;\r\n if (\r\n setElementName != null &&\r\n (resolved.target).members &&\r\n (setElement = (>(resolved.target).members).get(setElementName)) &&\r\n setElement.kind == ElementKind.FUNCTION_PROTOTYPE\r\n ) {\r\n let setterInstance = (setElement).resolve(); // reports\r\n if (!setterInstance) return this.module.createUnreachable();\r\n let targetType = (resolved.target).type;\r\n let targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n targetType\r\n );\r\n let elementExpr = this.compileExpression(\r\n (expression).elementExpression,\r\n Type.i32\r\n );\r\n if (tee) {\r\n let tempLocalTarget = this.currentFunction.getTempLocal(targetType);\r\n let tempLocalElement = this.currentFunction.getAndFreeTempLocal(this.currentType);\r\n let returnType = getterInstance.signature.returnType;\r\n this.currentFunction.freeTempLocal(tempLocalTarget);\r\n return this.module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [\r\n this.module.createTeeLocal(tempLocalTarget.index, targetExpr),\r\n this.module.createTeeLocal(tempLocalElement.index, elementExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(getterInstance, [\r\n this.module.createGetLocal(tempLocalTarget.index, tempLocalTarget.type.toNativeType()),\r\n this.module.createGetLocal(tempLocalElement.index, tempLocalElement.type.toNativeType())\r\n ])\r\n ], returnType.toNativeType());\r\n } else {\r\n return this.makeCallDirect(setterInstance, [\r\n targetExpr,\r\n elementExpr,\r\n valueWithCorrectType\r\n ]);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, (resolved.target).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n // fall-through\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return 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 signature: Signature | null;\r\n var indexArg: ExpressionRef;\r\n switch (element.kind) {\r\n\r\n // direct call: concrete function\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let prototype = element;\r\n\r\n // builtins are compiled on the fly\r\n if (prototype.is(ElementFlags.BUILTIN)) {\r\n let expr = compileBuiltinCall( // reports\r\n this,\r\n prototype,\r\n prototype.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\r\n // otherwise compile to a call\r\n } else {\r\n let instance = prototype.resolveUsingTypeArguments( // reports\r\n expression.typeArguments,\r\n this.currentFunction.contextualTypeArguments,\r\n expression\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n let thisArg: ExpressionRef = 0;\r\n if (instance.is(ElementFlags.INSTANCE)) {\r\n assert(resolved.isInstanceTarget);\r\n thisArg = this.compileExpression(\r\n resolved.targetExpression,\r\n (resolved.target).type\r\n );\r\n if (!thisArg) return this.module.createUnreachable();\r\n } else {\r\n assert(!resolved.isInstanceTarget);\r\n }\r\n return this.compileCallDirect(instance, expression.arguments, expression, thisArg);\r\n }\r\n }\r\n\r\n // indirect call: index argument with signature\r\n case ElementKind.LOCAL: {\r\n if (signature = (element).type.functionType) {\r\n indexArg = this.module.createGetLocal((element).index, NativeType.I32);\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (element).type.toString()\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (signature = (element).type.functionType) {\r\n indexArg = this.module.createGetGlobal((element).internalName, (element).type.toNativeType());\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (element).type.toString()\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FIELD: {\r\n let type = (element).type;\r\n if (signature = type.functionType) {\r\n let targetExpr = this.compileExpression(assert(resolved.targetExpression), type);\r\n indexArg = this.module.createLoad(\r\n 4,\r\n false,\r\n targetExpr,\r\n NativeType.I32,\r\n (element).memoryOffset\r\n );\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (element).type.toString()\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FUNCTION_TARGET: {\r\n signature = (element).signature;\r\n indexArg = this.compileExpression(expression.expression, (element).type);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: // TODO\r\n\r\n // not supported\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n return this.compileCallIndirect(\r\n signature,\r\n indexArg,\r\n expression.arguments,\r\n expression\r\n );\r\n }\r\n\r\n /**\r\n * Checks that a call with the given number as arguments can be performed according to the\r\n * specified signature.\r\n */\r\n checkCallSignature(\r\n signature: Signature,\r\n numArguments: i32,\r\n hasThis: bool,\r\n reportNode: Node\r\n ): bool {\r\n\r\n // cannot call an instance method without a `this` argument (TODO: `.call`?)\r\n var thisType = signature.thisType;\r\n if (hasThis != (thisType != null)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported, // TODO: better message?\r\n reportNode.range\r\n );\r\n return false;\r\n }\r\n\r\n // not yet implemented (TODO: maybe some sort of an unmanaged/lightweight array?)\r\n var hasRest = signature.hasRest;\r\n if (hasRest) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return false;\r\n }\r\n\r\n var minimum = signature.requiredParameters;\r\n var maximum = signature.parameterTypes.length;\r\n\r\n // must at least be called with required arguments\r\n if (numArguments < minimum) {\r\n this.error(\r\n minimum < maximum\r\n ? DiagnosticCode.Expected_at_least_0_arguments_but_got_1\r\n : DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, minimum.toString(), numArguments.toString()\r\n );\r\n return false;\r\n }\r\n\r\n // must not be called with more than the maximum arguments\r\n if (numArguments > maximum && !hasRest) {\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, maximum.toString(), numArguments.toString()\r\n );\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** Compiles a direct call to a concrete function. */\r\n compileCallDirect(\r\n instance: Function,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n var signature = instance.signature;\r\n\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n numArguments,\r\n thisArg != 0,\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i]\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallDirect(instance, operands);\r\n }\r\n\r\n /** Gets the trampoline for the specified function. */\r\n ensureTrampoline(original: Function): Function {\r\n var trampoline = original.trampoline;\r\n if (trampoline) return trampoline;\r\n\r\n var originalSignature = original.signature;\r\n var originalName = original.internalName;\r\n var originalParameterTypes = originalSignature.parameterTypes;\r\n var originalParameterDeclarations = original.prototype.declaration.signature.parameterTypes;\r\n var commonReturnType = originalSignature.returnType;\r\n var commonThisType = originalSignature.thisType;\r\n var isInstance = original.is(ElementFlags.INSTANCE);\r\n\r\n // arguments excl. `this`, operands incl. `this`\r\n var minArguments = originalSignature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = originalParameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (isInstance) {\r\n ++minOperands;\r\n ++maxOperands;\r\n }\r\n var numOptional = maxOperands - minOperands;\r\n assert(numOptional);\r\n\r\n var forwardedOperands = new Array(minOperands);\r\n var operandIndex = 0;\r\n\r\n // forward `this` if applicable\r\n if (isInstance) {\r\n forwardedOperands[0] = this.module.createGetLocal(0, this.options.nativeSizeType);\r\n operandIndex = 1;\r\n }\r\n\r\n // forward required arguments\r\n for (let i = 0; i < minArguments; ++i, ++operandIndex) {\r\n let parameterType = originalParameterTypes[i];\r\n forwardedOperands[operandIndex] = this.module.createGetLocal(operandIndex, parameterType.toNativeType());\r\n }\r\n assert(operandIndex == minOperands);\r\n\r\n // append an additional parameter taking the number of optional arguments provided\r\n var trampolineParameterTypes = new Array(maxArguments + 1);\r\n for (let i = 0; i < maxArguments; ++i) {\r\n trampolineParameterTypes[i] = originalParameterTypes[i];\r\n }\r\n trampolineParameterTypes[maxArguments] = Type.i32;\r\n\r\n // create the trampoline element\r\n var trampolineSignature = new Signature(trampolineParameterTypes, commonReturnType, commonThisType);\r\n var trampolineName = originalName + \"|trampoline\";\r\n trampolineSignature.requiredParameters = maxArguments + 1;\r\n trampoline = new Function(original.prototype, trampolineName, trampolineSignature, original.instanceMethodOf);\r\n trampoline.flags = original.flags | ElementFlags.COMPILED;\r\n original.trampoline = trampoline;\r\n\r\n // compile initializers of omitted arguments in scope of the trampoline function\r\n // this is necessary because initializers might need additional locals and a proper this context\r\n var previousFunction = this.currentFunction;\r\n this.currentFunction = trampoline;\r\n\r\n // create a br_table switching over the number of optional parameters provided\r\n var numNames = numOptional + 1; // incl. 'with0'\r\n var names = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n let label = \"N=\" + i.toString();\r\n names[i] = label;\r\n }\r\n var body = this.module.createBlock(names[0], [\r\n this.module.createBlock(\"N=invalid\", [\r\n this.module.createSwitch(names, \"N=invalid\",\r\n this.module.createGetLocal(maxOperands, NativeType.I32)\r\n )\r\n ]),\r\n this.module.createUnreachable()\r\n ]);\r\n for (let i = 0; i < numOptional; ++i, ++operandIndex) {\r\n let type = originalParameterTypes[minArguments + i];\r\n body = this.module.createBlock(names[i + 1], [\r\n body,\r\n this.module.createSetLocal(operandIndex,\r\n this.compileExpression(\r\n assert(originalParameterDeclarations[minArguments + i].initializer),\r\n type\r\n )\r\n )\r\n ]);\r\n forwardedOperands[operandIndex] = this.module.createGetLocal(operandIndex, type.toNativeType());\r\n }\r\n this.currentFunction = previousFunction;\r\n assert(operandIndex == maxOperands);\r\n\r\n var typeRef = this.ensureFunctionType(trampolineSignature);\r\n var funcRef = this.module.addFunction(trampolineName, typeRef, typesToNativeTypes(trampoline.additionalLocals),\r\n this.module.createBlock(null, [\r\n body,\r\n this.module.createCall(\r\n originalName,\r\n forwardedOperands,\r\n commonReturnType.toNativeType()\r\n )\r\n ], commonReturnType.toNativeType())\r\n );\r\n trampoline.finalize(this.module, funcRef);\r\n return trampoline;\r\n }\r\n\r\n /** Creates a direct call to the specified function. */\r\n makeCallDirect(instance: Function, operands: ExpressionRef[] | null = null): ExpressionRef {\r\n var numOperands = operands ? operands.length : 0;\r\n var numArguments = numOperands;\r\n var minArguments = instance.signature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = instance.signature.parameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (instance.is(ElementFlags.INSTANCE)) {\r\n ++minOperands;\r\n ++maxOperands;\r\n --numArguments;\r\n }\r\n assert(numOperands >= minOperands);\r\n if (!this.compileFunction(instance)) return this.module.createUnreachable();\r\n if (numOperands < maxOperands) {\r\n instance = this.ensureTrampoline(instance);\r\n if (!this.compileFunction(instance)) return this.module.createUnreachable();\r\n if (!operands) {\r\n operands = new Array(maxOperands + 1);\r\n operands.length = 0;\r\n }\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(instance.signature.parameterTypes[i].toNativeZero(this.module));\r\n }\r\n operands.push(this.module.createI32(numOperands - minOperands));\r\n }\r\n var returnType = instance.signature.returnType;\r\n this.currentType = returnType;\r\n if (instance.is(ElementFlags.IMPORTED)) {\r\n return this.module.createCallImport(instance.internalName, operands, returnType.toNativeType());\r\n } else {\r\n return this.module.createCall(instance.internalName, operands, returnType.toNativeType());\r\n }\r\n }\r\n\r\n /** Compiles an indirect call using an index argument and a signature. */\r\n compileCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n numArguments,\r\n thisArg != 0,\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i]\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallIndirect(signature, indexArg, operands);\r\n }\r\n\r\n /** Creates an indirect call to the function at `indexArg` in the function table. */\r\n makeCallIndirect(signature: Signature, indexArg: ExpressionRef, operands: ExpressionRef[]): ExpressionRef {\r\n var returnType = signature.returnType;\r\n this.currentType = returnType;\r\n this.ensureFunctionType(signature);\r\n return this.module.createCallIndirect(indexArg, operands, signature.toSignatureString());\r\n }\r\n\r\n compileCommaExpression(expression: CommaExpression, contextualType: Type): ExpressionRef {\r\n var expressions = expression.expressions;\r\n var numExpressions = expressions.length;\r\n var exprs = new Array(numExpressions--);\r\n for (let i = 0; i < numExpressions; ++i) {\r\n exprs[i] = this.compileExpression(expressions[i], Type.void); // drop all\r\n }\r\n exprs[numExpressions] = this.compileExpression(expressions[numExpressions], contextualType); // except last\r\n return this.module.createBlock(null, exprs, this.currentType.toNativeType());\r\n }\r\n\r\n compileElementAccessExpression(expression: ElementAccessExpression, contextualType: Type): ExpressionRef {\r\n var resolved = this.program.resolveElementAccess(expression, this.currentFunction); // reports\r\n if (!resolved) return this.module.createUnreachable();\r\n\r\n assert( // should be guaranteed by resolveElementAccess\r\n resolved.element.kind == ElementKind.FUNCTION_PROTOTYPE &&\r\n resolved.target &&\r\n resolved.target.kind == ElementKind.CLASS\r\n );\r\n var instance = (resolved.element).resolve( // reports\r\n null,\r\n (resolved.target).contextualTypeArguments\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n var thisArg = this.compileExpression(expression.expression, (resolved.target).type);\r\n return this.compileCallDirect(instance, [\r\n expression.elementExpression\r\n ], expression, thisArg);\r\n }\r\n\r\n compileFunctionExpression(expression: FunctionExpression, contextualType: Type): ExpressionRef {\r\n var declaration = expression.declaration;\r\n var 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(\r\n prototype,\r\n [],\r\n this.currentFunction.contextualTypeArguments,\r\n declaration\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n this.currentType = Type.u32.asFunction(instance.signature);\r\n // NOTE that, in order to make this work in every case, the function must be represented by a\r\n // value, so we add it and rely on the optimizer to figure out where it can be called directly.\r\n var index = this.ensureFunctionTableEntry(instance);\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 case NodeKind.NULL: {\r\n if (!contextualType.classType) {\r\n this.currentType = this.options.usizeType;\r\n }\r\n return this.options.isWasm64\r\n ? this.module.createI64(0)\r\n : 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.is(ElementFlags.INSTANCE)) {\r\n let thisType = assert(this.currentFunction.instanceMethodOf).type;\r\n this.currentType = thisType;\r\n return this.module.createGetLocal(0, thisType.toNativeType());\r\n }\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return this.module.createUnreachable();\r\n }\r\n case NodeKind.SUPER: {\r\n if (this.currentFunction.is(ElementFlags.INSTANCE)) {\r\n let base = assert(this.currentFunction.instanceMethodOf).base;\r\n if (base) {\r\n let superType = base.type;\r\n this.currentType = superType;\r\n return this.module.createGetLocal(0, superType.toNativeType());\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise resolve\r\n var resolved = this.program.resolveIdentifier( // reports\r\n expression,\r\n this.currentFunction,\r\n this.currentEnum\r\n );\r\n if (!resolved) return this.module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n switch (element.kind) {\r\n case ElementKind.LOCAL: {\r\n if ((element).is(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 }\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 case LiteralKind.ARRAY: {\r\n assert(!implicitNegate);\r\n let 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 let 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 case LiteralKind.INTEGER: {\r\n let intValue = (expression).value;\r\n if (implicitNegate) {\r\n intValue = i64_sub(\r\n i64_new(0),\r\n intValue\r\n );\r\n }\r\n switch (contextualType.kind) {\r\n\r\n // compile to contextualType if matching\r\n\r\n case TypeKind.I8: {\r\n if (i64_is_i8(intValue)) return this.module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.I16: {\r\n if (i64_is_i16(intValue)) return this.module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n if (i64_is_i32(intValue)) return this.module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U8: {\r\n if (i64_is_u8(intValue)) return this.module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U16: {\r\n if (i64_is_u16(intValue)) return this.module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n if (i64_is_u32(intValue)) return this.module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.BOOL: {\r\n if (i64_is_bool(intValue)) return this.module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n if (!this.options.isWasm64) {\r\n if (i64_is_u32(intValue)) return this.module.createI32(i64_low(intValue));\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)) return this.module.createI32(i64_low(intValue));\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)) return this.module.createF32(i64_to_f32(intValue));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n if (i64_is_f64(intValue)) return this.module.createF64(i64_to_f64(intValue));\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n break; // compiles to best fitting type below, being dropped\r\n }\r\n default: {\r\n assert(false);\r\n break;\r\n }\r\n }\r\n\r\n // otherwise compile to best fitting native type\r\n\r\n if (i64_is_i32(intValue)) {\r\n this.currentType = Type.i32;\r\n return 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 let stringLength = stringValue.length;\r\n let stringBuffer = new Uint8Array(4 + stringLength * 2);\r\n stringBuffer[0] = stringLength & 0xff;\r\n stringBuffer[1] = (stringLength >>> 8) & 0xff;\r\n stringBuffer[2] = (stringLength >>> 16) & 0xff;\r\n stringBuffer[3] = (stringLength >>> 24) & 0xff;\r\n for (let i = 0; i < stringLength; ++i) {\r\n stringBuffer[4 + i * 2] = stringValue.charCodeAt(i) & 0xff;\r\n stringBuffer[5 + i * 2] = (stringValue.charCodeAt(i) >>> 8) & 0xff;\r\n }\r\n stringSegment = this.addMemorySegment(stringBuffer, 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 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\r\n var exprs = new Array(size);\r\n var expr: BinaryenExpressionRef;\r\n for (let 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 case NativeType.I32: {\r\n changetype(values)[i] = _BinaryenConstGetValueI32(expr);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n changetype(values)[i] = i64_new(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n changetype(values)[i] = _BinaryenConstGetValueF32(expr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n changetype(values)[i] = _BinaryenConstGetValueF64(expr);\r\n break;\r\n }\r\n default: {\r\n assert(false); // checked above\r\n }\r\n }\r\n } else {\r\n // TODO: emit a warning if declared 'const'\r\n isStatic = false;\r\n }\r\n }\r\n }\r\n\r\n 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 let prototype = resolved.element;\r\n let instance = prototype.resolveUsingTypeArguments( // reports\r\n expression.typeArguments,\r\n null,\r\n expression\r\n );\r\n if (instance) {\r\n let thisExpr = compileBuiltinAllocate(this, instance, expression);\r\n let initializers = new Array();\r\n\r\n // use a temp local for 'this'\r\n let 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 (let member of instance.members.values()) {\r\n if (member.kind == ElementKind.FIELD) {\r\n let field = member;\r\n let 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 let constructorInstance = instance.constructorInstance;\r\n if (constructorInstance) {\r\n initializers.push(this.compileCallDirect(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 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.isInstanceTarget);\r\n assert((element).memoryOffset >= 0);\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n this.options.usizeType,\r\n ConversionKind.NONE\r\n );\r\n this.currentType = (element).type;\r\n return 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 let prototype = (element).getterPrototype;\r\n if (prototype) {\r\n let instance = prototype.resolve(null); // reports\r\n if (!instance) return this.module.createUnreachable();\r\n let signature = instance.signature;\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n 0,\r\n instance.is(ElementFlags.INSTANCE),\r\n propertyAccess\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n if (instance.instanceMethodOf) {\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n instance.instanceMethodOf.type\r\n );\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], propertyAccess, targetExpr);\r\n } else {\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], propertyAccess);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.range, (element).simpleName, (element).parent.toString()\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n propertyAccess.range\r\n );\r\n return 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 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 case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true;\r\n default: {\r\n op = BinaryOp.AddI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = this.module.createI32(1);\r\n break;\r\n }\r\n case TypeKind.USIZE: // 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 }\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 case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true;\r\n default: {\r\n op = BinaryOp.SubI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = this.module.createI32(1);\r\n break;\r\n }\r\n case TypeKind.USIZE: // 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 }\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\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 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 case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true; // or if operand already did\r\n default: {\r\n expr = 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 // fall-through\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 }\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 switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true; // 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 }\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 }\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 switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true; // or if operand already did\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 }\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 }\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 switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true; // 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 }\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 }\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 }\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) return;\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// 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 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 default: {\r\n throw new Error(\"small integer type expected\");\r\n }\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 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 }\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(expr: ExpressionRef, type: Type, module: Module): ExpressionRef {\r\n switch (type.kind) {\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: // 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 }\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 let ipos = pos;\r\n while (--ipos >= 0) {\r\n if (path.charCodeAt(ipos) == separator) {\r\n if (pos - ipos != 3 ||\r\n path.charCodeAt(ipos + 1) != CharCode.DOT ||\r\n path.charCodeAt(ipos + 2) != CharCode.DOT\r\n ) { // exclude '..' itself\r\n path = atEnd\r\n ? path.substring(0, ipos)\r\n : path.substring(0, ipos) + path.substring(pos + 3);\r\n len -= pos + 3 - ipos;\r\n pos = ipos - 1; // incremented again at end of loop\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // if there's no preceeding '/', trim start if non-empty\r\n if (ipos < 0 && pos > 0) {\r\n if (pos != 2 ||\r\n path.charCodeAt(0) != CharCode.DOT ||\r\n path.charCodeAt(1) != CharCode.DOT\r\n ) { // exclude '..' itself\r\n path = path.substring(pos + 4);\r\n len = path.length;\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n pos++;\r\n }\r\n return len > 0 ? path : \".\";\r\n}\r\n\r\n/** Resolves the specified path relative to the specified origin. */\r\nexport function 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 }\r\n default: {\r\n return false;\r\n }\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is some sort of white space. */\r\nexport function isWhiteSpace(c: i32): bool {\r\n switch (c) {\r\n case CharCode.SPACE:\r\n case CharCode.TAB:\r\n case CharCode.VERTICALTAB:\r\n case CharCode.FORMFEED:\r\n case CharCode.NONBREAKINGSPACE:\r\n case CharCode.NEXTLINE:\r\n case CharCode.OGHAM:\r\n case CharCode.NARROWNOBREAKSPACE:\r\n case CharCode.MATHEMATICALSPACE:\r\n case CharCode.IDEOGRAPHICSPACE:\r\n case CharCode.BYTEORDERMARK: {\r\n return true;\r\n }\r\n default: {\r\n return c >= CharCode.ENQUAD && c <= CharCode.ZEROWIDTHSPACE;\r\n }\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is a 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 CommonTypeNode,\r\n TypeNode,\r\n SignatureNode,\r\n\r\n Expression,\r\n AssertionKind,\r\n CallExpression,\r\n IdentifierExpression,\r\n StringLiteralExpression,\r\n\r\n Statement,\r\n BlockStatement,\r\n BreakStatement,\r\n ClassDeclaration,\r\n ContinueStatement,\r\n DeclarationStatement,\r\n DecoratorNode,\r\n DoStatement,\r\n EnumDeclaration,\r\n EnumValueDeclaration,\r\n ExportImportStatement,\r\n ExportMember,\r\n ExportStatement,\r\n ExpressionStatement,\r\n ForStatement,\r\n FunctionExpression,\r\n FunctionDeclaration,\r\n IfStatement,\r\n ImportDeclaration,\r\n ImportStatement,\r\n ModifierNode,\r\n ModifierKind,\r\n NamespaceDeclaration,\r\n ParameterNode,\r\n ParameterKind,\r\n ReturnStatement,\r\n SwitchCase,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n TypeDeclaration,\r\n TypeParameterNode,\r\n VariableStatement,\r\n VariableDeclaration,\r\n VoidStatement,\r\n WhileStatement,\r\n\r\n 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 var program = this.program;\r\n\r\n // check if already parsed\r\n var normalizedPath = normalizePath(path);\r\n var sources = program.sources;\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n if (sources[i].normalizedPath == normalizedPath) return;\r\n }\r\n this.seenlog.add(normalizedPath);\r\n\r\n // create the source element\r\n var source = new Source(\r\n normalizedPath,\r\n text,\r\n isEntry\r\n ? SourceKind.ENTRY\r\n : path.startsWith(LIBRARY_PREFIX) && path.indexOf(PATH_DELIMITER, LIBRARY_PREFIX.length) < 0\r\n ? SourceKind.LIBRARY\r\n : SourceKind.DEFAULT\r\n );\r\n sources.push(source);\r\n\r\n // tokenize and parse\r\n var tn = new Tokenizer(source, program.diagnostics);\r\n source.tokenizer = tn;\r\n while (!tn.skip(Token.ENDOFFILE)) {\r\n let statement = this.parseTopLevelStatement(tn);\r\n if (statement) {\r\n statement.parent = source;\r\n 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: DecoratorNode[] | null = null;\r\n while (tn.skip(Token.AT)) {\r\n let 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: ModifierNode[] | 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 // parse the statement\r\n var statement: Statement | null = null;\r\n var modifier: ModifierNode | null;\r\n\r\n // handle declarations\r\n switch (tn.peek()) {\r\n case Token.CONST: {\r\n tn.next();\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 } else {\r\n statement = this.parseVariable(tn, modifiers, decorators);\r\n decorators = null;\r\n }\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 tn.next();\r\n statement = this.parseVariable(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ENUM: {\r\n tn.next();\r\n statement = this.parseEnum(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.FUNCTION: {\r\n tn.next();\r\n statement = this.parseFunction(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ABSTRACT: {\r\n tn.next();\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 tn.next();\r\n statement = this.parseClass(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.NAMESPACE: {\r\n tn.next();\r\n statement = this.parseNamespace(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.IMPORT: {\r\n tn.next();\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 tn.next();\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 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 if (!isNamespaceMember) {\r\n statement = this.parseStatement(tn, true);\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // check for decorators that weren't consumed\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n this.error(\r\n DiagnosticCode.Decorators_are_not_valid_here,\r\n decorators[i].range\r\n );\r\n }\r\n }\r\n return statement;\r\n }\r\n\r\n /** Obtains the next file to parse. */\r\n nextFile(): string | null {\r\n var backlog = this.backlog;\r\n return backlog.length ? backlog.shift() : null;\r\n }\r\n\r\n /** Finishes parsing and returns the program. */\r\n finish(): Program {\r\n if (this.backlog.length) throw new Error(\"backlog is not empty\");\r\n this.backlog = [];\r\n this.seenlog.clear();\r\n return this.program;\r\n }\r\n\r\n /** Parses a type. */\r\n parseType(\r\n tn: Tokenizer,\r\n acceptParenthesized: bool = true,\r\n suppressErrors: bool = false\r\n ): CommonTypeNode | null {\r\n\r\n // NOTE: this parses our limited subset\r\n var token = tn.next();\r\n var startPos = tn.tokenPos;\r\n\r\n // 'void'\r\n if (token == Token.VOID) {\r\n return Node.createType(\r\n Node.createIdentifierExpression(\"void\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n }\r\n\r\n var type: CommonTypeNode;\r\n\r\n // '(' ...\r\n if (token == Token.OPENPAREN) {\r\n\r\n // '(' FunctionSignature ')' '|' 'null'?\r\n let isNullableSignature = tn.skip(Token.OPENPAREN);\r\n // FunctionSignature?\r\n let signature = this.tryParseSignature(tn);\r\n if (signature) {\r\n if (isNullableSignature) {\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.BAR)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"|\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.NULL)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"null\"\r\n );\r\n }\r\n signature.isNullable = true;\r\n }\r\n return signature;\r\n } else if (isNullableSignature || this.tryParseSignatureIsSignature) {\r\n this.error(\r\n DiagnosticCode.Unexpected_token,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n // Type (',' Type)* ')'\r\n if (acceptParenthesized) {\r\n let innerType = this.parseType(tn, false, suppressErrors);\r\n if (!innerType) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"}\"\r\n );\r\n }\r\n return null;\r\n }\r\n type = innerType;\r\n type.range.start = startPos;\r\n type.range.end = tn.pos;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Unexpected_token,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n // 'this'\r\n } else if (token == Token.THIS) {\r\n type = Node.createType(\r\n Node.createThisExpression(tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // 'true'\r\n } else if (token == Token.TRUE || token == Token.FALSE) {\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"bool\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // StringLiteral\r\n } else if (token == Token.STRINGLITERAL) {\r\n tn.readString();\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"string\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // Identifier\r\n } else if (token == Token.IDENTIFIER) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let parameters = new Array();\r\n let nullable = false;\r\n\r\n // Name\r\n if (tn.skip(Token.LESSTHAN)) {\r\n do {\r\n let parameter = this.parseType(tn, true, suppressErrors);\r\n if (!parameter) return null;\r\n parameters.push(parameter);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \">\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n // ... | null\r\n if (tn.skip(Token.BAR)) {\r\n if (tn.skip(Token.NULL)) {\r\n nullable = true;\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"null\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n type = Node.createType(identifier, parameters, nullable, tn.range(startPos, tn.pos));\r\n\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n // ... [][]\r\n while (tn.skip(Token.OPENBRACKET)) {\r\n let bracketStart = tn.tokenPos;\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n }\r\n return null;\r\n }\r\n let bracketRange = tn.range(bracketStart, tn.pos);\r\n\r\n // ...[] | null\r\n let nullable = false;\r\n if (tn.skip(Token.BAR)) {\r\n if (tn.skip(Token.NULL)) {\r\n nullable = true;\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"null\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"Array\", bracketRange),\r\n [ type ],\r\n nullable,\r\n tn.range(startPos, tn.pos)\r\n );\r\n if (nullable) break;\r\n }\r\n\r\n return type;\r\n }\r\n\r\n // Indicates whether tryParseSignature determined that it is handling a Signature\r\n private tryParseSignatureIsSignature: bool = false;\r\n\r\n /** Parses a function signature, as used in type declarations. */\r\n tryParseSignature(\r\n tn: Tokenizer\r\n ): SignatureNode | null {\r\n\r\n // at '(': ('...'? Identifier '?'? ':' Type (',' '...'? Identifier '?'? ':' Type)* )? ')' '=>' Type\r\n\r\n var state = tn.mark();\r\n var startPos = tn.tokenPos;\r\n var parameters: ParameterNode[] | null = null;\r\n var thisType: TypeNode | null = null;\r\n var isSignature: bool = false;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n parameters = [];\r\n\r\n } else {\r\n isSignature = false; // not yet known\r\n do {\r\n let kind = ParameterKind.DEFAULT;\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n kind = ParameterKind.REST;\r\n }\r\n if (tn.skip(Token.THIS)) {\r\n if (tn.skip(Token.COLON)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n let t = this.parseType(tn, false);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n this.tryParseSignatureIsSignature = true;\r\n return null;\r\n }\r\n thisType = t;\r\n } else {\r\n tn.reset(state);\r\n this.tryParseSignatureIsSignature = false;\r\n return null;\r\n }\r\n } else if (tn.skip(Token.IDENTIFIER)) {\r\n let name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range(tn.tokenPos, tn.pos));\r\n if (tn.skip(Token.QUESTION)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n if (kind == ParameterKind.REST) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n tn.range()\r\n ); // recoverable\r\n } else {\r\n kind = ParameterKind.OPTIONAL;\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n let type = this.parseType(tn); // not suppressing errors because known\r\n if (!type) {\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n let param = new ParameterNode();\r\n param.parameterKind = kind;\r\n param.name = name;\r\n param.type = type;\r\n if (!parameters) parameters = [ param ];\r\n else parameters.push(param);\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n }\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n }\r\n\r\n var returnType: CommonTypeNode | null;\r\n if (tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n returnType = this.parseType(tn);\r\n if (!returnType) {\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=>\"\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n this.tryParseSignatureIsSignature = true;\r\n return Node.createSignature(\r\n parameters || [],\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n\r\n // statements\r\n\r\n parseDecorator(\r\n tn: Tokenizer\r\n ): DecoratorNode | null {\r\n\r\n // at '@': Identifier ('.' Identifier)* '(' Arguments\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n let name = tn.readIdentifier();\r\n let expression: Expression = Node.createIdentifierExpression(name, tn.range(startPos, tn.pos));\r\n while (tn.skip(Token.DOT)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n name = tn.readIdentifier();\r\n expression = Node.createPropertyAccessExpression(\r\n expression,\r\n Node.createIdentifierExpression(name, tn.range()),\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n let args: Expression[] | null;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n args = this.parseArguments(tn);\r\n if (args) {\r\n return Node.createDecorator(expression, args, tn.range(startPos, tn.pos));\r\n }\r\n } else {\r\n return Node.createDecorator(expression, null, tn.range(startPos, tn.pos));\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseVariable(\r\n tn: Tokenizer,\r\n modifiers: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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 let 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: ModifierNode[] | null,\r\n parentDecorators: DecoratorNode[] | null\r\n ): VariableDeclaration | null {\r\n\r\n // before: Identifier (':' Type)? ('=' Expression)?\r\n\r\n if (!tn.skip(Token.IDENTIFIER)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n\r\n var type: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n }\r\n\r\n var initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (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: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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 let 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 ): TypeParameterNode[] | null {\r\n\r\n // at '<': TypeParameter (',' TypeParameter)* '>'\r\n\r\n var typeParameters = new Array();\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n do {\r\n let typeParameter = this.parseTypeParameter(tn);\r\n if (!typeParameter) return null;\r\n typeParameters.push(typeParameter);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_parameter_list_cannot_be_empty,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n return typeParameters;\r\n }\r\n\r\n parseTypeParameter(\r\n tn: Tokenizer\r\n ): TypeParameterNode | null {\r\n\r\n // before: Identifier ('extends' Type)?\r\n\r\n if (tn.next() == Token.IDENTIFIER) {\r\n let identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n let extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\r\n }\r\n return Node.createTypeParameter(\r\n identifier,\r\n extendsType,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseParameters(\r\n tn: Tokenizer\r\n ): ParameterNode[] | null {\r\n\r\n // at '(': (Parameter (',' Parameter)*)? ')'\r\n\r\n var parameters = new Array();\r\n var seenRest: ParameterNode | null = null;\r\n var seenOptional = false;\r\n var reportedRest = false;\r\n\r\n if (tn.peek() != Token.CLOSEPAREN) {\r\n do {\r\n let param = this.parseParameter(tn);\r\n if (!param) return null;\r\n if (seenRest && !reportedRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,\r\n seenRest.name.range\r\n );\r\n reportedRest = true;\r\n }\r\n switch (param.parameterKind) {\r\n default: {\r\n if (seenOptional) {\r\n this.error(\r\n DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,\r\n param.name.range\r\n );\r\n }\r\n break;\r\n }\r\n case ParameterKind.OPTIONAL: {\r\n seenOptional = true;\r\n break;\r\n }\r\n case ParameterKind.REST: {\r\n seenRest = param;\r\n break;\r\n }\r\n }\r\n parameters.push(param);\r\n } while (tn.skip(Token.COMMA));\r\n }\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n return parameters;\r\n }\r\n\r\n parseParameter(\r\n tn: Tokenizer,\r\n suppressErrors: bool = false\r\n ): ParameterNode | null {\r\n\r\n // before: '...'? Identifier '?'? (':' Type)? ('=' Expression)?\r\n\r\n var isRest = false;\r\n var isOptional = false;\r\n var startRange: Range | null = null;\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n isRest = true;\r\n startRange = tn.range();\r\n }\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n if (!isRest) startRange = tn.range();\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let type: CommonTypeNode | null = null;\r\n if (isOptional = tn.skip(Token.QUESTION)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n identifier.range\r\n );\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n }\r\n let initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,\r\n identifier.range\r\n );\r\n }\r\n if (isOptional) {\r\n this.error(\r\n DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,\r\n identifier.range\r\n );\r\n } else {\r\n isOptional = true;\r\n }\r\n initializer = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!initializer) return null;\r\n }\r\n return Node.createParameter(\r\n identifier,\r\n type,\r\n initializer,\r\n isRest\r\n ? ParameterKind.REST\r\n : isOptional\r\n ? ParameterKind.OPTIONAL\r\n : ParameterKind.DEFAULT,\r\n Range.join(startRange, tn.range())\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseFunction(\r\n tn: Tokenizer,\r\n modifiers: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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 name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var signatureStart: i32 = -1;\r\n\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n signatureStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n }\r\n\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n if (signatureStart < 0) {\r\n signatureStart = tn.tokenPos;\r\n }\r\n\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n var isSetter = 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 name.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 name.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 name.range\r\n ); // recoverable\r\n }\r\n\r\n var returnType: CommonTypeNode | 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\r\n if (!returnType) {\r\n returnType = Node.createOmittedType(\r\n tn.range(tn.pos)\r\n );\r\n if (!isSetter) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n null,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n var 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 name,\r\n typeParameters,\r\n signature,\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 name: IdentifierExpression;\r\n var isArrow = false;\r\n\r\n // either at 'function':\r\n // Identifier?\r\n // '(' Parameters (':' Type)?\r\n // Statement\r\n\r\n if (tn.token == Token.FUNCTION) {\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else { // empty name\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.pos));\r\n }\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n // or at '(' of arrow function:\r\n // Parameters (':' Type)?\r\n // Statement\r\n\r\n } else {\r\n isArrow = true;\r\n assert(tn.token == Token.OPENPAREN);\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.tokenPos));\r\n }\r\n\r\n // TODO: type parameters? doesn't seem worth it.\r\n\r\n var signatureStart = tn.pos;\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n return this.parseFunctionExpressionCommon(tn, name, parameters, isArrow, startPos, signatureStart);\r\n }\r\n\r\n private parseFunctionExpressionCommon(\r\n tn: Tokenizer,\r\n name: IdentifierExpression,\r\n parameters: ParameterNode[],\r\n isArrow: bool,\r\n startPos: i32 = -1,\r\n signatureStart: i32 = -1\r\n ): FunctionExpression | null {\r\n if (startPos < 0) startPos = name.range.start;\r\n if (signatureStart < 0) signatureStart = startPos;\r\n\r\n var returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n\r\n if (isArrow) {\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"=>\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n var signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n null,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n var body: Statement | null;\r\n if (isArrow) {\r\n body = this.parseStatement(tn, false);\r\n } else {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"{\"\r\n );\r\n return null;\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n }\r\n if (!body) return null;\r\n\r\n var declaration = Node.createFunctionDeclaration(\r\n name,\r\n null,\r\n signature,\r\n body,\r\n null,\r\n 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: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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 let identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n\r\n let typeParameters: TypeParameterNode[] | 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 let extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\r\n }\r\n\r\n let implementsTypes = new Array();\r\n if (tn.skip(Token.IMPLEMENTS)) {\r\n do {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n implementsTypes.push(type);\r\n } while (tn.skip(Token.COMMA));\r\n }\r\n\r\n if (tn.skip(Token.OPENBRACE)) {\r\n\r\n let members = new Array();\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n let isDeclare = hasModifier(ModifierKind.DECLARE, modifiers);\r\n do {\r\n let 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 let decorator = this.parseDecorator(tn);\r\n if (!decorator) break;\r\n decorators.push(decorator);\r\n }\r\n\r\n var modifiers: ModifierNode[] | 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 var state = 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(state);\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(state);\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 let name = isConstructor\r\n ? Node.createConstructorExpression(tn.range())\r\n : Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n\r\n let typeParameters: TypeParameterNode[] | 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 let signatureStart = tn.tokenPos;\r\n let 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 name.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 name.range\r\n );\r\n }\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,\r\n name.range\r\n );\r\n }\r\n }\r\n\r\n let returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n if (name.kind == NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration,\r\n tn.range()\r\n );\r\n } else if (isSetter) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_cannot_have_a_return_type_annotation,\r\n tn.range()\r\n );\r\n }\r\n returnType = this.parseType(tn, name.kind == NodeKind.CONSTRUCTOR || isSetter);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n if (!isSetter && name.kind != NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n let signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n null,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n let body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (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 let retMethod = Node.createMethodDeclaration(\r\n name,\r\n typeParameters,\r\n signature,\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 name.range\r\n );\r\n\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n name.range\r\n );\r\n\r\n // field: (':' Type)? ('=' Expression)? ';'?\r\n } else {\r\n let modifier: ModifierNode | 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 let type: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n let initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n initializer = this.parseExpression(tn);\r\n if (!initializer) return null;\r\n }\r\n let retField = Node.createFieldDeclaration(\r\n name,\r\n type,\r\n initializer,\r\n 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: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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 let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseTopLevelStatement(tn, true);\r\n if (!member) return null;\r\n members.push(member);\r\n }\r\n let 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: ModifierNode[] | 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 let members = new Array();\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseExportMember(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n let path: StringLiteralExpression | null = null;\r\n if (tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n let ret = Node.createExportStatement(members, path, 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 let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createExportMember(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImport(\r\n tn: Tokenizer\r\n ): ImportStatement | null {\r\n\r\n // at 'import':\r\n // ('{' (ImportMember (',' ImportMember)* '}') | ('*' 'as' Identifier)?\r\n // 'from' StringLiteral ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var members: ImportDeclaration[] | null = null;\r\n var namespaceName: IdentifierExpression | null = null;\r\n var skipFrom = false;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n members = new Array();\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseImportDeclaration(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n } else if (tn.skip(Token.ASTERISK)) {\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n namespaceName = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"as\"\r\n );\r\n return null;\r\n }\r\n } else {\r\n skipFrom = true;\r\n }\r\n\r\n if (skipFrom || tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n let path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n let ret: ImportStatement;\r\n if (namespaceName) {\r\n assert(!members);\r\n ret = Node.createImportStatementWithWildcard(namespaceName, path, tn.range(startPos, tn.pos));\r\n } else {\r\n ret = Node.createImportStatement(members, path, tn.range(startPos, tn.pos));\r\n }\r\n if (!this.seenlog.has(ret.normalizedPath)) {\r\n this.backlog.push(ret.normalizedPath);\r\n this.seenlog.add(ret.normalizedPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"from\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImportDeclaration(\r\n tn: Tokenizer\r\n ): ImportDeclaration | null {\r\n\r\n // before: Identifier ('as' Identifier)?\r\n\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createImportDeclaration(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportImport(\r\n tn: Tokenizer,\r\n 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 let asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let ret = Node.createExportImportStatement(identifier, asIdentifier, 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 var state = tn.mark();\r\n var token = tn.next();\r\n switch (token) {\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);\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(state);\r\n return this.parseExpressionStatement(tn);\r\n }\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 let 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 let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let ret = Node.createDoStatement(statement, condition, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"while\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExpressionStatement(\r\n tn: Tokenizer\r\n ): ExpressionStatement | null {\r\n\r\n // at previous token\r\n\r\n var expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n\r\n var ret = Node.createExpressionStatement(expr);\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseForStatement(\r\n tn: Tokenizer\r\n ): ForStatement | null {\r\n\r\n // at 'for': '(' Statement? Expression? ';' Expression? ')' Statement\r\n\r\n var startPos = tn.tokenPos;\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n\r\n let 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 let condition: ExpressionStatement | null = null;\r\n if (!tn.skip(Token.SEMICOLON)) {\r\n condition = this.parseExpressionStatement(tn);\r\n if (!condition) return null;\r\n }\r\n\r\n if (tn.token == Token.SEMICOLON) {\r\n let incrementor: Expression | null = null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n incrementor = this.parseExpression(tn);\r\n if (!incrementor) return null;\r\n\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n return Node.createForStatement(\r\n initializer,\r\n condition\r\n ? condition.expression\r\n : null,\r\n incrementor,\r\n statement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseIfStatement(\r\n tn: Tokenizer\r\n ): IfStatement | null {\r\n\r\n // at 'if': '(' Expression ')' Statement ('else' Statement)?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let elseStatement: Statement | null = null;\r\n if (tn.skip(Token.ELSE)) {\r\n elseStatement = this.parseStatement(tn);\r\n if (!elseStatement) return null;\r\n }\r\n return Node.createIfStatement(\r\n condition,\r\n statement,\r\n elseStatement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchStatement(\r\n tn: Tokenizer\r\n ): SwitchStatement | null {\r\n\r\n // at 'switch': '(' Expression ')' '{' SwitchCase* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let cases = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let case_ = this.parseSwitchCase(tn);\r\n if (!case_) return null;\r\n cases.push(case_);\r\n }\r\n let ret = Node.createSwitchStatement(condition, cases, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchCase(\r\n tn: Tokenizer\r\n ): SwitchCase | null {\r\n\r\n var startPos = tn.tokenPos;\r\n var statements: Statement[],\r\n statement: Statement | null;\r\n\r\n // 'case' Expression ':' Statement*\r\n\r\n if (tn.skip(Token.CASE)) {\r\n let label = this.parseExpression(tn);\r\n if (!label) return null;\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(label, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n\r\n // 'default' ':' Statement*\r\n\r\n } else if (tn.skip(Token.DEFAULT)) {\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(null, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._case_or_default_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseThrowStatement(\r\n tn: Tokenizer\r\n ): ThrowStatement | null {\r\n\r\n // at 'throw': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n var ret = Node.createThrowStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseTryStatement(\r\n tn: Tokenizer\r\n ): TryStatement | null {\r\n\r\n // at 'try':\r\n // '{' Statement* '}'\r\n // ('catch' '(' VariableMember ')' '{' Statement* '}')?\r\n // ('finally' '{' Statement* '}'? ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var stmt: Statement | null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n statements.push(stmt);\r\n }\r\n let catchVariable: IdentifierExpression | null = null;\r\n let catchStatements: Statement[] | null = null;\r\n let finallyStatements: Statement[] | null = null;\r\n if (tn.skip(Token.CATCH)) {\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.IDENTIFIER)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n catchVariable = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n catchStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n catchStatements.push(stmt);\r\n }\r\n }\r\n if (tn.skip(Token.FINALLY)) {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n finallyStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n finallyStatements.push(stmt);\r\n }\r\n }\r\n if (!(catchStatements || finallyStatements)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"catch\"\r\n );\r\n return null;\r\n }\r\n let ret = Node.createTryStatement(\r\n statements,\r\n catchVariable,\r\n catchStatements,\r\n finallyStatements,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseTypeDeclaration(\r\n tn: Tokenizer,\r\n modifiers: ModifierNode[] | null = null,\r\n decorators: DecoratorNode[] | null = null\r\n ): TypeDeclaration | null {\r\n\r\n // at 'type': Identifier ('<' TypeParameters '>')? '=' 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 let name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n }\r\n if (tn.skip(Token.EQUALS)) {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n let ret = Node.createTypeDeclaration(\r\n name,\r\n typeParameters,\r\n type,\r\n 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 parseVoidStatement(\r\n tn: Tokenizer\r\n ): VoidStatement | null {\r\n\r\n // at 'void': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn, Precedence.GROUPING);\r\n if (!expression) return null;\r\n var ret = Node.createVoidStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseWhileStatement(\r\n tn: Tokenizer\r\n ): WhileStatement | null {\r\n\r\n // at 'while': '(' Expression ')' Statement ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let ret = Node.createWhileStatement(expression, statement, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n // expressions\r\n // see: http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm#climbing\r\n\r\n parseExpressionStart(\r\n tn: Tokenizer\r\n ): Expression | null {\r\n\r\n var token = tn.next(true);\r\n var startPos = tn.tokenPos;\r\n var expr: Expression | null = null;\r\n\r\n if (token == Token.NULL) {\r\n return Node.createNullExpression(tn.range());\r\n }\r\n if (token == Token.TRUE) {\r\n return Node.createTrueExpression(tn.range());\r\n }\r\n if (token == Token.FALSE) {\r\n return Node.createFalseExpression(tn.range());\r\n }\r\n\r\n var p = determinePrecedenceStart(token);\r\n if (p != Precedence.INVALID) {\r\n let operand: Expression | null;\r\n\r\n // TODO: SpreadExpression, YieldExpression (currently become unsupported UnaryPrefixExpressions)\r\n\r\n // NewExpression\r\n if (token == Token.NEW) {\r\n operand = this.parseExpression(tn, Precedence.CALL);\r\n if (!operand) return null;\r\n if (operand.kind == NodeKind.CALL) {\r\n return Node.createNewExpression(\r\n (operand).expression,\r\n (operand).typeArguments,\r\n (operand).arguments,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n } else {\r\n operand = this.parseExpression(tn, p);\r\n if (!operand) return null;\r\n }\r\n\r\n // UnaryPrefixExpression\r\n if (token == Token.PLUS_PLUS || token == Token.MINUS_MINUS) {\r\n if (\r\n operand.kind != NodeKind.IDENTIFIER &&\r\n operand.kind != NodeKind.ELEMENTACCESS &&\r\n operand.kind != NodeKind.PROPERTYACCESS\r\n ) {\r\n this.error(\r\n DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,\r\n operand.range\r\n );\r\n }\r\n }\r\n return Node.createUnaryPrefixExpression(token, operand, tn.range(startPos, tn.pos));\r\n }\r\n\r\n switch (token) {\r\n\r\n // ParenthesizedExpression\r\n // FunctionExpression\r\n case Token.OPENPAREN: {\r\n\r\n // determine whether this is a function expression\r\n if (tn.skip(Token.CLOSEPAREN)) { // must be a function expression (fast route)\r\n return this.parseFunctionExpressionCommon(\r\n tn,\r\n Node.createEmptyIdentifierExpression(tn.range(startPos)),\r\n [],\r\n true\r\n );\r\n }\r\n let state = tn.mark();\r\n let again = true;\r\n do {\r\n switch (tn.next(true)) {\r\n\r\n // function expression\r\n case Token.DOT_DOT_DOT: {\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n switch (tn.next()) {\r\n\r\n // if we got here, check for arrow\r\n case Token.CLOSEPAREN: {\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n again = false;\r\n break;\r\n }\r\n // fall-through\r\n }\r\n // function expression\r\n case Token.QUESTION: // optional parameter\r\n case Token.COLON: { // type annotation\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.COMMA: {\r\n break; // continue\r\n }\r\n // parenthesized expression\r\n // case Token.EQUALS: // missing type annotation for simplicity\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n // parenthesized expression\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n } while (again);\r\n tn.reset(state);\r\n\r\n // parse parenthesized\r\n expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n return Node.createParenthesizedExpression(expr, tn.range(startPos, tn.pos));\r\n }\r\n // ArrayLiteralExpression\r\n case Token.OPENBRACKET: {\r\n let elementExpressions = new Array();\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n do {\r\n if (tn.peek() == Token.COMMA) {\r\n expr = null; // omitted\r\n } else {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n }\r\n elementExpressions.push(expr);\r\n if (tn.peek() == Token.CLOSEBRACKET) break;\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createArrayLiteralExpression(elementExpressions, tn.range(startPos, tn.pos));\r\n }\r\n // AssertionExpression (unary prefix)\r\n case Token.LESSTHAN: {\r\n let toType = this.parseType(tn);\r\n if (!toType) return null;\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n expr = this.parseExpression(tn, Precedence.CALL);\r\n if (!expr) return null;\r\n return Node.createAssertionExpression(\r\n AssertionKind.PREFIX,\r\n expr,\r\n toType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n case Token.IDENTIFIER: {\r\n return Node.createIdentifierExpression(tn.readIdentifier(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.THIS: {\r\n return Node.createThisExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.CONSTRUCTOR: {\r\n return Node.createConstructorExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.SUPER: {\r\n return Node.createSuperExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.STRINGLITERAL: {\r\n return Node.createStringLiteralExpression(tn.readString(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.INTEGERLITERAL: {\r\n return Node.createIntegerLiteralExpression(tn.readInteger(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.FLOATLITERAL: {\r\n return Node.createFloatLiteralExpression(tn.readFloat(), tn.range(startPos, tn.pos));\r\n }\r\n // RegexpLiteralExpression\r\n // note that this also continues on invalid ones so the surrounding AST remains intact\r\n case Token.SLASH: {\r\n let regexpPattern = tn.readRegexpPattern(); // also reports\r\n if (!tn.skip(Token.SLASH)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"/\"\r\n );\r\n return null;\r\n }\r\n return Node.createRegexpLiteralExpression(\r\n regexpPattern,\r\n tn.readRegexpFlags(), // also reports\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n case Token.FUNCTION: {\r\n return this.parseFunctionExpression(tn);\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Expression_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n tryParseTypeArgumentsBeforeArguments(\r\n tn: Tokenizer\r\n ): CommonTypeNode[] | null {\r\n\r\n // at '<': Type (',' Type)* '>' '('\r\n\r\n var state = tn.mark();\r\n if (!tn.skip(Token.LESSTHAN)) return null;\r\n var typeArguments = new Array();\r\n do {\r\n let type = this.parseType(tn, true, true);\r\n if (!type) {\r\n tn.reset(state);\r\n return null;\r\n }\r\n typeArguments.push(type);\r\n } while (tn.skip(Token.COMMA));\r\n if (tn.skip(Token.GREATERTHAN) && tn.skip(Token.OPENPAREN)) {\r\n return typeArguments;\r\n }\r\n tn.reset(state);\r\n return null;\r\n }\r\n\r\n parseArguments(\r\n tn: Tokenizer\r\n ): Expression[] | null {\r\n\r\n // at '(': (Expression (',' Expression)*)? ')'\r\n\r\n var args = new Array();\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n do {\r\n let expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n args.push(expr);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n return args;\r\n }\r\n\r\n parseExpression(\r\n tn: Tokenizer,\r\n precedence: Precedence = 0\r\n ): Expression | null {\r\n\r\n var expr = this.parseExpressionStart(tn);\r\n if (!expr) return null;\r\n var startPos = expr.range.start;\r\n\r\n // CallExpression with type arguments\r\n var typeArguments: CommonTypeNode[] | null;\r\n while (\r\n // there might be better ways to distinguish a LESSTHAN from a CALL with type arguments\r\n (typeArguments = this.tryParseTypeArgumentsBeforeArguments(tn)) ||\r\n tn.skip(Token.OPENPAREN)\r\n ) {\r\n let args = this.parseArguments(tn);\r\n if (!args) return null;\r\n expr = Node.createCallExpression(expr, typeArguments, args, tn.range(startPos, tn.pos));\r\n }\r\n\r\n var token: Token;\r\n var next: Expression | null = null;\r\n var nextPrecedence: Precedence;\r\n while (\r\n (nextPrecedence = determinePrecedence(token = tn.peek())) >= precedence\r\n ) { // precedence climbing\r\n tn.next();\r\n switch (token) {\r\n // AssertionExpression\r\n case Token.AS: {\r\n let toType = this.parseType(tn);\r\n if (!toType) return null;\r\n expr = Node.createAssertionExpression(\r\n AssertionKind.AS,\r\n expr,\r\n toType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // ElementAccessExpression\r\n case Token.OPENBRACKET: {\r\n next = this.parseExpression(tn);\r\n if (!next) return null;\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n expr = Node.createElementAccessExpression(\r\n expr,\r\n next,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // UnaryPostfixExpression\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS: {\r\n if (\r\n expr.kind != NodeKind.IDENTIFIER &&\r\n expr.kind != NodeKind.ELEMENTACCESS &&\r\n expr.kind != NodeKind.PROPERTYACCESS\r\n ) {\r\n this.error(\r\n DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,\r\n expr.range\r\n );\r\n }\r\n expr = Node.createUnaryPostfixExpression(\r\n token,\r\n expr,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // TernaryExpression\r\n case Token.QUESTION: {\r\n let ifThen = this.parseExpression(tn);\r\n if (!ifThen) return null;\r\n if (!tn.skip(Token.COLON)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n let ifElse = this.parseExpression(tn);\r\n if (!ifElse) return null;\r\n expr = Node.createTernaryExpression(\r\n expr,\r\n ifThen,\r\n ifElse,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // CommaExpression\r\n case Token.COMMA: {\r\n let commaExprs: Expression[] = [ expr ];\r\n do {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n commaExprs.push(expr);\r\n } while (tn.skip(Token.COMMA));\r\n expr = Node.createCommaExpression(commaExprs, tn.range(startPos, tn.pos));\r\n break;\r\n }\r\n default: {\r\n next = this.parseExpression(tn,\r\n isRightAssociative(token)\r\n ? nextPrecedence\r\n : nextPrecedence + 1\r\n );\r\n if (!next) return null;\r\n\r\n // PropertyAccessExpression\r\n if (token == Token.DOT) {\r\n if (next.kind == NodeKind.IDENTIFIER) {\r\n expr = Node.createPropertyAccessExpression(\r\n expr,\r\n next,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else if (next.kind == NodeKind.CALL) { // join\r\n let propertyCall = next;\r\n if (propertyCall.expression.kind == NodeKind.IDENTIFIER) {\r\n propertyCall.expression = Node.createPropertyAccessExpression(\r\n expr,\r\n propertyCall.expression,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n propertyCall.expression.range\r\n );\r\n return null;\r\n }\r\n expr = propertyCall;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n next.range\r\n );\r\n return null;\r\n }\r\n\r\n // BinaryExpression\r\n } else {\r\n expr = Node.createBinaryExpression(token, expr, next, tn.range(startPos, tn.pos));\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n return expr;\r\n }\r\n}\r\n\r\n/** Operator precedence from least to largest. */\r\nexport const enum Precedence {\r\n COMMA,\r\n SPREAD,\r\n YIELD,\r\n ASSIGNMENT,\r\n CONDITIONAL,\r\n LOGICAL_OR,\r\n LOGICAL_AND,\r\n BITWISE_OR,\r\n BITWISE_XOR,\r\n BITWISE_AND,\r\n EQUALITY,\r\n RELATIONAL,\r\n SHIFT,\r\n ADDITIVE,\r\n MULTIPLICATIVE,\r\n EXPONENTIATED,\r\n UNARY_PREFIX,\r\n UNARY_POSTFIX,\r\n CALL,\r\n MEMBERACCESS,\r\n GROUPING,\r\n INVALID = -1\r\n}\r\n\r\n/** Determines the precedence of a starting token. */\r\nfunction determinePrecedenceStart(kind: Token): i32 {\r\n switch (kind) {\r\n case Token.DOT_DOT_DOT: return Precedence.SPREAD;\r\n case Token.YIELD: return Precedence.YIELD;\r\n case Token.EXCLAMATION:\r\n case Token.TILDE:\r\n case Token.PLUS:\r\n case Token.MINUS:\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS:\r\n case Token.TYPEOF:\r\n case Token.VOID:\r\n case Token.DELETE: return Precedence.UNARY_PREFIX;\r\n case Token.NEW: return Precedence.MEMBERACCESS;\r\n default: return Precedence.INVALID;\r\n }\r\n}\r\n\r\n/** Determines the precende of a non-starting token. */\r\nfunction determinePrecedence(kind: Token): i32 {\r\n switch (kind) {\r\n case Token.COMMA: return Precedence.COMMA;\r\n case Token.EQUALS:\r\n case Token.PLUS_EQUALS:\r\n case Token.MINUS_EQUALS:\r\n case Token.ASTERISK_ASTERISK_EQUALS:\r\n case Token.ASTERISK_EQUALS:\r\n case Token.SLASH_EQUALS:\r\n case Token.PERCENT_EQUALS:\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.AMPERSAND_EQUALS:\r\n case Token.CARET_EQUALS:\r\n case Token.BAR_EQUALS: return Precedence.ASSIGNMENT;\r\n case Token.QUESTION: return Precedence.CONDITIONAL;\r\n case Token.BAR_BAR: return Precedence.LOGICAL_OR;\r\n case Token.AMPERSAND_AMPERSAND: return Precedence.LOGICAL_AND;\r\n case Token.BAR: return Precedence.BITWISE_OR;\r\n case Token.CARET: return Precedence.BITWISE_XOR;\r\n case Token.AMPERSAND: return Precedence.BITWISE_AND;\r\n case Token.EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS:\r\n case Token.EQUALS_EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS_EQUALS: return Precedence.EQUALITY;\r\n case Token.AS:\r\n case Token.IN:\r\n case Token.INSTANCEOF:\r\n case Token.LESSTHAN:\r\n case Token.GREATERTHAN:\r\n case Token.LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_EQUALS: return Precedence.RELATIONAL;\r\n case Token.LESSTHAN_LESSTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: return Precedence.SHIFT;\r\n case Token.PLUS:\r\n case Token.MINUS: return Precedence.ADDITIVE;\r\n case Token.ASTERISK:\r\n case Token.SLASH:\r\n case Token.PERCENT: return Precedence.MULTIPLICATIVE;\r\n case Token.ASTERISK_ASTERISK: return Precedence.EXPONENTIATED;\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS: return Precedence.UNARY_POSTFIX;\r\n case Token.DOT:\r\n case Token.NEW:\r\n case Token.OPENBRACKET: return Precedence.MEMBERACCESS;\r\n default: return Precedence.INVALID;\r\n }\r\n}\r\n\r\n/** Determines whether a non-starting token is right associative. */\r\nfunction isRightAssociative(kind: Token): bool {\r\n switch (kind) {\r\n case Token.EQUALS:\r\n case Token.PLUS_EQUALS:\r\n case Token.MINUS_EQUALS:\r\n case Token.ASTERISK_ASTERISK_EQUALS:\r\n case Token.ASTERISK_EQUALS:\r\n case Token.SLASH_EQUALS:\r\n case Token.PERCENT_EQUALS:\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.AMPERSAND_EQUALS:\r\n case Token.CARET_EQUALS:\r\n case Token.BAR_EQUALS:\r\n case Token.QUESTION:\r\n case Token.ASTERISK_ASTERISK: return true;\r\n default: return false;\r\n }\r\n}\r\n","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): void {\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n decompileFunction(func: FunctionRef): void {\r\n var name = readString(_BinaryenFunctionGetName(func)) || \"$\" + this.functionId.toString(10);\r\n var body = _BinaryenFunctionGetBody(func);\r\n this.push(\"function \");\r\n this.push(name);\r\n this.push(\"(\");\r\n for (let i: Index = 0, k: Index = _BinaryenFunctionGetNumParams(func); i < k; ++i) {\r\n if (i > 0) this.push(\", \");\r\n this.push(\"$\");\r\n this.push(i.toString(10));\r\n this.push(\": \");\r\n this.push(nativeTypeToType(_BinaryenFunctionGetParam(func, i)));\r\n }\r\n this.push(\"): \");\r\n this.push(nativeTypeToType(_BinaryenFunctionGetResult(func)));\r\n this.push(\" \");\r\n if (_BinaryenExpressionGetId(body) != ExpressionId.Block) {\r\n this.push(\"{\\n\");\r\n }\r\n this.decompileExpression(body);\r\n if (_BinaryenExpressionGetId(body) != ExpressionId.Block) {\r\n this.push(\"\\n}\\n\");\r\n }\r\n ++this.functionId;\r\n }\r\n\r\n decompileExpression(expr: ExpressionRef): void {\r\n var id = _BinaryenExpressionGetId(expr);\r\n var type = _BinaryenExpressionGetType(expr);\r\n\r\n var nested: ExpressionRef;\r\n var string: string | null;\r\n var i: Index, k: Index;\r\n\r\n switch (id) {\r\n case ExpressionId.Block: { // TODO: magic\r\n if ((string = readString(_BinaryenBlockGetName(expr))) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"{\\n\");\r\n k = _BinaryenBlockGetNumChildren(expr);\r\n for (i = 0; i < k; ++i) {\r\n this.decompileExpression(_BinaryenBlockGetChild(expr, i));\r\n }\r\n this.push(\"}\\n\");\r\n return;\r\n }\r\n case ExpressionId.If: {\r\n if (type == NativeType.None) {\r\n this.push(\"if (\");\r\n this.decompileExpression(_BinaryenIfGetCondition(expr));\r\n this.push(\") \");\r\n this.decompileExpression(_BinaryenIfGetIfTrue(expr));\r\n if (nested = _BinaryenIfGetIfFalse(expr)) {\r\n this.push(\" else \");\r\n this.decompileExpression(nested);\r\n }\r\n } else {\r\n this.decompileExpression(_BinaryenIfGetCondition(expr));\r\n this.push(\" ? \");\r\n this.decompileExpression(_BinaryenIfGetIfTrue(expr));\r\n this.push(\" : \");\r\n this.decompileExpression(_BinaryenIfGetIfFalse(expr));\r\n }\r\n return;\r\n }\r\n case ExpressionId.Loop: {\r\n if ((string = readString(_BinaryenLoopGetName(expr))) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"do \");\r\n this.decompileExpression(_BinaryenLoopGetBody(expr));\r\n this.push(\"while (0);\\n\");\r\n }\r\n case ExpressionId.Break: {\r\n if (nested = _BinaryenBreakGetCondition(expr)) {\r\n this.push(\"if (\");\r\n this.decompileExpression(nested);\r\n this.push(\") \");\r\n }\r\n if ((string = readString(_BinaryenBreakGetName(expr))) != null) {\r\n this.push(\"break \");\r\n this.push(string);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"break;\\n\");\r\n }\r\n return;\r\n }\r\n case ExpressionId.Switch:\r\n case ExpressionId.Call:\r\n case ExpressionId.CallImport:\r\n case ExpressionId.CallIndirect: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.GetLocal: {\r\n this.push(\"$\");\r\n this.push(_BinaryenGetLocalGetIndex(expr).toString(10));\r\n return;\r\n }\r\n case ExpressionId.SetLocal: {\r\n this.push(\"$\");\r\n this.push(_BinaryenSetLocalGetIndex(expr).toString(10));\r\n this.push(\" = \");\r\n this.decompileExpression(_BinaryenSetLocalGetValue(expr));\r\n return;\r\n }\r\n case ExpressionId.GetGlobal:\r\n case ExpressionId.SetGlobal: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.Load: {\r\n this.push(\"load<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(_BinaryenLoadGetOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(_BinaryenLoadGetPtr(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Store: {\r\n this.push(\"store<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(_BinaryenStoreGetOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(_BinaryenStoreGetPtr(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenStoreGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Const: {\r\n switch (type) {\r\n case NativeType.I32: {\r\n this.push(_BinaryenConstGetValueI32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.I64: {\r\n this.push(\r\n i64_to_string(\r\n i64_new(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n )\r\n )\r\n );\r\n return;\r\n }\r\n case NativeType.F32: {\r\n this.push(_BinaryenConstGetValueF32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.F64: {\r\n this.push(_BinaryenConstGetValueF64(expr).toString(10));\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Unary: {\r\n switch (_BinaryenUnaryGetOp(expr)) {\r\n case UnaryOp.ClzI32: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI32: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI32: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NegF32:\r\n case UnaryOp.NegF64: {\r\n this.push(\"-\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.AbsF32: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF32: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF32: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF32: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF32: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF32: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.EqzI32:\r\n case UnaryOp.EqzI64: {\r\n this.push(\"!\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ClzI64: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI64: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI64: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.AbsF64: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF64: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF64: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF64: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF64: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF64: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ExtendI32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ExtendU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.WrapI64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.PromoteF32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.DemoteF64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Binary: { // TODO: precedence\r\n switch (_BinaryenBinaryGetOp(expr)) {\r\n case BinaryOp.AddI32:\r\n case BinaryOp.AddI64:\r\n case BinaryOp.AddF32:\r\n case BinaryOp.AddF64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" + \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.SubI32:\r\n case BinaryOp.SubI64:\r\n case BinaryOp.SubF32:\r\n case BinaryOp.SubF64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" - \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.MulI32:\r\n case BinaryOp.MulI64:\r\n case BinaryOp.MulF32:\r\n case BinaryOp.MulF64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" * \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivI32:\r\n case BinaryOp.DivI64:\r\n case BinaryOp.DivF32:\r\n case BinaryOp.DivF64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemI64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.AndI32:\r\n case BinaryOp.AndI64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" & \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.OrI32:\r\n case BinaryOp.OrI64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" | \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.XorI32:\r\n case BinaryOp.XorI64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" ^ \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShlI32:\r\n case BinaryOp.ShlI64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" << \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrU32:\r\n case BinaryOp.ShrU64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >>> \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrI32:\r\n case BinaryOp.ShrI64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >> \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI32: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI32: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.EqI32:\r\n case BinaryOp.EqI64:\r\n case BinaryOp.EqF32:\r\n case BinaryOp.EqF64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" == \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.NeI32:\r\n case BinaryOp.NeI64:\r\n case BinaryOp.NeF32:\r\n case BinaryOp.NeF64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" != \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtI32:\r\n case BinaryOp.LtI64:\r\n case BinaryOp.LtF32:\r\n case BinaryOp.LtF64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeI32:\r\n case BinaryOp.LeI64:\r\n case BinaryOp.LeF32:\r\n case BinaryOp.LeF64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtI32:\r\n case BinaryOp.GtI64:\r\n case BinaryOp.GtF32:\r\n case BinaryOp.GtF64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeI32:\r\n case BinaryOp.GeI64:\r\n case BinaryOp.GeF32:\r\n case BinaryOp.GeF64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI64: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI64: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.LtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.CopysignF32: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF32: {\r\n this.push(\"min(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF32: {\r\n this.push(\"max(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.CopysignF64: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF64: {\r\n this.push(\"min(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF64: {\r\n this.push(\"max(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n return;\r\n }\r\n case ExpressionId.Select: {\r\n this.push(\"select<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.decompileExpression(_BinaryenSelectGetIfTrue(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenSelectGetIfFalse(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenSelectGetCondition(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Drop: {\r\n this.decompileExpression(_BinaryenDropGetValue(expr));\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Return: {\r\n if (nested = _BinaryenReturnGetValue(expr)) {\r\n this.push(\"return \");\r\n this.decompileExpression(nested);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"return;\\n\");\r\n }\r\n return;\r\n }\r\n case ExpressionId.Host: {\r\n switch (_BinaryenHostGetOp(expr)) {\r\n case HostOp.CurrentMemory: {\r\n this.push(\"current_memory()\");\r\n return;\r\n }\r\n case HostOp.GrowMemory: {\r\n this.push(\"grow_memory(\");\r\n this.decompileExpression(_BinaryenHostGetOperand(expr, 0));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Nop: {\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Unreachable: {\r\n this.push(\"unreachable()\");\r\n return;\r\n }\r\n case ExpressionId.AtomicCmpxchg:\r\n case ExpressionId.AtomicRMW:\r\n case ExpressionId.AtomicWait:\r\n case ExpressionId.AtomicWake:\r\n }\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n private push(text: string): void {\r\n // mostly here so we can add debugging if necessary\r\n this.text.push(text);\r\n }\r\n\r\n finish(): string {\r\n var ret = this.text.join(\"\");\r\n this.text = [];\r\n return ret;\r\n }\r\n}\r\n\r\nfunction nativeTypeToType(type: NativeType): string {\r\n switch (type) {\r\n case NativeType.None: return \"void\";\r\n case NativeType.I32: return \"i32\";\r\n case NativeType.I64: return \"i64\";\r\n case NativeType.F32: return \"f32\";\r\n case NativeType.F64: return \"f64\";\r\n case NativeType.Unreachable: throw new Error(\"unreachable type\");\r\n case NativeType.Auto: throw new Error(\"auto type\");\r\n default: throw new Error(\"unexpected type\");\r\n }\r\n}\r\n","//////////////////////// 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 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 case \"NaN\": { // context-sensitive\r\n if (compiler.currentType == Type.f32) {\r\n return compiler.module.createF32(NaN);\r\n } else {\r\n compiler.currentType = Type.f64;\r\n return compiler.module.createF64(NaN);\r\n }\r\n }\r\n case \"Infinity\": { // context-sensitive\r\n if (compiler.currentType == Type.f32) {\r\n return compiler.module.createF32(Infinity);\r\n } else {\r\n compiler.currentType = Type.f64;\r\n return compiler.module.createF64(Infinity);\r\n }\r\n }\r\n case \"HEAP_BASE\": { // never inlined for linking purposes\r\n compiler.currentType = compiler.options.usizeType;\r\n return compiler.module.createGetGlobal(\"HEAP_BASE\", compiler.currentType.toNativeType());\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return compiler.module.createUnreachable();\r\n}\r\n\r\n/** Compiles a call to a built-in function. */\r\nexport function compileCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var module = compiler.module;\r\n\r\n var arg0: ExpressionRef,\r\n arg1: ExpressionRef,\r\n arg2: ExpressionRef,\r\n ret: ExpressionRef;\r\n\r\n 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 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 switch (compiler.currentType.kind) {\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 }\r\n compiler.currentType = Type.bool;\r\n return ret;\r\n }\r\n case \"clz\": { // clz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.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 }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ClzI64\r\n : UnaryOp.ClzI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.ClzI64, arg0);\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64:\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"ctz\": { // ctz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.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 }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.CtzI64\r\n : UnaryOp.CtzI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.CtzI64, arg0);\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64:\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"popcnt\": { // popcnt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.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 }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.PopcntI64\r\n : UnaryOp.PopcntI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.PopcntI64, arg0);\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64:\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"rotl\": { // rotl(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = makeSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotlI32, arg0, arg1),\r\n compiler.currentType,\r\n module\r\n );\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createBinary(BinaryOp.RotlI32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.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 }\r\n case TypeKind.ISIZE: {\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotlI64\r\n : BinaryOp.RotlI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createBinary(BinaryOp.RotlI64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"rotr\": { // rotr(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = makeSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotrI32, arg0, arg1),\r\n compiler.currentType,\r\n module\r\n );\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createBinary(BinaryOp.RotrI32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.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 }\r\n case TypeKind.ISIZE: {\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotrI64\r\n : BinaryOp.RotrI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createBinary(BinaryOp.RotrI64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"abs\": { // abs(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n // doesn't need sign-extension here because ifFalse below is either positive\r\n // or MIN_VALUE (-MIN_VALUE == MIN_VALUE) if selected\r\n case TypeKind.I32: {\r\n 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 }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.U64:\r\n case TypeKind.BOOL: {\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.AbsF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.AbsF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"max\": { // max(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n 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 }\r\n return ret;\r\n }\r\n case \"min\": { // min(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n 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 }\r\n return ret;\r\n }\r\n case \"ceil\": { // ceil(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.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 }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.CeilF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.CeilF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"floor\": { // floor(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.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 }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.FloorF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.FloorF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"copysign\": { // copysign(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n switch (compiler.currentType.kind) { // TODO: does an integer version make sense?\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.CopysignF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.CopysignF64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"nearest\": { // nearest(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.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 }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.NearestF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.NearestF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"reinterpret\": { // reinterpret(value: *) -> T\r\n if (operands.length != 1) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n switch (typeArguments[0].kind) {\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n arg0 = compiler.compileExpression(operands[0], Type.f32);\r\n ret = module.createUnary(UnaryOp.ReinterpretF32, arg0);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64);\r\n ret = module.createUnary(UnaryOp.ReinterpretF64, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (typeArguments[0].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 }\r\n case TypeKind.ISIZE: {\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.f64\r\n : Type.f32\r\n );\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ReinterpretF64\r\n : UnaryOp.ReinterpretF32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n arg0 = compiler.compileExpression(operands[0], Type.u32);\r\n ret = module.createUnary(UnaryOp.ReinterpretI32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n arg0 = compiler.compileExpression(operands[0], Type.u64);\r\n ret = module.createUnary(UnaryOp.ReinterpretI64, arg0);\r\n break;\r\n }\r\n default: { // small integers and void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n compiler.currentType = typeArguments[0];\r\n return ret;\r\n }\r\n case \"sqrt\": { // sqrt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) { // TODO: integer versions (that return f64 or convert)?\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.SqrtF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.SqrtF64, arg0);\r\n break;\r\n }\r\n // case TypeKind.VOID:\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"trunc\": { // trunc(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments && typeArguments.length) {\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.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 }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n // TODO: truncate to contextual type directly (if not void etc.)?\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.TruncF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.TruncF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n // memory access\r\n\r\n case \"load\": { // load(offset: usize, constantOffset?: usize) -> *\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType);\r\n 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\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 switch (compiler.currentType.kind) {\r\n default: { // any value type\r\n ret = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"unreachable\": { // unreachable() -> *\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n\r\n // host operations\r\n\r\n case \"current_memory\": { // current_memory() -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.CurrentMemory);\r\n }\r\n case \"grow_memory\": { // grow_memory(pages: i32) -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n arg0 = module.createUnreachable();\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32);\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.GrowMemory, null, [ arg0 ]);\r\n }\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n case \"move_memory\": { // move_memory(dest: usize, src: usize: n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType);\r\n arg1 = compiler.compileExpression(operands[1], compiler.options.usizeType);\r\n arg2 = compiler.compileExpression(operands[2], compiler.options.usizeType);\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.MoveMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n case \"set_memory\": { // set_memory(dest: usize, value: u32, n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType);\r\n arg1 = compiler.compileExpression(operands[1], Type.u32);\r\n arg2 = compiler.compileExpression(operands[2], compiler.options.usizeType);\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.SetMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n\r\n // other\r\n\r\n case \"changetype\": { // changetype(value: *) -> T\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n } else if (typeArguments[0].kind != TypeKind.USIZE) { // any usize\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.NONE\r\n );\r\n compiler.currentType = typeArguments[0];\r\n if (compiler.currentType.kind != TypeKind.USIZE) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // if (reportNode.range.source.sourceKind != SourceKind.STDLIB)\r\n // compiler.warning(DiagnosticCode.Operation_is_unsafe, reportNode.range);\r\n return arg0; // any usize to any usize\r\n }\r\n case \"assert\": { // assert(isTrueish: T, message?: string) -> T with T != null\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else if (operands.length > 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.i32);\r\n }\r\n\r\n type = compiler.currentType;\r\n compiler.currentType = type.nonNullableType;\r\n\r\n // just return ifTrueish if assertions are disabled, or simplify if dropped anyway\r\n if (compiler.options.noAssert) {\r\n if (contextualType == Type.void) {\r\n compiler.currentType = Type.void;\r\n return module.createNop();\r\n }\r\n return arg0;\r\n }\r\n\r\n let abort = compileAbort(compiler, operands.length == 2 ? operands[1] : null, reportNode);\r\n\r\n compiler.currentType = type.nonNullableType;\r\n\r\n if (contextualType == Type.void) { // simplify if dropped anyway\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n // TODO: also check for NaN in float assertions, as in `Boolean(NaN) -> false`?\r\n case TypeKind.F32: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n arg0,\r\n module.createF32(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n arg0,\r\n module.createF64(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n compiler.currentType = Type.void;\r\n } else {\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\r\n 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 }\r\n return ret;\r\n }\r\n\r\n // conversions\r\n\r\n case \"i8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.i8, ConversionKind.EXPLICIT);\r\n }\r\n case \"i16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.i16, ConversionKind.EXPLICIT);\r\n }\r\n case \"i32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.i32, ConversionKind.EXPLICIT);\r\n }\r\n case \"i64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.i64, ConversionKind.EXPLICIT);\r\n }\r\n case \"isize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32,\r\n ConversionKind.EXPLICIT\r\n );\r\n }\r\n case \"u8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.u8, ConversionKind.EXPLICIT);\r\n }\r\n case \"u16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.u16, ConversionKind.EXPLICIT);\r\n }\r\n case \"u32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.u32, ConversionKind.EXPLICIT);\r\n }\r\n case \"u64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.u64, ConversionKind.EXPLICIT);\r\n }\r\n case \"usize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.EXPLICIT\r\n );\r\n }\r\n case \"bool\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.bool;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.bool, ConversionKind.EXPLICIT);\r\n }\r\n case \"f32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.f32, ConversionKind.EXPLICIT);\r\n }\r\n case \"f64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.f64, ConversionKind.EXPLICIT);\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n}\r\n\r\nfunction evaluateConstantOffset(compiler: Compiler, expression: Expression): i32 {\r\n var expr: ExpressionRef;\r\n var value: i32;\r\n if (compiler.options.isWasm64) {\r\n expr = compiler.precomputeExpression(expression, Type.usize64);\r\n if (\r\n _BinaryenExpressionGetId(expr) != ExpressionId.Const ||\r\n _BinaryenExpressionGetType(expr) != NativeType.I64 ||\r\n _BinaryenConstGetValueI64High(expr) != 0 ||\r\n (value = _BinaryenConstGetValueI64Low(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n } else {\r\n expr = compiler.precomputeExpression(expression, Type.usize32);\r\n if (\r\n _BinaryenExpressionGetId(expr) != ExpressionId.Const ||\r\n _BinaryenExpressionGetType(expr) != NativeType.I32 ||\r\n (value = _BinaryenConstGetValueI32(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n }\r\n return value;\r\n}\r\n\r\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 = compiler.program;\r\n assert(cls.program == program);\r\n var module = compiler.module;\r\n var options = compiler.options;\r\n\r\n var prototype = program.elements.get(options.allocateImpl);\r\n if (!prototype) {\r\n program.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n reportNode.range, options.allocateImpl\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (prototype.kind != ElementKind.FUNCTION_PROTOTYPE) {\r\n program.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n reportNode.range, prototype.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n var instance = (prototype).resolve(); // reports\r\n if (!(instance && compiler.compileFunction(instance))) return module.createUnreachable();\r\n\r\n compiler.currentType = cls.type;\r\n return module.createCall(\r\n instance.internalName, [\r\n options.isWasm64\r\n ? module.createI64(cls.currentMemoryOffset)\r\n : module.createI32(cls.currentMemoryOffset)\r\n ],\r\n options.nativeSizeType\r\n );\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 program = compiler.program;\r\n var module = compiler.module;\r\n\r\n var stringType = program.types.get(\"string\"); // might be intended\r\n if (!stringType) return module.createUnreachable();\r\n\r\n var abortPrototype = program.elements.get(\"abort\"); // might be intended\r\n if (!abortPrototype || abortPrototype.kind != ElementKind.FUNCTION_PROTOTYPE) return module.createUnreachable();\r\n\r\n var abortInstance = (abortPrototype).resolve(); // reports\r\n if (!(abortInstance && compiler.compileFunction(abortInstance))) return module.createUnreachable();\r\n\r\n var messageArg = message != null\r\n ? compiler.compileExpression(message, stringType)\r\n : stringType.toNativeZero(module);\r\n\r\n var filenameArg = compiler.compileStaticString(reportNode.range.source.normalizedPath);\r\n\r\n compiler.currentType = Type.void;\r\n return module.createBlock(null, [\r\n module.createCallImport(\r\n abortInstance.internalName, [\r\n messageArg,\r\n filenameArg,\r\n module.createI32(reportNode.range.line),\r\n module.createI32(reportNode.range.column)\r\n ],\r\n NativeType.None\r\n ),\r\n module.createUnreachable()\r\n ]);\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__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","numNames","strs","_BinaryenSwitch","createCall","target","returnType","_BinaryenCall","createCallImport","_BinaryenCallImport","createCallIndirect","typeName","_BinaryenCallIndirect","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","k","segs","offs","sizs","Target","WASM64","i64_low","i64_high","cArr1","cArr2","cArr3","_BinaryenSetMemory","setFunctionTable","funcs","_BinaryenSetFunctionTable","setStart","func","_BinaryenSetStart","setOptimizeLevel","level","_BinaryenSetOptimizeLevel","setShrinkLevel","_BinaryenSetShrinkLevel","setDebugInfo","on","_BinaryenSetDebugInfo","optimize","_BinaryenFunctionOptimize","_BinaryenModuleOptimize","runPasses","passes","_BinaryenFunctionRunPasses","_BinaryenModuleRunPasses","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","numValues","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","TypeAlias","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","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","element","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","typeParameters","global_1","resolveSignature","node","contextualTypeArguments","reportNotFound","explicitThisType","thisType","resolveType","parameterTypeNodes","parameterTypes","numParameters","parameterNames","requiredParameters","hasRest","parameterTypeNode","parameterKind","ParameterKind","DEFAULT","REST","parameterType","returnTypeNode","signature","Signature","SIGNATURE","asFunction","typeNode","localName","resolveUsingTypeArguments","typeArguments","paramType","instanceKey","typesToString","placeholderType","resolveTypeArguments","typeArgumentNodes","alternativeReportNode","parameterCount","argumentCount","Expected_0_type_arguments_but_got_1","atEnd","contextualFunction","contextualEnum","ENUMVALUE","resolvedElement","ResolvedElement","flow","getScopedLocal","resolvePropertyAccess","propertyAccess","targetExpression","resolveExpression","targetType","LOCAL","FIELD","classType","Property_0_does_not_exist_on_type_1","CLASS","withTarget","base","resolveElementAccess","elementAccess","indexedGetName","indexedGet","FUNCTION_PROTOTYPE","Index_signature_is_missing_in_type_0","PARENTHESIZED","ASSERTION","toType","BINARY","THIS","instanceMethodOf","_this_cannot_be_referenced_in_current_location","SUPER","_super_can_only_be_referenced_in_a_derived_class","IDENTIFIER","PROPERTYACCESS","ELEMENTACCESS","CALL","functionTarget","cachedFunctionTarget","FunctionTarget","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","isInstance","inheritedTypeArguments","inheritedTypeArguments_1","inheritedTypeArguments_1_1","inheritedName","inheritedType","classTypeParameters","numClassTypeParameters","numFunctionTypeArguments","signatureNode","functionTypeParameters","classInstance","signatureParameters","signatureParameterCount","parameterDeclaration","Function","resolvePartial","partialPrototype","reportNode","resolvedTypeArguments","resolveBuiltinTypeArguments","resolvedType","FUNCTION","locals","additionalLocals","breakContext","debugLocations","functionTableIndex","trampoline","nextBreakId","breakStack","tempI32s","tempI64s","tempF32s","tempF64s","localIndex","_b","_c","parameterName","getParameterName","Flow","addLocal","local","getTempLocal","temps","toNativeType","pop","freeTempLocal","getAndFreeTempLocal","enterBreakContext","id","leaveBreakContext","finalize","debugLocation","debugInfoRef","debugInfoIndex","FUNCTION_TARGET","toSignatureString","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","isAssignableTo","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","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","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","state","reusableState","State","discard","reset","readIdentifier","quote","Unterminated_string_literal","readEscapeSequence","Unexpected_end_of_text","readExtendedUnicodeEscape","readUnicodeEscape","fromCharCode","readRegexpPattern","escaped","Unterminated_regular_expression_literal","readRegexpFlags","Invalid_regular_expression_flags","readInteger","readHexInteger","readBinaryInteger","readOctalInteger","isOctalDigit","Octal_literals_are_not_allowed_in_strict_mode","readDecimalInteger","i64_16","i64_add","i64_mul","Hexadecimal_digit_expected","i64_10","Digit_expected","i64_8","Octal_digit_expected","i64_2","i64_1","Binary_digit_expected","readFloat","parseFloat","remain","value32","invalid","An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive","Unterminated_Unicode_escape_sequence","finish","program_1","tokenizer_1","path_1","Node","createType","isNullable","TypeNode","setParent","createOmittedType","createIdentifierExpression","createTypeParameter","elem","TypeParameterNode","createParameter","ParameterNode","createSignature","parameters","sig","SignatureNode","createDecorator","args","stmt","DecoratorNode","createModifier","ModifierNode","IdentifierExpression","createEmptyIdentifierExpression","createArrayLiteralExpression","ArrayLiteralExpression","elementExpressions","nodes","setParentIfNotNull","createAssertionExpression","assertionKind","AssertionExpression","createBinaryExpression","operator","BinaryExpression","createCallExpression","typeArgs","CallExpression","createCommaExpression","expressions","CommaExpression","createConstructorExpression","ConstructorExpression","createElementAccessExpression","ElementAccessExpression","elementExpression","createFalseExpression","FalseExpression","createFloatLiteralExpression","FloatLiteralExpression","createFunctionExpression","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","BlockStatement","createBreakStatement","BreakStatement","createClassDeclaration","ClassDeclaration","createContinueStatement","ContinueStatement","createDoStatement","DoStatement","createEmptyStatement","EmptyStatement","createEnumDeclaration","EnumDeclaration","createEnumValueDeclaration","EnumValueDeclaration","createExportStatement","ExportStatement","normalize","startsWith","mangleInternalPath","createExportImportStatement","ExportImportStatement","createExportMember","ExportMember","createExpressionStatement","ExpressionStatement","createIfStatement","IfStatement","createImportStatement","decls","ImportStatement","createImportStatementWithWildcard","createImportDeclaration","ImportDeclaration","createInterfaceDeclaration","InterfaceDeclaration","createFieldDeclaration","FieldDeclaration","createForStatement","incrementor","ForStatement","createFunctionDeclaration","FunctionDeclaration","createMethodDeclaration","MethodDeclaration","createNamespaceDeclaration","NamespaceDeclaration","createReturnStatement","ReturnStatement","createSwitchStatement","cases","SwitchStatement","createSwitchCase","SwitchCase","createThrowStatement","ThrowStatement","createTryStatement","catchVariable","catchStatements","finallyStatements","TryStatement","createTypeDeclaration","TypeDeclaration","createVariableStatement","VariableStatement","createVariableDeclaration","VariableDeclaration","createVoidStatement","VoidStatement","createWhileStatement","WhileStatement","CommonTypeNode","TYPEPARAMETER","PARAMETER","DecoratorKind","DECORATOR","MODIFIER","Expression","LiteralKind","LiteralExpression","AssertionKind","FUNCTIONARROW","TERNARY","UnaryExpression","UNARYPOSTFIX","UNARYPREFIX","SourceKind","Statement","Source","tokenizer","sourceKind","ENTRY","LIBRARY","DeclarationStatement","cachedProgramLevelInternalName","cachedFileLevelInternalName","mangleInternalName","isTopLevelExport","needsExplicitExport","VariableLikeDeclarationStatement","BLOCK","EMPTY","ENUMVALUEDECLARATION","EXPORTIMPORT","EXPORTMEMBER","EXPRESSION","IMPORTDECLARATION","SWITCHCASE","VARIABLEDECLARATION","reusableModifiers","createModifiers","getModifier","getFirstDecorator","asGlobal","setReusableModifiers","addModifier","modifier","TypeKind","TypeFlags","size","nullableType","ceil","nonNullableType","computeSmallIntegerShift","computeSmallIntegerMask","asNullable","isReference","signednessIsImportant","currentClass","targetClass","targetFunction","commonCompatible","kindOnly","toNativeZero","toNativeOne","toNativeNegOne","isize32","isize64","usize32","usize64","typesToNativeTypes","numTypes","getGenericParameterName","thisThisType","targetThisType","thisParameterTypes","targetParameterTypes","thisParameterType","targetParameterType","includeThis","optionalStart","restIndex","cachedGenericParameterNames","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","funcRef","typeRef","ensureFunctionType","i64_align","isWasm64","pages","i64_shr_u","functionTableSize","entries","compileSourceByPath","normalizedPathWithoutExtension","File_0_not_found","compileClassDeclaration","compileEnumDeclaration","compileFunctionDeclaration","compileNamespaceDeclaration","variableInit","compileVariableStatement","compileExportStatement","previousFunction","compileStatement","compileGlobalDeclaration","compileGlobal","global","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","isTopLevel","compileEnum","previousValue","initInStart","valueDeclaration","AddI32","Cannot_export_a_mutable_global","compileFunctionUsingTypeArguments","compileFunction","resultType","An_implementation_cannot_be_declared_in_ambient_contexts","Function_implementation_is_missing_or_not_immediately_following_the_declaration","allBranchesReturn","A_function_whose_declared_type_is_not_void_must_return_a_value","compileInterfaceDeclaration","compileNamespace","ns","compileClassUsingTypeArguments","internalExportName","functionInstance","functionDeclaration","globalDeclaration","compileClass","addMemorySegment","alignment","ensureFunctionTableEntry","compileBlockStatement","compileBreakStatement","compileContinueStatement","compileDoStatement","compileEmptyStatement","compileExpressionStatement","compileForStatement","compileIfStatement","compileReturnStatement","compileSwitchStatement","compileThrowStatement","compileTryStatement","compileVoidStatement","compileWhileStatement","addDebugLocation","compileStatements","numStatements","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","ifTrueExpr","ifTrueReturns","ifFalseExpr","ifFalseReturns","tempLocal","tempLocalIndex","numCases","breaks","breakIndex","defaultIndex","EqI32","currentBlock","fallsThrough","nextLabel","isKnownGlobal","numDeclarations","initializers","init","_const_declarations_must_be_initialized","compileAssignmentWithValue","contextualType","retainType","shift","mask","conversionKind","wrapSmallIntegers","compileAssertionExpression","compileBinaryExpression","compileCallExpression","compileCommaExpression","compileElementAccessExpression","compileFunctionExpression","compileIdentifierExpression","compileLiteralExpression","compileNewExpression","compileParenthesizedExpression","compilePropertyAccessExpression","compileTernaryExpression","compileUnaryPostfixExpression","compileUnaryPrefixExpression","convertExpression","compileExpressionRetainType","precomputeExpression","_BinaryenFunctionGetBody","fromType","Conversion_from_type_0_to_1_requires_an_explicit_cast","PromoteF32","DemoteF64","TruncF32ToI64","TruncF32ToI32","makeSmallIntegerWrap","TruncF32ToU64","TruncF32ToU32","TruncF64ToI64","TruncF64ToI32","TruncF64ToU64","TruncF64ToU32","ConvertI64ToF32","ConvertU64ToF32","ConvertI32ToF32","ConvertU32ToF32","ConvertI64ToF64","ConvertU64ToF64","ConvertI32ToF64","ConvertU32ToF64","WrapI64","ExtendI32","ExtendU32","leftExpr","leftType","rightExpr","rightType","commonType","condExpr","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","Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property","resolvedIndexedSet","valueExpr","valueWithCorrectType","tee","isReadonly","isInstanceTarget","targetExpr","setterInstance","thisArg","makeCallDirect","getterInstance","nativeReturnType","setElementName","setElement","elementExpr","tempLocalTarget","tempLocalElement","Index_signature_in_type_0_only_permits_reading","indexArg","compileCall","compileCallDirect","Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures","compileCallIndirect","checkCallSignature","numArguments","hasThis","minimum","Expected_at_least_0_arguments_but_got_1","argumentExpressions","numArgumentsInclThis","ensureTrampoline","original","originalSignature","originalName","originalParameterTypes","originalParameterDeclarations","commonReturnType","commonThisType","minArguments","minOperands","maxArguments","maxOperands","numOptional","forwardedOperands","operandIndex","nativeSizeType","trampolineParameterTypes","trampolineSignature","trampolineName","numOperands","makeCallIndirect","numExpressions","exprs","retainConstantType","superType","localType","compileGetConstant","A_member_initializer_in_a_enum_declaration_cannot_reference_members_declared_after_it_including_members_defined_in_other_enums","implicitNegate","compileStaticArray","floatValue","intValue","i64_sub","i64_is_i8","i64_is_i16","i64_is_i32","i64_is_u8","i64_is_u16","i64_is_u32","i64_is_bool","i64_is_f32","i64_to_f32","i64_is_f64","i64_to_f64","compileStaticString","stringValue","stringSegment","stringLength","stringBuffer","stringOffset","stringType","isStatic","Int32Array","Float32Array","Float64Array","thisExpr","compileAllocate","field","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","tryParseSignatureIsSignature","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","isNullableSignature","tryParseSignature","Unexpected_token","innerType","Identifier_expected","nullable","parameter","bracketStart","bracketRange","isSignature","t","A_rest_parameter_cannot_be_optional","OPTIONAL","param","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","parseParameter","A_rest_parameter_must_be_last_in_a_parameter_list","A_required_parameter_cannot_follow_an_optional_parameter","isRest","isOptional","startRange","A_rest_parameter_cannot_have_an_initializer","Parameter_cannot_have_question_mark_and_initializer","signatureStart","isSetter","A_set_accessor_must_have_exactly_one_parameter","A_set_accessor_parameter_cannot_have_an_initializer","A_get_accessor_cannot_have_parameters","parseBlockStatement","parseFunctionExpression","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","case_","parseSwitchCase","_case_or_default_expected","parseExpressionStart","determinePrecedenceStart","The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access","again","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","abortPrototype","abortInstance","messageArg","filenameArg","NaN","Infinity","tempLocal0","tempLocal1","Type_0_is_not_generic","abort","cls","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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M,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KACxE,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,KAAM,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,KA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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 let 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 ): void {\r\n var message = DiagnosticMessage.create(code, category, arg0, arg1, arg2).withRange(range);\r\n this.diagnostics.push(message);\r\n // console.log(formatDiagnosticMessage(message, true, true) + \"\\n\"); // temporary\r\n // console.log(new Error(\"stack\").stack);\r\n }\r\n\r\n 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): MemorySegment {\r\n var segment = new MemorySegment();\r\n segment.buffer = buffer;\r\n segment.offset = offset;\r\n return segment;\r\n }\r\n}\r\n\r\nexport class Module {\r\n\r\n ref: ModuleRef;\r\n out: usize;\r\n\r\n 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 let module = new Module();\r\n module.ref = _BinaryenModuleRead(cArr, buffer.length);\r\n module.out = allocate_memory(3 * 8); // LLVM C-ABI, max used is 3 * usize\r\n return module;\r\n } finally {\r\n free_memory(changetype(cArr));\r\n }\r\n }\r\n\r\n private constructor() { }\r\n\r\n // types\r\n\r\n addFunctionType(\r\n name: string,\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenAddFunctionType(this.ref, cStr, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n getFunctionTypeBySignature(\r\n result: NativeType,\r\n paramTypes: NativeType[] | null\r\n ): FunctionTypeRef {\r\n var cArr = allocI32Array(paramTypes);\r\n try {\r\n return _BinaryenGetFunctionTypeBySignature(this.ref, result, cArr, paramTypes ? paramTypes.length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n // constants\r\n\r\n createI32(value: i32): ExpressionRef {\r\n var out = this.out;\r\n _BinaryenLiteralInt32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createI64(valueLow: i32, valueHigh: i32 = 0): ExpressionRef {\r\n var out = this.out;\r\n _BinaryenLiteralInt64(out, valueLow, valueHigh);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF32(value: f32): ExpressionRef {\r\n var out = this.out;\r\n _BinaryenLiteralFloat32(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n createF64(value: f64): ExpressionRef {\r\n var out = this.out;\r\n _BinaryenLiteralFloat64(out, value);\r\n return _BinaryenConst(this.ref, out);\r\n }\r\n\r\n // expressions\r\n\r\n createUnary(\r\n op: UnaryOp,\r\n expr: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenUnary(this.ref, op, expr);\r\n }\r\n\r\n createBinary(\r\n op: BinaryOp,\r\n left: ExpressionRef,\r\n right: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenBinary(this.ref, op, left, right);\r\n }\r\n\r\n createHost(\r\n op: HostOp,\r\n name: string | null = null,\r\n operands: ExpressionRef[] | null = null\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(operands);\r\n try {\r\n return _BinaryenHost(this.ref, op, cStr, cArr, operands ? (operands).length : 0);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createGetLocal(\r\n index: i32,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenGetLocal(this.ref, index, type);\r\n }\r\n\r\n createTeeLocal(\r\n index: i32,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenTeeLocal(this.ref, index, value);\r\n }\r\n\r\n createGetGlobal(\r\n name: string,\r\n type: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenGetGlobal(this.ref, cStr, type);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createLoad(\r\n bytes: Index,\r\n signed: bool,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenLoad(this.ref, bytes, signed ? 1 : 0, offset, /* always aligned */ bytes, type, ptr);\r\n }\r\n\r\n createStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenStore(this.ref, bytes, offset, /* always aligned */ bytes, ptr, value, type);\r\n }\r\n\r\n createAtomicLoad(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicLoad(this.ref, bytes, offset, type, ptr);\r\n }\r\n\r\n createAtomicStore(\r\n bytes: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType,\r\n offset: Index = 0\r\n ): ExpressionRef {\r\n return _BinaryenAtomicStore(this.ref, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicRMW(\r\n op: AtomicRMWOp,\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n value: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicRMW(this.ref, op, bytes, offset, ptr, value, type);\r\n }\r\n\r\n createAtomicCmpxchg(\r\n bytes: Index,\r\n offset: Index,\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n replacement: ExpressionRef,\r\n type: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicCmpxchg(this.ref, bytes, offset, ptr, expected, replacement, type);\r\n }\r\n\r\n createAtomicWait(\r\n ptr: ExpressionRef,\r\n expected: ExpressionRef,\r\n timeout: ExpressionRef,\r\n expectedType: NativeType\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWait(this.ref, ptr, expected, timeout, expectedType);\r\n }\r\n\r\n createAtomicWake(\r\n ptr: ExpressionRef,\r\n wakeCount: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenAtomicWake(this.ref, ptr, wakeCount);\r\n }\r\n\r\n // statements\r\n\r\n createSetLocal(\r\n index: Index,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSetLocal(this.ref, index, value);\r\n }\r\n\r\n createSetGlobal(\r\n name: string,\r\n value: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenSetGlobal(this.ref, cStr, value);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createBlock(\r\n label: string | null,\r\n children: ExpressionRef[],\r\n type: NativeType = NativeType.None\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n var cArr = allocI32Array(children);\r\n try {\r\n return _BinaryenBlock(this.ref, cStr, cArr, children.length, type);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createBreak(\r\n label: string | null,\r\n condition: ExpressionRef = 0,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenBreak(this.ref, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createDrop(\r\n expression: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenDrop(this.ref, expression);\r\n }\r\n\r\n createLoop(\r\n label: string | null,\r\n body: ExpressionRef\r\n ): ExpressionRef {\r\n var cStr = allocString(label);\r\n try {\r\n return _BinaryenLoop(this.ref, cStr, body);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createIf(\r\n condition: ExpressionRef,\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenIf(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createNop(): ExpressionRef {\r\n return _BinaryenNop(this.ref);\r\n }\r\n\r\n createReturn(\r\n expression: ExpressionRef = 0\r\n ): ExpressionRef {\r\n return _BinaryenReturn(this.ref, expression);\r\n }\r\n\r\n createSelect(\r\n ifTrue: ExpressionRef,\r\n ifFalse: ExpressionRef,\r\n condition: ExpressionRef\r\n ): ExpressionRef {\r\n return _BinaryenSelect(this.ref, condition, ifTrue, ifFalse);\r\n }\r\n\r\n createSwitch(\r\n names: string[],\r\n defaultName: string | null,\r\n condition: ExpressionRef,\r\n value: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numNames = names.length;\r\n var strs = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n strs[i] = allocString(names[i]);\r\n }\r\n var cArr = allocI32Array(strs);\r\n var cStr = allocString(defaultName);\r\n try {\r\n return _BinaryenSwitch(this.ref, cArr, numNames, cStr, condition, value);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n for (let i = numNames - 1; i >= 0; --i) free_memory(strs[i]);\r\n }\r\n }\r\n\r\n createCall(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocI32Array(operands);\r\n try {\r\n return _BinaryenCall(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createCallImport(\r\n target: string,\r\n operands: ExpressionRef[] | null,\r\n returnType: NativeType\r\n ): ExpressionRef {\r\n var cStr = allocString(target);\r\n var cArr = allocI32Array(operands);\r\n try {\r\n return _BinaryenCallImport(this.ref, cStr, cArr, operands && operands.length || 0, returnType);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n createCallIndirect(\r\n index: ExpressionRef,\r\n operands: ExpressionRef[] | null,\r\n typeName: string\r\n ): ExpressionRef {\r\n var cArr = allocI32Array(operands);\r\n var cStr = allocString(typeName);\r\n try {\r\n return _BinaryenCallIndirect(this.ref, index, cArr, operands && operands.length || 0, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n createUnreachable(): ExpressionRef {\r\n return _BinaryenUnreachable(this.ref);\r\n }\r\n\r\n // meta\r\n\r\n addGlobal(\r\n name: string,\r\n type: NativeType,\r\n mutable: bool,\r\n initializer: ExpressionRef\r\n ): GlobalRef {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenAddGlobal(this.ref, cStr, type, mutable ? 1 : 0, initializer);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunction(\r\n name: string,\r\n type: FunctionTypeRef,\r\n varTypes: NativeType[] | null,\r\n body: ExpressionRef\r\n ): FunctionRef {\r\n var cStr = allocString(name);\r\n var cArr = allocI32Array(varTypes);\r\n try {\r\n return _BinaryenAddFunction(this.ref, cStr, type, cArr, varTypes ? varTypes.length : 0, body);\r\n } finally {\r\n free_memory(cArr);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n removeFunction(name: string): void {\r\n var cStr = allocString(name);\r\n try {\r\n _BinaryenRemoveFunction(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunctionExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddFunctionExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addTableExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddTableExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addMemoryExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddMemoryExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addGlobalExport(\r\n internalName: string,\r\n externalName: string\r\n ): ExportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalName);\r\n try {\r\n return _BinaryenAddGlobalExport(this.ref, cStr1, cStr2);\r\n } finally {\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n removeExport(externalName: string): void {\r\n var cStr = allocString(externalName);\r\n try {\r\n _BinaryenRemoveExport(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n addFunctionImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n functionType: FunctionTypeRef\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddFunctionImport(this.ref, cStr1, cStr2, cStr3, functionType);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addTableImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddTableImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addMemoryImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddMemoryImport(this.ref, cStr1, cStr2, cStr3);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n addGlobalImport(\r\n internalName: string,\r\n externalModuleName: string,\r\n externalBaseName: string,\r\n globalType: NativeType\r\n ): ImportRef {\r\n var cStr1 = allocString(internalName);\r\n var cStr2 = allocString(externalModuleName);\r\n var cStr3 = allocString(externalBaseName);\r\n try {\r\n return _BinaryenAddGlobalImport(this.ref, cStr1, cStr2, cStr3, globalType);\r\n } finally {\r\n free_memory(cStr3);\r\n free_memory(cStr2);\r\n free_memory(cStr1);\r\n }\r\n }\r\n\r\n removeImport(internalName: string): void {\r\n var cStr = allocString(internalName);\r\n try {\r\n _BinaryenRemoveImport(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n setMemory(\r\n initial: Index,\r\n maximum: Index,\r\n segments: MemorySegment[],\r\n target: Target,\r\n exportName: string | null = null\r\n ): void {\r\n var cStr = allocString(exportName);\r\n var k = segments.length;\r\n var segs = new Array(k);\r\n var offs = new Array(k);\r\n var sizs = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let buffer = segments[i].buffer;\r\n let offset = segments[i].offset;\r\n segs[i] = allocU8Array(buffer);\r\n offs[i] = target == Target.WASM64\r\n ? this.createI64(i64_low(offset), i64_high(offset))\r\n : this.createI32(i64_low(offset));\r\n sizs[i] = buffer.length;\r\n }\r\n var cArr1 = allocI32Array(segs);\r\n var cArr2 = allocI32Array(offs);\r\n var cArr3 = allocI32Array(sizs);\r\n try {\r\n _BinaryenSetMemory(this.ref, initial, maximum, cStr, cArr1, cArr2, cArr3, k);\r\n } finally {\r\n free_memory(cArr3);\r\n free_memory(cArr2);\r\n free_memory(cArr1);\r\n for (let i = k - 1; i >= 0; --i) free_memory(segs[i]);\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n setFunctionTable(funcs: FunctionRef[]): void {\r\n var cArr = allocI32Array(funcs);\r\n try {\r\n _BinaryenSetFunctionTable(this.ref, cArr, funcs.length);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n setStart(func: FunctionRef): void {\r\n _BinaryenSetStart(this.ref, func);\r\n }\r\n\r\n setOptimizeLevel(level: i32 = 2): void {\r\n _BinaryenSetOptimizeLevel(level);\r\n }\r\n\r\n setShrinkLevel(level: i32 = 1): void {\r\n _BinaryenSetShrinkLevel(level);\r\n }\r\n\r\n setDebugInfo(on: bool = false): void {\r\n _BinaryenSetDebugInfo(on);\r\n }\r\n\r\n optimize(func: FunctionRef = 0): void {\r\n if (func) {\r\n _BinaryenFunctionOptimize(func, this.ref);\r\n } else {\r\n _BinaryenModuleOptimize(this.ref);\r\n }\r\n }\r\n\r\n runPasses(passes: string[], func: FunctionRef = 0): void {\r\n var numNames = passes.length;\r\n var names = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n names[i] = allocString(passes[i]);\r\n }\r\n var cArr = allocI32Array(names);\r\n try {\r\n if (func) {\r\n _BinaryenFunctionRunPasses(func, this.ref, cArr, numNames);\r\n } else {\r\n _BinaryenModuleRunPasses(this.ref, cArr, numNames);\r\n }\r\n } finally {\r\n free_memory(cArr);\r\n for (let i = numNames; i >= 0; --i) {\r\n free_memory(names[i]);\r\n }\r\n }\r\n }\r\n\r\n validate(): bool {\r\n return _BinaryenModuleValidate(this.ref) == 1;\r\n }\r\n\r\n interpret(): void {\r\n _BinaryenModuleInterpret(this.ref);\r\n }\r\n\r\n toBinary(sourceMapUrl: string | null): 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 let binaryBytes = readInt(out + 4);\r\n sourceMapPtr = readInt(out + 4 * 2);\r\n let 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 case ExpressionId.Const: {\r\n switch (_BinaryenExpressionGetType(expr)) {\r\n case NativeType.I32: {\r\n return this.createI32(_BinaryenConstGetValueI32(expr));\r\n }\r\n case NativeType.I64: {\r\n return this.createI64(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n }\r\n case NativeType.F32: {\r\n return this.createF32(_BinaryenConstGetValueF32(expr));\r\n }\r\n case NativeType.F64: {\r\n return this.createF64(_BinaryenConstGetValueF64(expr));\r\n }\r\n default: {\r\n throw new Error(\"concrete type expected\");\r\n }\r\n }\r\n }\r\n case ExpressionId.GetLocal: {\r\n return _BinaryenGetLocal(this.ref,\r\n _BinaryenGetLocalGetIndex(expr),\r\n _BinaryenExpressionGetType(expr)\r\n );\r\n }\r\n case ExpressionId.GetGlobal: {\r\n let globalName = _BinaryenGetGlobalGetName(expr);\r\n if (!globalName) break;\r\n return _BinaryenGetGlobal(this.ref, globalName, _BinaryenExpressionGetType(expr));\r\n }\r\n case ExpressionId.Load: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenLoadGetPtr(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenLoadIsAtomic(expr)\r\n ? _BinaryenAtomicLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n )\r\n : _BinaryenLoad(this.ref,\r\n _BinaryenLoadGetBytes(expr),\r\n _BinaryenLoadIsSigned(expr) ? 1 : 0,\r\n _BinaryenLoadGetOffset(expr),\r\n _BinaryenLoadGetAlign(expr),\r\n _BinaryenExpressionGetType(expr),\r\n nested1\r\n );\r\n }\r\n case ExpressionId.Unary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenUnaryGetValue(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenUnary(this.ref, _BinaryenUnaryGetOp(expr), nested1);\r\n }\r\n case ExpressionId.Binary: {\r\n if (!(nested1 = this.cloneExpression(_BinaryenBinaryGetLeft(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n if (!(nested2 = this.cloneExpression(_BinaryenBinaryGetRight(expr), noSideEffects, maxDepth))) {\r\n break;\r\n }\r\n return _BinaryenBinary(this.ref, _BinaryenBinaryGetOp(expr), nested1, nested2);\r\n }\r\n }\r\n return 0;\r\n }\r\n\r\n // source map generation\r\n\r\n addDebugInfoFile(name: string): Index {\r\n var cStr = allocString(name);\r\n try {\r\n return _BinaryenModuleAddDebugInfoFileName(this.ref, cStr);\r\n } finally {\r\n free_memory(cStr);\r\n }\r\n }\r\n\r\n getDebugInfoFile(index: Index): string | null {\r\n return readString(_BinaryenModuleGetDebugInfoFileName(this.ref, index));\r\n }\r\n\r\n setDebugLocation(\r\n func: FunctionRef,\r\n expr: ExpressionRef,\r\n fileIndex: Index,\r\n lineNumber: Index,\r\n columnNumber: Index\r\n ): void {\r\n _BinaryenFunctionSetDebugLocation(func, expr, fileIndex, lineNumber, columnNumber);\r\n }\r\n}\r\n\r\nexport class Relooper {\r\n\r\n module: Module;\r\n ref: RelooperRef;\r\n\r\n static create(module: Module): Relooper {\r\n var relooper = new Relooper();\r\n relooper.module = module;\r\n relooper.ref = _RelooperCreate();\r\n return relooper;\r\n }\r\n\r\n static createStub(module: Module): Relooper {\r\n var relooper = new Relooper();\r\n relooper.module = module;\r\n relooper.ref = 0;\r\n return relooper;\r\n }\r\n\r\n private constructor() {}\r\n\r\n addBlock(code: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlock(this.ref, code);\r\n }\r\n\r\n addBranch(from: RelooperBlockRef, to: RelooperBlockRef, condition: ExpressionRef = 0, code: ExpressionRef = 0): void {\r\n _RelooperAddBranch(from, to, condition, code);\r\n }\r\n\r\n addBlockWithSwitch(code: ExpressionRef, condition: ExpressionRef): RelooperBlockRef {\r\n return _RelooperAddBlockWithSwitch(this.ref, code, condition);\r\n }\r\n\r\n addBranchForSwitch(from: RelooperBlockRef, to: RelooperBlockRef, indexes: i32[], code: ExpressionRef = 0): void {\r\n var cArr = allocI32Array(indexes);\r\n try {\r\n _RelooperAddBranchForSwitch(from, to, cArr, indexes.length, code);\r\n } finally {\r\n free_memory(cArr);\r\n }\r\n }\r\n\r\n renderAndDispose(entry: RelooperBlockRef, labelHelper: Index): ExpressionRef {\r\n return _RelooperRenderAndDispose(this.ref, entry, labelHelper, this.module.ref);\r\n }\r\n}\r\n\r\n// helpers\r\n// can't do stack allocation here: STACKTOP is a global in WASM but a hidden variable in asm.js\r\n\r\nfunction allocU8Array(u8s: Uint8Array | null): usize {\r\n if (!u8s) return 0;\r\n var numValues = u8s.length;\r\n var ptr = allocate_memory(numValues);\r\n var idx = ptr;\r\n for (let i = 0; i < numValues; ++i) {\r\n store(idx++, u8s[i]);\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction allocI32Array(i32s: i32[] | null): usize {\r\n if (!i32s) return 0;\r\n var ptr = allocate_memory(i32s.length << 2);\r\n var idx = ptr;\r\n for (let i = 0, k = i32s.length; i < k; ++i) {\r\n let val = i32s[i];\r\n // store(idx, val) is not portable\r\n store(idx , ( val & 0xff) as u8);\r\n store(idx + 1, ((val >> 8) & 0xff) as u8);\r\n store(idx + 2, ((val >> 16) & 0xff) as u8);\r\n store(idx + 3, ( val >>> 24 ) as u8);\r\n idx += 4;\r\n }\r\n return ptr;\r\n}\r\n\r\nfunction stringLengthUTF8(str: string): usize {\r\n var len = 0;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n ++len;\r\n } else if (u <= 0x7FF) {\r\n len += 2;\r\n } else if (u <= 0xFFFF) {\r\n len += 3;\r\n } else if (u <= 0x1FFFFF) {\r\n len += 4;\r\n } else if (u <= 0x3FFFFFF) {\r\n len += 5;\r\n } else {\r\n len += 6;\r\n }\r\n }\r\n return len;\r\n}\r\n\r\nfunction allocString(str: string | null): usize {\r\n if (str == null) return 0;\r\n var ptr = allocate_memory(stringLengthUTF8(str) + 1);\r\n var idx = ptr;\r\n for (let i = 0, k = str.length; i < k; ++i) {\r\n let u = str.charCodeAt(i);\r\n if (u >= 0xD800 && u <= 0xDFFF && i + 1 < k) {\r\n u = 0x10000 + ((u & 0x3FF) << 10) | (str.charCodeAt(++i) & 0x3FF);\r\n }\r\n if (u <= 0x7F) {\r\n store(idx++, u as u8);\r\n } else if (u <= 0x7FF) {\r\n store(idx++, (0xC0 | (u >>> 6) ) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0xFFFF) {\r\n store(idx++, (0xE0 | (u >>> 12) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x1FFFFF) {\r\n store(idx++, (0xF0 | (u >>> 18) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else if (u <= 0x3FFFFFF) {\r\n store(idx++, (0xF8 | (u >>> 24) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n } else {\r\n store(idx++, (0xFC | (u >>> 30) ) as u8);\r\n store(idx++, (0x80 | ((u >>> 24) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 18) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 12) & 63)) as u8);\r\n store(idx++, (0x80 | ((u >>> 6) & 63)) as u8);\r\n store(idx++, (0x80 | ( u & 63)) as u8);\r\n }\r\n }\r\n store(idx, 0);\r\n return ptr;\r\n}\r\n\r\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 (let i: usize = 0; i < length; ++i) {\r\n ret[i] = load(ptr + i);\r\n }\r\n return ret;\r\n}\r\n\r\nexport function readString(ptr: usize): string | null {\r\n if (!ptr) return null;\r\n var arr = new Array();\r\n // the following is based on Emscripten's UTF8ArrayToString\r\n var cp: u32;\r\n var u1: u32, u2: u32, u3: u32, u4: u32, u5: u32;\r\n while (cp = load(ptr++)) {\r\n if (!(cp & 0x80)) {\r\n arr.push(cp);\r\n continue;\r\n }\r\n u1 = load(ptr++) & 63;\r\n if ((cp & 0xE0) == 0xC0) {\r\n arr.push(((cp & 31) << 6) | u1);\r\n continue;\r\n }\r\n u2 = load(ptr++) & 63;\r\n if ((cp & 0xF0) == 0xE0) {\r\n cp = ((cp & 15) << 12) | (u1 << 6) | u2;\r\n } else {\r\n u3 = load(ptr++) & 63;\r\n if ((cp & 0xF8) == 0xF0) {\r\n cp = ((cp & 7) << 18) | (u1 << 12) | (u2 << 6) | u3;\r\n } else {\r\n u4 = load(ptr++) & 63;\r\n if ((cp & 0xFC) == 0xF8) {\r\n cp = ((cp & 3) << 24) | (u1 << 18) | (u2 << 12) | (u3 << 6) | u4;\r\n } else {\r\n u5 = load(ptr++) & 63;\r\n cp = ((cp & 1) << 30) | (u1 << 24) | (u2 << 18) | (u3 << 12) | (u4 << 6) | u5;\r\n }\r\n }\r\n }\r\n // if (cp < 0x10000) {\r\n // arr.push(cp);\r\n // } else {\r\n // var ch = cp - 0x10000;\r\n // arr.push(0xD800 | (ch >> 10));\r\n // arr.push(0xDC00 | (ch & 0x3FF));\r\n // }\r\n }\r\n // return String.fromCharCodes(arr);\r\n return String.fromCodePoints(arr);\r\n}\r\n\r\n/** Result structure of {@link Module#toBinary}. */\r\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 Signature,\r\n\r\n typesToString\r\n} from \"./types\";\r\n\r\nimport {\r\n Node,\r\n NodeKind,\r\n Source,\r\n Range,\r\n CommonTypeNode,\r\n TypeNode,\r\n TypeParameterNode,\r\n // ParameterNode,\r\n // ParameterKind,\r\n // SignatureNode,\r\n DecoratorNode,\r\n DecoratorKind,\r\n ModifierKind,\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 ParameterKind,\r\n SignatureNode\r\n} from \"./ast\";\r\n\r\nimport {\r\n Module,\r\n NativeType,\r\n FunctionRef,\r\n} from \"./module\";\r\n\r\n/** Path delimiter inserted between file system levels. */\r\nexport const PATH_DELIMITER = \"/\";\r\n/** Substitution used to indicate the parent directory. */\r\nexport const PARENT_SUBST = \"..\";\r\n/** Function name prefix used for getters. */\r\nexport const GETTER_PREFIX = \"get:\";\r\n/** Function name prefix used for setters. */\r\nexport const SETTER_PREFIX = \"set:\";\r\n/** Delimiter used between class names and instance members. */\r\nexport const INSTANCE_DELIMITER = \"#\";\r\n/** Delimiter used between class and namespace names and static members. */\r\nexport const STATIC_DELIMITER = \".\";\r\n/** Substitution used to indicate a library directory. */\r\nexport const LIBRARY_SUBST = \"(lib)\";\r\n/** Library directory prefix. */\r\nexport const LIBRARY_PREFIX = LIBRARY_SUBST + PATH_DELIMITER;\r\n\r\n/** Represents a yet unresolved export. */\r\nclass QueuedExport {\r\n isReExport: bool;\r\n referencedName: string;\r\n member: ExportMember;\r\n}\r\n\r\n/** Represents a yet unresolved import. */\r\nclass QueuedImport {\r\n internalName: string;\r\n referencedName: string;\r\n referencedNameAlt: string;\r\n declaration: ImportDeclaration;\r\n}\r\n\r\n/** Represents a type alias. */\r\nclass TypeAlias {\r\n typeParameters: TypeParameterNode[] | null;\r\n type: CommonTypeNode;\r\n}\r\n\r\nconst noTypesYet = new Map();\r\n\r\n/** Represents an AssemblyScript program. */\r\nexport class Program extends DiagnosticEmitter {\r\n\r\n /** Array of source files. */\r\n sources: Source[];\r\n /** Diagnostic offset used where repeatedly obtaining the next diagnostic. */\r\n diagnosticsOffset: i32 = 0;\r\n /** Compiler options. */\r\n options: Options;\r\n /** Elements by internal name. */\r\n 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 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 (let i = 0, k = this.sources.length; i < k; ++i) {\r\n let source = this.sources[i];\r\n let statements = source.statements;\r\n for (let j = 0, l = statements.length; j < l; ++j) {\r\n let statement = statements[j];\r\n switch (statement.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n this.initializeClass(statement, queuedDerivedClasses);\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n this.initializeEnum(statement);\r\n break;\r\n }\r\n case NodeKind.EXPORT: {\r\n this.initializeExports(statement, queuedExports);\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n this.initializeFunction(statement);\r\n break;\r\n }\r\n case NodeKind.IMPORT: {\r\n this.initializeImports(statement, queuedExports, queuedImports);\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n this.initializeInterface(statement);\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n this.initializeNamespace(statement, queuedDerivedClasses);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n this.initializeTypeAlias(statement);\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n this.initializeVariables(statement);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // queued imports should be resolvable now through traversing exports and queued exports\r\n for (let i = 0; i < queuedImports.length;) {\r\n let queuedImport = queuedImports[i];\r\n let element = this.tryResolveImport(queuedImport.referencedName, queuedExports);\r\n if (element) {\r\n this.elements.set(queuedImport.internalName, element);\r\n queuedImports.splice(i, 1);\r\n } else {\r\n if (element = this.tryResolveImport(queuedImport.referencedNameAlt, queuedExports)) {\r\n this.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 (let [exportName, queuedExport] of queuedExports) {\r\n let currentExport: QueuedExport | null = queuedExport; // nullable below\r\n let element: Element | null;\r\n do {\r\n if (currentExport.isReExport) {\r\n if (element = this.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 ((queuedExport.member.parent).path).value,\r\n queuedExport.member.externalName.text\r\n );\r\n }\r\n } else {\r\n if (\r\n // normal export\r\n (element = this.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 (let i = 0, k = queuedDerivedClasses.length; i < k; ++i) {\r\n let derivedDeclaration = queuedDerivedClasses[i].declaration;\r\n let derivedType = assert(derivedDeclaration.extendsType);\r\n let resolved = this.resolveIdentifier(derivedType.name, null);\r\n if (resolved) {\r\n if (resolved.element.kind != ElementKind.CLASS_PROTOTYPE) {\r\n this.error(\r\n DiagnosticCode.A_class_may_only_extend_another_class,\r\n derivedType.range\r\n );\r\n continue;\r\n }\r\n queuedDerivedClasses[i].basePrototype = (\r\n resolved.element\r\n );\r\n }\r\n }\r\n }\r\n\r\n /** Tries to resolve an import by traversing exports and queued exports. */\r\n private tryResolveImport(\r\n referencedName: string,\r\n queuedExports: Map\r\n ): Element | null {\r\n var element: Element | null;\r\n do {\r\n if (element = this.exports.get(referencedName)) return element;\r\n let queuedExport = queuedExports.get(referencedName);\r\n if (!queuedExport) return null;\r\n if (queuedExport.isReExport) {\r\n referencedName = queuedExport.referencedName;\r\n continue;\r\n }\r\n return this.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) element.set(ElementFlags.BUILTIN);\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].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 (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n case NodeKind.FIELDDECLARATION: {\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n }\r\n case NodeKind.METHODDECLARATION: {\r\n let 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\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 let instance = prototype.resolve(null);\r\n if (instance) this.types.set(\"string\", instance.type);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, declaration.programLevelInternalName\r\n );\r\n }\r\n }\r\n }\r\n\r\n private initializeField(\r\n declaration: FieldDeclaration,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n var name = declaration.name.text;\r\n var internalName = declaration.fileLevelInternalName;\r\n\r\n // static fields become global variables\r\n if (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 let 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 let 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: DecoratorNode[] | null,\r\n prototype: FunctionPrototype,\r\n classPrototype: ClassPrototype\r\n ): void {\r\n // handle operator annotations. operators are either instance methods taking\r\n // a second argument of the instance's type or static methods taking two\r\n // arguments of the instance's type. return values vary depending on the\r\n // operation.\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n if (decorator.decoratorKind == DecoratorKind.OPERATOR) {\r\n if (!prototype) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n decorator.range\r\n );\r\n continue;\r\n }\r\n let numArgs = decorator.arguments && decorator.arguments.length || 0;\r\n if (numArgs == 1) {\r\n let firstArg = (decorator.arguments)[0];\r\n if (\r\n firstArg.kind == NodeKind.LITERAL &&\r\n (firstArg).literalKind == LiteralKind.STRING\r\n ) {\r\n switch ((firstArg).value) {\r\n case \"[]\": {\r\n classPrototype.fnIndexedGet = prototype.simpleName;\r\n break;\r\n }\r\n case \"[]=\": {\r\n classPrototype.fnIndexedSet = prototype.simpleName;\r\n break;\r\n }\r\n case \"+\": {\r\n classPrototype.fnConcat = prototype.simpleName;\r\n break;\r\n }\r\n case \"==\": {\r\n classPrototype.fnEquals = prototype.simpleName;\r\n break;\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n firstArg.range\r\n );\r\n }\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n firstArg.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n decorator.range, \"1\", numArgs.toString(0)\r\n );\r\n }\r\n } else if (decorator.decoratorKind != DecoratorKind.CUSTOM) {\r\n // methods support built-in @operator only\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n decorator.range\r\n );\r\n }\r\n }\r\n }\r\n }\r\n\r\n private initializeAccessor(\r\n declaration: MethodDeclaration,\r\n classPrototype: ClassPrototype,\r\n 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 let 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 let 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 let 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 let 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 (let 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 (let i = 0, k = members.length; i < k; ++i) {\r\n this.initializeExport(members[i], statement.internalPath, queuedExports);\r\n }\r\n }\r\n\r\n private setExportAndCheckLibrary(\r\n name: string,\r\n element: Element,\r\n identifier: IdentifierExpression\r\n ): void {\r\n this.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 let 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 (let i = 0, k = declarations.length; i < k; ++i) {\r\n this.initializeImport(\r\n declarations[i],\r\n statement.internalPath,\r\n queuedExports, queuedImports\r\n );\r\n }\r\n } else if (statement.namespaceName) {\r\n let internalName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n statement.namespaceName.text\r\n );\r\n if (this.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 (let i = 0, k = memberDeclarations.length; i < k; ++i) {\r\n let memberDeclaration = memberDeclarations[i];\r\n switch (memberDeclaration.kind) {\r\n\r\n case NodeKind.FIELDDECLARATION: {\r\n this.initializeField(memberDeclaration, prototype);\r\n break;\r\n }\r\n case NodeKind.METHODDECLARATION: {\r\n let 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\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 (let i = 0, k = members.length; i < k; ++i) {\r\n switch (members[i].kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n this.initializeClass(members[i], queuedExtendingClasses, namespace);\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n this.initializeEnum(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.FUNCTIONDECLARATION: {\r\n this.initializeFunction(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n this.initializeInterface(members[i], namespace);\r\n break;\r\n }\r\n case NodeKind.NAMESPACEDECLARATION: {\r\n this.initializeNamespace(members[i], queuedExtendingClasses, namespace);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n // this.initializeTypeAlias(members[i], namespace);\r\n // TODO: what about namespaced types?\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n members[i].range\r\n );\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n this.initializeVariables(members[i], namespace);\r\n break;\r\n }\r\n default: {\r\n throw new Error(\"namespace member expected\");\r\n }\r\n }\r\n }\r\n }\r\n\r\n private initializeTypeAlias(declaration: TypeDeclaration, namespace: Element | null = null): void {\r\n // type aliases are program globals\r\n // TODO: what about namespaced types?\r\n var name = declaration.name.text;\r\n if (this.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 var alias = new TypeAlias();\r\n alias.typeParameters = declaration.typeParameters;\r\n alias.type = declaration.type;\r\n this.typeAliases.set(name, alias);\r\n }\r\n\r\n private initializeVariables(statement: VariableStatement, namespace: Element | null = null): void {\r\n var declarations = statement.declarations;\r\n for (let i = 0, k = declarations.length; i < k; ++i) {\r\n let declaration = declarations[i];\r\n let internalName = declaration.fileLevelInternalName;\r\n if (this.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 let 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 SignatureNode} to a concrete {@link Signature}. */\r\n resolveSignature(\r\n node: SignatureNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportNotFound: bool = true\r\n ): Signature | null {\r\n var explicitThisType = node.explicitThisType;\r\n var thisType: Type | null = null;\r\n if (explicitThisType) {\r\n thisType = this.resolveType(\r\n explicitThisType,\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!thisType) return null;\r\n }\r\n var parameterTypeNodes = node.parameterTypes;\r\n var numParameters = parameterTypeNodes.length;\r\n var parameterTypes = new Array(numParameters);\r\n var parameterNames = new Array(numParameters);\r\n var requiredParameters = 0;\r\n var hasRest = false;\r\n for (let i = 0; i < numParameters; ++i) {\r\n let parameterTypeNode = parameterTypeNodes[i];\r\n switch (parameterTypeNode.parameterKind) {\r\n case ParameterKind.DEFAULT: {\r\n requiredParameters = i + 1;\r\n break;\r\n }\r\n case ParameterKind.REST: {\r\n assert(i == numParameters);\r\n hasRest = true;\r\n break;\r\n }\r\n }\r\n let parameterType = this.resolveType(\r\n assert(parameterTypeNode.type),\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!parameterType) return null;\r\n parameterTypes[i] = parameterType;\r\n parameterNames[i] = parameterTypeNode.name.text;\r\n }\r\n var returnTypeNode = node.returnType;\r\n var returnType: Type | null;\r\n if (returnTypeNode) {\r\n returnType = this.resolveType(\r\n returnTypeNode,\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Type.void;\r\n }\r\n var signature = new Signature(parameterTypes, returnType, thisType);\r\n signature.parameterNames = parameterNames;\r\n signature.requiredParameters = requiredParameters;\r\n signature.hasRest = hasRest;\r\n return signature;\r\n }\r\n\r\n /** Resolves a {@link CommonTypeNode} to a concrete {@link Type}. */\r\n resolveType(\r\n node: CommonTypeNode,\r\n contextualTypeArguments: Map | null = null,\r\n reportNotFound: bool = true\r\n ): Type | null {\r\n if (node.kind == NodeKind.SIGNATURE) {\r\n let signature = this.resolveSignature(node, contextualTypeArguments, reportNotFound);\r\n if (!signature) return null;\r\n return Type.u32.asFunction(signature);\r\n }\r\n var typeNode = node;\r\n var simpleName = typeNode.name.text;\r\n var globalName = simpleName;\r\n var localName = typeNode.range.source.internalPath + PATH_DELIMITER + simpleName;\r\n\r\n var element: Element | null;\r\n\r\n // check file-global / program-global element\r\n if ((element = this.elements.get(localName)) || (element = this.elements.get(globalName))) {\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n let instance = (element).resolveUsingTypeArguments(\r\n typeNode.typeArguments,\r\n contextualTypeArguments,\r\n null\r\n ); // reports\r\n return instance ? instance.type : null;\r\n }\r\n }\r\n }\r\n\r\n // check (global) type alias\r\n var alias = this.typeAliases.get(simpleName);\r\n if (alias) return this.resolveType(alias.type, contextualTypeArguments, reportNotFound);\r\n\r\n // resolve parameters\r\n if (typeNode.typeArguments) {\r\n let k = typeNode.typeArguments.length;\r\n let paramTypes = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let paramType = this.resolveType( // reports\r\n typeNode.typeArguments[i],\r\n contextualTypeArguments,\r\n reportNotFound\r\n );\r\n if (!paramType) return null;\r\n paramTypes[i] = paramType;\r\n }\r\n\r\n if (k) { // can't be a placeholder if it has parameters\r\n let instanceKey = typesToString(paramTypes);\r\n if (instanceKey.length) {\r\n localName += \"<\" + instanceKey + \">\";\r\n globalName += \"<\" + instanceKey + \">\";\r\n }\r\n } else if (contextualTypeArguments) {\r\n let placeholderType = contextualTypeArguments.get(globalName);\r\n if (placeholderType) return placeholderType;\r\n }\r\n }\r\n\r\n var type: Type | null;\r\n\r\n // check file-global / program-global type\r\n if ((type = this.types.get(localName)) || (type = this.types.get(globalName))) {\r\n return type;\r\n }\r\n\r\n if (reportNotFound) {\r\n this.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n typeNode.name.range, globalName\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n /** Resolves an array of type arguments to concrete types. */\r\n resolveTypeArguments(\r\n typeParameters: TypeParameterNode[],\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): Type[] | null {\r\n var parameterCount = typeParameters.length;\r\n var argumentCount = typeArgumentNodes ? typeArgumentNodes.length : 0;\r\n if (parameterCount != argumentCount) {\r\n if (argumentCount) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n Range.join(\r\n (typeArgumentNodes)[0].range,\r\n (typeArgumentNodes)[argumentCount - 1].range\r\n ),\r\n parameterCount.toString(10), argumentCount.toString(10)\r\n );\r\n } else if (alternativeReportNode) {\r\n this.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n alternativeReportNode.range.atEnd, parameterCount.toString(10), \"0\"\r\n );\r\n }\r\n return null;\r\n }\r\n var typeArguments = new Array(parameterCount);\r\n for (let i = 0; i < parameterCount; ++i) {\r\n let type = this.resolveType( // reports\r\n (typeArgumentNodes)[i],\r\n contextualTypeArguments,\r\n true\r\n );\r\n if (!type) return null;\r\n // TODO: check extendsType\r\n typeArguments[i] = type;\r\n }\r\n return typeArguments;\r\n }\r\n\r\n /** Resolves an identifier to the element it refers to. */\r\n resolveIdentifier(\r\n identifier: IdentifierExpression,\r\n contextualFunction: Function | null,\r\n contextualEnum: Enum | null = null\r\n ): ResolvedElement | null {\r\n var name = identifier.text;\r\n\r\n var element: Element | null;\r\n var namespace: Element | null;\r\n\r\n // check siblings\r\n if (contextualEnum) {\r\n\r\n if (\r\n contextualEnum.members &&\r\n (element = contextualEnum.members.get(name)) &&\r\n element.kind == ElementKind.ENUMVALUE\r\n ) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\r\n }\r\n\r\n } else if (contextualFunction) {\r\n\r\n // check locals\r\n if (element = contextualFunction.flow.getScopedLocal(name)) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(element);\r\n }\r\n\r\n // search contextual parent namespaces if applicable\r\n if (namespace = contextualFunction.prototype.namespace) {\r\n do {\r\n if (element = this.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 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 let getter = assert((target).getterPrototype).resolve(); // reports\r\n if (!getter) return null;\r\n if (!(targetType = getter.signature.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\r\n // Look up the member within\r\n switch (target.kind) {\r\n case ElementKind.CLASS_PROTOTYPE:\r\n case ElementKind.CLASS: {\r\n do {\r\n if (target.members && (member = target.members.get(propertyName))) {\r\n return resolvedElement.set(member).withTarget(target, targetExpression);\r\n }\r\n // check inherited static members on the base prototype while target is a class prototype\r\n if (target.kind == ElementKind.CLASS_PROTOTYPE) {\r\n if ((target).basePrototype) {\r\n target = (target).basePrototype;\r\n } else {\r\n break;\r\n }\r\n // or inherited instance members on the 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 }\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.property.range, propertyName, target.internalName\r\n );\r\n return null;\r\n }\r\n\r\n resolveElementAccess(\r\n elementAccess: ElementAccessExpression,\r\n contextualFunction: Function\r\n ): ResolvedElement | null {\r\n // start by resolving the lhs target (expression before the last dot)\r\n var targetExpression = elementAccess.expression;\r\n resolvedElement = this.resolveExpression(\r\n targetExpression,\r\n contextualFunction\r\n );\r\n if (!resolvedElement) return null;\r\n var target = resolvedElement.element;\r\n switch (target.kind) {\r\n case ElementKind.GLOBAL:\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n let type = (target).type;\r\n if (type.classType) {\r\n let indexedGetName = (target = type.classType).prototype.fnIndexedGet;\r\n let indexedGet: Element | null;\r\n if (\r\n indexedGetName != null &&\r\n target.members &&\r\n (indexedGet = target.members.get(indexedGetName)) &&\r\n indexedGet.kind == ElementKind.FUNCTION_PROTOTYPE\r\n ) {\r\n return resolvedElement.set(indexedGet).withTarget(type.classType, targetExpression);\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n targetExpression.range, target.internalName\r\n );\r\n return null;\r\n }\r\n\r\n resolveExpression(\r\n expression: Expression,\r\n contextualFunction: Function\r\n ): ResolvedElement | null {\r\n while (expression.kind == NodeKind.PARENTHESIZED) {\r\n expression = (expression).expression;\r\n }\r\n switch (expression.kind) {\r\n case NodeKind.ASSERTION: {\r\n let type = this.resolveType((expression).toType); // reports\r\n if (type) {\r\n let classType = type.classType;\r\n if (classType) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(classType);\r\n }\r\n }\r\n return null;\r\n }\r\n case NodeKind.BINARY: { // TODO: string concatenation, mostly\r\n throw new Error(\"not implemented\");\r\n }\r\n case NodeKind.THIS: { // -> Class\r\n let classType = contextualFunction.instanceMethodOf;\r\n if (classType) {\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 let classType = contextualFunction.instanceMethodOf;\r\n if (classType && (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 let resolved = this.resolveExpression(\r\n (expression).expression,\r\n contextualFunction\r\n );\r\n if (resolved) {\r\n let element = resolved.element;\r\n if (element && element.kind == ElementKind.FUNCTION_PROTOTYPE) {\r\n let instance = (element).resolveUsingTypeArguments(\r\n (expression).typeArguments,\r\n null,\r\n expression\r\n );\r\n if (instance) {\r\n let returnType = instance.signature.returnType;\r\n let classType = returnType.classType;\r\n if (classType) {\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(classType);\r\n } else {\r\n let signature = returnType.functionType;\r\n if (signature) {\r\n let functionTarget = signature.cachedFunctionTarget;\r\n if (!functionTarget) {\r\n functionTarget = new FunctionTarget(this, signature);\r\n signature.cachedFunctionTarget = functionTarget;\r\n }\r\n if (!resolvedElement) resolvedElement = new ResolvedElement();\r\n return resolvedElement.set(functionTarget);\r\n }\r\n }\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return null;\r\n }\r\n}\r\n\r\n/** Common result structure returned when calling any of the resolve functions on a {@link Program}. */\r\nexport class ResolvedElement {\r\n\r\n /** The target element, if a property or element access */\r\n target: Element | null;\r\n /** The target element's expression, if a property or element access. */\r\n targetExpression: Expression | null;\r\n /** The element being accessed. */\r\n element: Element;\r\n\r\n /** Clears the target and sets the resolved element. */\r\n set(element: Element): this {\r\n this.target = null;\r\n this.targetExpression = null;\r\n this.element = element;\r\n return this;\r\n }\r\n\r\n /** Sets the resolved target in addition to the previously set element. */\r\n withTarget(target: Element, targetExpression: Expression): this {\r\n this.target = target;\r\n this.targetExpression = targetExpression;\r\n return this;\r\n }\r\n\r\n /** Tests if the target is a valid instance target. */\r\n get isInstanceTarget(): bool {\r\n return (\r\n this.target != null &&\r\n this.target.kind == ElementKind.CLASS &&\r\n this.targetExpression != null\r\n );\r\n }\r\n}\r\n\r\n// Cached result structure instance\r\nvar resolvedElement: ResolvedElement | null;\r\n\r\n/** Indicates the specific kind of an {@link Element}. */\r\nexport enum ElementKind {\r\n /** A {@link Global}. */\r\n GLOBAL,\r\n /** A {@link Local}. */\r\n LOCAL,\r\n /** An {@link Enum}. */\r\n ENUM,\r\n /** An {@link EnumValue}. */\r\n ENUMVALUE,\r\n /** A {@link FunctionPrototype}. */\r\n FUNCTION_PROTOTYPE,\r\n /** A {@link Function}. */\r\n FUNCTION,\r\n /** A {@link FunctionTarget}. */\r\n FUNCTION_TARGET,\r\n /** A {@link ClassPrototype}. */\r\n CLASS_PROTOTYPE,\r\n /** A {@link Class}. */\r\n CLASS,\r\n /** An {@link InterfacePrototype}. */\r\n INTERFACE_PROTOTYPE,\r\n /** An {@link Interface}. */\r\n INTERFACE,\r\n /** A {@link FieldPrototype}. */\r\n FIELD_PROTOTYPE,\r\n /** A {@link Field}. */\r\n FIELD,\r\n /** A {@link Property}. */\r\n PROPERTY,\r\n /** A {@link Namespace}. */\r\n NAMESPACE\r\n}\r\n\r\n/** Indicates traits of 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 var modifiers = declaration.modifiers;\r\n if (modifiers) {\r\n for (let i = 0, k = modifiers.length; i < k; ++i) {\r\n switch (modifiers[i].modifierKind) {\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 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 var modifiers = declaration.modifiers;\r\n if (modifiers) {\r\n for (let i = 0, k = modifiers.length; i < k; ++i) {\r\n switch (modifiers[i].modifierKind) {\r\n case ModifierKind.EXPORT: {\r\n this.set(ElementFlags.EXPORTED);\r\n break;\r\n }\r\n case ModifierKind.IMPORT: {\r\n this.set(ElementFlags.IMPORTED);\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.CONST: {\r\n this.set(ElementFlags.CONSTANT);\r\n break;\r\n }\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 var modifiers = declaration.modifiers;\r\n if (modifiers) {\r\n for (let i = 0, k = modifiers.length; i < k; ++i) {\r\n switch (modifiers[i].modifierKind) {\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: break; // static fields become globals\r\n default: 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. Not set otherwise. */\r\n classTypeArguments: Type[] | null = null;\r\n\r\n /** Constructs a new function prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FunctionDeclaration,\r\n classPrototype: ClassPrototype | null = null\r\n ) {\r\n super(program, simpleName, internalName);\r\n this.declaration = declaration;\r\n var modifiers = declaration.modifiers;\r\n if (modifiers) {\r\n for (let i = 0, k = modifiers.length; i < k; ++i) {\r\n switch (modifiers[i].modifierKind) {\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: break; // already handled\r\n default: 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 var isInstance = this.is(ElementFlags.INSTANCE);\r\n\r\n // inherit contextual type arguments as provided. might be be overridden.\r\n var inheritedTypeArguments = contextualTypeArguments;\r\n contextualTypeArguments = new Map();\r\n if (inheritedTypeArguments) {\r\n for (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(\r\n inheritedName,\r\n inheritedType\r\n );\r\n }\r\n }\r\n\r\n // override with class type arguments if a partially resolved instance method\r\n var classTypeArguments = this.classTypeArguments;\r\n if (classTypeArguments) { // set only if partially resolved\r\n let classDeclaration = (assert(this.classPrototype)).declaration;\r\n let classTypeParameters = classDeclaration.typeParameters;\r\n let numClassTypeParameters = classTypeParameters.length;\r\n assert(numClassTypeParameters == classTypeArguments.length);\r\n for (let i = 0; i < numClassTypeParameters; ++i) {\r\n contextualTypeArguments.set(\r\n classTypeParameters[i].name.text,\r\n classTypeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!classTypeArguments);\r\n }\r\n\r\n // override with function specific type arguments\r\n var signatureNode = declaration.signature;\r\n var functionTypeParameters = declaration.typeParameters;\r\n var numFunctionTypeArguments: i32;\r\n if (functionTypeArguments && (numFunctionTypeArguments = functionTypeArguments.length)) {\r\n assert(functionTypeParameters && numFunctionTypeArguments == functionTypeParameters.length);\r\n for (let i = 0; i < numFunctionTypeArguments; ++i) {\r\n contextualTypeArguments.set(\r\n (functionTypeParameters)[i].name.text,\r\n functionTypeArguments[i]\r\n );\r\n }\r\n } else {\r\n assert(!functionTypeParameters || functionTypeParameters.length == 0);\r\n }\r\n\r\n // resolve class if an instance method\r\n var classInstance: Class | null = null;\r\n var thisType: Type | null = null;\r\n if (isInstance) {\r\n let classPrototype = assert(this.classPrototype);\r\n classInstance = classPrototype.resolve(classTypeArguments, contextualTypeArguments); // reports\r\n if (!classInstance) return null;\r\n thisType = classInstance.type;\r\n } else {\r\n assert(!this.classPrototype);\r\n }\r\n\r\n // resolve signature node\r\n var signatureParameters = signatureNode.parameterTypes;\r\n var signatureParameterCount = signatureParameters.length;\r\n var parameterTypes = new Array(signatureParameterCount);\r\n var parameterNames = new Array(signatureParameterCount);\r\n var requiredParameters = 0;\r\n for (let i = 0; i < signatureParameterCount; ++i) {\r\n let parameterDeclaration = signatureParameters[i];\r\n if (parameterDeclaration.parameterKind == ParameterKind.DEFAULT) {\r\n requiredParameters = i + 1;\r\n }\r\n let typeNode = assert(parameterDeclaration.type);\r\n let parameterType = this.program.resolveType(typeNode, contextualTypeArguments, true); // reports\r\n if (!parameterType) return null;\r\n parameterTypes[i] = parameterType;\r\n parameterNames[i] = parameterDeclaration.name.text;\r\n }\r\n\r\n var returnType: Type;\r\n if (this.is(ElementFlags.SETTER) || this.is(ElementFlags.CONSTRUCTOR)) {\r\n returnType = Type.void; // not annotated\r\n } else {\r\n let typeNode = assert(signatureNode.returnType);\r\n let type = this.program.resolveType(typeNode, contextualTypeArguments, true); // reports\r\n if (!type) return null;\r\n returnType = type;\r\n }\r\n\r\n var signature = new Signature(parameterTypes, returnType, thisType);\r\n signature.parameterNames = parameterNames;\r\n signature.requiredParameters = requiredParameters;\r\n\r\n var internalName = this.internalName;\r\n if (instanceKey.length) internalName += \"<\" + instanceKey + \">\";\r\n instance = new Function(this, internalName, signature, classInstance);\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 let partialPrototype = new FunctionPrototype(\r\n this.program,\r\n this.simpleName,\r\n this.internalName,\r\n this.declaration,\r\n this.classPrototype\r\n );\r\n partialPrototype.flags = this.flags;\r\n partialPrototype.classTypeArguments = classTypeArguments;\r\n return partialPrototype;\r\n }\r\n return this; // no need to clone\r\n }\r\n\r\n /** Resolves the specified type arguments prior to resolving this prototype to an instance. */\r\n resolveUsingTypeArguments(\r\n typeArgumentNodes: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n reportNode: Node\r\n ): Function | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (this.is(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: CommonTypeNode[] | 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 let k = typeArgumentNodes.length;\r\n resolvedTypeArguments = new Array(k);\r\n for (let i = 0; i < k; ++i) {\r\n let resolvedType = this.program.resolveType( // reports\r\n typeArgumentNodes[i],\r\n contextualTypeArguments,\r\n true\r\n );\r\n if (!resolvedType) return null;\r\n resolvedTypeArguments[i] = resolvedType;\r\n }\r\n }\r\n return resolvedTypeArguments;\r\n }\r\n\r\n toString(): string { return this.simpleName; }\r\n}\r\n\r\n/** A resolved function. */\r\nexport class Function extends Element {\r\n\r\n kind = ElementKind.FUNCTION;\r\n\r\n /** Prototype reference. */\r\n prototype: FunctionPrototype;\r\n /** Function signature. */\r\n signature: Signature;\r\n /** If 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 /** Trampoline function for calling with omitted arguments. */\r\n trampoline: Function | null = null;\r\n\r\n private nextBreakId: i32 = 0;\r\n private breakStack: i32[] | null = null;\r\n\r\n /** Constructs a new concrete function. */\r\n constructor(\r\n prototype: FunctionPrototype,\r\n internalName: string,\r\n signature: Signature,\r\n instanceMethodOf: Class | null = null\r\n ) {\r\n super(prototype.program, prototype.simpleName, internalName);\r\n this.prototype = prototype;\r\n this.signature = signature;\r\n this.instanceMethodOf = instanceMethodOf;\r\n this.flags = prototype.flags;\r\n if (!(prototype.is(ElementFlags.BUILTIN) || prototype.is(ElementFlags.DECLARED))) {\r\n let localIndex = 0;\r\n if (instanceMethodOf) {\r\n assert(this.is(ElementFlags.INSTANCE));\r\n this.locals.set(\r\n \"this\",\r\n new Local(\r\n prototype.program,\r\n \"this\",\r\n localIndex++,\r\n assert(signature.thisType)\r\n )\r\n );\r\n if (instanceMethodOf.contextualTypeArguments) {\r\n if (!this.contextualTypeArguments) {\r\n this.contextualTypeArguments = new Map();\r\n }\r\n for (let [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 let parameterTypes = signature.parameterTypes;\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) {\r\n let parameterType = parameterTypes[i];\r\n let parameterName = signature.getParameterName(i);\r\n this.locals.set(\r\n parameterName,\r\n new Local(\r\n prototype.program,\r\n parameterName,\r\n localIndex++,\r\n parameterType\r\n )\r\n );\r\n }\r\n }\r\n this.flow = Flow.create(this);\r\n }\r\n\r\n /** Adds a local of the specified type, with an optional name. */\r\n addLocal(type: Type, name: string | null = null): Local {\r\n // if it has a name, check previously as this method will throw otherwise\r\n var localIndex = this.signature.parameterTypes.length + this.additionalLocals.length;\r\n if (this.is(ElementFlags.INSTANCE)) ++localIndex;\r\n var local = new Local(\r\n this.prototype.program,\r\n name\r\n ? name\r\n : \"var$\" + localIndex.toString(10),\r\n localIndex,\r\n type\r\n );\r\n if (name) {\r\n if (this.locals.has(name)) throw new Error(\"duplicate local name\");\r\n this.locals.set(name, local);\r\n }\r\n this.additionalLocals.push(type);\r\n return local;\r\n }\r\n\r\n private tempI32s: Local[] | null = null;\r\n private tempI64s: Local[] | null = null;\r\n private tempF32s: Local[] | null = null;\r\n private tempF64s: Local[] | null = null;\r\n\r\n /** Gets a free temporary local of the specified type. */\r\n getTempLocal(type: Type): Local {\r\n var temps: Local[] | null;\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s;\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s;\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s;\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s;\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n if (temps && temps.length) {\r\n let ret = temps.pop();\r\n ret.type = type;\r\n return ret;\r\n }\r\n return this.addLocal(type);\r\n }\r\n\r\n /** Frees the temporary local for reuse. */\r\n freeTempLocal(local: Local): void {\r\n var temps: Local[];\r\n assert(local.type != null); // internal error\r\n switch ((local.type).toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n temps.push(local);\r\n }\r\n\r\n /** Gets and immediately frees a temporary local of the specified type. */\r\n getAndFreeTempLocal(type: Type): Local {\r\n var temps: Local[];\r\n switch (type.toNativeType()) {\r\n case NativeType.I32: {\r\n temps = this.tempI32s || (this.tempI32s = []);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n temps = this.tempI64s || (this.tempI64s = []);\r\n break;\r\n }\r\n case NativeType.F32: {\r\n temps = this.tempF32s || (this.tempF32s = []);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n temps = this.tempF64s || (this.tempF64s = []);\r\n break;\r\n }\r\n default: throw new Error(\"concrete type expected\");\r\n }\r\n if (temps.length > 0) {\r\n return temps[temps.length - 1];\r\n }\r\n var local: Local = this.addLocal(type);\r\n temps.push(local);\r\n return local;\r\n }\r\n\r\n /** Enters a(nother) break context. */\r\n enterBreakContext(): string {\r\n var id = this.nextBreakId++;\r\n if (!this.breakStack) {\r\n this.breakStack = [ id ];\r\n } else {\r\n this.breakStack.push(id);\r\n }\r\n return this.breakContext = id.toString(10);\r\n }\r\n\r\n /** Leaves the current break context. */\r\n leaveBreakContext(): void {\r\n assert(this.breakStack != null);\r\n var length = (this.breakStack).length;\r\n assert(length > 0);\r\n (this.breakStack).pop();\r\n if (length > 1) {\r\n this.breakContext = (this.breakStack)[length - 2].toString(10);\r\n } else {\r\n this.breakContext = null;\r\n this.breakStack = null;\r\n }\r\n }\r\n\r\n /** Finalizes the function once compiled, releasing no longer needed resources. */\r\n finalize(module: Module, ref: FunctionRef): void {\r\n this.ref = ref;\r\n assert(!this.breakStack || !this.breakStack.length); // internal error\r\n this.breakStack = null;\r\n this.breakContext = null;\r\n this.tempI32s = this.tempI64s = this.tempF32s = this.tempF64s = null;\r\n if (this.program.options.sourceMap) {\r\n let debugLocations = this.debugLocations;\r\n if (debugLocations) {\r\n for (let i = 0, k = debugLocations.length; i < k; ++i) {\r\n let debugLocation = debugLocations[i];\r\n module.setDebugLocation(\r\n ref,\r\n debugLocation.debugInfoRef,\r\n debugLocation.source.debugInfoIndex,\r\n debugLocation.line,\r\n debugLocation.column\r\n );\r\n }\r\n }\r\n }\r\n this.debugLocations = null;\r\n }\r\n\r\n /** Returns the TypeScript representation of this function. */\r\n toString(): string { return this.prototype.simpleName; }\r\n}\r\n\r\n/** A resolved function target, that is a function called indirectly by an index and signature. */\r\nexport class FunctionTarget extends Element {\r\n\r\n kind = ElementKind.FUNCTION_TARGET;\r\n\r\n /** Underlying signature. */\r\n signature: Signature;\r\n /** Function type. */\r\n type: Type;\r\n\r\n /** Constructs a new function target. */\r\n constructor(program: Program, signature: Signature) {\r\n super(program, \"\", \"\");\r\n var simpleName = signature.toSignatureString();\r\n this.simpleName = simpleName;\r\n this.internalName = simpleName;\r\n this.signature = signature;\r\n this.type = Type.u32.asFunction(signature);\r\n }\r\n}\r\n\r\n/** A yet unresolved instance field prototype. */\r\nexport class FieldPrototype extends Element {\r\n\r\n kind = ElementKind.FIELD_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: FieldDeclaration;\r\n /** Parent class prototype. */\r\n classPrototype: ClassPrototype;\r\n\r\n /** Constructs a new field prototype. */\r\n constructor(\r\n classPrototype: ClassPrototype,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: FieldDeclaration\r\n ) {\r\n super(classPrototype.program, simpleName, internalName);\r\n this.classPrototype = classPrototype;\r\n this.declaration = declaration;\r\n var modifiers = declaration.modifiers;\r\n if (modifiers) {\r\n for (let i = 0, k = modifiers.length; i < k; ++i) {\r\n switch (modifiers[i].modifierKind) {\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: break; // already handled\r\n default: 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 var modifiers = declaration.modifiers;\r\n if (modifiers) {\r\n for (let i = 0, k = modifiers.length; i < k; ++i) {\r\n switch (modifiers[i].modifierKind) {\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 default: throw new Error(\"unexpected modifier\");\r\n }\r\n }\r\n }\r\n if (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 (let [inheritedName, inheritedType] of inheritedTypeArguments) {\r\n contextualTypeArguments.set(inheritedName, inheritedType);\r\n }\r\n }\r\n\r\n var declaration = this.declaration;\r\n var baseClass: Class | null = null;\r\n if (declaration.extendsType) {\r\n let baseClassType = this.program.resolveType(declaration.extendsType, null); // reports\r\n if (!baseClassType) return null;\r\n if (!(baseClass = baseClassType.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 (let inheritedMember of baseClass.members.values()) {\r\n instance.members.set(inheritedMember.simpleName, inheritedMember);\r\n }\r\n }\r\n }\r\n\r\n if (this.constructorPrototype) {\r\n let partialConstructor = this.constructorPrototype.resolvePartial(typeArguments); // reports\r\n if (partialConstructor) {\r\n instance.constructorInstance = partialConstructor.resolve(); // reports\r\n }\r\n // TODO: ^ doesn't know the return type, hence returns null\r\n }\r\n\r\n if (this.instanceMembers) {\r\n for (let member of this.instanceMembers.values()) {\r\n switch (member.kind) {\r\n case ElementKind.FIELD_PROTOTYPE: { // fields are layed out in advance\r\n if (!instance.members) instance.members = new Map();\r\n let fieldDeclaration = (member).declaration;\r\n if (!fieldDeclaration.type) {\r\n throw new Error(\"type expected\"); // TODO: check if parent class defines a type\r\n }\r\n let fieldType = this.program.resolveType( // reports\r\n fieldDeclaration.type,\r\n instance.contextualTypeArguments\r\n );\r\n if (fieldType) {\r\n let fieldInstance = new Field(member, (member).internalName, fieldType);\r\n switch (fieldType.byteSize) { // align\r\n case 1: break;\r\n case 2: {\r\n if (memoryOffset & 1) ++memoryOffset;\r\n break;\r\n }\r\n case 4: {\r\n if (memoryOffset & 3) memoryOffset = (memoryOffset | 3) + 1;\r\n break;\r\n }\r\n case 8: {\r\n if (memoryOffset & 7) memoryOffset = (memoryOffset | 7) + 1;\r\n break;\r\n }\r\n default: assert(false);\r\n }\r\n fieldInstance.memoryOffset = memoryOffset;\r\n memoryOffset += fieldType.byteSize;\r\n instance.members.set(member.simpleName, fieldInstance);\r\n }\r\n break;\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: { // instance methods remain partially resolved prototypes until compiled\r\n if (!instance.members) instance.members = new Map();\r\n let methodPrototype = (member).resolvePartial(typeArguments); // reports\r\n if (methodPrototype) {\r\n 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 let 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: 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: CommonTypeNode[] | null,\r\n contextualTypeArguments: Map | null,\r\n alternativeReportNode: Node | null\r\n ): Class | null {\r\n var resolvedTypeArguments: Type[] | null = null;\r\n if (this.is(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 (let [baseName, baseType] of base.contextualTypeArguments) {\r\n this.contextualTypeArguments.set(baseName, baseType);\r\n }\r\n }\r\n }\r\n\r\n // apply instance-specific contextual type arguments\r\n var declaration = this.prototype.declaration;\r\n var i: i32, k: i32;\r\n if (declaration) { // irrelevant for built-ins\r\n let typeParameters = declaration.typeParameters;\r\n if (typeArguments) {\r\n if ((k = typeArguments.length) != typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n if (k) {\r\n if (!this.contextualTypeArguments) this.contextualTypeArguments = new Map();\r\n for (i = 0; i < k; ++i) {\r\n this.contextualTypeArguments.set(typeParameters[i].name.text, typeArguments[i]);\r\n }\r\n }\r\n } else if (typeParameters.length) {\r\n throw new Error(\"type argument count mismatch\");\r\n }\r\n }\r\n }\r\n\r\n /** Tests if a value of this class type is assignable to a target of the specified class type. */\r\n isAssignableTo(target: Class): bool {\r\n var current: Class | null = this;\r\n do {\r\n if (current == target) {\r\n return true;\r\n }\r\n } while (current = current.base);\r\n return false;\r\n }\r\n\r\n toString(): string {\r\n return this.prototype.simpleName;\r\n }\r\n}\r\n\r\n/** A yet unresolved interface. */\r\nexport class InterfacePrototype extends ClassPrototype {\r\n\r\n kind = ElementKind.INTERFACE_PROTOTYPE;\r\n\r\n /** Declaration reference. */\r\n declaration: InterfaceDeclaration; // more specific\r\n\r\n /** Constructs a new interface prototype. */\r\n constructor(\r\n program: Program,\r\n simpleName: string,\r\n internalName: string,\r\n declaration: InterfaceDeclaration\r\n ) {\r\n super(program, simpleName, internalName, declaration);\r\n }\r\n}\r\n\r\n/** A resolved interface. */\r\nexport class Interface extends Class {\r\n\r\n kind = ElementKind.INTERFACE;\r\n\r\n /** Prototype reference. */\r\n prototype: InterfacePrototype; // more specific\r\n /** Base interface, if applcable. */\r\n base: Interface | null; // more specific\r\n\r\n /** Constructs a new interface. */\r\n constructor(\r\n prototype: InterfacePrototype,\r\n internalName: string,\r\n typeArguments: Type[] = [],\r\n base: Interface | null = null\r\n ) {\r\n super(prototype, internalName, typeArguments, base);\r\n }\r\n}\r\n\r\n/** Control flow flags indicating specific conditions. */\r\nexport const enum FlowFlags {\r\n /** No specific conditions. */\r\n NONE = 0,\r\n /** 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 (let scopedLocal of this.scopedLocals.values()) {\r\n this.currentFunction.freeTempLocal(scopedLocal);\r\n }\r\n this.scopedLocals = null;\r\n }\r\n\r\n // Propagate flags to parent\r\n if (this.is(FlowFlags.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: return true;\r\n default: 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: {\r\n assert(false);\r\n return \"\";\r\n }\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 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 let c = text.charCodeAt(this.pos);\r\n switch (c) {\r\n case CharCode.CARRIAGERETURN: {\r\n if (\r\n ++this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n break;\r\n }\r\n case CharCode.LINEFEED:\r\n case CharCode.TAB:\r\n case CharCode.VERTICALTAB:\r\n case CharCode.FORMFEED:\r\n case CharCode.SPACE: {\r\n ++this.pos;\r\n break;\r\n }\r\n case CharCode.EXCLAMATION: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.EXCLAMATION_EQUALS_EQUALS;\r\n }\r\n return Token.EXCLAMATION_EQUALS;\r\n }\r\n return Token.EXCLAMATION;\r\n }\r\n case CharCode.DOUBLEQUOTE:\r\n case CharCode.SINGLEQUOTE:\r\n case CharCode.BACKTICK: { // TODO\r\n return Token.STRINGLITERAL; // expects a call to readString\r\n }\r\n case CharCode.PERCENT: {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 1 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.PERCENT_EQUALS;\r\n }\r\n return Token.PERCENT;\r\n }\r\n case CharCode.AMPERSAND: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.AMPERSAND) {\r\n ++this.pos;\r\n return Token.AMPERSAND_AMPERSAND;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.AMPERSAND_EQUALS;\r\n }\r\n }\r\n return Token.AMPERSAND;\r\n }\r\n case CharCode.OPENPAREN: {\r\n ++this.pos;\r\n return Token.OPENPAREN;\r\n }\r\n case CharCode.CLOSEPAREN: {\r\n ++this.pos;\r\n return Token.CLOSEPAREN;\r\n }\r\n case CharCode.ASTERISK: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.ASTERISK_EQUALS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.ASTERISK) {\r\n ++this.pos;\r\n if (\r\n maxTokenLength > 2 && this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.EQUALS\r\n ) {\r\n ++this.pos;\r\n return Token.ASTERISK_ASTERISK_EQUALS;\r\n }\r\n return Token.ASTERISK_ASTERISK;\r\n }\r\n }\r\n return Token.ASTERISK;\r\n }\r\n case CharCode.PLUS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.PLUS) {\r\n ++this.pos;\r\n return Token.PLUS_PLUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.PLUS_EQUALS;\r\n }\r\n }\r\n return Token.PLUS;\r\n }\r\n case CharCode.COMMA: {\r\n ++this.pos;\r\n return Token.COMMA;\r\n }\r\n case CharCode.MINUS: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (text.charCodeAt(this.pos) == CharCode.MINUS) {\r\n ++this.pos;\r\n return Token.MINUS_MINUS;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.EQUALS) {\r\n ++this.pos;\r\n return Token.MINUS_EQUALS;\r\n }\r\n }\r\n return Token.MINUS;\r\n }\r\n case CharCode.DOT: {\r\n ++this.pos;\r\n if (maxTokenLength > 1 && this.pos < this.end) {\r\n if (isDecimalDigit(text.charCodeAt(this.pos))) {\r\n --this.pos;\r\n return Token.FLOATLITERAL; // expects a call to readFloat\r\n }\r\n if (\r\n maxTokenLength > 2 && this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.DOT &&\r\n text.charCodeAt(this.pos + 1) == CharCode.DOT\r\n ) {\r\n this.pos += 2;\r\n return Token.DOT_DOT_DOT;\r\n }\r\n }\r\n return Token.DOT;\r\n }\r\n case CharCode.SLASH: {\r\n ++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 let closed = false;\r\n while (++this.pos < this.end) {\r\n c = text.charCodeAt(this.pos);\r\n if (\r\n c == CharCode.ASTERISK &&\r\n this.pos + 1 < this.end &&\r\n text.charCodeAt(this.pos + 1) == CharCode.SLASH\r\n ) {\r\n this.pos += 2;\r\n closed = true;\r\n break;\r\n }\r\n }\r\n if (!closed) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n this.range(this.pos), \"*/\"\r\n );\r\n }\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 let posBefore = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(c = text.charCodeAt(this.pos))\r\n ) {\r\n if (!isKeywordCharacter(c)) {\r\n this.pos = posBefore;\r\n return Token.IDENTIFIER;\r\n }\r\n }\r\n let keywordText = text.substring(posBefore, this.pos);\r\n let keywordToken = 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 }\r\n return Token.ENDOFFILE;\r\n }\r\n\r\n peek(\r\n checkOnNewLine: bool = false,\r\n preferIdentifier: bool = false,\r\n maxCompoundLength: i32 = i32.MAX_VALUE\r\n ): Token {\r\n var text = this.source.text;\r\n if (this.nextToken < 0) {\r\n let posBefore = this.pos;\r\n let tokenBefore = this.token;\r\n let tokenPosBefore = this.tokenPos;\r\n this.nextToken = this.unsafeNext(preferIdentifier, maxCompoundLength);\r\n if (checkOnNewLine) {\r\n this.nextTokenOnNewLine = false;\r\n while (--this.tokenPos > posBefore) {\r\n if (isLineBreak(text.charCodeAt(this.tokenPos))) {\r\n this.nextTokenOnNewLine = true;\r\n break;\r\n }\r\n }\r\n }\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n }\r\n return this.nextToken;\r\n }\r\n\r\n skip(token: Token): bool {\r\n var posBefore = this.pos;\r\n var tokenBefore = this.token;\r\n var tokenPosBefore = this.tokenPos;\r\n var maxCompoundLength = i32.MAX_VALUE;\r\n switch (token) {\r\n case Token.GREATERTHAN: { // where parsing type arguments\r\n maxCompoundLength = 1;\r\n break;\r\n }\r\n }\r\n this.token = this.unsafeNext(token == Token.IDENTIFIER, maxCompoundLength);\r\n if (this.token == token) {\r\n this.nextToken = -1;\r\n return true;\r\n } else {\r\n this.pos = posBefore;\r\n this.token = tokenBefore;\r\n this.tokenPos = tokenPosBefore;\r\n return false;\r\n }\r\n }\r\n\r\n // 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(): State {\r\n var state: State;\r\n if (reusableState) {\r\n state = reusableState;\r\n reusableState = null;\r\n } else {\r\n state = new State();\r\n }\r\n state.pos = this.pos;\r\n state.token = this.token;\r\n state.tokenPos = this.tokenPos;\r\n return state;\r\n }\r\n\r\n discard(state: State): void {\r\n reusableState = state;\r\n }\r\n\r\n reset(state: State): void {\r\n this.pos = state.pos;\r\n this.token = state.token;\r\n this.tokenPos = state.tokenPos;\r\n this.nextToken = -1;\r\n reusableState = state;\r\n }\r\n\r\n range(start: i32 = -1, end: i32 = -1): Range {\r\n if (start < 0) {\r\n start = this.tokenPos;\r\n end = this.pos;\r\n } else if (end < 0) {\r\n end = start;\r\n }\r\n return new Range(this.source, start, end);\r\n }\r\n\r\n readIdentifier(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n while (\r\n ++this.pos < this.end &&\r\n isIdentifierPart(text.charCodeAt(this.pos))\r\n );\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readString(): string {\r\n var text = this.source.text;\r\n var quote = text.charCodeAt(this.pos++);\r\n var start = this.pos;\r\n var result = \"\";\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.end)\r\n );\r\n break;\r\n }\r\n let c = text.charCodeAt(this.pos);\r\n if (c == quote) {\r\n result += text.substring(start, this.pos++);\r\n break;\r\n }\r\n if (c == CharCode.BACKSLASH) {\r\n result += text.substring(start, this.pos);\r\n result += this.readEscapeSequence();\r\n start = this.pos;\r\n continue;\r\n }\r\n if (isLineBreak(c)) {\r\n result += text.substring(start, this.pos);\r\n this.error(\r\n DiagnosticCode.Unterminated_string_literal,\r\n this.range(start - 1, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n return result;\r\n }\r\n\r\n readEscapeSequence(): string {\r\n if (++this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.end)\r\n );\r\n return \"\";\r\n }\r\n\r\n var text = this.source.text;\r\n var c = text.charCodeAt(this.pos++);\r\n switch (c) {\r\n case CharCode._0: return \"\\0\";\r\n case CharCode.b: return \"\\b\";\r\n case CharCode.t: return \"\\t\";\r\n case CharCode.n: return \"\\n\";\r\n case CharCode.v: return \"\\v\";\r\n case CharCode.f: return \"\\f\";\r\n case CharCode.r: return \"\\r\";\r\n case CharCode.SINGLEQUOTE: return \"'\";\r\n case CharCode.DOUBLEQUOTE: return \"\\\"\";\r\n case CharCode.u: {\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.OPENBRACE\r\n ) {\r\n ++this.pos;\r\n return this.readExtendedUnicodeEscape(); // \\u{DDDDDDDD}\r\n }\r\n return this.readUnicodeEscape(); // \\uDDDD\r\n }\r\n case CharCode.CARRIAGERETURN: {\r\n if (\r\n this.pos < this.end &&\r\n text.charCodeAt(this.pos) == CharCode.LINEFEED\r\n ) {\r\n ++this.pos;\r\n }\r\n // fall through\r\n }\r\n case CharCode.LINEFEED:\r\n case CharCode.LINESEPARATOR:\r\n case CharCode.PARAGRAPHSEPARATOR: return \"\";\r\n default: return String.fromCharCode(c);\r\n }\r\n }\r\n\r\n readRegexpPattern(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var escaped = false;\r\n while (true) {\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.end)\r\n );\r\n break;\r\n }\r\n if (text.charCodeAt(this.pos) == CharCode.BACKSLASH) {\r\n ++this.pos;\r\n escaped = true;\r\n continue;\r\n }\r\n let c = text.charCodeAt(this.pos);\r\n if (c == CharCode.SLASH && !escaped) break;\r\n if (isLineBreak(c)) {\r\n this.error(\r\n DiagnosticCode.Unterminated_regular_expression_literal,\r\n this.range(start, this.pos)\r\n );\r\n break;\r\n }\r\n ++this.pos;\r\n escaped = false;\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n readRegexpFlags(): string {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var flags = 0;\r\n while (this.pos < this.end) {\r\n let c: i32 = text.charCodeAt(this.pos);\r\n if (!isIdentifierPart(c)) break;\r\n ++this.pos;\r\n\r\n // make sure each supported flag is unique\r\n switch (c) {\r\n case CharCode.g: {\r\n flags |= flags & 1 ? -1 : 1;\r\n break;\r\n }\r\n case CharCode.i: {\r\n flags |= flags & 2 ? -1 : 2;\r\n break;\r\n }\r\n case CharCode.m: {\r\n flags |= flags & 4 ? -1 : 4;\r\n break;\r\n }\r\n default: {\r\n flags = -1;\r\n break;\r\n }\r\n }\r\n }\r\n if (flags == -1) {\r\n this.error(\r\n DiagnosticCode.Invalid_regular_expression_flags,\r\n this.range(start, this.pos)\r\n );\r\n }\r\n return text.substring(start, this.pos);\r\n }\r\n\r\n testInteger(): bool {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 1 < this.end) {\r\n switch (text.charCodeAt(this.pos + 2)) {\r\n case CharCode.X:\r\n case CharCode.x:\r\n case CharCode.B:\r\n case CharCode.b:\r\n case CharCode.O:\r\n case CharCode.o: return true;\r\n }\r\n }\r\n var pos = this.pos;\r\n while (pos < this.end) {\r\n let c = text.charCodeAt(pos);\r\n if (c == CharCode.DOT || c == CharCode.E || c == CharCode.e) {\r\n return false;\r\n }\r\n if (c < CharCode._0 || c > CharCode._9) break;\r\n pos++;\r\n }\r\n return true;\r\n }\r\n\r\n readInteger(): I64 {\r\n var text = this.source.text;\r\n if (text.charCodeAt(this.pos) == CharCode._0 && this.pos + 2 < this.end) {\r\n switch (text.charCodeAt(this.pos + 1)) {\r\n case CharCode.X:\r\n case CharCode.x: {\r\n this.pos += 2;\r\n return this.readHexInteger();\r\n }\r\n case CharCode.B:\r\n case CharCode.b: {\r\n this.pos += 2;\r\n return this.readBinaryInteger();\r\n }\r\n case CharCode.O:\r\n case CharCode.o: {\r\n this.pos += 2;\r\n return this.readOctalInteger();\r\n }\r\n }\r\n if (isOctalDigit(text.charCodeAt(this.pos + 1))) {\r\n let start = this.pos;\r\n ++this.pos;\r\n let value = this.readOctalInteger();\r\n this.error(\r\n DiagnosticCode.Octal_literals_are_not_allowed_in_strict_mode,\r\n this.range(start, this.pos)\r\n );\r\n return value;\r\n }\r\n }\r\n return this.readDecimalInteger();\r\n }\r\n\r\n readHexInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_16 = i64_new(16, 0);\r\n while (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 16 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n // value = value * 16 + 10 + c - CharCode.A;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.A, 0)\r\n );\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n // value = value * 16 + 10 + c - CharCode.a;\r\n value = i64_add(\r\n i64_mul(value, i64_16),\r\n i64_new(10 + c - CharCode.a, 0)\r\n );\r\n } else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(start)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readDecimalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_10 = i64_new(10, 0);\r\n while (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n // value = value * 10 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_10),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Digit_expected,\r\n this.range(start)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readOctalInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_8 = i64_new(8, 0);\r\n while (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos);\r\n if (c >= CharCode._0 && c <= CharCode._7) {\r\n // value = value * 8 + c - CharCode._0;\r\n value = i64_add(\r\n i64_mul(value, i64_8),\r\n i64_new(c - CharCode._0, 0)\r\n );\r\n } else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Octal_digit_expected,\r\n this.range(start)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readBinaryInteger(): I64 {\r\n var text = this.source.text;\r\n var start = this.pos;\r\n var value = i64_new(0, 0);\r\n var i64_2 = i64_new(2, 0);\r\n var i64_1 = i64_new(1, 0);\r\n while (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos);\r\n if (c == CharCode._0) {\r\n // value = value * 2;\r\n value = i64_mul(\r\n value,\r\n i64_2\r\n );\r\n } else if (c == CharCode._1) {\r\n // value = value * 2 + 1;\r\n value = i64_add(\r\n i64_mul(value, i64_2),\r\n i64_1\r\n );\r\n } else {\r\n break;\r\n }\r\n ++this.pos;\r\n }\r\n if (this.pos == start) {\r\n this.error(\r\n DiagnosticCode.Binary_digit_expected,\r\n this.range(start)\r\n );\r\n }\r\n return value;\r\n }\r\n\r\n readFloat(): f64 {\r\n var start = this.pos;\r\n var text = this.source.text;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n if (this.pos < this.end && text.charCodeAt(this.pos) == CharCode.DOT) {\r\n ++this.pos;\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n if (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos);\r\n if (c == CharCode.E || c == CharCode.e) {\r\n if (\r\n ++this.pos < this.end && (\r\n text.charCodeAt(this.pos) == CharCode.MINUS ||\r\n text.charCodeAt(this.pos) == CharCode.PLUS\r\n ) &&\r\n isDecimalDigit(text.charCodeAt(this.pos + 1))\r\n ) {\r\n ++this.pos;\r\n }\r\n while (this.pos < this.end && isDecimalDigit(text.charCodeAt(this.pos))) {\r\n ++this.pos;\r\n }\r\n }\r\n }\r\n return parseFloat(text.substring(start, this.pos));\r\n }\r\n\r\n readUnicodeEscape(): string {\r\n var remain = 4;\r\n var value = 0;\r\n var text = this.source.text;\r\n while (this.pos < this.end) {\r\n let c = text.charCodeAt(this.pos++);\r\n if (c >= CharCode._0 && c <= CharCode._9) {\r\n value = value * 16 + c - CharCode._0;\r\n } else if (c >= CharCode.A && c <= CharCode.F) {\r\n value = value * 16 + 10 + c - CharCode.A;\r\n } else if (c >= CharCode.a && c <= CharCode.f) {\r\n value = value * 16 + 10 + c - CharCode.a;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Hexadecimal_digit_expected,\r\n this.range(this.pos - 1, this.pos)\r\n );\r\n return \"\";\r\n }\r\n if (--remain == 0) break;\r\n }\r\n if (remain) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(this.pos)\r\n );\r\n return \"\";\r\n }\r\n return String.fromCharCode(value);\r\n }\r\n\r\n private readExtendedUnicodeEscape(): string {\r\n var start = this.pos;\r\n var value = this.readHexInteger();\r\n var value32 = i64_low(value);\r\n var invalid = false;\r\n\r\n assert(!i64_high(value));\r\n if (value32 > 0x10FFFF) {\r\n this.error(\r\n DiagnosticCode.An_extended_Unicode_escape_value_must_be_between_0x0_and_0x10FFFF_inclusive,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n var text = this.source.text;\r\n if (this.pos >= this.end) {\r\n this.error(\r\n DiagnosticCode.Unexpected_end_of_text,\r\n this.range(start, this.end)\r\n );\r\n invalid = true;\r\n } else if (text.charCodeAt(this.pos) == CharCode.CLOSEBRACE) {\r\n ++this.pos;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Unterminated_Unicode_escape_sequence,\r\n this.range(start, this.pos)\r\n );\r\n invalid = true;\r\n }\r\n\r\n if (invalid) return \"\";\r\n return value32 < 65536\r\n ? String.fromCharCode(value32)\r\n : String.fromCharCode(\r\n (((value32 - 65536) / 1024 | 0) + 0xD800) as i32,\r\n ( (value32 - 65536) % 1024 + 0xDC00) as i32\r\n );\r\n }\r\n\r\n finish(): void {\r\n }\r\n}\r\n\r\n/** Tokenizer state as returned by {@link Tokenizer#mark} and consumed by {@link Tokenizer#reset}. */\r\nexport class State {\r\n /** Current position. */\r\n pos: i32;\r\n /** Current token. */\r\n token: Token;\r\n /** Current token's position. */\r\n tokenPos: i32;\r\n}\r\n\r\n// Reusable state object to reduce allocations\r\nvar reusableState: State | null = null;\r\n","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 PARAMETER,\r\n SIGNATURE,\r\n\r\n // expressions\r\n IDENTIFIER,\r\n ASSERTION,\r\n BINARY,\r\n CALL,\r\n COMMA,\r\n ELEMENTACCESS,\r\n FALSE,\r\n FUNCTION,\r\n 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 // special\r\n DECORATOR,\r\n MODIFIER,\r\n EXPORTMEMBER,\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 name: IdentifierExpression,\r\n typeArguments: CommonTypeNode[] | null,\r\n isNullable: bool,\r\n range: Range\r\n ): TypeNode {\r\n var type = new TypeNode();\r\n type.range = range;\r\n type.name = name; name.parent = type;\r\n type.typeArguments = typeArguments; if (typeArguments) setParent(typeArguments, type);\r\n type.isNullable = isNullable;\r\n return type;\r\n }\r\n\r\n static createOmittedType(\r\n range: Range\r\n ): TypeNode {\r\n return Node.createType(\r\n Node.createIdentifierExpression(\"\", range),\r\n null,\r\n false,\r\n range\r\n );\r\n }\r\n\r\n static createTypeParameter(\r\n name: IdentifierExpression,\r\n extendsType: TypeNode | null,\r\n range: Range\r\n ): TypeParameterNode {\r\n var elem = new TypeParameterNode();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n elem.extendsType = extendsType; if (extendsType) extendsType.parent = elem;\r\n return elem;\r\n }\r\n\r\n static createParameter(\r\n name: IdentifierExpression,\r\n type: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n kind: ParameterKind,\r\n range: Range\r\n ): ParameterNode {\r\n var elem = new ParameterNode();\r\n elem.range = range;\r\n elem.name = name; name.parent = elem;\r\n elem.type = type; if (type) type.parent = elem;\r\n elem.initializer = initializer; if (initializer) initializer.parent = elem;\r\n elem.parameterKind = kind;\r\n return elem;\r\n }\r\n\r\n static createSignature(\r\n parameters: ParameterNode[],\r\n returnType: CommonTypeNode,\r\n explicitThisType: TypeNode | null,\r\n isNullable: bool,\r\n range: Range\r\n ): SignatureNode {\r\n var sig = new SignatureNode();\r\n sig.range = range;\r\n sig.parameterTypes = parameters; setParent(parameters, sig);\r\n sig.returnType = returnType; returnType.parent = sig;\r\n sig.explicitThisType = explicitThisType; if (explicitThisType) explicitThisType.parent = sig;\r\n sig.isNullable = isNullable;\r\n return sig;\r\n }\r\n\r\n // special\r\n\r\n static createDecorator(\r\n expression: Expression,\r\n args: Expression[] | null,\r\n range: Range\r\n ): DecoratorNode {\r\n var stmt = new DecoratorNode();\r\n stmt.range = range;\r\n stmt.name = expression; expression.parent = stmt;\r\n stmt.arguments = args; if (args) setParent(args, stmt);\r\n if (expression.kind == NodeKind.IDENTIFIER) {\r\n switch ((expression).text) {\r\n case \"global\": {\r\n stmt.decoratorKind = DecoratorKind.GLOBAL;\r\n break;\r\n }\r\n case \"operator\": {\r\n stmt.decoratorKind = DecoratorKind.OPERATOR;\r\n break;\r\n }\r\n case \"unmanaged\": {\r\n stmt.decoratorKind = DecoratorKind.UNMANAGED;\r\n break;\r\n }\r\n case \"offset\": {\r\n stmt.decoratorKind = DecoratorKind.OFFSET;\r\n break;\r\n }\r\n default: {\r\n stmt.decoratorKind = DecoratorKind.CUSTOM;\r\n break;\r\n }\r\n }\r\n } else {\r\n stmt.decoratorKind = DecoratorKind.CUSTOM;\r\n }\r\n return stmt;\r\n }\r\n\r\n static createModifier(kind: ModifierKind, range: Range): ModifierNode {\r\n var elem = new ModifierNode();\r\n elem.range = range;\r\n elem.modifierKind = kind;\r\n return elem;\r\n }\r\n\r\n // expressions\r\n\r\n static createIdentifierExpression(\r\n name: string,\r\n range: Range\r\n ): IdentifierExpression {\r\n var expr = new IdentifierExpression();\r\n expr.range = range;\r\n expr.text = name;\r\n return expr;\r\n }\r\n\r\n static createEmptyIdentifierExpression(\r\n range: Range\r\n ): IdentifierExpression {\r\n var expr = new IdentifierExpression();\r\n expr.range = range;\r\n expr.text = \"\";\r\n return expr;\r\n }\r\n\r\n static createArrayLiteralExpression(\r\n elements: (Expression | null)[],\r\n range: Range\r\n ): ArrayLiteralExpression {\r\n var expr = new ArrayLiteralExpression();\r\n expr.range = range;\r\n expr.elementExpressions = elements; setParentIfNotNull(elements, expr);\r\n return expr;\r\n }\r\n\r\n static createAssertionExpression(\r\n assertionKind: AssertionKind,\r\n expression: Expression,\r\n toType: CommonTypeNode,\r\n range: Range\r\n ): AssertionExpression {\r\n var expr = new AssertionExpression();\r\n expr.range = range;\r\n expr.assertionKind = assertionKind;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.toType = toType; toType.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createBinaryExpression(\r\n operator: Token,\r\n left: Expression,\r\n right: Expression,\r\n range: Range\r\n ): BinaryExpression {\r\n var expr = new BinaryExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.left = left; left.parent = expr;\r\n expr.right = right; right.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createCallExpression(\r\n expression: Expression,\r\n typeArgs: CommonTypeNode[] | null,\r\n args: Expression[],\r\n range: Range\r\n ): CallExpression {\r\n var expr = new CallExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.typeArguments = typeArgs; if (typeArgs) setParent(typeArgs, expr);\r\n expr.arguments = args; setParent(args, expr);\r\n return expr;\r\n }\r\n\r\n static createCommaExpression(\r\n expressions: Expression[],\r\n range: Range\r\n ): CommaExpression {\r\n var expr = new CommaExpression();\r\n expr.range = range;\r\n expr.expressions = expressions; setParent(expressions, expr);\r\n return expr;\r\n }\r\n\r\n static createConstructorExpression(\r\n range: Range\r\n ): ConstructorExpression {\r\n var expr = new ConstructorExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createElementAccessExpression(\r\n expression: Expression,\r\n element: Expression,\r\n range: Range\r\n ): ElementAccessExpression {\r\n var expr = new ElementAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.elementExpression = element; element.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createFalseExpression(\r\n range: Range\r\n ): FalseExpression {\r\n var expr = new FalseExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createFloatLiteralExpression(\r\n value: f64,\r\n range: Range\r\n ): FloatLiteralExpression {\r\n var expr = new FloatLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createFunctionExpression(\r\n declaration: FunctionDeclaration,\r\n 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: CommonTypeNode[] | null,\r\n args: Expression[],\r\n range: Range\r\n ): NewExpression {\r\n var expr = new NewExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.typeArguments = typeArgs; if (typeArgs) setParent(typeArgs, expr);\r\n expr.arguments = args; setParent(args, expr);\r\n return expr;\r\n }\r\n\r\n static createNullExpression(\r\n range: Range\r\n ): NullExpression {\r\n var expr = new NullExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createParenthesizedExpression(\r\n expression: Expression,\r\n range: Range\r\n ): ParenthesizedExpression {\r\n var expr = new ParenthesizedExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createPropertyAccessExpression(\r\n expression: Expression,\r\n property: IdentifierExpression,\r\n range: Range\r\n ): PropertyAccessExpression {\r\n var expr = new PropertyAccessExpression();\r\n expr.range = range;\r\n expr.expression = expression; expression.parent = expr;\r\n expr.property = property; property.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createRegexpLiteralExpression(\r\n pattern: string,\r\n flags: string,\r\n range: Range\r\n ): RegexpLiteralExpression {\r\n var expr = new RegexpLiteralExpression();\r\n expr.range = range;\r\n expr.pattern = pattern;\r\n expr.patternFlags = flags;\r\n return expr;\r\n }\r\n\r\n static createTernaryExpression(\r\n condition: Expression,\r\n ifThen: Expression,\r\n ifElse: Expression,\r\n range: Range\r\n ): TernaryExpression {\r\n var expr = new TernaryExpression();\r\n expr.range = range;\r\n expr.condition = condition; condition.parent = expr;\r\n expr.ifThen = ifThen; ifThen.parent = expr;\r\n expr.ifElse = ifElse; ifElse.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createStringLiteralExpression(\r\n value: string,\r\n range: Range\r\n ): StringLiteralExpression {\r\n var expr = new StringLiteralExpression();\r\n expr.range = range;\r\n expr.value = value;\r\n return expr;\r\n }\r\n\r\n static createSuperExpression(\r\n range: Range\r\n ): SuperExpression {\r\n var expr = new SuperExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createThisExpression(\r\n range: Range\r\n ): ThisExpression {\r\n var expr = new ThisExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createTrueExpression(\r\n range: Range\r\n ): TrueExpression {\r\n var expr = new TrueExpression();\r\n expr.range = range;\r\n return expr;\r\n }\r\n\r\n static createUnaryPostfixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPostfixExpression {\r\n var expr = new UnaryPostfixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n static createUnaryPrefixExpression(\r\n operator: Token,\r\n operand: Expression,\r\n range: Range\r\n ): UnaryPrefixExpression {\r\n var expr = new UnaryPrefixExpression();\r\n expr.range = range;\r\n expr.operator = operator;\r\n expr.operand = operand; operand.parent = expr;\r\n return expr;\r\n }\r\n\r\n // statements\r\n\r\n static createBlockStatement(\r\n statements: Statement[],\r\n range: Range\r\n ): BlockStatement {\r\n var stmt = new BlockStatement();\r\n stmt.range = range;\r\n stmt.statements = statements; setParent(statements, stmt);\r\n return stmt;\r\n }\r\n\r\n static createBreakStatement(\r\n label: IdentifierExpression | null,\r\n range: Range\r\n ): BreakStatement {\r\n var stmt = new BreakStatement();\r\n stmt.range = range;\r\n stmt.label = label; if (label) label.parent = stmt;\r\n return stmt;\r\n }\r\n\r\n static createClassDeclaration(\r\n identifier: IdentifierExpression,\r\n typeParameters: TypeParameterNode[],\r\n extendsType: TypeNode | null, // can't be a function\r\n implementsTypes: TypeNode[], // can't be a function\r\n members: DeclarationStatement[],\r\n modifiers: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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 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: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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: ModifierNode[] | 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 let normalizedPath = normalizePath(path.value);\r\n if (path.value.startsWith(\".\")) { // relative\r\n stmt.normalizedPath = resolvePath(\r\n normalizedPath,\r\n range.source.normalizedPath\r\n );\r\n } else { // absolute\r\n stmt.normalizedPath = normalizedPath;\r\n }\r\n stmt.internalPath = mangleInternalPath(stmt.normalizedPath);\r\n } else {\r\n stmt.normalizedPath = null;\r\n stmt.internalPath = null;\r\n }\r\n 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, // can't be a function\r\n members: DeclarationStatement[],\r\n modifiers: ModifierNode[] | 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: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n modifiers: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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 createFunctionDeclaration(\r\n name: IdentifierExpression,\r\n typeParameters: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n modifiers: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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.signature = signature; signature.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: TypeParameterNode[] | null,\r\n signature: SignatureNode,\r\n body: Statement | null,\r\n modifiers: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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.signature = signature; signature.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 createNamespaceDeclaration(\r\n name: IdentifierExpression,\r\n members: Statement[],\r\n modifiers: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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 typeParameters: TypeParameterNode[] | null,\r\n alias: CommonTypeNode,\r\n modifiers: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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.typeParameters = typeParameters; if (typeParameters) setParent(typeParameters, stmt);\r\n stmt.type = 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: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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: CommonTypeNode | null,\r\n initializer: Expression | null,\r\n modifiers: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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\nexport abstract class CommonTypeNode extends Node {\r\n // kind varies\r\n\r\n /** Whether nullable or not. */\r\n isNullable: bool;\r\n}\r\n\r\n/** Represents a type annotation. */\r\nexport class TypeNode extends CommonTypeNode {\r\n kind = NodeKind.TYPE;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Type argument references. */\r\n typeArguments: CommonTypeNode[] | null;\r\n}\r\n\r\n/** Represents a type parameter. */\r\nexport class TypeParameterNode extends Node {\r\n kind = NodeKind.TYPEPARAMETER;\r\n\r\n /** Identifier reference. */\r\n name: IdentifierExpression;\r\n /** Extended type reference, if any. */\r\n extendsType: TypeNode | null; // can't be a function\r\n}\r\n\r\n/** Represents the kind of a parameter. */\r\nexport enum ParameterKind {\r\n /** No specific flags. */\r\n DEFAULT,\r\n /** Is an optional parameter. */\r\n OPTIONAL,\r\n /** Is a rest parameter. */\r\n REST\r\n}\r\n\r\n/** Represents a function parameter. */\r\nexport class ParameterNode extends Node {\r\n kind = NodeKind.PARAMETER;\r\n\r\n /** Parameter kind. */\r\n parameterKind: ParameterKind;\r\n /** Parameter name. */\r\n name: IdentifierExpression;\r\n /** Parameter type. */\r\n type: CommonTypeNode | null;\r\n /** Initializer expression, if present. */\r\n initializer: Expression | null;\r\n}\r\n\r\n/** Represents a function signature. */\r\nexport class SignatureNode extends CommonTypeNode {\r\n kind = NodeKind.SIGNATURE;\r\n\r\n /** Accepted parameters. */\r\n parameterTypes: ParameterNode[];\r\n /** Return type. */\r\n returnType: CommonTypeNode | null;\r\n /** Explicitly provided this type, if any. */\r\n explicitThisType: TypeNode | null; // can't be a function\r\n}\r\n\r\n// special\r\n\r\n/** Built-in decorator kinds. */\r\nexport 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 DecoratorNode extends Node {\r\n kind = NodeKind.DECORATOR;\r\n\r\n /** Built-in kind, if applicable. */\r\n decoratorKind: DecoratorKind;\r\n /** Name expression. */\r\n name: Expression;\r\n /** Argument expressions. */\r\n arguments: Expression[] | null;\r\n}\r\n\r\n/** 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/** Represents a single modifier. */\r\nexport class ModifierNode extends Node {\r\n kind = NodeKind.MODIFIER;\r\n\r\n /** Specific modifier kind. */\r\n modifierKind: ModifierKind;\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: CommonTypeNode;\r\n}\r\n\r\n/** Represents a binary expression. */\r\nexport class BinaryExpression extends Expression {\r\n kind = NodeKind.BINARY;\r\n\r\n /** Operator token. */\r\n operator: Token;\r\n /** Left-hand side expression */\r\n left: Expression;\r\n /** Right-hand side expression. */\r\n right: Expression;\r\n}\r\n\r\n/** Represents a call expression. */\r\nexport class CallExpression extends Expression {\r\n kind = NodeKind.CALL;\r\n\r\n /** Called expression. Usually an identifier or property access expression. */\r\n expression: Expression;\r\n /** Provided type arguments. */\r\n typeArguments: CommonTypeNode[] | null;\r\n /** Provided arguments. */\r\n arguments: Expression[];\r\n}\r\n\r\n/** Represents a comma expression composed of multiple expressions. */\r\nexport class CommaExpression extends Expression {\r\n kind = NodeKind.COMMA;\r\n\r\n /** Sequential expressions. */\r\n expressions: Expression[];\r\n}\r\n\r\n/** Represents a `constructor` expression. */\r\nexport class ConstructorExpression extends IdentifierExpression {\r\n kind = NodeKind.CONSTRUCTOR;\r\n text = \"constructor\";\r\n}\r\n\r\n/** Represents an element access expression, e.g., array access. */\r\nexport class ElementAccessExpression extends Expression {\r\n kind = NodeKind.ELEMENTACCESS;\r\n\r\n /** Expression being accessed. */\r\n expression: Expression;\r\n /** Element of the expression being accessed. */\r\n elementExpression: Expression;\r\n}\r\n\r\n/** Represents a float literal expression. */\r\nexport class FloatLiteralExpression extends LiteralExpression {\r\n literalKind = LiteralKind.FLOAT;\r\n\r\n /** Float value. */\r\n value: f64;\r\n}\r\n\r\n/** Represents a function expression using the 'function' keyword. */\r\nexport class FunctionExpression extends Expression {\r\n kind = NodeKind.FUNCTION;\r\n\r\n /** Inline function declaration. */\r\n declaration: FunctionDeclaration;\r\n}\r\n\r\n/** Represents an 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/** 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: ModifierNode[] | null;\r\n /** Array of decorators. */\r\n decorators: DecoratorNode[] | null = null;\r\n\r\n protected cachedProgramLevelInternalName: string | null = null;\r\n protected cachedFileLevelInternalName: string | null = null;\r\n\r\n /** Gets the mangled program-level internal name of this declaration. */\r\n get programLevelInternalName(): string {\r\n if (!this.cachedProgramLevelInternalName) {\r\n this.cachedProgramLevelInternalName = mangleInternalName(this, true);\r\n }\r\n return this.cachedProgramLevelInternalName;\r\n }\r\n\r\n /** Gets the mangled file-level internal name of this declaration. */\r\n get fileLevelInternalName(): string {\r\n if (!this.cachedFileLevelInternalName) {\r\n this.cachedFileLevelInternalName = mangleInternalName(this, false);\r\n }\r\n return this.cachedFileLevelInternalName;\r\n }\r\n\r\n /** Tests if this is a top-level declaration within its source file. */\r\n get isTopLevel(): bool {\r\n var parent = this.parent;\r\n if (!parent) {\r\n return false;\r\n }\r\n if (parent.kind == NodeKind.VARIABLE && !(parent = parent.parent)) {\r\n return false;\r\n }\r\n return parent.kind == NodeKind.SOURCE;\r\n }\r\n\r\n /** Tests if this declaration is a top-level export within its source file. */\r\n get isTopLevelExport(): bool {\r\n var parent = this.parent;\r\n if (!parent || (parent.kind == NodeKind.VARIABLE && !(parent = parent.parent))) {\r\n return false;\r\n }\r\n if (parent.kind == NodeKind.NAMESPACEDECLARATION) {\r\n return (\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: CommonTypeNode | null;\r\n /** Variable initializer. */\r\n initializer: Expression | null;\r\n}\r\n\r\n/** Represents a block statement. */\r\nexport class BlockStatement extends Statement {\r\n kind = NodeKind.BLOCK;\r\n\r\n /** Contained statements. */\r\n statements: Statement[];\r\n}\r\n\r\n/** Represents a `break` statement. */\r\nexport class BreakStatement extends Statement {\r\n kind = NodeKind.BREAK;\r\n\r\n /** Target label, if applicable. */\r\n label: IdentifierExpression | null;\r\n}\r\n\r\n/** Represents a `class` declaration. */\r\nexport class ClassDeclaration extends DeclarationStatement {\r\n kind = NodeKind.CLASSDECLARATION;\r\n\r\n /** Accepted type parameters. */\r\n typeParameters: TypeParameterNode[];\r\n /** Base class type being extended. */\r\n extendsType: TypeNode | null; // can't be a function\r\n /** Interface types being implemented. */\r\n implementsTypes: TypeNode[]; // can't be a function\r\n /** Class member declarations. */\r\n members: DeclarationStatement[];\r\n\r\n get isGeneric(): bool {\r\n var typeParameters = this.typeParameters;\r\n return typeParameters != null && typeParameters.length > 0;\r\n }\r\n}\r\n\r\n/** Represents a `continue` statement. */\r\nexport class ContinueStatement extends Statement {\r\n kind = NodeKind.CONTINUE;\r\n\r\n /** Target label, if applicable. */\r\n label: IdentifierExpression | null;\r\n}\r\n\r\n/** Represents a `do` statement. */\r\nexport class DoStatement extends Statement {\r\n kind = NodeKind.DO;\r\n\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n /** Condition when to repeat. */\r\n condition: Expression;\r\n}\r\n\r\n/** Represents an empty statement, i.e., a semicolon terminating nothing. */\r\nexport class EmptyStatement extends Statement {\r\n kind = NodeKind.EMPTY;\r\n}\r\n\r\n/** Represents an `enum` declaration. */\r\nexport class EnumDeclaration extends DeclarationStatement {\r\n kind = NodeKind.ENUMDECLARATION;\r\n\r\n /** Enum value declarations. */\r\n values: EnumValueDeclaration[];\r\n}\r\n\r\n/** Represents a value of an `enum` declaration. */\r\nexport class EnumValueDeclaration extends DeclarationStatement {\r\n kind = NodeKind.ENUMVALUEDECLARATION;\r\n 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: ModifierNode[] | 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 /** Type parameters, if any. */\r\n typeParameters: TypeParameterNode[] | null;\r\n /** Function signature. */\r\n signature: SignatureNode;\r\n /** Body statement. Usually a block. */\r\n body: Statement | null;\r\n\r\n get isGeneric(): bool {\r\n var typeParameters = this.typeParameters;\r\n return typeParameters != null && typeParameters.length > 0;\r\n }\r\n}\r\n\r\n/** Represents an `if` statement. */\r\nexport class IfStatement extends Statement {\r\n kind = NodeKind.IF;\r\n\r\n /** Condition. */\r\n condition: Expression;\r\n /** Statement executed when condition is `true`. */\r\n ifTrue: Statement;\r\n /** Statement executed when condition is `false`. */\r\n ifFalse: Statement | null;\r\n}\r\n\r\n/** Represents an `import` declaration part of an {@link ImportStatement}. */\r\nexport class ImportDeclaration extends DeclarationStatement {\r\n kind = NodeKind.IMPORTDECLARATION;\r\n 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 a `return` statement. */\r\nexport class ReturnStatement extends Statement {\r\n kind = NodeKind.RETURN;\r\n\r\n /** Value expression being returned, if present. */\r\n value: Expression | null;\r\n}\r\n\r\n/** Represents a single `case` within a `switch` statement. */\r\nexport class SwitchCase extends Node {\r\n kind = NodeKind.SWITCHCASE;\r\n\r\n /** Label expression. `null` indicates the default case. */\r\n label: Expression | null;\r\n /** Contained statements. */\r\n statements: Statement[];\r\n}\r\n\r\n/** Represents a `switch` statement. */\r\nexport class SwitchStatement extends Statement {\r\n kind = NodeKind.SWITCH;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Contained cases. */\r\n cases: SwitchCase[];\r\n}\r\n\r\n/** Represents a `throw` statement. */\r\nexport class ThrowStatement extends Statement {\r\n kind = NodeKind.THROW;\r\n\r\n /** Value expression being thrown. */\r\n value: Expression;\r\n}\r\n\r\n/** Represents a `try` statement. */\r\nexport class TryStatement extends Statement {\r\n kind = NodeKind.TRY;\r\n\r\n /** Contained statements. */\r\n statements: Statement[];\r\n /** Exception variable name, if a `catch` clause is present. */\r\n catchVariable: IdentifierExpression | null;\r\n /** Statements being executed on catch, if a `catch` clause is present. */\r\n catchStatements: Statement[] | null;\r\n /** Statements being executed afterwards, if a `finally` clause is present. */\r\n finallyStatements: Statement[] | null;\r\n}\r\n\r\n/** Represents a `type` declaration. */\r\nexport class TypeDeclaration extends DeclarationStatement {\r\n kind = NodeKind.TYPEDECLARATION;\r\n\r\n /** Type parameters, if any. */\r\n typeParameters: TypeParameterNode[] | null;\r\n /** Type being aliased. */\r\n type: CommonTypeNode;\r\n}\r\n\r\n/** Represents a variable declaration part of a {@link VariableStatement}. */\r\nexport class VariableDeclaration extends VariableLikeDeclarationStatement {\r\n kind = NodeKind.VARIABLEDECLARATION;\r\n\r\n /** Array of modifiers. */\r\n modifiers: ModifierNode[] | 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: ModifierNode[] | null;\r\n /** Array of decorators. */\r\n decorators: DecoratorNode[] | null;\r\n /** Array of member declarations. */\r\n declarations: VariableDeclaration[];\r\n}\r\n\r\n/** Represents a void statement dropping an expression's value. */\r\nexport class VoidStatement extends Statement {\r\n kind = NodeKind.VOID;\r\n\r\n /** Expression being dropped. */\r\n expression: Expression;\r\n}\r\n\r\n/** Represents a `while` statement. */\r\nexport class WhileStatement extends Statement {\r\n kind = NodeKind.WHILE;\r\n\r\n /** Condition expression. */\r\n condition: Expression;\r\n /** Statement being looped over. */\r\n statement: Statement;\r\n}\r\n\r\n/** Cached unused modifiers for reuse. */\r\nvar reusableModifiers: ModifierNode[] | null = null;\r\n\r\nexport function setReusableModifiers(modifiers: ModifierNode[]): void {\r\n reusableModifiers = modifiers;\r\n}\r\n\r\n/** Creates a new modifiers array. */\r\nexport function createModifiers(): ModifierNode[] {\r\n var ret: ModifierNode[];\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: ModifierNode, modifiers: ModifierNode[] | null): ModifierNode[] {\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: ModifierNode[] | null): ModifierNode | null {\r\n if (modifiers) {\r\n for (let 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: ModifierNode[] | 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: DecoratorNode[] | null): DecoratorNode | null {\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n let decorator = decorators[i];\r\n let expression = decorator.name;\r\n if (expression.kind == NodeKind.IDENTIFIER && (expression).text == name) {\r\n return decorator;\r\n }\r\n }\r\n }\r\n return null;\r\n}\r\n\r\n/** Tests if a specific decorator is present within the specified decorators. */\r\nexport function hasDecorator(name: string, decorators: DecoratorNode[] | null): bool {\r\n return getFirstDecorator(name, decorators) != null;\r\n}\r\n\r\n/** Mangles a declaration's name to an internal name. */\r\nexport function mangleInternalName(declaration: DeclarationStatement, asGlobal: bool = false): string {\r\n var name = declaration.name.text;\r\n var parent = declaration.parent;\r\n if (!parent) return name;\r\n if (\r\n declaration.kind == NodeKind.VARIABLEDECLARATION &&\r\n parent.kind == NodeKind.VARIABLE\r\n ) { // skip over\r\n if (!(parent = parent.parent)) return name;\r\n }\r\n if (parent.kind == NodeKind.CLASSDECLARATION) {\r\n return mangleInternalName(parent, asGlobal) + (\r\n 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\n/** Sets the parent node on an array of nodes. */\r\nfunction setParent(nodes: Node[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n nodes[i].parent = parent;\r\n }\r\n}\r\n\r\n/** Sets the parent node on an array of nullable nodes. */\r\nfunction setParentIfNotNull(nodes: (Node | null)[], parent: Node): void {\r\n for (let i = 0, k = nodes.length; i < k; ++i) {\r\n let node = nodes[i];\r\n if (node) node.parent = parent;\r\n }\r\n}\r\n","import {\r\n Class,\r\n FunctionTarget\r\n} from \"./program\";\r\n\r\nimport {\r\n NativeType,\r\n ExpressionRef,\r\n Module\r\n} from \"./module\";\r\n\r\n/** Indicates the kind of a type. */\r\nexport const enum TypeKind {\r\n\r\n // signed integers\r\n 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: Signature | null;\r\n /** Respective nullable type, if non-nullable. */\r\n nullableType: Type | null = null;\r\n /** Respective non-nullable type, if nullable. */\r\n nonNullableType: Type;\r\n\r\n /** Constructs a new resolved type. */\r\n constructor(kind: TypeKind, flags: TypeFlags, size: i32) {\r\n this.kind = kind;\r\n this.flags = flags;\r\n this.size = size;\r\n this.byteSize = ceil(size / 8);\r\n this.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 ~0 >>> (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: Signature): 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: Signature | null;\r\n var targetFunction: Signature | 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: {\r\n let functionType = this.functionType;\r\n return kindOnly || !functionType\r\n ? \"u32\"\r\n : functionType.toString(true);\r\n }\r\n case TypeKind.U64: return \"u64\";\r\n case TypeKind.USIZE: {\r\n let classType = this.classType;\r\n return kindOnly || !classType\r\n ? \"usize\"\r\n : classType.toString();\r\n }\r\n case TypeKind.BOOL: return \"bool\";\r\n case TypeKind.F32: return \"f32\";\r\n case TypeKind.F64: return \"f64\";\r\n case TypeKind.VOID: return \"void\";\r\n default: {\r\n assert(false);\r\n return \"\";\r\n }\r\n }\r\n }\r\n\r\n // Binaryen specific\r\n\r\n /** Converts this type to its respective native type. */\r\n toNativeType(): NativeType {\r\n switch (this.kind) {\r\n default: return NativeType.I32;\r\n case TypeKind.I64:\r\n case TypeKind.U64: return NativeType.I64;\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: return this.size == 64 ? NativeType.I64 : NativeType.I32;\r\n case TypeKind.F32: return NativeType.F32;\r\n case TypeKind.F64: return NativeType.F64;\r\n case TypeKind.VOID: return NativeType.None;\r\n }\r\n }\r\n\r\n /** Converts this type to its native `0` value. */\r\n toNativeZero(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n case TypeKind.VOID: assert(false);\r\n default: return module.createI32(0);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(0);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(0);\r\n case TypeKind.F32: return module.createF32(0);\r\n case TypeKind.F64: return module.createF64(0);\r\n }\r\n }\r\n\r\n /** Converts this type to its native `1` value. */\r\n toNativeOne(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n case TypeKind.VOID: assert(false);\r\n default: return module.createI32(1);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(1);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(1);\r\n case TypeKind.F32: return module.createF32(1);\r\n case TypeKind.F64: return module.createF64(1);\r\n }\r\n }\r\n\r\n /** Converts this type to its native `-1` value. */\r\n toNativeNegOne(module: Module): ExpressionRef {\r\n switch (this.kind) {\r\n case TypeKind.VOID: assert(false);\r\n default: return module.createI32(-1);\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: if (this.size != 64) return module.createI32(-1);\r\n case TypeKind.I64:\r\n case TypeKind.U64: return module.createI64(-1, -1);\r\n case TypeKind.F32: return module.createF32(-1);\r\n case TypeKind.F64: return module.createF64(-1);\r\n }\r\n }\r\n\r\n /** Converts this type to its signature string. */\r\n toSignatureString(): string {\r\n switch (this.kind) {\r\n default: return \"i\";\r\n case TypeKind.I64:\r\n case TypeKind.U64: return \"I\";\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: return this.size == 64 ? \"I\" : \"i\";\r\n case TypeKind.F32: return \"f\";\r\n case TypeKind.F64: return \"F\";\r\n case TypeKind.VOID: return \"v\";\r\n }\r\n }\r\n\r\n // Types\r\n\r\n /** An 8-bit signed integer. */\r\n static readonly i8: Type = new Type(TypeKind.I8,\r\n TypeFlags.SIGNED |\r\n TypeFlags.SMALL |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 8\r\n );\r\n\r\n /** A 16-bit signed integer. */\r\n static readonly i16: Type = new Type(TypeKind.I16,\r\n TypeFlags.SIGNED |\r\n TypeFlags.SMALL |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 16\r\n );\r\n\r\n /** A 32-bit signed integer. */\r\n static readonly i32: Type = new Type(TypeKind.I32,\r\n TypeFlags.SIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit signed integer. */\r\n static readonly i64: Type = new Type(TypeKind.I64,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 32-bit signed size. WASM32 only. */\r\n static readonly isize32: Type = new Type(TypeKind.ISIZE,\r\n TypeFlags.SIGNED |\r\n TypeFlags.SIZE |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit signed size. WASM64 only. */\r\n static readonly isize64: Type = new Type(TypeKind.ISIZE,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.SIZE |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** An 8-bit unsigned integer. */\r\n static readonly u8: Type = new Type(TypeKind.U8,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SMALL |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 8\r\n );\r\n\r\n /** A 16-bit unsigned integer. */\r\n static readonly u16: Type = new Type(TypeKind.U16,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SMALL |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 16\r\n );\r\n\r\n /** A 32-bit unsigned integer. */\r\n static readonly u32: Type = new Type(TypeKind.U32,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit unsigned integer. */\r\n static readonly u64: Type = new Type(TypeKind.U64,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 32-bit unsigned size. WASM32 only. */\r\n static readonly usize32: Type = new Type(TypeKind.USIZE,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SIZE |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit unsigned size. WASM64 only. */\r\n static readonly usize64: Type = new Type(TypeKind.USIZE,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.SIZE |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** A 1-bit unsigned integer. */\r\n static readonly bool: Type = new Type(TypeKind.BOOL,\r\n TypeFlags.UNSIGNED |\r\n TypeFlags.SMALL |\r\n TypeFlags.INTEGER |\r\n TypeFlags.VALUE, 1\r\n );\r\n\r\n /** A 32-bit float. */\r\n static readonly f32: Type = new Type(TypeKind.F32,\r\n TypeFlags.SIGNED |\r\n TypeFlags.FLOAT |\r\n TypeFlags.VALUE, 32\r\n );\r\n\r\n /** A 64-bit float. */\r\n static readonly f64: Type = new Type(TypeKind.F64,\r\n TypeFlags.SIGNED |\r\n TypeFlags.LONG |\r\n TypeFlags.FLOAT |\r\n TypeFlags.VALUE, 64\r\n );\r\n\r\n /** No return type. */\r\n static readonly void: Type = new Type(TypeKind.VOID, TypeFlags.NONE, 0);\r\n}\r\n\r\n/** Converts an array of types to an array of native types. */\r\nexport function typesToNativeTypes(types: Type[]): NativeType[] {\r\n var numTypes = types.length;\r\n var ret = new Array(numTypes);\r\n for (let i = 0; i < numTypes; ++i) {\r\n ret[i] = types[i].toNativeType();\r\n }\r\n return ret;\r\n}\r\n\r\n/** Converts an array of types to its combined string representation. */\r\nexport function typesToString(types: Type[]): string {\r\n var numTypes = types.length;\r\n if (!numTypes) return \"\";\r\n var sb = new Array(numTypes);\r\n for (let i = 0; i < numTypes; ++i) {\r\n sb[i] = types[i].toString();\r\n }\r\n return sb.join(\", \");\r\n}\r\n\r\n/** Represents a fully resolved function signature. */\r\nexport class Signature {\r\n\r\n /** Parameter types, if any, excluding `this`. */\r\n parameterTypes: Type[];\r\n /** Parameter names, if known, excluding `this`. */\r\n parameterNames: string[] | null;\r\n /** Number of required parameters. Other parameters are considered optional. */\r\n requiredParameters: i32;\r\n /** Return type. */\r\n returnType: Type;\r\n /** This type, if an instance signature. */\r\n thisType: Type | null;\r\n /** Whether the last parameter is a rest parameter. */\r\n hasRest: bool;\r\n /** Cached {@link FunctionTarget}. */\r\n cachedFunctionTarget: FunctionTarget | null = null;\r\n\r\n constructor(\r\n parameterTypes: Type[] | null = null,\r\n returnType: Type | null = null,\r\n thisType: Type | null = null\r\n ) {\r\n this.parameterTypes = parameterTypes ? parameterTypes : [];\r\n this.parameterNames = null;\r\n this.requiredParameters = 0;\r\n this.returnType = returnType ? returnType : Type.void;\r\n this.thisType = thisType;\r\n this.hasRest = false;\r\n }\r\n\r\n /** Gets the known or, alternatively, generic parameter name at the specified index. */\r\n getParameterName(index: i32): string {\r\n var parameterNames = this.parameterNames;\r\n return parameterNames && parameterNames.length > index\r\n ? parameterNames[index]\r\n : getGenericParameterName(index);\r\n }\r\n\r\n /** Tests if a value of this function type is assignable to a target of the specified function type. */\r\n isAssignableTo(target: Signature): bool {\r\n // TODO: maybe cache results?\r\n\r\n // check `this` type\r\n var thisThisType = this.thisType;\r\n var targetThisType = target.thisType;\r\n if (thisThisType) {\r\n if (!(targetThisType && thisThisType.isAssignableTo(targetThisType))) {\r\n return false;\r\n }\r\n } else if (targetThisType) {\r\n return false;\r\n }\r\n\r\n // check rest parameter\r\n if (this.hasRest != target.hasRest) {\r\n return false; // TODO\r\n }\r\n\r\n // check parameter types\r\n var thisParameterTypes = this.parameterTypes;\r\n var targetParameterTypes = target.parameterTypes;\r\n var numParameters = thisParameterTypes.length;\r\n if (numParameters != targetParameterTypes.length) {\r\n return false;\r\n }\r\n for (let i = 0; i < numParameters; ++i) {\r\n let thisParameterType = thisParameterTypes[i];\r\n let targetParameterType = targetParameterTypes[i];\r\n if (!thisParameterType.isAssignableTo(targetParameterType)) {\r\n return false;\r\n }\r\n }\r\n\r\n // check return type\r\n return this.returnType.isAssignableTo(target.returnType);\r\n }\r\n\r\n /** Converts this signature to a function type string. */\r\n toSignatureString(): string {\r\n var sb = [];\r\n var thisType = this.thisType;\r\n if (thisType) {\r\n sb.push(thisType.toSignatureString());\r\n }\r\n var parameterTypes = this.parameterTypes;\r\n for (let i = 0, k = parameterTypes.length; i < k; ++i) {\r\n sb.push(parameterTypes[i].toSignatureString());\r\n }\r\n sb.push(this.returnType.toSignatureString());\r\n return sb.join(\"\");\r\n }\r\n\r\n /** Converts this signature to a string. */\r\n toString(includeThis: bool = false): string {\r\n var sb = new Array();\r\n sb.push(\"(\");\r\n var index = 0;\r\n var thisType = this.thisType;\r\n if (thisType) {\r\n if (includeThis) {\r\n sb.push(\"this: \");\r\n sb.push(thisType.toString());\r\n index = 1;\r\n }\r\n }\r\n var parameters = this.parameterTypes;\r\n var numParameters = parameters.length;\r\n if (numParameters) {\r\n let names = this.parameterNames;\r\n let numNames = names ? names.length : 0;\r\n let optionalStart = this.requiredParameters;\r\n let restIndex = this.hasRest ? numParameters - 1 : -1;\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n if (index) sb.push(\", \");\r\n if (i == restIndex) sb.push(\"...\");\r\n if (i < numNames) {\r\n sb.push((names)[i]);\r\n } else {\r\n sb.push(getGenericParameterName(i));\r\n }\r\n if (i >= optionalStart && i != restIndex) {\r\n sb.push(\"?: \");\r\n } else {\r\n sb.push(\": \");\r\n }\r\n sb.push(parameters[i].toString());\r\n }\r\n }\r\n sb.push(\") => \");\r\n sb.push(this.returnType.toString());\r\n return sb.join(\"\");\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n// Cached generic parameter names used where names are unknown.\r\nvar cachedGenericParameterNames: string[] | null = null;\r\n\r\n/** Gets the cached generic parameter name for the specified index. */\r\nexport function getGenericParameterName(index: i32): string {\r\n if (!cachedGenericParameterNames) cachedGenericParameterNames = [];\r\n for (let i = cachedGenericParameterNames.length; i <= index; ++i) {\r\n cachedGenericParameterNames.push(\"arg$\" + i.toString(10));\r\n }\r\n return cachedGenericParameterNames[index - 1];\r\n}\r\n","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 FunctionTypeRef\r\n} from \"./module\";\r\n\r\nimport {\r\n Program,\r\n ClassPrototype,\r\n Class,\r\n Element,\r\n ElementKind,\r\n Enum,\r\n Field,\r\n FunctionPrototype,\r\n Function,\r\n FunctionTarget,\r\n Global,\r\n Local,\r\n Namespace,\r\n EnumValue,\r\n Property,\r\n VariableLikeElement,\r\n FlowFlags,\r\n ElementFlags,\r\n ConstantValueKind,\r\n\r\n PATH_DELIMITER,\r\n LIBRARY_PREFIX\r\n} from \"./program\";\r\n\r\nimport {\r\n Token\r\n} 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 Signature,\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[] = [];\r\n\r\n /** Current function in compilation. */\r\n currentFunction: Function;\r\n /** Current enum in compilation. */\r\n currentEnum: Enum | null = null;\r\n /** Current type in compilation. */\r\n currentType: Type = Type.void;\r\n\r\n /** Counting memory offset. */\r\n memoryOffset: I64;\r\n /** Memory segments being compiled. */\r\n memorySegments: MemorySegment[] = new Array();\r\n /** Map of already compiled static string segments. */\r\n stringSegments: Map = new Map();\r\n\r\n /** Function table being compiled. */\r\n functionTable: Function[] = new Array();\r\n\r\n /** Already processed file names. */\r\n files: Set = new Set();\r\n\r\n /** Compiles a {@link Program} to a {@link Module} using the specified options. */\r\n static compile(program: Program, options: Options | null = null): Module {\r\n return new Compiler(program, options).compile();\r\n }\r\n\r\n /** Constructs a new compiler for a {@link Program} using the specified options. */\r\n constructor(program: Program, options: Options | null = null) {\r\n super(program.diagnostics);\r\n this.program = program;\r\n if (!options) options = new Options();\r\n this.options = options;\r\n this.memoryOffset = i64_new(\r\n max(options.memoryBase, options.usizeType.byteSize) // leave space for `null`\r\n );\r\n this.module = Module.create();\r\n }\r\n\r\n /** Performs compilation of the underlying {@link Program} to a {@link Module}. */\r\n compile(): Module {\r\n var options = this.options;\r\n var module = this.module;\r\n var program = this.program;\r\n\r\n // initialize lookup maps, built-ins, imports, exports, etc.\r\n program.initialize(options);\r\n\r\n // set up the start function wrapping top-level statements, of all files.\r\n var startFunctionPrototype = assert(program.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 new Signature([], Type.void)\r\n );\r\n startFunctionInstance.set(ElementFlags.START);\r\n this.startFunction = startFunctionInstance;\r\n this.currentFunction = startFunctionInstance;\r\n\r\n // compile entry file(s) while traversing to reachable elements\r\n var sources = program.sources;\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n if (sources[i].isEntry) {\r\n this.compileSource(sources[i]);\r\n }\r\n }\r\n\r\n // compile the start function if not empty\r\n var startFunctionBody = this.startFunctionBody;\r\n if (startFunctionBody.length) {\r\n let typeRef = this.ensureFunctionType(startFunctionInstance.signature);\r\n let funcRef: FunctionRef;\r\n module.setStart(\r\n funcRef = module.addFunction(\r\n startFunctionInstance.internalName,\r\n typeRef,\r\n typesToNativeTypes(startFunctionInstance.additionalLocals),\r\n module.createBlock(null, startFunctionBody)\r\n )\r\n );\r\n startFunctionInstance.finalize(module, funcRef);\r\n }\r\n\r\n // set up static memory segments and the heap base pointer\r\n if (!options.noMemory) {\r\n let memoryOffset = this.memoryOffset;\r\n memoryOffset = i64_align(memoryOffset, options.usizeType.byteSize);\r\n this.memoryOffset = memoryOffset;\r\n if (options.isWasm64) {\r\n module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I64,\r\n false,\r\n module.createI64(i64_low(memoryOffset), i64_high(memoryOffset))\r\n );\r\n } else {\r\n module.addGlobal(\r\n \"HEAP_BASE\",\r\n NativeType.I32,\r\n false,\r\n module.createI32(i64_low(memoryOffset))\r\n );\r\n }\r\n\r\n // determine initial page size\r\n let pages = i64_shr_u(i64_align(memoryOffset, 0x10000), i64_new(16, 0));\r\n module.setMemory(\r\n i64_low(pages),\r\n Module.MAX_MEMORY_WASM32, // TODO: not WASM64 compatible yet\r\n this.memorySegments,\r\n options.target,\r\n \"memory\"\r\n );\r\n }\r\n\r\n // import memory if requested\r\n if (options.importMemory) {\r\n module.addMemoryImport(\"0\", \"env\", \"memory\");\r\n }\r\n\r\n // set up function table\r\n var functionTable = this.functionTable;\r\n var functionTableSize = functionTable.length;\r\n if (functionTableSize) {\r\n let entries = new Array(functionTableSize);\r\n for (let i = 0; i < functionTableSize; ++i) {\r\n entries[i] = functionTable[i].ref;\r\n }\r\n module.setFunctionTable(entries);\r\n }\r\n\r\n return module;\r\n }\r\n\r\n // sources\r\n\r\n compileSourceByPath(normalizedPathWithoutExtension: string, reportNode: Node): void {\r\n var sources = this.program.sources;\r\n\r\n // try file.ts\r\n var expected = normalizedPathWithoutExtension + \".ts\";\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n let source = sources[i];\r\n if (source.normalizedPath == expected) {\r\n this.compileSource(source);\r\n return;\r\n }\r\n }\r\n\r\n // try file/index.ts\r\n expected = normalizedPathWithoutExtension + \"/index.ts\";\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n let source = sources[i];\r\n if (source.normalizedPath == expected) {\r\n this.compileSource(source);\r\n return;\r\n }\r\n }\r\n\r\n // try (lib)/file.ts\r\n expected = LIBRARY_PREFIX + normalizedPathWithoutExtension + \".ts\";\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n let source = sources[i];\r\n if (source.normalizedPath == expected) {\r\n this.compileSource(source);\r\n return;\r\n }\r\n }\r\n\r\n this.error(\r\n DiagnosticCode.File_0_not_found,\r\n reportNode.range, normalizedPathWithoutExtension\r\n );\r\n }\r\n\r\n compileSource(source: Source): void {\r\n var files = this.files;\r\n var normalizedPath = source.normalizedPath;\r\n if (files.has(normalizedPath)) return;\r\n files.add(normalizedPath);\r\n\r\n // compile top-level statements\r\n var noTreeShaking = this.options.noTreeShaking;\r\n var isEntry = source.isEntry;\r\n var startFunction = this.startFunction;\r\n var startFunctionBody = this.startFunctionBody;\r\n var statements = source.statements;\r\n for (let i = 0, k = statements.length; i < k; ++i) {\r\n let statement = statements[i];\r\n switch (statement.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (\r\n noTreeShaking ||\r\n (isEntry && hasModifier(ModifierKind.EXPORT, (statement).modifiers))\r\n ) &&\r\n !(statement).isGeneric\r\n ) {\r\n this.compileClassDeclaration(statement, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n if (\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 let variableInit = this.compileVariableStatement(statement);\r\n if (variableInit) startFunctionBody.push(variableInit);\r\n break;\r\n }\r\n case NodeKind.EXPORT: {\r\n if ((statement).normalizedPath != null) {\r\n this.compileSourceByPath(\r\n (statement).normalizedPath,\r\n (statement).path\r\n );\r\n }\r\n if (noTreeShaking || isEntry) {\r\n this.compileExportStatement(statement);\r\n }\r\n break;\r\n }\r\n default: { // otherwise a top-level statement that is part of the start function's body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = startFunction;\r\n startFunctionBody.push(this.compileStatement(statement));\r\n this.currentFunction = previousFunction;\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // globals\r\n\r\n compileGlobalDeclaration(declaration: VariableDeclaration): Global | null {\r\n // look up the initialized program element\r\n var element = assert(this.program.elements.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.GLOBAL);\r\n if (!this.compileGlobal(element)) return null; // reports\r\n return element;\r\n }\r\n\r\n compileGlobal(global: Global): bool {\r\n if (global.is(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 module = this.module;\r\n var declaration = global.declaration;\r\n var initExpr: ExpressionRef = 0;\r\n\r\n if (global.type == Type.void) { // type is void if not yet resolved or not annotated\r\n\r\n // resolve now if annotated\r\n if (declaration.type) {\r\n let resolvedType = this.program.resolveType(declaration.type); // reports\r\n if (!resolvedType) return false;\r\n if (resolvedType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.type.range\r\n );\r\n return false;\r\n }\r\n global.type = resolvedType;\r\n\r\n // infer from initializer if not annotated\r\n } else if (declaration.initializer) { // infer type using void/NONE for literal inference\r\n initExpr = this.compileExpression( // reports\r\n declaration.initializer,\r\n Type.void,\r\n ConversionKind.NONE\r\n );\r\n if (this.currentType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.initializer.range, this.currentType.toString(), \"\"\r\n );\r\n return false;\r\n }\r\n global.type = this.currentType;\r\n\r\n // must either be annotated or have an initializer\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.name.range.atEnd\r\n );\r\n return false;\r\n }\r\n }\r\n\r\n var nativeType = global.type.toNativeType();\r\n\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 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(module);\r\n }\r\n }\r\n\r\n var internalName = global.internalName;\r\n\r\n if (initializeInStart) { // initialize to mutable zero and set the actual value in start\r\n module.addGlobal(internalName, nativeType, true, global.type.toNativeZero(module));\r\n this.startFunctionBody.push(module.createSetGlobal(internalName, initExpr));\r\n\r\n } else { // compile as-is\r\n\r\n if (global.is(ElementFlags.CONSTANT)) {\r\n let exprType = _BinaryenExpressionGetType(initExpr);\r\n switch (exprType) {\r\n case NativeType.I32: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(_BinaryenConstGetValueI32(initExpr), 0);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(\r\n _BinaryenConstGetValueI64Low(initExpr),\r\n _BinaryenConstGetValueI64High(initExpr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = _BinaryenConstGetValueF32(initExpr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n global.constantValueKind = ConstantValueKind.FLOAT;\r\n global.constantFloatValue = _BinaryenConstGetValueF64(initExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n global.declaration.range\r\n );\r\n global.constantValueKind = ConstantValueKind.INTEGER;\r\n global.constantIntegerValue = i64_new(0);\r\n break;\r\n }\r\n }\r\n global.set(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 module.addGlobal(internalName, nativeType, false, initExpr);\r\n }\r\n if (declaration.range.source.isEntry && declaration.isTopLevelExport) {\r\n module.addGlobalExport(global.internalName, declaration.programLevelInternalName);\r\n }\r\n\r\n } else /* mutable */ {\r\n module.addGlobal(internalName, nativeType, !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 = assert(this.program.elements.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.ENUM);\r\n if (!this.compileEnum(element)) return null;\r\n return element;\r\n }\r\n\r\n compileEnum(element: Enum): bool {\r\n if (element.is(ElementFlags.COMPILED)) return true;\r\n element.set(ElementFlags.COMPILED);\r\n\r\n var module = this.module;\r\n this.currentEnum = element;\r\n var previousValue: EnumValue | null = null;\r\n\r\n if (element.members) {\r\n for (let member of element.members.values()) {\r\n if (member.kind != ElementKind.ENUMVALUE) continue; // happens if an enum is also a namespace\r\n let initInStart = false;\r\n let val = member;\r\n let valueDeclaration = val.declaration;\r\n val.set(ElementFlags.COMPILED);\r\n if (val.is(ElementFlags.INLINED)) {\r\n if (element.declaration.isTopLevelExport) {\r\n module.addGlobal(\r\n val.internalName,\r\n NativeType.I32,\r\n false, // constant\r\n module.createI32(val.constantValue)\r\n );\r\n }\r\n } else {\r\n let initExpr: ExpressionRef;\r\n if (valueDeclaration.value) {\r\n initExpr = this.compileExpression(valueDeclaration.value, Type.i32);\r\n if (_BinaryenExpressionGetId(initExpr) != ExpressionId.Const) {\r\n initExpr = this.precomputeExpressionRef(initExpr);\r\n if (_BinaryenExpressionGetId(initExpr) != ExpressionId.Const) {\r\n if (element.is(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 = module.createI32(0);\r\n } else if (previousValue.is(ElementFlags.INLINED)) {\r\n initExpr = module.createI32(previousValue.constantValue + 1);\r\n } else {\r\n // in TypeScript this errors with TS1061, but actually we can do:\r\n initExpr = module.createBinary(BinaryOp.AddI32,\r\n module.createGetGlobal(previousValue.internalName, NativeType.I32),\r\n module.createI32(1)\r\n );\r\n if (element.is(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 module.addGlobal(\r\n val.internalName,\r\n NativeType.I32,\r\n true, // mutable\r\n module.createI32(0)\r\n );\r\n this.startFunctionBody.push(module.createSetGlobal(val.internalName, initExpr));\r\n } else {\r\n module.addGlobal(val.internalName, NativeType.I32, false, initExpr);\r\n if (_BinaryenExpressionGetType(initExpr) == NativeType.I32) {\r\n val.constantValue = _BinaryenConstGetValueI32(initExpr);\r\n val.set(ElementFlags.INLINED);\r\n } else {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n valueDeclaration.range\r\n );\r\n val.constantValue = 0;\r\n }\r\n }\r\n }\r\n previousValue = val;\r\n\r\n // export values if the enum is exported\r\n if (element.declaration.range.source.isEntry && element.declaration.isTopLevelExport) {\r\n if (member.is(ElementFlags.INLINED)) {\r\n module.addGlobalExport(member.internalName, member.internalName);\r\n } else if (valueDeclaration) {\r\n this.warning(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n valueDeclaration.range\r\n );\r\n }\r\n }\r\n }\r\n }\r\n this.currentEnum = null;\r\n return true;\r\n }\r\n\r\n // functions\r\n\r\n /** Compiles a function given its declaration. */\r\n compileFunctionDeclaration(\r\n declaration: FunctionDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null\r\n ): Function | null {\r\n var element = assert(this.program.elements.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.FUNCTION_PROTOTYPE);\r\n return this.compileFunctionUsingTypeArguments( // reports\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n (element).declaration.name\r\n );\r\n }\r\n\r\n /** Resolves the specified type arguments prior to compiling the resulting function instance. */\r\n compileFunctionUsingTypeArguments(\r\n prototype: FunctionPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null,\r\n reportNode: Node\r\n ): Function | null {\r\n var instance = prototype.resolveUsingTypeArguments( // reports\r\n typeArguments,\r\n contextualTypeArguments,\r\n reportNode\r\n );\r\n if (!(instance && this.compileFunction(instance))) return null;\r\n return instance;\r\n }\r\n\r\n /** Either reuses or creates the function type matching the specified signature. */\r\n private ensureFunctionType(signature: Signature): FunctionTypeRef {\r\n var parameters = signature.parameterTypes;\r\n var numParameters = parameters.length;\r\n var thisType = signature.thisType;\r\n var paramTypes: NativeType[];\r\n var index = 0;\r\n if (thisType) {\r\n paramTypes = new Array(1 + numParameters);\r\n paramTypes[0] = thisType.toNativeType();\r\n index = 1;\r\n } else {\r\n paramTypes = new Array(numParameters);\r\n }\r\n for (let i = 0; i < numParameters; ++i, ++index) {\r\n paramTypes[index] = signature.parameterTypes[i].toNativeType();\r\n }\r\n var resultType = signature.returnType.toNativeType();\r\n var module = this.module;\r\n var typeRef = module.getFunctionTypeBySignature(resultType, paramTypes);\r\n if (!typeRef) {\r\n typeRef = module.addFunctionType(signature.toSignatureString(), resultType, paramTypes);\r\n }\r\n return typeRef;\r\n }\r\n\r\n /** Compiles a readily resolved function instance. */\r\n compileFunction(instance: Function): bool {\r\n if (instance.is(ElementFlags.COMPILED)) return true;\r\n assert(!instance.is(ElementFlags.BUILTIN) || instance.simpleName == \"abort\");\r\n instance.set(ElementFlags.COMPILED);\r\n\r\n // check that modifiers are matching but still compile as-is\r\n var declaration = instance.prototype.declaration;\r\n var body = declaration.body;\r\n if (body) {\r\n if (instance.is(ElementFlags.DECLARED)) {\r\n this.error(\r\n DiagnosticCode.An_implementation_cannot_be_declared_in_ambient_contexts,\r\n declaration.name.range\r\n );\r\n }\r\n } else {\r\n if (!instance.is(ElementFlags.DECLARED)) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n declaration.name.range\r\n );\r\n }\r\n }\r\n\r\n var ref: FunctionRef;\r\n var typeRef = this.ensureFunctionType(instance.signature);\r\n var module = this.module;\r\n if (body) {\r\n\r\n // compile body\r\n let previousFunction = this.currentFunction;\r\n this.currentFunction = instance;\r\n let stmt = this.compileStatement(body);\r\n\r\n // make sure all branches return\r\n let allBranchesReturn = instance.flow.finalize();\r\n let returnType = instance.signature.returnType;\r\n if (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.signature.returnType, \"return type expected\").range\r\n );\r\n }\r\n this.currentFunction = previousFunction;\r\n\r\n // create the function\r\n ref = module.addFunction(\r\n instance.internalName,\r\n typeRef,\r\n typesToNativeTypes(instance.additionalLocals),\r\n stmt\r\n );\r\n\r\n } else {\r\n instance.set(ElementFlags.IMPORTED);\r\n\r\n // create the function import\r\n let namespace = instance.prototype.namespace;\r\n ref = module.addFunctionImport(\r\n instance.internalName,\r\n namespace\r\n ? namespace.simpleName\r\n : \"env\",\r\n instance.simpleName,\r\n typeRef\r\n );\r\n }\r\n\r\n // check module-level export\r\n if (declaration.range.source.isEntry && declaration.isTopLevelExport) {\r\n module.addFunctionExport(instance.internalName, declaration.name.text);\r\n }\r\n\r\n instance.finalize(module, ref);\r\n return true;\r\n }\r\n\r\n // namespaces\r\n\r\n compileNamespaceDeclaration(declaration: NamespaceDeclaration): void {\r\n var members = declaration.members;\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n switch (member.kind) {\r\n case NodeKind.CLASSDECLARATION: {\r\n if (\r\n (\r\n noTreeShaking ||\r\n hasModifier(ModifierKind.EXPORT, (member).modifiers)\r\n ) && !(member).isGeneric\r\n ) {\r\n this.compileClassDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.INTERFACEDECLARATION: {\r\n if (\r\n (\r\n noTreeShaking ||\r\n hasModifier(ModifierKind.EXPORT, (member).modifiers)\r\n ) && !(member).isGeneric\r\n ) {\r\n this.compileInterfaceDeclaration(member, []);\r\n }\r\n break;\r\n }\r\n case NodeKind.ENUMDECLARATION: {\r\n if (\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 let variableInit = this.compileVariableStatement(member, true);\r\n if (variableInit) this.startFunctionBody.push(variableInit);\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n member.range\r\n );\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n compileNamespace(ns: Namespace): void {\r\n if (!ns.members) return;\r\n\r\n var noTreeShaking = this.options.noTreeShaking;\r\n for (let element of ns.members.values()) {\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (\r\n (\r\n noTreeShaking ||\r\n (element).is(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\r\n // exports\r\n\r\n compileExportStatement(statement: ExportStatement): void {\r\n var module = this.module;\r\n var exports = this.program.exports;\r\n var members = statement.members;\r\n for (let i = 0, k = members.length; i < k; ++i) {\r\n let member = members[i];\r\n let internalExportName = (\r\n statement.range.source.internalPath +\r\n PATH_DELIMITER +\r\n member.externalName.text\r\n );\r\n let element = exports.get(internalExportName);\r\n if (!element) continue; // reported in Program#initialize\r\n switch (element.kind) {\r\n case ElementKind.CLASS_PROTOTYPE: {\r\n if (!(element).is(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 let functionInstance = this.compileFunctionUsingTypeArguments(\r\n element,\r\n [],\r\n null,\r\n (element).declaration.name\r\n );\r\n if (functionInstance) {\r\n let functionDeclaration = functionInstance.prototype.declaration;\r\n if (functionDeclaration && functionDeclaration.needsExplicitExport(member)) {\r\n module.addFunctionExport(functionInstance.internalName, member.externalName.text);\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (this.compileGlobal(element) && statement.range.source.isEntry) {\r\n let globalDeclaration = (element).declaration;\r\n if (globalDeclaration && globalDeclaration.needsExplicitExport(member)) {\r\n if ((element).is(ElementFlags.INLINED)) {\r\n module.addGlobalExport(element.internalName, member.externalName.text);\r\n } else {\r\n this.warning(\r\n DiagnosticCode.Cannot_export_a_mutable_global,\r\n member.range\r\n );\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case ElementKind.NAMESPACE: {\r\n this.compileNamespace(element);\r\n break;\r\n }\r\n }\r\n }\r\n }\r\n\r\n // classes\r\n\r\n compileClassDeclaration(\r\n declaration: ClassDeclaration,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n var element = assert(this.program.elements.get(declaration.fileLevelInternalName));\r\n assert(element.kind == ElementKind.CLASS_PROTOTYPE);\r\n this.compileClassUsingTypeArguments(\r\n element,\r\n typeArguments,\r\n contextualTypeArguments,\r\n alternativeReportNode\r\n );\r\n }\r\n\r\n compileClassUsingTypeArguments(\r\n prototype: ClassPrototype,\r\n typeArguments: TypeNode[],\r\n contextualTypeArguments: Map | null = null,\r\n alternativeReportNode: Node | null = null\r\n ): void {\r\n var instance = prototype.resolveUsingTypeArguments( // reports\r\n typeArguments,\r\n contextualTypeArguments,\r\n alternativeReportNode\r\n );\r\n if (!instance) return;\r\n this.compileClass(instance);\r\n }\r\n\r\n compileClass(instance: Class): bool {\r\n if (instance.is(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 // TODO\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n declaration.range\r\n );\r\n }\r\n\r\n // memory\r\n\r\n /** Adds a static memory segment with the specified data. */\r\n addMemorySegment(buffer: Uint8Array, alignment: i32 = 8): MemorySegment {\r\n var memoryOffset = i64_align(this.memoryOffset, alignment);\r\n var segment = MemorySegment.create(buffer, memoryOffset);\r\n this.memorySegments.push(segment);\r\n this.memoryOffset = i64_add(memoryOffset, i64_new(buffer.length, 0));\r\n return segment;\r\n }\r\n\r\n // function table\r\n\r\n /** Ensures that a table entry exists for the specified function and returns its index. */\r\n ensureFunctionTableEntry(func: Function): i32 {\r\n assert(func.is(ElementFlags.COMPILED));\r\n if (func.functionTableIndex >= 0) {\r\n return func.functionTableIndex;\r\n }\r\n var functionTable = this.functionTable;\r\n var index = functionTable.length;\r\n functionTable.push(func);\r\n func.functionTableIndex = index;\r\n return index;\r\n }\r\n\r\n // statements\r\n\r\n compileStatement(statement: Statement): ExpressionRef {\r\n var module = this.module;\r\n var expr: ExpressionRef;\r\n switch (statement.kind) {\r\n case NodeKind.BLOCK: {\r\n expr = this.compileBlockStatement(statement);\r\n break;\r\n }\r\n case NodeKind.BREAK: {\r\n expr = this.compileBreakStatement(statement);\r\n break;\r\n }\r\n case NodeKind.CONTINUE: {\r\n expr = this.compileContinueStatement(statement);\r\n break;\r\n }\r\n case NodeKind.DO: {\r\n expr = this.compileDoStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EMPTY: {\r\n expr = this.compileEmptyStatement(statement);\r\n break;\r\n }\r\n case NodeKind.EXPRESSION: {\r\n expr = this.compileExpressionStatement(statement);\r\n break;\r\n }\r\n case NodeKind.FOR: {\r\n expr = this.compileForStatement(statement);\r\n break;\r\n }\r\n case NodeKind.IF: {\r\n expr = this.compileIfStatement(statement);\r\n break;\r\n }\r\n case NodeKind.RETURN: {\r\n expr = this.compileReturnStatement(statement);\r\n break;\r\n }\r\n case NodeKind.SWITCH: {\r\n expr = this.compileSwitchStatement(statement);\r\n break;\r\n }\r\n case NodeKind.THROW: {\r\n expr = this.compileThrowStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TRY: {\r\n expr = this.compileTryStatement(statement);\r\n break;\r\n }\r\n case NodeKind.VARIABLE: {\r\n expr = this.compileVariableStatement(statement);\r\n if (!expr) expr = module.createNop();\r\n break;\r\n }\r\n case NodeKind.VOID: {\r\n expr = this.compileVoidStatement(statement);\r\n break;\r\n }\r\n case NodeKind.WHILE: {\r\n expr = this.compileWhileStatement(statement);\r\n break;\r\n }\r\n case NodeKind.TYPEDECLARATION: {\r\n // type declarations must be top-level because function bodies are evaluated when\r\n // reachaable only.\r\n if (this.currentFunction == this.startFunction) {\r\n return module.createNop();\r\n }\r\n // otherwise fall-through\r\n }\r\n default: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n if (this.options.sourceMap) {\r\n addDebugLocation(expr, statement.range, module, this.currentFunction);\r\n }\r\n return expr;\r\n }\r\n\r\n compileStatements(statements: Statement[]): ExpressionRef[] {\r\n var numStatements = statements.length;\r\n var stmts = new Array(numStatements);\r\n for (let i = 0; i < numStatements; ++i) {\r\n stmts[i] = this.compileStatement(statements[i]);\r\n }\r\n return stmts; // array of 0-es in noEmit-mode\r\n }\r\n\r\n compileBlockStatement(statement: BlockStatement): ExpressionRef {\r\n var statements = statement.statements;\r\n\r\n // NOTE that we could optimize this to a NOP if empty or unwrap a single\r\n // statement, but that's not what the source told us to do and left to the\r\n // optimizer.\r\n\r\n // Not actually a branch, but can contain its own scoped variables.\r\n var flow = this.currentFunction.flow.enterBranchOrScope();\r\n this.currentFunction.flow = flow;\r\n\r\n var stmt = this.module.createBlock(null, this.compileStatements(statements), NativeType.None);\r\n var stmtReturns = flow.is(FlowFlags.RETURNS);\r\n\r\n // Switch back to the parent flow\r\n flow = flow.leaveBranchOrScope();\r\n this.currentFunction.flow = flow;\r\n if (stmtReturns) {\r\n flow.set(FlowFlags.RETURNS);\r\n }\r\n return stmt;\r\n }\r\n\r\n compileBreakStatement(statement: BreakStatement): ExpressionRef {\r\n var module = this.module;\r\n if (statement.label) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.label.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n var flow = this.currentFunction.flow;\r\n var breakLabel = flow.breakLabel;\r\n if (breakLabel == null) {\r\n this.error(\r\n DiagnosticCode.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement,\r\n statement.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n flow.set(FlowFlags.POSSIBLY_BREAKS);\r\n return module.createBreak(breakLabel);\r\n }\r\n\r\n compileContinueStatement(statement: ContinueStatement): ExpressionRef {\r\n var module = this.module;\r\n var label = statement.label;\r\n if (label) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n label.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // Check if 'continue' is allowed here\r\n var flow = this.currentFunction.flow;\r\n var continueLabel = flow.continueLabel;\r\n if (continueLabel == null) {\r\n this.error(\r\n DiagnosticCode.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement,\r\n statement.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n flow.set(FlowFlags.POSSIBLY_CONTINUES);\r\n return module.createBreak(continueLabel);\r\n }\r\n\r\n compileDoStatement(statement: DoStatement): ExpressionRef {\r\n\r\n // A do statement does not initiate a new branch because it is executed at\r\n // least once, but has its own break and continue labels.\r\n var currentFunction = this.currentFunction;\r\n var label = currentFunction.enterBreakContext();\r\n var flow = currentFunction.flow;\r\n var previousBreakLabel = flow.breakLabel;\r\n var previousContinueLabel = flow.continueLabel;\r\n\r\n var breakLabel = \"break|\" + label;\r\n flow.breakLabel = breakLabel;\r\n var continueLabel = \"continue|\" + label;\r\n flow.continueLabel = continueLabel;\r\n\r\n var body = this.compileStatement(statement.statement);\r\n\r\n // Reset to the previous break and continue labels, if any.\r\n flow.breakLabel = previousBreakLabel;\r\n flow.continueLabel = previousContinueLabel;\r\n\r\n var module = this.module;\r\n var condition = makeIsTrueish(\r\n this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE),\r\n this.currentType,\r\n module\r\n );\r\n\r\n this.currentFunction.leaveBreakContext();\r\n\r\n return module.createBlock(breakLabel, [\r\n module.createLoop(continueLabel,\r\n module.createBlock(null, [\r\n body,\r\n module.createBreak(continueLabel, 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 currentFunction = this.currentFunction;\r\n var context = currentFunction.enterBreakContext();\r\n var flow = currentFunction.flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n var breakLabel = flow.breakLabel = \"break|\" + context;\r\n flow.breakLabel = breakLabel;\r\n var continueLabel = \"continue|\" + context;\r\n flow.continueLabel = continueLabel;\r\n\r\n // Compile in correct order\r\n var module = this.module;\r\n var initializer = statement.initializer\r\n ? this.compileStatement(statement.initializer)\r\n : module.createNop();\r\n var condition = statement.condition\r\n ? this.compileExpression(statement.condition, Type.i32)\r\n : module.createI32(1);\r\n var incrementor = statement.incrementor\r\n ? this.compileExpression(statement.incrementor, Type.void)\r\n : module.createNop();\r\n var body = this.compileStatement(statement.statement);\r\n var alwaysReturns = !statement.condition && 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 flow = flow.leaveBranchOrScope();\r\n currentFunction.flow = flow;\r\n currentFunction.leaveBreakContext();\r\n\r\n var expr = module.createBlock(breakLabel, [\r\n initializer,\r\n module.createLoop(continueLabel, module.createBlock(null, [\r\n module.createIf(condition, module.createBlock(null, [\r\n body,\r\n incrementor,\r\n module.createBreak(continueLabel)\r\n ], NativeType.None))\r\n ], NativeType.None))\r\n ], NativeType.None);\r\n\r\n // If the loop is guaranteed to run and return, propagate that and append a hint\r\n if (alwaysReturns) {\r\n flow.set(FlowFlags.RETURNS);\r\n expr = module.createBlock(null, [\r\n expr,\r\n module.createUnreachable()\r\n ]);\r\n }\r\n return expr;\r\n }\r\n\r\n compileIfStatement(statement: IfStatement): ExpressionRef {\r\n var module = this.module;\r\n\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 module\r\n );\r\n\r\n // Each arm initiates a branch\r\n var currentFunction = this.currentFunction;\r\n var flow = currentFunction.flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n var ifTrueExpr = this.compileStatement(statement.ifTrue);\r\n var ifTrueReturns = flow.is(FlowFlags.RETURNS);\r\n flow = flow.leaveBranchOrScope();\r\n currentFunction.flow = flow;\r\n\r\n var ifFalseExpr: ExpressionRef = 0;\r\n var ifFalseReturns = false;\r\n var ifFalse = statement.ifFalse;\r\n if (ifFalse) {\r\n flow = flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n ifFalseExpr = this.compileStatement(ifFalse);\r\n ifFalseReturns = flow.is(FlowFlags.RETURNS);\r\n flow = flow.leaveBranchOrScope();\r\n currentFunction.flow = flow;\r\n }\r\n if (ifTrueReturns && ifFalseReturns) { // not necessary to append a hint\r\n flow.set(FlowFlags.RETURNS);\r\n }\r\n return module.createIf(condition, ifTrueExpr, ifFalseExpr);\r\n }\r\n\r\n compileReturnStatement(statement: ReturnStatement): ExpressionRef {\r\n var currentFunction = this.currentFunction;\r\n var expression: ExpressionRef = 0;\r\n if (statement.value) {\r\n expression = this.compileExpression(\r\n statement.value,\r\n currentFunction.signature.returnType\r\n );\r\n }\r\n\r\n // Remember that this flow returns\r\n currentFunction.flow.set(FlowFlags.RETURNS);\r\n\r\n return this.module.createReturn(expression);\r\n }\r\n\r\n compileSwitchStatement(statement: SwitchStatement): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // Everything within a switch uses the same break context\r\n var context = currentFunction.enterBreakContext();\r\n\r\n // introduce a local for evaluating the condition (exactly once)\r\n var tempLocal = currentFunction.getTempLocal(Type.u32);\r\n var tempLocalIndex = tempLocal.index;\r\n var cases = statement.cases;\r\n var numCases = cases.length;\r\n\r\n // Prepend initializer to inner block. Does not initiate a new branch, yet.\r\n var breaks = new Array(1 + numCases);\r\n breaks[0] = module.createSetLocal( // initializer\r\n tempLocalIndex,\r\n this.compileExpression(statement.condition, Type.u32)\r\n );\r\n\r\n // make one br_if per (possibly dynamic) labeled case (binaryen optimizes to br_table where possible)\r\n var breakIndex = 1;\r\n var defaultIndex = -1;\r\n for (let i = 0; i < numCases; ++i) {\r\n let case_ = cases[i];\r\n let label = case_.label;\r\n if (label) {\r\n breaks[breakIndex++] = module.createBreak(\"case\" + i.toString(10) + \"|\" + context,\r\n module.createBinary(BinaryOp.EqI32,\r\n module.createGetLocal(tempLocalIndex, NativeType.I32),\r\n this.compileExpression(label, Type.i32)\r\n )\r\n );\r\n } else {\r\n defaultIndex = i;\r\n }\r\n }\r\n\r\n currentFunction.freeTempLocal(tempLocal);\r\n\r\n // otherwise br to default respectively out of the switch if there is no default case\r\n breaks[breakIndex] = module.createBreak((defaultIndex >= 0\r\n ? \"case\" + defaultIndex.toString(10)\r\n : \"break\"\r\n ) + \"|\" + context);\r\n\r\n // nest blocks in order\r\n var currentBlock = module.createBlock(\"case0|\" + context, breaks, NativeType.None);\r\n var alwaysReturns = true;\r\n for (let i = 0; i < numCases; ++i) {\r\n let case_ = cases[i];\r\n let statements = case_.statements;\r\n let numStatements = statements.length;\r\n let body = new Array(1 + numStatements);\r\n body[0] = currentBlock;\r\n\r\n // Each switch case initiates a new branch\r\n let flow = currentFunction.flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n let breakLabel = \"break|\" + context;\r\n flow.breakLabel = breakLabel;\r\n\r\n let fallsThrough = i != numCases - 1;\r\n let nextLabel = !fallsThrough ? breakLabel : \"case\" + (i + 1).toString(10) + \"|\" + context;\r\n for (let j = 0; j < numStatements; ++j) {\r\n body[j + 1] = this.compileStatement(statements[j]);\r\n }\r\n if (!(fallsThrough || flow.is(FlowFlags.RETURNS))) {\r\n alwaysReturns = false; // ignore fall-throughs\r\n }\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.leaveBranchOrScope();\r\n\r\n currentBlock = module.createBlock(nextLabel, body, NativeType.None);\r\n }\r\n currentFunction.leaveBreakContext();\r\n\r\n // If the switch has a default and always returns, propagate that\r\n if (defaultIndex >= 0 && alwaysReturns) {\r\n 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 var flow = this.currentFunction.flow;\r\n\r\n // Remember that this branch possibly throws\r\n 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 flow.set(FlowFlags.RETURNS);\r\n\r\n // TODO: requires exception-handling spec.\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileTryStatement(statement: TryStatement): ExpressionRef {\r\n // TODO\r\n // can't yet support something like: try { return ... } finally { ... }\r\n // worthwhile to investigate lowering returns to block results (here)?\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n statement.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n /**\r\n * Compiles a variable statement. Returns `0` if an initializer is not\r\n * necessary.\r\n */\r\n compileVariableStatement(statement: VariableStatement, isKnownGlobal: bool = false): ExpressionRef {\r\n var program = this.program;\r\n var currentFunction = this.currentFunction;\r\n var declarations = statement.declarations;\r\n var numDeclarations = declarations.length;\r\n\r\n // top-level variables and constants become globals\r\n if (isKnownGlobal || (\r\n currentFunction == this.startFunction &&\r\n statement.parent && statement.parent.kind == NodeKind.SOURCE\r\n )) {\r\n // NOTE that the above condition also covers top-level variables declared with 'let', even\r\n // though such variables could also become start function locals if, and only if, not used\r\n // within any function declared in the same source, which is unknown at this point. the only\r\n // efficient way to deal with this would be to keep track of all occasions it is used and\r\n // replace these instructions afterwards, dynamically. (TOOD: what about a Binaryen pass?)\r\n for (let i = 0; i < numDeclarations; ++i) {\r\n this.compileGlobalDeclaration(declarations[i]);\r\n }\r\n return 0;\r\n }\r\n\r\n // other variables become locals\r\n var initializers = new Array();\r\n for (let i = 0; i < numDeclarations; ++i) {\r\n let declaration = declarations[i];\r\n let name = declaration.name.text;\r\n let type: Type | null = null;\r\n let init: ExpressionRef = 0;\r\n if (declaration.type) {\r\n type = program.resolveType( // reports\r\n declaration.type,\r\n currentFunction.contextualTypeArguments\r\n );\r\n if (!type) continue;\r\n if (declaration.initializer) {\r\n init = this.compileExpression(declaration.initializer, type); // reports\r\n }\r\n } else if (declaration.initializer) { // infer type using void/NONE for proper literal inference\r\n init = this.compileExpression( // reports\r\n declaration.initializer,\r\n Type.void,\r\n ConversionKind.NONE\r\n );\r\n if (this.currentType == Type.void) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n declaration.range, this.currentType.toString(), \"\"\r\n );\r\n continue;\r\n }\r\n type = this.currentType;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n declaration.name.range.atEnd\r\n );\r\n continue;\r\n }\r\n if (hasModifier(ModifierKind.CONST, declaration.modifiers)) {\r\n if (init) {\r\n init = this.precomputeExpressionRef(init);\r\n if (_BinaryenExpressionGetId(init) == ExpressionId.Const) {\r\n let local = new Local(program, name, -1, type);\r\n switch (_BinaryenExpressionGetType(init)) {\r\n case NativeType.I32: {\r\n local = local.withConstantIntegerValue(_BinaryenConstGetValueI32(init), 0);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n local = local.withConstantIntegerValue(\r\n _BinaryenConstGetValueI64Low(init),\r\n _BinaryenConstGetValueI64High(init)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n local = local.withConstantFloatValue(_BinaryenConstGetValueF32(init));\r\n break;\r\n }\r\n case NativeType.F64: {\r\n local = local.withConstantFloatValue(_BinaryenConstGetValueF64(init));\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n declaration.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n // Create a virtual local that doesn't actually exist in WebAssembly\r\n let scopedLocals = currentFunction.flow.scopedLocals;\r\n if (!scopedLocals) currentFunction.flow.scopedLocals = scopedLocals = new Map();\r\n else if (scopedLocals.has(name)) {\r\n this.error(\r\n DiagnosticCode.Duplicate_identifier_0,\r\n declaration.name.range, name\r\n );\r\n return 0;\r\n }\r\n scopedLocals.set(name, local);\r\n return 0;\r\n } else {\r\n this.warning(\r\n DiagnosticCode.Compiling_constant_with_non_constant_initializer_as_mutable,\r\n declaration.range\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._const_declarations_must_be_initialized,\r\n declaration.range\r\n );\r\n }\r\n }\r\n if (hasModifier(ModifierKind.LET, declaration.modifiers)) { // here: not top-level\r\n currentFunction.flow.addScopedLocal(name, type, declaration.name); // reports\r\n } else {\r\n currentFunction.addLocal(type, name); // reports\r\n }\r\n if (init) {\r\n initializers.push(this.compileAssignmentWithValue(declaration.name, init));\r\n }\r\n }\r\n return initializers.length // we can unwrap these here because the\r\n ? initializers.length == 1 // source didn't tell us exactly what to do\r\n ? initializers[0]\r\n : this.module.createBlock(null, initializers, NativeType.None)\r\n : 0;\r\n }\r\n\r\n compileVoidStatement(statement: VoidStatement): ExpressionRef {\r\n return this.compileExpression(statement.expression, Type.void, ConversionKind.EXPLICIT, false);\r\n }\r\n\r\n compileWhileStatement(statement: WhileStatement): ExpressionRef {\r\n var module = this.module;\r\n\r\n // The condition does not yet initialize a branch\r\n var condition = makeIsTrueish(\r\n this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE),\r\n this.currentType,\r\n module\r\n );\r\n\r\n // Statements initiate a new branch with its own break context\r\n var currentFunction = this.currentFunction;\r\n var label = currentFunction.enterBreakContext();\r\n var flow = currentFunction.flow.enterBranchOrScope();\r\n currentFunction.flow = flow;\r\n var breakLabel = \"break|\" + label;\r\n flow.breakLabel = breakLabel;\r\n var continueLabel = \"continue|\" + label;\r\n flow.continueLabel = continueLabel;\r\n\r\n var body = this.compileStatement(statement.statement);\r\n var alwaysReturns = false && flow.is(FlowFlags.RETURNS);\r\n // TODO: evaluate possible always-true conditions\r\n\r\n // Switch back to the parent flow\r\n currentFunction.flow = flow.leaveBranchOrScope();\r\n currentFunction.leaveBreakContext();\r\n\r\n var expr = module.createBlock(breakLabel, [\r\n module.createLoop(continueLabel,\r\n module.createIf(condition, module.createBlock(null, [\r\n body,\r\n module.createBreak(continueLabel)\r\n ], NativeType.None))\r\n )\r\n ], NativeType.None);\r\n\r\n // If the loop is guaranteed to run and return, propagate that and append a hint\r\n if (alwaysReturns) {\r\n expr = module.createBlock(null, [\r\n expr,\r\n module.createUnreachable()\r\n ]);\r\n }\r\n return expr;\r\n }\r\n\r\n // expressions\r\n\r\n /**\r\n * Compiles the value of an inlined constant element.\r\n * @param retainType If true, the annotated type of the constant is retained. Otherwise, the value\r\n * is precomputed according to context.\r\n */\r\n compileInlineConstant(\r\n element: VariableLikeElement,\r\n contextualType: Type,\r\n retainType: bool\r\n ): ExpressionRef {\r\n assert(element.is(ElementFlags.INLINED));\r\n var type = element.type;\r\n switch (\r\n !retainType &&\r\n type.is(TypeFlags.INTEGER) &&\r\n contextualType.is(TypeFlags.INTEGER) &&\r\n type.size < contextualType.size\r\n ? (this.currentType = contextualType).kind // essentially precomputes a (sign-)extension\r\n : (this.currentType = type).kind\r\n ) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: {\r\n let shift = type.computeSmallIntegerShift(Type.i32);\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue) << shift >> shift\r\n : 0\r\n );\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n let mask = element.type.computeSmallIntegerMask(Type.i32);\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue) & mask\r\n : 0\r\n );\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue)\r\n : 0\r\n );\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n if (!element.program.options.isWasm64) {\r\n return this.module.createI32(\r\n element.constantValueKind == ConstantValueKind.INTEGER\r\n ? i64_low(element.constantIntegerValue)\r\n : 0\r\n );\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return element.constantValueKind == ConstantValueKind.INTEGER\r\n ? this.module.createI64(\r\n i64_low(element.constantIntegerValue),\r\n i64_high(element.constantIntegerValue)\r\n )\r\n : this.module.createI64(0);\r\n }\r\n case TypeKind.F32: {\r\n return this.module.createF32((element).constantFloatValue);\r\n }\r\n case TypeKind.F64: {\r\n return this.module.createF64((element).constantFloatValue);\r\n }\r\n default: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n element.declaration.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n }\r\n\r\n compileExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind = ConversionKind.IMPLICIT,\r\n wrapSmallIntegers: bool = true\r\n ): ExpressionRef {\r\n this.currentType = contextualType;\r\n\r\n var expr: ExpressionRef;\r\n switch (expression.kind) {\r\n case NodeKind.ASSERTION: {\r\n expr = this.compileAssertionExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.BINARY: {\r\n expr = this.compileBinaryExpression(expression, contextualType, wrapSmallIntegers);\r\n break;\r\n }\r\n case NodeKind.CALL: {\r\n expr = this.compileCallExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.COMMA: {\r\n expr = this.compileCommaExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.ELEMENTACCESS: {\r\n expr = this.compileElementAccessExpression(expression, contextualType);\r\n break;\r\n }\r\n case NodeKind.FUNCTION:\r\n 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 assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = this.module.createUnreachable();\r\n break;\r\n }\r\n }\r\n\r\n var currentType = this.currentType;\r\n if (conversionKind != ConversionKind.NONE && currentType != contextualType) {\r\n expr = this.convertExpression(expr, currentType, contextualType, conversionKind, expression);\r\n this.currentType = contextualType;\r\n }\r\n\r\n if (this.options.sourceMap) {\r\n addDebugLocation(expr, expression.range, this.module, this.currentFunction);\r\n }\r\n return expr;\r\n }\r\n\r\n compileExpressionRetainType(\r\n expression: Expression,\r\n contextualType: Type,\r\n wrapSmallIntegers: bool = true\r\n ): ExpressionRef {\r\n return this.compileExpression(\r\n expression,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n wrapSmallIntegers\r\n );\r\n }\r\n\r\n precomputeExpression(\r\n expression: Expression,\r\n contextualType: Type,\r\n conversionKind: ConversionKind = ConversionKind.IMPLICIT\r\n ): ExpressionRef {\r\n return this.precomputeExpressionRef(this.compileExpression(expression, contextualType, conversionKind));\r\n }\r\n\r\n precomputeExpressionRef(expr: ExpressionRef): ExpressionRef {\r\n var module = this.module;\r\n var type = this.currentType;\r\n var nativeType = type.toNativeType();\r\n var typeRef = module.getFunctionTypeBySignature(nativeType, null);\r\n var typeRefAdded = false;\r\n if (!typeRef) {\r\n typeRef = module.addFunctionType(type.toSignatureString(), nativeType, null);\r\n typeRefAdded = true;\r\n }\r\n var funcRef = module.addFunction(\"__precompute\", typeRef, null, expr);\r\n module.runPasses([ \"precompute\" ], funcRef);\r\n var ret = _BinaryenFunctionGetBody(funcRef);\r\n module.removeFunction(\"__precompute\");\r\n if (typeRefAdded) {\r\n // TODO: also remove the function type somehow if no longer used or make the C-API accept\r\n // a `null` typeRef, using an implicit type.\r\n }\r\n return ret;\r\n }\r\n\r\n convertExpression(\r\n expr: ExpressionRef,\r\n fromType: Type,\r\n toType: Type,\r\n conversionKind: ConversionKind,\r\n reportNode: Node\r\n ): ExpressionRef {\r\n assert(conversionKind != ConversionKind.NONE);\r\n var module = this.module;\r\n\r\n // void to any\r\n if (fromType.kind == TypeKind.VOID) {\r\n this.error(\r\n DiagnosticCode.Type_0_is_not_assignable_to_type_1,\r\n reportNode.range, fromType.toString(), toType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n // any to void\r\n if (toType.kind == TypeKind.VOID) {\r\n return module.createDrop(expr);\r\n }\r\n\r\n if (conversionKind == ConversionKind.IMPLICIT && !fromType.isAssignableTo(toType)) {\r\n this.error(\r\n DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast,\r\n reportNode.range, fromType.toString(), toType.toString()\r\n ); // recoverable\r\n }\r\n\r\n // TODO: make this a proper switch?\r\n if (fromType.is(TypeFlags.FLOAT)) {\r\n\r\n // float to float\r\n if (toType.is(TypeFlags.FLOAT)) {\r\n if (fromType.kind == TypeKind.F32) {\r\n\r\n // f32 to f64\r\n if (toType.kind == TypeKind.F64) {\r\n expr = module.createUnary(UnaryOp.PromoteF32, expr);\r\n }\r\n\r\n // otherwise f32 to f32\r\n\r\n // f64 to f32\r\n } else if (toType.kind == TypeKind.F32) {\r\n expr = module.createUnary(UnaryOp.DemoteF64, expr);\r\n }\r\n\r\n // otherwise f64 to f64\r\n\r\n // float to int\r\n } else if (toType.is(TypeFlags.INTEGER)) {\r\n\r\n // f32 to int\r\n if (fromType.kind == TypeKind.F32) {\r\n if (toType.is(TypeFlags.SIGNED)) {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF32ToI64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF32ToI32, expr);\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, module);\r\n }\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF32ToU64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF32ToU32, expr);\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, module);\r\n }\r\n }\r\n }\r\n\r\n // f64 to int\r\n } else {\r\n if (toType.is(TypeFlags.SIGNED)) {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF64ToI64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF64ToI32, expr);\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, module);\r\n }\r\n }\r\n } else {\r\n if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.TruncF64ToU64, expr);\r\n } else {\r\n expr = module.createUnary(UnaryOp.TruncF64ToU32, expr);\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, module);\r\n }\r\n }\r\n }\r\n }\r\n\r\n // float to void\r\n } else {\r\n assert(toType.flags == TypeFlags.NONE, \"void type expected\");\r\n expr = module.createDrop(expr);\r\n }\r\n\r\n // int to float\r\n } else if (fromType.is(TypeFlags.INTEGER) && toType.is(TypeFlags.FLOAT)) {\r\n\r\n // int to f32\r\n if (toType.kind == TypeKind.F32) {\r\n if (fromType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI64ToF32\r\n : UnaryOp.ConvertU64ToF32,\r\n expr\r\n );\r\n } else {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI32ToF32\r\n : UnaryOp.ConvertU32ToF32,\r\n expr\r\n );\r\n }\r\n\r\n // int to f64\r\n } else {\r\n if (fromType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI64ToF64\r\n : UnaryOp.ConvertU64ToF64,\r\n expr\r\n );\r\n } else {\r\n expr = module.createUnary(\r\n fromType.is(TypeFlags.SIGNED)\r\n ? UnaryOp.ConvertI32ToF64\r\n : UnaryOp.ConvertU32ToF64,\r\n expr\r\n );\r\n }\r\n }\r\n\r\n // int to int\r\n } else {\r\n if (fromType.is(TypeFlags.LONG)) {\r\n\r\n // i64 to i32\r\n if (!toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(UnaryOp.WrapI64, expr); // discards upper bits\r\n if (toType.is(TypeFlags.SMALL)) {\r\n expr = makeSmallIntegerWrap(expr, toType, module);\r\n }\r\n }\r\n\r\n // i32 to i64\r\n } else if (toType.is(TypeFlags.LONG)) {\r\n expr = module.createUnary(toType.is(TypeFlags.SIGNED) ? UnaryOp.ExtendI32 : UnaryOp.ExtendU32, expr);\r\n\r\n // i32 or smaller to even smaller or same size int with change of sign\r\n } else if (\r\n toType.is(TypeFlags.SMALL) &&\r\n (\r\n fromType.size > toType.size ||\r\n (\r\n fromType.size == toType.size &&\r\n fromType.is(TypeFlags.SIGNED) != toType.is(TypeFlags.SIGNED)\r\n )\r\n )\r\n ) {\r\n expr = makeSmallIntegerWrap(expr, toType, module);\r\n }\r\n\r\n // otherwise (smaller) i32/u32 to (same size) i32/u32\r\n }\r\n\r\n this.currentType = toType;\r\n return expr;\r\n }\r\n\r\n compileAssertionExpression(expression: AssertionExpression, contextualType: Type): ExpressionRef {\r\n var toType = this.program.resolveType( // reports\r\n expression.toType,\r\n this.currentFunction.contextualTypeArguments\r\n );\r\n if (!toType) return this.module.createUnreachable();\r\n return this.compileExpression(expression.expression, toType, ConversionKind.EXPLICIT);\r\n }\r\n\r\n compileBinaryExpression(\r\n expression: BinaryExpression,\r\n contextualType: Type,\r\n wrapSmallIntegers: bool = true\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var left = expression.left;\r\n var right = expression.right;\r\n\r\n var leftExpr: ExpressionRef;\r\n var leftType: Type;\r\n var rightExpr: ExpressionRef;\r\n var rightType: Type;\r\n var commonType: Type | null;\r\n\r\n var condExpr: ExpressionRef;\r\n var expr: ExpressionRef;\r\n var compound = false;\r\n var possiblyOverflows = false;\r\n var tempLocal: Local | null = null;\r\n\r\n switch (expression.operator) {\r\n case Token.LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType);\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpressionRetainType(right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"<\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.LtI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.LtI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtI64\r\n : BinaryOp.LtI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.LtU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: { // TODO: check operator overload\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LtU64\r\n : BinaryOp.LtU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.LtU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.LtF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.LtF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType);\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpressionRetainType(right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \">\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.GtI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtI64\r\n : BinaryOp.GtI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.GtI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.GtU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: { // TODO: check operator overload\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GtU64\r\n : BinaryOp.GtU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.GtU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.GtF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.GtF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.LESSTHAN_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType);\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpressionRetainType(right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"<=\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.LeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeI64\r\n : BinaryOp.LeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.LeI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.LeU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: { // TODO: check operator overload\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.LeU64\r\n : BinaryOp.LeU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.LeU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.LeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.LeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.GREATERTHAN_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType);\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpressionRetainType(right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, true)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \">=\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.GeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeI64\r\n : BinaryOp.GeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.GeI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.GeU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: { // TODO: check operator overload\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.GeU64\r\n : BinaryOp.GeU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.GeU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.GeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.GeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n\r\n case Token.EQUALS_EQUALS_EQUALS:\r\n // TODO?\r\n case Token.EQUALS_EQUALS: {\r\n\r\n // NOTE that this favors correctness, in terms of emitting a binary expression, over\r\n // checking for a possible use of unary EQZ. while the most classic of all optimizations,\r\n // that's not what the source told us to do. for reference, `!left` emits unary EQZ.\r\n\r\n leftExpr = this.compileExpressionRetainType(left, contextualType);\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpressionRetainType(right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, Token.operatorToString(expression.operator), leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.EqI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.EqI64\r\n : BinaryOp.EqI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.EqI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.EqF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.EqF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.EXCLAMATION_EQUALS_EQUALS:\r\n // TODO?\r\n case Token.EXCLAMATION_EQUALS: {\r\n leftExpr = this.compileExpressionRetainType(left, contextualType);\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpressionRetainType(right, leftType);\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, Token.operatorToString(expression.operator), leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n switch (commonType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.NeI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.NeI64\r\n : BinaryOp.NeI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.NeI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.NeF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.NeF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n }\r\n }\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.EQUALS: {\r\n return this.compileAssignment(left, right, contextualType);\r\n }\r\n case Token.PLUS_EQUALS: compound = true;\r\n case Token.PLUS: {\r\n leftExpr = this.compileExpressionRetainType(\r\n left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpressionRetainType(\r\n right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"+\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true;\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.AddI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AddI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.AddF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.AddF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_EQUALS: compound = true;\r\n case Token.MINUS: {\r\n leftExpr = this.compileExpressionRetainType(\r\n left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpressionRetainType(\r\n right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"-\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true;\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.SubI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.SubF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.SubF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case Token.ASTERISK_EQUALS: compound = true;\r\n case Token.ASTERISK: {\r\n leftExpr = this.compileExpressionRetainType(\r\n left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpressionRetainType(\r\n right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"*\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true;\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.MulI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.MulI64\r\n : BinaryOp.MulI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.MulI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.MulF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.MulF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case Token.SLASH_EQUALS: compound = true;\r\n case Token.SLASH: {\r\n leftExpr = this.compileExpressionRetainType(\r\n left,\r\n contextualType,\r\n true // TODO: when can division remain unwrapped? does it overflow?\r\n );\r\n if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpressionRetainType(\r\n right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"/\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: possiblyOverflows = true;\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.DivI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivI64\r\n : BinaryOp.DivI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.DivI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true;\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.DivU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: { // TODO: check operator overload\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.DivU64\r\n : BinaryOp.DivU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.DivU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.DivF32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.DivF64, leftExpr, rightExpr);\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case Token.PERCENT_EQUALS: compound = true;\r\n case Token.PERCENT: {\r\n leftExpr = this.compileExpressionRetainType(\r\n left,\r\n contextualType,\r\n true // TODO: when can remainder remain unwrapped? does it overflow?\r\n );\r\n if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpressionRetainType(\r\n right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"%\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n expr = module.createBinary(BinaryOp.RemI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemI64\r\n : BinaryOp.RemI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.RemI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.BOOL: {\r\n expr = module.createBinary(BinaryOp.RemU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: { // TODO: check operator overload\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.RemU64\r\n : BinaryOp.RemU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.RemU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n // TODO: internal fmod, possibly simply imported from JS\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case Token.LESSTHAN_LESSTHAN_EQUALS: compound = true;\r\n case Token.LESSTHAN_LESSTHAN: {\r\n leftExpr = this.compileExpressionRetainType(\r\n left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true;\r\n default: {\r\n expr = module.createBinary(BinaryOp.ShlI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShlI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShlI64\r\n : BinaryOp.ShlI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, Token.operatorToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n case TypeKind.VOID: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS: compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(\r\n left,\r\n contextualType,\r\n true // must wrap small integers\r\n );\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n true // ^\r\n );\r\n switch (this.currentType.kind) {\r\n default: {\r\n // assumes signed shr on signed small integers does not overflow\r\n expr = module.createBinary(BinaryOp.ShrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64: {\r\n expr = module.createBinary(BinaryOp.ShrI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrI64\r\n : BinaryOp.ShrI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: // assumes unsigned shr on unsigned small integers does not overflow\r\n case TypeKind.U32: {\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShrU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: { // TODO: check operator overload\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64: {\r\n this.error(\r\n DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1,\r\n expression.range, Token.operatorToString(expression.operator), this.currentType.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n case TypeKind.VOID: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS: compound = true;\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: {\r\n leftExpr = this.compileExpressionRetainType(\r\n left,\r\n contextualType,\r\n true // modifies low bits of small integers if unsigned\r\n );\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n true // ^\r\n );\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16: possiblyOverflows = true;\r\n default: {\r\n // assumes that unsigned shr on unsigned small integers does not overflow\r\n expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.ShrU64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.ShrU64\r\n : BinaryOp.ShrU32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case Token.AMPERSAND_EQUALS: compound = true;\r\n case Token.AMPERSAND: {\r\n leftExpr = this.compileExpressionRetainType(\r\n left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpressionRetainType(\r\n right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"&\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true; // if left or right already did\r\n default: {\r\n expr = module.createBinary(BinaryOp.AndI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AndI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AndI64\r\n : BinaryOp.AndI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case Token.BAR_EQUALS: compound = true;\r\n case Token.BAR: {\r\n leftExpr = this.compileExpressionRetainType(\r\n left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpressionRetainType(\r\n right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"|\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true; // if left or right already did\r\n default: {\r\n expr = module.createBinary(BinaryOp.OrI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.OrI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.OrI64\r\n : BinaryOp.OrI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case Token.CARET_EQUALS: compound = true;\r\n case Token.CARET: {\r\n leftExpr = this.compileExpressionRetainType(\r\n left,\r\n contextualType,\r\n false // retains low bits of small integers\r\n );\r\n if (compound) {\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false // ^\r\n );\r\n } else {\r\n leftType = this.currentType;\r\n rightExpr = this.compileExpressionRetainType(\r\n right,\r\n leftType,\r\n false // ^\r\n );\r\n rightType = this.currentType;\r\n if (commonType = Type.commonCompatible(leftType, rightType, false)) {\r\n leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left);\r\n rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right);\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2,\r\n expression.range, \"^\", leftType.toString(), rightType.toString()\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n switch (this.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true; // if left or right already did\r\n default: {\r\n expr = module.createBinary(BinaryOp.XorI32, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.XorI64, leftExpr, rightExpr);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n leftExpr,\r\n rightExpr\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n\r\n // logical (no overloading)\r\n\r\n case Token.AMPERSAND_AMPERSAND: { // left && right\r\n leftExpr = this.compileExpressionRetainType(\r\n left,\r\n contextualType\r\n );\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false\r\n );\r\n\r\n // clone left if free of side effects\r\n expr = module.cloneExpression(leftExpr, true, 0);\r\n\r\n // if not possible, tee left to a temp. local\r\n if (!expr) {\r\n tempLocal = this.currentFunction.getAndFreeTempLocal(this.currentType);\r\n leftExpr = module.createTeeLocal(tempLocal.index, leftExpr);\r\n }\r\n\r\n possiblyOverflows = this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER);\r\n condExpr = makeIsTrueish(leftExpr, this.currentType, module);\r\n\r\n // simplify when cloning left without side effects was successful\r\n if (expr) {\r\n expr = module.createIf(\r\n condExpr, // left\r\n rightExpr, // ? right\r\n expr // : cloned left\r\n );\r\n }\r\n\r\n // otherwise make use of the temp. local\r\n else {\r\n expr = module.createIf(\r\n condExpr,\r\n rightExpr,\r\n module.createGetLocal(\r\n assert(tempLocal).index, // to be sure\r\n this.currentType.toNativeType()\r\n )\r\n );\r\n }\r\n break;\r\n }\r\n case Token.BAR_BAR: { // left || right\r\n leftExpr = this.compileExpressionRetainType(\r\n left,\r\n contextualType\r\n );\r\n rightExpr = this.compileExpression(\r\n right,\r\n this.currentType,\r\n ConversionKind.IMPLICIT,\r\n false\r\n );\r\n\r\n // clone left if free of side effects\r\n expr = this.module.cloneExpression(leftExpr, true, 0);\r\n\r\n // if not possible, tee left to a temp. local\r\n if (!expr) {\r\n tempLocal = this.currentFunction.getAndFreeTempLocal(this.currentType);\r\n leftExpr = module.createTeeLocal(tempLocal.index, leftExpr);\r\n }\r\n\r\n possiblyOverflows = this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER); // if right did\r\n condExpr = makeIsTrueish(leftExpr, this.currentType, module);\r\n\r\n // simplify when cloning left without side effects was successful\r\n if (expr) {\r\n expr = this.module.createIf(\r\n condExpr, // left\r\n expr, // ? cloned left\r\n rightExpr // : right\r\n );\r\n }\r\n\r\n // otherwise make use of the temp. local\r\n else {\r\n expr = module.createIf(\r\n condExpr,\r\n module.createGetLocal(\r\n assert(tempLocal).index, // to be sure\r\n this.currentType.toNativeType()\r\n ),\r\n rightExpr\r\n );\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n expr = this.module.createUnreachable();\r\n break;\r\n }\r\n }\r\n if (possiblyOverflows && wrapSmallIntegers) {\r\n assert(this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER)); // must be a small int\r\n expr = makeSmallIntegerWrap(expr, this.currentType, module);\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(left, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n\r\n compileAssignment(expression: Expression, valueExpression: Expression, contextualType: Type): ExpressionRef {\r\n var currentFunction = this.currentFunction;\r\n var resolved = this.program.resolveExpression(expression, currentFunction); // reports\r\n if (!resolved) return this.module.createUnreachable();\r\n\r\n // to compile just the value, we need to know the target's type\r\n var element = resolved.element;\r\n var elementType: Type;\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(element)) { // reports; not yet compiled if a static field compiled as a global\r\n return this.module.createUnreachable();\r\n }\r\n assert((element).type != Type.void, \"concrete type expected\");\r\n // fall-through\r\n }\r\n case ElementKind.LOCAL:\r\n case ElementKind.FIELD: {\r\n elementType = (element).type;\r\n break;\r\n }\r\n case ElementKind.PROPERTY: {\r\n let prototype = (element).setterPrototype;\r\n if (prototype) {\r\n let instance = prototype.resolve(); // reports\r\n if (!instance) return this.module.createUnreachable();\r\n assert(instance.signature.parameterTypes.length == 1);\r\n elementType = instance.signature.parameterTypes[0];\r\n break;\r\n }\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, (element).internalName\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n if (expression.kind == NodeKind.ELEMENTACCESS) { // @operator(\"[]\")\r\n if (resolved.target && resolved.target.kind == ElementKind.CLASS) {\r\n if (element.simpleName == (resolved.target).prototype.fnIndexedGet) {\r\n let resolvedIndexedSet = (element).resolve(null); // reports\r\n if (resolvedIndexedSet) {\r\n elementType = resolvedIndexedSet.signature.returnType;\r\n break;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Index_signature_is_missing_in_type_0,\r\n expression.range, (resolved.target).toString()\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n }\r\n // fall-through\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n }\r\n\r\n // compile the value and do the assignment\r\n var valueExpr = this.compileExpression(valueExpression, elementType);\r\n return this.compileAssignmentWithValue(\r\n expression,\r\n valueExpr,\r\n contextualType != Type.void\r\n );\r\n }\r\n\r\n compileAssignmentWithValue(\r\n expression: Expression,\r\n valueWithCorrectType: ExpressionRef,\r\n tee: bool = false\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var resolved = this.program.resolveExpression(expression, this.currentFunction); // reports\r\n if (!resolved) return module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n switch (element.kind) {\r\n case ElementKind.LOCAL: {\r\n this.currentType = tee ? (element).type : Type.void;\r\n if ((element).is(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 module.createUnreachable();\r\n }\r\n return tee\r\n ? module.createTeeLocal((element).index, valueWithCorrectType)\r\n : module.createSetLocal((element).index, valueWithCorrectType);\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (!this.compileGlobal(element)) return module.createUnreachable();\r\n let type = (element).type;\r\n assert(type != Type.void);\r\n this.currentType = tee ? type : Type.void;\r\n if ((element).is(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 module.createUnreachable();\r\n }\r\n if (tee) {\r\n let nativeType = type.toNativeType();\r\n let internalName = (element).internalName;\r\n return module.createBlock(null, [ // emulated teeGlobal\r\n module.createSetGlobal(internalName, valueWithCorrectType),\r\n module.createGetGlobal(internalName, nativeType)\r\n ], nativeType);\r\n } else {\r\n return module.createSetGlobal((element).internalName, valueWithCorrectType);\r\n }\r\n }\r\n case ElementKind.FIELD: {\r\n if ((element).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 module.createUnreachable();\r\n }\r\n assert(resolved.isInstanceTarget);\r\n let targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n (resolved.target).type\r\n );\r\n let type = (element).type;\r\n this.currentType = tee ? type : Type.void;\r\n let nativeType = type.toNativeType();\r\n if (tee) {\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(type);\r\n let tempLocalIndex = tempLocal.index;\r\n // TODO: simplify if valueWithCorrectType has no side effects\r\n return module.createBlock(null, [\r\n module.createSetLocal(tempLocalIndex, valueWithCorrectType),\r\n module.createStore(\r\n type.size >> 3,\r\n targetExpr,\r\n module.createGetLocal(tempLocalIndex, nativeType),\r\n nativeType,\r\n (element).memoryOffset\r\n ),\r\n module.createGetLocal(tempLocalIndex, nativeType)\r\n ], nativeType);\r\n } else {\r\n return module.createStore(\r\n type.size >> 3,\r\n targetExpr,\r\n valueWithCorrectType,\r\n nativeType,\r\n (element).memoryOffset\r\n );\r\n }\r\n }\r\n case ElementKind.PROPERTY: {\r\n let setterPrototype = (element).setterPrototype;\r\n if (setterPrototype) {\r\n let setterInstance = setterPrototype.resolve(); // reports\r\n if (!setterInstance) return module.createUnreachable();\r\n\r\n // call just the setter if the return value isn't of interest\r\n if (!tee) {\r\n if (setterInstance.is(ElementFlags.INSTANCE)) {\r\n assert(resolved.isInstanceTarget);\r\n let thisArg = this.compileExpression(\r\n resolved.targetExpression,\r\n (resolved.target).type\r\n );\r\n return this.makeCallDirect(setterInstance, [ thisArg, valueWithCorrectType ]);\r\n } else {\r\n return this.makeCallDirect(setterInstance, [ valueWithCorrectType ]);\r\n }\r\n }\r\n\r\n // otherwise call the setter first, then the getter\r\n let getterPrototype = (element).getterPrototype;\r\n assert(getterPrototype != null); // must have one if there is a setter\r\n let getterInstance = (getterPrototype).resolve(); // reports\r\n if (!getterInstance) return module.createUnreachable();\r\n let returnType = getterInstance.signature.returnType;\r\n let nativeReturnType = returnType.toNativeType();\r\n if (setterInstance.is(ElementFlags.INSTANCE)) {\r\n assert(resolved.isInstanceTarget);\r\n let thisArg = this.compileExpression(\r\n resolved.targetExpression,\r\n (resolved.target).type\r\n );\r\n let tempLocal = this.currentFunction.getAndFreeTempLocal(returnType);\r\n let tempLocalIndex = tempLocal.index;\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ // set and remember the target\r\n module.createTeeLocal(tempLocalIndex, thisArg),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(getterInstance, [ // get from remembered target\r\n module.createGetLocal(tempLocalIndex, nativeReturnType)\r\n ])\r\n ], nativeReturnType);\r\n } else {\r\n // note that this must be performed here because `resolved` is shared\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [ valueWithCorrectType ]),\r\n this.makeCallDirect(getterInstance)\r\n ], nativeReturnType);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property,\r\n expression.range, (element).internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n case ElementKind.FUNCTION_PROTOTYPE: { // @operator(\"[]\") ?\r\n if (expression.kind == NodeKind.ELEMENTACCESS) {\r\n assert(resolved.isInstanceTarget);\r\n let getterInstance = (element).resolve(); // reports\r\n if (!getterInstance) return module.createUnreachable();\r\n // obtain @operator(\"[]=\")\r\n let setElementName = (resolved.target).prototype.fnIndexedSet;\r\n let setElement: Element | null;\r\n if (\r\n setElementName != null &&\r\n (resolved.target).members &&\r\n (setElement = (>(resolved.target).members).get(setElementName)) &&\r\n setElement.kind == ElementKind.FUNCTION_PROTOTYPE\r\n ) {\r\n let setterInstance = (setElement).resolve(); // reports\r\n if (!setterInstance) return module.createUnreachable();\r\n let targetType = (resolved.target).type;\r\n let targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n targetType\r\n );\r\n let elementExpr = this.compileExpression(\r\n (expression).elementExpression,\r\n Type.i32\r\n );\r\n if (tee) {\r\n let tempLocalTarget = this.currentFunction.getTempLocal(targetType);\r\n let tempLocalElement = this.currentFunction.getAndFreeTempLocal(this.currentType);\r\n let returnType = getterInstance.signature.returnType;\r\n this.currentFunction.freeTempLocal(tempLocalTarget);\r\n return module.createBlock(null, [\r\n this.makeCallDirect(setterInstance, [\r\n module.createTeeLocal(tempLocalTarget.index, targetExpr),\r\n module.createTeeLocal(tempLocalElement.index, elementExpr),\r\n valueWithCorrectType\r\n ]),\r\n this.makeCallDirect(getterInstance, [\r\n module.createGetLocal(tempLocalTarget.index, tempLocalTarget.type.toNativeType()),\r\n module.createGetLocal(tempLocalElement.index, tempLocalElement.type.toNativeType())\r\n ])\r\n ], returnType.toNativeType());\r\n } else {\r\n return this.makeCallDirect(setterInstance, [\r\n targetExpr,\r\n elementExpr,\r\n valueWithCorrectType\r\n ]);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Index_signature_in_type_0_only_permits_reading,\r\n expression.range, (resolved.target).internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n // fall-through\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n compileCallExpression(expression: CallExpression, contextualType: Type): ExpressionRef {\r\n var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n var resolved = this.program.resolveExpression(expression.expression, currentFunction); // reports\r\n if (!resolved) return module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n var signature: Signature | null;\r\n var indexArg: ExpressionRef;\r\n switch (element.kind) {\r\n\r\n // direct call: concrete function\r\n case ElementKind.FUNCTION_PROTOTYPE: {\r\n let prototype = element;\r\n\r\n // builtins are compiled on the fly\r\n if (prototype.is(ElementFlags.BUILTIN)) {\r\n let expr = compileBuiltinCall( // reports\r\n this,\r\n prototype,\r\n prototype.resolveBuiltinTypeArguments(\r\n expression.typeArguments,\r\n currentFunction.contextualTypeArguments\r\n ),\r\n expression.arguments,\r\n contextualType,\r\n expression\r\n );\r\n if (!expr) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n return expr;\r\n\r\n // otherwise compile to a call\r\n } else {\r\n let instance = prototype.resolveUsingTypeArguments( // reports\r\n expression.typeArguments,\r\n currentFunction.contextualTypeArguments,\r\n expression\r\n );\r\n if (!instance) return module.createUnreachable();\r\n let thisArg: ExpressionRef = 0;\r\n if (instance.is(ElementFlags.INSTANCE)) {\r\n assert(resolved.isInstanceTarget);\r\n thisArg = this.compileExpression(\r\n resolved.targetExpression,\r\n (resolved.target).type\r\n );\r\n if (!thisArg) return module.createUnreachable();\r\n } else {\r\n assert(!resolved.isInstanceTarget);\r\n }\r\n return this.compileCallDirect(instance, expression.arguments, expression, thisArg);\r\n }\r\n }\r\n\r\n // indirect call: index argument with signature\r\n case ElementKind.LOCAL: {\r\n if (signature = (element).type.functionType) {\r\n indexArg = module.createGetLocal((element).index, NativeType.I32);\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (element).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (signature = (element).type.functionType) {\r\n indexArg = module.createGetGlobal((element).internalName, (element).type.toNativeType());\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (element).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FIELD: {\r\n let type = (element).type;\r\n if (signature = type.functionType) {\r\n let targetExpr = this.compileExpression(assert(resolved.targetExpression), type);\r\n indexArg = module.createLoad(\r\n 4,\r\n false,\r\n targetExpr,\r\n NativeType.I32,\r\n (element).memoryOffset\r\n );\r\n break;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n expression.range, (element).type.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n case ElementKind.FUNCTION_TARGET: {\r\n signature = (element).signature;\r\n indexArg = this.compileExpression(expression.expression, (element).type);\r\n break;\r\n }\r\n case ElementKind.PROPERTY: // TODO\r\n\r\n // not supported\r\n default: {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n return this.compileCallIndirect(\r\n signature,\r\n indexArg,\r\n expression.arguments,\r\n expression\r\n );\r\n }\r\n\r\n /**\r\n * Checks that a call with the given number as arguments can be performed according to the\r\n * specified signature.\r\n */\r\n checkCallSignature(\r\n signature: Signature,\r\n numArguments: i32,\r\n hasThis: bool,\r\n reportNode: Node\r\n ): bool {\r\n\r\n // cannot call an instance method without a `this` argument (TODO: `.call`?)\r\n var thisType = signature.thisType;\r\n if (hasThis != (thisType != null)) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported, // TODO: better message?\r\n reportNode.range\r\n );\r\n return false;\r\n }\r\n\r\n // not yet implemented (TODO: maybe some sort of an unmanaged/lightweight array?)\r\n var hasRest = signature.hasRest;\r\n if (hasRest) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return false;\r\n }\r\n\r\n var minimum = signature.requiredParameters;\r\n var maximum = signature.parameterTypes.length;\r\n\r\n // must at least be called with required arguments\r\n if (numArguments < minimum) {\r\n this.error(\r\n minimum < maximum\r\n ? DiagnosticCode.Expected_at_least_0_arguments_but_got_1\r\n : DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, minimum.toString(), numArguments.toString()\r\n );\r\n return false;\r\n }\r\n\r\n // must not be called with more than the maximum arguments\r\n if (numArguments > maximum && !hasRest) {\r\n this.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, maximum.toString(), numArguments.toString()\r\n );\r\n return false;\r\n }\r\n\r\n return true;\r\n }\r\n\r\n /** Compiles a direct call to a concrete function. */\r\n compileCallDirect(\r\n instance: Function,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n var signature = instance.signature;\r\n\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n numArguments,\r\n thisArg != 0,\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i]\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallDirect(instance, operands);\r\n }\r\n\r\n /** Gets the trampoline for the specified function. */\r\n ensureTrampoline(original: Function): Function {\r\n var trampoline = original.trampoline;\r\n if (trampoline) return trampoline;\r\n\r\n var originalSignature = original.signature;\r\n var originalName = original.internalName;\r\n var originalParameterTypes = originalSignature.parameterTypes;\r\n var originalParameterDeclarations = original.prototype.declaration.signature.parameterTypes;\r\n var commonReturnType = originalSignature.returnType;\r\n var commonThisType = originalSignature.thisType;\r\n var isInstance = original.is(ElementFlags.INSTANCE);\r\n\r\n // arguments excl. `this`, operands incl. `this`\r\n var minArguments = originalSignature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = originalParameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (isInstance) {\r\n ++minOperands;\r\n ++maxOperands;\r\n }\r\n var numOptional = maxOperands - minOperands;\r\n assert(numOptional);\r\n\r\n var forwardedOperands = new Array(minOperands);\r\n var operandIndex = 0;\r\n\r\n // forward `this` if applicable\r\n var module = this.module;\r\n if (isInstance) {\r\n forwardedOperands[0] = module.createGetLocal(0, this.options.nativeSizeType);\r\n operandIndex = 1;\r\n }\r\n\r\n // forward required arguments\r\n for (let i = 0; i < minArguments; ++i, ++operandIndex) {\r\n forwardedOperands[operandIndex] = module.createGetLocal(operandIndex, originalParameterTypes[i].toNativeType());\r\n }\r\n assert(operandIndex == minOperands);\r\n\r\n // append an additional parameter taking the number of optional arguments provided\r\n var trampolineParameterTypes = new Array(maxArguments + 1);\r\n for (let i = 0; i < maxArguments; ++i) {\r\n trampolineParameterTypes[i] = originalParameterTypes[i];\r\n }\r\n trampolineParameterTypes[maxArguments] = Type.i32;\r\n\r\n // create the trampoline element\r\n var trampolineSignature = new Signature(trampolineParameterTypes, commonReturnType, commonThisType);\r\n var trampolineName = originalName + \"|trampoline\";\r\n trampolineSignature.requiredParameters = maxArguments + 1;\r\n trampoline = new Function(original.prototype, trampolineName, trampolineSignature, original.instanceMethodOf);\r\n trampoline.flags = original.flags | ElementFlags.COMPILED;\r\n original.trampoline = trampoline;\r\n\r\n // compile initializers of omitted arguments in scope of the trampoline function\r\n // this is necessary because initializers might need additional locals and a proper this context\r\n var previousFunction = this.currentFunction;\r\n this.currentFunction = trampoline;\r\n\r\n // create a br_table switching over the number of optional parameters provided\r\n var numNames = numOptional + 1; // incl. 'with0'\r\n var names = new Array(numNames);\r\n for (let i = 0; i < numNames; ++i) {\r\n let label = \"N=\" + i.toString();\r\n names[i] = label;\r\n }\r\n var body = module.createBlock(names[0], [\r\n module.createBlock(\"N=invalid\", [\r\n module.createSwitch(names, \"N=invalid\",\r\n module.createGetLocal(maxOperands, NativeType.I32)\r\n )\r\n ]),\r\n module.createUnreachable()\r\n ]);\r\n for (let i = 0; i < numOptional; ++i, ++operandIndex) {\r\n let type = originalParameterTypes[minArguments + i];\r\n body = module.createBlock(names[i + 1], [\r\n body,\r\n module.createSetLocal(operandIndex,\r\n this.compileExpression(\r\n assert(originalParameterDeclarations[minArguments + i].initializer),\r\n type\r\n )\r\n )\r\n ]);\r\n forwardedOperands[operandIndex] = module.createGetLocal(operandIndex, type.toNativeType());\r\n }\r\n this.currentFunction = previousFunction;\r\n assert(operandIndex == maxOperands);\r\n\r\n var typeRef = this.ensureFunctionType(trampolineSignature);\r\n var funcRef = module.addFunction(trampolineName, typeRef, typesToNativeTypes(trampoline.additionalLocals),\r\n module.createBlock(null, [\r\n body,\r\n module.createCall(\r\n originalName,\r\n forwardedOperands,\r\n commonReturnType.toNativeType()\r\n )\r\n ], commonReturnType.toNativeType())\r\n );\r\n trampoline.finalize(module, funcRef);\r\n return trampoline;\r\n }\r\n\r\n /** Creates a direct call to the specified function. */\r\n makeCallDirect(instance: Function, operands: ExpressionRef[] | null = null): ExpressionRef {\r\n var numOperands = operands ? operands.length : 0;\r\n var numArguments = numOperands;\r\n var minArguments = instance.signature.requiredParameters;\r\n var minOperands = minArguments;\r\n var maxArguments = instance.signature.parameterTypes.length;\r\n var maxOperands = maxArguments;\r\n if (instance.is(ElementFlags.INSTANCE)) {\r\n ++minOperands;\r\n ++maxOperands;\r\n --numArguments;\r\n }\r\n assert(numOperands >= minOperands);\r\n var module = this.module;\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n if (numOperands < maxOperands) {\r\n instance = this.ensureTrampoline(instance);\r\n if (!this.compileFunction(instance)) return module.createUnreachable();\r\n if (!operands) {\r\n operands = new Array(maxOperands + 1);\r\n operands.length = 0;\r\n }\r\n for (let i = numArguments; i < maxArguments; ++i) {\r\n operands.push(instance.signature.parameterTypes[i].toNativeZero(module));\r\n }\r\n operands.push(module.createI32(numOperands - minOperands));\r\n }\r\n var returnType = instance.signature.returnType;\r\n this.currentType = returnType;\r\n if (instance.is(ElementFlags.IMPORTED)) {\r\n return module.createCallImport(instance.internalName, operands, returnType.toNativeType());\r\n } else {\r\n return module.createCall(instance.internalName, operands, returnType.toNativeType());\r\n }\r\n }\r\n\r\n /** Compiles an indirect call using an index argument and a signature. */\r\n compileCallIndirect(\r\n signature: Signature,\r\n indexArg: ExpressionRef,\r\n argumentExpressions: Expression[],\r\n reportNode: Node,\r\n thisArg: ExpressionRef = 0\r\n ): ExpressionRef {\r\n var numArguments = argumentExpressions.length;\r\n\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n numArguments,\r\n thisArg != 0,\r\n reportNode\r\n )) {\r\n return this.module.createUnreachable();\r\n }\r\n\r\n var numArgumentsInclThis = thisArg ? numArguments + 1 : numArguments;\r\n var operands = new Array(numArgumentsInclThis);\r\n var index = 0;\r\n if (thisArg) {\r\n operands[0] = thisArg;\r\n index = 1;\r\n }\r\n var parameterTypes = signature.parameterTypes;\r\n for (let i = 0; i < numArguments; ++i, ++index) {\r\n operands[index] = this.compileExpression(\r\n argumentExpressions[i],\r\n parameterTypes[i]\r\n );\r\n }\r\n assert(index == numArgumentsInclThis);\r\n return this.makeCallIndirect(signature, indexArg, operands);\r\n }\r\n\r\n /** Creates an indirect call to the function at `indexArg` in the function table. */\r\n makeCallIndirect(signature: Signature, indexArg: ExpressionRef, operands: ExpressionRef[]): ExpressionRef {\r\n var returnType = signature.returnType;\r\n this.currentType = returnType;\r\n this.ensureFunctionType(signature);\r\n return this.module.createCallIndirect(indexArg, operands, signature.toSignatureString());\r\n }\r\n\r\n compileCommaExpression(expression: CommaExpression, contextualType: Type): ExpressionRef {\r\n var expressions = expression.expressions;\r\n var numExpressions = expressions.length;\r\n var exprs = new Array(numExpressions--);\r\n for (let i = 0; i < numExpressions; ++i) {\r\n exprs[i] = this.compileExpression(expressions[i], Type.void); // drop all\r\n }\r\n exprs[numExpressions] = this.compileExpression(expressions[numExpressions], contextualType); // except last\r\n return this.module.createBlock(null, exprs, this.currentType.toNativeType());\r\n }\r\n\r\n compileElementAccessExpression(expression: ElementAccessExpression, contextualType: Type): ExpressionRef {\r\n var resolved = this.program.resolveElementAccess(expression, this.currentFunction); // reports\r\n if (!resolved) return this.module.createUnreachable();\r\n\r\n assert( // should be guaranteed by resolveElementAccess\r\n resolved.element.kind == ElementKind.FUNCTION_PROTOTYPE &&\r\n resolved.target &&\r\n resolved.target.kind == ElementKind.CLASS\r\n );\r\n var target = resolved.target;\r\n var instance = (resolved.element).resolve( // reports\r\n null,\r\n target.contextualTypeArguments\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n var thisArg = this.compileExpression(expression.expression, target.type);\r\n return this.compileCallDirect(instance, [\r\n expression.elementExpression\r\n ], expression, thisArg);\r\n }\r\n\r\n compileFunctionExpression(expression: FunctionExpression, contextualType: Type): ExpressionRef {\r\n var declaration = expression.declaration;\r\n var name = declaration.name;\r\n var simpleName = (name.text.length\r\n ? name.text\r\n : \"anonymous\") + \"|\" + this.functionTable.length.toString(10);\r\n var currentFunction = this.currentFunction;\r\n var prototype = new FunctionPrototype(\r\n this.program,\r\n simpleName,\r\n currentFunction.internalName + \"~\" + simpleName,\r\n declaration\r\n );\r\n var instance = this.compileFunctionUsingTypeArguments(\r\n prototype,\r\n [],\r\n currentFunction.contextualTypeArguments,\r\n declaration\r\n );\r\n if (!instance) return this.module.createUnreachable();\r\n this.currentType = Type.u32.asFunction(instance.signature); // TODO: get cached type?\r\n // NOTE that, in order to make this work in every case, the function must be represented by a\r\n // value, so we add it and rely on the optimizer to figure out where it can be called directly.\r\n var index = this.ensureFunctionTableEntry(instance); // reports\r\n return index < 0\r\n ? this.module.createUnreachable()\r\n : this.module.createI32(index);\r\n }\r\n\r\n /**\r\n * Compiles an identifier in the specified context.\r\n * @param retainConstantType Retains the type of inlined constants if `true`, otherwise\r\n * precomputes them according to context.\r\n */\r\n compileIdentifierExpression(\r\n expression: IdentifierExpression,\r\n contextualType: Type,\r\n retainConstantType: bool\r\n ): ExpressionRef {\r\n var module = this.module;\r\n // check special keywords first\r\n switch (expression.kind) {\r\n case NodeKind.NULL: {\r\n let options = this.options;\r\n if (!contextualType.classType) {\r\n this.currentType = options.usizeType;\r\n }\r\n return options.isWasm64\r\n ? module.createI64(0)\r\n : module.createI32(0);\r\n }\r\n case NodeKind.TRUE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(1);\r\n }\r\n case NodeKind.FALSE: {\r\n this.currentType = Type.bool;\r\n return module.createI32(0);\r\n }\r\n case NodeKind.THIS: {\r\n let currentFunction = this.currentFunction;\r\n if (currentFunction.is(ElementFlags.INSTANCE)) {\r\n let thisType = assert(currentFunction.instanceMethodOf).type;\r\n this.currentType = thisType;\r\n return module.createGetLocal(0, thisType.toNativeType());\r\n }\r\n this.error(\r\n DiagnosticCode._this_cannot_be_referenced_in_current_location,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n case NodeKind.SUPER: {\r\n let currentFunction = this.currentFunction;\r\n if (currentFunction.is(ElementFlags.INSTANCE)) {\r\n let base = assert(currentFunction.instanceMethodOf).base;\r\n if (base) {\r\n let superType = base.type;\r\n this.currentType = superType;\r\n return module.createGetLocal(0, superType.toNativeType());\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode._super_can_only_be_referenced_in_a_derived_class,\r\n expression.range\r\n );\r\n this.currentType = this.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise resolve\r\n var resolved = this.program.resolveIdentifier( // reports\r\n expression,\r\n this.currentFunction,\r\n this.currentEnum\r\n );\r\n if (!resolved) return module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n switch (element.kind) {\r\n case ElementKind.LOCAL: {\r\n if ((element).is(ElementFlags.INLINED)) {\r\n return this.compileInlineConstant(element, contextualType, retainConstantType);\r\n }\r\n let localType = (element).type;\r\n let localIndex = (element).index;\r\n assert(localIndex >= 0);\r\n this.currentType = localType;\r\n return this.module.createGetLocal(localIndex, localType.toNativeType());\r\n }\r\n case ElementKind.GLOBAL: {\r\n if (element.is(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 let globalType = (element).type;\r\n assert(globalType != Type.void);\r\n if ((element).is(ElementFlags.INLINED)) {\r\n return this.compileInlineConstant(element, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return this.module.createGetGlobal((element).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // here: if referenced from within the same enum\r\n if (!element.is(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 }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return this.module.createUnreachable();\r\n }\r\n\r\n compileLiteralExpression(\r\n expression: LiteralExpression,\r\n contextualType: Type,\r\n implicitNegate: bool = false\r\n ): ExpressionRef {\r\n var module = this.module;\r\n\r\n switch (expression.literalKind) {\r\n case LiteralKind.ARRAY: {\r\n assert(!implicitNegate);\r\n let classType = contextualType.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 expression\r\n );\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n case LiteralKind.FLOAT: {\r\n let floatValue = (expression).value;\r\n if (implicitNegate) {\r\n floatValue = -floatValue;\r\n }\r\n if (contextualType == Type.f32) {\r\n return module.createF32(floatValue);\r\n }\r\n this.currentType = Type.f64;\r\n return module.createF64(floatValue);\r\n }\r\n case LiteralKind.INTEGER: {\r\n let intValue = (expression).value;\r\n if (implicitNegate) {\r\n intValue = i64_sub(\r\n i64_new(0),\r\n intValue\r\n );\r\n }\r\n switch (contextualType.kind) {\r\n\r\n // compile to contextualType if matching\r\n\r\n case TypeKind.I8: {\r\n if (i64_is_i8(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.I16: {\r\n if (i64_is_i16(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.I32: {\r\n if (i64_is_i32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U8: {\r\n if (i64_is_u8(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U16: {\r\n if (i64_is_u16(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.U32: {\r\n if (i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.BOOL: {\r\n if (i64_is_bool(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n case TypeKind.ISIZE: {\r\n if (!this.options.isWasm64) {\r\n if (i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.USIZE: {\r\n if (!this.options.isWasm64) {\r\n if (i64_is_u32(intValue)) return module.createI32(i64_low(intValue));\r\n break;\r\n }\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n case TypeKind.F32: {\r\n if (i64_is_f32(intValue)) return module.createF32(i64_to_f32(intValue));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n if (i64_is_f64(intValue)) return module.createF64(i64_to_f64(intValue));\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n break; // compiles to best fitting type below, being dropped\r\n }\r\n default: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n // otherwise compile to best fitting native type\r\n\r\n if (i64_is_i32(intValue)) {\r\n this.currentType = Type.i32;\r\n return module.createI32(i64_low(intValue));\r\n } else {\r\n this.currentType = Type.i64;\r\n return module.createI64(i64_low(intValue), i64_high(intValue));\r\n }\r\n }\r\n case LiteralKind.STRING: {\r\n assert(!implicitNegate);\r\n return this.compileStaticString((expression).value);\r\n }\r\n // case LiteralKind.OBJECT:\r\n // case LiteralKind.REGEXP:\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n this.currentType = contextualType;\r\n return module.createUnreachable();\r\n }\r\n\r\n compileStaticString(stringValue: string): ExpressionRef {\r\n var module = this.module;\r\n var options = this.options;\r\n var stringSegments = this.stringSegments;\r\n\r\n var stringSegment: MemorySegment | null = stringSegments.get(stringValue);\r\n if (!stringSegment) {\r\n let stringLength = stringValue.length;\r\n let stringBuffer = new Uint8Array(4 + stringLength * 2);\r\n stringBuffer[0] = stringLength & 0xff;\r\n stringBuffer[1] = (stringLength >>> 8) & 0xff;\r\n stringBuffer[2] = (stringLength >>> 16) & 0xff;\r\n stringBuffer[3] = (stringLength >>> 24) & 0xff;\r\n for (let i = 0; i < stringLength; ++i) {\r\n stringBuffer[4 + i * 2] = stringValue.charCodeAt(i) & 0xff;\r\n stringBuffer[5 + i * 2] = (stringValue.charCodeAt(i) >>> 8) & 0xff;\r\n }\r\n stringSegment = this.addMemorySegment(stringBuffer, options.usizeType.byteSize);\r\n stringSegments.set(stringValue, stringSegment);\r\n }\r\n var stringOffset = stringSegment.offset;\r\n var stringType = this.program.types.get(\"string\");\r\n this.currentType = stringType ? stringType : options.usizeType;\r\n if (options.isWasm64) {\r\n return module.createI64(i64_low(stringOffset), i64_high(stringOffset));\r\n }\r\n assert(i64_is_i32(stringOffset));\r\n return module.createI32(i64_low(stringOffset));\r\n }\r\n\r\n compileStaticArray(elementType: Type, expressions: (Expression | null)[], reportNode: Node): ExpressionRef {\r\n // 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 module = this.module;\r\n var nativeType = elementType.toNativeType();\r\n var values: usize;\r\n switch (nativeType) {\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 assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n var exprs = new Array(size);\r\n var expr: BinaryenExpressionRef;\r\n for (let i = 0; i < size; ++i) {\r\n exprs[i] = expressions[i]\r\n ? this.compileExpression(expressions[i], elementType)\r\n : elementType.toNativeZero(module);\r\n if (isStatic) {\r\n expr = this.precomputeExpressionRef(exprs[i]);\r\n if (_BinaryenExpressionGetId(expr) == ExpressionId.Const) {\r\n assert(_BinaryenExpressionGetType(expr) == nativeType);\r\n switch (nativeType) {\r\n case NativeType.I32: {\r\n changetype(values)[i] = _BinaryenConstGetValueI32(expr);\r\n break;\r\n }\r\n case NativeType.I64: {\r\n changetype(values)[i] = i64_new(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n );\r\n break;\r\n }\r\n case NativeType.F32: {\r\n changetype(values)[i] = _BinaryenConstGetValueF32(expr);\r\n break;\r\n }\r\n case NativeType.F64: {\r\n changetype(values)[i] = _BinaryenConstGetValueF64(expr);\r\n break;\r\n }\r\n default: {\r\n assert(false); // checked above\r\n }\r\n }\r\n } else {\r\n // TODO: emit a warning if declared 'const'\r\n isStatic = false;\r\n }\r\n }\r\n }\r\n\r\n 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 module = this.module;\r\n var options = this.options;\r\n var currentFunction = this.currentFunction;\r\n\r\n var resolved = this.program.resolveExpression( // reports\r\n expression.expression,\r\n currentFunction\r\n );\r\n if (resolved) {\r\n if (resolved.element.kind == ElementKind.CLASS_PROTOTYPE) {\r\n let prototype = resolved.element;\r\n let instance = prototype.resolveUsingTypeArguments( // reports\r\n expression.typeArguments,\r\n null,\r\n expression\r\n );\r\n if (instance) {\r\n let thisExpr = compileBuiltinAllocate(this, instance, expression);\r\n let initializers = new Array();\r\n\r\n // use a temp local for 'this'\r\n let tempLocal = currentFunction.getTempLocal(options.usizeType);\r\n initializers.push(module.createSetLocal(tempLocal.index, thisExpr));\r\n\r\n // apply field initializers\r\n if (instance.members) {\r\n for (let member of instance.members.values()) {\r\n if (member.kind == ElementKind.FIELD) {\r\n let field = member;\r\n let 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(module.createStore(field.type.byteSize,\r\n module.createGetLocal(tempLocal.index, 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 let constructorInstance = instance.constructorInstance;\r\n if (constructorInstance) {\r\n initializers.push(this.compileCallDirect(constructorInstance, expression.arguments, expression,\r\n module.createGetLocal(tempLocal.index, options.nativeSizeType)\r\n ));\r\n }\r\n\r\n // return 'this'\r\n initializers.push(module.createGetLocal(tempLocal.index, options.nativeSizeType));\r\n currentFunction.freeTempLocal(tempLocal);\r\n thisExpr = module.createBlock(null, initializers, 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 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 program = this.program;\r\n var module = this.module;\r\n\r\n var resolved = program.resolvePropertyAccess(propertyAccess, this.currentFunction); // reports\r\n if (!resolved) return module.createUnreachable();\r\n\r\n var element = resolved.element;\r\n var targetExpr: ExpressionRef;\r\n switch (element.kind) {\r\n case ElementKind.GLOBAL: { // static property\r\n if (element.is(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 module.createUnreachable();\r\n }\r\n let globalType = (element).type;\r\n assert(globalType != Type.void);\r\n if ((element).is(ElementFlags.INLINED)) {\r\n return this.compileInlineConstant(element, contextualType, retainConstantType);\r\n }\r\n this.currentType = globalType;\r\n return module.createGetGlobal((element).internalName, globalType.toNativeType());\r\n }\r\n case ElementKind.ENUMVALUE: { // enum value\r\n if (!this.compileEnum((element).enum)) {\r\n return this.module.createUnreachable();\r\n }\r\n this.currentType = Type.i32;\r\n if ((element).is(ElementFlags.INLINED)) {\r\n return module.createI32((element).constantValue);\r\n }\r\n return module.createGetGlobal((element).internalName, NativeType.I32);\r\n }\r\n case ElementKind.FIELD: { // instance field\r\n assert(resolved.isInstanceTarget);\r\n assert((element).memoryOffset >= 0);\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n this.options.usizeType,\r\n ConversionKind.NONE\r\n );\r\n this.currentType = (element).type;\r\n return module.createLoad(\r\n (element).type.size >> 3,\r\n (element).type.is(TypeFlags.SIGNED | TypeFlags.INTEGER),\r\n targetExpr,\r\n (element).type.toNativeType(),\r\n (element).memoryOffset\r\n );\r\n }\r\n case ElementKind.PROPERTY: { // instance property (here: getter)\r\n let prototype = (element).getterPrototype;\r\n if (prototype) {\r\n let instance = prototype.resolve(null); // reports\r\n if (!instance) return module.createUnreachable();\r\n let signature = instance.signature;\r\n if (!this.checkCallSignature( // reports\r\n signature,\r\n 0,\r\n instance.is(ElementFlags.INSTANCE),\r\n propertyAccess\r\n )) {\r\n return module.createUnreachable();\r\n }\r\n if (instance.instanceMethodOf) {\r\n targetExpr = this.compileExpression(\r\n resolved.targetExpression,\r\n instance.instanceMethodOf.type\r\n );\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], propertyAccess, targetExpr);\r\n } else {\r\n this.currentType = signature.returnType;\r\n return this.compileCallDirect(instance, [], propertyAccess);\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Property_0_does_not_exist_on_type_1,\r\n propertyAccess.range, (element).simpleName, (element).parent.toString()\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n }\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n propertyAccess.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n compileTernaryExpression(expression: TernaryExpression, contextualType: Type): ExpressionRef {\r\n var 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 var module = this.module;\r\n var currentFunction = this.currentFunction;\r\n\r\n // make a getter for the expression (also obtains the type)\r\n var getValue = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n false // wrapped below\r\n );\r\n var currentType = this.currentType;\r\n\r\n var op: BinaryOp;\r\n var nativeType: NativeType;\r\n var nativeOne: ExpressionRef;\r\n var possiblyOverflows = false;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS_PLUS: {\r\n if (currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n switch (currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true;\r\n default: {\r\n op = BinaryOp.AddI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = module.createI32(1);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n let options = this.options;\r\n op = options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32;\r\n nativeType = options.nativeSizeType;\r\n nativeOne = currentType.toNativeOne(module);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n op = BinaryOp.AddI64;\r\n nativeType = NativeType.I64;\r\n nativeOne = module.createI64(1);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n op = BinaryOp.AddF32;\r\n nativeType = NativeType.F32;\r\n nativeOne = module.createF32(1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n op = BinaryOp.AddF64;\r\n nativeType = NativeType.F64;\r\n nativeOne = module.createF64(1);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n if (currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n switch (currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true;\r\n default: {\r\n op = BinaryOp.SubI32;\r\n nativeType = NativeType.I32;\r\n nativeOne = module.createI32(1);\r\n break;\r\n }\r\n case TypeKind.USIZE: // TODO: check operator overload\r\n case TypeKind.ISIZE: {\r\n let options = this.options;\r\n op = options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32;\r\n nativeType = options.nativeSizeType;\r\n nativeOne = currentType.toNativeOne(module);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n op = BinaryOp.SubI64;\r\n nativeType = NativeType.I64;\r\n nativeOne = module.createI64(1);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n op = BinaryOp.SubF32;\r\n nativeType = NativeType.F32;\r\n nativeOne = module.createF32(1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n op = BinaryOp.SubF64;\r\n nativeType = NativeType.F64;\r\n nativeOne = module.createF64(1);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n break;\r\n }\r\n default: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n\r\n var setValue: ExpressionRef;\r\n var tempLocal: Local | null = null;\r\n\r\n // simplify if dropped anyway\r\n if (contextualType == Type.void) {\r\n setValue = module.createBinary(op,\r\n getValue,\r\n nativeOne\r\n );\r\n\r\n // otherwise use a temp local for the intermediate value\r\n } else {\r\n tempLocal = currentFunction.getTempLocal(currentType);\r\n setValue = module.createBinary(op,\r\n this.module.createGetLocal(tempLocal.index, nativeType),\r\n nativeOne\r\n );\r\n }\r\n\r\n if (possiblyOverflows) {\r\n assert(currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER));\r\n setValue = makeSmallIntegerWrap(setValue, currentType, module);\r\n }\r\n\r\n setValue = this.compileAssignmentWithValue(expression.operand, setValue, false);\r\n // ^ sets currentType = void\r\n if (contextualType == Type.void) {\r\n assert(!tempLocal);\r\n return setValue;\r\n }\r\n\r\n this.currentType = assert(tempLocal).type;\r\n currentFunction.freeTempLocal(tempLocal);\r\n var localIndex = (tempLocal).index;\r\n return module.createBlock(null, [\r\n module.createSetLocal(localIndex, getValue),\r\n setValue,\r\n module.createGetLocal(localIndex, nativeType)\r\n ], nativeType);\r\n }\r\n\r\n compileUnaryPrefixExpression(\r\n expression: UnaryPrefixExpression,\r\n contextualType: Type,\r\n wrapSmallIntegers: bool = true\r\n ): ExpressionRef {\r\n var module = this.module;\r\n var currentType = this.currentType;\r\n\r\n var possiblyOverflows = false;\r\n var compound = false;\r\n var expr: ExpressionRef;\r\n\r\n switch (expression.operator) {\r\n case Token.PLUS: {\r\n if (currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n false // wrapped below\r\n );\r\n currentType = this.currentType;\r\n possiblyOverflows = currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER); // if operand already did\r\n break;\r\n }\r\n case Token.MINUS: {\r\n if (currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (expression.operand.kind == NodeKind.LITERAL && (\r\n (expression.operand).literalKind == LiteralKind.INTEGER ||\r\n (expression.operand).literalKind == LiteralKind.FLOAT\r\n )) {\r\n // implicitly negate integer and float literals. also enables proper checking of literal ranges.\r\n expr = this.compileLiteralExpression(expression.operand, contextualType, true);\r\n if (this.options.sourceMap) {\r\n // compileExpression normally does this\r\n addDebugLocation(expr, expression.range, module, this.currentFunction);\r\n }\r\n currentType = this.currentType;\r\n } else {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n false // wrapped below\r\n );\r\n currentType = this.currentType;\r\n switch (currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true; // or if operand already did\r\n default: {\r\n expr = module.createBinary(BinaryOp.SubI32, module.createI32(0), expr);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n currentType.toNativeZero(module),\r\n expr\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, module.createI64(0), expr);\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createUnary(UnaryOp.NegF32, expr);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createUnary(UnaryOp.NegF64, expr);\r\n break;\r\n }\r\n }\r\n }\r\n break;\r\n }\r\n case Token.PLUS_PLUS: {\r\n if (currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n compound = true;\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n false // wrapped below\r\n );\r\n currentType = this.currentType;\r\n switch (currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true; // or if operand already did\r\n default: {\r\n expr = module.createBinary(BinaryOp.AddI32, expr, this.module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.AddI64\r\n : BinaryOp.AddI32,\r\n expr,\r\n currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.AddI64, expr, module.createI64(1));\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.AddF32, expr, module.createF32(1));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.AddF64, expr, module.createF64(1));\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case Token.MINUS_MINUS: {\r\n if (currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n compound = true;\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n false // wrapped below\r\n );\r\n currentType = this.currentType;\r\n switch (currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true; // or if operand already did\r\n default: {\r\n expr = module.createBinary(BinaryOp.SubI32, expr, module.createI32(1));\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.SubI64\r\n : BinaryOp.SubI32,\r\n expr,\r\n currentType.toNativeOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.SubI64, expr, module.createI64(1));\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n expr = module.createBinary(BinaryOp.SubF32, expr, module.createF32(1));\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n expr = module.createBinary(BinaryOp.SubF64, expr, module.createF64(1));\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case Token.EXCLAMATION: {\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType,\r\n ConversionKind.NONE,\r\n true // must wrap small integers\r\n );\r\n expr = makeIsFalseish(expr, this.currentType, module);\r\n this.currentType = Type.bool;\r\n break;\r\n }\r\n case Token.TILDE: {\r\n if (currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n expr = this.compileExpression(\r\n expression.operand,\r\n contextualType == Type.void\r\n ? Type.i32\r\n : contextualType.is(TypeFlags.FLOAT)\r\n ? Type.i64\r\n : contextualType,\r\n contextualType == Type.void\r\n ? ConversionKind.NONE\r\n : ConversionKind.IMPLICIT,\r\n false // retains low bits of small integers\r\n );\r\n currentType = this.currentType;\r\n switch (currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: possiblyOverflows = true; // or if operand already did\r\n default: {\r\n expr = module.createBinary(BinaryOp.XorI32, expr, module.createI32(-1));\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (currentType.isReference) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // fall-through\r\n }\r\n case TypeKind.ISIZE: {\r\n expr = module.createBinary(\r\n this.options.isWasm64\r\n ? BinaryOp.XorI64\r\n : BinaryOp.XorI32,\r\n expr,\r\n currentType.toNativeNegOne(module)\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n expr = module.createBinary(BinaryOp.XorI64, expr, module.createI64(-1, -1));\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n case Token.TYPEOF: {\r\n // it might make sense to implement typeof in a way that a generic function can detect\r\n // whether its type argument is a class type or string. that could then be used, for\r\n // example, to generate hash codes for sets and maps, depending on the kind of type\r\n // parameter we have. ideally the comparison would not involve actual string comparison and\r\n // limit available operations to hard-coded string literals.\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n default: {\r\n assert(false);\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n }\r\n if (possiblyOverflows && wrapSmallIntegers) {\r\n assert(currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER));\r\n expr = makeSmallIntegerWrap(expr, currentType, module);\r\n }\r\n return compound\r\n ? this.compileAssignmentWithValue(expression.operand, expr, contextualType != Type.void)\r\n : expr;\r\n }\r\n}\r\n\r\n// helpers\r\n\r\n/** Adds the debug location of the specified expression at the specified range to the source map. */\r\nfunction addDebugLocation(expr: ExpressionRef, range: Range, module: Module, currentFunction: Function): void {\r\n var source = range.source;\r\n if (source.debugInfoIndex < 0) {\r\n source.debugInfoIndex = module.addDebugInfoFile(source.normalizedPath);\r\n }\r\n range.debugInfoRef = expr;\r\n if (!currentFunction.debugLocations) currentFunction.debugLocations = [];\r\n currentFunction.debugLocations.push(range);\r\n}\r\n\r\n/** Wraps a 32-bit integer expression so it evaluates to a valid value of the specified type. */\r\nexport function makeSmallIntegerWrap(expr: ExpressionRef, type: Type, module: Module): ExpressionRef {\r\n switch (type.kind) {\r\n case TypeKind.I8: {\r\n return module.createBinary(BinaryOp.ShrI32,\r\n module.createBinary(BinaryOp.ShlI32,\r\n expr,\r\n module.createI32(24)\r\n ),\r\n module.createI32(24)\r\n );\r\n }\r\n case TypeKind.I16: {\r\n return module.createBinary(BinaryOp.ShrI32,\r\n module.createBinary(BinaryOp.ShlI32,\r\n expr,\r\n module.createI32(16)\r\n ),\r\n module.createI32(16)\r\n );\r\n }\r\n case TypeKind.U8: {\r\n return module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xff)\r\n );\r\n }\r\n case TypeKind.U16: {\r\n return module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0xffff)\r\n );\r\n }\r\n case TypeKind.BOOL: {\r\n return module.createBinary(BinaryOp.AndI32,\r\n expr,\r\n module.createI32(0x1)\r\n );\r\n }\r\n default: {\r\n assert(false);\r\n return expr;\r\n }\r\n }\r\n}\r\n\r\n/** Creates a comparison whether an expression is not 'true' in a broader sense. */\r\nexport function makeIsFalseish(expr: ExpressionRef, type: Type, module: Module): ExpressionRef {\r\n switch (type.kind) {\r\n default: { // any native i32\r\n return module.createUnary(UnaryOp.EqzI32, expr);\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createUnary(UnaryOp.EqzI64, expr);\r\n }\r\n case TypeKind.USIZE: // TODO: strings?\r\n case TypeKind.ISIZE: {\r\n return module.createUnary(type.size == 64 ? UnaryOp.EqzI64 : UnaryOp.EqzI32, expr);\r\n }\r\n case TypeKind.F32: {\r\n return module.createBinary(BinaryOp.EqF32, expr, module.createF32(0));\r\n }\r\n case TypeKind.F64: {\r\n return module.createBinary(BinaryOp.EqF64, expr, module.createF64(0));\r\n }\r\n case TypeKind.VOID: {\r\n assert(false);\r\n return module.createI32(1);\r\n }\r\n }\r\n}\r\n\r\n/** Creates a comparison whether an expression is 'true' in a broader sense. */\r\nexport function makeIsTrueish(expr: ExpressionRef, type: Type, module: Module): ExpressionRef {\r\n switch (type.kind) {\r\n default: { // any native i32\r\n return expr;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n return module.createBinary(BinaryOp.NeI64, expr, module.createI64(0));\r\n }\r\n case TypeKind.USIZE: // TODO: strings?\r\n case TypeKind.ISIZE: {\r\n return type.size == 64\r\n ? module.createBinary(BinaryOp.NeI64, expr, module.createI64(0))\r\n : expr;\r\n }\r\n case TypeKind.F32: {\r\n return module.createBinary(BinaryOp.NeF32, expr, module.createF32(0));\r\n }\r\n case TypeKind.F64: {\r\n return module.createBinary(BinaryOp.NeF64, expr, module.createF64(0));\r\n }\r\n case TypeKind.VOID: {\r\n assert(false);\r\n return module.createI32(0);\r\n }\r\n }\r\n}\r\n","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 let ipos = pos;\r\n while (--ipos >= 0) {\r\n if (path.charCodeAt(ipos) == separator) {\r\n if (pos - ipos != 3 ||\r\n path.charCodeAt(ipos + 1) != CharCode.DOT ||\r\n path.charCodeAt(ipos + 2) != CharCode.DOT\r\n ) { // exclude '..' itself\r\n path = atEnd\r\n ? path.substring(0, ipos)\r\n : path.substring(0, ipos) + path.substring(pos + 3);\r\n len -= pos + 3 - ipos;\r\n pos = ipos - 1; // incremented again at end of loop\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // if there's no preceeding '/', trim start if non-empty\r\n if (ipos < 0 && pos > 0) {\r\n if (pos != 2 ||\r\n path.charCodeAt(0) != CharCode.DOT ||\r\n path.charCodeAt(1) != CharCode.DOT\r\n ) { // exclude '..' itself\r\n path = path.substring(pos + 4);\r\n len = path.length;\r\n continue;\r\n }\r\n }\r\n }\r\n }\r\n pos++;\r\n }\r\n return len > 0 ? path : \".\";\r\n}\r\n\r\n/** Resolves the specified path relative to the specified origin. */\r\nexport function 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 }\r\n default: {\r\n return false;\r\n }\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is some sort of white space. */\r\nexport function isWhiteSpace(c: i32): bool {\r\n switch (c) {\r\n case CharCode.SPACE:\r\n case CharCode.TAB:\r\n case CharCode.VERTICALTAB:\r\n case CharCode.FORMFEED:\r\n case CharCode.NONBREAKINGSPACE:\r\n case CharCode.NEXTLINE:\r\n case CharCode.OGHAM:\r\n case CharCode.NARROWNOBREAKSPACE:\r\n case CharCode.MATHEMATICALSPACE:\r\n case CharCode.IDEOGRAPHICSPACE:\r\n case CharCode.BYTEORDERMARK: {\r\n return true;\r\n }\r\n default: {\r\n return c >= CharCode.ENQUAD && c <= CharCode.ZEROWIDTHSPACE;\r\n }\r\n }\r\n}\r\n\r\n/** Tests if the specified character code is a 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 CommonTypeNode,\r\n TypeNode,\r\n SignatureNode,\r\n\r\n Expression,\r\n AssertionKind,\r\n CallExpression,\r\n IdentifierExpression,\r\n StringLiteralExpression,\r\n\r\n Statement,\r\n BlockStatement,\r\n BreakStatement,\r\n ClassDeclaration,\r\n ContinueStatement,\r\n DeclarationStatement,\r\n DecoratorNode,\r\n DoStatement,\r\n EnumDeclaration,\r\n EnumValueDeclaration,\r\n ExportImportStatement,\r\n ExportMember,\r\n ExportStatement,\r\n ExpressionStatement,\r\n ForStatement,\r\n FunctionExpression,\r\n FunctionDeclaration,\r\n IfStatement,\r\n ImportDeclaration,\r\n ImportStatement,\r\n ModifierNode,\r\n ModifierKind,\r\n NamespaceDeclaration,\r\n ParameterNode,\r\n ParameterKind,\r\n ReturnStatement,\r\n SwitchCase,\r\n SwitchStatement,\r\n ThrowStatement,\r\n TryStatement,\r\n TypeDeclaration,\r\n TypeParameterNode,\r\n VariableStatement,\r\n VariableDeclaration,\r\n VoidStatement,\r\n WhileStatement,\r\n\r\n 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 var program = this.program;\r\n\r\n // check if already parsed\r\n var normalizedPath = normalizePath(path);\r\n var sources = program.sources;\r\n for (let i = 0, k = sources.length; i < k; ++i) {\r\n if (sources[i].normalizedPath == normalizedPath) return;\r\n }\r\n this.seenlog.add(normalizedPath);\r\n\r\n // create the source element\r\n var source = new Source(\r\n normalizedPath,\r\n text,\r\n isEntry\r\n ? SourceKind.ENTRY\r\n : path.startsWith(LIBRARY_PREFIX) && path.indexOf(PATH_DELIMITER, LIBRARY_PREFIX.length) < 0\r\n ? SourceKind.LIBRARY\r\n : SourceKind.DEFAULT\r\n );\r\n sources.push(source);\r\n\r\n // tokenize and parse\r\n var tn = new Tokenizer(source, program.diagnostics);\r\n source.tokenizer = tn;\r\n while (!tn.skip(Token.ENDOFFILE)) {\r\n let statement = this.parseTopLevelStatement(tn);\r\n if (statement) {\r\n statement.parent = source;\r\n 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: DecoratorNode[] | null = null;\r\n while (tn.skip(Token.AT)) {\r\n let 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: ModifierNode[] | 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 // parse the statement\r\n var statement: Statement | null = null;\r\n var modifier: ModifierNode | null;\r\n\r\n // handle declarations\r\n switch (tn.peek()) {\r\n case Token.CONST: {\r\n tn.next();\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 } else {\r\n statement = this.parseVariable(tn, modifiers, decorators);\r\n decorators = null;\r\n }\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 tn.next();\r\n statement = this.parseVariable(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ENUM: {\r\n tn.next();\r\n statement = this.parseEnum(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.FUNCTION: {\r\n tn.next();\r\n statement = this.parseFunction(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.ABSTRACT: {\r\n tn.next();\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 tn.next();\r\n statement = this.parseClass(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.NAMESPACE: {\r\n tn.next();\r\n statement = this.parseNamespace(tn, modifiers, decorators);\r\n decorators = null;\r\n break;\r\n }\r\n case Token.IMPORT: {\r\n tn.next();\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 tn.next();\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 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 if (!isNamespaceMember) {\r\n statement = this.parseStatement(tn, true);\r\n }\r\n }\r\n break;\r\n }\r\n }\r\n\r\n // check for decorators that weren't consumed\r\n if (decorators) {\r\n for (let i = 0, k = decorators.length; i < k; ++i) {\r\n this.error(\r\n DiagnosticCode.Decorators_are_not_valid_here,\r\n decorators[i].range\r\n );\r\n }\r\n }\r\n return statement;\r\n }\r\n\r\n /** Obtains the next file to parse. */\r\n nextFile(): string | null {\r\n var backlog = this.backlog;\r\n return backlog.length ? backlog.shift() : null;\r\n }\r\n\r\n /** Finishes parsing and returns the program. */\r\n finish(): Program {\r\n if (this.backlog.length) throw new Error(\"backlog is not empty\");\r\n this.backlog = [];\r\n this.seenlog.clear();\r\n return this.program;\r\n }\r\n\r\n /** Parses a type. */\r\n parseType(\r\n tn: Tokenizer,\r\n acceptParenthesized: bool = true,\r\n suppressErrors: bool = false\r\n ): CommonTypeNode | null {\r\n\r\n // NOTE: this parses our limited subset\r\n var token = tn.next();\r\n var startPos = tn.tokenPos;\r\n\r\n // 'void'\r\n if (token == Token.VOID) {\r\n return Node.createType(\r\n Node.createIdentifierExpression(\"void\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n }\r\n\r\n var type: CommonTypeNode;\r\n\r\n // '(' ...\r\n if (token == Token.OPENPAREN) {\r\n\r\n // '(' FunctionSignature ')' '|' 'null'?\r\n let isNullableSignature = tn.skip(Token.OPENPAREN);\r\n // FunctionSignature?\r\n let signature = this.tryParseSignature(tn);\r\n if (signature) {\r\n if (isNullableSignature) {\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.BAR)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"|\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.NULL)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"null\"\r\n );\r\n }\r\n signature.isNullable = true;\r\n }\r\n return signature;\r\n } else if (isNullableSignature || this.tryParseSignatureIsSignature) {\r\n this.error(\r\n DiagnosticCode.Unexpected_token,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n // Type (',' Type)* ')'\r\n if (acceptParenthesized) {\r\n let innerType = this.parseType(tn, false, suppressErrors);\r\n if (!innerType) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"}\"\r\n );\r\n }\r\n return null;\r\n }\r\n type = innerType;\r\n type.range.start = startPos;\r\n type.range.end = tn.pos;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Unexpected_token,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n\r\n // 'this'\r\n } else if (token == Token.THIS) {\r\n type = Node.createType(\r\n Node.createThisExpression(tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // 'true'\r\n } else if (token == Token.TRUE || token == Token.FALSE) {\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"bool\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // StringLiteral\r\n } else if (token == Token.STRINGLITERAL) {\r\n tn.readString();\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"string\", tn.range()), [], false, tn.range(startPos, tn.pos)\r\n );\r\n\r\n // Identifier\r\n } else if (token == Token.IDENTIFIER) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let parameters = new Array();\r\n let nullable = false;\r\n\r\n // Name\r\n if (tn.skip(Token.LESSTHAN)) {\r\n do {\r\n let parameter = this.parseType(tn, true, suppressErrors);\r\n if (!parameter) return null;\r\n parameters.push(parameter);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \">\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n // ... | null\r\n if (tn.skip(Token.BAR)) {\r\n if (tn.skip(Token.NULL)) {\r\n nullable = true;\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"null\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n type = Node.createType(identifier, parameters, nullable, tn.range(startPos, tn.pos));\r\n\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n // ... [][]\r\n while (tn.skip(Token.OPENBRACKET)) {\r\n let bracketStart = tn.tokenPos;\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n }\r\n return null;\r\n }\r\n let bracketRange = tn.range(bracketStart, tn.pos);\r\n\r\n // ...[] | null\r\n let nullable = false;\r\n if (tn.skip(Token.BAR)) {\r\n if (tn.skip(Token.NULL)) {\r\n nullable = true;\r\n } else {\r\n if (!suppressErrors) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"null\"\r\n );\r\n }\r\n return null;\r\n }\r\n }\r\n type = Node.createType(\r\n Node.createIdentifierExpression(\"Array\", bracketRange),\r\n [ type ],\r\n nullable,\r\n tn.range(startPos, tn.pos)\r\n );\r\n if (nullable) break;\r\n }\r\n\r\n return type;\r\n }\r\n\r\n // Indicates whether tryParseSignature determined that it is handling a Signature\r\n private tryParseSignatureIsSignature: bool = false;\r\n\r\n /** Parses a function signature, as used in type declarations. */\r\n tryParseSignature(\r\n tn: Tokenizer\r\n ): SignatureNode | null {\r\n\r\n // at '(': ('...'? Identifier '?'? ':' Type (',' '...'? Identifier '?'? ':' Type)* )? ')' '=>' Type\r\n\r\n var state = tn.mark();\r\n var startPos = tn.tokenPos;\r\n var parameters: ParameterNode[] | null = null;\r\n var thisType: TypeNode | null = null;\r\n var isSignature: bool = false;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n parameters = [];\r\n\r\n } else {\r\n isSignature = false; // not yet known\r\n do {\r\n let kind = ParameterKind.DEFAULT;\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n kind = ParameterKind.REST;\r\n }\r\n if (tn.skip(Token.THIS)) {\r\n if (tn.skip(Token.COLON)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n let t = this.parseType(tn, false);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n this.tryParseSignatureIsSignature = true;\r\n return null;\r\n }\r\n thisType = t;\r\n } else {\r\n tn.reset(state);\r\n this.tryParseSignatureIsSignature = false;\r\n return null;\r\n }\r\n } else if (tn.skip(Token.IDENTIFIER)) {\r\n let name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range(tn.tokenPos, tn.pos));\r\n if (tn.skip(Token.QUESTION)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n if (kind == ParameterKind.REST) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n tn.range()\r\n ); // recoverable\r\n } else {\r\n kind = ParameterKind.OPTIONAL;\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n let type = this.parseType(tn); // not suppressing errors because known\r\n if (!type) {\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n let param = new ParameterNode();\r\n param.parameterKind = kind;\r\n param.name = name;\r\n param.type = type;\r\n if (!parameters) parameters = [ param ];\r\n else parameters.push(param);\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n }\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n }\r\n\r\n var returnType: CommonTypeNode | null;\r\n if (tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n isSignature = true;\r\n tn.discard(state);\r\n returnType = this.parseType(tn);\r\n if (!returnType) {\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n } else {\r\n if (isSignature) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"=>\"\r\n );\r\n } else {\r\n tn.reset(state);\r\n }\r\n this.tryParseSignatureIsSignature = isSignature;\r\n return null;\r\n }\r\n this.tryParseSignatureIsSignature = true;\r\n return Node.createSignature(\r\n parameters || [],\r\n returnType,\r\n thisType,\r\n false,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n\r\n // statements\r\n\r\n parseDecorator(\r\n tn: Tokenizer\r\n ): DecoratorNode | null {\r\n\r\n // at '@': Identifier ('.' Identifier)* '(' Arguments\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n let name = tn.readIdentifier();\r\n let expression: Expression = Node.createIdentifierExpression(name, tn.range(startPos, tn.pos));\r\n while (tn.skip(Token.DOT)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n name = tn.readIdentifier();\r\n expression = Node.createPropertyAccessExpression(\r\n expression,\r\n Node.createIdentifierExpression(name, tn.range()),\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n let args: Expression[] | null;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n args = this.parseArguments(tn);\r\n if (args) {\r\n return Node.createDecorator(expression, args, tn.range(startPos, tn.pos));\r\n }\r\n } else {\r\n return Node.createDecorator(expression, null, tn.range(startPos, tn.pos));\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseVariable(\r\n tn: Tokenizer,\r\n modifiers: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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 let 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: ModifierNode[] | null,\r\n parentDecorators: DecoratorNode[] | null\r\n ): VariableDeclaration | null {\r\n\r\n // before: Identifier (':' Type)? ('=' Expression)?\r\n\r\n if (!tn.skip(Token.IDENTIFIER)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n var identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n\r\n var type: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n }\r\n\r\n var initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (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: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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 let 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 ): TypeParameterNode[] | null {\r\n\r\n // at '<': TypeParameter (',' TypeParameter)* '>'\r\n\r\n var typeParameters = new Array();\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n do {\r\n let typeParameter = this.parseTypeParameter(tn);\r\n if (!typeParameter) return null;\r\n typeParameters.push(typeParameter);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_parameter_list_cannot_be_empty,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n return typeParameters;\r\n }\r\n\r\n parseTypeParameter(\r\n tn: Tokenizer\r\n ): TypeParameterNode | null {\r\n\r\n // before: Identifier ('extends' Type)?\r\n\r\n if (tn.next() == Token.IDENTIFIER) {\r\n let identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n let extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\r\n }\r\n return Node.createTypeParameter(\r\n identifier,\r\n extendsType,\r\n Range.join(identifier.range, tn.range())\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseParameters(\r\n tn: Tokenizer\r\n ): ParameterNode[] | null {\r\n\r\n // at '(': (Parameter (',' Parameter)*)? ')'\r\n\r\n var parameters = new Array();\r\n var seenRest: ParameterNode | null = null;\r\n var seenOptional = false;\r\n var reportedRest = false;\r\n\r\n if (tn.peek() != Token.CLOSEPAREN) {\r\n do {\r\n let param = this.parseParameter(tn);\r\n if (!param) return null;\r\n if (seenRest && !reportedRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_must_be_last_in_a_parameter_list,\r\n seenRest.name.range\r\n );\r\n reportedRest = true;\r\n }\r\n switch (param.parameterKind) {\r\n default: {\r\n if (seenOptional) {\r\n this.error(\r\n DiagnosticCode.A_required_parameter_cannot_follow_an_optional_parameter,\r\n param.name.range\r\n );\r\n }\r\n break;\r\n }\r\n case ParameterKind.OPTIONAL: {\r\n seenOptional = true;\r\n break;\r\n }\r\n case ParameterKind.REST: {\r\n seenRest = param;\r\n break;\r\n }\r\n }\r\n parameters.push(param);\r\n } while (tn.skip(Token.COMMA));\r\n }\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n return parameters;\r\n }\r\n\r\n parseParameter(\r\n tn: Tokenizer,\r\n suppressErrors: bool = false\r\n ): ParameterNode | null {\r\n\r\n // before: '...'? Identifier '?'? (':' Type)? ('=' Expression)?\r\n\r\n var isRest = false;\r\n var isOptional = false;\r\n var startRange: Range | null = null;\r\n if (tn.skip(Token.DOT_DOT_DOT)) {\r\n isRest = true;\r\n startRange = tn.range();\r\n }\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n if (!isRest) startRange = tn.range();\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let type: CommonTypeNode | null = null;\r\n if (isOptional = tn.skip(Token.QUESTION)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_be_optional,\r\n identifier.range\r\n );\r\n }\r\n }\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n }\r\n let initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n if (isRest) {\r\n this.error(\r\n DiagnosticCode.A_rest_parameter_cannot_have_an_initializer,\r\n identifier.range\r\n );\r\n }\r\n if (isOptional) {\r\n this.error(\r\n DiagnosticCode.Parameter_cannot_have_question_mark_and_initializer,\r\n identifier.range\r\n );\r\n } else {\r\n isOptional = true;\r\n }\r\n initializer = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!initializer) return null;\r\n }\r\n return Node.createParameter(\r\n identifier,\r\n type,\r\n initializer,\r\n isRest\r\n ? ParameterKind.REST\r\n : isOptional\r\n ? ParameterKind.OPTIONAL\r\n : ParameterKind.DEFAULT,\r\n Range.join(startRange, tn.range())\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseFunction(\r\n tn: Tokenizer,\r\n modifiers: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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 name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n var signatureStart: i32 = -1;\r\n\r\n var typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n signatureStart = tn.tokenPos;\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n }\r\n\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n if (signatureStart < 0) {\r\n signatureStart = tn.tokenPos;\r\n }\r\n\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n var isSetter = 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 name.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 name.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 name.range\r\n ); // recoverable\r\n }\r\n\r\n var returnType: CommonTypeNode | 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\r\n if (!returnType) {\r\n returnType = Node.createOmittedType(\r\n tn.range(tn.pos)\r\n );\r\n if (!isSetter) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n var signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n null,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n var 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 name,\r\n typeParameters,\r\n signature,\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 name: IdentifierExpression;\r\n var isArrow = false;\r\n\r\n // either at 'function':\r\n // Identifier?\r\n // '(' Parameters (':' Type)?\r\n // Statement\r\n\r\n if (tn.token == Token.FUNCTION) {\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else { // empty name\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.pos));\r\n }\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"(\"\r\n );\r\n return null;\r\n }\r\n\r\n // or at '(' of arrow function:\r\n // Parameters (':' Type)?\r\n // Statement\r\n\r\n } else {\r\n isArrow = true;\r\n assert(tn.token == Token.OPENPAREN);\r\n name = Node.createEmptyIdentifierExpression(tn.range(tn.tokenPos));\r\n }\r\n\r\n // TODO: type parameters? doesn't seem worth it.\r\n\r\n var signatureStart = tn.pos;\r\n var parameters = this.parseParameters(tn);\r\n if (!parameters) return null;\r\n\r\n return this.parseFunctionExpressionCommon(tn, name, parameters, isArrow, startPos, signatureStart);\r\n }\r\n\r\n private parseFunctionExpressionCommon(\r\n tn: Tokenizer,\r\n name: IdentifierExpression,\r\n parameters: ParameterNode[],\r\n isArrow: bool,\r\n startPos: i32 = -1,\r\n signatureStart: i32 = -1\r\n ): FunctionExpression | null {\r\n if (startPos < 0) startPos = name.range.start;\r\n if (signatureStart < 0) signatureStart = startPos;\r\n\r\n var returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n returnType = this.parseType(tn);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n\r\n if (isArrow) {\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"=>\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n var signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n null,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n var body: Statement | null;\r\n if (isArrow) {\r\n body = this.parseStatement(tn, false);\r\n } else {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(tn.pos), \"{\"\r\n );\r\n return null;\r\n }\r\n body = this.parseBlockStatement(tn, false);\r\n }\r\n if (!body) return null;\r\n\r\n var declaration = Node.createFunctionDeclaration(\r\n name,\r\n null,\r\n signature,\r\n body,\r\n null,\r\n 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: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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 let identifier = Node.createIdentifierExpression(\r\n tn.readIdentifier(),\r\n tn.range()\r\n );\r\n\r\n let typeParameters: TypeParameterNode[] | 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 let extendsType: TypeNode | null = null;\r\n if (tn.skip(Token.EXTENDS)) {\r\n let t = this.parseType(tn);\r\n if (!t) return null;\r\n if (t.kind != NodeKind.TYPE) {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n t.range\r\n );\r\n return null;\r\n }\r\n extendsType = t;\r\n }\r\n\r\n let implementsTypes = new Array();\r\n if (tn.skip(Token.IMPLEMENTS)) {\r\n do {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n implementsTypes.push(type);\r\n } while (tn.skip(Token.COMMA));\r\n }\r\n\r\n if (tn.skip(Token.OPENBRACE)) {\r\n\r\n let members = new Array();\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n let isDeclare = hasModifier(ModifierKind.DECLARE, modifiers);\r\n do {\r\n let 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 let decorator = this.parseDecorator(tn);\r\n if (!decorator) break;\r\n decorators.push(decorator);\r\n }\r\n\r\n var modifiers: ModifierNode[] | 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 var state = 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(state);\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(state);\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 let name = isConstructor\r\n ? Node.createConstructorExpression(tn.range())\r\n : Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n\r\n let typeParameters: TypeParameterNode[] | 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 let signatureStart = tn.tokenPos;\r\n let 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 name.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 name.range\r\n );\r\n }\r\n if (parameters.length && parameters[0].initializer) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_parameter_cannot_have_an_initializer,\r\n name.range\r\n );\r\n }\r\n }\r\n\r\n let returnType: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n if (name.kind == NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_annotation_cannot_appear_on_a_constructor_declaration,\r\n tn.range()\r\n );\r\n } else if (isSetter) {\r\n this.error(\r\n DiagnosticCode.A_set_accessor_cannot_have_a_return_type_annotation,\r\n tn.range()\r\n );\r\n }\r\n returnType = this.parseType(tn, name.kind == NodeKind.CONSTRUCTOR || isSetter);\r\n if (!returnType) return null;\r\n } else {\r\n returnType = Node.createOmittedType(tn.range(tn.pos));\r\n if (!isSetter && name.kind != NodeKind.CONSTRUCTOR) {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n returnType.range\r\n ); // recoverable\r\n }\r\n }\r\n\r\n let signature = Node.createSignature(\r\n parameters,\r\n returnType,\r\n null,\r\n false,\r\n tn.range(signatureStart, tn.pos)\r\n );\r\n\r\n let body: Statement | null = null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n if (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 let retMethod = Node.createMethodDeclaration(\r\n name,\r\n typeParameters,\r\n signature,\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 name.range\r\n );\r\n\r\n } else if (isGetter || isSetter) {\r\n this.error(\r\n DiagnosticCode.Function_implementation_is_missing_or_not_immediately_following_the_declaration,\r\n name.range\r\n );\r\n\r\n // field: (':' Type)? ('=' Expression)? ';'?\r\n } else {\r\n let modifier: ModifierNode | 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 let type: CommonTypeNode | null = null;\r\n if (tn.skip(Token.COLON)) {\r\n type = this.parseType(tn);\r\n if (!type) return null;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Type_expected,\r\n tn.range()\r\n ); // recoverable\r\n }\r\n let initializer: Expression | null = null;\r\n if (tn.skip(Token.EQUALS)) {\r\n initializer = this.parseExpression(tn);\r\n if (!initializer) return null;\r\n }\r\n let retField = Node.createFieldDeclaration(\r\n name,\r\n type,\r\n initializer,\r\n 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: ModifierNode[] | null,\r\n decorators: DecoratorNode[] | 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 let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let members = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let member = this.parseTopLevelStatement(tn, true);\r\n if (!member) return null;\r\n members.push(member);\r\n }\r\n let 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: ModifierNode[] | 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 let members = new Array();\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseExportMember(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n let path: StringLiteralExpression | null = null;\r\n if (tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n let ret = Node.createExportStatement(members, path, 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 let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createExportMember(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImport(\r\n tn: Tokenizer\r\n ): ImportStatement | null {\r\n\r\n // at 'import':\r\n // ('{' (ImportMember (',' ImportMember)* '}') | ('*' 'as' Identifier)?\r\n // 'from' StringLiteral ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var members: ImportDeclaration[] | null = null;\r\n var namespaceName: IdentifierExpression | null = null;\r\n var skipFrom = false;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n members = new Array();\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n do {\r\n let member = this.parseImportDeclaration(tn);\r\n if (!member) return null;\r\n members.push(member);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"}\"\r\n );\r\n return null;\r\n }\r\n }\r\n } else if (tn.skip(Token.ASTERISK)) {\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n namespaceName = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"as\"\r\n );\r\n return null;\r\n }\r\n } else {\r\n skipFrom = true;\r\n }\r\n\r\n if (skipFrom || tn.skip(Token.FROM)) {\r\n if (tn.skip(Token.STRINGLITERAL)) {\r\n let path = Node.createStringLiteralExpression(tn.readString(), tn.range());\r\n let ret: ImportStatement;\r\n if (namespaceName) {\r\n assert(!members);\r\n ret = Node.createImportStatementWithWildcard(namespaceName, path, tn.range(startPos, tn.pos));\r\n } else {\r\n ret = Node.createImportStatement(members, path, tn.range(startPos, tn.pos));\r\n }\r\n if (!this.seenlog.has(ret.normalizedPath)) {\r\n this.backlog.push(ret.normalizedPath);\r\n this.seenlog.add(ret.normalizedPath);\r\n }\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode.String_literal_expected,\r\n tn.range()\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"from\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseImportDeclaration(\r\n tn: Tokenizer\r\n ): ImportDeclaration | null {\r\n\r\n // before: Identifier ('as' Identifier)?\r\n\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let asIdentifier: IdentifierExpression | null = null;\r\n if (tn.skip(Token.AS)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createImportDeclaration(\r\n identifier,\r\n asIdentifier,\r\n asIdentifier\r\n ? Range.join(identifier.range, asIdentifier.range)\r\n : identifier.range\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExportImport(\r\n tn: Tokenizer,\r\n 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 let asIdentifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (tn.skip(Token.EQUALS)) {\r\n if (tn.skip(Token.IDENTIFIER)) {\r\n let identifier = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let ret = Node.createExportImportStatement(identifier, asIdentifier, 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 var state = tn.mark();\r\n var token = tn.next();\r\n switch (token) {\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);\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(state);\r\n return this.parseExpressionStatement(tn);\r\n }\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 let 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 let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let ret = Node.createDoStatement(statement, condition, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"while\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseExpressionStatement(\r\n tn: Tokenizer\r\n ): ExpressionStatement | null {\r\n\r\n // at previous token\r\n\r\n var expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n\r\n var ret = Node.createExpressionStatement(expr);\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseForStatement(\r\n tn: Tokenizer\r\n ): ForStatement | null {\r\n\r\n // at 'for': '(' Statement? Expression? ';' Expression? ')' Statement\r\n\r\n var startPos = tn.tokenPos;\r\n\r\n if (tn.skip(Token.OPENPAREN)) {\r\n\r\n let 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 let condition: ExpressionStatement | null = null;\r\n if (!tn.skip(Token.SEMICOLON)) {\r\n condition = this.parseExpressionStatement(tn);\r\n if (!condition) return null;\r\n }\r\n\r\n if (tn.token == Token.SEMICOLON) {\r\n let incrementor: Expression | null = null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n incrementor = this.parseExpression(tn);\r\n if (!incrementor) return null;\r\n\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n\r\n return Node.createForStatement(\r\n initializer,\r\n condition\r\n ? condition.expression\r\n : null,\r\n incrementor,\r\n statement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \";\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseIfStatement(\r\n tn: Tokenizer\r\n ): IfStatement | null {\r\n\r\n // at 'if': '(' Expression ')' Statement ('else' Statement)?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let elseStatement: Statement | null = null;\r\n if (tn.skip(Token.ELSE)) {\r\n elseStatement = this.parseStatement(tn);\r\n if (!elseStatement) return null;\r\n }\r\n return Node.createIfStatement(\r\n condition,\r\n statement,\r\n elseStatement,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchStatement(\r\n tn: Tokenizer\r\n ): SwitchStatement | null {\r\n\r\n // at 'switch': '(' Expression ')' '{' SwitchCase* '}' ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let condition = this.parseExpression(tn);\r\n if (!condition) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let cases = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n let case_ = this.parseSwitchCase(tn);\r\n if (!case_) return null;\r\n cases.push(case_);\r\n }\r\n let ret = Node.createSwitchStatement(condition, cases, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseSwitchCase(\r\n tn: Tokenizer\r\n ): SwitchCase | null {\r\n\r\n var startPos = tn.tokenPos;\r\n var statements: Statement[],\r\n statement: Statement | null;\r\n\r\n // 'case' Expression ':' Statement*\r\n\r\n if (tn.skip(Token.CASE)) {\r\n let label = this.parseExpression(tn);\r\n if (!label) return null;\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(label, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n\r\n // 'default' ':' Statement*\r\n\r\n } else if (tn.skip(Token.DEFAULT)) {\r\n if (tn.skip(Token.COLON)) {\r\n statements = new Array();\r\n while (tn.peek() != Token.CASE && tn.nextToken != Token.DEFAULT && tn.nextToken != Token.CLOSEBRACE) {\r\n statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n statements.push(statement);\r\n }\r\n return Node.createSwitchCase(null, statements, tn.range(startPos, tn.pos));\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._case_or_default_expected,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseThrowStatement(\r\n tn: Tokenizer\r\n ): ThrowStatement | null {\r\n\r\n // at 'throw': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n var ret = Node.createThrowStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseTryStatement(\r\n tn: Tokenizer\r\n ): TryStatement | null {\r\n\r\n // at 'try':\r\n // '{' Statement* '}'\r\n // ('catch' '(' VariableMember ')' '{' Statement* '}')?\r\n // ('finally' '{' Statement* '}'? ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var stmt: Statement | null;\r\n if (tn.skip(Token.OPENBRACE)) {\r\n let statements = new Array();\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n statements.push(stmt);\r\n }\r\n let catchVariable: IdentifierExpression | null = null;\r\n let catchStatements: Statement[] | null = null;\r\n let finallyStatements: Statement[] | null = null;\r\n if (tn.skip(Token.CATCH)) {\r\n if (!tn.skip(Token.OPENPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.IDENTIFIER)) {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n catchVariable = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n catchStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n catchStatements.push(stmt);\r\n }\r\n }\r\n if (tn.skip(Token.FINALLY)) {\r\n if (!tn.skip(Token.OPENBRACE)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n return null;\r\n }\r\n finallyStatements = [];\r\n while (!tn.skip(Token.CLOSEBRACE)) {\r\n stmt = this.parseStatement(tn);\r\n if (!stmt) return null;\r\n finallyStatements.push(stmt);\r\n }\r\n }\r\n if (!(catchStatements || finallyStatements)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"catch\"\r\n );\r\n return null;\r\n }\r\n let ret = Node.createTryStatement(\r\n statements,\r\n catchVariable,\r\n catchStatements,\r\n finallyStatements,\r\n tn.range(startPos, tn.pos)\r\n );\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"{\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n parseTypeDeclaration(\r\n tn: Tokenizer,\r\n modifiers: ModifierNode[] | null = null,\r\n decorators: DecoratorNode[] | null = null\r\n ): TypeDeclaration | null {\r\n\r\n // at 'type': Identifier ('<' TypeParameters '>')? '=' 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 let name = Node.createIdentifierExpression(tn.readIdentifier(), tn.range());\r\n let typeParameters: TypeParameterNode[] | null = null;\r\n if (tn.skip(Token.LESSTHAN)) {\r\n typeParameters = this.parseTypeParameters(tn);\r\n if (!typeParameters) return null;\r\n }\r\n if (tn.skip(Token.EQUALS)) {\r\n let type = this.parseType(tn);\r\n if (!type) return null;\r\n let ret = Node.createTypeDeclaration(\r\n name,\r\n typeParameters,\r\n type,\r\n 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 parseVoidStatement(\r\n tn: Tokenizer\r\n ): VoidStatement | null {\r\n\r\n // at 'void': Expression ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n var expression = this.parseExpression(tn, Precedence.GROUPING);\r\n if (!expression) return null;\r\n var ret = Node.createVoidStatement(expression, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n }\r\n\r\n parseWhileStatement(\r\n tn: Tokenizer\r\n ): WhileStatement | null {\r\n\r\n // at 'while': '(' Expression ')' Statement ';'?\r\n\r\n var startPos = tn.tokenPos;\r\n if (tn.skip(Token.OPENPAREN)) {\r\n let expression = this.parseExpression(tn);\r\n if (!expression) return null;\r\n if (tn.skip(Token.CLOSEPAREN)) {\r\n let statement = this.parseStatement(tn);\r\n if (!statement) return null;\r\n let ret = Node.createWhileStatement(expression, statement, tn.range(startPos, tn.pos));\r\n tn.skip(Token.SEMICOLON);\r\n return ret;\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n }\r\n } else {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"(\"\r\n );\r\n }\r\n return null;\r\n }\r\n\r\n // expressions\r\n // see: http://www.engr.mun.ca/~theo/Misc/exp_parsing.htm#climbing\r\n\r\n parseExpressionStart(\r\n tn: Tokenizer\r\n ): Expression | null {\r\n\r\n var token = tn.next(true);\r\n var startPos = tn.tokenPos;\r\n var expr: Expression | null = null;\r\n\r\n if (token == Token.NULL) {\r\n return Node.createNullExpression(tn.range());\r\n }\r\n if (token == Token.TRUE) {\r\n return Node.createTrueExpression(tn.range());\r\n }\r\n if (token == Token.FALSE) {\r\n return Node.createFalseExpression(tn.range());\r\n }\r\n\r\n var p = determinePrecedenceStart(token);\r\n if (p != Precedence.INVALID) {\r\n let operand: Expression | null;\r\n\r\n // TODO: SpreadExpression, YieldExpression (currently become unsupported UnaryPrefixExpressions)\r\n\r\n // NewExpression\r\n if (token == Token.NEW) {\r\n operand = this.parseExpression(tn, Precedence.CALL);\r\n if (!operand) return null;\r\n if (operand.kind == NodeKind.CALL) {\r\n return Node.createNewExpression(\r\n (operand).expression,\r\n (operand).typeArguments,\r\n (operand).arguments,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Operation_not_supported,\r\n tn.range()\r\n );\r\n }\r\n return null;\r\n } else {\r\n operand = this.parseExpression(tn, p);\r\n if (!operand) return null;\r\n }\r\n\r\n // UnaryPrefixExpression\r\n if (token == Token.PLUS_PLUS || token == Token.MINUS_MINUS) {\r\n if (\r\n operand.kind != NodeKind.IDENTIFIER &&\r\n operand.kind != NodeKind.ELEMENTACCESS &&\r\n operand.kind != NodeKind.PROPERTYACCESS\r\n ) {\r\n this.error(\r\n DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,\r\n operand.range\r\n );\r\n }\r\n }\r\n return Node.createUnaryPrefixExpression(token, operand, tn.range(startPos, tn.pos));\r\n }\r\n\r\n switch (token) {\r\n\r\n // ParenthesizedExpression\r\n // FunctionExpression\r\n case Token.OPENPAREN: {\r\n\r\n // determine whether this is a function expression\r\n if (tn.skip(Token.CLOSEPAREN)) { // must be a function expression (fast route)\r\n return this.parseFunctionExpressionCommon(\r\n tn,\r\n Node.createEmptyIdentifierExpression(tn.range(startPos)),\r\n [],\r\n true\r\n );\r\n }\r\n let state = tn.mark();\r\n let again = true;\r\n do {\r\n switch (tn.next(true)) {\r\n\r\n // function expression\r\n case Token.DOT_DOT_DOT: {\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.IDENTIFIER: {\r\n tn.readIdentifier();\r\n switch (tn.next()) {\r\n\r\n // if we got here, check for arrow\r\n case Token.CLOSEPAREN: {\r\n if (!tn.skip(Token.EQUALS_GREATERTHAN)) {\r\n again = false;\r\n break;\r\n }\r\n // fall-through\r\n }\r\n // function expression\r\n case Token.QUESTION: // optional parameter\r\n case Token.COLON: { // type annotation\r\n tn.reset(state);\r\n return this.parseFunctionExpression(tn);\r\n }\r\n // can be both\r\n case Token.COMMA: {\r\n break; // continue\r\n }\r\n // parenthesized expression\r\n // case Token.EQUALS: // missing type annotation for simplicity\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n break;\r\n }\r\n // parenthesized expression\r\n default: {\r\n again = false;\r\n break;\r\n }\r\n }\r\n } while (again);\r\n tn.reset(state);\r\n\r\n // parse parenthesized\r\n expr = this.parseExpression(tn);\r\n if (!expr) return null;\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n return Node.createParenthesizedExpression(expr, tn.range(startPos, tn.pos));\r\n }\r\n // ArrayLiteralExpression\r\n case Token.OPENBRACKET: {\r\n let elementExpressions = new Array();\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n do {\r\n if (tn.peek() == Token.COMMA) {\r\n expr = null; // omitted\r\n } else {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n }\r\n elementExpressions.push(expr);\r\n if (tn.peek() == Token.CLOSEBRACKET) break;\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n }\r\n return Node.createArrayLiteralExpression(elementExpressions, tn.range(startPos, tn.pos));\r\n }\r\n // AssertionExpression (unary prefix)\r\n case Token.LESSTHAN: {\r\n let toType = this.parseType(tn);\r\n if (!toType) return null;\r\n if (!tn.skip(Token.GREATERTHAN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \">\"\r\n );\r\n return null;\r\n }\r\n expr = this.parseExpression(tn, Precedence.CALL);\r\n if (!expr) return null;\r\n return Node.createAssertionExpression(\r\n AssertionKind.PREFIX,\r\n expr,\r\n toType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n case Token.IDENTIFIER: {\r\n return Node.createIdentifierExpression(tn.readIdentifier(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.THIS: {\r\n return Node.createThisExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.CONSTRUCTOR: {\r\n return Node.createConstructorExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.SUPER: {\r\n return Node.createSuperExpression(tn.range(startPos, tn.pos));\r\n }\r\n case Token.STRINGLITERAL: {\r\n return Node.createStringLiteralExpression(tn.readString(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.INTEGERLITERAL: {\r\n return Node.createIntegerLiteralExpression(tn.readInteger(), tn.range(startPos, tn.pos));\r\n }\r\n case Token.FLOATLITERAL: {\r\n return Node.createFloatLiteralExpression(tn.readFloat(), tn.range(startPos, tn.pos));\r\n }\r\n // RegexpLiteralExpression\r\n // note that this also continues on invalid ones so the surrounding AST remains intact\r\n case Token.SLASH: {\r\n let regexpPattern = tn.readRegexpPattern(); // also reports\r\n if (!tn.skip(Token.SLASH)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"/\"\r\n );\r\n return null;\r\n }\r\n return Node.createRegexpLiteralExpression(\r\n regexpPattern,\r\n tn.readRegexpFlags(), // also reports\r\n tn.range(startPos, tn.pos)\r\n );\r\n }\r\n case Token.FUNCTION: {\r\n return this.parseFunctionExpression(tn);\r\n }\r\n default: {\r\n this.error(\r\n DiagnosticCode.Expression_expected,\r\n tn.range()\r\n );\r\n return null;\r\n }\r\n }\r\n }\r\n\r\n tryParseTypeArgumentsBeforeArguments(\r\n tn: Tokenizer\r\n ): CommonTypeNode[] | null {\r\n\r\n // at '<': Type (',' Type)* '>' '('\r\n\r\n var state = tn.mark();\r\n if (!tn.skip(Token.LESSTHAN)) return null;\r\n var typeArguments = new Array();\r\n do {\r\n let type = this.parseType(tn, true, true);\r\n if (!type) {\r\n tn.reset(state);\r\n return null;\r\n }\r\n typeArguments.push(type);\r\n } while (tn.skip(Token.COMMA));\r\n if (tn.skip(Token.GREATERTHAN) && tn.skip(Token.OPENPAREN)) {\r\n return typeArguments;\r\n }\r\n tn.reset(state);\r\n return null;\r\n }\r\n\r\n parseArguments(\r\n tn: Tokenizer\r\n ): Expression[] | null {\r\n\r\n // at '(': (Expression (',' Expression)*)? ')'\r\n\r\n var args = new Array();\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n do {\r\n let expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n args.push(expr);\r\n } while (tn.skip(Token.COMMA));\r\n if (!tn.skip(Token.CLOSEPAREN)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \")\"\r\n );\r\n return null;\r\n }\r\n }\r\n return args;\r\n }\r\n\r\n parseExpression(\r\n tn: Tokenizer,\r\n precedence: Precedence = 0\r\n ): Expression | null {\r\n\r\n var expr = this.parseExpressionStart(tn);\r\n if (!expr) return null;\r\n var startPos = expr.range.start;\r\n\r\n // CallExpression with type arguments\r\n var typeArguments: CommonTypeNode[] | null;\r\n while (\r\n // there might be better ways to distinguish a LESSTHAN from a CALL with type arguments\r\n (typeArguments = this.tryParseTypeArgumentsBeforeArguments(tn)) ||\r\n tn.skip(Token.OPENPAREN)\r\n ) {\r\n let args = this.parseArguments(tn);\r\n if (!args) return null;\r\n expr = Node.createCallExpression(expr, typeArguments, args, tn.range(startPos, tn.pos));\r\n }\r\n\r\n var token: Token;\r\n var next: Expression | null = null;\r\n var nextPrecedence: Precedence;\r\n while (\r\n (nextPrecedence = determinePrecedence(token = tn.peek())) >= precedence\r\n ) { // precedence climbing\r\n tn.next();\r\n switch (token) {\r\n // AssertionExpression\r\n case Token.AS: {\r\n let toType = this.parseType(tn);\r\n if (!toType) return null;\r\n expr = Node.createAssertionExpression(\r\n AssertionKind.AS,\r\n expr,\r\n toType,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // ElementAccessExpression\r\n case Token.OPENBRACKET: {\r\n next = this.parseExpression(tn);\r\n if (!next) return null;\r\n if (!tn.skip(Token.CLOSEBRACKET)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \"]\"\r\n );\r\n return null;\r\n }\r\n expr = Node.createElementAccessExpression(\r\n expr,\r\n next,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // UnaryPostfixExpression\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS: {\r\n if (\r\n expr.kind != NodeKind.IDENTIFIER &&\r\n expr.kind != NodeKind.ELEMENTACCESS &&\r\n expr.kind != NodeKind.PROPERTYACCESS\r\n ) {\r\n this.error(\r\n DiagnosticCode.The_operand_of_an_increment_or_decrement_operator_must_be_a_variable_or_a_property_access,\r\n expr.range\r\n );\r\n }\r\n expr = Node.createUnaryPostfixExpression(\r\n token,\r\n expr,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // TernaryExpression\r\n case Token.QUESTION: {\r\n let ifThen = this.parseExpression(tn);\r\n if (!ifThen) return null;\r\n if (!tn.skip(Token.COLON)) {\r\n this.error(\r\n DiagnosticCode._0_expected,\r\n tn.range(), \":\"\r\n );\r\n return null;\r\n }\r\n let ifElse = this.parseExpression(tn);\r\n if (!ifElse) return null;\r\n expr = Node.createTernaryExpression(\r\n expr,\r\n ifThen,\r\n ifElse,\r\n tn.range(startPos, tn.pos)\r\n );\r\n break;\r\n }\r\n // CommaExpression\r\n case Token.COMMA: {\r\n let commaExprs: Expression[] = [ expr ];\r\n do {\r\n expr = this.parseExpression(tn, Precedence.COMMA + 1);\r\n if (!expr) return null;\r\n commaExprs.push(expr);\r\n } while (tn.skip(Token.COMMA));\r\n expr = Node.createCommaExpression(commaExprs, tn.range(startPos, tn.pos));\r\n break;\r\n }\r\n default: {\r\n next = this.parseExpression(tn,\r\n isRightAssociative(token)\r\n ? nextPrecedence\r\n : nextPrecedence + 1\r\n );\r\n if (!next) return null;\r\n\r\n // PropertyAccessExpression\r\n if (token == Token.DOT) {\r\n if (next.kind == NodeKind.IDENTIFIER) {\r\n expr = Node.createPropertyAccessExpression(\r\n expr,\r\n next,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else if (next.kind == NodeKind.CALL) { // join\r\n let propertyCall = next;\r\n if (propertyCall.expression.kind == NodeKind.IDENTIFIER) {\r\n propertyCall.expression = Node.createPropertyAccessExpression(\r\n expr,\r\n propertyCall.expression,\r\n tn.range(startPos, tn.pos)\r\n );\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n propertyCall.expression.range\r\n );\r\n return null;\r\n }\r\n expr = propertyCall;\r\n } else {\r\n this.error(\r\n DiagnosticCode.Identifier_expected,\r\n next.range\r\n );\r\n return null;\r\n }\r\n\r\n // BinaryExpression\r\n } else {\r\n expr = Node.createBinaryExpression(token, expr, next, tn.range(startPos, tn.pos));\r\n }\r\n break;\r\n }\r\n }\r\n }\r\n return expr;\r\n }\r\n}\r\n\r\n/** Operator precedence from least to largest. */\r\nexport const enum Precedence {\r\n COMMA,\r\n SPREAD,\r\n YIELD,\r\n ASSIGNMENT,\r\n CONDITIONAL,\r\n LOGICAL_OR,\r\n LOGICAL_AND,\r\n BITWISE_OR,\r\n BITWISE_XOR,\r\n BITWISE_AND,\r\n EQUALITY,\r\n RELATIONAL,\r\n SHIFT,\r\n ADDITIVE,\r\n MULTIPLICATIVE,\r\n EXPONENTIATED,\r\n UNARY_PREFIX,\r\n UNARY_POSTFIX,\r\n CALL,\r\n MEMBERACCESS,\r\n GROUPING,\r\n INVALID = -1\r\n}\r\n\r\n/** Determines the precedence of a starting token. */\r\nfunction determinePrecedenceStart(kind: Token): i32 {\r\n switch (kind) {\r\n case Token.DOT_DOT_DOT: return Precedence.SPREAD;\r\n case Token.YIELD: return Precedence.YIELD;\r\n case Token.EXCLAMATION:\r\n case Token.TILDE:\r\n case Token.PLUS:\r\n case Token.MINUS:\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS:\r\n case Token.TYPEOF:\r\n case Token.VOID:\r\n case Token.DELETE: return Precedence.UNARY_PREFIX;\r\n case Token.NEW: return Precedence.MEMBERACCESS;\r\n default: return Precedence.INVALID;\r\n }\r\n}\r\n\r\n/** Determines the precende of a non-starting token. */\r\nfunction determinePrecedence(kind: Token): i32 {\r\n switch (kind) {\r\n case Token.COMMA: return Precedence.COMMA;\r\n case Token.EQUALS:\r\n case Token.PLUS_EQUALS:\r\n case Token.MINUS_EQUALS:\r\n case Token.ASTERISK_ASTERISK_EQUALS:\r\n case Token.ASTERISK_EQUALS:\r\n case Token.SLASH_EQUALS:\r\n case Token.PERCENT_EQUALS:\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.AMPERSAND_EQUALS:\r\n case Token.CARET_EQUALS:\r\n case Token.BAR_EQUALS: return Precedence.ASSIGNMENT;\r\n case Token.QUESTION: return Precedence.CONDITIONAL;\r\n case Token.BAR_BAR: return Precedence.LOGICAL_OR;\r\n case Token.AMPERSAND_AMPERSAND: return Precedence.LOGICAL_AND;\r\n case Token.BAR: return Precedence.BITWISE_OR;\r\n case Token.CARET: return Precedence.BITWISE_XOR;\r\n case Token.AMPERSAND: return Precedence.BITWISE_AND;\r\n case Token.EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS:\r\n case Token.EQUALS_EQUALS_EQUALS:\r\n case Token.EXCLAMATION_EQUALS_EQUALS: return Precedence.EQUALITY;\r\n case Token.AS:\r\n case Token.IN:\r\n case Token.INSTANCEOF:\r\n case Token.LESSTHAN:\r\n case Token.GREATERTHAN:\r\n case Token.LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_EQUALS: return Precedence.RELATIONAL;\r\n case Token.LESSTHAN_LESSTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: return Precedence.SHIFT;\r\n case Token.PLUS:\r\n case Token.MINUS: return Precedence.ADDITIVE;\r\n case Token.ASTERISK:\r\n case Token.SLASH:\r\n case Token.PERCENT: return Precedence.MULTIPLICATIVE;\r\n case Token.ASTERISK_ASTERISK: return Precedence.EXPONENTIATED;\r\n case Token.PLUS_PLUS:\r\n case Token.MINUS_MINUS: return Precedence.UNARY_POSTFIX;\r\n case Token.DOT:\r\n case Token.NEW:\r\n case Token.OPENBRACKET: return Precedence.MEMBERACCESS;\r\n default: return Precedence.INVALID;\r\n }\r\n}\r\n\r\n/** Determines whether a non-starting token is right associative. */\r\nfunction isRightAssociative(kind: Token): bool {\r\n switch (kind) {\r\n case Token.EQUALS:\r\n case Token.PLUS_EQUALS:\r\n case Token.MINUS_EQUALS:\r\n case Token.ASTERISK_ASTERISK_EQUALS:\r\n case Token.ASTERISK_EQUALS:\r\n case Token.SLASH_EQUALS:\r\n case Token.PERCENT_EQUALS:\r\n case Token.LESSTHAN_LESSTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS:\r\n case Token.AMPERSAND_EQUALS:\r\n case Token.CARET_EQUALS:\r\n case Token.BAR_EQUALS:\r\n case Token.QUESTION:\r\n case Token.ASTERISK_ASTERISK: return true;\r\n default: return false;\r\n }\r\n}\r\n","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): void {\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n decompileFunction(func: FunctionRef): void {\r\n var name = readString(_BinaryenFunctionGetName(func)) || \"$\" + this.functionId.toString(10);\r\n var body = _BinaryenFunctionGetBody(func);\r\n this.push(\"function \");\r\n this.push(name);\r\n this.push(\"(\");\r\n for (let i: Index = 0, k: Index = _BinaryenFunctionGetNumParams(func); i < k; ++i) {\r\n if (i > 0) this.push(\", \");\r\n this.push(\"$\");\r\n this.push(i.toString(10));\r\n this.push(\": \");\r\n this.push(nativeTypeToType(_BinaryenFunctionGetParam(func, i)));\r\n }\r\n this.push(\"): \");\r\n this.push(nativeTypeToType(_BinaryenFunctionGetResult(func)));\r\n this.push(\" \");\r\n if (_BinaryenExpressionGetId(body) != ExpressionId.Block) {\r\n this.push(\"{\\n\");\r\n }\r\n this.decompileExpression(body);\r\n if (_BinaryenExpressionGetId(body) != ExpressionId.Block) {\r\n this.push(\"\\n}\\n\");\r\n }\r\n ++this.functionId;\r\n }\r\n\r\n decompileExpression(expr: ExpressionRef): void {\r\n var id = _BinaryenExpressionGetId(expr);\r\n var type = _BinaryenExpressionGetType(expr);\r\n\r\n var nested: ExpressionRef;\r\n var string: string | null;\r\n var i: Index, k: Index;\r\n\r\n switch (id) {\r\n case ExpressionId.Block: { // TODO: magic\r\n if ((string = readString(_BinaryenBlockGetName(expr))) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"{\\n\");\r\n k = _BinaryenBlockGetNumChildren(expr);\r\n for (i = 0; i < k; ++i) {\r\n this.decompileExpression(_BinaryenBlockGetChild(expr, i));\r\n }\r\n this.push(\"}\\n\");\r\n return;\r\n }\r\n case ExpressionId.If: {\r\n if (type == NativeType.None) {\r\n this.push(\"if (\");\r\n this.decompileExpression(_BinaryenIfGetCondition(expr));\r\n this.push(\") \");\r\n this.decompileExpression(_BinaryenIfGetIfTrue(expr));\r\n if (nested = _BinaryenIfGetIfFalse(expr)) {\r\n this.push(\" else \");\r\n this.decompileExpression(nested);\r\n }\r\n } else {\r\n this.decompileExpression(_BinaryenIfGetCondition(expr));\r\n this.push(\" ? \");\r\n this.decompileExpression(_BinaryenIfGetIfTrue(expr));\r\n this.push(\" : \");\r\n this.decompileExpression(_BinaryenIfGetIfFalse(expr));\r\n }\r\n return;\r\n }\r\n case ExpressionId.Loop: {\r\n if ((string = readString(_BinaryenLoopGetName(expr))) != null) {\r\n this.push(string);\r\n this.push(\": \");\r\n }\r\n this.push(\"do \");\r\n this.decompileExpression(_BinaryenLoopGetBody(expr));\r\n this.push(\"while (0);\\n\");\r\n }\r\n case ExpressionId.Break: {\r\n if (nested = _BinaryenBreakGetCondition(expr)) {\r\n this.push(\"if (\");\r\n this.decompileExpression(nested);\r\n this.push(\") \");\r\n }\r\n if ((string = readString(_BinaryenBreakGetName(expr))) != null) {\r\n this.push(\"break \");\r\n this.push(string);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"break;\\n\");\r\n }\r\n return;\r\n }\r\n case ExpressionId.Switch:\r\n case ExpressionId.Call:\r\n case ExpressionId.CallImport:\r\n case ExpressionId.CallIndirect: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.GetLocal: {\r\n this.push(\"$\");\r\n this.push(_BinaryenGetLocalGetIndex(expr).toString(10));\r\n return;\r\n }\r\n case ExpressionId.SetLocal: {\r\n this.push(\"$\");\r\n this.push(_BinaryenSetLocalGetIndex(expr).toString(10));\r\n this.push(\" = \");\r\n this.decompileExpression(_BinaryenSetLocalGetValue(expr));\r\n return;\r\n }\r\n case ExpressionId.GetGlobal:\r\n case ExpressionId.SetGlobal: {\r\n throw new Error(\"not implemented\");\r\n }\r\n case ExpressionId.Load: {\r\n this.push(\"load<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(_BinaryenLoadGetOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(_BinaryenLoadGetPtr(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Store: {\r\n this.push(\"store<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.push(_BinaryenStoreGetOffset(expr).toString(10));\r\n this.push(\" + \");\r\n this.decompileExpression(_BinaryenStoreGetPtr(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenStoreGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Const: {\r\n switch (type) {\r\n case NativeType.I32: {\r\n this.push(_BinaryenConstGetValueI32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.I64: {\r\n this.push(\r\n i64_to_string(\r\n i64_new(\r\n _BinaryenConstGetValueI64Low(expr),\r\n _BinaryenConstGetValueI64High(expr)\r\n )\r\n )\r\n );\r\n return;\r\n }\r\n case NativeType.F32: {\r\n this.push(_BinaryenConstGetValueF32(expr).toString(10));\r\n return;\r\n }\r\n case NativeType.F64: {\r\n this.push(_BinaryenConstGetValueF64(expr).toString(10));\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Unary: {\r\n switch (_BinaryenUnaryGetOp(expr)) {\r\n case UnaryOp.ClzI32: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI32: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI32: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NegF32:\r\n case UnaryOp.NegF64: {\r\n this.push(\"-\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.AbsF32: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF32: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF32: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF32: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF32: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF32: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.EqzI32:\r\n case UnaryOp.EqzI64: {\r\n this.push(\"!\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ClzI64: {\r\n this.push(\"clz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CtzI64: {\r\n this.push(\"ctz(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.PopcntI64: {\r\n this.push(\"popcnt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.AbsF64: {\r\n this.push(\"abs(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.CeilF64: {\r\n this.push(\"ceil(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.FloorF64: {\r\n this.push(\"floor(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.TruncF64: {\r\n this.push(\"trunc(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.NearestF64: {\r\n this.push(\"nearest(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.SqrtF64: {\r\n this.push(\"sqrt(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ExtendI32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ExtendU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.WrapI64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF32ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToI64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.TruncF64ToU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretF64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU32ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertI64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ConvertU64ToF64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.PromoteF32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.DemoteF64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI32: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case UnaryOp.ReinterpretI64: {\r\n this.push(\"reinterpret(\");\r\n this.decompileExpression(_BinaryenUnaryGetValue(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Binary: { // TODO: precedence\r\n switch (_BinaryenBinaryGetOp(expr)) {\r\n case BinaryOp.AddI32:\r\n case BinaryOp.AddI64:\r\n case BinaryOp.AddF32:\r\n case BinaryOp.AddF64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" + \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.SubI32:\r\n case BinaryOp.SubI64:\r\n case BinaryOp.SubF32:\r\n case BinaryOp.SubF64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" - \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.MulI32:\r\n case BinaryOp.MulI64:\r\n case BinaryOp.MulF32:\r\n case BinaryOp.MulF64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" * \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivI32:\r\n case BinaryOp.DivI64:\r\n case BinaryOp.DivF32:\r\n case BinaryOp.DivF64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RemI32:\r\n case BinaryOp.RemI64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU32: {\r\n this.push(\"(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.AndI32:\r\n case BinaryOp.AndI64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" & \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.OrI32:\r\n case BinaryOp.OrI64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" | \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.XorI32:\r\n case BinaryOp.XorI64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" ^ \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShlI32:\r\n case BinaryOp.ShlI64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" << \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrU32:\r\n case BinaryOp.ShrU64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >>> \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.ShrI32:\r\n case BinaryOp.ShrI64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >> \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI32: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI32: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.EqI32:\r\n case BinaryOp.EqI64:\r\n case BinaryOp.EqF32:\r\n case BinaryOp.EqF64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" == \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.NeI32:\r\n case BinaryOp.NeI64:\r\n case BinaryOp.NeF32:\r\n case BinaryOp.NeF64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" != \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtI32:\r\n case BinaryOp.LtI64:\r\n case BinaryOp.LtF32:\r\n case BinaryOp.LtF64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeI32:\r\n case BinaryOp.LeI64:\r\n case BinaryOp.LeF32:\r\n case BinaryOp.LeF64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtI32:\r\n case BinaryOp.GtI64:\r\n case BinaryOp.GtF32:\r\n case BinaryOp.GtF64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeI32:\r\n case BinaryOp.GeI64:\r\n case BinaryOp.GeF32:\r\n case BinaryOp.GeF64: {\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU32: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.DivU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" / \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RemU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" % \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.RotlI64: {\r\n this.push(\"rotl(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.RotrI64: {\r\n this.push(\"rotr(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.LtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" < \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.LeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" <= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GtU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" > \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.GeU64: {\r\n this.push(\"\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\" >= \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n return;\r\n }\r\n case BinaryOp.CopysignF32: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF32: {\r\n this.push(\"min(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF32: {\r\n this.push(\"max(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.CopysignF64: {\r\n this.push(\"copysign(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MinF64: {\r\n this.push(\"min(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case BinaryOp.MaxF64: {\r\n this.push(\"max(\");\r\n this.decompileExpression(_BinaryenBinaryGetLeft(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenBinaryGetRight(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n return;\r\n }\r\n case ExpressionId.Select: {\r\n this.push(\"select<\");\r\n this.push(nativeTypeToType(type));\r\n this.push(\">(\");\r\n this.decompileExpression(_BinaryenSelectGetIfTrue(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenSelectGetIfFalse(expr));\r\n this.push(\", \");\r\n this.decompileExpression(_BinaryenSelectGetCondition(expr));\r\n this.push(\")\");\r\n return;\r\n }\r\n case ExpressionId.Drop: {\r\n this.decompileExpression(_BinaryenDropGetValue(expr));\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Return: {\r\n if (nested = _BinaryenReturnGetValue(expr)) {\r\n this.push(\"return \");\r\n this.decompileExpression(nested);\r\n this.push(\";\\n\");\r\n } else {\r\n this.push(\"return;\\n\");\r\n }\r\n return;\r\n }\r\n case ExpressionId.Host: {\r\n switch (_BinaryenHostGetOp(expr)) {\r\n case HostOp.CurrentMemory: {\r\n this.push(\"current_memory()\");\r\n return;\r\n }\r\n case HostOp.GrowMemory: {\r\n this.push(\"grow_memory(\");\r\n this.decompileExpression(_BinaryenHostGetOperand(expr, 0));\r\n this.push(\")\");\r\n return;\r\n }\r\n }\r\n break;\r\n }\r\n case ExpressionId.Nop: {\r\n this.push(\";\\n\");\r\n return;\r\n }\r\n case ExpressionId.Unreachable: {\r\n this.push(\"unreachable()\");\r\n return;\r\n }\r\n case ExpressionId.AtomicCmpxchg:\r\n case ExpressionId.AtomicRMW:\r\n case ExpressionId.AtomicWait:\r\n case ExpressionId.AtomicWake:\r\n }\r\n throw new Error(\"not implemented\");\r\n }\r\n\r\n private push(text: string): void {\r\n // mostly here so we can add debugging if necessary\r\n this.text.push(text);\r\n }\r\n\r\n finish(): string {\r\n var ret = this.text.join(\"\");\r\n this.text = [];\r\n return ret;\r\n }\r\n}\r\n\r\nfunction nativeTypeToType(type: NativeType): string {\r\n switch (type) {\r\n case NativeType.None: return \"void\";\r\n case NativeType.I32: return \"i32\";\r\n case NativeType.I64: return \"i64\";\r\n case NativeType.F32: return \"f32\";\r\n case NativeType.F64: return \"f64\";\r\n case NativeType.Unreachable: throw new Error(\"unreachable type\");\r\n case NativeType.Auto: throw new Error(\"auto type\");\r\n default: throw new Error(\"unexpected type\");\r\n }\r\n}\r\n","//////////////////////// 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 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 case \"NaN\": { // context-sensitive\r\n if (compiler.currentType == Type.f32) {\r\n return compiler.module.createF32(NaN);\r\n } else {\r\n compiler.currentType = Type.f64;\r\n return compiler.module.createF64(NaN);\r\n }\r\n }\r\n case \"Infinity\": { // context-sensitive\r\n if (compiler.currentType == Type.f32) {\r\n return compiler.module.createF32(Infinity);\r\n } else {\r\n compiler.currentType = Type.f64;\r\n return compiler.module.createF64(Infinity);\r\n }\r\n }\r\n case \"HEAP_BASE\": { // never inlined for linking purposes\r\n compiler.currentType = compiler.options.usizeType;\r\n return compiler.module.createGetGlobal(\"HEAP_BASE\", compiler.currentType.toNativeType());\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return compiler.module.createUnreachable();\r\n}\r\n\r\n/** Compiles a call to a built-in function. */\r\nexport function compileCall(\r\n compiler: Compiler,\r\n prototype: FunctionPrototype,\r\n typeArguments: Type[] | null,\r\n operands: Expression[],\r\n contextualType: Type,\r\n reportNode: Node\r\n): ExpressionRef {\r\n var module = compiler.module;\r\n\r\n var arg0: ExpressionRef,\r\n arg1: ExpressionRef,\r\n arg2: ExpressionRef,\r\n ret: ExpressionRef;\r\n\r\n 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 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 switch (compiler.currentType.kind) {\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 }\r\n compiler.currentType = Type.bool;\r\n return ret;\r\n }\r\n case \"clz\": { // clz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\r\n ret = module.createUnary(UnaryOp.ClzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.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 }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ClzI64\r\n : UnaryOp.ClzI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.ClzI64, arg0);\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64:\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"ctz\": { // ctz(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\r\n ret = module.createUnary(UnaryOp.CtzI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.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 }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.CtzI64\r\n : UnaryOp.CtzI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.CtzI64, arg0);\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64:\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"popcnt\": { // popcnt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\r\n ret = module.createUnary(UnaryOp.PopcntI32, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.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 }\r\n case TypeKind.ISIZE: {\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.PopcntI64\r\n : UnaryOp.PopcntI32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createUnary(UnaryOp.PopcntI64, arg0);\r\n break;\r\n }\r\n case TypeKind.F32:\r\n case TypeKind.F64:\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"rotl\": { // rotl(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = makeSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotlI32, arg0, arg1),\r\n compiler.currentType,\r\n module\r\n );\r\n // fall-through\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createBinary(BinaryOp.RotlI32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.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 }\r\n case TypeKind.ISIZE: {\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotlI64\r\n : BinaryOp.RotlI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createBinary(BinaryOp.RotlI64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"rotr\": { // rotr(value: T, shift: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.BOOL: {\r\n ret = makeSmallIntegerWrap(\r\n module.createBinary(BinaryOp.RotrI32, arg0, arg1),\r\n compiler.currentType,\r\n module\r\n );\r\n break;\r\n }\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n ret = module.createBinary(BinaryOp.RotrI32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.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 }\r\n case TypeKind.ISIZE: {\r\n ret = module.createBinary(\r\n compiler.options.isWasm64\r\n ? BinaryOp.RotrI64\r\n : BinaryOp.RotrI32,\r\n arg0,\r\n arg1\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createBinary(BinaryOp.RotrI64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"abs\": { // abs(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n // doesn't need sign-extension here because ifFalse below is either positive\r\n // or MIN_VALUE (-MIN_VALUE == MIN_VALUE) if selected\r\n case TypeKind.I32: {\r\n 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 }\r\n case TypeKind.U8:\r\n case TypeKind.U16:\r\n case TypeKind.U32:\r\n case TypeKind.U64:\r\n case TypeKind.BOOL: {\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.AbsF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.AbsF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n default: { // void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"max\": { // max(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n 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 }\r\n return ret;\r\n }\r\n case \"min\": { // min(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.I8:\r\n case TypeKind.I16:\r\n case TypeKind.I32: {\r\n 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 }\r\n return ret;\r\n }\r\n case \"ceil\": { // ceil(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.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 }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.CeilF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.CeilF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"floor\": { // floor(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.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 }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.FloorF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.FloorF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"copysign\": { // copysign(left: T, right: T) -> T\r\n if (operands.length != 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n arg1 = compiler.compileExpression(operands[1], compiler.currentType);\r\n switch (compiler.currentType.kind) { // TODO: does an integer version make sense?\r\n case TypeKind.F32: {\r\n ret = module.createBinary(BinaryOp.CopysignF32, arg0, arg1);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createBinary(BinaryOp.CopysignF64, arg0, arg1);\r\n break;\r\n }\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"nearest\": { // nearest(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.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 }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.NearestF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.NearestF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"reinterpret\": { // reinterpret(value: *) -> T\r\n if (operands.length != 1) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n switch (typeArguments[0].kind) {\r\n case TypeKind.I32:\r\n case TypeKind.U32: {\r\n arg0 = compiler.compileExpression(operands[0], Type.f32);\r\n ret = module.createUnary(UnaryOp.ReinterpretF32, arg0);\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64);\r\n ret = module.createUnary(UnaryOp.ReinterpretF64, arg0);\r\n break;\r\n }\r\n case TypeKind.USIZE: {\r\n if (typeArguments[0].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 }\r\n case TypeKind.ISIZE: {\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.f64\r\n : Type.f32\r\n );\r\n ret = module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.ReinterpretF64\r\n : UnaryOp.ReinterpretF32,\r\n arg0\r\n );\r\n break;\r\n }\r\n case TypeKind.F32: {\r\n arg0 = compiler.compileExpression(operands[0], Type.u32);\r\n ret = module.createUnary(UnaryOp.ReinterpretI32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n arg0 = compiler.compileExpression(operands[0], Type.u64);\r\n ret = module.createUnary(UnaryOp.ReinterpretI64, arg0);\r\n break;\r\n }\r\n default: { // small integers and void\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n compiler.currentType = typeArguments[0];\r\n return ret;\r\n }\r\n case \"sqrt\": { // sqrt(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) { // TODO: integer versions (that return f64 or convert)?\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.SqrtF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.SqrtF64, arg0);\r\n break;\r\n }\r\n // case TypeKind.VOID:\r\n default: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"trunc\": { // trunc(value: T) -> T\r\n if (operands.length != 1) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments && typeArguments.length) {\r\n compiler.currentType = typeArguments[0];\r\n if (typeArguments.length != 1) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.f64, ConversionKind.NONE);\r\n }\r\n switch (compiler.currentType.kind) {\r\n case TypeKind.USIZE: {\r\n if (compiler.currentType.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 }\r\n default: { // any integer\r\n ret = arg0;\r\n break;\r\n }\r\n // TODO: truncate to contextual type directly (if not void etc.)?\r\n case TypeKind.F32: {\r\n ret = module.createUnary(UnaryOp.TruncF32, arg0);\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createUnary(UnaryOp.TruncF64, arg0);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n\r\n // memory access\r\n\r\n case \"load\": { // load(offset: usize, constantOffset?: usize) -> *\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType);\r\n 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\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 switch (compiler.currentType.kind) {\r\n default: { // any value type\r\n ret = module.createSelect(arg0, arg1, arg2);\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = module.createUnreachable();\r\n break;\r\n }\r\n }\r\n return ret;\r\n }\r\n case \"unreachable\": { // unreachable() -> *\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n\r\n // host operations\r\n\r\n case \"current_memory\": { // current_memory() -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 0) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.CurrentMemory);\r\n }\r\n case \"grow_memory\": { // grow_memory(pages: i32) -> i32\r\n compiler.currentType = Type.i32;\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"0\", operands.length.toString(10)\r\n );\r\n arg0 = module.createUnreachable();\r\n } else {\r\n arg0 = compiler.compileExpression(operands[0], Type.i32);\r\n }\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n return module.createHost(HostOp.GrowMemory, null, [ arg0 ]);\r\n }\r\n // see: https://github.com/WebAssembly/bulk-memory-operations\r\n case \"move_memory\": { // move_memory(dest: usize, src: usize: n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType);\r\n arg1 = compiler.compileExpression(operands[1], compiler.options.usizeType);\r\n arg2 = compiler.compileExpression(operands[2], compiler.options.usizeType);\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.MoveMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n case \"set_memory\": { // set_memory(dest: usize, value: u32, n: usize) -> void\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 3) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"3\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.void;\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], compiler.options.usizeType);\r\n arg1 = compiler.compileExpression(operands[1], Type.u32);\r\n arg2 = compiler.compileExpression(operands[2], compiler.options.usizeType);\r\n compiler.currentType = Type.void;\r\n throw new Error(\"not implemented\");\r\n // return module.createHost(HostOp.SetMemory, null, [ arg0, arg1, arg2 ]);\r\n }\r\n\r\n // other\r\n\r\n case \"changetype\": { // changetype(value: *) -> T\r\n if (!(typeArguments && typeArguments.length == 1)) {\r\n if (typeArguments && typeArguments.length) compiler.currentType = typeArguments[0];\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments ? typeArguments.length.toString(10) : \"0\"\r\n );\r\n return module.createUnreachable();\r\n } else if (typeArguments[0].kind != TypeKind.USIZE) { // any usize\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = typeArguments[0];\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.NONE\r\n );\r\n compiler.currentType = typeArguments[0];\r\n if (compiler.currentType.kind != TypeKind.USIZE) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n }\r\n // if (reportNode.range.source.sourceKind != SourceKind.STDLIB)\r\n // compiler.warning(DiagnosticCode.Operation_is_unsafe, reportNode.range);\r\n return arg0; // any usize to any usize\r\n }\r\n case \"assert\": { // assert(isTrueish: T, message?: string) -> T with T != null\r\n if (operands.length < 1 || operands.length > 2) {\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n }\r\n }\r\n if (operands.length < 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_at_least_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n } else if (operands.length > 2) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"2\", operands.length.toString(10)\r\n );\r\n }\r\n return module.createUnreachable();\r\n }\r\n if (typeArguments) {\r\n if (typeArguments.length) compiler.currentType = typeArguments[0].nonNullableType;\r\n if (typeArguments.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_type_arguments_but_got_1,\r\n reportNode.range, \"1\", typeArguments.length.toString(10)\r\n );\r\n return module.createUnreachable();\r\n }\r\n arg0 = compiler.compileExpression(operands[0], typeArguments[0]);\r\n } else {\r\n arg0 = compiler.compileExpressionRetainType(operands[0], Type.i32);\r\n }\r\n\r\n type = compiler.currentType;\r\n compiler.currentType = type.nonNullableType;\r\n\r\n // just return ifTrueish if assertions are disabled, or simplify if dropped anyway\r\n if (compiler.options.noAssert) {\r\n if (contextualType == Type.void) {\r\n compiler.currentType = Type.void;\r\n return module.createNop();\r\n }\r\n return arg0;\r\n }\r\n\r\n let abort = compileAbort(compiler, operands.length == 2 ? operands[1] : null, reportNode);\r\n\r\n compiler.currentType = type.nonNullableType;\r\n\r\n if (contextualType == Type.void) { // simplify if dropped anyway\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.I64:\r\n case TypeKind.U64: {\r\n ret = module.createIf(\r\n module.createUnary(UnaryOp.EqzI64,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.ISIZE:\r\n case TypeKind.USIZE: {\r\n ret = module.createIf(\r\n module.createUnary(\r\n compiler.options.isWasm64\r\n ? UnaryOp.EqzI64\r\n : UnaryOp.EqzI32,\r\n arg0\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n // TODO: also check for NaN in float assertions, as in `Boolean(NaN) -> false`?\r\n case TypeKind.F32: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF32,\r\n arg0,\r\n module.createF32(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.F64: {\r\n ret = module.createIf(\r\n module.createBinary(BinaryOp.EqF64,\r\n arg0,\r\n module.createF64(0)\r\n ),\r\n abort\r\n );\r\n break;\r\n }\r\n case TypeKind.VOID: {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n ret = abort;\r\n break;\r\n }\r\n }\r\n compiler.currentType = Type.void;\r\n } else {\r\n switch (compiler.currentType.kind) {\r\n default: { // any integer up to 32-bits incl. bool\r\n 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 }\r\n return ret;\r\n }\r\n\r\n // conversions\r\n\r\n case \"i8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.i8, ConversionKind.EXPLICIT);\r\n }\r\n case \"i16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.i16, ConversionKind.EXPLICIT);\r\n }\r\n case \"i32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.i32, ConversionKind.EXPLICIT);\r\n }\r\n case \"i64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.i64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.i64, ConversionKind.EXPLICIT);\r\n }\r\n case \"isize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.isWasm64\r\n ? Type.isize64\r\n : Type.isize32,\r\n ConversionKind.EXPLICIT\r\n );\r\n }\r\n case \"u8\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u8;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.u8, ConversionKind.EXPLICIT);\r\n }\r\n case \"u16\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u16;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.u16, ConversionKind.EXPLICIT);\r\n }\r\n case \"u32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.u32, ConversionKind.EXPLICIT);\r\n }\r\n case \"u64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.u64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.u64, ConversionKind.EXPLICIT);\r\n }\r\n case \"usize\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = compiler.options.usizeType;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(\r\n operands[0],\r\n compiler.options.usizeType,\r\n ConversionKind.EXPLICIT\r\n );\r\n }\r\n case \"bool\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.bool;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.bool, ConversionKind.EXPLICIT);\r\n }\r\n case \"f32\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f32;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.f32, ConversionKind.EXPLICIT);\r\n }\r\n case \"f64\": {\r\n if (typeArguments) {\r\n compiler.error(\r\n DiagnosticCode.Type_0_is_not_generic,\r\n reportNode.range, prototype.internalName\r\n );\r\n }\r\n if (operands.length != 1) {\r\n compiler.error(\r\n DiagnosticCode.Expected_0_arguments_but_got_1,\r\n reportNode.range, \"1\", operands.length.toString(10)\r\n );\r\n compiler.currentType = Type.f64;\r\n return module.createUnreachable();\r\n }\r\n return compiler.compileExpression(operands[0], Type.f64, ConversionKind.EXPLICIT);\r\n }\r\n }\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n reportNode.range\r\n );\r\n return module.createUnreachable();\r\n}\r\n\r\nfunction evaluateConstantOffset(compiler: Compiler, expression: Expression): i32 {\r\n var expr: ExpressionRef;\r\n var value: i32;\r\n if (compiler.options.isWasm64) {\r\n expr = compiler.precomputeExpression(expression, Type.usize64);\r\n if (\r\n _BinaryenExpressionGetId(expr) != ExpressionId.Const ||\r\n _BinaryenExpressionGetType(expr) != NativeType.I64 ||\r\n _BinaryenConstGetValueI64High(expr) != 0 ||\r\n (value = _BinaryenConstGetValueI64Low(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n } else {\r\n expr = compiler.precomputeExpression(expression, Type.usize32);\r\n if (\r\n _BinaryenExpressionGetId(expr) != ExpressionId.Const ||\r\n _BinaryenExpressionGetType(expr) != NativeType.I32 ||\r\n (value = _BinaryenConstGetValueI32(expr)) < 0\r\n ) {\r\n compiler.error(\r\n DiagnosticCode.Operation_not_supported,\r\n expression.range\r\n );\r\n value = -1;\r\n }\r\n }\r\n return value;\r\n}\r\n\r\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 = compiler.program;\r\n assert(cls.program == program);\r\n var module = compiler.module;\r\n var options = compiler.options;\r\n\r\n var prototype = program.elements.get(options.allocateImpl);\r\n if (!prototype) {\r\n program.error(\r\n DiagnosticCode.Cannot_find_name_0,\r\n reportNode.range, options.allocateImpl\r\n );\r\n return module.createUnreachable();\r\n }\r\n if (prototype.kind != ElementKind.FUNCTION_PROTOTYPE) {\r\n program.error(\r\n DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures,\r\n reportNode.range, prototype.internalName\r\n );\r\n return module.createUnreachable();\r\n }\r\n\r\n var instance = (prototype).resolve(); // reports\r\n if (!(instance && compiler.compileFunction(instance))) return module.createUnreachable();\r\n\r\n compiler.currentType = cls.type;\r\n return module.createCall(\r\n instance.internalName, [\r\n options.isWasm64\r\n ? module.createI64(cls.currentMemoryOffset)\r\n : module.createI32(cls.currentMemoryOffset)\r\n ],\r\n options.nativeSizeType\r\n );\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 program = compiler.program;\r\n var module = compiler.module;\r\n\r\n var stringType = program.types.get(\"string\"); // might be intended\r\n if (!stringType) return module.createUnreachable();\r\n\r\n var abortPrototype = program.elements.get(\"abort\"); // might be intended\r\n if (!abortPrototype || abortPrototype.kind != ElementKind.FUNCTION_PROTOTYPE) return module.createUnreachable();\r\n\r\n var abortInstance = (abortPrototype).resolve(); // reports\r\n if (!(abortInstance && compiler.compileFunction(abortInstance))) return module.createUnreachable();\r\n\r\n var messageArg = message != null\r\n ? compiler.compileExpression(message, stringType)\r\n : stringType.toNativeZero(module);\r\n\r\n var filenameArg = compiler.compileStaticString(reportNode.range.source.normalizedPath);\r\n\r\n compiler.currentType = Type.void;\r\n return module.createBlock(null, [\r\n module.createCallImport(\r\n abortInstance.internalName, [\r\n messageArg,\r\n filenameArg,\r\n module.createI32(reportNode.range.line),\r\n module.createI32(reportNode.range.column)\r\n ],\r\n NativeType.None\r\n ),\r\n module.createUnreachable()\r\n ]);\r\n}\r\n","module.exports = __WEBPACK_EXTERNAL_MODULE__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/lib/lint/package.json b/lib/lint/package.json index a6b58d7e..4daac7ff 100644 --- a/lib/lint/package.json +++ b/lib/lint/package.json @@ -12,6 +12,7 @@ "typescript": "^2.7.2" }, "files": [ + "base.json", "index.json", "package.json", "README.md", diff --git a/package-lock.json b/package-lock.json index 3b1d0099..72ed420c 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,15 +11,15 @@ "dev": true }, "@types/node": { - "version": "9.4.6", - "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.6.tgz", - "integrity": "sha512-CTUtLb6WqCCgp6P59QintjHWqzf4VL1uPA27bipLAPxFqrtK1gEYllePzTICGqQ8rYsCbpnsNypXjjDzGAAjEQ==", + "version": "9.4.7", + "resolved": "https://registry.npmjs.org/@types/node/-/node-9.4.7.tgz", + "integrity": "sha512-4Ba90mWNx8ddbafuyGGwjkZMigi+AWfYLSDCpovwsE63ia8w93r3oJ8PIAQc3y8U+XHcnMOHPIzNe3o438Ywcw==", "dev": true }, "acorn": { - "version": "5.5.0", - "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.0.tgz", - "integrity": "sha512-arn53F07VXmls4o4pUhSzBa4fvaagPRe7AVZ8l7NHxFWUie2DsuFSBMMNAkgzRlOhEhzAnxeKyaWVzOH4xqp/g==", + "version": "5.5.3", + "resolved": "https://registry.npmjs.org/acorn/-/acorn-5.5.3.tgz", + "integrity": "sha512-jd5MkIUlbbmb07nXH0DT3y7rDVtkzDi4XZOUVWAer8ajmF/DTSSbl5oNFyDOl/OXA33Bl79+ypHhl2pN20VeOQ==", "dev": true }, "acorn-dynamic-import": { @@ -28,7 +28,7 @@ "integrity": "sha512-zVWV8Z8lislJoOKKqdNMOB+s6+XV5WERty8MnKBeFgwA+19XJjJHs2RP5dzM57FftIs+jQnRToLiWazKr6sSWg==", "dev": true, "requires": { - "acorn": "5.5.0" + "acorn": "5.5.3" } }, "ajv": { @@ -99,12 +99,6 @@ "sprintf-js": "1.0.3" } }, - "argv": { - "version": "0.0.2", - "resolved": "https://registry.npmjs.org/argv/-/argv-0.0.2.tgz", - "integrity": "sha1-7L0W+JSbFXGDcRsb2jNPN4QBhas=", - "dev": true - }, "arr-diff": { "version": "4.0.0", "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-4.0.0.tgz", @@ -155,12 +149,6 @@ "resolved": "https://registry.npmjs.org/arrify/-/arrify-1.0.1.tgz", "integrity": "sha1-iYUI2iIm84DfkEcoRWhJwVAaSw0=" }, - "asn1": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/asn1/-/asn1-0.2.3.tgz", - "integrity": "sha1-2sh4dxPJlmhJ/IGAd36+nB3fO4Y=", - "dev": true - }, "asn1.js": { "version": "4.10.1", "resolved": "https://registry.npmjs.org/asn1.js/-/asn1.js-4.10.1.tgz", @@ -181,12 +169,6 @@ "util": "0.10.3" } }, - "assert-plus": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-0.2.0.tgz", - "integrity": "sha1-104bh+ev/A24qttwIfP+SBAasjQ=", - "dev": true - }, "assign-symbols": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/assign-symbols/-/assign-symbols-1.0.0.tgz", @@ -194,9 +176,9 @@ "dev": true }, "ast-types": { - "version": "0.10.1", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.10.1.tgz", - "integrity": "sha512-UY7+9DPzlJ9VM8eY0b2TUZcZvF+1pO0hzMtAyjBYKhOmnvRlqYNYnWdtsMj0V16CGaMlpL0G1jnLbLo4AyotuQ==", + "version": "0.11.3", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.3.tgz", + "integrity": "sha512-XA5o5dsNw8MhyW0Q7MWXJWc4oOzZKbdsEJq45h7c8q/d9DwWZ5F2ugUc1PuMLPGsUnphCt/cNDHu8JeBbxf1qA==", "dev": true }, "async": { @@ -211,30 +193,12 @@ "integrity": "sha1-GdOGodntxufByF04iu28xW0zYC0=", "dev": true }, - "asynckit": { - "version": "0.4.0", - "resolved": "https://registry.npmjs.org/asynckit/-/asynckit-0.4.0.tgz", - "integrity": "sha1-x57Zf380y48robyXkLzDZkdLS3k=", - "dev": true - }, "atob": { "version": "2.0.3", "resolved": "https://registry.npmjs.org/atob/-/atob-2.0.3.tgz", "integrity": "sha1-GcenYEc3dEaPILLS0DNyrX1Mv10=", "dev": true }, - "aws-sign2": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/aws-sign2/-/aws-sign2-0.6.0.tgz", - "integrity": "sha1-FDQt0428yU0OW4fXY81jYSwOeU8=", - "dev": true - }, - "aws4": { - "version": "1.6.0", - "resolved": "https://registry.npmjs.org/aws4/-/aws4-1.6.0.tgz", - "integrity": "sha1-g+9cqGCysy5KDe7e6MdxudtXRx4=", - "dev": true - }, "babel-code-frame": { "version": "6.26.0", "resolved": "https://registry.npmjs.org/babel-code-frame/-/babel-code-frame-6.26.0.tgz", @@ -298,6 +262,14 @@ "private": "0.1.8", "slash": "1.0.0", "source-map": "0.5.7" + }, + "dependencies": { + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + } } }, "babel-generator": { @@ -1035,6 +1007,14 @@ "babel-types": "6.26.0", "babylon": "6.18.0", "lodash": "4.17.5" + }, + "dependencies": { + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + } } }, "babel-traverse": { @@ -1050,8 +1030,16 @@ "babylon": "6.18.0", "debug": "2.6.9", "globals": "9.18.0", - "invariant": "2.2.3", + "invariant": "2.2.4", "lodash": "4.17.5" + }, + "dependencies": { + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + } } }, "babel-types": { @@ -1067,9 +1055,9 @@ } }, "babylon": { - "version": "6.18.0", - "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", - "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "version": "7.0.0-beta.40", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-7.0.0-beta.40.tgz", + "integrity": "sha512-AVxF2EcxvGD5hhOuLTOLAXBb0VhwWpEX0HyHdAI2zU+AAP4qEwtQj8voz1JR3uclGai0rfcE+dCTHnNMOnimFg==", "dev": true }, "balanced-match": { @@ -1109,16 +1097,6 @@ "integrity": "sha512-MsAhsUW1GxCdgYSO6tAfZrNapmUKk7mWx/k5mFY/A1gBtkaCaNapTg+FExCw1r9yeaZhqx/xPg43xgTFH6KL5w==", "dev": true }, - "bcrypt-pbkdf": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.1.tgz", - "integrity": "sha1-Y7xdy2EzG5K8Bf1SiVPDNGKgb40=", - "dev": true, - "optional": true, - "requires": { - "tweetnacl": "0.14.5" - } - }, "big.js": { "version": "3.2.0", "resolved": "https://registry.npmjs.org/big.js/-/big.js-3.2.0.tgz", @@ -1132,9 +1110,9 @@ "dev": true }, "binaryen": { - "version": "44.0.0-nightly.20180302", - "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-44.0.0-nightly.20180302.tgz", - "integrity": "sha512-9z+amMwcrRlti3RkrLLZyZznLHQtSC10HDE5TK6SelFQkGEudnjnWQ197J1p5smjgXTUcCyCsrhe2m1HZMazcg==" + "version": "44.0.0-nightly.20180309", + "resolved": "https://registry.npmjs.org/binaryen/-/binaryen-44.0.0-nightly.20180309.tgz", + "integrity": "sha512-ab3Dc7sDoN50G+mcguhgX7keaizW3wNvuGs2dFf5lAdFWNTJvw++onV+IArfKQexectpcYOqjm4ZJkBiDnpLhw==" }, "binaryextensions": { "version": "2.1.1", @@ -1154,15 +1132,6 @@ "integrity": "sha512-ItfYfPLkWHUjckQCk8xC+LwxgK8NYcXywGigJgSwOP8Y2iyWT4f2vsZnoOXTTbo+o5yXmIUJ4gn5538SO5S3gA==", "dev": true }, - "boom": { - "version": "2.10.1", - "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", - "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, "brace-expansion": { "version": "1.1.8", "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.8.tgz", @@ -1333,13 +1302,13 @@ "chownr": "1.0.1", "glob": "7.1.2", "graceful-fs": "4.1.11", - "lru-cache": "4.1.1", + "lru-cache": "4.1.2", "mississippi": "2.0.0", "mkdirp": "0.5.1", "move-concurrently": "1.0.1", "promise-inflight": "1.0.1", "rimraf": "2.6.2", - "ssri": "5.2.4", + "ssri": "5.3.0", "unique-filename": "1.1.0", "y18n": "4.0.0" } @@ -1382,12 +1351,6 @@ "integrity": "sha1-1UVjW+HjPFQmScaRc+Xeas+uNN0=", "dev": true }, - "caseless": { - "version": "0.12.0", - "resolved": "https://registry.npmjs.org/caseless/-/caseless-0.12.0.tgz", - "integrity": "sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw=", - "dev": true - }, "chalk": { "version": "2.3.2", "resolved": "https://registry.npmjs.org/chalk/-/chalk-2.3.2.tgz", @@ -1596,34 +1559,29 @@ "dev": true }, "cliui": { - "version": "3.2.0", - "resolved": "https://registry.npmjs.org/cliui/-/cliui-3.2.0.tgz", - "integrity": "sha1-EgYBU3qRbSmUD5NNo7SNWFo5IT0=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-4.0.0.tgz", + "integrity": "sha512-nY3W5Gu2racvdDk//ELReY+dHjb9PlIcVDFXP72nVIhq2Gy3LuVXYwJoPVudwQnv1shtohpgkdCKT2YaKY0CKw==", "dev": true, "requires": { - "string-width": "1.0.2", - "strip-ansi": "3.0.1", + "string-width": "2.1.1", + "strip-ansi": "4.0.0", "wrap-ansi": "2.1.0" }, "dependencies": { - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } + "ansi-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-3.0.0.tgz", + "integrity": "sha1-7QMXwyIGT3lGbAKWa922Bas32Zg=", + "dev": true }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", + "strip-ansi": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-4.0.0.tgz", + "integrity": "sha1-qEeQIusaw2iocTibY1JixQXuNo8=", "dev": true, "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" + "ansi-regex": "3.0.0" } } } @@ -1656,47 +1614,22 @@ "dev": true }, "cloneable-readable": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.0.0.tgz", - "integrity": "sha1-pikNQT8hemEjL5XkWP84QYz7ARc=", + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/cloneable-readable/-/cloneable-readable-1.1.1.tgz", + "integrity": "sha512-DNNEq6JdqBFPzS29TaoqZFPNLn5Xn3XyPFqLIhyBT8Xou4lHQEWzD6FinXoJUfhIfWX3aE1JkRa3cbWCHFbt1g==", "dev": true, "requires": { "inherits": "2.0.3", - "process-nextick-args": "1.0.7", - "through2": "2.0.3" - }, - "dependencies": { - "process-nextick-args": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/process-nextick-args/-/process-nextick-args-1.0.7.tgz", - "integrity": "sha1-FQ4gt1ZZCtP5EJPyWk8q2L/zC6M=", - "dev": true - } + "process-nextick-args": "2.0.0", + "readable-stream": "2.3.5" } }, - "co": { - "version": "4.6.0", - "resolved": "https://registry.npmjs.org/co/-/co-4.6.0.tgz", - "integrity": "sha1-bqa989hTrlTMuOR7+gvz+QMfsYQ=", - "dev": true - }, "code-point-at": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/code-point-at/-/code-point-at-1.1.0.tgz", "integrity": "sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c=", "dev": true }, - "codecov": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/codecov/-/codecov-3.0.0.tgz", - "integrity": "sha1-wnO4xPEpRXI+jcnSWAPYk0Pl8o4=", - "dev": true, - "requires": { - "argv": "0.0.2", - "request": "2.81.0", - "urlgrey": "0.4.4" - } - }, "collection-visit": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/collection-visit/-/collection-visit-1.0.0.tgz", @@ -1721,20 +1654,11 @@ "integrity": "sha1-p9BVi9icQveV3UIyj3QIMcpTvCU=" }, "colors": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/colors/-/colors-1.1.2.tgz", - "integrity": "sha1-FopHAXVran9RoSzgyXv6KMCE7WM=", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/colors/-/colors-1.2.1.tgz", + "integrity": "sha512-s8+wktIuDSLffCywiwSxQOMqtPxML11a/dtHE17tMn4B1MSWw/C22EKf7M2KGUBcDaVFEGT+S8N02geDXeuNKg==", "dev": true }, - "combined-stream": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.6.tgz", - "integrity": "sha1-cj599ugBrFYTETp+RFqbactjKBg=", - "dev": true, - "requires": { - "delayed-stream": "1.0.0" - } - }, "commander": { "version": "2.13.0", "resolved": "https://registry.npmjs.org/commander/-/commander-2.13.0.tgz", @@ -1879,15 +1803,6 @@ } } }, - "cryptiles": { - "version": "2.0.5", - "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", - "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", - "dev": true, - "requires": { - "boom": "2.10.1" - } - }, "crypto-browserify": { "version": "3.12.0", "resolved": "https://registry.npmjs.org/crypto-browserify/-/crypto-browserify-3.12.0.tgz", @@ -1919,23 +1834,6 @@ "integrity": "sha1-7H6lDHhWTNNsnV7Bj2Yyn63ieCk=", "dev": true }, - "dashdash": { - "version": "1.14.1", - "resolved": "https://registry.npmjs.org/dashdash/-/dashdash-1.14.1.tgz", - "integrity": "sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, "date-fns": { "version": "1.29.0", "resolved": "https://registry.npmjs.org/date-fns/-/date-fns-1.29.0.tgz", @@ -1949,9 +1847,9 @@ "dev": true }, "dateformat": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-2.2.0.tgz", - "integrity": "sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI=", + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/dateformat/-/dateformat-3.0.3.tgz", + "integrity": "sha512-jyCETtSl3VMZMWeRo7iY1FL19ges1t55hMo5yaam4Jrsm5EPL89UQkoQRyiI+Yf4k8r2ZpdngkV8hr1lIdjb3Q==", "dev": true }, "debug": { @@ -2000,12 +1898,6 @@ "isobject": "3.0.1" } }, - "delayed-stream": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/delayed-stream/-/delayed-stream-1.0.0.tgz", - "integrity": "sha1-3zrhmayt+31ECqrgsp4icrJOxhk=", - "dev": true - }, "des.js": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/des.js/-/des.js-1.0.0.tgz", @@ -2047,12 +1939,6 @@ "randombytes": "2.0.6" } }, - "dom-walk": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/dom-walk/-/dom-walk-0.1.1.tgz", - "integrity": "sha1-ZyIm3HTI95mtNTB9+TaroRrNYBg=", - "dev": true - }, "domain-browser": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/domain-browser/-/domain-browser-1.2.0.tgz", @@ -2077,16 +1963,6 @@ "stream-shift": "1.0.0" } }, - "ecc-jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz", - "integrity": "sha1-D8c6ntXw1Tw4GTOYUj735UN3dQU=", - "dev": true, - "optional": true, - "requires": { - "jsbn": "0.1.1" - } - }, "editions": { "version": "1.3.4", "resolved": "https://registry.npmjs.org/editions/-/editions-1.3.4.tgz", @@ -2253,7 +2129,7 @@ "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "4.1.1", + "lru-cache": "4.1.2", "shebang-command": "1.2.0", "which": "1.3.0" } @@ -2418,12 +2294,6 @@ "homedir-polyfill": "1.0.1" } }, - "extend": { - "version": "3.0.1", - "resolved": "https://registry.npmjs.org/extend/-/extend-3.0.1.tgz", - "integrity": "sha1-p1Xqe8Gt/MWjHOfnYtuq3F5jZEQ=", - "dev": true - }, "extend-shallow": { "version": "3.0.2", "resolved": "https://registry.npmjs.org/extend-shallow/-/extend-shallow-3.0.2.tgz", @@ -2492,12 +2362,6 @@ } } }, - "extsprintf": { - "version": "1.3.0", - "resolved": "https://registry.npmjs.org/extsprintf/-/extsprintf-1.3.0.tgz", - "integrity": "sha1-lpGEQOMEGnpBT4xS48V06zw+HgU=", - "dev": true - }, "fast-deep-equal": { "version": "1.1.0", "resolved": "https://registry.npmjs.org/fast-deep-equal/-/fast-deep-equal-1.1.0.tgz", @@ -2578,9 +2442,9 @@ } }, "flow-parser": { - "version": "0.66.0", - "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.66.0.tgz", - "integrity": "sha1-vlg/77ARkqpRZEFdMaYkGzVxiYM=", + "version": "0.67.1", + "resolved": "https://registry.npmjs.org/flow-parser/-/flow-parser-0.67.1.tgz", + "integrity": "sha1-GR/tVsz9jQl9ydSH8to7Da50WEk=", "dev": true }, "flush-write-stream": { @@ -2608,23 +2472,6 @@ "for-in": "1.0.2" } }, - "forever-agent": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/forever-agent/-/forever-agent-0.6.1.tgz", - "integrity": "sha1-+8cfDEGt6zf5bFd60e1C2P2sypE=", - "dev": true - }, - "form-data": { - "version": "2.1.4", - "resolved": "https://registry.npmjs.org/form-data/-/form-data-2.1.4.tgz", - "integrity": "sha1-M8GDrPGTJ27KqYFDpp6Uv+4XUNE=", - "dev": true, - "requires": { - "asynckit": "0.4.0", - "combined-stream": "1.0.6", - "mime-types": "2.1.18" - } - }, "fragment-cache": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/fragment-cache/-/fragment-cache-0.2.1.tgz", @@ -2679,23 +2526,6 @@ "integrity": "sha1-3BXKHGcjh8p2vTesCjlbogQqLCg=", "dev": true }, - "getpass": { - "version": "0.1.7", - "resolved": "https://registry.npmjs.org/getpass/-/getpass-0.1.7.tgz", - "integrity": "sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo=", - "dev": true, - "requires": { - "assert-plus": "1.0.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, "gh-got": { "version": "6.0.0", "resolved": "https://registry.npmjs.org/gh-got/-/gh-got-6.0.0.tgz", @@ -2728,6 +2558,12 @@ "url-to-options": "1.0.1" } }, + "p-cancelable": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", + "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", + "dev": true + }, "p-timeout": { "version": "1.2.1", "resolved": "https://registry.npmjs.org/p-timeout/-/p-timeout-1.2.1.tgz", @@ -2860,24 +2696,6 @@ } } }, - "global": { - "version": "4.3.2", - "resolved": "https://registry.npmjs.org/global/-/global-4.3.2.tgz", - "integrity": "sha1-52mJJopsdMOJCLEwWxD8DjlOnQ8=", - "dev": true, - "requires": { - "min-document": "2.19.0", - "process": "0.5.2" - }, - "dependencies": { - "process": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/process/-/process-0.5.2.tgz", - "integrity": "sha1-FjjYqONML0QKkduVq5rrZ3/Bhc8=", - "dev": true - } - } - }, "global-modules": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/global-modules/-/global-modules-1.0.0.tgz", @@ -2930,9 +2748,9 @@ } }, "got": { - "version": "8.2.0", - "resolved": "https://registry.npmjs.org/got/-/got-8.2.0.tgz", - "integrity": "sha512-giadqJpXIwjY+ZsuWys8p2yjZGhOHiU4hiJHjS/oeCxw1u8vANQz3zPlrxW2Zw/siCXsSMI3hvzWGcnFyujyAg==", + "version": "8.3.0", + "resolved": "https://registry.npmjs.org/got/-/got-8.3.0.tgz", + "integrity": "sha512-kBNy/S2CGwrYgDSec5KTWGKUvupwkkTVAjIsVFF2shXO13xpZdFP4d4kxa//CLX2tN/rV0aYwK8vY6UKWGn2vQ==", "dev": true, "requires": { "@sindresorhus/is": "0.7.0", @@ -2945,7 +2763,7 @@ "isurl": "1.0.0", "lowercase-keys": "1.0.0", "mimic-response": "1.0.0", - "p-cancelable": "0.3.0", + "p-cancelable": "0.4.0", "p-timeout": "2.0.1", "pify": "3.0.0", "safe-buffer": "5.1.1", @@ -2969,34 +2787,6 @@ "lodash": "4.17.5" } }, - "har-schema": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/har-schema/-/har-schema-1.0.5.tgz", - "integrity": "sha1-0mMTX0MwfALGAq/I/pWXDAFRNp4=", - "dev": true - }, - "har-validator": { - "version": "4.2.1", - "resolved": "https://registry.npmjs.org/har-validator/-/har-validator-4.2.1.tgz", - "integrity": "sha1-M0gdDxu/9gDdID11gSpqX7oALio=", - "dev": true, - "requires": { - "ajv": "4.11.8", - "har-schema": "1.0.5" - }, - "dependencies": { - "ajv": { - "version": "4.11.8", - "resolved": "https://registry.npmjs.org/ajv/-/ajv-4.11.8.tgz", - "integrity": "sha1-gv+wKynmYq5TvcIK8VlHcGc5xTY=", - "dev": true, - "requires": { - "co": "4.6.0", - "json-stable-stringify": "1.0.1" - } - } - } - }, "has-ansi": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/has-ansi/-/has-ansi-2.0.0.tgz", @@ -3083,18 +2873,6 @@ "minimalistic-assert": "1.0.0" } }, - "hawk": { - "version": "3.1.3", - "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", - "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", - "dev": true, - "requires": { - "boom": "2.10.1", - "cryptiles": "2.0.5", - "hoek": "2.16.3", - "sntp": "1.0.9" - } - }, "hmac-drbg": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/hmac-drbg/-/hmac-drbg-1.0.1.tgz", @@ -3106,12 +2884,6 @@ "minimalistic-crypto-utils": "1.0.1" } }, - "hoek": { - "version": "2.16.3", - "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", - "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true - }, "home-or-tmp": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/home-or-tmp/-/home-or-tmp-2.0.0.tgz", @@ -3132,9 +2904,9 @@ } }, "hosted-git-info": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.5.0.tgz", - "integrity": "sha512-pNgbURSuab90KbTqvRPsseaTxOJCZBD0a7t+haSN33piP9cCM4l0CqdzAif2hUqm716UovKB2ROmiabGAKVXyg==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/hosted-git-info/-/hosted-git-info-2.6.0.tgz", + "integrity": "sha512-lIbgIIQA3lz5XaB6vxakj6sDHADJiZadYEJB+FgA+C4nubM1NwcuvUr9EJPmnH1skZqpqUzWborWo8EIUi0Sdw==", "dev": true }, "http-cache-semantics": { @@ -3143,17 +2915,6 @@ "integrity": "sha512-5ai2iksyV8ZXmnZhHH4rWPoxxistEexSi5936zIQ1bnNTW5VnA85B6P/VpXiRM017IgRvb2kKo1a//y+0wSp3w==", "dev": true }, - "http-signature": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/http-signature/-/http-signature-1.1.1.tgz", - "integrity": "sha1-33LiZwZs0Kxn+3at+OE0qPvPkb8=", - "dev": true, - "requires": { - "assert-plus": "0.2.0", - "jsprim": "1.4.1", - "sshpk": "1.13.1" - } - }, "https-browserify": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/https-browserify/-/https-browserify-1.0.0.tgz", @@ -3234,7 +2995,7 @@ "lodash": "4.17.5", "mute-stream": "0.0.7", "run-async": "2.3.0", - "rxjs": "5.5.6", + "rxjs": "5.5.7", "string-width": "2.1.1", "strip-ansi": "4.0.0", "through": "2.3.8" @@ -3274,9 +3035,9 @@ } }, "invariant": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.3.tgz", - "integrity": "sha512-7Z5PPegwDTyjbaeCnV0efcyS6vdKAU51kpEmS7QFib3P4822l8ICYyMn7qvJnc+WzLoDsuI9gPMKbJ8pCu8XtA==", + "version": "2.2.4", + "resolved": "https://registry.npmjs.org/invariant/-/invariant-2.2.4.tgz", + "integrity": "sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==", "dev": true, "requires": { "loose-envify": "1.3.1" @@ -3512,12 +3273,6 @@ "integrity": "sha1-EtSj3U5o4Lec6428hBc66A2RykQ=", "dev": true }, - "is-typedarray": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-typedarray/-/is-typedarray-1.0.0.tgz", - "integrity": "sha1-5HnICFjfDBsR3dppQPlgEfzaSpo=", - "dev": true - }, "is-utf8": { "version": "0.2.1", "resolved": "https://registry.npmjs.org/is-utf8/-/is-utf8-0.2.1.tgz", @@ -3548,12 +3303,6 @@ "integrity": "sha1-TkMekrEalzFjaqH5yNHMvP2reN8=", "dev": true }, - "isstream": { - "version": "0.1.2", - "resolved": "https://registry.npmjs.org/isstream/-/isstream-0.1.2.tgz", - "integrity": "sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo=", - "dev": true - }, "istextorbinary": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/istextorbinary/-/istextorbinary-2.2.1.tgz", @@ -3591,32 +3340,25 @@ "esprima": "4.0.0" } }, - "jsbn": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/jsbn/-/jsbn-0.1.1.tgz", - "integrity": "sha1-peZUwuWi3rXyAdls77yoDA7y9RM=", - "dev": true, - "optional": true - }, "jscodeshift": { - "version": "0.4.1", - "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.4.1.tgz", - "integrity": "sha512-iOX6If+hsw0q99V3n31t4f5VlD1TQZddH08xbT65ZqA7T4Vkx68emrDZMUOLVvCEAJ6NpAk7DECe3fjC/t52AQ==", + "version": "0.5.0", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.5.0.tgz", + "integrity": "sha512-JAcQINNMFpdzzpKJN8k5xXjF3XDuckB1/48uScSzcnNyK199iWEc9AxKL9OoX5144M2w5zEx9Qs4/E/eBZZUlw==", "dev": true, "requires": { - "async": "1.5.2", "babel-plugin-transform-flow-strip-types": "6.22.0", "babel-preset-es2015": "6.24.1", "babel-preset-stage-1": "6.24.1", "babel-register": "6.26.0", - "babylon": "6.18.0", - "colors": "1.1.2", - "flow-parser": "0.66.0", + "babylon": "7.0.0-beta.40", + "colors": "1.2.1", + "flow-parser": "0.67.1", "lodash": "4.17.5", "micromatch": "2.3.11", + "neo-async": "2.5.0", "node-dir": "0.1.8", "nomnom": "1.8.1", - "recast": "0.12.9", + "recast": "0.14.5", "temp": "0.8.3", "write-file-atomic": "1.3.4" }, @@ -3709,25 +3451,6 @@ "parse-glob": "3.0.4", "regex-cache": "0.4.4" } - }, - "recast": { - "version": "0.12.9", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.12.9.tgz", - "integrity": "sha512-y7ANxCWmMW8xLOaiopiRDlyjQ9ajKRENBH+2wjntIbk3A6ZR1+BLQttkmSHMY7Arl+AAZFwJ10grg2T6f1WI8A==", - "dev": true, - "requires": { - "ast-types": "0.10.1", - "core-js": "2.5.3", - "esprima": "4.0.0", - "private": "0.1.8", - "source-map": "0.6.1" - } - }, - "source-map": { - "version": "0.6.1", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", - "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", - "dev": true } } }, @@ -3743,10 +3466,10 @@ "integrity": "sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg=", "dev": true }, - "json-schema": { - "version": "0.2.3", - "resolved": "https://registry.npmjs.org/json-schema/-/json-schema-0.2.3.tgz", - "integrity": "sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM=", + "json-parse-better-errors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/json-parse-better-errors/-/json-parse-better-errors-1.0.1.tgz", + "integrity": "sha512-xyQpxeWWMKyJps9CuGJYeng6ssI5bpqS9ltQpdVQ90t4ql6NdnxFKh95JcRt2cun/DjMVNrdjniLPuMA69xmCw==", "dev": true }, "json-schema-traverse": { @@ -3755,53 +3478,12 @@ "integrity": "sha1-NJptRMU6Ud6JtAgFxdXlm0F9M0A=", "dev": true }, - "json-stable-stringify": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/json-stable-stringify/-/json-stable-stringify-1.0.1.tgz", - "integrity": "sha1-mnWdOcXy/1A/1TAGRu1EX4jE+a8=", - "dev": true, - "requires": { - "jsonify": "0.0.0" - } - }, - "json-stringify-safe": { - "version": "5.0.1", - "resolved": "https://registry.npmjs.org/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz", - "integrity": "sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus=", - "dev": true - }, "json5": { "version": "0.5.1", "resolved": "https://registry.npmjs.org/json5/-/json5-0.5.1.tgz", "integrity": "sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE=", "dev": true }, - "jsonify": { - "version": "0.0.0", - "resolved": "https://registry.npmjs.org/jsonify/-/jsonify-0.0.0.tgz", - "integrity": "sha1-LHS27kHZPKUbe1qu6PUDYx0lKnM=", - "dev": true - }, - "jsprim": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/jsprim/-/jsprim-1.4.1.tgz", - "integrity": "sha1-MT5mvB5cwG5Di8G3SZwuXFastqI=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "extsprintf": "1.3.0", - "json-schema": "0.2.3", - "verror": "1.10.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, "keyv": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/keyv/-/keyv-3.0.0.tgz", @@ -3855,7 +3537,7 @@ "log-update": "1.0.2", "ora": "0.2.3", "p-map": "1.2.0", - "rxjs": "5.5.6", + "rxjs": "5.5.7", "stream-to-observable": "0.2.0", "strip-ansi": "3.0.1" }, @@ -4055,21 +3737,21 @@ } }, "load-json-file": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-2.0.0.tgz", - "integrity": "sha1-eUfkIUmvgNaWy/eXvKq8/h/inKg=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/load-json-file/-/load-json-file-4.0.0.tgz", + "integrity": "sha1-L19Fq5HjMhYjT9U62rZo607AmTs=", "dev": true, "requires": { "graceful-fs": "4.1.11", - "parse-json": "2.2.0", - "pify": "2.3.0", + "parse-json": "4.0.0", + "pify": "3.0.0", "strip-bom": "3.0.0" }, "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", + "strip-bom": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", + "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", "dev": true } } @@ -4180,9 +3862,9 @@ "dev": true }, "lru-cache": { - "version": "4.1.1", - "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.1.tgz", - "integrity": "sha512-q4spe4KTfsAS1SUHLO0wz8Qiyf1+vMIAgpRYioFYDMNqKfHQbg+AVDH3i4fvpl71/P1L0dBl+fQi+P37UYf0ew==", + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-4.1.2.tgz", + "integrity": "sha512-wgeVXhrDwAWnIF/yZARsFnMBtdFXOg1b8RIrhilp+0iDYN4mdQcNZElDZ0e4B64BhaxeQ5zN7PMyvu7we1kPeQ==", "dev": true, "requires": { "pseudomap": "1.0.2", @@ -4305,7 +3987,7 @@ "clone": "2.1.1", "clone-buffer": "1.0.0", "clone-stats": "1.0.0", - "cloneable-readable": "1.0.0", + "cloneable-readable": "1.1.1", "remove-trailing-separator": "1.1.0", "replace-ext": "1.0.0" } @@ -4353,21 +4035,6 @@ "brorand": "1.1.0" } }, - "mime-db": { - "version": "1.33.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.33.0.tgz", - "integrity": "sha512-BHJ/EKruNIqJf/QahvxwQZXKygOQ256myeN/Ew+THcAa5q+PjyTTMMeNQC4DZw5AwfvelsUrA6B67NKMqXDbzQ==", - "dev": true - }, - "mime-types": { - "version": "2.1.18", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.18.tgz", - "integrity": "sha512-lc/aahn+t4/SWV/qcmumYjymLsWfN3ELhpmVuUFjgsORruuZPVSwAQryq+HHGvO/SI2KVX26bx+En+zhM8g8hQ==", - "dev": true, - "requires": { - "mime-db": "1.33.0" - } - }, "mimic-fn": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/mimic-fn/-/mimic-fn-1.2.0.tgz", @@ -4380,15 +4047,6 @@ "integrity": "sha1-3z02Uqc/3ta5sLJBRub9BSNTRY4=", "dev": true }, - "min-document": { - "version": "2.19.0", - "resolved": "https://registry.npmjs.org/min-document/-/min-document-2.19.0.tgz", - "integrity": "sha1-e9KC4/WELtKVu3SM3Z8f+iyCRoU=", - "dev": true, - "requires": { - "dom-walk": "0.1.1" - } - }, "minimalistic-assert": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/minimalistic-assert/-/minimalistic-assert-1.0.0.tgz", @@ -4616,7 +4274,7 @@ "integrity": "sha512-9jjUFbTPfEy3R/ad/2oNbKtW9Hgovl5O1FvFWKkKblNXoN/Oou6+9+KKohPK13Yc3/TyunyWhJp6gvRNR/PPAw==", "dev": true, "requires": { - "hosted-git-info": "2.5.0", + "hosted-git-info": "2.6.0", "is-builtin-module": "1.0.0", "semver": "5.4.1", "validate-npm-package-license": "3.0.3" @@ -4657,12 +4315,6 @@ "integrity": "sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0=", "dev": true }, - "oauth-sign": { - "version": "0.8.2", - "resolved": "https://registry.npmjs.org/oauth-sign/-/oauth-sign-0.8.2.tgz", - "integrity": "sha1-Rqarfwrq2N6unsBWV4C31O/rnUM=", - "dev": true - }, "object-assign": { "version": "4.1.1", "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", @@ -4869,12 +4521,6 @@ "mem": "1.1.0" } }, - "os-shim": { - "version": "0.1.3", - "resolved": "https://registry.npmjs.org/os-shim/-/os-shim-0.1.3.tgz", - "integrity": "sha1-a2LDeRz3kJ6jXtRuF2WLtBfLORc=", - "dev": true - }, "os-tmpdir": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/os-tmpdir/-/os-tmpdir-1.0.2.tgz", @@ -4882,9 +4528,9 @@ "dev": true }, "p-cancelable": { - "version": "0.3.0", - "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.3.0.tgz", - "integrity": "sha512-RVbZPLso8+jFeq1MfNvgXtCRED2raz/dKpacfTNxsx6pLEpEomM7gah6VeHSYV3+vo0OAi4MkArtQcWWXuQoyw==", + "version": "0.4.0", + "resolved": "https://registry.npmjs.org/p-cancelable/-/p-cancelable-0.4.0.tgz", + "integrity": "sha512-/AodqPe1y/GYbhSlnMjxukLGQfQIgsmjSy2CXCNB96kg4ozKvmlovuHEKICToOO/yS3LLWgrWI1dFtFfrePS1g==", "dev": true }, "p-each-series": { @@ -5019,12 +4665,13 @@ } }, "parse-json": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-2.2.0.tgz", - "integrity": "sha1-9ID0BDTvgHQfhGkJn43qGPVaTck=", + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/parse-json/-/parse-json-4.0.0.tgz", + "integrity": "sha1-vjX1Qlvh9/bHRxhPmKeIy5lHfuA=", "dev": true, "requires": { - "error-ex": "1.3.1" + "error-ex": "1.3.1", + "json-parse-better-errors": "1.0.1" } }, "parse-passwd": { @@ -5075,20 +4722,12 @@ "dev": true }, "path-type": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/path-type/-/path-type-2.0.0.tgz", - "integrity": "sha1-8BLMuEFbcJb8LaoQVMPXI4lZTHM=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/path-type/-/path-type-3.0.0.tgz", + "integrity": "sha512-T2ZUsdZFHgA3u4e5PfPbjd7HDDpxPnQb5jN0SrDsjNSuVXHJqtwTnWqG0B1jZrgmJ/7lj1EmVIByWt1gxGkWvg==", "dev": true, "requires": { - "pify": "2.3.0" - }, - "dependencies": { - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - } + "pify": "3.0.0" } }, "pbkdf2": { @@ -5104,12 +4743,6 @@ "sha.js": "2.4.10" } }, - "performance-now": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-0.2.0.tgz", - "integrity": "sha1-M+8wxcd9TqIcWlOGnZG1bY8lVeU=", - "dev": true - }, "pify": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/pify/-/pify-3.0.0.tgz", @@ -5246,12 +4879,6 @@ "integrity": "sha1-wNWmOycYgArY4esPpSachN1BhF4=", "dev": true }, - "qs": { - "version": "6.4.0", - "resolved": "https://registry.npmjs.org/qs/-/qs-6.4.0.tgz", - "integrity": "sha1-E+JtKK1rD/qpExLNO/cI7TUecjM=", - "dev": true - }, "query-string": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/query-string/-/query-string-5.1.0.tgz", @@ -5326,24 +4953,24 @@ } }, "read-pkg": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-2.0.0.tgz", - "integrity": "sha1-jvHAYjxqbbDcZxPEv6xGMysjaPg=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg/-/read-pkg-3.0.0.tgz", + "integrity": "sha1-nLxoaXj+5l0WwA4rGcI3/Pbjg4k=", "dev": true, "requires": { - "load-json-file": "2.0.0", + "load-json-file": "4.0.0", "normalize-package-data": "2.4.0", - "path-type": "2.0.0" + "path-type": "3.0.0" } }, "read-pkg-up": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-2.0.0.tgz", - "integrity": "sha1-a3KoBImE4MQeeVEP1en6mbO1Sb4=", + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/read-pkg-up/-/read-pkg-up-3.0.0.tgz", + "integrity": "sha1-PtSWaF26D4/hGNBpHcUfSh/5bwc=", "dev": true, "requires": { "find-up": "2.1.0", - "read-pkg": "2.0.0" + "read-pkg": "3.0.0" } }, "readable-stream": { @@ -5374,23 +5001,17 @@ } }, "recast": { - "version": "0.14.4", - "resolved": "https://registry.npmjs.org/recast/-/recast-0.14.4.tgz", - "integrity": "sha512-b6fRXujYf8mTIyljymL3rglje1LfuGKdD44CuKs6o1B18MmZ+mEEpD5gsaxGVABZHyPvYwPLcyBTA/SvxtiyFg==", + "version": "0.14.5", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.14.5.tgz", + "integrity": "sha512-GNFQGQrqW1R8w9XhhgYIN8H7ePPp088D+svHlb7DdP5DCqNDqTwH7lt378EouM+L18kCwkmqpAz1unLqpPhHmw==", "dev": true, "requires": { - "ast-types": "0.11.2", + "ast-types": "0.11.3", "esprima": "4.0.0", "private": "0.1.8", "source-map": "0.6.1" }, "dependencies": { - "ast-types": { - "version": "0.11.2", - "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.11.2.tgz", - "integrity": "sha512-aL+pcOQ+6dpWd0xrUe+Obo2CgdkFvsntkXEmzZKqEN4cR0PStF+1MBuc4V+YZsv4Q36luvyjG7F4lc+wH2bmag==", - "dev": true - }, "source-map": { "version": "0.6.1", "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", @@ -5509,36 +5130,6 @@ "integrity": "sha1-KbvZIHinOfC8zitO5B6DeVNSKSQ=", "dev": true }, - "request": { - "version": "2.81.0", - "resolved": "https://registry.npmjs.org/request/-/request-2.81.0.tgz", - "integrity": "sha1-xpKJRqDgbF+Nb4qTM0af/aRimKA=", - "dev": true, - "requires": { - "aws-sign2": "0.6.0", - "aws4": "1.6.0", - "caseless": "0.12.0", - "combined-stream": "1.0.6", - "extend": "3.0.1", - "forever-agent": "0.6.1", - "form-data": "2.1.4", - "har-validator": "4.2.1", - "hawk": "3.1.3", - "http-signature": "1.1.1", - "is-typedarray": "1.0.0", - "isstream": "0.1.2", - "json-stringify-safe": "5.0.1", - "mime-types": "2.1.18", - "oauth-sign": "0.8.2", - "performance-now": "0.2.0", - "qs": "6.4.0", - "safe-buffer": "5.1.1", - "stringstream": "0.0.5", - "tough-cookie": "2.3.4", - "tunnel-agent": "0.6.0", - "uuid": "3.2.1" - } - }, "require-directory": { "version": "2.1.1", "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", @@ -5653,12 +5244,6 @@ "aproba": "1.2.0" } }, - "rx": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/rx/-/rx-4.1.0.tgz", - "integrity": "sha1-pfE/957zt0D+MKqAP7CfmIBdR4I=", - "dev": true - }, "rx-lite": { "version": "4.0.8", "resolved": "https://registry.npmjs.org/rx-lite/-/rx-lite-4.0.8.tgz", @@ -5675,9 +5260,9 @@ } }, "rxjs": { - "version": "5.5.6", - "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.6.tgz", - "integrity": "sha512-v4Q5HDC0FHAQ7zcBX7T2IL6O5ltl1a2GX4ENjPXg6SjDY69Cmx9v4113C99a4wGF16ClPv5Z8mghuYorVkg/kg==", + "version": "5.5.7", + "resolved": "https://registry.npmjs.org/rxjs/-/rxjs-5.5.7.tgz", + "integrity": "sha512-Hxo2ac8gRQjwjtKgukMIwBRbq5+KAeEV5hXM4obYBOAghev41bDQWgFH4svYiU9UnQ5kNww2LgfyBdevCd2HXA==", "dev": true, "requires": { "symbol-observable": "1.0.1" @@ -5802,9 +5387,9 @@ "dev": true }, "shelljs": { - "version": "0.7.8", - "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.7.8.tgz", - "integrity": "sha1-3svPh0sNHl+3LhSxZKloMEjprLM=", + "version": "0.8.1", + "resolved": "https://registry.npmjs.org/shelljs/-/shelljs-0.8.1.tgz", + "integrity": "sha512-YA/iYtZpzFe5HyWVGrb02FjPxc4EMCfpoU/Phg9fQoyMC72u9598OUBrsU8IrtwAKG0tO8IYaqbaLIw+k3IRGA==", "dev": true, "requires": { "glob": "7.1.2", @@ -5971,15 +5556,6 @@ } } }, - "sntp": { - "version": "1.0.9", - "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", - "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", - "dev": true, - "requires": { - "hoek": "2.16.3" - } - }, "sort-keys": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/sort-keys/-/sort-keys-2.0.0.tgz", @@ -6035,16 +5611,6 @@ "integrity": "sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM=", "dev": true }, - "spawn-sync": { - "version": "1.0.15", - "resolved": "https://registry.npmjs.org/spawn-sync/-/spawn-sync-1.0.15.tgz", - "integrity": "sha1-sAeZVX63+wyDdsKdROih6mfldHY=", - "dev": true, - "requires": { - "concat-stream": "1.6.1", - "os-shim": "0.1.3" - } - }, "spdx-correct": { "version": "3.0.0", "resolved": "https://registry.npmjs.org/spdx-correct/-/spdx-correct-3.0.0.tgz", @@ -6092,34 +5658,10 @@ "integrity": "sha1-BOaSb2YolTVPPdAVIDYzuFcpfiw=", "dev": true }, - "sshpk": { - "version": "1.13.1", - "resolved": "https://registry.npmjs.org/sshpk/-/sshpk-1.13.1.tgz", - "integrity": "sha1-US322mKHFEMW3EwY/hzx2UBzm+M=", - "dev": true, - "requires": { - "asn1": "0.2.3", - "assert-plus": "1.0.0", - "bcrypt-pbkdf": "1.0.1", - "dashdash": "1.14.1", - "ecc-jsbn": "0.1.1", - "getpass": "0.1.7", - "jsbn": "0.1.1", - "tweetnacl": "0.14.5" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, "ssri": { - "version": "5.2.4", - "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.2.4.tgz", - "integrity": "sha512-UnEAgMZa15973iH7cUi0AHjJn1ACDIkaMyZILoqwN6yzt+4P81I8tBc5Hl+qwi5auMplZtPQsHrPBR5vJLcQtQ==", + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/ssri/-/ssri-5.3.0.tgz", + "integrity": "sha512-XRSIPqLij52MtgoQavH/x/dU1qVKtWUAAZeOHsR9c2Ddi4XerFy3mc1alf+dLJKl9EUIm/Ht+EowFkTUOA6GAQ==", "dev": true, "requires": { "safe-buffer": "5.1.1" @@ -6299,12 +5841,6 @@ "safe-buffer": "5.1.1" } }, - "stringstream": { - "version": "0.0.5", - "resolved": "https://registry.npmjs.org/stringstream/-/stringstream-0.0.5.tgz", - "integrity": "sha1-TkhM1N5aC7vuGORjB3EKioFiGHg=", - "dev": true - }, "strip-ansi": { "version": "3.0.1", "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-3.0.1.tgz", @@ -6315,10 +5851,13 @@ } }, "strip-bom": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-3.0.0.tgz", - "integrity": "sha1-IzTBjpx1n3vdVv3vfprj1YjmjtM=", - "dev": true + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", + "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", + "dev": true, + "requires": { + "is-utf8": "0.2.1" + } }, "strip-bom-stream": { "version": "2.0.0", @@ -6328,17 +5867,6 @@ "requires": { "first-chunk-stream": "2.0.0", "strip-bom": "2.0.0" - }, - "dependencies": { - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } - } } }, "strip-eof": { @@ -6491,15 +6019,6 @@ "repeat-string": "1.6.1" } }, - "tough-cookie": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/tough-cookie/-/tough-cookie-2.3.4.tgz", - "integrity": "sha512-TZ6TTfI5NtZnuyy/Kecv+CnoROnyXn2DN97LontgQpCwsX2XyLYCC0ENhYkehSOwAp8rTQKc/NUIF7BkQ5rKLA==", - "dev": true, - "requires": { - "punycode": "1.4.1" - } - }, "trim-right": { "version": "1.0.1", "resolved": "https://registry.npmjs.org/trim-right/-/trim-right-1.0.1.tgz", @@ -6575,22 +6094,6 @@ "integrity": "sha1-oVe6QC2iTpv5V/mqadUk7tQpAaY=", "dev": true }, - "tunnel-agent": { - "version": "0.6.0", - "resolved": "https://registry.npmjs.org/tunnel-agent/-/tunnel-agent-0.6.0.tgz", - "integrity": "sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0=", - "dev": true, - "requires": { - "safe-buffer": "5.1.1" - } - }, - "tweetnacl": { - "version": "0.14.5", - "resolved": "https://registry.npmjs.org/tweetnacl/-/tweetnacl-0.14.5.tgz", - "integrity": "sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q=", - "dev": true, - "optional": true - }, "typedarray": { "version": "0.0.6", "resolved": "https://registry.npmjs.org/typedarray/-/typedarray-0.0.6.tgz", @@ -6622,9 +6125,9 @@ } }, "uglifyjs-webpack-plugin": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.2.tgz", - "integrity": "sha512-CG/NvzXfemUAm5Y4Guh5eEaJYHtkG7kKNpXEJHp9QpxsFVB5/qKvYWoMaq4sa99ccZ0hM3MK8vQV9XPZB4357A==", + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/uglifyjs-webpack-plugin/-/uglifyjs-webpack-plugin-1.2.3.tgz", + "integrity": "sha512-as/50351uuJGiQbhVvE510SCqM/YOWghCzIFJeEOu5oVE0QOZ3/vu2QcnVvu0Lz+vNd0rKsiCFAlbcw0i/YH2w==", "dev": true, "requires": { "cacache": "10.0.4", @@ -6634,7 +6137,7 @@ "source-map": "0.6.1", "uglify-es": "3.3.9", "webpack-sources": "1.1.0", - "worker-farm": "1.5.4" + "worker-farm": "1.6.0" }, "dependencies": { "source-map": { @@ -6795,12 +6298,6 @@ "integrity": "sha1-FQWgOiiaSMvXpDTvuu7FBV9WM6k=", "dev": true }, - "urlgrey": { - "version": "0.4.4", - "resolved": "https://registry.npmjs.org/urlgrey/-/urlgrey-0.4.4.tgz", - "integrity": "sha1-iS/pWWCAXoVRnxzUOJ8stMu3ZS8=", - "dev": true - }, "use": { "version": "2.0.2", "resolved": "https://registry.npmjs.org/use/-/use-2.0.2.tgz", @@ -6903,12 +6400,6 @@ "integrity": "sha1-RQ1Nyfpw3nMnYvvS1KKJgUGaDM8=", "dev": true }, - "uuid": { - "version": "3.2.1", - "resolved": "https://registry.npmjs.org/uuid/-/uuid-3.2.1.tgz", - "integrity": "sha512-jZnMwlb9Iku/O3smGWvZhauCf6cvvpKi4BKRiliS3cxnI+Gz9j5MEpTz2UFuXiKPJocb7gnsLHwiS05ige5BEA==", - "dev": true - }, "v8-compile-cache": { "version": "1.1.2", "resolved": "https://registry.npmjs.org/v8-compile-cache/-/v8-compile-cache-1.1.2.tgz", @@ -6925,25 +6416,6 @@ "spdx-expression-parse": "3.0.0" } }, - "verror": { - "version": "1.10.0", - "resolved": "https://registry.npmjs.org/verror/-/verror-1.10.0.tgz", - "integrity": "sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA=", - "dev": true, - "requires": { - "assert-plus": "1.0.0", - "core-util-is": "1.0.2", - "extsprintf": "1.3.0" - }, - "dependencies": { - "assert-plus": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/assert-plus/-/assert-plus-1.0.0.tgz", - "integrity": "sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU=", - "dev": true - } - } - }, "vinyl": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/vinyl/-/vinyl-1.2.0.tgz", @@ -6974,15 +6446,6 @@ "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", "dev": true - }, - "strip-bom": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/strip-bom/-/strip-bom-2.0.0.tgz", - "integrity": "sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4=", - "dev": true, - "requires": { - "is-utf8": "0.2.1" - } } } }, @@ -7007,12 +6470,12 @@ } }, "webpack": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.1.0.tgz", - "integrity": "sha512-ZFYcAZ44kOT+xsS5MS2H1fQr0PJkwQdYem/d17wacDkkupzsAkBJ3hDShWHdPVvWluFs6pfhHWw/dVso1m0rsA==", + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/webpack/-/webpack-4.1.1.tgz", + "integrity": "sha512-PwxKH81yLjbPyBSZvPj/Ji9pT99XOGFA0t6zipoOKOMNRZ+09N39J5Uzcx3rYKnsHgKwDnfGkvzac4MF2Taknw==", "dev": true, "requires": { - "acorn": "5.5.0", + "acorn": "5.5.3", "acorn-dynamic-import": "3.0.0", "ajv": "6.2.1", "ajv-keywords": "3.1.0", @@ -7028,7 +6491,7 @@ "node-libs-browser": "2.1.0", "schema-utils": "0.4.5", "tapable": "1.0.0", - "uglifyjs-webpack-plugin": "1.2.2", + "uglifyjs-webpack-plugin": "1.2.3", "watchpack": "1.5.0", "webpack-sources": "1.1.0" } @@ -7040,26 +6503,169 @@ "dev": true, "requires": { "jscodeshift": "0.4.1" + }, + "dependencies": { + "arr-diff": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/arr-diff/-/arr-diff-2.0.0.tgz", + "integrity": "sha1-jzuCf5Vai9ZpaX5KQlasPOrjVs8=", + "dev": true, + "requires": { + "arr-flatten": "1.1.0" + } + }, + "array-unique": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/array-unique/-/array-unique-0.2.1.tgz", + "integrity": "sha1-odl8yvy8JiXMcPrc6zalDFiwGlM=", + "dev": true + }, + "ast-types": { + "version": "0.10.1", + "resolved": "https://registry.npmjs.org/ast-types/-/ast-types-0.10.1.tgz", + "integrity": "sha512-UY7+9DPzlJ9VM8eY0b2TUZcZvF+1pO0hzMtAyjBYKhOmnvRlqYNYnWdtsMj0V16CGaMlpL0G1jnLbLo4AyotuQ==", + "dev": true + }, + "babylon": { + "version": "6.18.0", + "resolved": "https://registry.npmjs.org/babylon/-/babylon-6.18.0.tgz", + "integrity": "sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ==", + "dev": true + }, + "braces": { + "version": "1.8.5", + "resolved": "https://registry.npmjs.org/braces/-/braces-1.8.5.tgz", + "integrity": "sha1-uneWLhLf+WnWt2cR6RS3N4V79qc=", + "dev": true, + "requires": { + "expand-range": "1.8.2", + "preserve": "0.2.0", + "repeat-element": "1.1.2" + } + }, + "expand-brackets": { + "version": "0.1.5", + "resolved": "https://registry.npmjs.org/expand-brackets/-/expand-brackets-0.1.5.tgz", + "integrity": "sha1-3wcoTjQqgHzXM6xa9yQR5YHRF3s=", + "dev": true, + "requires": { + "is-posix-bracket": "0.1.1" + } + }, + "extglob": { + "version": "0.3.2", + "resolved": "https://registry.npmjs.org/extglob/-/extglob-0.3.2.tgz", + "integrity": "sha1-Lhj/PS9JqydlzskCPwEdqo2DSaE=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "is-extglob": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-1.0.0.tgz", + "integrity": "sha1-rEaBd8SUNAWgkvyPKXYMb/xiBsA=", + "dev": true + }, + "is-glob": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-2.0.1.tgz", + "integrity": "sha1-0Jb5JqPe1WAPP9/ZEZjLCIjC2GM=", + "dev": true, + "requires": { + "is-extglob": "1.0.0" + } + }, + "jscodeshift": { + "version": "0.4.1", + "resolved": "https://registry.npmjs.org/jscodeshift/-/jscodeshift-0.4.1.tgz", + "integrity": "sha512-iOX6If+hsw0q99V3n31t4f5VlD1TQZddH08xbT65ZqA7T4Vkx68emrDZMUOLVvCEAJ6NpAk7DECe3fjC/t52AQ==", + "dev": true, + "requires": { + "async": "1.5.2", + "babel-plugin-transform-flow-strip-types": "6.22.0", + "babel-preset-es2015": "6.24.1", + "babel-preset-stage-1": "6.24.1", + "babel-register": "6.26.0", + "babylon": "6.18.0", + "colors": "1.2.1", + "flow-parser": "0.67.1", + "lodash": "4.17.5", + "micromatch": "2.3.11", + "node-dir": "0.1.8", + "nomnom": "1.8.1", + "recast": "0.12.9", + "temp": "0.8.3", + "write-file-atomic": "1.3.4" + } + }, + "kind-of": { + "version": "3.2.2", + "resolved": "https://registry.npmjs.org/kind-of/-/kind-of-3.2.2.tgz", + "integrity": "sha1-MeohpzS6ubuw8yRm2JOupR5KPGQ=", + "dev": true, + "requires": { + "is-buffer": "1.1.6" + } + }, + "micromatch": { + "version": "2.3.11", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-2.3.11.tgz", + "integrity": "sha1-hmd8l9FyCzY0MdBNDRUpO9OMFWU=", + "dev": true, + "requires": { + "arr-diff": "2.0.0", + "array-unique": "0.2.1", + "braces": "1.8.5", + "expand-brackets": "0.1.5", + "extglob": "0.3.2", + "filename-regex": "2.0.1", + "is-extglob": "1.0.0", + "is-glob": "2.0.1", + "kind-of": "3.2.2", + "normalize-path": "2.1.1", + "object.omit": "2.0.1", + "parse-glob": "3.0.4", + "regex-cache": "0.4.4" + } + }, + "recast": { + "version": "0.12.9", + "resolved": "https://registry.npmjs.org/recast/-/recast-0.12.9.tgz", + "integrity": "sha512-y7ANxCWmMW8xLOaiopiRDlyjQ9ajKRENBH+2wjntIbk3A6ZR1+BLQttkmSHMY7Arl+AAZFwJ10grg2T6f1WI8A==", + "dev": true, + "requires": { + "ast-types": "0.10.1", + "core-js": "2.5.3", + "esprima": "4.0.0", + "private": "0.1.8", + "source-map": "0.6.1" + } + }, + "source-map": { + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", + "dev": true + } } }, "webpack-cli": { - "version": "2.0.10", - "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-2.0.10.tgz", - "integrity": "sha512-PQWEOoXkhjBV4svPuESghZRc80VvDoSSRPaLiInWifDlRJgoPWpiLCFXyMLQTTaug7ApLrSEW7BcuwwY6DEv5w==", + "version": "2.0.11", + "resolved": "https://registry.npmjs.org/webpack-cli/-/webpack-cli-2.0.11.tgz", + "integrity": "sha512-+WwfDmsHB+V3OcbtfbIbKM12dDBysNwwMNulYjVSf/UIUhdMP7ZL4EmvCbgwBl0Xlf5hSELOkvS7sKwVDbn7TQ==", "dev": true, "requires": { "chalk": "2.3.2", - "codecov": "3.0.0", "cross-spawn": "6.0.5", "diff": "3.5.0", "enhanced-resolve": "4.0.0", "glob-all": "3.1.0", - "global": "4.3.2", "global-modules": "1.0.0", - "got": "8.2.0", + "got": "8.3.0", "inquirer": "5.1.0", "interpret": "1.1.0", - "jscodeshift": "0.4.1", + "jscodeshift": "0.5.0", "listr": "0.13.0", "loader-utils": "1.1.0", "lodash": "4.17.5", @@ -7068,15 +6674,13 @@ "p-each-series": "1.0.0", "p-lazy": "1.0.0", "prettier": "1.11.1", - "recast": "0.14.4", "resolve-cwd": "2.0.0", "supports-color": "5.3.0", - "uglifyjs-webpack-plugin": "1.2.2", "v8-compile-cache": "1.1.2", "webpack-addons": "1.1.5", - "yargs": "9.0.1", + "yargs": "11.0.0", "yeoman-environment": "2.0.5", - "yeoman-generator": "github:ev1stensberg/generator#9e24fa31c85302ca1145ae34fc68b4f133251ca0" + "yeoman-generator": "2.0.3" } }, "webpack-sources": { @@ -7113,13 +6717,12 @@ "dev": true }, "worker-farm": { - "version": "1.5.4", - "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.5.4.tgz", - "integrity": "sha512-ITyClEvcfv0ozqJl1vmWFWhvI+OIrkbInYqkEPE50wFPXj8J9Gd3FYf8+CkZJXJJsQBYe+2DvmoK9Zhx5w8W+w==", + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/worker-farm/-/worker-farm-1.6.0.tgz", + "integrity": "sha512-6w+3tHbM87WnSWnENBUvA2pxJPLhQUg5LKwUQHq3r+XPhIM+Gh2R5ycbwPCyuGbNg+lPgdcnQUhuC02kJCvffQ==", "dev": true, "requires": { - "errno": "0.1.7", - "xtend": "4.0.1" + "errno": "0.1.7" } }, "wrap-ansi": { @@ -7189,24 +6792,23 @@ "dev": true }, "yargs": { - "version": "9.0.1", - "resolved": "https://registry.npmjs.org/yargs/-/yargs-9.0.1.tgz", - "integrity": "sha1-UqzCP+7Kw0BCB47njAwAf1CF20w=", + "version": "11.0.0", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-11.0.0.tgz", + "integrity": "sha512-Rjp+lMYQOWtgqojx1dEWorjCofi1YN7AoFvYV7b1gx/7dAAeuI4kN5SZiEvr0ZmsZTOpDRcCqrpI10L31tFkBw==", "dev": true, "requires": { - "camelcase": "4.1.0", - "cliui": "3.2.0", + "cliui": "4.0.0", "decamelize": "1.2.0", + "find-up": "2.1.0", "get-caller-file": "1.0.2", "os-locale": "2.1.0", - "read-pkg-up": "2.0.0", "require-directory": "2.1.1", "require-main-filename": "1.0.1", "set-blocking": "2.0.0", "string-width": "2.1.1", "which-module": "2.0.0", "y18n": "3.2.1", - "yargs-parser": "7.0.0" + "yargs-parser": "9.0.2" }, "dependencies": { "y18n": { @@ -7218,9 +6820,9 @@ } }, "yargs-parser": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-7.0.0.tgz", - "integrity": "sha1-jQrELxbqVd69MyyvTEA4s+P139k=", + "version": "9.0.2", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-9.0.2.tgz", + "integrity": "sha1-nM9qQ0YP5O1Aqbto9I1DuKaMwHc=", "dev": true, "requires": { "camelcase": "4.1.0" @@ -7296,48 +6898,38 @@ } }, "yeoman-generator": { - "version": "github:ev1stensberg/generator#9e24fa31c85302ca1145ae34fc68b4f133251ca0", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/yeoman-generator/-/yeoman-generator-2.0.3.tgz", + "integrity": "sha512-mODmrZ26a94djmGZZuIiomSGlN4wULdou29ZwcySupb2e9FdvoCl7Ps2FqHFjEHio3kOl/iBeaNqrnx3C3NwWg==", "dev": true, "requires": { "async": "2.6.0", - "chalk": "1.1.3", + "chalk": "2.3.2", "cli-table": "0.3.1", "cross-spawn": "5.1.0", "dargs": "5.1.0", - "dateformat": "2.2.0", - "debug": "2.6.9", + "dateformat": "3.0.3", + "debug": "3.1.0", "detect-conflict": "1.0.1", "error": "7.0.2", "find-up": "2.1.0", "github-username": "4.1.0", "istextorbinary": "2.2.1", "lodash": "4.17.5", + "make-dir": "1.2.0", "mem-fs-editor": "3.0.2", "minimist": "1.2.0", - "mkdirp": "0.5.1", "pretty-bytes": "4.0.2", "read-chunk": "2.1.0", - "read-pkg-up": "2.0.0", + "read-pkg-up": "3.0.0", "rimraf": "2.6.2", "run-async": "2.3.0", - "shelljs": "0.7.8", + "shelljs": "0.8.1", "text-table": "0.2.0", "through2": "2.0.3", - "yeoman-environment": "1.6.6" + "yeoman-environment": "2.0.5" }, "dependencies": { - "ansi-escapes": { - "version": "1.4.0", - "resolved": "https://registry.npmjs.org/ansi-escapes/-/ansi-escapes-1.4.0.tgz", - "integrity": "sha1-06ioOzGapneTZisT52HHkRQiMG4=", - "dev": true - }, - "ansi-styles": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-2.2.1.tgz", - "integrity": "sha1-tDLdM1i2NM914eRmQ2gkBTPB3b4=", - "dev": true - }, "async": { "version": "2.6.0", "resolved": "https://registry.npmjs.org/async/-/async-2.6.0.tgz", @@ -7347,214 +6939,24 @@ "lodash": "4.17.5" } }, - "chalk": { - "version": "1.1.3", - "resolved": "https://registry.npmjs.org/chalk/-/chalk-1.1.3.tgz", - "integrity": "sha1-qBFcVeSnAv5NFQq9OHKCKn4J/Jg=", - "dev": true, - "requires": { - "ansi-styles": "2.2.1", - "escape-string-regexp": "1.0.5", - "has-ansi": "2.0.0", - "strip-ansi": "3.0.1", - "supports-color": "2.0.0" - } - }, - "cli-cursor": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/cli-cursor/-/cli-cursor-1.0.2.tgz", - "integrity": "sha1-ZNo/fValRBLll5S9Ytw1KV6PKYc=", - "dev": true, - "requires": { - "restore-cursor": "1.0.1" - } - }, "cross-spawn": { "version": "5.1.0", "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-5.1.0.tgz", "integrity": "sha1-6L0O/uWPz/b4+UUQoKVUu/ojVEk=", "dev": true, "requires": { - "lru-cache": "4.1.1", + "lru-cache": "4.1.2", "shebang-command": "1.2.0", "which": "1.3.0" } }, - "diff": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/diff/-/diff-2.2.3.tgz", - "integrity": "sha1-YOr9DSjukG5Oj/ClLBIpUhAzv5k=", - "dev": true - }, - "external-editor": { - "version": "1.1.1", - "resolved": "https://registry.npmjs.org/external-editor/-/external-editor-1.1.1.tgz", - "integrity": "sha1-Etew24UPf/fnCBuvQAVwAGDEYAs=", + "debug": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/debug/-/debug-3.1.0.tgz", + "integrity": "sha512-OX8XqP7/1a9cqkxYw2yXss15f26NKWBpDXQd0/uK/KPqdQhxbPa994hnzjcE2VqQpDslf55723cKPUOGSmMY3g==", "dev": true, "requires": { - "extend": "3.0.1", - "spawn-sync": "1.0.15", - "tmp": "0.0.29" - } - }, - "figures": { - "version": "1.7.0", - "resolved": "https://registry.npmjs.org/figures/-/figures-1.7.0.tgz", - "integrity": "sha1-y+Hjr/zxzUS4DK3+0o3Hk6lwHS4=", - "dev": true, - "requires": { - "escape-string-regexp": "1.0.5", - "object-assign": "4.1.1" - } - }, - "glob": { - "version": "6.0.4", - "resolved": "https://registry.npmjs.org/glob/-/glob-6.0.4.tgz", - "integrity": "sha1-DwiGD2oVUSey+t1PnOJLGqtuTSI=", - "dev": true, - "requires": { - "inflight": "1.0.6", - "inherits": "2.0.3", - "minimatch": "3.0.4", - "once": "1.4.0", - "path-is-absolute": "1.0.1" - } - }, - "globby": { - "version": "4.1.0", - "resolved": "https://registry.npmjs.org/globby/-/globby-4.1.0.tgz", - "integrity": "sha1-CA9UVJ7BuCpsYOYx/ILhIR2+lfg=", - "dev": true, - "requires": { - "array-union": "1.0.2", - "arrify": "1.0.1", - "glob": "6.0.4", - "object-assign": "4.1.1", - "pify": "2.3.0", - "pinkie-promise": "2.0.1" - } - }, - "inquirer": { - "version": "1.2.3", - "resolved": "https://registry.npmjs.org/inquirer/-/inquirer-1.2.3.tgz", - "integrity": "sha1-TexvMvN+97sLLtPx0aXD9UUHSRg=", - "dev": true, - "requires": { - "ansi-escapes": "1.4.0", - "chalk": "1.1.3", - "cli-cursor": "1.0.2", - "cli-width": "2.2.0", - "external-editor": "1.1.1", - "figures": "1.7.0", - "lodash": "4.17.5", - "mute-stream": "0.0.6", - "pinkie-promise": "2.0.1", - "run-async": "2.3.0", - "rx": "4.1.0", - "string-width": "1.0.2", - "strip-ansi": "3.0.1", - "through": "2.3.8" - } - }, - "is-fullwidth-code-point": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz", - "integrity": "sha1-754xOG8DGn8NZDr4L95QxFfvAMs=", - "dev": true, - "requires": { - "number-is-nan": "1.0.1" - } - }, - "log-symbols": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/log-symbols/-/log-symbols-1.0.2.tgz", - "integrity": "sha1-N2/3tY6jCGoPCfrMdGF+ylAeGhg=", - "dev": true, - "requires": { - "chalk": "1.1.3" - } - }, - "mute-stream": { - "version": "0.0.6", - "resolved": "https://registry.npmjs.org/mute-stream/-/mute-stream-0.0.6.tgz", - "integrity": "sha1-SJYrGeFp/R38JAs/HnMXYnu8R9s=", - "dev": true - }, - "onetime": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/onetime/-/onetime-1.1.0.tgz", - "integrity": "sha1-ofeDj4MUxRbwXs78vEzP4EtO14k=", - "dev": true - }, - "pify": { - "version": "2.3.0", - "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", - "integrity": "sha1-7RQaasBDqEnqWISY59yosVMw6Qw=", - "dev": true - }, - "restore-cursor": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/restore-cursor/-/restore-cursor-1.0.1.tgz", - "integrity": "sha1-NGYfRohjJ/7SmRR5FSJS35LapUE=", - "dev": true, - "requires": { - "exit-hook": "1.1.1", - "onetime": "1.1.0" - } - }, - "string-width": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/string-width/-/string-width-1.0.2.tgz", - "integrity": "sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M=", - "dev": true, - "requires": { - "code-point-at": "1.1.0", - "is-fullwidth-code-point": "1.0.0", - "strip-ansi": "3.0.1" - } - }, - "supports-color": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-2.0.0.tgz", - "integrity": "sha1-U10EXOa2Nj+kARcIRimZXp3zJMc=", - "dev": true - }, - "tmp": { - "version": "0.0.29", - "resolved": "https://registry.npmjs.org/tmp/-/tmp-0.0.29.tgz", - "integrity": "sha1-8lEl/w3Z2jzLDC3Tce4SiLuRKMA=", - "dev": true, - "requires": { - "os-tmpdir": "1.0.2" - } - }, - "untildify": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/untildify/-/untildify-2.1.0.tgz", - "integrity": "sha1-F+soB5h/dpUunASF/DEdBqgmouA=", - "dev": true, - "requires": { - "os-homedir": "1.0.2" - } - }, - "yeoman-environment": { - "version": "1.6.6", - "resolved": "https://registry.npmjs.org/yeoman-environment/-/yeoman-environment-1.6.6.tgz", - "integrity": "sha1-zYX6Z9FWBg5EDXgH1+988NLR1nE=", - "dev": true, - "requires": { - "chalk": "1.1.3", - "debug": "2.6.9", - "diff": "2.2.3", - "escape-string-regexp": "1.0.5", - "globby": "4.1.0", - "grouped-queue": "0.3.3", - "inquirer": "1.2.3", - "lodash": "4.17.5", - "log-symbols": "1.0.2", - "mem-fs": "1.1.3", - "text-table": "0.2.0", - "untildify": "2.1.0" + "ms": "2.0.0" } } } diff --git a/package.json b/package.json index 3a8e9ac7..95bf1d71 100644 --- a/package.json +++ b/package.json @@ -11,14 +11,14 @@ "url": "https://github.com/AssemblyScript/assemblyscript/issues" }, "dependencies": { - "binaryen": "44.0.0-nightly.20180302", + "binaryen": "44.0.0-nightly.20180309", "glob": "^7.1.2", "long": "^4.0.0", "minimist": "^1.2.0", "ts-node": "^5.0.1" }, "devDependencies": { - "@types/node": "^9.4.6", + "@types/node": "^9.4.7", "browser-process-hrtime": "^0.1.2", "chalk": "^2.3.2", "diff": "^3.5.0", @@ -26,8 +26,8 @@ "ts-loader": "^4.0.1", "tslint": "^5.9.1", "typescript": "^2.7.2", - "webpack": "^4.1.0", - "webpack-cli": "^2.0.10" + "webpack": "^4.1.1", + "webpack-cli": "^2.0.11" }, "main": "index.js", "types": "index.d.ts", diff --git a/src/compiler.ts b/src/compiler.ts index c5705b9c..93ea69b7 100644 --- a/src/compiler.ts +++ b/src/compiler.ts @@ -331,10 +331,9 @@ export class Compiler extends DiagnosticEmitter { var sources = this.program.sources; // try file.ts - var source: Source; var expected = normalizedPathWithoutExtension + ".ts"; for (let i = 0, k = sources.length; i < k; ++i) { - source = sources[i]; + let source = sources[i]; if (source.normalizedPath == expected) { this.compileSource(source); return; @@ -344,7 +343,7 @@ export class Compiler extends DiagnosticEmitter { // try file/index.ts expected = normalizedPathWithoutExtension + "/index.ts"; for (let i = 0, k = sources.length; i < k; ++i) { - source = sources[i]; + let source = sources[i]; if (source.normalizedPath == expected) { this.compileSource(source); return; @@ -354,7 +353,7 @@ export class Compiler extends DiagnosticEmitter { // try (lib)/file.ts expected = LIBRARY_PREFIX + normalizedPathWithoutExtension + ".ts"; for (let i = 0, k = sources.length; i < k; ++i) { - source = sources[i]; + let source = sources[i]; if (source.normalizedPath == expected) { this.compileSource(source); return; @@ -376,62 +375,58 @@ export class Compiler extends DiagnosticEmitter { // compile top-level statements var noTreeShaking = this.options.noTreeShaking; var isEntry = source.isEntry; + var startFunction = this.startFunction; var startFunctionBody = this.startFunctionBody; var statements = source.statements; for (let i = 0, k = statements.length; i < k; ++i) { let statement = statements[i]; switch (statement.kind) { case NodeKind.CLASSDECLARATION: { - let classDeclaration = statement; if ( ( noTreeShaking || - (isEntry && hasModifier(ModifierKind.EXPORT, classDeclaration.modifiers)) + (isEntry && hasModifier(ModifierKind.EXPORT, (statement).modifiers)) ) && - !classDeclaration.isGeneric + !(statement).isGeneric ) { - this.compileClassDeclaration(classDeclaration, []); + this.compileClassDeclaration(statement, []); } break; } case NodeKind.ENUMDECLARATION: { - let enumDeclaration = statement; if ( noTreeShaking || - (isEntry && hasModifier(ModifierKind.EXPORT, enumDeclaration.modifiers)) + (isEntry && hasModifier(ModifierKind.EXPORT, (statement).modifiers)) ) { - this.compileEnumDeclaration(enumDeclaration); + this.compileEnumDeclaration(statement); } break; } case NodeKind.FUNCTIONDECLARATION: { - let functionDeclaration = statement; if ( ( noTreeShaking || - (isEntry && hasModifier(ModifierKind.EXPORT, functionDeclaration.modifiers)) + (isEntry && hasModifier(ModifierKind.EXPORT, (statement).modifiers)) ) && - !functionDeclaration.isGeneric + !(statement).isGeneric ) { - this.compileFunctionDeclaration(functionDeclaration, []); + this.compileFunctionDeclaration(statement, []); } break; } case NodeKind.IMPORT: { - let importStatement = statement; this.compileSourceByPath( - importStatement.normalizedPath, - importStatement.path + (statement).normalizedPath, + (statement).path ); break; } case NodeKind.NAMESPACEDECLARATION: { - let namespaceDeclaration = (statement); if ( noTreeShaking || - (isEntry && hasModifier(ModifierKind.EXPORT, namespaceDeclaration.modifiers)) + (isEntry && hasModifier(ModifierKind.EXPORT, (statement).modifiers)) ) { - this.compileNamespaceDeclaration(namespaceDeclaration); + this.compileNamespaceDeclaration(statement); } break; } @@ -441,22 +436,21 @@ export class Compiler extends DiagnosticEmitter { break; } case NodeKind.EXPORT: { - let exportStatement = statement; - if (exportStatement.normalizedPath != null) { + if ((statement).normalizedPath != null) { this.compileSourceByPath( - exportStatement.normalizedPath, - exportStatement.path + (statement).normalizedPath, + (statement).path ); } if (noTreeShaking || isEntry) { - this.compileExportStatement(exportStatement); + this.compileExportStatement(statement); } break; } default: { // otherwise a top-level statement that is part of the start function's body let previousFunction = this.currentFunction; - this.currentFunction = this.startFunction; - this.startFunctionBody.push(this.compileStatement(statement)); + this.currentFunction = startFunction; + startFunctionBody.push(this.compileStatement(statement)); this.currentFunction = previousFunction; break; } @@ -478,6 +472,7 @@ export class Compiler extends DiagnosticEmitter { if (global.is(ElementFlags.COMPILED) || global.is(ElementFlags.BUILTIN)) return true; global.set(ElementFlags.COMPILED); // ^ built-ins are compiled on use + var module = this.module; var declaration = global.declaration; var initExpr: ExpressionRef = 0; @@ -529,7 +524,7 @@ export class Compiler extends DiagnosticEmitter { // constant global if (global.is(ElementFlags.CONSTANT)) { - this.module.addGlobalImport( + module.addGlobalImport( global.internalName, global.namespace ? global.namespace.simpleName @@ -586,15 +581,15 @@ export class Compiler extends DiagnosticEmitter { // initialize to zero if there's no initializer } else { - initExpr = global.type.toNativeZero(this.module); + initExpr = global.type.toNativeZero(module); } } var internalName = global.internalName; if (initializeInStart) { // initialize to mutable zero and set the actual value in start - this.module.addGlobal(internalName, nativeType, true, global.type.toNativeZero(this.module)); - this.startFunctionBody.push(this.module.createSetGlobal(internalName, initExpr)); + module.addGlobal(internalName, nativeType, true, global.type.toNativeZero(module)); + this.startFunctionBody.push(module.createSetGlobal(internalName, initExpr)); } else { // compile as-is @@ -625,19 +620,26 @@ export class Compiler extends DiagnosticEmitter { break; } default: { - throw new Error("concrete type expected"); + assert(false); + this.error( + DiagnosticCode.Operation_not_supported, + global.declaration.range + ); + global.constantValueKind = ConstantValueKind.INTEGER; + global.constantIntegerValue = i64_new(0); + break; } } global.set(ElementFlags.INLINED); // inline the value from now on if (declaration.isTopLevel) { // but keep the element if it might be re-exported - this.module.addGlobal(internalName, nativeType, false, initExpr); + module.addGlobal(internalName, nativeType, false, initExpr); } if (declaration.range.source.isEntry && declaration.isTopLevelExport) { - this.module.addGlobalExport(global.internalName, declaration.programLevelInternalName); + module.addGlobalExport(global.internalName, declaration.programLevelInternalName); } } else /* mutable */ { - this.module.addGlobal(internalName, nativeType, !global.is(ElementFlags.CONSTANT), initExpr); + module.addGlobal(internalName, nativeType, !global.is(ElementFlags.CONSTANT), initExpr); } } return true; @@ -656,8 +658,10 @@ export class Compiler extends DiagnosticEmitter { if (element.is(ElementFlags.COMPILED)) return true; element.set(ElementFlags.COMPILED); + var module = this.module; this.currentEnum = element; var previousValue: EnumValue | null = null; + if (element.members) { for (let member of element.members.values()) { if (member.kind != ElementKind.ENUMVALUE) continue; // happens if an enum is also a namespace @@ -667,11 +671,11 @@ export class Compiler extends DiagnosticEmitter { val.set(ElementFlags.COMPILED); if (val.is(ElementFlags.INLINED)) { if (element.declaration.isTopLevelExport) { - this.module.addGlobal( + module.addGlobal( val.internalName, NativeType.I32, false, // constant - this.module.createI32(val.constantValue) + module.createI32(val.constantValue) ); } } else { @@ -691,14 +695,14 @@ export class Compiler extends DiagnosticEmitter { } } } else if (previousValue == null) { - initExpr = this.module.createI32(0); + initExpr = module.createI32(0); } else if (previousValue.is(ElementFlags.INLINED)) { - initExpr = this.module.createI32(previousValue.constantValue + 1); + initExpr = module.createI32(previousValue.constantValue + 1); } else { // in TypeScript this errors with TS1061, but actually we can do: - initExpr = this.module.createBinary(BinaryOp.AddI32, - this.module.createGetGlobal(previousValue.internalName, NativeType.I32), - this.module.createI32(1) + initExpr = module.createBinary(BinaryOp.AddI32, + module.createGetGlobal(previousValue.internalName, NativeType.I32), + module.createI32(1) ); if (element.is(ElementFlags.CONSTANT)) { this.warning( @@ -709,20 +713,25 @@ export class Compiler extends DiagnosticEmitter { initInStart = true; } if (initInStart) { - this.module.addGlobal( + module.addGlobal( val.internalName, NativeType.I32, true, // mutable - this.module.createI32(0) + module.createI32(0) ); - this.startFunctionBody.push(this.module.createSetGlobal(val.internalName, initExpr)); + this.startFunctionBody.push(module.createSetGlobal(val.internalName, initExpr)); } else { - this.module.addGlobal(val.internalName, NativeType.I32, false, initExpr); + module.addGlobal(val.internalName, NativeType.I32, false, initExpr); if (_BinaryenExpressionGetType(initExpr) == NativeType.I32) { val.constantValue = _BinaryenConstGetValueI32(initExpr); val.set(ElementFlags.INLINED); } else { - throw new Error("i32 expected"); + assert(false); + this.error( + DiagnosticCode.Operation_not_supported, + valueDeclaration.range + ); + val.constantValue = 0; } } } @@ -731,7 +740,7 @@ export class Compiler extends DiagnosticEmitter { // export values if the enum is exported if (element.declaration.range.source.isEntry && element.declaration.isTopLevelExport) { if (member.is(ElementFlags.INLINED)) { - this.module.addGlobalExport(member.internalName, member.internalName); + module.addGlobalExport(member.internalName, member.internalName); } else if (valueDeclaration) { this.warning( DiagnosticCode.Cannot_export_a_mutable_global, @@ -797,9 +806,10 @@ export class Compiler extends DiagnosticEmitter { paramTypes[index] = signature.parameterTypes[i].toNativeType(); } var resultType = signature.returnType.toNativeType(); - var typeRef = this.module.getFunctionTypeBySignature(resultType, paramTypes); + var module = this.module; + var typeRef = module.getFunctionTypeBySignature(resultType, paramTypes); if (!typeRef) { - typeRef = this.module.addFunctionType(signature.toSignatureString(), resultType, paramTypes); + typeRef = module.addFunctionType(signature.toSignatureString(), resultType, paramTypes); } return typeRef; } @@ -831,6 +841,7 @@ export class Compiler extends DiagnosticEmitter { var ref: FunctionRef; var typeRef = this.ensureFunctionType(instance.signature); + var module = this.module; if (body) { // compile body @@ -839,7 +850,7 @@ export class Compiler extends DiagnosticEmitter { let stmt = this.compileStatement(body); // make sure all branches return - let allBranchesReturn = this.currentFunction.flow.finalize(); + let allBranchesReturn = instance.flow.finalize(); let returnType = instance.signature.returnType; if (returnType != Type.void && !allBranchesReturn) { this.error( @@ -850,7 +861,7 @@ export class Compiler extends DiagnosticEmitter { this.currentFunction = previousFunction; // create the function - ref = this.module.addFunction( + ref = module.addFunction( instance.internalName, typeRef, typesToNativeTypes(instance.additionalLocals), @@ -862,7 +873,7 @@ export class Compiler extends DiagnosticEmitter { // create the function import let namespace = instance.prototype.namespace; - ref = this.module.addFunctionImport( + ref = module.addFunctionImport( instance.internalName, namespace ? namespace.simpleName @@ -874,10 +885,10 @@ export class Compiler extends DiagnosticEmitter { // check module-level export if (declaration.range.source.isEntry && declaration.isTopLevelExport) { - this.module.addFunctionExport(instance.internalName, declaration.name.text); + module.addFunctionExport(instance.internalName, declaration.name.text); } - instance.finalize(this.module, ref); + instance.finalize(module, ref); return true; } @@ -894,7 +905,7 @@ export class Compiler extends DiagnosticEmitter { ( noTreeShaking || hasModifier(ModifierKind.EXPORT, (member).modifiers) - ) && !(member).typeParameters.length + ) && !(member).isGeneric ) { this.compileClassDeclaration(member, []); } @@ -905,7 +916,7 @@ export class Compiler extends DiagnosticEmitter { ( noTreeShaking || hasModifier(ModifierKind.EXPORT, (member).modifiers) - ) && !(member).typeParameters.length + ) && !(member).isGeneric ) { this.compileInterfaceDeclaration(member, []); } @@ -952,7 +963,12 @@ export class Compiler extends DiagnosticEmitter { break; } default: { - throw new Error("namespace member expected"); + assert(false); + this.error( + DiagnosticCode.Operation_not_supported, + member.range + ); + break; } } } @@ -1009,6 +1025,8 @@ export class Compiler extends DiagnosticEmitter { // exports compileExportStatement(statement: ExportStatement): void { + var module = this.module; + var exports = this.program.exports; var members = statement.members; for (let i = 0, k = members.length; i < k; ++i) { let member = members[i]; @@ -1017,9 +1035,8 @@ export class Compiler extends DiagnosticEmitter { PATH_DELIMITER + member.externalName.text ); - let element = this.program.exports.get(internalExportName); + let element = exports.get(internalExportName); if (!element) continue; // reported in Program#initialize - switch (element.kind) { case ElementKind.CLASS_PROTOTYPE: { if (!(element).is(ElementFlags.GENERIC)) { @@ -1045,7 +1062,7 @@ export class Compiler extends DiagnosticEmitter { if (functionInstance) { let functionDeclaration = functionInstance.prototype.declaration; if (functionDeclaration && functionDeclaration.needsExplicitExport(member)) { - this.module.addFunctionExport(functionInstance.internalName, member.externalName.text); + module.addFunctionExport(functionInstance.internalName, member.externalName.text); } } } @@ -1056,7 +1073,7 @@ export class Compiler extends DiagnosticEmitter { let globalDeclaration = (element).declaration; if (globalDeclaration && globalDeclaration.needsExplicitExport(member)) { if ((element).is(ElementFlags.INLINED)) { - this.module.addGlobalExport(element.internalName, member.externalName.text); + module.addGlobalExport(element.internalName, member.externalName.text); } else { this.warning( DiagnosticCode.Cannot_export_a_mutable_global, @@ -1083,10 +1100,8 @@ export class Compiler extends DiagnosticEmitter { contextualTypeArguments: Map | null = null, alternativeReportNode: Node | null = null ): void { - var element = this.program.elements.get(declaration.fileLevelInternalName); - if (!element || element.kind != ElementKind.CLASS_PROTOTYPE) { - throw new Error("class expected"); - } + var element = assert(this.program.elements.get(declaration.fileLevelInternalName)); + assert(element.kind == ElementKind.CLASS_PROTOTYPE); this.compileClassUsingTypeArguments( element, typeArguments, @@ -1122,7 +1137,11 @@ export class Compiler extends DiagnosticEmitter { contextualTypeArguments: Map | null = null, alternativeReportNode: Node | null = null ): void { - throw new Error("not implemented"); + // TODO + this.error( + DiagnosticCode.Operation_not_supported, + declaration.range + ); } // memory @@ -1144,8 +1163,9 @@ export class Compiler extends DiagnosticEmitter { if (func.functionTableIndex >= 0) { return func.functionTableIndex; } - var index = this.functionTable.length; - this.functionTable.push(func); + var functionTable = this.functionTable; + var index = functionTable.length; + functionTable.push(func); func.functionTableIndex = index; return index; } @@ -1153,6 +1173,7 @@ export class Compiler extends DiagnosticEmitter { // statements compileStatement(statement: Statement): ExpressionRef { + var module = this.module; var expr: ExpressionRef; switch (statement.kind) { case NodeKind.BLOCK: { @@ -1205,7 +1226,7 @@ export class Compiler extends DiagnosticEmitter { } case NodeKind.VARIABLE: { expr = this.compileVariableStatement(statement); - if (!expr) expr = this.module.createNop(); + if (!expr) expr = module.createNop(); break; } case NodeKind.VOID: { @@ -1220,15 +1241,23 @@ export class Compiler extends DiagnosticEmitter { // type declarations must be top-level because function bodies are evaluated when // reachaable only. if (this.currentFunction == this.startFunction) { - return this.module.createNop(); + return module.createNop(); } // otherwise fall-through } default: { - throw new Error("statement expected"); + assert(false); + this.error( + DiagnosticCode.Operation_not_supported, + statement.range + ); + expr = module.createUnreachable(); + break; } } - this.addDebugLocation(expr, statement.range); + if (this.options.sourceMap) { + addDebugLocation(expr, statement.range, module, this.currentFunction); + } return expr; } @@ -1249,89 +1278,102 @@ export class Compiler extends DiagnosticEmitter { // optimizer. // Not actually a branch, but can contain its own scoped variables. - this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope(); + var flow = this.currentFunction.flow.enterBranchOrScope(); + this.currentFunction.flow = flow; var stmt = this.module.createBlock(null, this.compileStatements(statements), NativeType.None); - var stmtReturns = this.currentFunction.flow.is(FlowFlags.RETURNS); + var stmtReturns = flow.is(FlowFlags.RETURNS); // Switch back to the parent flow - this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope(); + flow = flow.leaveBranchOrScope(); + this.currentFunction.flow = flow; if (stmtReturns) { - this.currentFunction.flow.set(FlowFlags.RETURNS); + flow.set(FlowFlags.RETURNS); } return stmt; } compileBreakStatement(statement: BreakStatement): ExpressionRef { + var module = this.module; if (statement.label) { this.error( DiagnosticCode.Operation_not_supported, statement.label.range ); - return this.module.createUnreachable(); + return module.createUnreachable(); } - var breakLabel = this.currentFunction.flow.breakLabel; + var flow = this.currentFunction.flow; + var breakLabel = flow.breakLabel; if (breakLabel == null) { this.error( DiagnosticCode.A_break_statement_can_only_be_used_within_an_enclosing_iteration_or_switch_statement, statement.range ); - return this.module.createUnreachable(); + return module.createUnreachable(); } - this.currentFunction.flow.set(FlowFlags.POSSIBLY_BREAKS); - return this.module.createBreak(breakLabel); + flow.set(FlowFlags.POSSIBLY_BREAKS); + return module.createBreak(breakLabel); } compileContinueStatement(statement: ContinueStatement): ExpressionRef { - if (statement.label) { + var module = this.module; + var label = statement.label; + if (label) { this.error( DiagnosticCode.Operation_not_supported, - statement.label.range + label.range ); - return this.module.createUnreachable(); + return module.createUnreachable(); } // Check if 'continue' is allowed here - var continueLabel = this.currentFunction.flow.continueLabel; + var flow = this.currentFunction.flow; + var continueLabel = flow.continueLabel; if (continueLabel == null) { this.error( DiagnosticCode.A_continue_statement_can_only_be_used_within_an_enclosing_iteration_statement, statement.range ); - return this.module.createUnreachable(); + return module.createUnreachable(); } - this.currentFunction.flow.set(FlowFlags.POSSIBLY_CONTINUES); - return this.module.createBreak(continueLabel); + flow.set(FlowFlags.POSSIBLY_CONTINUES); + return module.createBreak(continueLabel); } compileDoStatement(statement: DoStatement): ExpressionRef { // A do statement does not initiate a new branch because it is executed at // least once, but has its own break and continue labels. - var label = this.currentFunction.enterBreakContext(); - var previousBreakLabel = this.currentFunction.flow.breakLabel; - var previousContinueLabel = this.currentFunction.flow.continueLabel; - var breakLabel = this.currentFunction.flow.breakLabel = "break|" + label; - var continueLabel = this.currentFunction.flow.continueLabel = "continue|" + label; + var currentFunction = this.currentFunction; + var label = currentFunction.enterBreakContext(); + var flow = currentFunction.flow; + var previousBreakLabel = flow.breakLabel; + var previousContinueLabel = flow.continueLabel; + + var breakLabel = "break|" + label; + flow.breakLabel = breakLabel; + var continueLabel = "continue|" + label; + flow.continueLabel = continueLabel; var body = this.compileStatement(statement.statement); // Reset to the previous break and continue labels, if any. - this.currentFunction.flow.breakLabel = previousBreakLabel; - this.currentFunction.flow.continueLabel = previousContinueLabel; + flow.breakLabel = previousBreakLabel; + flow.continueLabel = previousContinueLabel; + var module = this.module; var condition = makeIsTrueish( this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE), this.currentType, - this.module + module ); this.currentFunction.leaveBreakContext(); - return this.module.createBlock(breakLabel, [ - this.module.createLoop(continueLabel, - this.module.createBlock(null, [ + return module.createBlock(breakLabel, [ + module.createLoop(continueLabel, + module.createBlock(null, [ body, - this.module.createBreak(continueLabel, condition) + module.createBreak(continueLabel, condition) ], NativeType.None)) ], NativeType.None); } @@ -1353,108 +1395,126 @@ export class Compiler extends DiagnosticEmitter { // A for statement initiates a new branch with its own scoped variables // possibly declared in its initializer, and break context. - var context = this.currentFunction.enterBreakContext(); - this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope(); - var breakLabel = this.currentFunction.flow.breakLabel = "break|" + context; - var continueLabel = this.currentFunction.flow.continueLabel = "continue|" + context; + var currentFunction = this.currentFunction; + var context = currentFunction.enterBreakContext(); + var flow = currentFunction.flow.enterBranchOrScope(); + currentFunction.flow = flow; + var breakLabel = flow.breakLabel = "break|" + context; + flow.breakLabel = breakLabel; + var continueLabel = "continue|" + context; + flow.continueLabel = continueLabel; // Compile in correct order + var module = this.module; var initializer = statement.initializer ? this.compileStatement(statement.initializer) - : this.module.createNop(); + : module.createNop(); var condition = statement.condition ? this.compileExpression(statement.condition, Type.i32) - : this.module.createI32(1); + : module.createI32(1); var incrementor = statement.incrementor ? this.compileExpression(statement.incrementor, Type.void) - : this.module.createNop(); + : module.createNop(); var body = this.compileStatement(statement.statement); - var alwaysReturns = !statement.condition && this.currentFunction.flow.is(FlowFlags.RETURNS); + var alwaysReturns = !statement.condition && flow.is(FlowFlags.RETURNS); // TODO: check other always-true conditions as well, not just omitted // Switch back to the parent flow - this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope(); - this.currentFunction.leaveBreakContext(); + flow = flow.leaveBranchOrScope(); + currentFunction.flow = flow; + currentFunction.leaveBreakContext(); - var expr = this.module.createBlock(breakLabel, [ + var expr = module.createBlock(breakLabel, [ initializer, - this.module.createLoop(continueLabel, this.module.createBlock(null, [ - this.module.createIf(condition, this.module.createBlock(null, [ + module.createLoop(continueLabel, module.createBlock(null, [ + module.createIf(condition, module.createBlock(null, [ body, incrementor, - this.module.createBreak(continueLabel) + module.createBreak(continueLabel) ], NativeType.None)) ], NativeType.None)) ], NativeType.None); // If the loop is guaranteed to run and return, propagate that and append a hint if (alwaysReturns) { - this.currentFunction.flow.set(FlowFlags.RETURNS); - expr = this.module.createBlock(null, [ + flow.set(FlowFlags.RETURNS); + expr = module.createBlock(null, [ expr, - this.module.createUnreachable() + module.createUnreachable() ]); } return expr; } compileIfStatement(statement: IfStatement): ExpressionRef { + var module = this.module; // The condition doesn't initiate a branch yet var condition = makeIsTrueish( this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE), this.currentType, - this.module + module ); // Each arm initiates a branch - this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope(); - var ifTrue = this.compileStatement(statement.ifTrue); - var ifTrueReturns = this.currentFunction.flow.is(FlowFlags.RETURNS); - this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope(); + var currentFunction = this.currentFunction; + var flow = currentFunction.flow.enterBranchOrScope(); + currentFunction.flow = flow; + var ifTrueExpr = this.compileStatement(statement.ifTrue); + var ifTrueReturns = flow.is(FlowFlags.RETURNS); + flow = flow.leaveBranchOrScope(); + currentFunction.flow = flow; - var ifFalse: ExpressionRef = 0; + var ifFalseExpr: ExpressionRef = 0; var ifFalseReturns = false; - if (statement.ifFalse) { - this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope(); - ifFalse = this.compileStatement(statement.ifFalse); - ifFalseReturns = this.currentFunction.flow.is(FlowFlags.RETURNS); - this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope(); + var ifFalse = statement.ifFalse; + if (ifFalse) { + flow = flow.enterBranchOrScope(); + currentFunction.flow = flow; + ifFalseExpr = this.compileStatement(ifFalse); + ifFalseReturns = flow.is(FlowFlags.RETURNS); + flow = flow.leaveBranchOrScope(); + currentFunction.flow = flow; } if (ifTrueReturns && ifFalseReturns) { // not necessary to append a hint - this.currentFunction.flow.set(FlowFlags.RETURNS); + flow.set(FlowFlags.RETURNS); } - return this.module.createIf(condition, ifTrue, ifFalse); + return module.createIf(condition, ifTrueExpr, ifFalseExpr); } compileReturnStatement(statement: ReturnStatement): ExpressionRef { + var currentFunction = this.currentFunction; var expression: ExpressionRef = 0; if (statement.value) { expression = this.compileExpression( statement.value, - this.currentFunction.signature.returnType + currentFunction.signature.returnType ); } // Remember that this flow returns - this.currentFunction.flow.set(FlowFlags.RETURNS); + currentFunction.flow.set(FlowFlags.RETURNS); return this.module.createReturn(expression); } compileSwitchStatement(statement: SwitchStatement): ExpressionRef { + var module = this.module; + var currentFunction = this.currentFunction; // Everything within a switch uses the same break context - var context = this.currentFunction.enterBreakContext(); + var context = currentFunction.enterBreakContext(); // introduce a local for evaluating the condition (exactly once) - var tempLocal = this.currentFunction.getTempLocal(Type.u32); - var numCases = statement.cases.length; + var tempLocal = currentFunction.getTempLocal(Type.u32); + var tempLocalIndex = tempLocal.index; + var cases = statement.cases; + var numCases = cases.length; // Prepend initializer to inner block. Does not initiate a new branch, yet. var breaks = new Array(1 + numCases); - breaks[0] = this.module.createSetLocal( // initializer - tempLocal.index, + breaks[0] = module.createSetLocal( // initializer + tempLocalIndex, this.compileExpression(statement.condition, Type.u32) ); @@ -1462,12 +1522,13 @@ export class Compiler extends DiagnosticEmitter { var breakIndex = 1; var defaultIndex = -1; for (let i = 0; i < numCases; ++i) { - let case_ = statement.cases[i]; - if (case_.label) { - breaks[breakIndex++] = this.module.createBreak("case" + i.toString(10) + "|" + context, - this.module.createBinary(BinaryOp.EqI32, - this.module.createGetLocal(tempLocal.index, NativeType.I32), - this.compileExpression(case_.label, Type.i32) + let case_ = cases[i]; + let label = case_.label; + if (label) { + breaks[breakIndex++] = module.createBreak("case" + i.toString(10) + "|" + context, + module.createBinary(BinaryOp.EqI32, + module.createGetLocal(tempLocalIndex, NativeType.I32), + this.compileExpression(label, Type.i32) ) ); } else { @@ -1475,67 +1536,76 @@ export class Compiler extends DiagnosticEmitter { } } - this.currentFunction.freeTempLocal(tempLocal); + currentFunction.freeTempLocal(tempLocal); // otherwise br to default respectively out of the switch if there is no default case - breaks[breakIndex] = this.module.createBreak((defaultIndex >= 0 + breaks[breakIndex] = module.createBreak((defaultIndex >= 0 ? "case" + defaultIndex.toString(10) : "break" ) + "|" + context); // nest blocks in order - var currentBlock = this.module.createBlock("case0|" + context, breaks, NativeType.None); + var currentBlock = module.createBlock("case0|" + context, breaks, NativeType.None); var alwaysReturns = true; for (let i = 0; i < numCases; ++i) { - let case_ = statement.cases[i]; - let l = case_.statements.length; - let body = new Array(1 + l); + let case_ = cases[i]; + let statements = case_.statements; + let numStatements = statements.length; + let body = new Array(1 + numStatements); body[0] = currentBlock; // Each switch case initiates a new branch - this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope(); - let breakLabel = this.currentFunction.flow.breakLabel = "break|" + context; + let flow = currentFunction.flow.enterBranchOrScope(); + currentFunction.flow = flow; + let breakLabel = "break|" + context; + flow.breakLabel = breakLabel; let fallsThrough = i != numCases - 1; let nextLabel = !fallsThrough ? breakLabel : "case" + (i + 1).toString(10) + "|" + context; - for (let j = 0; j < l; ++j) { - body[j + 1] = this.compileStatement(case_.statements[j]); + for (let j = 0; j < numStatements; ++j) { + body[j + 1] = this.compileStatement(statements[j]); } - if (!(fallsThrough || this.currentFunction.flow.is(FlowFlags.RETURNS))) { + if (!(fallsThrough || flow.is(FlowFlags.RETURNS))) { alwaysReturns = false; // ignore fall-throughs } // Switch back to the parent flow - this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope(); + currentFunction.flow = flow.leaveBranchOrScope(); - currentBlock = this.module.createBlock(nextLabel, body, NativeType.None); + currentBlock = module.createBlock(nextLabel, body, NativeType.None); } - this.currentFunction.leaveBreakContext(); + currentFunction.leaveBreakContext(); // If the switch has a default and always returns, propagate that if (defaultIndex >= 0 && alwaysReturns) { - this.currentFunction.flow.set(FlowFlags.RETURNS); + currentFunction.flow.set(FlowFlags.RETURNS); // Binaryen understands that so we don't need a hint } return currentBlock; } compileThrowStatement(statement: ThrowStatement): ExpressionRef { + var flow = this.currentFunction.flow; // Remember that this branch possibly throws - this.currentFunction.flow.set(FlowFlags.POSSIBLY_THROWS); + flow.set(FlowFlags.POSSIBLY_THROWS); // FIXME: without try-catch it is safe to assume RETURNS as well for now - this.currentFunction.flow.set(FlowFlags.RETURNS); + flow.set(FlowFlags.RETURNS); // TODO: requires exception-handling spec. return this.module.createUnreachable(); } compileTryStatement(statement: TryStatement): ExpressionRef { - throw new Error("not implemented"); + // TODO // can't yet support something like: try { return ... } finally { ... } // worthwhile to investigate lowering returns to block results (here)? + this.error( + DiagnosticCode.Operation_not_supported, + statement.range + ); + return this.module.createUnreachable(); } /** @@ -1543,12 +1613,14 @@ export class Compiler extends DiagnosticEmitter { * necessary. */ compileVariableStatement(statement: VariableStatement, isKnownGlobal: bool = false): ExpressionRef { + var program = this.program; + var currentFunction = this.currentFunction; var declarations = statement.declarations; var numDeclarations = declarations.length; // top-level variables and constants become globals if (isKnownGlobal || ( - this.currentFunction == this.startFunction && + currentFunction == this.startFunction && statement.parent && statement.parent.kind == NodeKind.SOURCE )) { // NOTE that the above condition also covers top-level variables declared with 'let', even @@ -1570,9 +1642,9 @@ export class Compiler extends DiagnosticEmitter { let type: Type | null = null; let init: ExpressionRef = 0; if (declaration.type) { - type = this.program.resolveType( // reports + type = program.resolveType( // reports declaration.type, - this.currentFunction.contextualTypeArguments + currentFunction.contextualTypeArguments ); if (!type) continue; if (declaration.initializer) { @@ -1603,7 +1675,7 @@ export class Compiler extends DiagnosticEmitter { if (init) { init = this.precomputeExpressionRef(init); if (_BinaryenExpressionGetId(init) == ExpressionId.Const) { - let local = new Local(this.program, name, -1, type); + let local = new Local(program, name, -1, type); switch (_BinaryenExpressionGetType(init)) { case NativeType.I32: { local = local.withConstantIntegerValue(_BinaryenConstGetValueI32(init), 0); @@ -1625,12 +1697,17 @@ export class Compiler extends DiagnosticEmitter { break; } default: { - throw new Error("concrete type expected"); + assert(false); + this.error( + DiagnosticCode.Operation_not_supported, + declaration.range + ); + return this.module.createUnreachable(); } } // Create a virtual local that doesn't actually exist in WebAssembly - let scopedLocals = this.currentFunction.flow.scopedLocals; - if (!scopedLocals) scopedLocals = this.currentFunction.flow.scopedLocals = new Map(); + let scopedLocals = currentFunction.flow.scopedLocals; + if (!scopedLocals) currentFunction.flow.scopedLocals = scopedLocals = new Map(); else if (scopedLocals.has(name)) { this.error( DiagnosticCode.Duplicate_identifier_0, @@ -1654,9 +1731,9 @@ export class Compiler extends DiagnosticEmitter { } } if (hasModifier(ModifierKind.LET, declaration.modifiers)) { // here: not top-level - this.currentFunction.flow.addScopedLocal(name, type, declaration.name); // reports + currentFunction.flow.addScopedLocal(name, type, declaration.name); // reports } else { - this.currentFunction.addLocal(type, name); // reports + currentFunction.addLocal(type, name); // reports } if (init) { initializers.push(this.compileAssignmentWithValue(declaration.name, init)); @@ -1674,42 +1751,47 @@ export class Compiler extends DiagnosticEmitter { } compileWhileStatement(statement: WhileStatement): ExpressionRef { + var module = this.module; // The condition does not yet initialize a branch var condition = makeIsTrueish( this.compileExpression(statement.condition, Type.i32, ConversionKind.NONE), this.currentType, - this.module + module ); // Statements initiate a new branch with its own break context - var label = this.currentFunction.enterBreakContext(); - this.currentFunction.flow = this.currentFunction.flow.enterBranchOrScope(); - var breakLabel = this.currentFunction.flow.breakLabel = "break|" + label; - var continueLabel = this.currentFunction.flow.continueLabel = "continue|" + label; + var currentFunction = this.currentFunction; + var label = currentFunction.enterBreakContext(); + var flow = currentFunction.flow.enterBranchOrScope(); + currentFunction.flow = flow; + var breakLabel = "break|" + label; + flow.breakLabel = breakLabel; + var continueLabel = "continue|" + label; + flow.continueLabel = continueLabel; var body = this.compileStatement(statement.statement); - var alwaysReturns = false && this.currentFunction.flow.is(FlowFlags.RETURNS); + var alwaysReturns = false && flow.is(FlowFlags.RETURNS); // TODO: evaluate possible always-true conditions // Switch back to the parent flow - this.currentFunction.flow = this.currentFunction.flow.leaveBranchOrScope(); - this.currentFunction.leaveBreakContext(); + currentFunction.flow = flow.leaveBranchOrScope(); + currentFunction.leaveBreakContext(); - var expr = this.module.createBlock(breakLabel, [ - this.module.createLoop(continueLabel, - this.module.createIf(condition, this.module.createBlock(null, [ + var expr = module.createBlock(breakLabel, [ + module.createLoop(continueLabel, + module.createIf(condition, module.createBlock(null, [ body, - this.module.createBreak(continueLabel) + module.createBreak(continueLabel) ], NativeType.None)) ) ], NativeType.None); // If the loop is guaranteed to run and return, propagate that and append a hint if (alwaysReturns) { - expr = this.module.createBlock(null, [ + expr = module.createBlock(null, [ expr, - this.module.createUnreachable() + module.createUnreachable() ]); } return expr; @@ -1728,17 +1810,18 @@ export class Compiler extends DiagnosticEmitter { retainType: bool ): ExpressionRef { assert(element.is(ElementFlags.INLINED)); + var type = element.type; switch ( !retainType && - element.type.is(TypeFlags.INTEGER) && + type.is(TypeFlags.INTEGER) && contextualType.is(TypeFlags.INTEGER) && - element.type.size < contextualType.size + type.size < contextualType.size ? (this.currentType = contextualType).kind // essentially precomputes a (sign-)extension - : (this.currentType = element.type).kind + : (this.currentType = type).kind ) { case TypeKind.I8: case TypeKind.I16: { - let shift = element.type.computeSmallIntegerShift(Type.i32); + let shift = type.computeSmallIntegerShift(Type.i32); return this.module.createI32( element.constantValueKind == ConstantValueKind.INTEGER ? i64_low(element.constantIntegerValue) << shift >> shift @@ -1790,7 +1873,12 @@ export class Compiler extends DiagnosticEmitter { return this.module.createF64((element).constantFloatValue); } default: { - throw new Error("concrete type expected"); + assert(false); + this.error( + DiagnosticCode.Operation_not_supported, + element.declaration.range + ); + return this.module.createUnreachable(); } } } @@ -1879,16 +1967,25 @@ export class Compiler extends DiagnosticEmitter { break; } default: { - throw new Error("expression expected"); + assert(false); + this.error( + DiagnosticCode.Operation_not_supported, + expression.range + ); + expr = this.module.createUnreachable(); + break; } } - if (conversionKind != ConversionKind.NONE && this.currentType != contextualType) { - expr = this.convertExpression(expr, this.currentType, contextualType, conversionKind, expression); + var currentType = this.currentType; + if (conversionKind != ConversionKind.NONE && currentType != contextualType) { + expr = this.convertExpression(expr, currentType, contextualType, conversionKind, expression); this.currentType = contextualType; } - this.addDebugLocation(expr, expression.range); + if (this.options.sourceMap) { + addDebugLocation(expr, expression.range, this.module, this.currentFunction); + } return expr; } @@ -1916,17 +2013,19 @@ export class Compiler extends DiagnosticEmitter { } precomputeExpressionRef(expr: ExpressionRef): ExpressionRef { - var nativeType = this.currentType.toNativeType(); - var typeRef = this.module.getFunctionTypeBySignature(nativeType, null); + var module = this.module; + var type = this.currentType; + var nativeType = type.toNativeType(); + var typeRef = module.getFunctionTypeBySignature(nativeType, null); var typeRefAdded = false; if (!typeRef) { - typeRef = this.module.addFunctionType(this.currentType.toSignatureString(), nativeType, null); + typeRef = module.addFunctionType(type.toSignatureString(), nativeType, null); typeRefAdded = true; } - var funcRef = this.module.addFunction("__precompute", typeRef, null, expr); - this.module.runPasses([ "precompute" ], funcRef); + var funcRef = module.addFunction("__precompute", typeRef, null, expr); + module.runPasses([ "precompute" ], funcRef); var ret = _BinaryenFunctionGetBody(funcRef); - this.module.removeFunction("__precompute"); + module.removeFunction("__precompute"); if (typeRefAdded) { // TODO: also remove the function type somehow if no longer used or make the C-API accept // a `null` typeRef, using an implicit type. @@ -1941,10 +2040,8 @@ export class Compiler extends DiagnosticEmitter { conversionKind: ConversionKind, reportNode: Node ): ExpressionRef { - if (conversionKind == ConversionKind.NONE) { - assert(false, "concrete type expected"); - return expr; - } + assert(conversionKind != ConversionKind.NONE); + var module = this.module; // void to any if (fromType.kind == TypeKind.VOID) { @@ -1952,21 +2049,22 @@ export class Compiler extends DiagnosticEmitter { DiagnosticCode.Type_0_is_not_assignable_to_type_1, reportNode.range, fromType.toString(), toType.toString() ); - return this.module.createUnreachable(); + return module.createUnreachable(); } // any to void if (toType.kind == TypeKind.VOID) { - return this.module.createDrop(expr); + return module.createDrop(expr); } if (conversionKind == ConversionKind.IMPLICIT && !fromType.isAssignableTo(toType)) { this.error( DiagnosticCode.Conversion_from_type_0_to_1_requires_an_explicit_cast, reportNode.range, fromType.toString(), toType.toString() - ); + ); // recoverable } + // TODO: make this a proper switch? if (fromType.is(TypeFlags.FLOAT)) { // float to float @@ -1975,14 +2073,14 @@ export class Compiler extends DiagnosticEmitter { // f32 to f64 if (toType.kind == TypeKind.F64) { - expr = this.module.createUnary(UnaryOp.PromoteF32, expr); + expr = module.createUnary(UnaryOp.PromoteF32, expr); } // otherwise f32 to f32 // f64 to f32 } else if (toType.kind == TypeKind.F32) { - expr = this.module.createUnary(UnaryOp.DemoteF64, expr); + expr = module.createUnary(UnaryOp.DemoteF64, expr); } // otherwise f64 to f64 @@ -1994,20 +2092,20 @@ export class Compiler extends DiagnosticEmitter { if (fromType.kind == TypeKind.F32) { if (toType.is(TypeFlags.SIGNED)) { if (toType.is(TypeFlags.LONG)) { - expr = this.module.createUnary(UnaryOp.TruncF32ToI64, expr); + expr = module.createUnary(UnaryOp.TruncF32ToI64, expr); } else { - expr = this.module.createUnary(UnaryOp.TruncF32ToI32, expr); + expr = module.createUnary(UnaryOp.TruncF32ToI32, expr); if (toType.is(TypeFlags.SMALL)) { - expr = makeSmallIntegerWrap(expr, toType, this.module); + expr = makeSmallIntegerWrap(expr, toType, module); } } } else { if (toType.is(TypeFlags.LONG)) { - expr = this.module.createUnary(UnaryOp.TruncF32ToU64, expr); + expr = module.createUnary(UnaryOp.TruncF32ToU64, expr); } else { - expr = this.module.createUnary(UnaryOp.TruncF32ToU32, expr); + expr = module.createUnary(UnaryOp.TruncF32ToU32, expr); if (toType.is(TypeFlags.SMALL)) { - expr = makeSmallIntegerWrap(expr, toType, this.module); + expr = makeSmallIntegerWrap(expr, toType, module); } } } @@ -2016,20 +2114,20 @@ export class Compiler extends DiagnosticEmitter { } else { if (toType.is(TypeFlags.SIGNED)) { if (toType.is(TypeFlags.LONG)) { - expr = this.module.createUnary(UnaryOp.TruncF64ToI64, expr); + expr = module.createUnary(UnaryOp.TruncF64ToI64, expr); } else { - expr = this.module.createUnary(UnaryOp.TruncF64ToI32, expr); + expr = module.createUnary(UnaryOp.TruncF64ToI32, expr); if (toType.is(TypeFlags.SMALL)) { - expr = makeSmallIntegerWrap(expr, toType, this.module); + expr = makeSmallIntegerWrap(expr, toType, module); } } } else { if (toType.is(TypeFlags.LONG)) { - expr = this.module.createUnary(UnaryOp.TruncF64ToU64, expr); + expr = module.createUnary(UnaryOp.TruncF64ToU64, expr); } else { - expr = this.module.createUnary(UnaryOp.TruncF64ToU32, expr); + expr = module.createUnary(UnaryOp.TruncF64ToU32, expr); if (toType.is(TypeFlags.SMALL)) { - expr = makeSmallIntegerWrap(expr, toType, this.module); + expr = makeSmallIntegerWrap(expr, toType, module); } } } @@ -2038,7 +2136,7 @@ export class Compiler extends DiagnosticEmitter { // float to void } else { assert(toType.flags == TypeFlags.NONE, "void type expected"); - expr = this.module.createDrop(expr); + expr = module.createDrop(expr); } // int to float @@ -2047,14 +2145,14 @@ export class Compiler extends DiagnosticEmitter { // int to f32 if (toType.kind == TypeKind.F32) { if (fromType.is(TypeFlags.LONG)) { - expr = this.module.createUnary( + expr = module.createUnary( fromType.is(TypeFlags.SIGNED) ? UnaryOp.ConvertI64ToF32 : UnaryOp.ConvertU64ToF32, expr ); } else { - expr = this.module.createUnary( + expr = module.createUnary( fromType.is(TypeFlags.SIGNED) ? UnaryOp.ConvertI32ToF32 : UnaryOp.ConvertU32ToF32, @@ -2065,14 +2163,14 @@ export class Compiler extends DiagnosticEmitter { // int to f64 } else { if (fromType.is(TypeFlags.LONG)) { - expr = this.module.createUnary( + expr = module.createUnary( fromType.is(TypeFlags.SIGNED) ? UnaryOp.ConvertI64ToF64 : UnaryOp.ConvertU64ToF64, expr ); } else { - expr = this.module.createUnary( + expr = module.createUnary( fromType.is(TypeFlags.SIGNED) ? UnaryOp.ConvertI32ToF64 : UnaryOp.ConvertU32ToF64, @@ -2087,15 +2185,15 @@ export class Compiler extends DiagnosticEmitter { // i64 to i32 if (!toType.is(TypeFlags.LONG)) { - expr = this.module.createUnary(UnaryOp.WrapI64, expr); // discards upper bits + expr = module.createUnary(UnaryOp.WrapI64, expr); // discards upper bits if (toType.is(TypeFlags.SMALL)) { - expr = makeSmallIntegerWrap(expr, toType, this.module); + expr = makeSmallIntegerWrap(expr, toType, module); } } // i32 to i64 } else if (toType.is(TypeFlags.LONG)) { - expr = this.module.createUnary(toType.is(TypeFlags.SIGNED) ? UnaryOp.ExtendI32 : UnaryOp.ExtendU32, expr); + expr = module.createUnary(toType.is(TypeFlags.SIGNED) ? UnaryOp.ExtendI32 : UnaryOp.ExtendU32, expr); // i32 or smaller to even smaller or same size int with change of sign } else if ( @@ -2108,7 +2206,7 @@ export class Compiler extends DiagnosticEmitter { ) ) ) { - expr = makeSmallIntegerWrap(expr, toType, this.module); + expr = makeSmallIntegerWrap(expr, toType, module); } // otherwise (smaller) i32/u32 to (same size) i32/u32 @@ -2132,14 +2230,17 @@ export class Compiler extends DiagnosticEmitter { contextualType: Type, wrapSmallIntegers: bool = true ): ExpressionRef { + var module = this.module; + var left = expression.left; + var right = expression.right; - var left: ExpressionRef; + var leftExpr: ExpressionRef; var leftType: Type; - var right: ExpressionRef; + var rightExpr: ExpressionRef; var rightType: Type; var commonType: Type | null; - var condition: ExpressionRef; + var condExpr: ExpressionRef; var expr: ExpressionRef; var compound = false; var possiblyOverflows = false; @@ -2147,39 +2248,39 @@ export class Compiler extends DiagnosticEmitter { switch (expression.operator) { case Token.LESSTHAN: { - left = this.compileExpressionRetainType(expression.left, contextualType); + leftExpr = this.compileExpressionRetainType(left, contextualType); leftType = this.currentType; - right = this.compileExpressionRetainType(expression.right, leftType); + rightExpr = this.compileExpressionRetainType(right, leftType); rightType = this.currentType; if (commonType = Type.commonCompatible(leftType, rightType, true)) { - left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); - right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left); + rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right); } else { this.error( DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, expression.range, "<", leftType.toString(), rightType.toString() ); this.currentType = contextualType; - return this.module.createUnreachable(); + return module.createUnreachable(); } switch (commonType.kind) { case TypeKind.I8: case TypeKind.I16: case TypeKind.I32: { - expr = this.module.createBinary(BinaryOp.LtI32, left, right); + expr = module.createBinary(BinaryOp.LtI32, leftExpr, rightExpr); break; } case TypeKind.I64: { - expr = this.module.createBinary(BinaryOp.LtI64, left, right); + expr = module.createBinary(BinaryOp.LtI64, leftExpr, rightExpr); break; } case TypeKind.ISIZE: { - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.LtI64 : BinaryOp.LtI32, - left, - right + leftExpr, + rightExpr ); break; } @@ -2187,268 +2288,276 @@ export class Compiler extends DiagnosticEmitter { case TypeKind.U16: case TypeKind.U32: case TypeKind.BOOL: { - expr = this.module.createBinary(BinaryOp.LtU32, left, right); + expr = module.createBinary(BinaryOp.LtU32, leftExpr, rightExpr); break; } case TypeKind.USIZE: { // TODO: check operator overload - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.LtU64 : BinaryOp.LtU32, - left, - right + leftExpr, + rightExpr ); break; } case TypeKind.U64: { - expr = this.module.createBinary(BinaryOp.LtU64, left, right); + expr = module.createBinary(BinaryOp.LtU64, leftExpr, rightExpr); break; } case TypeKind.F32: { - expr = this.module.createBinary(BinaryOp.LtF32, left, right); + expr = module.createBinary(BinaryOp.LtF32, leftExpr, rightExpr); break; } case TypeKind.F64: { - expr = this.module.createBinary(BinaryOp.LtF64, left, right); + expr = module.createBinary(BinaryOp.LtF64, leftExpr, rightExpr); break; } default: { + assert(false); this.error( DiagnosticCode.Operation_not_supported, expression.range ); - throw new Error("concrete type expected"); + expr = module.createUnreachable(); + break; } } this.currentType = Type.bool; break; } case Token.GREATERTHAN: { - left = this.compileExpressionRetainType(expression.left, contextualType); + leftExpr = this.compileExpressionRetainType(left, contextualType); leftType = this.currentType; - right = this.compileExpressionRetainType(expression.right, leftType); + rightExpr = this.compileExpressionRetainType(right, leftType); rightType = this.currentType; if (commonType = Type.commonCompatible(leftType, rightType, true)) { - left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); - right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left); + rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right); } else { this.error( DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, expression.range, ">", leftType.toString(), rightType.toString() ); this.currentType = contextualType; - return this.module.createUnreachable(); + return module.createUnreachable(); } switch (commonType.kind) { case TypeKind.I8: case TypeKind.I16: case TypeKind.I32: { - expr = this.module.createBinary(BinaryOp.GtI32, left, right); + expr = module.createBinary(BinaryOp.GtI32, leftExpr, rightExpr); break; } case TypeKind.ISIZE: { - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.GtI64 : BinaryOp.GtI32, - left, - right + leftExpr, + rightExpr ); break; } case TypeKind.I64: { - expr = this.module.createBinary(BinaryOp.GtI64, left, right); + expr = module.createBinary(BinaryOp.GtI64, leftExpr, rightExpr); break; } case TypeKind.U8: case TypeKind.U16: case TypeKind.U32: case TypeKind.BOOL: { - expr = this.module.createBinary(BinaryOp.GtU32, left, right); + expr = module.createBinary(BinaryOp.GtU32, leftExpr, rightExpr); break; } case TypeKind.USIZE: { // TODO: check operator overload - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.GtU64 : BinaryOp.GtU32, - left, - right + leftExpr, + rightExpr ); break; } case TypeKind.U64: { - expr = this.module.createBinary(BinaryOp.GtU64, left, right); + expr = module.createBinary(BinaryOp.GtU64, leftExpr, rightExpr); break; } case TypeKind.F32: { - expr = this.module.createBinary(BinaryOp.GtF32, left, right); + expr = module.createBinary(BinaryOp.GtF32, leftExpr, rightExpr); break; } case TypeKind.F64: { - expr = this.module.createBinary(BinaryOp.GtF64, left, right); + expr = module.createBinary(BinaryOp.GtF64, leftExpr, rightExpr); break; } default: { + assert(false); this.error( DiagnosticCode.Operation_not_supported, expression.range ); - throw new Error("concrete type expected"); + expr = module.createUnreachable(); + break; } } this.currentType = Type.bool; break; } case Token.LESSTHAN_EQUALS: { - left = this.compileExpressionRetainType(expression.left, contextualType); + leftExpr = this.compileExpressionRetainType(left, contextualType); leftType = this.currentType; - right = this.compileExpressionRetainType(expression.right, leftType); + rightExpr = this.compileExpressionRetainType(right, leftType); rightType = this.currentType; if (commonType = Type.commonCompatible(leftType, rightType, true)) { - left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); - right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left); + rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right); } else { this.error( DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, expression.range, "<=", leftType.toString(), rightType.toString() ); this.currentType = contextualType; - return this.module.createUnreachable(); + return module.createUnreachable(); } switch (commonType.kind) { case TypeKind.I8: case TypeKind.I16: case TypeKind.I32: { - expr = this.module.createBinary(BinaryOp.LeI32, left, right); + expr = module.createBinary(BinaryOp.LeI32, leftExpr, rightExpr); break; } case TypeKind.ISIZE: { - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.LeI64 : BinaryOp.LeI32, - left, - right + leftExpr, + rightExpr ); break; } case TypeKind.I64: { - expr = this.module.createBinary(BinaryOp.LeI64, left, right); + expr = module.createBinary(BinaryOp.LeI64, leftExpr, rightExpr); break; } case TypeKind.U8: case TypeKind.U16: case TypeKind.U32: case TypeKind.BOOL: { - expr = this.module.createBinary(BinaryOp.LeU32, left, right); + expr = module.createBinary(BinaryOp.LeU32, leftExpr, rightExpr); break; } case TypeKind.USIZE: { // TODO: check operator overload - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.LeU64 : BinaryOp.LeU32, - left, - right + leftExpr, + rightExpr ); break; } case TypeKind.U64: { - expr = this.module.createBinary(BinaryOp.LeU64, left, right); + expr = module.createBinary(BinaryOp.LeU64, leftExpr, rightExpr); break; } case TypeKind.F32: { - expr = this.module.createBinary(BinaryOp.LeF32, left, right); + expr = module.createBinary(BinaryOp.LeF32, leftExpr, rightExpr); break; } case TypeKind.F64: { - expr = this.module.createBinary(BinaryOp.LeF64, left, right); + expr = module.createBinary(BinaryOp.LeF64, leftExpr, rightExpr); break; } default: { + assert(false); this.error( DiagnosticCode.Operation_not_supported, expression.range ); - throw new Error("concrete type expected"); + expr = module.createUnreachable(); + break; } } this.currentType = Type.bool; break; } case Token.GREATERTHAN_EQUALS: { - left = this.compileExpressionRetainType(expression.left, contextualType); + leftExpr = this.compileExpressionRetainType(left, contextualType); leftType = this.currentType; - right = this.compileExpressionRetainType(expression.right, leftType); + rightExpr = this.compileExpressionRetainType(right, leftType); rightType = this.currentType; if (commonType = Type.commonCompatible(leftType, rightType, true)) { - left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); - right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left); + rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right); } else { this.error( DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, expression.range, ">=", leftType.toString(), rightType.toString() ); this.currentType = contextualType; - return this.module.createUnreachable(); + return module.createUnreachable(); } switch (commonType.kind) { case TypeKind.I8: case TypeKind.I16: case TypeKind.I32: { - expr = this.module.createBinary(BinaryOp.GeI32, left, right); + expr = module.createBinary(BinaryOp.GeI32, leftExpr, rightExpr); break; } case TypeKind.ISIZE: { - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.GeI64 : BinaryOp.GeI32, - left, - right + leftExpr, + rightExpr ); break; } case TypeKind.I64: { - expr = this.module.createBinary(BinaryOp.GeI64, left, right); + expr = module.createBinary(BinaryOp.GeI64, leftExpr, rightExpr); break; } case TypeKind.U8: case TypeKind.U16: case TypeKind.U32: case TypeKind.BOOL: { - expr = this.module.createBinary(BinaryOp.GeU32, left, right); + expr = module.createBinary(BinaryOp.GeU32, leftExpr, rightExpr); break; } case TypeKind.USIZE: { // TODO: check operator overload - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.GeU64 : BinaryOp.GeU32, - left, - right + leftExpr, + rightExpr ); break; } case TypeKind.U64: { - expr = this.module.createBinary(BinaryOp.GeU64, left, right); + expr = module.createBinary(BinaryOp.GeU64, leftExpr, rightExpr); break; } case TypeKind.F32: { - expr = this.module.createBinary(BinaryOp.GeF32, left, right); + expr = module.createBinary(BinaryOp.GeF32, leftExpr, rightExpr); break; } case TypeKind.F64: { - expr = this.module.createBinary(BinaryOp.GeF64, left, right); + expr = module.createBinary(BinaryOp.GeF64, leftExpr, rightExpr); break; } default: { + assert(false); this.error( DiagnosticCode.Operation_not_supported, expression.range ); - throw new Error("concrete type expected"); + expr = module.createUnreachable(); + break; } } this.currentType = Type.bool; @@ -2463,20 +2572,20 @@ export class Compiler extends DiagnosticEmitter { // checking for a possible use of unary EQZ. while the most classic of all optimizations, // that's not what the source told us to do. for reference, `!left` emits unary EQZ. - left = this.compileExpressionRetainType(expression.left, contextualType); + leftExpr = this.compileExpressionRetainType(left, contextualType); leftType = this.currentType; - right = this.compileExpressionRetainType(expression.right, leftType); + rightExpr = this.compileExpressionRetainType(right, leftType); rightType = this.currentType; if (commonType = Type.commonCompatible(leftType, rightType, false)) { - left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); - right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left); + rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right); } else { this.error( DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, expression.range, Token.operatorToString(expression.operator), leftType.toString(), rightType.toString() ); this.currentType = contextualType; - return this.module.createUnreachable(); + return module.createUnreachable(); } switch (commonType.kind) { case TypeKind.I8: @@ -2486,39 +2595,41 @@ export class Compiler extends DiagnosticEmitter { case TypeKind.U16: case TypeKind.U32: case TypeKind.BOOL: { - expr = this.module.createBinary(BinaryOp.EqI32, left, right); + expr = module.createBinary(BinaryOp.EqI32, leftExpr, rightExpr); break; } case TypeKind.USIZE: // TODO: check operator overload case TypeKind.ISIZE: { - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.EqI64 : BinaryOp.EqI32, - left, - right + leftExpr, + rightExpr ); break; } case TypeKind.I64: case TypeKind.U64: { - expr = this.module.createBinary(BinaryOp.EqI64, left, right); + expr = module.createBinary(BinaryOp.EqI64, leftExpr, rightExpr); break; } case TypeKind.F32: { - expr = this.module.createBinary(BinaryOp.EqF32, left, right); + expr = module.createBinary(BinaryOp.EqF32, leftExpr, rightExpr); break; } case TypeKind.F64: { - expr = this.module.createBinary(BinaryOp.EqF64, left, right); + expr = module.createBinary(BinaryOp.EqF64, leftExpr, rightExpr); break; } default: { + assert(false); this.error( DiagnosticCode.Operation_not_supported, expression.range ); - throw new Error("concrete type expected"); + expr = module.createUnreachable(); + break; } } this.currentType = Type.bool; @@ -2527,20 +2638,20 @@ export class Compiler extends DiagnosticEmitter { case Token.EXCLAMATION_EQUALS_EQUALS: // TODO? case Token.EXCLAMATION_EQUALS: { - left = this.compileExpressionRetainType(expression.left, contextualType); + leftExpr = this.compileExpressionRetainType(left, contextualType); leftType = this.currentType; - right = this.compileExpressionRetainType(expression.right, leftType); + rightExpr = this.compileExpressionRetainType(right, leftType); rightType = this.currentType; if (commonType = Type.commonCompatible(leftType, rightType, false)) { - left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); - right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left); + rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right); } else { this.error( DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, expression.range, Token.operatorToString(expression.operator), leftType.toString(), rightType.toString() ); this.currentType = contextualType; - return this.module.createUnreachable(); + return module.createUnreachable(); } switch (commonType.kind) { case TypeKind.I8: @@ -2550,79 +2661,80 @@ export class Compiler extends DiagnosticEmitter { case TypeKind.U16: case TypeKind.U32: case TypeKind.BOOL: { - expr = this.module.createBinary(BinaryOp.NeI32, left, right); + expr = module.createBinary(BinaryOp.NeI32, leftExpr, rightExpr); break; } case TypeKind.USIZE: // TODO: check operator overload case TypeKind.ISIZE: { - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.NeI64 : BinaryOp.NeI32, - left, - right + leftExpr, + rightExpr ); break; } case TypeKind.I64: case TypeKind.U64: { - expr = this.module.createBinary(BinaryOp.NeI64, left, right); + expr = module.createBinary(BinaryOp.NeI64, leftExpr, rightExpr); break; } case TypeKind.F32: { - expr = this.module.createBinary(BinaryOp.NeF32, left, right); + expr = module.createBinary(BinaryOp.NeF32, leftExpr, rightExpr); break; } case TypeKind.F64: { - expr = this.module.createBinary(BinaryOp.NeF64, left, right); + expr = module.createBinary(BinaryOp.NeF64, leftExpr, rightExpr); break; } default: { + assert(false); this.error( DiagnosticCode.Operation_not_supported, expression.range ); - throw new Error("concrete type expected"); + expr = module.createUnreachable(); } } this.currentType = Type.bool; break; } case Token.EQUALS: { - return this.compileAssignment(expression.left, expression.right, contextualType); + return this.compileAssignment(left, right, contextualType); } case Token.PLUS_EQUALS: compound = true; case Token.PLUS: { - left = this.compileExpressionRetainType( - expression.left, + leftExpr = this.compileExpressionRetainType( + left, contextualType, false // retains low bits of small integers ); if (compound) { - right = this.compileExpression( - expression.right, + rightExpr = this.compileExpression( + right, this.currentType, ConversionKind.IMPLICIT, false // ^ ); } else { leftType = this.currentType; - right = this.compileExpressionRetainType( - expression.right, + rightExpr = this.compileExpressionRetainType( + right, leftType, false // ^ ); rightType = this.currentType; if (commonType = Type.commonCompatible(leftType, rightType, false)) { - left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); - right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left); + rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right); } else { this.error( DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, expression.range, "+", leftType.toString(), rightType.toString() ); this.currentType = contextualType; - return this.module.createUnreachable(); + return module.createUnreachable(); } } switch (this.currentType.kind) { @@ -2633,71 +2745,77 @@ export class Compiler extends DiagnosticEmitter { case TypeKind.BOOL: possiblyOverflows = true; case TypeKind.I32: case TypeKind.U32: { - expr = this.module.createBinary(BinaryOp.AddI32, left, right); + expr = module.createBinary(BinaryOp.AddI32, leftExpr, rightExpr); break; } case TypeKind.USIZE: // TODO: check operator overload case TypeKind.ISIZE: { - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.AddI64 : BinaryOp.AddI32, - left, - right + leftExpr, + rightExpr ); break; } case TypeKind.I64: case TypeKind.U64: { - expr = this.module.createBinary(BinaryOp.AddI64, left, right); + expr = module.createBinary(BinaryOp.AddI64, leftExpr, rightExpr); break; } case TypeKind.F32: { - expr = this.module.createBinary(BinaryOp.AddF32, left, right); + expr = module.createBinary(BinaryOp.AddF32, leftExpr, rightExpr); break; } case TypeKind.F64: { - expr = this.module.createBinary(BinaryOp.AddF64, left, right); + expr = module.createBinary(BinaryOp.AddF64, leftExpr, rightExpr); break; } default: { - throw new Error("concrete type expected"); + assert(false); + this.error( + DiagnosticCode.Operation_not_supported, + expression.range + ); + expr = module.createUnreachable(); + break; } } break; } case Token.MINUS_EQUALS: compound = true; case Token.MINUS: { - left = this.compileExpressionRetainType( - expression.left, + leftExpr = this.compileExpressionRetainType( + left, contextualType, false // retains low bits of small integers ); if (compound) { - right = this.compileExpression( - expression.right, + rightExpr = this.compileExpression( + right, this.currentType, ConversionKind.IMPLICIT, false // ^ ); } else { leftType = this.currentType; - right = this.compileExpressionRetainType( - expression.right, + rightExpr = this.compileExpressionRetainType( + right, leftType, false // ^ ); rightType = this.currentType; if (commonType = Type.commonCompatible(leftType, rightType, false)) { - left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); - right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left); + rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right); } else { this.error( DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, expression.range, "-", leftType.toString(), rightType.toString() ); this.currentType = contextualType; - return this.module.createUnreachable(); + return module.createUnreachable(); } } switch (this.currentType.kind) { @@ -2708,75 +2826,77 @@ export class Compiler extends DiagnosticEmitter { case TypeKind.BOOL: possiblyOverflows = true; case TypeKind.I32: case TypeKind.U32: { - expr = this.module.createBinary(BinaryOp.SubI32, left, right); + expr = module.createBinary(BinaryOp.SubI32, leftExpr, rightExpr); break; } case TypeKind.USIZE: // TODO: check operator overload case TypeKind.ISIZE: { - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.SubI64 : BinaryOp.SubI32, - left, - right + leftExpr, + rightExpr ); break; } case TypeKind.I64: case TypeKind.U64: { - expr = this.module.createBinary(BinaryOp.SubI64, left, right); + expr = module.createBinary(BinaryOp.SubI64, leftExpr, rightExpr); break; } case TypeKind.F32: { - expr = this.module.createBinary(BinaryOp.SubF32, left, right); + expr = module.createBinary(BinaryOp.SubF32, leftExpr, rightExpr); break; } case TypeKind.F64: { - expr = this.module.createBinary(BinaryOp.SubF64, left, right); + expr = module.createBinary(BinaryOp.SubF64, leftExpr, rightExpr); break; } default: { + assert(false); this.error( DiagnosticCode.Operation_not_supported, expression.range ); - throw new Error("concrete type expected"); + expr = module.createUnreachable(); + break; } } break; } case Token.ASTERISK_EQUALS: compound = true; case Token.ASTERISK: { - left = this.compileExpressionRetainType( - expression.left, + leftExpr = this.compileExpressionRetainType( + left, contextualType, false // retains low bits of small integers ); if (compound) { - right = this.compileExpression( - expression.right, + rightExpr = this.compileExpression( + right, this.currentType, ConversionKind.IMPLICIT, false // ^ ); } else { leftType = this.currentType; - right = this.compileExpressionRetainType( - expression.right, + rightExpr = this.compileExpressionRetainType( + right, leftType, false // ^ ); rightType = this.currentType; if (commonType = Type.commonCompatible(leftType, rightType, false)) { - left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); - right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left); + rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right); } else { this.error( DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, expression.range, "*", leftType.toString(), rightType.toString() ); this.currentType = contextualType; - return this.module.createUnreachable(); + return module.createUnreachable(); } } switch (this.currentType.kind) { @@ -2787,211 +2907,215 @@ export class Compiler extends DiagnosticEmitter { case TypeKind.BOOL: possiblyOverflows = true; case TypeKind.I32: case TypeKind.U32: { - expr = this.module.createBinary(BinaryOp.MulI32, left, right); + expr = module.createBinary(BinaryOp.MulI32, leftExpr, rightExpr); break; } case TypeKind.USIZE: // TODO: check operator overload case TypeKind.ISIZE: { - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.MulI64 : BinaryOp.MulI32, - left, - right + leftExpr, + rightExpr ); break; } case TypeKind.I64: case TypeKind.U64: { - expr = this.module.createBinary(BinaryOp.MulI64, left, right); + expr = module.createBinary(BinaryOp.MulI64, leftExpr, rightExpr); break; } case TypeKind.F32: { - expr = this.module.createBinary(BinaryOp.MulF32, left, right); + expr = module.createBinary(BinaryOp.MulF32, leftExpr, rightExpr); break; } case TypeKind.F64: { - expr = this.module.createBinary(BinaryOp.MulF64, left, right); + expr = module.createBinary(BinaryOp.MulF64, leftExpr, rightExpr); break; } default: { + assert(false); this.error( DiagnosticCode.Operation_not_supported, expression.range ); - throw new Error("concrete type expected"); + expr = module.createUnreachable(); + break; } } break; } case Token.SLASH_EQUALS: compound = true; case Token.SLASH: { - left = this.compileExpressionRetainType( - expression.left, + leftExpr = this.compileExpressionRetainType( + left, contextualType, true // TODO: when can division remain unwrapped? does it overflow? ); if (compound) { - right = this.compileExpression( - expression.right, + rightExpr = this.compileExpression( + right, this.currentType, ConversionKind.IMPLICIT, false // ^ ); } else { leftType = this.currentType; - right = this.compileExpressionRetainType( - expression.right, + rightExpr = this.compileExpressionRetainType( + right, leftType, false // ^ ); rightType = this.currentType; if (commonType = Type.commonCompatible(leftType, rightType, false)) { - left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); - right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left); + rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right); } else { this.error( DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, expression.range, "/", leftType.toString(), rightType.toString() ); this.currentType = contextualType; - return this.module.createUnreachable(); + return module.createUnreachable(); } } switch (this.currentType.kind) { case TypeKind.I8: case TypeKind.I16: possiblyOverflows = true; case TypeKind.I32: { - expr = this.module.createBinary(BinaryOp.DivI32, left, right); + expr = module.createBinary(BinaryOp.DivI32, leftExpr, rightExpr); break; } case TypeKind.ISIZE: { - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.DivI64 : BinaryOp.DivI32, - left, - right + leftExpr, + rightExpr ); break; } case TypeKind.I64: { - expr = this.module.createBinary(BinaryOp.DivI64, left, right); + expr = module.createBinary(BinaryOp.DivI64, leftExpr, rightExpr); break; } case TypeKind.U8: case TypeKind.U16: case TypeKind.BOOL: possiblyOverflows = true; case TypeKind.U32: { - expr = this.module.createBinary(BinaryOp.DivU32, left, right); + expr = module.createBinary(BinaryOp.DivU32, leftExpr, rightExpr); break; } case TypeKind.USIZE: { // TODO: check operator overload - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.DivU64 : BinaryOp.DivU32, - left, - right + leftExpr, + rightExpr ); break; } case TypeKind.U64: { - expr = this.module.createBinary(BinaryOp.DivU64, left, right); + expr = module.createBinary(BinaryOp.DivU64, leftExpr, rightExpr); break; } case TypeKind.F32: { - expr = this.module.createBinary(BinaryOp.DivF32, left, right); + expr = module.createBinary(BinaryOp.DivF32, leftExpr, rightExpr); break; } case TypeKind.F64: { - expr = this.module.createBinary(BinaryOp.DivF64, left, right); + expr = module.createBinary(BinaryOp.DivF64, leftExpr, rightExpr); break; } default: { + assert(false); this.error( DiagnosticCode.Operation_not_supported, expression.range ); - throw new Error("concrete type expected"); + expr = module.createUnreachable(); + break; } } break; } case Token.PERCENT_EQUALS: compound = true; case Token.PERCENT: { - left = this.compileExpressionRetainType( - expression.left, + leftExpr = this.compileExpressionRetainType( + left, contextualType, true // TODO: when can remainder remain unwrapped? does it overflow? ); if (compound) { - right = this.compileExpression( - expression.right, + rightExpr = this.compileExpression( + right, this.currentType, ConversionKind.IMPLICIT, false // ^ ); } else { leftType = this.currentType; - right = this.compileExpressionRetainType( - expression.right, + rightExpr = this.compileExpressionRetainType( + right, leftType, false // ^ ); rightType = this.currentType; if (commonType = Type.commonCompatible(leftType, rightType, false)) { - left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); - right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left); + rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right); } else { this.error( DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, expression.range, "%", leftType.toString(), rightType.toString() ); this.currentType = contextualType; - return this.module.createUnreachable(); + return module.createUnreachable(); } } switch (this.currentType.kind) { case TypeKind.I8: case TypeKind.I16: case TypeKind.I32: { - expr = this.module.createBinary(BinaryOp.RemI32, left, right); + expr = module.createBinary(BinaryOp.RemI32, leftExpr, rightExpr); break; } case TypeKind.ISIZE: { - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.RemI64 : BinaryOp.RemI32, - left, - right + leftExpr, + rightExpr ); break; } case TypeKind.I64: { - expr = this.module.createBinary(BinaryOp.RemI64, left, right); + expr = module.createBinary(BinaryOp.RemI64, leftExpr, rightExpr); break; } case TypeKind.U8: case TypeKind.U16: case TypeKind.U32: case TypeKind.BOOL: { - expr = this.module.createBinary(BinaryOp.RemU32, left, right); + expr = module.createBinary(BinaryOp.RemU32, leftExpr, rightExpr); break; } case TypeKind.USIZE: { // TODO: check operator overload - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.RemU64 : BinaryOp.RemU32, - left, - right + leftExpr, + rightExpr ); break; } case TypeKind.U64: { - expr = this.module.createBinary(BinaryOp.RemU64, left, right); + expr = module.createBinary(BinaryOp.RemU64, leftExpr, rightExpr); break; } case TypeKind.F32: @@ -3001,28 +3125,30 @@ export class Compiler extends DiagnosticEmitter { DiagnosticCode.Operation_not_supported, expression.range ); - expr = this.module.createUnreachable(); + expr = module.createUnreachable(); break; } default: { + assert(false); this.error( DiagnosticCode.Operation_not_supported, expression.range ); - throw new Error("concrete type expected"); + expr = module.createUnreachable(); + break; } } break; } case Token.LESSTHAN_LESSTHAN_EQUALS: compound = true; case Token.LESSTHAN_LESSTHAN: { - left = this.compileExpressionRetainType( - expression.left, + leftExpr = this.compileExpressionRetainType( + left, contextualType, false // retains low bits of small integers ); - right = this.compileExpression( - expression.right, + rightExpr = this.compileExpression( + right, this.currentType, ConversionKind.IMPLICIT, false // ^ @@ -3034,22 +3160,22 @@ export class Compiler extends DiagnosticEmitter { case TypeKind.U16: case TypeKind.BOOL: possiblyOverflows = true; default: { - expr = this.module.createBinary(BinaryOp.ShlI32, left, right); + expr = module.createBinary(BinaryOp.ShlI32, leftExpr, rightExpr); break; } case TypeKind.I64: case TypeKind.U64: { - expr = this.module.createBinary(BinaryOp.ShlI64, left, right); + expr = module.createBinary(BinaryOp.ShlI64, leftExpr, rightExpr); break; } case TypeKind.USIZE: // TODO: check operator overload case TypeKind.ISIZE: { - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.ShlI64 : BinaryOp.ShlI32, - left, - right + leftExpr, + rightExpr ); break; } @@ -3059,27 +3185,29 @@ export class Compiler extends DiagnosticEmitter { DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, expression.range, Token.operatorToString(expression.operator), this.currentType.toString() ); - return this.module.createUnreachable(); + return module.createUnreachable(); } case TypeKind.VOID: { + assert(false); this.error( DiagnosticCode.Operation_not_supported, expression.range ); - throw new Error("concrete type expected"); + expr = module.createUnreachable(); + break; } } break; } case Token.GREATERTHAN_GREATERTHAN_EQUALS: compound = true; case Token.GREATERTHAN_GREATERTHAN: { - left = this.compileExpressionRetainType( - expression.left, + leftExpr = this.compileExpressionRetainType( + left, contextualType, true // must wrap small integers ); - right = this.compileExpression( - expression.right, + rightExpr = this.compileExpression( + right, this.currentType, ConversionKind.IMPLICIT, true // ^ @@ -3087,20 +3215,20 @@ export class Compiler extends DiagnosticEmitter { switch (this.currentType.kind) { default: { // assumes signed shr on signed small integers does not overflow - expr = this.module.createBinary(BinaryOp.ShrI32, left, right); + expr = module.createBinary(BinaryOp.ShrI32, leftExpr, rightExpr); break; } case TypeKind.I64: { - expr = this.module.createBinary(BinaryOp.ShrI64, left, right); + expr = module.createBinary(BinaryOp.ShrI64, leftExpr, rightExpr); break; } case TypeKind.ISIZE: { - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.ShrI64 : BinaryOp.ShrI32, - left, - right + leftExpr, + rightExpr ); break; } @@ -3108,20 +3236,20 @@ export class Compiler extends DiagnosticEmitter { case TypeKind.U16: case TypeKind.BOOL: // assumes unsigned shr on unsigned small integers does not overflow case TypeKind.U32: { - expr = this.module.createBinary(BinaryOp.ShrU32, left, right); + expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr); break; } case TypeKind.U64: { - expr = this.module.createBinary(BinaryOp.ShrU64, left, right); + expr = module.createBinary(BinaryOp.ShrU64, leftExpr, rightExpr); break; } case TypeKind.USIZE: { // TODO: check operator overload - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.ShrU64 : BinaryOp.ShrU32, - left, - right + leftExpr, + rightExpr ); break; } @@ -3131,27 +3259,29 @@ export class Compiler extends DiagnosticEmitter { DiagnosticCode.The_0_operator_cannot_be_applied_to_type_1, expression.range, Token.operatorToString(expression.operator), this.currentType.toString() ); - return this.module.createUnreachable(); + return module.createUnreachable(); } case TypeKind.VOID: { + assert(false); this.error( DiagnosticCode.Operation_not_supported, expression.range ); - throw new Error("concrete type expected"); + expr = module.createUnreachable(); + break; } } break; } case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN_EQUALS: compound = true; case Token.GREATERTHAN_GREATERTHAN_GREATERTHAN: { - left = this.compileExpressionRetainType( - expression.left, + leftExpr = this.compileExpressionRetainType( + left, contextualType, true // modifies low bits of small integers if unsigned ); - right = this.compileExpression( - expression.right, + rightExpr = this.compileExpression( + right, this.currentType, ConversionKind.IMPLICIT, true // ^ @@ -3161,67 +3291,69 @@ export class Compiler extends DiagnosticEmitter { case TypeKind.I16: possiblyOverflows = true; default: { // assumes that unsigned shr on unsigned small integers does not overflow - expr = this.module.createBinary(BinaryOp.ShrU32, left, right); + expr = module.createBinary(BinaryOp.ShrU32, leftExpr, rightExpr); break; } case TypeKind.I64: case TypeKind.U64: { - expr = this.module.createBinary(BinaryOp.ShrU64, left, right); + expr = module.createBinary(BinaryOp.ShrU64, leftExpr, rightExpr); break; } case TypeKind.USIZE: // TODO: check operator overload case TypeKind.ISIZE: { - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.ShrU64 : BinaryOp.ShrU32, - left, - right + leftExpr, + rightExpr ); break; } case TypeKind.VOID: { + assert(false); this.error( DiagnosticCode.Operation_not_supported, expression.range ); - throw new Error("concrete type expected"); + expr = module.createUnreachable(); + break; } } break; } case Token.AMPERSAND_EQUALS: compound = true; case Token.AMPERSAND: { - left = this.compileExpressionRetainType( - expression.left, + leftExpr = this.compileExpressionRetainType( + left, contextualType, false // retains low bits of small integers ); if (compound) { - right = this.compileExpression( - expression.right, + rightExpr = this.compileExpression( + right, this.currentType, ConversionKind.IMPLICIT, false // ^ ); } else { leftType = this.currentType; - right = this.compileExpressionRetainType( - expression.right, + rightExpr = this.compileExpressionRetainType( + right, leftType, false // ^ ); rightType = this.currentType; if (commonType = Type.commonCompatible(leftType, rightType, false)) { - left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); - right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left); + rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right); } else { this.error( DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, expression.range, "&", leftType.toString(), rightType.toString() ); this.currentType = contextualType; - return this.module.createUnreachable(); + return module.createUnreachable(); } } switch (this.currentType.kind) { @@ -3231,67 +3363,69 @@ export class Compiler extends DiagnosticEmitter { case TypeKind.U16: case TypeKind.BOOL: possiblyOverflows = true; // if left or right already did default: { - expr = this.module.createBinary(BinaryOp.AndI32, left, right); + expr = module.createBinary(BinaryOp.AndI32, leftExpr, rightExpr); break; } case TypeKind.I64: case TypeKind.U64: { - expr = this.module.createBinary(BinaryOp.AndI64, left, right); + expr = module.createBinary(BinaryOp.AndI64, leftExpr, rightExpr); break; } case TypeKind.USIZE: // TODO: check operator overload case TypeKind.ISIZE: { - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.AndI64 : BinaryOp.AndI32, - left, - right + leftExpr, + rightExpr ); break; } case TypeKind.VOID: { + assert(false); this.error( DiagnosticCode.Operation_not_supported, expression.range ); - throw new Error("concrete type expected"); + expr = module.createUnreachable(); + break; } } break; } case Token.BAR_EQUALS: compound = true; case Token.BAR: { - left = this.compileExpressionRetainType( - expression.left, + leftExpr = this.compileExpressionRetainType( + left, contextualType, false // retains low bits of small integers ); if (compound) { - right = this.compileExpression( - expression.right, + rightExpr = this.compileExpression( + right, this.currentType, ConversionKind.IMPLICIT, false // ^ ); } else { leftType = this.currentType; - right = this.compileExpressionRetainType( - expression.right, + rightExpr = this.compileExpressionRetainType( + right, leftType, false // ^ ); rightType = this.currentType; if (commonType = Type.commonCompatible(leftType, rightType, false)) { - left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); - right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left); + rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right); } else { this.error( DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, expression.range, "|", leftType.toString(), rightType.toString() ); this.currentType = contextualType; - return this.module.createUnreachable(); + return module.createUnreachable(); } } switch (this.currentType.kind) { @@ -3301,67 +3435,69 @@ export class Compiler extends DiagnosticEmitter { case TypeKind.U16: case TypeKind.BOOL: possiblyOverflows = true; // if left or right already did default: { - expr = this.module.createBinary(BinaryOp.OrI32, left, right); + expr = module.createBinary(BinaryOp.OrI32, leftExpr, rightExpr); break; } case TypeKind.I64: case TypeKind.U64: { - expr = this.module.createBinary(BinaryOp.OrI64, left, right); + expr = module.createBinary(BinaryOp.OrI64, leftExpr, rightExpr); break; } case TypeKind.USIZE: // TODO: check operator overload case TypeKind.ISIZE: { - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.OrI64 : BinaryOp.OrI32, - left, - right + leftExpr, + rightExpr ); break; } case TypeKind.VOID: { + assert(false); this.error( DiagnosticCode.Operation_not_supported, expression.range ); - throw new Error("concrete type expected"); + expr = module.createUnreachable(); + break; } } break; } case Token.CARET_EQUALS: compound = true; case Token.CARET: { - left = this.compileExpressionRetainType( - expression.left, + leftExpr = this.compileExpressionRetainType( + left, contextualType, false // retains low bits of small integers ); if (compound) { - right = this.compileExpression( - expression.right, + rightExpr = this.compileExpression( + right, this.currentType, ConversionKind.IMPLICIT, false // ^ ); } else { leftType = this.currentType; - right = this.compileExpressionRetainType( - expression.right, + rightExpr = this.compileExpressionRetainType( + right, leftType, false // ^ ); rightType = this.currentType; if (commonType = Type.commonCompatible(leftType, rightType, false)) { - left = this.convertExpression(left, leftType, commonType, ConversionKind.IMPLICIT, expression.left); - right = this.convertExpression(right, rightType, commonType, ConversionKind.IMPLICIT, expression.right); + leftExpr = this.convertExpression(leftExpr, leftType, commonType, ConversionKind.IMPLICIT, left); + rightExpr = this.convertExpression(rightExpr, rightType, commonType, ConversionKind.IMPLICIT, right); } else { this.error( DiagnosticCode.Operator_0_cannot_be_applied_to_types_1_and_2, expression.range, "^", leftType.toString(), rightType.toString() ); this.currentType = contextualType; - return this.module.createUnreachable(); + return module.createUnreachable(); } } switch (this.currentType.kind) { @@ -3371,31 +3507,33 @@ export class Compiler extends DiagnosticEmitter { case TypeKind.U16: case TypeKind.BOOL: possiblyOverflows = true; // if left or right already did default: { - expr = this.module.createBinary(BinaryOp.XorI32, left, right); + expr = module.createBinary(BinaryOp.XorI32, leftExpr, rightExpr); break; } case TypeKind.I64: case TypeKind.U64: { - expr = this.module.createBinary(BinaryOp.XorI64, left, right); + expr = module.createBinary(BinaryOp.XorI64, leftExpr, rightExpr); break; } case TypeKind.USIZE: // TODO: check operator overload case TypeKind.ISIZE: { - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.XorI64 : BinaryOp.XorI32, - left, - right + leftExpr, + rightExpr ); break; } case TypeKind.VOID: { + assert(false); this.error( DiagnosticCode.Operation_not_supported, expression.range ); - throw new Error("concrete type expected"); + expr = module.createUnreachable(); + break; } } break; @@ -3404,45 +3542,45 @@ export class Compiler extends DiagnosticEmitter { // logical (no overloading) case Token.AMPERSAND_AMPERSAND: { // left && right - left = this.compileExpressionRetainType( - expression.left, + leftExpr = this.compileExpressionRetainType( + left, contextualType ); - right = this.compileExpression( - expression.right, + rightExpr = this.compileExpression( + right, this.currentType, ConversionKind.IMPLICIT, false ); // clone left if free of side effects - expr = this.module.cloneExpression(left, true, 0); + expr = module.cloneExpression(leftExpr, true, 0); // if not possible, tee left to a temp. local if (!expr) { tempLocal = this.currentFunction.getAndFreeTempLocal(this.currentType); - left = this.module.createTeeLocal(tempLocal.index, left); + leftExpr = module.createTeeLocal(tempLocal.index, leftExpr); } possiblyOverflows = this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER); - condition = makeIsTrueish(left, this.currentType, this.module); + condExpr = makeIsTrueish(leftExpr, this.currentType, module); // simplify when cloning left without side effects was successful if (expr) { - expr = this.module.createIf( - condition, // left - right, // ? right + expr = module.createIf( + condExpr, // left + rightExpr, // ? right expr // : cloned left ); } // otherwise make use of the temp. local else { - expr = this.module.createIf( - condition, - right, - this.module.createGetLocal( - assert(tempLocal, "tempLocal must be set").index, + expr = module.createIf( + condExpr, + rightExpr, + module.createGetLocal( + assert(tempLocal).index, // to be sure this.currentType.toNativeType() ) ); @@ -3450,70 +3588,73 @@ export class Compiler extends DiagnosticEmitter { break; } case Token.BAR_BAR: { // left || right - left = this.compileExpressionRetainType( - expression.left, + leftExpr = this.compileExpressionRetainType( + left, contextualType ); - right = this.compileExpression( - expression.right, + rightExpr = this.compileExpression( + right, this.currentType, ConversionKind.IMPLICIT, false ); // clone left if free of side effects - expr = this.module.cloneExpression(left, true, 0); + expr = this.module.cloneExpression(leftExpr, true, 0); // if not possible, tee left to a temp. local if (!expr) { tempLocal = this.currentFunction.getAndFreeTempLocal(this.currentType); - left = this.module.createTeeLocal(tempLocal.index, left); + leftExpr = module.createTeeLocal(tempLocal.index, leftExpr); } possiblyOverflows = this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER); // if right did - condition = makeIsTrueish(left, this.currentType, this.module); + condExpr = makeIsTrueish(leftExpr, this.currentType, module); // simplify when cloning left without side effects was successful if (expr) { expr = this.module.createIf( - condition, // left + condExpr, // left expr, // ? cloned left - right // : right + rightExpr // : right ); } // otherwise make use of the temp. local else { - expr = this.module.createIf( - condition, - this.module.createGetLocal( - assert(tempLocal, "tempLocal must be set").index, + expr = module.createIf( + condExpr, + module.createGetLocal( + assert(tempLocal).index, // to be sure this.currentType.toNativeType() ), - right + rightExpr ); } break; } default: { + assert(false); this.error( DiagnosticCode.Operation_not_supported, expression.range ); - throw new Error("not implemented"); + expr = this.module.createUnreachable(); + break; } } if (possiblyOverflows && wrapSmallIntegers) { - assert(this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER), "small integer type expected"); - expr = makeSmallIntegerWrap(expr, this.currentType, this.module); + assert(this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER)); // must be a small int + expr = makeSmallIntegerWrap(expr, this.currentType, module); } return compound - ? this.compileAssignmentWithValue(expression.left, expr, contextualType != Type.void) + ? this.compileAssignmentWithValue(left, expr, contextualType != Type.void) : expr; } compileAssignment(expression: Expression, valueExpression: Expression, contextualType: Type): ExpressionRef { - var resolved = this.program.resolveExpression(expression, this.currentFunction); // reports + var currentFunction = this.currentFunction; + var resolved = this.program.resolveExpression(expression, currentFunction); // reports if (!resolved) return this.module.createUnreachable(); // to compile just the value, we need to know the target's type @@ -3537,9 +3678,8 @@ export class Compiler extends DiagnosticEmitter { if (prototype) { let instance = prototype.resolve(); // reports if (!instance) return this.module.createUnreachable(); - let signature = instance.signature; - assert(signature.parameterTypes.length == 1); - elementType = signature.parameterTypes[0]; + assert(instance.signature.parameterTypes.length == 1); + elementType = instance.signature.parameterTypes[0]; break; } this.error( @@ -3591,8 +3731,9 @@ export class Compiler extends DiagnosticEmitter { valueWithCorrectType: ExpressionRef, tee: bool = false ): ExpressionRef { + var module = this.module; var resolved = this.program.resolveExpression(expression, this.currentFunction); // reports - if (!resolved) return this.module.createUnreachable(); + if (!resolved) return module.createUnreachable(); var element = resolved.element; switch (element.kind) { @@ -3603,32 +3744,34 @@ export class Compiler extends DiagnosticEmitter { DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property, expression.range, (element).internalName ); - return this.module.createUnreachable(); + return module.createUnreachable(); } return tee - ? this.module.createTeeLocal((element).index, valueWithCorrectType) - : this.module.createSetLocal((element).index, valueWithCorrectType); + ? module.createTeeLocal((element).index, valueWithCorrectType) + : module.createSetLocal((element).index, valueWithCorrectType); } case ElementKind.GLOBAL: { - if (!this.compileGlobal(element)) return this.module.createUnreachable(); - assert((element).type != Type.void, "concrete type expected"); - this.currentType = tee ? (element).type : Type.void; + if (!this.compileGlobal(element)) return module.createUnreachable(); + let type = (element).type; + assert(type != Type.void); + this.currentType = tee ? type : Type.void; if ((element).is(ElementFlags.CONSTANT)) { this.error( DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property, expression.range, (element).internalName ); - return this.module.createUnreachable(); + return module.createUnreachable(); } if (tee) { - let nativeType = (element).type.toNativeType(); - return this.module.createBlock(null, [ // emulated teeGlobal - this.module.createSetGlobal((element).internalName, valueWithCorrectType), - this.module.createGetGlobal((element).internalName, nativeType) + let nativeType = type.toNativeType(); + let internalName = (element).internalName; + return module.createBlock(null, [ // emulated teeGlobal + module.createSetGlobal(internalName, valueWithCorrectType), + module.createGetGlobal(internalName, nativeType) ], nativeType); } else { - return this.module.createSetGlobal((element).internalName, valueWithCorrectType); + return module.createSetGlobal((element).internalName, valueWithCorrectType); } } case ElementKind.FIELD: { @@ -3637,32 +3780,34 @@ export class Compiler extends DiagnosticEmitter { DiagnosticCode.Cannot_assign_to_0_because_it_is_a_constant_or_a_read_only_property, expression.range, (element).internalName ); - return this.module.createUnreachable(); + return module.createUnreachable(); } assert(resolved.isInstanceTarget); let targetExpr = this.compileExpression( resolved.targetExpression, (resolved.target).type ); - this.currentType = tee ? (element).type : Type.void; - let nativeType = (element).type.toNativeType(); + let type = (element).type; + this.currentType = tee ? type : Type.void; + let nativeType = type.toNativeType(); if (tee) { - let tempLocal = this.currentFunction.getAndFreeTempLocal((element).type); + let tempLocal = this.currentFunction.getAndFreeTempLocal(type); + let tempLocalIndex = tempLocal.index; // TODO: simplify if valueWithCorrectType has no side effects - return this.module.createBlock(null, [ - this.module.createSetLocal(tempLocal.index, valueWithCorrectType), - this.module.createStore( - (element).type.size >> 3, + return module.createBlock(null, [ + module.createSetLocal(tempLocalIndex, valueWithCorrectType), + module.createStore( + type.size >> 3, targetExpr, - this.module.createGetLocal(tempLocal.index, nativeType), + module.createGetLocal(tempLocalIndex, nativeType), nativeType, (element).memoryOffset ), - this.module.createGetLocal(tempLocal.index, nativeType) + module.createGetLocal(tempLocalIndex, nativeType) ], nativeType); } else { - return this.module.createStore( - (element).type.size >> 3, + return module.createStore( + type.size >> 3, targetExpr, valueWithCorrectType, nativeType, @@ -3674,7 +3819,7 @@ export class Compiler extends DiagnosticEmitter { let setterPrototype = (element).setterPrototype; if (setterPrototype) { let setterInstance = setterPrototype.resolve(); // reports - if (!setterInstance) return this.module.createUnreachable(); + if (!setterInstance) return module.createUnreachable(); // call just the setter if the return value isn't of interest if (!tee) { @@ -3694,8 +3839,9 @@ export class Compiler extends DiagnosticEmitter { let getterPrototype = (element).getterPrototype; assert(getterPrototype != null); // must have one if there is a setter let getterInstance = (getterPrototype).resolve(); // reports - if (!getterInstance) return this.module.createUnreachable(); + if (!getterInstance) return module.createUnreachable(); let returnType = getterInstance.signature.returnType; + let nativeReturnType = returnType.toNativeType(); if (setterInstance.is(ElementFlags.INSTANCE)) { assert(resolved.isInstanceTarget); let thisArg = this.compileExpression( @@ -3703,21 +3849,22 @@ export class Compiler extends DiagnosticEmitter { (resolved.target).type ); let tempLocal = this.currentFunction.getAndFreeTempLocal(returnType); - return this.module.createBlock(null, [ + let tempLocalIndex = tempLocal.index; + return module.createBlock(null, [ this.makeCallDirect(setterInstance, [ // set and remember the target - this.module.createTeeLocal(tempLocal.index, thisArg), + module.createTeeLocal(tempLocalIndex, thisArg), valueWithCorrectType ]), this.makeCallDirect(getterInstance, [ // get from remembered target - this.module.createGetLocal(tempLocal.index, returnType.toNativeType()) + module.createGetLocal(tempLocalIndex, nativeReturnType) ]) - ], returnType.toNativeType()); + ], nativeReturnType); } else { // note that this must be performed here because `resolved` is shared - return this.module.createBlock(null, [ + return module.createBlock(null, [ this.makeCallDirect(setterInstance, [ valueWithCorrectType ]), this.makeCallDirect(getterInstance) - ], returnType.toNativeType()); + ], nativeReturnType); } } else { this.error( @@ -3725,13 +3872,13 @@ export class Compiler extends DiagnosticEmitter { expression.range, (element).internalName ); } - return this.module.createUnreachable(); + return module.createUnreachable(); } case ElementKind.FUNCTION_PROTOTYPE: { // @operator("[]") ? if (expression.kind == NodeKind.ELEMENTACCESS) { assert(resolved.isInstanceTarget); let getterInstance = (element).resolve(); // reports - if (!getterInstance) return this.module.createUnreachable(); + if (!getterInstance) return module.createUnreachable(); // obtain @operator("[]=") let setElementName = (resolved.target).prototype.fnIndexedSet; let setElement: Element | null; @@ -3742,7 +3889,7 @@ export class Compiler extends DiagnosticEmitter { setElement.kind == ElementKind.FUNCTION_PROTOTYPE ) { let setterInstance = (setElement).resolve(); // reports - if (!setterInstance) return this.module.createUnreachable(); + if (!setterInstance) return module.createUnreachable(); let targetType = (resolved.target).type; let targetExpr = this.compileExpression( resolved.targetExpression, @@ -3757,15 +3904,15 @@ export class Compiler extends DiagnosticEmitter { let tempLocalElement = this.currentFunction.getAndFreeTempLocal(this.currentType); let returnType = getterInstance.signature.returnType; this.currentFunction.freeTempLocal(tempLocalTarget); - return this.module.createBlock(null, [ + return module.createBlock(null, [ this.makeCallDirect(setterInstance, [ - this.module.createTeeLocal(tempLocalTarget.index, targetExpr), - this.module.createTeeLocal(tempLocalElement.index, elementExpr), + module.createTeeLocal(tempLocalTarget.index, targetExpr), + module.createTeeLocal(tempLocalElement.index, elementExpr), valueWithCorrectType ]), this.makeCallDirect(getterInstance, [ - this.module.createGetLocal(tempLocalTarget.index, tempLocalTarget.type.toNativeType()), - this.module.createGetLocal(tempLocalElement.index, tempLocalElement.type.toNativeType()) + module.createGetLocal(tempLocalTarget.index, tempLocalTarget.type.toNativeType()), + module.createGetLocal(tempLocalElement.index, tempLocalElement.type.toNativeType()) ]) ], returnType.toNativeType()); } else { @@ -3780,7 +3927,7 @@ export class Compiler extends DiagnosticEmitter { DiagnosticCode.Index_signature_in_type_0_only_permits_reading, expression.range, (resolved.target).internalName ); - return this.module.createUnreachable(); + return module.createUnreachable(); } } // fall-through @@ -3790,12 +3937,14 @@ export class Compiler extends DiagnosticEmitter { DiagnosticCode.Operation_not_supported, expression.range ); - return this.module.createUnreachable(); + return module.createUnreachable(); } compileCallExpression(expression: CallExpression, contextualType: Type): ExpressionRef { - var resolved = this.program.resolveExpression(expression.expression, this.currentFunction); // reports - if (!resolved) return this.module.createUnreachable(); + var module = this.module; + var currentFunction = this.currentFunction; + var resolved = this.program.resolveExpression(expression.expression, currentFunction); // reports + if (!resolved) return module.createUnreachable(); var element = resolved.element; var signature: Signature | null; @@ -3813,7 +3962,7 @@ export class Compiler extends DiagnosticEmitter { prototype, prototype.resolveBuiltinTypeArguments( expression.typeArguments, - this.currentFunction.contextualTypeArguments + currentFunction.contextualTypeArguments ), expression.arguments, contextualType, @@ -3824,7 +3973,7 @@ export class Compiler extends DiagnosticEmitter { DiagnosticCode.Operation_not_supported, expression.range ); - return this.module.createUnreachable(); + return module.createUnreachable(); } return expr; @@ -3832,10 +3981,10 @@ export class Compiler extends DiagnosticEmitter { } else { let instance = prototype.resolveUsingTypeArguments( // reports expression.typeArguments, - this.currentFunction.contextualTypeArguments, + currentFunction.contextualTypeArguments, expression ); - if (!instance) return this.module.createUnreachable(); + if (!instance) return module.createUnreachable(); let thisArg: ExpressionRef = 0; if (instance.is(ElementFlags.INSTANCE)) { assert(resolved.isInstanceTarget); @@ -3843,7 +3992,7 @@ export class Compiler extends DiagnosticEmitter { resolved.targetExpression, (resolved.target).type ); - if (!thisArg) return this.module.createUnreachable(); + if (!thisArg) return module.createUnreachable(); } else { assert(!resolved.isInstanceTarget); } @@ -3854,33 +4003,33 @@ export class Compiler extends DiagnosticEmitter { // indirect call: index argument with signature case ElementKind.LOCAL: { if (signature = (element).type.functionType) { - indexArg = this.module.createGetLocal((element).index, NativeType.I32); + indexArg = module.createGetLocal((element).index, NativeType.I32); break; } else { this.error( DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures, expression.range, (element).type.toString() ); - return this.module.createUnreachable(); + return module.createUnreachable(); } } case ElementKind.GLOBAL: { if (signature = (element).type.functionType) { - indexArg = this.module.createGetGlobal((element).internalName, (element).type.toNativeType()); + indexArg = module.createGetGlobal((element).internalName, (element).type.toNativeType()); break; } else { this.error( DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures, expression.range, (element).type.toString() ); - return this.module.createUnreachable(); + return module.createUnreachable(); } } case ElementKind.FIELD: { let type = (element).type; if (signature = type.functionType) { let targetExpr = this.compileExpression(assert(resolved.targetExpression), type); - indexArg = this.module.createLoad( + indexArg = module.createLoad( 4, false, targetExpr, @@ -3893,7 +4042,7 @@ export class Compiler extends DiagnosticEmitter { DiagnosticCode.Cannot_invoke_an_expression_whose_type_lacks_a_call_signature_Type_0_has_no_compatible_call_signatures, expression.range, (element).type.toString() ); - return this.module.createUnreachable(); + return module.createUnreachable(); } } case ElementKind.FUNCTION_TARGET: { @@ -3909,7 +4058,7 @@ export class Compiler extends DiagnosticEmitter { DiagnosticCode.Operation_not_supported, expression.range ); - return this.module.createUnreachable(); + return module.createUnreachable(); } } return this.compileCallIndirect( @@ -4043,15 +4192,15 @@ export class Compiler extends DiagnosticEmitter { var operandIndex = 0; // forward `this` if applicable + var module = this.module; if (isInstance) { - forwardedOperands[0] = this.module.createGetLocal(0, this.options.nativeSizeType); + forwardedOperands[0] = module.createGetLocal(0, this.options.nativeSizeType); operandIndex = 1; } // forward required arguments for (let i = 0; i < minArguments; ++i, ++operandIndex) { - let parameterType = originalParameterTypes[i]; - forwardedOperands[operandIndex] = this.module.createGetLocal(operandIndex, parameterType.toNativeType()); + forwardedOperands[operandIndex] = module.createGetLocal(operandIndex, originalParameterTypes[i].toNativeType()); } assert(operandIndex == minOperands); @@ -4082,42 +4231,42 @@ export class Compiler extends DiagnosticEmitter { let label = "N=" + i.toString(); names[i] = label; } - var body = this.module.createBlock(names[0], [ - this.module.createBlock("N=invalid", [ - this.module.createSwitch(names, "N=invalid", - this.module.createGetLocal(maxOperands, NativeType.I32) + var body = module.createBlock(names[0], [ + module.createBlock("N=invalid", [ + module.createSwitch(names, "N=invalid", + module.createGetLocal(maxOperands, NativeType.I32) ) ]), - this.module.createUnreachable() + module.createUnreachable() ]); for (let i = 0; i < numOptional; ++i, ++operandIndex) { let type = originalParameterTypes[minArguments + i]; - body = this.module.createBlock(names[i + 1], [ + body = module.createBlock(names[i + 1], [ body, - this.module.createSetLocal(operandIndex, + module.createSetLocal(operandIndex, this.compileExpression( assert(originalParameterDeclarations[minArguments + i].initializer), type ) ) ]); - forwardedOperands[operandIndex] = this.module.createGetLocal(operandIndex, type.toNativeType()); + forwardedOperands[operandIndex] = module.createGetLocal(operandIndex, type.toNativeType()); } this.currentFunction = previousFunction; assert(operandIndex == maxOperands); var typeRef = this.ensureFunctionType(trampolineSignature); - var funcRef = this.module.addFunction(trampolineName, typeRef, typesToNativeTypes(trampoline.additionalLocals), - this.module.createBlock(null, [ + var funcRef = module.addFunction(trampolineName, typeRef, typesToNativeTypes(trampoline.additionalLocals), + module.createBlock(null, [ body, - this.module.createCall( + module.createCall( originalName, forwardedOperands, commonReturnType.toNativeType() ) ], commonReturnType.toNativeType()) ); - trampoline.finalize(this.module, funcRef); + trampoline.finalize(module, funcRef); return trampoline; } @@ -4135,25 +4284,26 @@ export class Compiler extends DiagnosticEmitter { --numArguments; } assert(numOperands >= minOperands); - if (!this.compileFunction(instance)) return this.module.createUnreachable(); + var module = this.module; + if (!this.compileFunction(instance)) return module.createUnreachable(); if (numOperands < maxOperands) { instance = this.ensureTrampoline(instance); - if (!this.compileFunction(instance)) return this.module.createUnreachable(); + if (!this.compileFunction(instance)) return module.createUnreachable(); if (!operands) { operands = new Array(maxOperands + 1); operands.length = 0; } for (let i = numArguments; i < maxArguments; ++i) { - operands.push(instance.signature.parameterTypes[i].toNativeZero(this.module)); + operands.push(instance.signature.parameterTypes[i].toNativeZero(module)); } - operands.push(this.module.createI32(numOperands - minOperands)); + operands.push(module.createI32(numOperands - minOperands)); } var returnType = instance.signature.returnType; this.currentType = returnType; if (instance.is(ElementFlags.IMPORTED)) { - return this.module.createCallImport(instance.internalName, operands, returnType.toNativeType()); + return module.createCallImport(instance.internalName, operands, returnType.toNativeType()); } else { - return this.module.createCall(instance.internalName, operands, returnType.toNativeType()); + return module.createCall(instance.internalName, operands, returnType.toNativeType()); } } @@ -4222,12 +4372,13 @@ export class Compiler extends DiagnosticEmitter { resolved.target && resolved.target.kind == ElementKind.CLASS ); + var target = resolved.target; var instance = (resolved.element).resolve( // reports null, - (resolved.target).contextualTypeArguments + target.contextualTypeArguments ); if (!instance) return this.module.createUnreachable(); - var thisArg = this.compileExpression(expression.expression, (resolved.target).type); + var thisArg = this.compileExpression(expression.expression, target.type); return this.compileCallDirect(instance, [ expression.elementExpression ], expression, thisArg); @@ -4235,28 +4386,31 @@ export class Compiler extends DiagnosticEmitter { compileFunctionExpression(expression: FunctionExpression, contextualType: Type): ExpressionRef { var declaration = expression.declaration; - var simpleName = (declaration.name.text.length - ? declaration.name.text + var name = declaration.name; + var simpleName = (name.text.length + ? name.text : "anonymous") + "|" + this.functionTable.length.toString(10); + var currentFunction = this.currentFunction; var prototype = new FunctionPrototype( this.program, simpleName, - this.currentFunction.internalName + "~" + simpleName, + currentFunction.internalName + "~" + simpleName, declaration ); var instance = this.compileFunctionUsingTypeArguments( prototype, [], - this.currentFunction.contextualTypeArguments, + currentFunction.contextualTypeArguments, declaration ); if (!instance) return this.module.createUnreachable(); - this.currentType = Type.u32.asFunction(instance.signature); + this.currentType = Type.u32.asFunction(instance.signature); // TODO: get cached type? // NOTE that, in order to make this work in every case, the function must be represented by a // value, so we add it and rely on the optimizer to figure out where it can be called directly. - var index = this.ensureFunctionTableEntry(instance); - if (index < 0) return this.module.createUnreachable(); - return this.module.createI32(index); + var index = this.ensureFunctionTableEntry(instance); // reports + return index < 0 + ? this.module.createUnreachable() + : this.module.createI32(index); } /** @@ -4269,44 +4423,48 @@ export class Compiler extends DiagnosticEmitter { contextualType: Type, retainConstantType: bool ): ExpressionRef { + var module = this.module; // check special keywords first switch (expression.kind) { case NodeKind.NULL: { + let options = this.options; if (!contextualType.classType) { - this.currentType = this.options.usizeType; + this.currentType = options.usizeType; } - return this.options.isWasm64 - ? this.module.createI64(0) - : this.module.createI32(0); + return options.isWasm64 + ? module.createI64(0) + : module.createI32(0); } case NodeKind.TRUE: { this.currentType = Type.bool; - return this.module.createI32(1); + return module.createI32(1); } case NodeKind.FALSE: { this.currentType = Type.bool; - return this.module.createI32(0); + return module.createI32(0); } case NodeKind.THIS: { - if (this.currentFunction.is(ElementFlags.INSTANCE)) { - let thisType = assert(this.currentFunction.instanceMethodOf).type; + let currentFunction = this.currentFunction; + if (currentFunction.is(ElementFlags.INSTANCE)) { + let thisType = assert(currentFunction.instanceMethodOf).type; this.currentType = thisType; - return this.module.createGetLocal(0, thisType.toNativeType()); + return module.createGetLocal(0, thisType.toNativeType()); } this.error( DiagnosticCode._this_cannot_be_referenced_in_current_location, expression.range ); this.currentType = this.options.usizeType; - return this.module.createUnreachable(); + return module.createUnreachable(); } case NodeKind.SUPER: { - if (this.currentFunction.is(ElementFlags.INSTANCE)) { - let base = assert(this.currentFunction.instanceMethodOf).base; + let currentFunction = this.currentFunction; + if (currentFunction.is(ElementFlags.INSTANCE)) { + let base = assert(currentFunction.instanceMethodOf).base; if (base) { let superType = base.type; this.currentType = superType; - return this.module.createGetLocal(0, superType.toNativeType()); + return module.createGetLocal(0, superType.toNativeType()); } } this.error( @@ -4314,7 +4472,7 @@ export class Compiler extends DiagnosticEmitter { expression.range ); this.currentType = this.options.usizeType; - return this.module.createUnreachable(); + return module.createUnreachable(); } } @@ -4324,7 +4482,7 @@ export class Compiler extends DiagnosticEmitter { this.currentFunction, this.currentEnum ); - if (!resolved) return this.module.createUnreachable(); + if (!resolved) return module.createUnreachable(); var element = resolved.element; switch (element.kind) { @@ -4332,9 +4490,11 @@ export class Compiler extends DiagnosticEmitter { if ((element).is(ElementFlags.INLINED)) { return this.compileInlineConstant(element, contextualType, retainConstantType); } - assert((element).index >= 0); - this.currentType = (element).type; - return this.module.createGetLocal((element).index, this.currentType.toNativeType()); + let localType = (element).type; + let localIndex = (element).index; + assert(localIndex >= 0); + this.currentType = localType; + return this.module.createGetLocal(localIndex, localType.toNativeType()); } case ElementKind.GLOBAL: { if (element.is(ElementFlags.BUILTIN)) { @@ -4343,12 +4503,13 @@ export class Compiler extends DiagnosticEmitter { if (!this.compileGlobal(element)) { // reports; not yet compiled if a static field return this.module.createUnreachable(); } - assert((element).type != Type.void); + let globalType = (element).type; + assert(globalType != Type.void); if ((element).is(ElementFlags.INLINED)) { return this.compileInlineConstant(element, contextualType, retainConstantType); } - this.currentType = (element).type; - return this.module.createGetGlobal((element).internalName, this.currentType.toNativeType()); + this.currentType = globalType; + return this.module.createGetGlobal((element).internalName, globalType.toNativeType()); } case ElementKind.ENUMVALUE: { // here: if referenced from within the same enum if (!element.is(ElementFlags.COMPILED)) { @@ -4378,6 +4539,8 @@ export class Compiler extends DiagnosticEmitter { contextualType: Type, implicitNegate: bool = false ): ExpressionRef { + var module = this.module; + switch (expression.literalKind) { case LiteralKind.ARRAY: { assert(!implicitNegate); @@ -4389,14 +4552,15 @@ export class Compiler extends DiagnosticEmitter { ) { return this.compileStaticArray( classType.typeArguments[0], - (expression).elementExpressions + (expression).elementExpressions, + expression ); } this.error( DiagnosticCode.Operation_not_supported, expression.range ); - return this.module.createUnreachable(); + return module.createUnreachable(); } case LiteralKind.FLOAT: { let floatValue = (expression).value; @@ -4404,10 +4568,10 @@ export class Compiler extends DiagnosticEmitter { floatValue = -floatValue; } if (contextualType == Type.f32) { - return this.module.createF32(floatValue); + return module.createF32(floatValue); } this.currentType = Type.f64; - return this.module.createF64(floatValue); + return module.createF64(floatValue); } case LiteralKind.INTEGER: { let intValue = (expression).value; @@ -4422,57 +4586,57 @@ export class Compiler extends DiagnosticEmitter { // compile to contextualType if matching case TypeKind.I8: { - if (i64_is_i8(intValue)) return this.module.createI32(i64_low(intValue)); + if (i64_is_i8(intValue)) return module.createI32(i64_low(intValue)); break; } case TypeKind.I16: { - if (i64_is_i16(intValue)) return this.module.createI32(i64_low(intValue)); + if (i64_is_i16(intValue)) return module.createI32(i64_low(intValue)); break; } case TypeKind.I32: { - if (i64_is_i32(intValue)) return this.module.createI32(i64_low(intValue)); + if (i64_is_i32(intValue)) return module.createI32(i64_low(intValue)); break; } case TypeKind.U8: { - if (i64_is_u8(intValue)) return this.module.createI32(i64_low(intValue)); + if (i64_is_u8(intValue)) return module.createI32(i64_low(intValue)); break; } case TypeKind.U16: { - if (i64_is_u16(intValue)) return this.module.createI32(i64_low(intValue)); + if (i64_is_u16(intValue)) return module.createI32(i64_low(intValue)); break; } case TypeKind.U32: { - if (i64_is_u32(intValue)) return this.module.createI32(i64_low(intValue)); + if (i64_is_u32(intValue)) return module.createI32(i64_low(intValue)); break; } case TypeKind.BOOL: { - if (i64_is_bool(intValue)) return this.module.createI32(i64_low(intValue)); + if (i64_is_bool(intValue)) return module.createI32(i64_low(intValue)); break; } case TypeKind.ISIZE: { if (!this.options.isWasm64) { - if (i64_is_u32(intValue)) return this.module.createI32(i64_low(intValue)); + if (i64_is_u32(intValue)) return module.createI32(i64_low(intValue)); break; } - return this.module.createI64(i64_low(intValue), i64_high(intValue)); + return module.createI64(i64_low(intValue), i64_high(intValue)); } case TypeKind.USIZE: { if (!this.options.isWasm64) { - if (i64_is_u32(intValue)) return this.module.createI32(i64_low(intValue)); + if (i64_is_u32(intValue)) return module.createI32(i64_low(intValue)); break; } - return this.module.createI64(i64_low(intValue), i64_high(intValue)); + return module.createI64(i64_low(intValue), i64_high(intValue)); } case TypeKind.I64: case TypeKind.U64: { - return this.module.createI64(i64_low(intValue), i64_high(intValue)); + return module.createI64(i64_low(intValue), i64_high(intValue)); } case TypeKind.F32: { - if (i64_is_f32(intValue)) return this.module.createF32(i64_to_f32(intValue)); + if (i64_is_f32(intValue)) return module.createF32(i64_to_f32(intValue)); break; } case TypeKind.F64: { - if (i64_is_f64(intValue)) return this.module.createF64(i64_to_f64(intValue)); + if (i64_is_f64(intValue)) return module.createF64(i64_to_f64(intValue)); break; } case TypeKind.VOID: { @@ -4480,7 +4644,11 @@ export class Compiler extends DiagnosticEmitter { } default: { assert(false); - break; + this.error( + DiagnosticCode.Operation_not_supported, + expression.range + ); + return module.createUnreachable(); } } @@ -4488,10 +4656,10 @@ export class Compiler extends DiagnosticEmitter { if (i64_is_i32(intValue)) { this.currentType = Type.i32; - return this.module.createI32(i64_low(intValue)); + return module.createI32(i64_low(intValue)); } else { this.currentType = Type.i64; - return this.module.createI64(i64_low(intValue), i64_high(intValue)); + return module.createI64(i64_low(intValue), i64_high(intValue)); } } case LiteralKind.STRING: { @@ -4506,11 +4674,15 @@ export class Compiler extends DiagnosticEmitter { expression.range ); this.currentType = contextualType; - return this.module.createUnreachable(); + return module.createUnreachable(); } compileStaticString(stringValue: string): ExpressionRef { - var stringSegment: MemorySegment | null = this.stringSegments.get(stringValue); + var module = this.module; + var options = this.options; + var stringSegments = this.stringSegments; + + var stringSegment: MemorySegment | null = stringSegments.get(stringValue); if (!stringSegment) { let stringLength = stringValue.length; let stringBuffer = new Uint8Array(4 + stringLength * 2); @@ -4522,25 +4694,26 @@ export class Compiler extends DiagnosticEmitter { stringBuffer[4 + i * 2] = stringValue.charCodeAt(i) & 0xff; stringBuffer[5 + i * 2] = (stringValue.charCodeAt(i) >>> 8) & 0xff; } - stringSegment = this.addMemorySegment(stringBuffer, this.options.usizeType.byteSize); - this.stringSegments.set(stringValue, stringSegment); + stringSegment = this.addMemorySegment(stringBuffer, options.usizeType.byteSize); + stringSegments.set(stringValue, stringSegment); } var stringOffset = stringSegment.offset; var stringType = this.program.types.get("string"); - this.currentType = stringType ? stringType : this.options.usizeType; - if (this.options.isWasm64) { - return this.module.createI64(i64_low(stringOffset), i64_high(stringOffset)); + this.currentType = stringType ? stringType : options.usizeType; + if (options.isWasm64) { + return module.createI64(i64_low(stringOffset), i64_high(stringOffset)); } assert(i64_is_i32(stringOffset)); - return this.module.createI32(i64_low(stringOffset)); + return module.createI32(i64_low(stringOffset)); } - compileStaticArray(elementType: Type, expressions: (Expression | null)[]): ExpressionRef { + compileStaticArray(elementType: Type, expressions: (Expression | null)[], reportNode: Node): ExpressionRef { // compile as static if all element expressions are precomputable, otherwise // initialize in place. var isStatic = true; var size = expressions.length; + var module = this.module; var nativeType = elementType.toNativeType(); var values: usize; switch (nativeType) { @@ -4561,7 +4734,12 @@ export class Compiler extends DiagnosticEmitter { break; } default: { - throw new Error("concrete type expected"); + assert(false); + this.error( + DiagnosticCode.Operation_not_supported, + reportNode.range + ); + return module.createUnreachable(); } } @@ -4570,7 +4748,7 @@ export class Compiler extends DiagnosticEmitter { for (let i = 0; i < size; ++i) { exprs[i] = expressions[i] ? this.compileExpression(expressions[i], elementType) - : elementType.toNativeZero(this.module); + : elementType.toNativeZero(module); if (isStatic) { expr = this.precomputeExpressionRef(exprs[i]); if (_BinaryenExpressionGetId(expr) == ExpressionId.Const) { @@ -4617,9 +4795,13 @@ export class Compiler extends DiagnosticEmitter { } compileNewExpression(expression: NewExpression, contextualType: Type): ExpressionRef { + var module = this.module; + var options = this.options; + var currentFunction = this.currentFunction; + var resolved = this.program.resolveExpression( // reports expression.expression, - this.currentFunction + currentFunction ); if (resolved) { if (resolved.element.kind == ElementKind.CLASS_PROTOTYPE) { @@ -4634,8 +4816,8 @@ export class Compiler extends DiagnosticEmitter { let initializers = new Array(); // use a temp local for 'this' - let tempLocal = this.currentFunction.getTempLocal(this.options.usizeType); - initializers.push(this.module.createSetLocal(tempLocal.index, thisExpr)); + let tempLocal = currentFunction.getTempLocal(options.usizeType); + initializers.push(module.createSetLocal(tempLocal.index, thisExpr)); // apply field initializers if (instance.members) { @@ -4646,8 +4828,8 @@ export class Compiler extends DiagnosticEmitter { if (field.is(ElementFlags.CONSTANT)) { assert(false); // there are no built-in fields currently } else if (fieldDeclaration && fieldDeclaration.initializer) { - initializers.push(this.module.createStore(field.type.byteSize, - this.module.createGetLocal(tempLocal.index, this.options.nativeSizeType), + initializers.push(module.createStore(field.type.byteSize, + module.createGetLocal(tempLocal.index, options.nativeSizeType), this.compileExpression(fieldDeclaration.initializer, field.type), field.type.toNativeType(), field.memoryOffset @@ -4661,14 +4843,14 @@ export class Compiler extends DiagnosticEmitter { let constructorInstance = instance.constructorInstance; if (constructorInstance) { initializers.push(this.compileCallDirect(constructorInstance, expression.arguments, expression, - this.module.createGetLocal(tempLocal.index, this.options.nativeSizeType) + module.createGetLocal(tempLocal.index, options.nativeSizeType) )); } // return 'this' - initializers.push(this.module.createGetLocal(tempLocal.index, this.options.nativeSizeType)); - this.currentFunction.freeTempLocal(tempLocal); - thisExpr = this.module.createBlock(null, initializers, this.options.nativeSizeType); + initializers.push(module.createGetLocal(tempLocal.index, options.nativeSizeType)); + currentFunction.freeTempLocal(tempLocal); + thisExpr = module.createBlock(null, initializers, options.nativeSizeType); this.currentType = instance.type; return thisExpr; @@ -4680,7 +4862,7 @@ export class Compiler extends DiagnosticEmitter { ); } } - return this.module.createUnreachable(); + return module.createUnreachable(); } compileParenthesizedExpression( @@ -4707,8 +4889,11 @@ export class Compiler extends DiagnosticEmitter { contextualType: Type, retainConstantType: bool ): ExpressionRef { - var resolved = this.program.resolvePropertyAccess(propertyAccess, this.currentFunction); // reports - if (!resolved) return this.module.createUnreachable(); + var program = this.program; + var module = this.module; + + var resolved = program.resolvePropertyAccess(propertyAccess, this.currentFunction); // reports + if (!resolved) return module.createUnreachable(); var element = resolved.element; var targetExpr: ExpressionRef; @@ -4718,14 +4903,15 @@ export class Compiler extends DiagnosticEmitter { return compileBuiltinGetConstant(this, element, propertyAccess); } if (!this.compileGlobal(element)) { // reports; not yet compiled if a static field - return this.module.createUnreachable(); + return module.createUnreachable(); } - assert((element).type != Type.void); + let globalType = (element).type; + assert(globalType != Type.void); if ((element).is(ElementFlags.INLINED)) { return this.compileInlineConstant(element, contextualType, retainConstantType); } - this.currentType = (element).type; - return this.module.createGetGlobal((element).internalName, this.currentType.toNativeType()); + this.currentType = globalType; + return module.createGetGlobal((element).internalName, globalType.toNativeType()); } case ElementKind.ENUMVALUE: { // enum value if (!this.compileEnum((element).enum)) { @@ -4733,9 +4919,9 @@ export class Compiler extends DiagnosticEmitter { } this.currentType = Type.i32; if ((element).is(ElementFlags.INLINED)) { - return this.module.createI32((element).constantValue); + return module.createI32((element).constantValue); } - return this.module.createGetGlobal((element).internalName, NativeType.I32); + return module.createGetGlobal((element).internalName, NativeType.I32); } case ElementKind.FIELD: { // instance field assert(resolved.isInstanceTarget); @@ -4746,7 +4932,7 @@ export class Compiler extends DiagnosticEmitter { ConversionKind.NONE ); this.currentType = (element).type; - return this.module.createLoad( + return module.createLoad( (element).type.size >> 3, (element).type.is(TypeFlags.SIGNED | TypeFlags.INTEGER), targetExpr, @@ -4758,7 +4944,7 @@ export class Compiler extends DiagnosticEmitter { let prototype = (element).getterPrototype; if (prototype) { let instance = prototype.resolve(null); // reports - if (!instance) return this.module.createUnreachable(); + if (!instance) return module.createUnreachable(); let signature = instance.signature; if (!this.checkCallSignature( // reports signature, @@ -4766,7 +4952,7 @@ export class Compiler extends DiagnosticEmitter { instance.is(ElementFlags.INSTANCE), propertyAccess )) { - return this.module.createUnreachable(); + return module.createUnreachable(); } if (instance.instanceMethodOf) { targetExpr = this.compileExpression( @@ -4784,7 +4970,7 @@ export class Compiler extends DiagnosticEmitter { DiagnosticCode.Property_0_does_not_exist_on_type_1, propertyAccess.range, (element).simpleName, (element).parent.toString() ); - return this.module.createUnreachable(); + return module.createUnreachable(); } } } @@ -4792,7 +4978,7 @@ export class Compiler extends DiagnosticEmitter { DiagnosticCode.Operation_not_supported, propertyAccess.range ); - return this.module.createUnreachable(); + return module.createUnreachable(); } compileTernaryExpression(expression: TernaryExpression, contextualType: Type): ExpressionRef { @@ -4807,6 +4993,9 @@ export class Compiler extends DiagnosticEmitter { } compileUnaryPostfixExpression(expression: UnaryPostfixExpression, contextualType: Type): ExpressionRef { + var module = this.module; + var currentFunction = this.currentFunction; + // make a getter for the expression (also obtains the type) var getValue = this.compileExpression( expression.operand, @@ -4816,6 +5005,7 @@ export class Compiler extends DiagnosticEmitter { ConversionKind.NONE, false // wrapped below ); + var currentType = this.currentType; var op: BinaryOp; var nativeType: NativeType; @@ -4824,14 +5014,14 @@ export class Compiler extends DiagnosticEmitter { switch (expression.operator) { case Token.PLUS_PLUS: { - if (this.currentType.isReference) { + if (currentType.isReference) { this.error( DiagnosticCode.Operation_not_supported, expression.range ); - return this.module.createUnreachable(); + return module.createUnreachable(); } - switch (this.currentType.kind) { + switch (currentType.kind) { case TypeKind.I8: case TypeKind.I16: case TypeKind.U8: @@ -4840,58 +5030,58 @@ export class Compiler extends DiagnosticEmitter { default: { op = BinaryOp.AddI32; nativeType = NativeType.I32; - nativeOne = this.module.createI32(1); + nativeOne = module.createI32(1); break; } case TypeKind.USIZE: // TODO: check operator overload case TypeKind.ISIZE: { - op = this.options.isWasm64 + let options = this.options; + op = options.isWasm64 ? BinaryOp.AddI64 : BinaryOp.AddI32; - nativeType = this.options.isWasm64 - ? NativeType.I64 - : NativeType.I32; - nativeOne = this.currentType.toNativeOne(this.module); + nativeType = options.nativeSizeType; + nativeOne = currentType.toNativeOne(module); break; } case TypeKind.I64: case TypeKind.U64: { op = BinaryOp.AddI64; nativeType = NativeType.I64; - nativeOne = this.module.createI64(1); + nativeOne = module.createI64(1); break; } case TypeKind.F32: { op = BinaryOp.AddF32; nativeType = NativeType.F32; - nativeOne = this.module.createF32(1); + nativeOne = module.createF32(1); break; } case TypeKind.F64: { op = BinaryOp.AddF64; nativeType = NativeType.F64; - nativeOne = this.module.createF64(1); + nativeOne = module.createF64(1); break; } case TypeKind.VOID: { + assert(false); this.error( DiagnosticCode.Operation_not_supported, expression.range ); - throw new Error("concrete type expected"); + return module.createUnreachable(); } } break; } case Token.MINUS_MINUS: { - if (this.currentType.isReference) { + if (currentType.isReference) { this.error( DiagnosticCode.Operation_not_supported, expression.range ); - return this.module.createUnreachable(); + return module.createUnreachable(); } - switch (this.currentType.kind) { + switch (currentType.kind) { case TypeKind.I8: case TypeKind.I16: case TypeKind.U8: @@ -4900,55 +5090,56 @@ export class Compiler extends DiagnosticEmitter { default: { op = BinaryOp.SubI32; nativeType = NativeType.I32; - nativeOne = this.module.createI32(1); + nativeOne = module.createI32(1); break; } case TypeKind.USIZE: // TODO: check operator overload case TypeKind.ISIZE: { - op = this.options.isWasm64 + let options = this.options; + op = options.isWasm64 ? BinaryOp.SubI64 : BinaryOp.SubI32; - nativeType = this.options.isWasm64 - ? NativeType.I64 - : NativeType.I32; - nativeOne = this.currentType.toNativeOne(this.module); + nativeType = options.nativeSizeType; + nativeOne = currentType.toNativeOne(module); break; } case TypeKind.I64: case TypeKind.U64: { op = BinaryOp.SubI64; nativeType = NativeType.I64; - nativeOne = this.module.createI64(1); + nativeOne = module.createI64(1); break; } case TypeKind.F32: { op = BinaryOp.SubF32; nativeType = NativeType.F32; - nativeOne = this.module.createF32(1); + nativeOne = module.createF32(1); break; } case TypeKind.F64: { op = BinaryOp.SubF64; nativeType = NativeType.F64; - nativeOne = this.module.createF64(1); + nativeOne = module.createF64(1); break; } case TypeKind.VOID: { + assert(false); this.error( DiagnosticCode.Operation_not_supported, expression.range ); - throw new Error("concrete type expected"); + return module.createUnreachable(); } } break; } default: { + assert(false); this.error( DiagnosticCode.Operation_not_supported, expression.range ); - throw new Error("unary postfix operator expected"); + return module.createUnreachable(); } } @@ -4957,23 +5148,23 @@ export class Compiler extends DiagnosticEmitter { // simplify if dropped anyway if (contextualType == Type.void) { - setValue = this.module.createBinary(op, + setValue = module.createBinary(op, getValue, nativeOne ); // otherwise use a temp local for the intermediate value } else { - tempLocal = this.currentFunction.getTempLocal(this.currentType); - setValue = this.module.createBinary(op, + tempLocal = currentFunction.getTempLocal(currentType); + setValue = module.createBinary(op, this.module.createGetLocal(tempLocal.index, nativeType), nativeOne ); } if (possiblyOverflows) { - assert(this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER)); - setValue = makeSmallIntegerWrap(setValue, this.currentType, this.module); + assert(currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER)); + setValue = makeSmallIntegerWrap(setValue, currentType, module); } setValue = this.compileAssignmentWithValue(expression.operand, setValue, false); @@ -4984,11 +5175,12 @@ export class Compiler extends DiagnosticEmitter { } this.currentType = assert(tempLocal).type; - this.currentFunction.freeTempLocal(tempLocal); - return this.module.createBlock(null, [ - this.module.createSetLocal((tempLocal).index, getValue), + currentFunction.freeTempLocal(tempLocal); + var localIndex = (tempLocal).index; + return module.createBlock(null, [ + module.createSetLocal(localIndex, getValue), setValue, - this.module.createGetLocal((tempLocal).index, nativeType) + module.createGetLocal(localIndex, nativeType) ], nativeType); } @@ -4997,18 +5189,21 @@ export class Compiler extends DiagnosticEmitter { contextualType: Type, wrapSmallIntegers: bool = true ): ExpressionRef { + var module = this.module; + var currentType = this.currentType; + var possiblyOverflows = false; var compound = false; var expr: ExpressionRef; switch (expression.operator) { case Token.PLUS: { - if (this.currentType.isReference) { + if (currentType.isReference) { this.error( DiagnosticCode.Operation_not_supported, expression.range ); - return this.module.createUnreachable(); + return module.createUnreachable(); } expr = this.compileExpression( expression.operand, @@ -5018,16 +5213,17 @@ export class Compiler extends DiagnosticEmitter { ConversionKind.NONE, false // wrapped below ); - possiblyOverflows = this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER); // if operand already did + currentType = this.currentType; + possiblyOverflows = currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER); // if operand already did break; } case Token.MINUS: { - if (this.currentType.isReference) { + if (currentType.isReference) { this.error( DiagnosticCode.Operation_not_supported, expression.range ); - return this.module.createUnreachable(); + return module.createUnreachable(); } if (expression.operand.kind == NodeKind.LITERAL && ( (expression.operand).literalKind == LiteralKind.INTEGER || @@ -5035,7 +5231,11 @@ export class Compiler extends DiagnosticEmitter { )) { // implicitly negate integer and float literals. also enables proper checking of literal ranges. expr = this.compileLiteralExpression(expression.operand, contextualType, true); - this.addDebugLocation(expr, expression.range); // compileExpression normally does this + if (this.options.sourceMap) { + // compileExpression normally does this + addDebugLocation(expr, expression.range, module, this.currentFunction); + } + currentType = this.currentType; } else { expr = this.compileExpression( expression.operand, @@ -5045,47 +5245,48 @@ export class Compiler extends DiagnosticEmitter { ConversionKind.NONE, false // wrapped below ); - switch (this.currentType.kind) { + currentType = this.currentType; + switch (currentType.kind) { case TypeKind.I8: case TypeKind.I16: case TypeKind.U8: case TypeKind.U16: case TypeKind.BOOL: possiblyOverflows = true; // or if operand already did default: { - expr = this.module.createBinary(BinaryOp.SubI32, this.module.createI32(0), expr); + expr = module.createBinary(BinaryOp.SubI32, module.createI32(0), expr); break; } case TypeKind.USIZE: { - if (this.currentType.isReference) { + if (currentType.isReference) { this.error( DiagnosticCode.Operation_not_supported, expression.range ); - return this.module.createUnreachable(); + return module.createUnreachable(); } // fall-through } case TypeKind.ISIZE: { - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.SubI64 : BinaryOp.SubI32, - this.currentType.toNativeZero(this.module), + currentType.toNativeZero(module), expr ); break; } case TypeKind.I64: case TypeKind.U64: { - expr = this.module.createBinary(BinaryOp.SubI64, this.module.createI64(0), expr); + expr = module.createBinary(BinaryOp.SubI64, module.createI64(0), expr); break; } case TypeKind.F32: { - expr = this.module.createUnary(UnaryOp.NegF32, expr); + expr = module.createUnary(UnaryOp.NegF32, expr); break; } case TypeKind.F64: { - expr = this.module.createUnary(UnaryOp.NegF64, expr); + expr = module.createUnary(UnaryOp.NegF64, expr); break; } } @@ -5093,12 +5294,12 @@ export class Compiler extends DiagnosticEmitter { break; } case Token.PLUS_PLUS: { - if (this.currentType.isReference) { + if (currentType.isReference) { this.error( DiagnosticCode.Operation_not_supported, expression.range ); - return this.module.createUnreachable(); + return module.createUnreachable(); } compound = true; expr = this.compileExpression( @@ -5109,59 +5310,60 @@ export class Compiler extends DiagnosticEmitter { ConversionKind.NONE, false // wrapped below ); - switch (this.currentType.kind) { + currentType = this.currentType; + switch (currentType.kind) { case TypeKind.I8: case TypeKind.I16: case TypeKind.U8: case TypeKind.U16: case TypeKind.BOOL: possiblyOverflows = true; // or if operand already did default: { - expr = this.module.createBinary(BinaryOp.AddI32, expr, this.module.createI32(1)); + expr = module.createBinary(BinaryOp.AddI32, expr, this.module.createI32(1)); break; } case TypeKind.USIZE: { - if (this.currentType.isReference) { + if (currentType.isReference) { this.error( DiagnosticCode.Operation_not_supported, expression.range ); - return this.module.createUnreachable(); + return module.createUnreachable(); } // fall-through } case TypeKind.ISIZE: { - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.AddI64 : BinaryOp.AddI32, expr, - this.currentType.toNativeOne(this.module) + currentType.toNativeOne(module) ); break; } case TypeKind.I64: case TypeKind.U64: { - expr = this.module.createBinary(BinaryOp.AddI64, expr, this.module.createI64(1)); + expr = module.createBinary(BinaryOp.AddI64, expr, module.createI64(1)); break; } case TypeKind.F32: { - expr = this.module.createBinary(BinaryOp.AddF32, expr, this.module.createF32(1)); + expr = module.createBinary(BinaryOp.AddF32, expr, module.createF32(1)); break; } case TypeKind.F64: { - expr = this.module.createBinary(BinaryOp.AddF64, expr, this.module.createF64(1)); + expr = module.createBinary(BinaryOp.AddF64, expr, module.createF64(1)); break; } } break; } case Token.MINUS_MINUS: { - if (this.currentType.isReference) { + if (currentType.isReference) { this.error( DiagnosticCode.Operation_not_supported, expression.range ); - return this.module.createUnreachable(); + return module.createUnreachable(); } compound = true; expr = this.compileExpression( @@ -5172,47 +5374,48 @@ export class Compiler extends DiagnosticEmitter { ConversionKind.NONE, false // wrapped below ); - switch (this.currentType.kind) { + currentType = this.currentType; + switch (currentType.kind) { case TypeKind.I8: case TypeKind.I16: case TypeKind.U8: case TypeKind.U16: case TypeKind.BOOL: possiblyOverflows = true; // or if operand already did default: { - expr = this.module.createBinary(BinaryOp.SubI32, expr, this.module.createI32(1)); + expr = module.createBinary(BinaryOp.SubI32, expr, module.createI32(1)); break; } case TypeKind.USIZE: { - if (this.currentType.isReference) { + if (currentType.isReference) { this.error( DiagnosticCode.Operation_not_supported, expression.range ); - return this.module.createUnreachable(); + return module.createUnreachable(); } // fall-through } case TypeKind.ISIZE: { - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.SubI64 : BinaryOp.SubI32, expr, - this.currentType.toNativeOne(this.module) + currentType.toNativeOne(module) ); break; } case TypeKind.I64: case TypeKind.U64: { - expr = this.module.createBinary(BinaryOp.SubI64, expr, this.module.createI64(1)); + expr = module.createBinary(BinaryOp.SubI64, expr, module.createI64(1)); break; } case TypeKind.F32: { - expr = this.module.createBinary(BinaryOp.SubF32, expr, this.module.createF32(1)); + expr = module.createBinary(BinaryOp.SubF32, expr, module.createF32(1)); break; } case TypeKind.F64: { - expr = this.module.createBinary(BinaryOp.SubF64, expr, this.module.createF64(1)); + expr = module.createBinary(BinaryOp.SubF64, expr, module.createF64(1)); break; } } @@ -5227,17 +5430,17 @@ export class Compiler extends DiagnosticEmitter { ConversionKind.NONE, true // must wrap small integers ); - expr = makeIsFalseish(expr, this.currentType, this.module); + expr = makeIsFalseish(expr, this.currentType, module); this.currentType = Type.bool; break; } case Token.TILDE: { - if (this.currentType.isReference) { + if (currentType.isReference) { this.error( DiagnosticCode.Operation_not_supported, expression.range ); - return this.module.createUnreachable(); + return module.createUnreachable(); } expr = this.compileExpression( expression.operand, @@ -5251,39 +5454,40 @@ export class Compiler extends DiagnosticEmitter { : ConversionKind.IMPLICIT, false // retains low bits of small integers ); - switch (this.currentType.kind) { + currentType = this.currentType; + switch (currentType.kind) { case TypeKind.I8: case TypeKind.I16: case TypeKind.U8: case TypeKind.U16: case TypeKind.BOOL: possiblyOverflows = true; // or if operand already did default: { - expr = this.module.createBinary(BinaryOp.XorI32, expr, this.module.createI32(-1)); + expr = module.createBinary(BinaryOp.XorI32, expr, module.createI32(-1)); break; } case TypeKind.USIZE: { - if (this.currentType.isReference) { + if (currentType.isReference) { this.error( DiagnosticCode.Operation_not_supported, expression.range ); - return this.module.createUnreachable(); + return module.createUnreachable(); } // fall-through } case TypeKind.ISIZE: { - expr = this.module.createBinary( + expr = module.createBinary( this.options.isWasm64 ? BinaryOp.XorI64 : BinaryOp.XorI32, expr, - this.currentType.toNativeNegOne(this.module) + currentType.toNativeNegOne(module) ); break; } case TypeKind.I64: case TypeKind.U64: { - expr = this.module.createBinary(BinaryOp.XorI64, expr, this.module.createI64(-1, -1)); + expr = module.createBinary(BinaryOp.XorI64, expr, module.createI64(-1, -1)); break; } } @@ -5299,149 +5503,138 @@ export class Compiler extends DiagnosticEmitter { DiagnosticCode.Operation_not_supported, expression.range ); - throw new Error("not implemented"); + return module.createUnreachable(); } default: { + assert(false); this.error( DiagnosticCode.Operation_not_supported, expression.range ); - throw new Error("unary operator expected"); + return module.createUnreachable(); } } if (possiblyOverflows && wrapSmallIntegers) { - assert(this.currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER)); - expr = makeSmallIntegerWrap(expr, this.currentType, this.module); + assert(currentType.is(TypeFlags.SMALL | TypeFlags.INTEGER)); + expr = makeSmallIntegerWrap(expr, currentType, module); } return compound ? this.compileAssignmentWithValue(expression.operand, expr, contextualType != Type.void) : expr; } - - addDebugLocation(expr: ExpressionRef, range: Range): void { - if (!this.options.sourceMap) return; - var source = range.source; - if (source.debugInfoIndex < 0) { - source.debugInfoIndex = this.module.addDebugInfoFile(source.normalizedPath); - } - range.debugInfoRef = expr; - if (!this.currentFunction.debugLocations) this.currentFunction.debugLocations = []; - this.currentFunction.debugLocations.push(range); - } } // helpers +/** Adds the debug location of the specified expression at the specified range to the source map. */ +function addDebugLocation(expr: ExpressionRef, range: Range, module: Module, currentFunction: Function): void { + var source = range.source; + if (source.debugInfoIndex < 0) { + source.debugInfoIndex = module.addDebugInfoFile(source.normalizedPath); + } + range.debugInfoRef = expr; + if (!currentFunction.debugLocations) currentFunction.debugLocations = []; + currentFunction.debugLocations.push(range); +} + /** Wraps a 32-bit integer expression so it evaluates to a valid value of the specified type. */ export function makeSmallIntegerWrap(expr: ExpressionRef, type: Type, module: Module): ExpressionRef { switch (type.kind) { case TypeKind.I8: { - expr = module.createBinary(BinaryOp.ShrI32, + return module.createBinary(BinaryOp.ShrI32, module.createBinary(BinaryOp.ShlI32, expr, module.createI32(24) ), module.createI32(24) ); - break; } case TypeKind.I16: { - expr = module.createBinary(BinaryOp.ShrI32, + return module.createBinary(BinaryOp.ShrI32, module.createBinary(BinaryOp.ShlI32, expr, module.createI32(16) ), module.createI32(16) ); - break; } case TypeKind.U8: { - expr = module.createBinary(BinaryOp.AndI32, + return module.createBinary(BinaryOp.AndI32, expr, module.createI32(0xff) ); - break; } case TypeKind.U16: { - expr = module.createBinary(BinaryOp.AndI32, + return module.createBinary(BinaryOp.AndI32, expr, module.createI32(0xffff) ); - break; } case TypeKind.BOOL: { - expr = module.createBinary(BinaryOp.AndI32, + return module.createBinary(BinaryOp.AndI32, expr, module.createI32(0x1) ); - break; } default: { - throw new Error("small integer type expected"); + assert(false); + return expr; } } - return expr; } /** Creates a comparison whether an expression is not 'true' in a broader sense. */ export function makeIsFalseish(expr: ExpressionRef, type: Type, module: Module): ExpressionRef { switch (type.kind) { - default: { // any integer up to 32 bits - expr = module.createUnary(UnaryOp.EqzI32, expr); - break; + default: { // any native i32 + return module.createUnary(UnaryOp.EqzI32, expr); } case TypeKind.I64: case TypeKind.U64: { - expr = module.createUnary(UnaryOp.EqzI64, expr); - break; + return module.createUnary(UnaryOp.EqzI64, expr); } - case TypeKind.USIZE: - // TODO: strings + case TypeKind.USIZE: // TODO: strings? case TypeKind.ISIZE: { - expr = module.createUnary(type.size == 64 ? UnaryOp.EqzI64 : UnaryOp.EqzI32, expr); - break; + return module.createUnary(type.size == 64 ? UnaryOp.EqzI64 : UnaryOp.EqzI32, expr); } case TypeKind.F32: { - expr = module.createBinary(BinaryOp.EqF32, expr, module.createF32(0)); - break; + return module.createBinary(BinaryOp.EqF32, expr, module.createF32(0)); } case TypeKind.F64: { - expr = module.createBinary(BinaryOp.EqF64, expr, module.createF64(0)); - break; + return module.createBinary(BinaryOp.EqF64, expr, module.createF64(0)); } case TypeKind.VOID: { - throw new Error("concrete type expected"); + assert(false); + return module.createI32(1); } } - return expr; } /** Creates a comparison whether an expression is 'true' in a broader sense. */ export function makeIsTrueish(expr: ExpressionRef, type: Type, module: Module): ExpressionRef { switch (type.kind) { + default: { // any native i32 + return expr; + } case TypeKind.I64: case TypeKind.U64: { - expr = module.createBinary(BinaryOp.NeI64, expr, module.createI64(0)); - break; + return module.createBinary(BinaryOp.NeI64, expr, module.createI64(0)); } - case TypeKind.USIZE: // TODO: strings + case TypeKind.USIZE: // TODO: strings? case TypeKind.ISIZE: { - if (type.size == 64) { - expr = module.createBinary(BinaryOp.NeI64, expr, module.createI64(0)); - } - break; + return type.size == 64 + ? module.createBinary(BinaryOp.NeI64, expr, module.createI64(0)) + : expr; } case TypeKind.F32: { - expr = module.createBinary(BinaryOp.NeF32, expr, module.createF32(0)); - break; + return module.createBinary(BinaryOp.NeF32, expr, module.createF32(0)); } case TypeKind.F64: { - expr = module.createBinary(BinaryOp.NeF64, expr, module.createF64(0)); - break; + return module.createBinary(BinaryOp.NeF64, expr, module.createF64(0)); } case TypeKind.VOID: { - throw new Error("concrete type expected"); + assert(false); + return module.createI32(0); } } - return expr; } diff --git a/src/types.ts b/src/types.ts index 1fbe74dd..df7dff77 100644 --- a/src/types.ts +++ b/src/types.ts @@ -199,15 +199,17 @@ export class Type { case TypeKind.U8: return "u8"; case TypeKind.U16: return "u16"; case TypeKind.U32: { - return kindOnly || !this.functionType + let functionType = this.functionType; + return kindOnly || !functionType ? "u32" - : this.functionType.toString(true); + : functionType.toString(true); } case TypeKind.U64: return "u64"; case TypeKind.USIZE: { - return kindOnly || !this.classType + let classType = this.classType; + return kindOnly || !classType ? "usize" - : this.classType.toString(); + : classType.toString(); } case TypeKind.BOOL: return "bool"; case TypeKind.F32: return "f32"; @@ -471,8 +473,9 @@ export class Signature { /** Gets the known or, alternatively, generic parameter name at the specified index. */ getParameterName(index: i32): string { - return this.parameterNames && this.parameterNames.length > index - ? this.parameterNames[index] + var parameterNames = this.parameterNames; + return parameterNames && parameterNames.length > index + ? parameterNames[index] : getGenericParameterName(index); } @@ -580,8 +583,8 @@ var cachedGenericParameterNames: string[] | null = null; /** Gets the cached generic parameter name for the specified index. */ export function getGenericParameterName(index: i32): string { if (!cachedGenericParameterNames) cachedGenericParameterNames = []; - for (let i = cachedGenericParameterNames.length; i < index; ++i) { + for (let i = cachedGenericParameterNames.length; i <= index; ++i) { cachedGenericParameterNames.push("arg$" + i.toString(10)); } - return cachedGenericParameterNames[index]; + return cachedGenericParameterNames[index - 1]; } diff --git a/tests/allocators/arena/untouched.wat b/tests/allocators/arena/untouched.wat index 841249b0..c99c1b9c 100644 --- a/tests/allocators/arena/untouched.wat +++ b/tests/allocators/arena/untouched.wat @@ -21,7 +21,6 @@ (local $4 i32) (local $5 i32) (local $6 i32) - (local $7 i32) ;;@ (lib)/allocator/arena.ts:14:2 (if ;;@ (lib)/allocator/arena.ts:14:6 @@ -108,7 +107,7 @@ ) ) ;;@ (lib)/allocator/arena.ts:20:4 - (set_local $7 + (set_local $5 ;;@ (lib)/allocator/arena.ts:20:22 (select (tee_local $5 @@ -131,7 +130,7 @@ (i32.lt_s (grow_memory ;;@ (lib)/allocator/arena.ts:21:20 - (get_local $7) + (get_local $5) ) ;;@ (lib)/allocator/arena.ts:21:35 (i32.const 0) diff --git a/tests/allocators/buddy/untouched.wat b/tests/allocators/buddy/untouched.wat index cac0d8f6..176d3838 100644 --- a/tests/allocators/buddy/untouched.wat +++ b/tests/allocators/buddy/untouched.wat @@ -1,7 +1,7 @@ (module (type $i (func (result i32))) - (type $iiiiv (func (param i32 i32 i32 i32))) (type $ii (func (param i32) (result i32))) + (type $iiiiv (func (param i32 i32 i32 i32))) (type $iv (func (param i32))) (type $iiv (func (param i32 i32))) (type $iii (func (param i32 i32) (result i32))) diff --git a/tests/allocators/tlsf/optimized.wat b/tests/allocators/tlsf/optimized.wat index df502b7a..700299b1 100644 --- a/tests/allocators/tlsf/optimized.wat +++ b/tests/allocators/tlsf/optimized.wat @@ -1,8 +1,8 @@ (module + (type $ii (func (param i32) (result i32))) (type $iiv (func (param i32 i32))) (type $iiiv (func (param i32 i32 i32))) (type $iiiiv (func (param i32 i32 i32 i32))) - (type $ii (func (param i32) (result i32))) (type $iiii (func (param i32 i32 i32) (result i32))) (type $iii (func (param i32 i32) (result i32))) (type $iv (func (param i32))) @@ -1062,7 +1062,7 @@ ;;@ (lib)/allocator/tlsf.ts:367:6 (i32.store ;;@ (lib)/allocator/tlsf.ts:366:6 - (tee_local $0 + (tee_local $2 ;;@ (lib)/allocator/tlsf.ts:366:25 (call "$(lib)/allocator/tlsf/Block#get:right" ;;@ (lib)/allocator/tlsf.ts:366:32 @@ -1072,7 +1072,7 @@ (i32.and ;;@ (lib)/allocator/tlsf.ts:367:6 (i32.load - (get_local $0) + (get_local $2) ) (i32.const -3) ) @@ -1109,7 +1109,7 @@ ;;@ (lib)/allocator/tlsf.ts:444:11 (tee_local $2 ;;@ (lib)/allocator/tlsf.ts:443:4 - (tee_local $4 + (tee_local $1 ;;@ (lib)/allocator/tlsf.ts:443:21 (i32.and (i32.add @@ -1139,7 +1139,7 @@ (if ;;@ (lib)/allocator/tlsf.ts:447:28 (i32.lt_u - (get_local $1) + (get_local $3) ;;@ (lib)/allocator/tlsf.ts:447:33 (i32.const 22) ) @@ -1149,12 +1149,12 @@ ;;@ (lib)/allocator/tlsf.ts:448:6 (get_local $2) ;;@ (lib)/allocator/tlsf.ts:448:20 - (get_local $1) + (get_local $3) ;;@ (lib)/allocator/tlsf.ts:448:24 (i32.const 0) ) ;;@ (lib)/allocator/tlsf.ts:449:11 - (set_local $3 + (set_local $4 ;;@ (lib)/allocator/tlsf.ts:449:25 (i32.const 0) ) @@ -1162,7 +1162,7 @@ (if ;;@ (lib)/allocator/tlsf.ts:449:28 (i32.lt_u - (get_local $3) + (get_local $4) ;;@ (lib)/allocator/tlsf.ts:449:33 (i32.const 32) ) @@ -1172,17 +1172,17 @@ ;;@ (lib)/allocator/tlsf.ts:450:8 (get_local $2) ;;@ (lib)/allocator/tlsf.ts:450:21 - (get_local $1) - ;;@ (lib)/allocator/tlsf.ts:450:25 (get_local $3) + ;;@ (lib)/allocator/tlsf.ts:450:25 + (get_local $4) ;;@ (lib)/allocator/tlsf.ts:450:29 (i32.const 0) ) ;;@ (lib)/allocator/tlsf.ts:449:42 - (set_local $3 + (set_local $4 (i32.add ;;@ (lib)/allocator/tlsf.ts:449:44 - (get_local $3) + (get_local $4) (i32.const 1) ) ) @@ -1191,10 +1191,10 @@ ) ) ;;@ (lib)/allocator/tlsf.ts:447:42 - (set_local $1 + (set_local $3 (i32.add ;;@ (lib)/allocator/tlsf.ts:447:44 - (get_local $1) + (get_local $3) (i32.const 1) ) ) @@ -1211,7 +1211,7 @@ (i32.and (i32.add ;;@ (lib)/allocator/tlsf.ts:453:20 - (get_local $4) + (get_local $1) (i32.const 2923) ) (i32.const -8) @@ -1296,12 +1296,12 @@ (select (tee_local $1 ;;@ (lib)/allocator/tlsf.ts:465:6 - (tee_local $4 + (tee_local $3 ;;@ (lib)/allocator/tlsf.ts:465:24 (current_memory) ) ) - (tee_local $3 + (tee_local $4 ;;@ (lib)/allocator/tlsf.ts:466:6 (tee_local $5 ;;@ (lib)/allocator/tlsf.ts:466:24 @@ -1323,7 +1323,7 @@ ) (i32.gt_s (get_local $1) - (get_local $3) + (get_local $4) ) ) ) @@ -1352,7 +1352,7 @@ (get_local $2) ;;@ (lib)/allocator/tlsf.ts:474:21 (i32.shl - (get_local $4) + (get_local $3) ;;@ (lib)/allocator/tlsf.ts:474:43 (i32.const 16) ) diff --git a/tests/allocators/tlsf/untouched.wat b/tests/allocators/tlsf/untouched.wat index 05eeedac..c9dc3ba2 100644 --- a/tests/allocators/tlsf/untouched.wat +++ b/tests/allocators/tlsf/untouched.wat @@ -1,9 +1,9 @@ (module (type $i (func (result i32))) (type $iiiiv (func (param i32 i32 i32 i32))) + (type $ii (func (param i32) (result i32))) (type $iiv (func (param i32 i32))) (type $iiiv (func (param i32 i32 i32))) - (type $ii (func (param i32) (result i32))) (type $iiii (func (param i32 i32 i32) (result i32))) (type $iii (func (param i32 i32) (result i32))) (type $iv (func (param i32))) @@ -370,7 +370,6 @@ (local $6 i32) (local $7 i32) (local $8 i32) - (local $9 i32) ;;@ (lib)/allocator/tlsf.ts:255:4 (set_local $2 ;;@ (lib)/allocator/tlsf.ts:255:20 @@ -596,7 +595,7 @@ ;;@ (lib)/allocator/tlsf.ts:282:17 (block ;;@ (lib)/allocator/tlsf.ts:283:8 - (set_local $9 + (set_local $4 ;;@ (lib)/allocator/tlsf.ts:283:25 (call "$(lib)/allocator/tlsf/Root#getSLMap" ;;@ (lib)/allocator/tlsf.ts:283:20 @@ -612,9 +611,9 @@ ;;@ (lib)/allocator/tlsf.ts:284:22 (get_local $5) ;;@ (lib)/allocator/tlsf.ts:284:26 - (tee_local $9 + (tee_local $4 (i32.and - (get_local $9) + (get_local $4) ;;@ (lib)/allocator/tlsf.ts:284:35 (i32.xor ;;@ (lib)/allocator/tlsf.ts:284:36 @@ -634,7 +633,7 @@ ;;@ (lib)/allocator/tlsf.ts:287:12 (i32.eqz ;;@ (lib)/allocator/tlsf.ts:287:13 - (get_local $9) + (get_local $4) ) ;;@ (lib)/allocator/tlsf.ts:287:20 (i32.store @@ -805,7 +804,6 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) ;;@ (lib)/allocator/tlsf.ts:187:4 (if (i32.eqz @@ -999,7 +997,7 @@ ;;@ (lib)/allocator/tlsf.ts:208:31 (block ;;@ (lib)/allocator/tlsf.ts:209:6 - (set_local $7 + (set_local $4 ;;@ (lib)/allocator/tlsf.ts:209:24 (if (result i32) (i32.eqz @@ -1023,10 +1021,10 @@ ) ) ;;@ (lib)/allocator/tlsf.ts:210:6 - (set_local $8 + (set_local $7 ;;@ (lib)/allocator/tlsf.ts:210:21 (i32.load - (get_local $7) + (get_local $4) ) ) ;;@ (lib)/allocator/tlsf.ts:211:6 @@ -1034,7 +1032,7 @@ (i32.eqz ;;@ (lib)/allocator/tlsf.ts:211:13 (i32.and - (get_local $8) + (get_local $7) ;;@ (lib)/allocator/tlsf.ts:211:24 (i32.const 1) ) @@ -1054,16 +1052,16 @@ ;;@ (lib)/allocator/tlsf.ts:212:6 (get_local $0) ;;@ (lib)/allocator/tlsf.ts:212:18 - (get_local $7) + (get_local $4) ) ;;@ (lib)/allocator/tlsf.ts:213:6 (i32.store - (get_local $7) + (get_local $4) ;;@ (lib)/allocator/tlsf.ts:213:18 - (tee_local $8 + (tee_local $7 (i32.add ;;@ (lib)/allocator/tlsf.ts:213:19 - (get_local $8) + (get_local $7) ;;@ (lib)/allocator/tlsf.ts:213:31 (i32.add (i32.const 8) @@ -1085,12 +1083,12 @@ ;;@ (lib)/allocator/tlsf.ts:214:6 (set_local $1 ;;@ (lib)/allocator/tlsf.ts:214:14 - (get_local $7) + (get_local $4) ) ;;@ (lib)/allocator/tlsf.ts:215:6 (set_local $2 ;;@ (lib)/allocator/tlsf.ts:215:18 - (get_local $8) + (get_local $7) ) ) ) @@ -1132,7 +1130,7 @@ ;;@ (lib)/allocator/tlsf.ts:224:11 (i32.and (if (result i32) - (tee_local $4 + (tee_local $7 (i32.ge_u (get_local $3) ;;@ (lib)/allocator/tlsf.ts:224:19 @@ -1145,7 +1143,7 @@ ;;@ (lib)/allocator/tlsf.ts:224:44 (i32.const 1073741824) ) - (get_local $4) + (get_local $7) ) (i32.const 1) ) @@ -1173,12 +1171,12 @@ ;;@ (lib)/allocator/tlsf.ts:228:24 (block ;;@ (lib)/allocator/tlsf.ts:229:6 - (set_local $9 + (set_local $8 ;;@ (lib)/allocator/tlsf.ts:229:11 (i32.const 0) ) ;;@ (lib)/allocator/tlsf.ts:230:6 - (set_local $10 + (set_local $9 ;;@ (lib)/allocator/tlsf.ts:230:11 (i32.div_u ;;@ (lib)/allocator/tlsf.ts:230:17 @@ -1191,7 +1189,7 @@ ;;@ (lib)/allocator/tlsf.ts:231:11 (block ;;@ (lib)/allocator/tlsf.ts:232:6 - (set_local $9 + (set_local $8 ;;@ (lib)/allocator/tlsf.ts:232:11 (call "$(lib)/allocator/tlsf/fls" ;;@ (lib)/allocator/tlsf.ts:232:22 @@ -1199,7 +1197,7 @@ ) ) ;;@ (lib)/allocator/tlsf.ts:233:6 - (set_local $10 + (set_local $9 ;;@ (lib)/allocator/tlsf.ts:233:11 (i32.xor ;;@ (lib)/allocator/tlsf.ts:233:17 @@ -1209,7 +1207,7 @@ ;;@ (lib)/allocator/tlsf.ts:233:26 (i32.sub ;;@ (lib)/allocator/tlsf.ts:233:27 - (get_local $9) + (get_local $8) ;;@ (lib)/allocator/tlsf.ts:233:32 (i32.const 5) ) @@ -1224,9 +1222,9 @@ ) ) ;;@ (lib)/allocator/tlsf.ts:234:6 - (set_local $9 + (set_local $8 (i32.sub - (get_local $9) + (get_local $8) ;;@ (lib)/allocator/tlsf.ts:234:12 (i32.sub (i32.const 8) @@ -1238,15 +1236,15 @@ ) ) ;;@ (lib)/allocator/tlsf.ts:238:4 - (set_local $11 + (set_local $10 ;;@ (lib)/allocator/tlsf.ts:238:20 (call "$(lib)/allocator/tlsf/Root#getHead" ;;@ (lib)/allocator/tlsf.ts:238:15 (get_local $0) ;;@ (lib)/allocator/tlsf.ts:238:28 - (get_local $9) + (get_local $8) ;;@ (lib)/allocator/tlsf.ts:238:32 - (get_local $10) + (get_local $9) ) ) ;;@ (lib)/allocator/tlsf.ts:239:4 @@ -1259,15 +1257,15 @@ (i32.store offset=8 (get_local $1) ;;@ (lib)/allocator/tlsf.ts:240:17 - (get_local $11) + (get_local $10) ) ;;@ (lib)/allocator/tlsf.ts:241:4 (if ;;@ (lib)/allocator/tlsf.ts:241:8 - (get_local $11) + (get_local $10) ;;@ (lib)/allocator/tlsf.ts:241:14 (i32.store offset=4 - (get_local $11) + (get_local $10) ;;@ (lib)/allocator/tlsf.ts:241:26 (get_local $1) ) @@ -1277,9 +1275,9 @@ ;;@ (lib)/allocator/tlsf.ts:242:4 (get_local $0) ;;@ (lib)/allocator/tlsf.ts:242:17 - (get_local $9) + (get_local $8) ;;@ (lib)/allocator/tlsf.ts:242:21 - (get_local $10) + (get_local $9) ;;@ (lib)/allocator/tlsf.ts:242:25 (get_local $1) ) @@ -1295,7 +1293,7 @@ ;;@ (lib)/allocator/tlsf.ts:245:19 (i32.const 1) ;;@ (lib)/allocator/tlsf.ts:245:24 - (get_local $9) + (get_local $8) ) ) ) @@ -1304,7 +1302,7 @@ ;;@ (lib)/allocator/tlsf.ts:246:4 (get_local $0) ;;@ (lib)/allocator/tlsf.ts:246:18 - (get_local $9) + (get_local $8) ;;@ (lib)/allocator/tlsf.ts:246:22 (i32.or ;;@ (lib)/allocator/tlsf.ts:246:27 @@ -1312,14 +1310,14 @@ ;;@ (lib)/allocator/tlsf.ts:246:22 (get_local $0) ;;@ (lib)/allocator/tlsf.ts:246:36 - (get_local $9) + (get_local $8) ) ;;@ (lib)/allocator/tlsf.ts:246:42 (i32.shl ;;@ (lib)/allocator/tlsf.ts:246:43 (i32.const 1) ;;@ (lib)/allocator/tlsf.ts:246:48 - (get_local $10) + (get_local $9) ) ) ) @@ -1869,7 +1867,7 @@ ;;@ (lib)/allocator/tlsf.ts:314:16 (block ;;@ (lib)/allocator/tlsf.ts:316:6 - (set_local $7 + (set_local $2 ;;@ (lib)/allocator/tlsf.ts:316:18 (i32.and (i32.load @@ -1898,7 +1896,7 @@ ;;@ (lib)/allocator/tlsf.ts:317:10 (i32.eqz ;;@ (lib)/allocator/tlsf.ts:317:11 - (get_local $7) + (get_local $2) ) ;;@ (lib)/allocator/tlsf.ts:318:8 (set_local $6 @@ -1912,7 +1910,7 @@ ;;@ (lib)/allocator/tlsf.ts:320:13 (call "$(lib)/allocator/tlsf/ffs" ;;@ (lib)/allocator/tlsf.ts:320:24 - (get_local $7) + (get_local $2) ) ) ;;@ (lib)/allocator/tlsf.ts:321:8 @@ -1920,7 +1918,7 @@ ;;@ (lib)/allocator/tlsf.ts:321:16 (if (result i32) (i32.eqz - (tee_local $2 + (tee_local $7 ;;@ (lib)/allocator/tlsf.ts:321:28 (call "$(lib)/allocator/tlsf/Root#getSLMap" ;;@ (lib)/allocator/tlsf.ts:321:23 @@ -1939,7 +1937,7 @@ ) (unreachable) ) - (get_local $2) + (get_local $7) ) ) ;;@ (lib)/allocator/tlsf.ts:322:8 @@ -1985,8 +1983,6 @@ (local $3 i32) (local $4 i32) (local $5 i32) - (local $6 i32) - (local $7 i32) ;;@ (lib)/allocator/tlsf.ts:345:4 (set_local $3 ;;@ (lib)/allocator/tlsf.ts:345:20 @@ -2127,7 +2123,7 @@ ) ) ;;@ (lib)/allocator/tlsf.ts:357:6 - (set_local $6 + (set_local $4 ;;@ (lib)/allocator/tlsf.ts:357:18 (i32.add ;;@ (lib)/allocator/tlsf.ts:358:8 @@ -2142,7 +2138,7 @@ ) ;;@ (lib)/allocator/tlsf.ts:360:6 (i32.store - (get_local $6) + (get_local $4) ;;@ (lib)/allocator/tlsf.ts:360:19 (i32.or (i32.sub @@ -2160,7 +2156,7 @@ ;;@ (lib)/allocator/tlsf.ts:361:6 (get_local $0) ;;@ (lib)/allocator/tlsf.ts:361:18 - (get_local $6) + (get_local $4) ) ) ;;@ (lib)/allocator/tlsf.ts:364:11 @@ -2180,7 +2176,7 @@ ) ) ;;@ (lib)/allocator/tlsf.ts:366:6 - (set_local $7 + (set_local $4 ;;@ (lib)/allocator/tlsf.ts:366:25 (if (result i32) (i32.eqz @@ -2205,10 +2201,10 @@ ) ;;@ (lib)/allocator/tlsf.ts:367:6 (i32.store - (get_local $7) + (get_local $4) (i32.and (i32.load - (get_local $7) + (get_local $4) ) ;;@ (lib)/allocator/tlsf.ts:367:20 (i32.xor @@ -2241,8 +2237,6 @@ (local $8 i32) (local $9 i32) (local $10 i32) - (local $11 i32) - (local $12 i32) ;;@ (lib)/allocator/tlsf.ts:441:2 (set_local $1 ;;@ (lib)/allocator/tlsf.ts:441:13 @@ -2435,7 +2429,7 @@ (set_local $0 ;;@ (lib)/allocator/tlsf.ts:459:11 (select - (tee_local $6 + (tee_local $2 ;;@ (lib)/allocator/tlsf.ts:459:22 (i32.and (i32.add @@ -2452,18 +2446,18 @@ ) ) ) - (tee_local $7 + (tee_local $6 ;;@ (lib)/allocator/tlsf.ts:459:51 (i32.const 16) ) (i32.gt_u + (get_local $2) (get_local $6) - (get_local $7) ) ) ) ;;@ (lib)/allocator/tlsf.ts:461:4 - (set_local $8 + (set_local $2 ;;@ (lib)/allocator/tlsf.ts:461:21 (call "$(lib)/allocator/tlsf/Root#search" ;;@ (lib)/allocator/tlsf.ts:461:16 @@ -2477,17 +2471,17 @@ ;;@ (lib)/allocator/tlsf.ts:462:8 (i32.eqz ;;@ (lib)/allocator/tlsf.ts:462:9 - (get_local $8) + (get_local $2) ) ;;@ (lib)/allocator/tlsf.ts:462:16 (block ;;@ (lib)/allocator/tlsf.ts:465:6 - (set_local $9 + (set_local $6 ;;@ (lib)/allocator/tlsf.ts:465:24 (current_memory) ) ;;@ (lib)/allocator/tlsf.ts:466:6 - (set_local $10 + (set_local $7 ;;@ (lib)/allocator/tlsf.ts:466:24 (i32.shr_u (i32.and @@ -2510,20 +2504,20 @@ ) ) ;;@ (lib)/allocator/tlsf.ts:467:6 - (set_local $11 + (set_local $8 ;;@ (lib)/allocator/tlsf.ts:467:24 (select - (tee_local $6 + (tee_local $8 ;;@ (lib)/allocator/tlsf.ts:467:28 - (get_local $9) + (get_local $6) ) - (tee_local $7 + (tee_local $9 ;;@ (lib)/allocator/tlsf.ts:467:41 - (get_local $10) + (get_local $7) ) (i32.gt_s - (get_local $6) - (get_local $7) + (get_local $8) + (get_local $9) ) ) ) @@ -2533,7 +2527,7 @@ (i32.lt_s (grow_memory ;;@ (lib)/allocator/tlsf.ts:468:22 - (get_local $11) + (get_local $8) ) ;;@ (lib)/allocator/tlsf.ts:468:37 (i32.const 0) @@ -2544,7 +2538,7 @@ (i32.lt_s (grow_memory ;;@ (lib)/allocator/tlsf.ts:469:24 - (get_local $10) + (get_local $7) ) ;;@ (lib)/allocator/tlsf.ts:469:39 (i32.const 0) @@ -2554,7 +2548,7 @@ ) ) ;;@ (lib)/allocator/tlsf.ts:473:6 - (set_local $12 + (set_local $9 ;;@ (lib)/allocator/tlsf.ts:473:23 (current_memory) ) @@ -2565,24 +2559,24 @@ (get_local $1) ;;@ (lib)/allocator/tlsf.ts:474:21 (i32.shl - (get_local $9) + (get_local $6) ;;@ (lib)/allocator/tlsf.ts:474:43 (i32.const 16) ) ;;@ (lib)/allocator/tlsf.ts:474:47 (i32.shl - (get_local $12) + (get_local $9) ;;@ (lib)/allocator/tlsf.ts:474:68 (i32.const 16) ) ) ) ;;@ (lib)/allocator/tlsf.ts:475:6 - (set_local $8 + (set_local $2 ;;@ (lib)/allocator/tlsf.ts:475:14 (if (result i32) (i32.eqz - (tee_local $6 + (tee_local $10 ;;@ (lib)/allocator/tlsf.ts:475:26 (call "$(lib)/allocator/tlsf/Root#search" ;;@ (lib)/allocator/tlsf.ts:475:21 @@ -2601,7 +2595,7 @@ ) (unreachable) ) - (get_local $6) + (get_local $10) ) ) ) @@ -2614,7 +2608,7 @@ (i32.and ;;@ (lib)/allocator/tlsf.ts:478:12 (i32.load - (get_local $8) + (get_local $2) ) ;;@ (lib)/allocator/tlsf.ts:478:25 (i32.xor @@ -2644,7 +2638,7 @@ ;;@ (lib)/allocator/tlsf.ts:479:11 (get_local $1) ;;@ (lib)/allocator/tlsf.ts:479:20 - (get_local $8) + (get_local $2) ;;@ (lib)/allocator/tlsf.ts:479:27 (get_local $0) )